<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>N-webdesign blog</title>
		<link>http://www.n-webdesign.co.uk/blog/</link>
		<atom:link href="http://www.n-webdesign.co.uk/blog/" rel="self" type="application/rss+xml" />
		<description></description>

		
		<item>
			<title>Google AdWords, KeyWords and FWords</title>
			<link>http://www.n-webdesign.co.uk/google-adwords-keywords-and-fwords/</link>
			<description>&lt;p&gt;I get asked a lot about helping people with AdWords, keywords and managing their pay-per-click account.&lt;/p&gt;&lt;p&gt;Some people haven't got the time or the knowledge or the manpower to do it themselves, so they happily let other companies get involved.&lt;/p&gt;&lt;p&gt;Some people see pay-per-click as expensive and decide to reduce the overhead and manage it themselves. This is normally ok in principle, but if you've used AdWords, you'll know that it is far from setting a budget, creating an ad and clicking 'enabled'.&lt;/p&gt;&lt;p&gt;So, what is AdWords and PPC advertising? Well we probably already know. It's the process of paying a search engine [although we are talking mainly about the big player here, namely Google] to show your ad in sponsored links when someone searches for a keyword you have chosen. There is a lot more to it than that, but you get the idea.&lt;/p&gt;&lt;p&gt;That seems pretty straightforward. You choose keywords, and Google have a really simple keyword generator inside the AdWords app, you set a budget and you're selling. How cool is that. Except, it is normally followed by Google bursting your proud bubble and telling you your keywords are poor, your bids are too low and there are 100 other better keywords that will increase your chances of success.&lt;/p&gt;&lt;p&gt;Ok, so what does this mean? Does it mean I don't know what I'm doing and should get an expert on the case? Should I give up entirely? Well, no, it doesn't mean that at all. What Google is doing is trying to help you promote your web site better, smarter and more efficiently.&lt;/p&gt;&lt;p&gt;Here's what is going on.&lt;/p&gt;&lt;p&gt;You have a web site. It may or may not be optimised for keywords. You have 2 options.&lt;/p&gt;&lt;p&gt;You grab all the keywords you think match what your site is all about and add them, create an ad and get going.&lt;br /&gt;You ask Google to get keywords for you from a page on your site, create an add and get going. &lt;/p&gt;&lt;p&gt;You wait a day or so, because AdWords stats aren't real time. You see what is happening.&lt;/p&gt;&lt;p&gt;It rarely makes great reading first time round. Even with a pretty well optimised site, you'll still get some criticism about your keywords and where the ad points.&lt;/p&gt;&lt;p&gt;So you have keywords, a budget, an ad. That's it isn't it?&lt;/p&gt;&lt;p&gt;No. It's just a toe in the water in reality.&lt;/p&gt;&lt;p&gt;Let's get serious about AdWords. It is all about choosing the keywords that match your business or product, testing them in real time and looking at the reports. You need to really understand what is coming back and how it relates to the keywords, your ads and the landing page you have chosen.&lt;/p&gt;&lt;p&gt;I'm sorry guys. Effective pay-per-click is all about analysis, number crunching and targetted keywords. It is time consuming and takes organisation and, like most marketing, it is trial and error, sometimes learning some harsh lessons. You need to be reflective, self critical and no too sensetive. After all, it's just a machine telling you that you [might] suck. Not a real person.&lt;/p&gt;&lt;p&gt;Understanding, at least superficially, what AdWords are doing is important. It is also useful to understand what is happening when you create an ad and how it is received.&lt;/p&gt;&lt;p&gt;Google is a search engine. It loves and respect meaningful content and information about a subject, based on a keyword. Although it's a commercial entity, it includes this ethos when processing pay-per-click.&lt;/p&gt;&lt;p&gt;The process of keyword -&amp;gt; ad -&amp;gt; web page is very simple to understand but very significant in how the keyword relates to the content.&lt;/p&gt;&lt;p&gt;A well chosen keyword that relates to a relevant page, based on Googles database ranking of course, means less cost per click, a better position in sponsored ads and a more effective pay-per-click performance.&lt;/p&gt;&lt;p&gt;So if there ever was a magic bullet or killer technique for better PPC performancee, this is it. Make sure keywords are relevant to the pages the ad points at. Simple. Actually, it may not be that simple. &lt;/p&gt;&lt;p&gt;A totally un-optimised site will still work in a pay-per-click environment, it will just cost more per click and will struggle to get high up in the searches it does qualify for. In some cases, theclicker will wonder what they are doing on your web site because it isn't close to what they were looking for? That isn't good.&lt;/p&gt;&lt;p&gt;Let's look at a simple example.&lt;/p&gt;&lt;p&gt;You sell widgets, gadgets and oozits.&lt;/p&gt;&lt;p&gt;The three best keywords are widgets, gadgets and oozits.&lt;/p&gt;&lt;p&gt;These are 3 different things but you sell them all, so they are relevant and as such, you have 3 web pages, one dedicated to each product.&lt;/p&gt;&lt;p&gt;We assume each is reasonably optimised for the target keyword.&lt;/p&gt;&lt;p&gt;Ok, what next. Well, you choose keywords related to each, but this now means that it is difficult to be precise and target all three effectively with one ad or page, so we deivide the keywords into 'sets'.&lt;/p&gt;&lt;p&gt;So we now have a set of widget keyowords, gadget and oozit ones too.&lt;/p&gt;&lt;p&gt;This means we need at least 3 ads but actally, it prompts us to consider 3 campaigns.&lt;/p&gt;&lt;p&gt;So we now have a widget a gadget and an oozit campaign. We can be more specific an target our keywords dorectly, more effectively and  manage them better. We can also look at different ads for each campaign.&lt;/p&gt;&lt;p&gt;Let's think about widgets. We know from experience that people want different things and as such, search for different widget related keywords. Knowing our industry and looking at the keyword stats, we know the 3 best options are: 'cheap widgets', 'long lasting widgets' and just plain old 'widgets'.&lt;/p&gt;&lt;p&gt;We can now create three ads, select the keywords most appropriate to each ad and ensure we have better targetted and more effective keywords.  We can word our ads accordingly, so when people enter the keyword, they see it in the ad title.&lt;/p&gt;&lt;p&gt;In reality, we could have tens of ads with tens of words each, but the principle is the same. Thought, understanding, analysis and objectivity make AdWords more efficient and therefore mor cost effective. Once you have analysed, optimised and structured your AdWords campains in collaboration with a better set of landing pages, managing them will become far easier and small adjustments will return bigger benefits.  &lt;/p&gt;&lt;p&gt;That's all pretty clear now, but there are also obvious advantages elsewhere if we read between the lines.&lt;/p&gt;&lt;p&gt;First off, the keywords you have chosen for pay-per-click are also the keywords that you would like appear in natural searches for. Yep, you've got it. Google AdWords are giving you a rankings leg-up and also telling you which keywords you need to improve on in your web site. Time for some optimisation methinks. Now you can see why a good CMS is such a hot app for businesses.&lt;/p&gt;&lt;p&gt;Secondly, with pay-per-click, you only pay for a click. You'll notice in your stats that you get anywhere from .001% to 10% click throughs. At 1%, this is 100 impressions per click. This means your name and brand has been exposed 100 times for your £1 or whatever your CPC is. Ask your marketing guys about brand exposure.  It takes someone seeing your brand about 30 times before they notice it in a conscious way. Pay-per-click is helping and, with good keywords, it's the right people seeing your name. Again, this makes the ad all important. They need to see certain things there, at least subconsciously.&lt;/p&gt;&lt;p&gt;So you are going to rip it all up and start again. What do you need to do?&lt;/p&gt;&lt;p&gt;Well, I'd say give us a call on 0161 298 3816 and relax, but there isn't any reason why you can't get meaningful advantages, both directly by click throughs and indirectl by improved page content, by doing it yourself. Here are a few tips:&lt;/p&gt;&lt;p&gt;1. Choose the keywords you want and let Google expand on the related ones. They know what is relevant and important. They respond to billions of searches every day. (I dread to think how big their databases are!).&lt;/p&gt;&lt;p&gt;2. Start small and organised. Blanket keywords will get impressions, but will soon burn up your budget on meaningless and ineffective exposure.&lt;/p&gt;&lt;p&gt;3. Organise keywords into 'sets' that relate well and target keyword relevant pages. Avoid 'carpet bombing'. Remember, AdWords will tell us when we need to work on a few things.&lt;/p&gt;&lt;p&gt;4.  Use campaigns to help organise 'sets' more efficiently and effectively. Remember, different keywords need to point at keyword relevant pages. If you don't have them, create them. (See, a good CMS is again invaluable).&lt;/p&gt;&lt;p&gt;5. Read the results, the mesages and the status. This is easier in a well organised account.&lt;/p&gt;&lt;p&gt;6. Be self critical and prepare to adjust page content regularly, sometimes daily. (You already know, a good CMS...).&lt;/p&gt;&lt;p&gt;7. Build up keywords slowly and consider competition and monthly search volumes when choosing.&lt;/p&gt;&lt;p&gt;8. Hack out the dead wood regularly. This could be ads or keywords. Lots of impressions, no click throughs means the ad isn't working. Sort it out. &lt;/p&gt;&lt;p&gt;9. Use your keywords to constantly improve your web site and expand your content regularly. Yes, a CMS is perfect for this. Go on, you know you want one!&lt;/p&gt;&lt;p&gt;10. Add Google Analytics and monitor click throughs, bounce rates, new visitors and trends. That's another blog for another time, but the basics will show you how effective your campaigns are.&lt;/p&gt;&lt;p&gt;So there you have it. Far from exhaustive, but hopefully it'll give you some food for thought and help you get more from pay-per-click and even accidentally optimise your web site in the process.&lt;/p&gt;&lt;p&gt;Getting better keywords and pay per click management helps bring people to your web site but you still have much to do once they get there. I feel another blog coming on...&lt;/p&gt;&lt;p&gt;I know Google AdWords can be a little like the cockpit of the space shuttle to most people (I don't think many astronaughts read my blogs) but it can be quite easy, if time consming, to manage once you have an objective.&lt;/p&gt;&lt;p&gt;It will take time and will involve lots of work and analysis [PPC Management and SEO isn't expensive for nothing] but the 'feel good' at the end will be woth it.&lt;/p&gt;&lt;p&gt;Thanks for reading.&lt;/p&gt;&lt;p&gt;Ed/&lt;/p&gt;</description>
			<pubDate>Wed, 09 Dec 2009 11:21:00 +0000</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/google-adwords-keywords-and-fwords/</guid>
		</item>
		
		<item>
			<title>Get going with Google Froogle...</title>
			<link>http://www.n-webdesign.co.uk/get-going-with-google-froogle/</link>
			<description>&lt;p&gt;It's probably more well known as Google Base or Google Shopping, but Froogle is still a hugely underused sales tool.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;So, if you don't know, what IS Google Shopping/Base/Froogle?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;It's essentially a way of you telling Google what you sell, so they can show your products when people search for them.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;So why is it so good?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Froogle is good because you can tell Google what you want to sell on-line, and they list it on page 1 of their searches for any relevant search keyword or phrase that matches your product name or description.&lt;/p&gt;&lt;p&gt;I told you it was good, didn't I.&lt;/p&gt;&lt;p&gt;And best of all, it's free. So hang on, it's free and is a fast-track to page 1 listings, why isn't everyone doing it?&lt;/p&gt;&lt;p&gt;I think it is underused because :&lt;/p&gt;&lt;p&gt;1. People don't know about it&lt;br /&gt;2. People don't tell their clients about using it because they don't know about it or can't manage data for it&lt;br /&gt;3. It can be a bit time consuming to manage and uses a complicated Google schema for datafeeds&lt;/p&gt;&lt;p&gt;Well, I've debunked reason 1 &amp;amp; 2. Now you know about it, you should be getting pretty excited abut what it can do to help you.&lt;/p&gt;&lt;p&gt;So just what is involved with a Google Base listing?&lt;/p&gt;&lt;p&gt;You need a Googleaccount. They are free, so get one now.&lt;/p&gt;&lt;p&gt;You need to activate the business solutions base option. Again, this is free so you can go right ahead and get working.&lt;/p&gt;&lt;p&gt;Once you have a Google Base account set up, there are 3 ways you can manage your Google Base items.&lt;/p&gt;&lt;p&gt;1. Type them in manually&lt;br /&gt;2. Upload an XML file with the product data in&lt;br /&gt;3. Point Google at a live RSS/XML feed of your data&lt;/p&gt;&lt;p&gt;There is a time limit of 30 days before feed data expires, so you need to manage the information at least once a month. Any changes to prices and other important information wineed to be done mnually unless you have an automated feed.&lt;/p&gt;&lt;p&gt;The specifics of formatting your internal data in the required format are not within the scope of this blog, but once you have a Google account, you can get all the tips and tricks, as well as the full API specs from the business knowledgebase.&lt;/p&gt;&lt;p&gt;If you only have a small number of products, managing them directly through the Google Base console wil be fine.&lt;/p&gt;&lt;p&gt;If you have a lot of items, you probably want to automate an extract so you can upload or link directly to a feed.&lt;/p&gt;&lt;p&gt;Many E-Commerce applicaions have a Google Base export facility.&lt;/p&gt;&lt;p&gt;We have a .NET library that automates an RSS Feed from any data. Once it's stable, we'll be providing a download and documentation for our asp.net Google Base Module.&lt;/p&gt;&lt;p&gt;Well, that's it. Go get some Google Base if you haven't already.&lt;/p&gt;&lt;p&gt;Ed/&lt;/p&gt;</description>
			<pubDate>Mon, 07 Dec 2009 15:33:00 +0000</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/get-going-with-google-froogle/</guid>
		</item>
		
		<item>
			<title>Surf the [Google] Wave...</title>
			<link>http://www.n-webdesign.co.uk/surf-the-google-wave/</link>
			<description>&lt;p&gt;I'm a bit of a cynic. No, I really am.&lt;/p&gt;&lt;p&gt;I also like really cool and useful new things, including gadgets and trinkets but especially software. And if it's in the clouds, even better...&lt;/p&gt;&lt;p&gt;I hate it when people come up with really obvious ideas, like Google have with Wave, because I get all bitter and twisted about why I didn't think of that.&lt;/p&gt;&lt;p&gt;Ok, I shouldn't beat myself up about it. After all, Google have an [almost] endless pot of resources, including the all important time and money. But this is just a simple mash up of a few aged concepts, a snappy title and a little sprinkle of the, ah yes, the endless Google marketing resource. See the cynic kicked n there.&lt;/p&gt;&lt;p&gt;I'm not sure this would get anywhere close to the heights it will achieve without the Google brand, but it's still a great idea and will be a really useful tool for networking. &lt;/p&gt;&lt;p&gt;So what exactly is Google Wave and why is it going to be good?&lt;/p&gt;&lt;p&gt;Well, Google Wave is a piece of software that runs in a browser, that allows more than one person to  collaborate on a document that can include pictures, text, movies and, well, almost anything electronic.&lt;/p&gt;&lt;p&gt;Imagine MSN, Facebook, Twitter, Skype IM, well, it's like all those, except different.&lt;/p&gt;&lt;p&gt;It's different because it's been crafted and shaped to focus on, errmmm, well, focus. All communication and social networking style apps, like those mentioned above, have some kind of access permission. So does Google Wave. With Twitter you follow, MSN etc, you invite contacts and waffle about things, with Facebook, you just pop in and out and see other people's washing.&lt;/p&gt;&lt;p&gt;My take on social networking is that Twitter is someones opinion, rant or observation that others can read if they want to. That's cool. MSN et al are quite intimate, one to one, friends in the living room, chatting. Again, a great app and indeed the grandfather of IM/Social Networking. Facebook is great at helpin you organise your life a little better. It's quite irreverant, has fun things to do while you are there, so you hang  around some more, bui essentially, a waste of time. Albeit a cool one.&lt;/p&gt;&lt;p&gt;So is Google Wave just another Social Networking app? Well, yes and no. It may well mature and grow into something as vast as Facebook and is probably as snappy as Twitter, although it is wrapped in that clean but  rather sterile Google style GUI. What Google Wave has is that focus. There I go again. What I mean by that is, it is structured so precisely and finely tuned with exactly the right amount of meaningful functionality that it is almost perfect for any Social Networking task. It is also really well suited to collaborative brainstorming and teamwork. That is where I will be using it most.&lt;/p&gt;&lt;p&gt;Yes, you can distribute invites to your 21st birthday party, with maps and everything, but for me, it's going to save many trees because I won't need to 'brainstorm' with post it notes on a wall any more.&lt;/p&gt;&lt;p&gt;I've only had a very brief look at Google Wave, which is in Beta at the moment anyway, and I have no idea which direction Google will want it to go.&lt;/p&gt;&lt;p&gt;The 'product positioning' part of my brain, just next to the bit that likes motorbikes and Halo on the '360, says it will gather as much meaningful information as it can before launch, decide which demographic it is most popular with and steer gently in that direction without really lowering its appeal to other users and groups. This cynic feels his 'product positioning' centre may be moving slowly towards the bit at the back, next to canal boats and gardener's question time.&lt;/p&gt;&lt;p&gt;Read about Google Wave at: &lt;a href=&quot;https://wave.google.com/wave/&quot;&gt;https://wave.google.com/wave/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Thanks for reading.&lt;/p&gt;&lt;p&gt;Ed/&lt;/p&gt;</description>
			<pubDate>Wed, 18 Nov 2009 09:33:00 +0000</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/surf-the-google-wave/</guid>
		</item>
		
		<item>
			<title>Choosing the right CMS</title>
			<link>http://www.n-webdesign.co.uk/choosing-the-right-cms/</link>
			<description>&lt;p&gt;This is a question you will see a lot on the web.&lt;/p&gt;&lt;p&gt;Ask a question like 'What is the best CMS?' and 101 people will give you 101 different answers.&lt;/p&gt;&lt;p&gt;The really simple answer is ask someone to provide one for you. If you want to do it yourself or utilise internal resources, that's cool too. Read on...&lt;/p&gt;&lt;p&gt;CMS applications and frameworks are divided into 2 distinct categories. Those that are free or open source and those that are paid for. Some offerings are free to use, but may charge for the source code. There are very few real differences between free and commercial CMS applications, other than the level of support they offer, the development opportunities available to the user and the cost.  &lt;/p&gt;&lt;p&gt;I have checked out and evaluated many of the more popular offerings, most of which are really good. I do have my favourites and have strongly promoted several that cover both sides of the technology divide, differ in complexity and allow bespoke development without too many constraints.&lt;/p&gt;&lt;p&gt;I'm not going to tell you which one to use. After all, there is a champion for each and every available open source CMS so I don't need to get involved.&lt;/p&gt;&lt;p&gt;So how do you go about choosing one?&lt;/p&gt;&lt;p&gt;First of all, you need to ask yourself a few basic questions.&lt;/p&gt;&lt;p&gt;Asking which is the best CMS is like asking which in the best car or musical instrument. It all depends on what you are going to do with it. It mght well be a beutiful 1950's Sunburst Les Paul, but it's useless in the brass section.&lt;/p&gt;&lt;p&gt;So, in order to help you decide, you need to ask yourself:&lt;/p&gt;&lt;p&gt;Who will be administrating my CMS?&lt;br /&gt;Where am I hosting it?&lt;br /&gt;Who will be updating it?&lt;br /&gt;What content will it need to have?&lt;br /&gt;Will pages be added regularly?&lt;br /&gt;Which technology path am I following?&lt;br /&gt;How soon do I need to be up and running?&lt;/p&gt;&lt;p&gt;So why these questions?&lt;/p&gt;&lt;p&gt;Well, [in no particular order] you need to assess your level of competance or the level of competance of the person who will be installing, configuring and skinning the site. &lt;/p&gt;&lt;p&gt;Trust me, there is a steep learning curve with content management systems. &lt;/p&gt;&lt;p&gt;If you are a programmer or have a good knowledge of html/css and computers, you'll probably get to intermediate pretty quickly, so don't be put off by something that at first glance looks totally unfathomable. Just expect a few long, frustrating evenings.&lt;/p&gt;&lt;p&gt;If you are a developer or run web sites already, you'll probably have a pre-determined group of applications in mind. Yes, I'm talking about Microsoft v Linux. Or more specifically, .NET/MSSQL or PHP/MySql.&lt;/p&gt;&lt;p&gt;Ask this question 4 or 5 years ago, this would have be a no-brainer. If you wanted an open source anything, it was all PHP based. There were a few asp offerings, but they were nowhere near the maturity of the PHP based apps. Now that has all changed.&lt;/p&gt;&lt;p&gt;With a different attitude to open source software and with asp.net becoming more mature, we are seeing some really useful asp.net based CMS frameworks out there.&lt;/p&gt;&lt;p&gt;So, decide which technology works best for you. This is considering templating, hosting, administration, integration and most of all, comfort. After all, whatever you choose, it only sends out html, so as long as you are comfortable with the environment, that's a good choice.&lt;/p&gt;&lt;p&gt;Because many CMS applications are now quite mature, they offer so many things out of the box. You should get most things you need, including friendly urls, blogs, news, galleries and a lots more. This means you should be able to cater for most basic web site requirements by simply installing the cms, setting it up and skinning it.&lt;/p&gt;&lt;p&gt;If you or your clients want something a little bit extra, you need to consider a few more things.&lt;/p&gt;&lt;p&gt;You now start to see why your technology choice is important. If you need something out or the scope of the base install, modules or extensions, you'll probably need to roll your sleeves up and get stuck in with some dev work.&lt;/p&gt;&lt;p&gt;At this point, it's important to understand how your chosen CMS will react to changes. Can you work in modules or extensions without changing the underlying application? If not, you are slowly moving away from the project dev tree, which can mean you may be isolated and restricted when appling changes and updates. This is certainly a real consideration for users wishing to extend cms frameworks. Why is moving away from the base application a bad thing? Well, it means you lose the simplicity of upgrading based on the original source, which means you may miss important things like bug fixes, security enhancements and most of all, features and functionality. You can still make it all work, it'll just take some work to patch it all together.   &lt;/p&gt;&lt;p&gt;So, we've highlighted some of the things for consideration. Here are the tips to help when choosing a CMS.&lt;/p&gt;&lt;p&gt;1. Make sure the chosen framework has everything, within reason, that you need to work for your site.&lt;/p&gt;&lt;p&gt;2. A good sign is an active group of contributors and good help resources, reflecting a well maintained application.&lt;/p&gt;&lt;p&gt;3. Check web sites that are using the CMS. Do they all look the same or are they truly expressive?&lt;/p&gt;&lt;p&gt;4. Play with the admin section. Does it make sense? Will the least experienced user be able to use it?&lt;/p&gt;&lt;p&gt;5. Can you add things to the CMS without changing the original code? Does it support modular development if I need to add to the site?&lt;/p&gt;&lt;p&gt;6. Will the site give me tools for SEO?&lt;/p&gt;&lt;p&gt;So there you have it. Far from a completely exhaustive list but hopefully there are some helpful things to consider.&lt;/p&gt;&lt;p&gt;Thanks for reading.&lt;/p&gt;</description>
			<pubDate>Fri, 23 Oct 2009 10:52:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/choosing-the-right-cms/</guid>
		</item>
		
		<item>
			<title>Code snippets: A really easy javascript accessibility text size selector </title>
			<link>http://www.n-webdesign.co.uk/code-snippets-a-really-easy-javascript-accessibility-text-size-selector/</link>
			<description>&lt;p&gt;&lt;strong&gt;A client asked me recently about upgrades to a web application. One of the required upgrades was to add text sizing.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If you don't know what this is, it's just putting some options in place to allow the web site visitor to choose which font size they use to view your web site. You can see this example in action over there &amp;gt;&amp;gt;&amp;gt;&lt;/p&gt;&lt;p&gt;Many modern browsers let you do this, but adding the option to your web site alows the visitor easy access to the functionality.&lt;/p&gt;&lt;p&gt;So, we sat down and I discussed the presentation with the designer.&lt;/p&gt;&lt;p&gt;I suggested a little paragraph in the sidebar that said something like:&lt;/p&gt;&lt;p&gt;Text size: a b c.&lt;/p&gt;&lt;p&gt;We decided against the +/- option, as it can get a bit stupid and I think 3 presented sizes are enough.&lt;/p&gt;&lt;p&gt;I thought a little bit more about how to implement this, the requirements being:&lt;/p&gt;&lt;p&gt;Simple&lt;br /&gt;Re-usable&lt;br /&gt;Client side&lt;/p&gt;&lt;p&gt;So, the decision was to offer 3 links, one for each size option, set a cookie to remember the selection next time, and using javascript/css only.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Here's how we did it.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;We use some prototype functions to help with events and element manipulation, so you need to get rototype and reference it in your html page.&lt;/p&gt;&lt;p&gt;You can download and read about prototype at &lt;a href=&quot;http://www.prototypejs.org/&quot;&gt;http://www.prototypejs.org/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Reference it in your html page like:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;lt;script src=&quot;prototype.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;So, you can make a test web page, referencing prototype, using the code below:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&amp;gt;&lt;br /&gt;&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;A simple font re-sizer using prototype and js&amp;lt;/title&amp;gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script src=&quot;prototype.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;Some content?&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;Ok, so far, so good. Next we need to create our own javascript handler file and add some other stuff, such as cookie handling that I don't think prototype does? (but it might. I have never looked).&lt;/p&gt;&lt;p&gt;So, our file will need to have an event listener to check for the page loading. Create a file called something like resize.js. It will look something like:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;Event.observe(window, 'load', function() &lt;br /&gt;{  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;some-function-call-here();&lt;br /&gt;});&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;You can also add a reference to this .js file in the html file by adding:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;&amp;lt;script src=&quot;resize.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;...to the head of the html example.&lt;/p&gt;&lt;p&gt;Next, we need to create a function that sets the font size based on a passed value. So, we add something like:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;function setFontSize(size)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Set the font size here...&lt;br /&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;So how do we change the global font size?&lt;/p&gt;&lt;p&gt;I decided that adding something like 'style=&quot;font-size:0.9em;&quot;' in the body or main wrapper tag would work and also let us use some of prototype's great functionality to handle setting the style.&lt;/p&gt;&lt;p&gt;Now we are going to use prototype's $() method to help us, so we need to add something to the setFontSize function, so it uses the size passed in, like:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;function setFontSize(size)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var sSize = size+&quot;px&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$('app').style.fontSize = sSize;&lt;br /&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;This uses pixels, but you could use ems too (this site now uses this example based around ems). &lt;/p&gt;&lt;p&gt;Note we use $('app') to reference something that we set the style of. This is simply a shortcut, provided by prototype, to replace the getElementById() javascript function.&lt;/p&gt;&lt;p&gt;For our example, this means we are applying this style to an element in the dom called 'app', so we need to point it out in the htmlfor prototyp to find by giving something an id=&quot;app&quot; attribute.&lt;/p&gt;&lt;p&gt;You can target anything in the html, but the body tag or an outer wrapper div will work best. If, for any reason, your body tag already has an id for something else, just use that in the function call instead of 'app'.&lt;/p&gt;&lt;p&gt;Either way, the body tag in your html should look something like:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;&amp;lt;body id=&quot;app&quot;&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;So if we now update the main event handler to call the resizing function, we now have:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;Event.observe(window, 'load', function() &lt;br /&gt;{  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;setFontSize(12);&lt;br /&gt;});&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;If you open the .html file in a browser, you should see some text and no errors. You can now see if the javascript we have added works. Simply change the parameter in the function call inside the event listener to something like 25. The text hould be huge. If it is, we know it's ok so far.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Great, that worked first time for me too.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Now we have done that, we have a few issues we need to resolve.&lt;/p&gt;&lt;p&gt;We need to add something to allow a resize to be done manually and also to 'remember' the size change.&lt;/p&gt;&lt;p&gt;Let's do the manual re-size first.&lt;/p&gt;&lt;p&gt;This is really simple.&lt;/p&gt;&lt;p&gt;In the body of the html file, add a paragraph like:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;&amp;lt;p&amp;gt;Text: &amp;lt;a href=&quot;#&quot; style=&quot;font-size:15px;&quot; onclick=&quot;setFontSize(15);&quot;&amp;gt;15&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;/p&gt;&lt;/div&gt; &lt;/p&gt;&lt;p&gt;Now save and reload the html file. Click the link, the font size changes. Cool.&lt;/p&gt;&lt;p&gt;You can use your own formatting and presentation, but here is a nice sample, offering 3 size options. Remember, you can use as many as you like in your own apps:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;&amp;lt;p&amp;gt;&lt;br /&gt;Text:size:  &amp;lt;a href=&quot;#&quot; style=&quot;font-size:13px;&quot; onclick=&quot;setFontSize(13);&quot;&amp;gt;13&amp;lt;/a&amp;gt; &amp;lt;a href=&quot;#&quot; style=&quot;font-size:15px;&quot; onclick=&quot;setFontSize(15);&quot;&amp;gt;15&amp;lt;/a&amp;gt; &amp;lt;a href=&quot;#&quot; style=&quot;font-size:18px;&quot; onclick=&quot;setFontSize(18);&quot;&amp;gt;18&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/p&amp;gt;&lt;/p&gt;&lt;/div&gt; &lt;/p&gt;&lt;p&gt;Try it out. You get 3 options and it is updated immediately when you select. Excellent.&lt;/p&gt;&lt;p&gt;Ok, but each time we reload the page, it defaults back to the base font size, so we need to use cookies to check for any previous size selection and also to store any subsequent selections.&lt;/p&gt;&lt;p&gt;Here are some javascript cookie handlers. add them to your resize.js file above the current content:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;function createCookie(name,value,days) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (days) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var date = new Date();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;date.setTime(date.getTime()+(days*24*60*60*1000));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var expires = &quot;; expires=&quot;+date.toGMTString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var expires = &quot;&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.cookie = name+&quot;=&quot;+value+expires+&quot;; path=/&quot;;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;function readCookie(name) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var nameEQ = name + &quot;=&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var ca = document.cookie.split(';');&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(var i=0;i &amp;lt; ca.length;i++) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var c = ca&lt;em&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (c.charAt(0)==' ') c = c.substring(1,c.length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (c.indexOf(nameEQ) == 0) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return c.substring(nameEQ.length,c.length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return null;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;function eraseCookie(name) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;createCookie(name,&quot;&quot;,-1);&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;I'm not going to cover the cookie handling code apart from saying it allows us to check for and set a cookie using javascript.&lt;/p&gt;&lt;p&gt;We now need to do 2 things.&lt;/p&gt;&lt;p&gt;Check for any existing resize cookie and use the value if it's there.&lt;br /&gt;Add or update the cookie when we call the resize function.&lt;/p&gt;&lt;p&gt;We will do the first requirement by checking for a valid cookie in the load event handler.&lt;/p&gt;&lt;p&gt;By adding an if/else statement, we can check for cookies and fall back on the default value if there isn't one. Change your resize.js so that the Event.observe handler looks like:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;if (readCookie('resize') == null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setFontSize(12);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var size = readCookie('resize');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setFontSize(size);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;Now we have the ability to check for a cookie and use it, we need to add that little extra bit that sets the cookie for us for next time. Edit the setFontSize() function so it looks like:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;function setFontSize(size)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var sSize = size+&quot;px&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$('app').style.fontSize = sSize;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;createCookie('resize', size, 30);&lt;br /&gt;}&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;Now reload the page and test it. You should have 3 opions to resize text which are remembered next time a visitor accesses the page&lt;/p&gt;&lt;p&gt;Here are the 2 pages we used in full.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;resize.html&lt;/strong&gt;&lt;br /&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&amp;gt;&lt;br /&gt;&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;title&amp;gt;A simple font re-sizer using prototype and js&amp;lt;/title&amp;gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script src=&quot;prototype.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;script src=&quot;resize.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;body id=&quot;app&quot;&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;&lt;br /&gt;Text:size:  &amp;lt;a href=&quot;#&quot; style=&quot;font-size:13px;&quot; onclick=&quot;setFontSize(13);&quot;&amp;gt;13&amp;lt;/a&amp;gt; &amp;lt;a href=&quot;#&quot; style=&quot;font-size:18px;&quot; onclick=&quot;setFontSize(18);&quot;&amp;gt;18&amp;lt;/a&amp;gt; &amp;lt;a href=&quot;#&quot; style=&quot;font-size:24px;&quot; onclick=&quot;setFontSize(24);&quot;&amp;gt;24&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;Some content?&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;resize.js&lt;/strong&gt;&lt;br /&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;function createCookie(name,value,days) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (days) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var date = new Date();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;date.setTime(date.getTime()+(days*24*60*60*1000));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var expires = &quot;; expires=&quot;+date.toGMTString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var expires = &quot;&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;document.cookie = name+&quot;=&quot;+value+expires+&quot;; path=/&quot;;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;function readCookie(name) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var nameEQ = name + &quot;=&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var ca = document.cookie.split(';');&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for(var i=0;i &amp;lt; ca.length;i++) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var c = ca&lt;em&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (c.charAt(0)==' ') c = c.substring(1,c.length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (c.indexOf(nameEQ) == 0) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return c.substring(nameEQ.length,c.length);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return null;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;function eraseCookie(name) &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;createCookie(name,&quot;&quot;,-1);&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;Event.observe(window, 'load', function() &lt;br /&gt;{  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (readCookie('resize') == null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setFontSize(12);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var size = readCookie('resize');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setFontSize(size);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;});&lt;/p&gt;&lt;p&gt;function setFontSize(size)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;var sSize = size+&quot;px&quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$('app').style.fontSize = sSize;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;createCookie('resize', size, 30);&lt;br /&gt;}&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt; &lt;/p&gt;&lt;p&gt;And that's it. Simple text re-sizing in the client using client side javascript which can be used in almost any web site, application and project.&lt;/p&gt;&lt;p&gt;It has been tested and works ok in IE7+ and Firefox but should also be fine in other versions plus Safari/Opera/IceWeasel etc.&lt;/p&gt;&lt;p&gt;Thanks for reading.&lt;/p&gt;&lt;p&gt;/ed.&lt;/p&gt;</description>
			<pubDate>Wed, 14 Oct 2009 17:14:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/code-snippets-a-really-easy-javascript-accessibility-text-size-selector/</guid>
		</item>
		
		<item>
			<title>HowTo: N2 Cms install</title>
			<link>http://www.n-webdesign.co.uk/howto-n2-cms-install/</link>
			<description>&lt;p&gt;&lt;strong&gt;At N-Web Design, we love writing really cool applications for our clients.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This is a passion shared by many developers to the extent that they share their work as open source applications, freely available under various open source licenses.&lt;/p&gt;&lt;p&gt;Now as much as we love writing bespoke code, we hate re-inventing the wheel. That's why we like, where possible, to use open source apps and frameworks. It cuts our development time way down, saves our clients money and also offers a stable platform that has little or no ownership issues because of the open source licensing model.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Anyway, enough of the why, let's look at what and how?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;N2 Cms (&lt;a href=&quot;http://www.n2cms.com/&quot;&gt;http://www.n2cms.com/&lt;/a&gt;) is an open source web application framework, written in c#/asp.net, which allows you to create content managed websites.&lt;/p&gt;&lt;p&gt;Without going into too much detail (this isn't a review after all) N2 is a content management system that is really simple, powerful, well written and can be easily deployed into new or existing web applications. This makes it the ideal candidate for building an asp.net CMS or using as a base system for your own CMS framework. You can apply N2 Cms to Webform or MVC based applications. We are going to use the MVC sample project in this tutorial, but it will work fine with Webform examples too.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Ok, how do we get started and take a look?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This HowTo is aimed at those people who are new to N2, asp.net MVC and have limited skills with .net development so if you are an asp.net development Ninja,  some of the explanations are quite simplistic. If you are a 'beginner' expect it to take about 30 minutes.  &lt;/p&gt;&lt;p&gt;There are some pre-requisites for using N2 Cms. You need .NET 3.5, asp.net MVC and a development environment. This HowTo also covers adding SQLExpress as the chosen database, but the example we use initially uses SQLLite. This may be enough for you to begin using N2 and is certainly perfect for development and evaluation purposes.&lt;/p&gt;&lt;p&gt;This example is done on Vista Ultimate, with IIS7. If anything, it will be easier on XP so don't worry if that is your flavour of OS.&lt;/p&gt;&lt;p&gt;So you have Visual studio 2008 or web developer, SQLExpess (if required) and asp.net MVC? If you don't know anything about asp.net MVC or haven't got it installed, you should go to the website (&lt;a href=&quot;http://www.asp.net/mvc/&quot;&gt;http://www.asp.net/mvc/&lt;/a&gt;) and watch the videos. If you don't have at least a basic understanding of MVC, you'll get a bit confused at the file structure in this example, which may frustrate you and turn you off N2 Cms, which would be a bad thing, as N2 is really cool.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The how bit...&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Download the source code from &lt;a href=&quot;http://n2cms.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29374#ReleaseFiles&quot;&gt;http://n2cms.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29374#ReleaseFiles&lt;/a&gt;. Just get it all. We'll tell you which bit to use, so don't worry about how much stuff there is.&lt;/p&gt;&lt;p&gt;Extract 'sources.zip' to your hard drive. It doesn't matter where. We are going to put the right files in wwwroot or wherever you serve IIS from.&lt;/p&gt;&lt;p&gt;Create an empty folder in c:\inetpub\wwwroot (or wherever you like to run sites from) called n2 or similar.&lt;/p&gt;&lt;p&gt;From the extracted files, copy the contents of sources/examples/mvc/wwwroot into the new n2 folder in wwwroot.&lt;/p&gt;&lt;p&gt;Create a new folder called n2 in you VS 2008 projects location (Mine is User\Documents\ Visual Studio 2008\Projects)&lt;/p&gt;&lt;p&gt;Copy the Mvc_Example.sln file from sources/examples/Mvc to the n2 folder in your chosen location for VS projects.&lt;/p&gt;&lt;p&gt;Open the Mvc_Example.sln file from your projects/n3 folder in a text editor like notepad. Don't use a rich editor like word. and edit the value &quot;wwwroot\MvcTest.csproj&quot; on line 4 to the location of your web site, ie:  c:\inetpub\&lt;a href=&quot;http://wwwrootn2MvcTest.csproj/&quot;&gt;wwwroot\n2\MvcTest.csproj&lt;/a&gt;. This just tells solution where you have put the application so it knows where to find the files when you run the project.&lt;/p&gt;&lt;p&gt;Open the project in VS 2008. You should get a file list. If not, check the editing in the .sln file and the locations you have used.&lt;/p&gt;&lt;p&gt;Next, click on the 'show all files' icon in the solution explorer, then right click on 'edit', 'bin' and 'obj' respectively and 'select add to project for each'. This will take a few minutes.&lt;/p&gt;&lt;p&gt;Ok, now we will set up IIS. On the desktop, right click on 'My Computer' and select 'Manage'. You'll get some version of MMC popping up. Navigate to 'sevices and applications', then IIS Manager. Open the Default Web Site from the droppy arrow things and find the n2 folder. It will be displayed as a folder icon. We need to make it into an application. To do this, right click on the icon and  select 'convert to application'. Just leave the defaults in place and press ok.&lt;/p&gt;&lt;p&gt;Next, click on the n2 application icon, and some options will appear in the panel to the right. At the bottom under IIS, select 'authentication', then under 'Action' in the far right panel, select 'Open Feature'  then enable Window Authentication. You may get an alert but just ignore it. You need windows auth to debug and forms auth to use forms based authentication. (There's probably a fix/hack/workaround for the error, but I've never had any problems with it).&lt;/p&gt;&lt;p&gt;Now go back into VS and press F5. You should now see a blue default vanilla MVC web page. That meas it all works. It's installed. Cool...&lt;/p&gt;&lt;p&gt;Go to http://localhost:12345/edit and you should see the N2 login. Use the default login username/password for access (this is written into the web config for this example, but Membership should be easy to add to projects) which are admin/changeme.&lt;/p&gt;&lt;p&gt;If you are logged in ok, then it means everything is fine. You have a simple starting install of N2 inside an asp.net MVC application. You should now go and read some more, play with templates and generally feel good about this great app.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Changing the basic install to use SQL Server Express.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Why would you want to do this?&lt;/p&gt;&lt;p&gt;Well, if you use SQL Server Express for live projects, it probably makes sense to make the config work in dev how it will in production. The installation above uses the SQLLite file DB, which is fine for evaluation and testing but it is likely you will want to use SQL Express, so here's how. &lt;/p&gt;&lt;p&gt;This assumes you have the N2 install above working fine and have SQL Server Express installed.&lt;/p&gt;&lt;p&gt;My example is using 2005 Express, but 2008/10 should work the same.&lt;/p&gt;&lt;p&gt;First thing. Open the project in VS 2008 and open the web.config file.&lt;/p&gt;&lt;p&gt;Find the &amp;lt;connectionStrings&amp;gt; node and comment out the active string.&lt;/p&gt;&lt;p&gt;Uncomment the SQL Express connection string. Note it uses the AttachDBFilename parameter and Integrated Security. In this example, we will be using the SQL Server on localhost and a SQL Server login. (Again, this makes deployment to a live box a little easier and safer).&lt;/p&gt;&lt;p&gt;Edit the connection string to be something like:&lt;/p&gt;&lt;p&gt;&lt;div class=&quot;codesnippet&quot;&gt;&lt;p&gt;&amp;lt;add name=&quot;N2CMS&quot; connectionString=&quot;Data Source=.\SQLEXPRESS;Database=N2;User ID=n2-user;Password=n2user&quot; providerName=&quot;System.Data.SqlClient&quot;/&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;You can use any database name, user and password you like.&lt;/p&gt;&lt;p&gt;We will now set up the DB in SQL Server Express.&lt;/p&gt;&lt;p&gt;Open SQL Management Studio (Remember to run as administrator).&lt;/p&gt;&lt;p&gt;Right click on databases and select 'create new'. Give the database the name you used in the web.config connection string.&lt;/p&gt;&lt;p&gt;Add  new login called n2-user (or the name you used in the web config connection string), select SQL Server Authentication and give it your chosen password.&lt;/p&gt;&lt;p&gt;Click on 'User Mapping' and select the new database in the top panel.&lt;/p&gt;&lt;p&gt;In the bottom panel, named Database role membership, select db_owner.&lt;/p&gt;&lt;p&gt;You can micro-manage user permissions a lot in SQL Server but it is out of the scope of this article. If you don't know what selecting db_owner means for your database security, please read some articles about SQL Server roles and permissions. &lt;/p&gt;&lt;p&gt;You can test the login by using it to access SQL Server via management studio, but it should all be fine.&lt;/p&gt;&lt;p&gt;Next, go back to Visual Studio and F5. This runs the app.&lt;/p&gt;&lt;p&gt;You shouldn't get any errors, but if you do, please check the web config settings are correct and that the database and logins are all configured properly.&lt;/p&gt;&lt;p&gt;If all is well, you will be shown a configuration screen with a welcome tab an five step tabs.&lt;/p&gt;&lt;p&gt;Please read all this information carefully, but essentially because we have changed the connection to use a SQL Express db, N2 checks the database, sees it is empty and then helps us to set it up properly with all the tables and stored procs we need.&lt;/p&gt;&lt;p&gt;From the welcome (having read and understood it all of course) select 'start installation'.&lt;/p&gt;&lt;p&gt;Follow the instructions on step 1 and 2. On step 3, read the text and then select 'create tables'.&lt;/p&gt;&lt;p&gt;Step 4 asks about root nodes. For the purpose of this example, just select 'content page' on the 'use one node for both' option. This basically sets up where your site has its home page. It's worth reading about root and content nodes.&lt;/p&gt;&lt;p&gt;Step 5 mentions log-ins and Membership. Please read this and then continue.&lt;/p&gt;&lt;p&gt;You should now be taken to the site home page. If this is displayed correctly, everything is fine. You can navigate to /edit and play with the options and functions there.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;I hope this helped you to get started with N2 Cms. &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If you have any suggestions, notice any typos or have something to contribute to this article, please add  coment.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What to do next?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I'm going to follow this up (yeah, right!) with some other tutorial stuff based on my own experiences that will cover topics such as:&lt;/p&gt;&lt;p&gt;Creating and editing templates&lt;br /&gt;Adding roles and membership&lt;br /&gt;Creating custom controls and content&lt;/p&gt;&lt;p&gt;Thanks for reading.&lt;/p&gt;&lt;p&gt;/ed..&lt;/p&gt;</description>
			<pubDate>Wed, 14 Oct 2009 11:22:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/howto-n2-cms-install/</guid>
		</item>
		
		<item>
			<title>Make sure you ask for what you want</title>
			<link>http://www.n-webdesign.co.uk/make-sure-you-ask-for-what-you-want/</link>
			<description>&lt;p&gt;This is a cautionary tale.&lt;/p&gt;&lt;p&gt;When somebody does something for you, make sure that you ask them for everything you want and need. &lt;/p&gt;&lt;p&gt;In a perfect world, anybody who uses a product or service should be able to rely on the provider to ensure they are getting everything they will need. &lt;/p&gt;&lt;p&gt;The provider should be able to fill in the gaps between the consumers' knowledge and the required skills, knowledge or experience required to get the most from their contract or purchase without actually knowing everything they are likely to need up front. &lt;/p&gt;&lt;p&gt;Unfortunately, this doesn't seem to happen as often as it should.&lt;/p&gt;&lt;p&gt;...and who are the losers? Well, our clients for one, but I am also frustrated by the damage it does to this unregulated and largely fragmented industry we work in.&lt;/p&gt;&lt;p&gt;I will be a little more specific.&lt;/p&gt;&lt;p&gt;I'm not really talking about products we sell but about services and what we need to provide to our clients to fill in the knowledge gaps.&lt;/p&gt;&lt;p&gt;I'm not talking about the 'This electric drill you sold me, nobody mentioned I needed electricity...' kind of scenario, but in cases where a client instructs you to create or build a web site, there is far more to this than just providing the html/css and walking away, no matter how good your work is. Clients deserve more from us. More clarity, more details and most of all, we should work harder for their trust.&lt;/p&gt;&lt;p&gt;Now I am being slightly unfair, as this isn't entirely the providers fault. Clients should be more insistent on getting information and explanations about anything they are unsure of. &lt;/p&gt;&lt;p&gt;So what are the common pitfalls in these situations?&lt;/p&gt;&lt;p&gt;The most common issue arises from ownership. This can be domains, hosting accounts, source code or nything else that is covered by copyright or intellectual property rights.&lt;/p&gt;&lt;p&gt;The finer points of ownership are beyond the scope of this post, but simply put, if you buy a domain, you own it. Not the person who holds its TAG or the reseller who sold it to you. You should ensure and insist that the domin is registered in your name or that of the entity you purchased it for.&lt;/p&gt;&lt;p&gt;The same goes for hosting. For the agreed period of your contract with the hosting company, you 'own' that part of the internet. You are permitted within the law, the hosting company's policy and the services the ISP provides, to do with it as you will. This includes access to any part that you would usualy and rightly expect.&lt;/p&gt;&lt;p&gt;Problems with hosting occur when the people who have done your web site suggest they will 'host it for you' or as an 'included' part of the job. This is fine, provided they manage it for you or extend to you the same access that you would normally require from a service provider. Some times, companies don't let you have access to hosting accounts because it is their policy. Again, as long as you know this and they are prepared to add analytics, give you stats or do anything else you might normally do with hosting, that's fine.&lt;/p&gt;&lt;p&gt;The biggest issue people have is with ownership of the code or website scripting. Again this is something outside the scope of this post and if you are in a situation where IP or copyright is in contention, you must consult a legal professional.&lt;/p&gt;&lt;p&gt;For ownership of a web site or source code, as a rule of thumb, if you instruct somebody to do work on your behalf, they are essentially creating something at your behest that will be passed to you as a finished product. To ensure there is no ambiguity or argument over the ownership of a web site or source code, you must ask the provider directly about this. It is often a good idea to receive a copy of the finished work on cd.&lt;/p&gt;&lt;p&gt;There are some exceptions to this of course. &lt;/p&gt;&lt;p&gt;Sometimes providers will use open source applications released under license into the public domain as the basis of a project, as we sometimes do. &lt;/p&gt;&lt;p&gt;This application and source code is as much yours as it is theirs, but you will need to check what restrictions are imposed on the templates and additional work carried out by the developer.   &lt;/p&gt;&lt;p&gt;You may have work carried out that is based on a commercial application, such as Immediacy. In this case, you will not have any rights to the source code, but will most likely own the 'design' that is created for you. Again, ensure that you ask.&lt;/p&gt;&lt;p&gt;If I were a cynic, I would say that many companies attempt to tie you in with difficult, unclear or unmentioned clauses. If you don't insist on what you require before you start a project, it is unlikely that you will be able to get your requirements met once it has finished.&lt;/p&gt;&lt;p&gt;If you employ an I.T. development contractor, a freelance designer or copywriter, all the work they do on your behalf retains your intellectual property rights. This is normally stipulated by the terms of a contract. So if you have a company that does work for you that involves html, css or programming source, make sure that you know where you stand. &lt;/p&gt;&lt;p&gt;Some companies will charge more if you want the source code. Some will not want to or not be able to provide it. This isn't necessarilly a bad thing, as long as you are aware of this before you instruct them.  &lt;/p&gt;&lt;p&gt;Don't get me wrong. There are some really great companies out there [like us. sic], lots of good ones too, but there are a small number who, either through ignorance, idleness or sheer  over familiarity just gloss over the things that might be more significant to the client, who is blissfully unaware of it waiting to bite them in the proverbial in a few months time.&lt;/p&gt;&lt;p&gt;Most web design &amp;amp; development companies are open and clear about most of these things, including copyrights and ownership of source code. &lt;br /&gt;Most web design &amp;amp; development companies will happily talk about the technology and libraries they are using.  &lt;br /&gt;Most web design &amp;amp; development companies will offer advice on your needs and will mention many things that you had not realised.&lt;/p&gt;&lt;p&gt;And remember,  Make sure you ask for what you want...&lt;/p&gt;</description>
			<pubDate>Thu, 01 Oct 2009 12:46:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/make-sure-you-ask-for-what-you-want/</guid>
		</item>
		
		<item>
			<title>Cloud computing</title>
			<link>http://www.n-webdesign.co.uk/cloud-computing/</link>
			<description>&lt;p&gt;When you have been around for any length of time, you see many things being re-used, re-invented or re-invigorated.&lt;/p&gt;&lt;p&gt;Whether this is Kurasawa films into westerns, Shakespeare into contemporary dance spectaculars or some computer trend into , errrrmmm, another trend with a different name but essentially the same logical process, it's clear that what goes around comes around. And around. And around.&lt;/p&gt;&lt;p&gt;Is there truly anything that is new? Well, probably not a great deal. In technology, we get bigger, faster and lighter things, but essentially,there is input, processing and output.&lt;/p&gt;&lt;p&gt;All the really exciting things happen in the way we use these advances in technology. How we communicate to the user, where we store the data and where it is accessed from. Take, for example. cloud computing.&lt;/p&gt;&lt;p&gt;I know it's been around a while, but what is it and why is it so cool and why has technology suddenly allowed it to exist.&lt;/p&gt;&lt;p&gt;Actually, it's been around for almost 40 years, is quite a good idea and is just really a fancy name for remote applications.&lt;/p&gt;&lt;p&gt;It is cooler now, because of the changes in technology that have given us faster internet, cheap disk space, faster processors, Ajax, usable browsers and most importantly of all, huge corporations that only work in the on-line world.&lt;/p&gt;&lt;p&gt;So what exactly is cloud computing? It is essentially the storage and processing of documents and applications on a remote server, that can be opened, edited, manipulated and changed on line, normally through a web interface that runs in a browser.&lt;/p&gt;&lt;p&gt;But hold on, isn't that just like a mainframe used to work? Well, essentially, yes.&lt;/p&gt;&lt;p&gt;In the old days when you had to wear brown corduroys, have a beard and look like an extra from an OU program to work with computers, unless you had a big computer in a university somewhere, computers were really quite feeble. Something with the power of my mobile phone was as big as a house.&lt;/p&gt;&lt;p&gt;Necessity, being the mother of invention, made some bright sparks come up with X Windows, which was a way of using a small computer to connect to a large computer in a different romm, building or continent, which you could use to do your number crunching. This was essentially the idea behind cloud computing. &lt;/p&gt;&lt;p&gt;This is also the thing that led to mainframes, thin client systems, AS/400 minicomputers [ironically, often really big] remote desktops and a whole host of usefule distributed processing that made it easier to centralise and share data, processes and documents.&lt;/p&gt;&lt;p&gt;These days, we are rarely short of processing power, but we are often short of time.&lt;/p&gt;&lt;p&gt;The advantages of cloud computing as we see it today, with Google Docs and Microsoft Office Online, is the ability to share information, irrespective of setup geographical or time differences.&lt;/p&gt;&lt;p&gt;If you have a browser, you have Google Docs. You don't need to wait for the IT department to come and install some office software. You can write your report in a hotel room in Hawaii while MIS in Scunthorpe add the figures and the MD in Timbuktoo approves it.&lt;/p&gt;&lt;p&gt;Of course you can just e-mail copies around. But versioning then becomes an issue. This really is an incredibly useful interpretation of an old idea.&lt;/p&gt;&lt;p&gt;If, like me, you use several computers, it is a breeze to centralise your documents knowing they aren't on the other PC or on your forgotten USB stick.&lt;/p&gt;&lt;p&gt;Of course cloud computing isn't just online office applications. In reality, any shared web application belongs to the family, although we've just called it by other names. With more bespoke applications being written as browser based rather then desktop software, we really are already deep in the clouds. What's that you say, is this new thin client thing really taking off...?&lt;/p&gt;&lt;p&gt;If you haven't used something like Google Docs or stored files in something like &lt;a href=&quot;http://skydrive.live.com/&quot;&gt;http://skydrive.live.com/&lt;/a&gt; , you really should try it and see how it makes working smarter, faster and easier.&lt;/p&gt;</description>
			<pubDate>Thu, 17 Sep 2009 12:35:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/cloud-computing/</guid>
		</item>
		
		<item>
			<title>Now I'll just see how it looks in IE6...</title>
			<link>http://www.n-webdesign.co.uk/now-i-ll-just-see-how-it-looks-in-ie/</link>
			<description>&lt;p&gt;You create this really cool CSS/Ajax/html layout. I mean really nice, clean, neat and tidy. It looks great in FireFox, Safari and IE7 is almost perfect too. Happy days.&lt;/p&gt;&lt;p&gt;...until you hear thos dreaded words. 'How does it look in IE6?'.&lt;/p&gt;&lt;p&gt;Now before you start thinking, 'here we go again, Ed and his hatred of IE6', I don't hate IE6. I just think it's like having a steam driven car. Fantasti in its day. Revolutionary. Ground breaking. But 100 years out of date.&lt;/p&gt;&lt;p&gt;The example in question is at &lt;a href=&quot;http://www.hit.org.uk/training/&quot;&gt;http://www.hit.org.uk/training/&lt;/a&gt;. In the middle column, we've added some neat css flyouts. We had them working absolutely fine in Firefox, Safari and IE7+. Check it in IE6. Nada. Nothing. No show. What's a programmer/designer/disparaging soul to do?&lt;/p&gt;&lt;p&gt;The original css had been hacked around from another recent triumph at &lt;a href=&quot;http://www.express-safety.co.uk/&quot;&gt;http://www.express-safety.co.uk&lt;/a&gt; where we added some nice pure css menus. And they looked cool. &lt;/p&gt;&lt;p&gt;So when the guys at HIT said they wanted to make their training section 'a bit sexier', I just had to suggest using a flyout menu, similar to the one we added to Express Safety.&lt;/p&gt;&lt;p&gt;The problm they were facing was that there was just too much information, which meant losing some of it below the fold with 3 sections.&lt;/p&gt;&lt;p&gt;We chatted about it for a while and came up with a 'tabbed' section layout and because the course listings needed to show a lot of info at this point,  rather than dropping down, we decided flying out to te left would be the best option.&lt;/p&gt;&lt;p&gt;Cue a nice [but properly invalid] markup, ome tricky css and hey presto, we had a winner. &lt;/p&gt;&lt;p&gt;...until IE6 arrived that is.&lt;/p&gt;&lt;p&gt;The problem is, many of HIT's site visitors still use IE6 (maybe 25%, which is above the average these days)  so we needed to make things work in IE6 too.&lt;/p&gt;&lt;p&gt;Ok, problem 1. They just didn't show in IE6. Not to worry. Just do the old 'hide the &amp;lt;/a&amp;gt; and wrap it all in a table' trick. Still no show. Hmm. Ok, try a few things and position:absolute cures it.&lt;/p&gt;&lt;p&gt;Now we have a problem in Firefo et al. It uses a centred layout, so we can't set a -neg left and top to position the flyout.  Ok, knock up a little javascript to calculte and set the left offset from the screen size. Sorted. It worked in IE once we found the proper call for screen width.&lt;/p&gt;&lt;p&gt;More tweaks later, like adding hug amounts of negative margins for IE6 and we get close, but that's good enough for me.&lt;/p&gt;&lt;p&gt;So why am I telling you this? Well, it took a day to do the that worked in IE7+, as well as all the other browsers, then about 3 days to get it looking acceptable [it looks nothing like it should] in IE6. IR6 is causing people to compromoise or ignore layout issues and the solution is to upgrade as soon as you can.&lt;/p&gt;</description>
			<pubDate>Tue, 08 Sep 2009 17:03:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/now-i-ll-just-see-how-it-looks-in-ie/</guid>
		</item>
		
		<item>
			<title>What's in your...</title>
			<link>http://www.n-webdesign.co.uk/what-s-in-your/</link>
			<description>&lt;p&gt;What's in your walle... errrm, utilities library?&lt;/p&gt;&lt;p&gt;This might seem like a silly question, but it's amazing how few developers and designers maintain re-usable code libraries.&lt;/p&gt;&lt;p&gt;If you use Dreamweaver, Visual Studio, Eclipse or any of the 101 editors out there, they all do 'boilerplate' pages for you. So why don't more designers and developers use their own default libraries?&lt;/p&gt;&lt;p&gt;So why is this a good idea? Simply put, it saves time, code size and errors. For example if you parse a regular expression in one page or script, then copy and paste the snippet into another page, this will [probably] work fine. The thing is, you've got 2 almost identical functions or expressions that could easily be added to a class file or a utilities script.&lt;/p&gt;&lt;p&gt;Why do programmers write duplicate code? Well, some have limited experience, some are probably a little lazy, some are really under time pressure and some have just always done it that way.&lt;/p&gt;&lt;p&gt;In the deep mists of time [about 15 years ago] when java was still an island in the ocean somewhere, most programming languages were very proprietary and often procedural in nature. This meant that the program generally got called, started at line 1 and ended at the last line. This all changed significantly with the introduction of object oriented languages. Amongst other things, it made programming a lot more flexible. &lt;/p&gt;&lt;p&gt;Ok, I know a lot of guys and girls do this. Especially in multi-user environments. There are still plenty that don't. Have you tried to change the VAT in an app that had 'vat = value * 0.175' writen about 30 times? Yes, this [hard coding the rate] is a really poor way of doing it, irrespective of repetition. 30 minutes, a value in a config file and a few public static fields in my utilities class and the next VAT change takes 5 minutes.&lt;/p&gt;&lt;p&gt;Not only will a change take a fraction of the time, saving my client money [they'll probably get this changed for free, it's that easy to do], when you are debugging and testing, you know the VAT is correct everywhere or not. And any other developers that follow me on this will thank me for it. I curse the chaps who left me with this and 1001 other duplicated code snippet nightmares.&lt;/p&gt;&lt;p&gt;And this doesn't need to be reserved for php,asp or java. You can create javascript libraries of your own [just look at jquery, prototype et al. Just great big re-usable chunks of loveliness] as well as universal CSS libraries that include things you use in every project like clear, centred pages and a host of other things.  &lt;/p&gt;&lt;p&gt;So, guys and girls, remember to use those utility libraries. It'll save you a lot of time in the future.&lt;/p&gt;</description>
			<pubDate>Tue, 08 Sep 2009 09:45:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/what-s-in-your/</guid>
		</item>
		
		<item>
			<title>AJAX, frameworks and .NET</title>
			<link>http://www.n-webdesign.co.uk/ajax-frameworks-and-net/</link>
			<description>&lt;p&gt;I remember the day, many years ago, when I discovered Ajax.&lt;/p&gt;&lt;p&gt;Until then, partial page updates had been a mix of self posting pages and heavy javascript. It was either something that switched things on and off then by re-processing the whole page, then presenting it to the visitor or showing/hiding some divs that had been pre-populated already, meaning the partial update was quick, but the actual first page load was a real time-waster.&lt;/p&gt;&lt;p&gt;Well, I doubt I need to sell the great benefits of Ajax driven content, but for those of you who aren't sure, it allows web sites or pages to be created, with areas (normally &amp;lt;div&amp;gt;s) that add almost no additional time to load the markup, that can be updated through a client-side script, without processing the whole page again on the server. Cool or what?&lt;/p&gt;&lt;p&gt;This means you can add galleries, tabbing, menus, dialog boxes, messages, extra content, expandable panels, well, just about anything you need to communicate with the web site visitor, without redrawing the whole page, saving time and improving the user experience.&lt;/p&gt;&lt;p&gt;Ajax, which stands for Asynchronous Javascript and XML isn't really that 'new'. It's actually an evolution of DHTML (Dynamic HTML) which uses javascript, css and html to create dynamic client-side scripts to add animation, content changes and interactive content to web pages.&lt;/p&gt;&lt;p&gt;Ajax uses javascript, css, the DOM (Document Object Model) and the XMLHttpRequest object.&lt;/p&gt;&lt;p&gt;Put these 4 things together and you have the means to target any element within a web page, change any attributes that may be available to it through the DOM, match css elements to objects in the DOM, retrieve and process data in XML format that may be manipulated and displayed any or all of these elements and pieces of data dynamically. Yep, really cool.&lt;/p&gt;&lt;p&gt;So, now you know what Ajax is, getting web site Ajax enabled is pretty easy. You can either write some javascript yourself that does some pretty cool things or you can check out the many Ajax frameworks that are available. The advantage of using an established framework is that they are generally quite mature, are well maintained and will do 90% of even the most arduous tasks that you will need Ajax to perform, right out of the box.&lt;/p&gt;&lt;p&gt;You can see  list of the most commonly available Ajax frameworks at &lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_Ajax_frameworks&quot;&gt;http://en.wikipedia.org/wiki/List_of_Ajax_frameworks&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Most pre-written Ajax web site additions, such as galleries and effects libraries are based on prototype, jquery, scriptaculous or moo tools. &lt;/p&gt;&lt;p&gt;To start using Ajax in your web site is easy. Download the framework,  add a reference to your chosen Ajax framework in your web page, like:&lt;/p&gt;&lt;p&gt;&amp;lt;script src=&quot;js/prototype.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;&lt;p&gt;...then start calling things from your markup or your own processing script.&lt;/p&gt;&lt;p&gt;Note that IE won't allow you to run Ajax scripts rom the file system. They need to be run from a web server. IIS or Apache on localhost is fine. You'll might also run into some problems in IE if you don't use the correct DTD. use:&lt;/p&gt;&lt;p&gt;&amp;lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&amp;gt;&lt;/p&gt;&lt;p&gt;And it should solve any issues with functions not doing anything.&lt;/p&gt;&lt;p&gt;Ok, so how does this relate to ASP.NET?&lt;/p&gt;&lt;p&gt;Well, most web designers and web developers saw the value of Ajax as soon as they read about it. In the early days, it was pretty intense stuff, there being nothing 'off the shelf' like prototype or jquery to do most of the tedious work for us.&lt;/p&gt;&lt;p&gt;Once these frameworks started to appear, many designers and developers wanted to use Ajax. Many clients were demanding it. To see some really neat Ajax in action is to want it.&lt;/p&gt;&lt;p&gt;Integrating Ajax framewoks into flat HTML, ASP3 or PHP based sites was a breeze. Using them with ASP.NET was not so straightforward.&lt;/p&gt;&lt;p&gt;In the early days, .NET AJAX was quite pitiful. Probably a kneejerk reaction to falling behind the open source offerings. You can imagine Microsoft just panicking to get something out there. Whatever it was.&lt;/p&gt;&lt;p&gt;I think this early version of Ajax for .NET did more harm than good. Compared to other frameworks, it was lacking. A lot of people were ignoring it.&lt;/p&gt;&lt;p&gt;So, the option is to use an open source framework like jquery or others. Great, we can show and hide things and do lots of nice tricks in the UI. So how about getting data and forms from external pages, using Ajax? After constantly getting ViewState errors and considering what was involved to integrate external data into the page correctly, like me, you probably gave up.&lt;/p&gt;&lt;p&gt;But then in May 2009 we get a new .NET Ajax release from Microsoft. Now this really is a revelation. You can see the contents at &lt;a href=&quot;http://www.asp.net/ajax/ajaxcontroltoolkit/samples/&quot;&gt;http://www.asp.net/ajax/ajaxcontroltoolkit/samples/&lt;/a&gt;. We can now integrate many Ajax enable items into ASP.NET in minutes.&lt;/p&gt;&lt;p&gt;To get started with this release, there are many video tutorials at &lt;a href=&quot;http://www.asp.net/learn/ajax-videos/&quot;&gt;http://www.asp.net/learn/ajax-videos/&lt;/a&gt;. More than enough to get you started or give you an insight into what this control library can add to your web site.&lt;/p&gt;&lt;p&gt;I still love prototype, all the cool things you can do with it and all the cool things that use it. But now, I am really excited about what I can do with .NET Ajax too.&lt;/p&gt;&lt;p&gt;Thanks for reading...&lt;/p&gt;</description>
			<pubDate>Tue, 25 Aug 2009 13:34:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/ajax-frameworks-and-net/</guid>
		</item>
		
		<item>
			<title>How to make soft messages in c#/asp.net</title>
			<link>http://www.n-webdesign.co.uk/how-to-make-soft-messages-in-c-asp-net/</link>
			<description>&lt;p&gt;Following on from my recent blog article about creating 'soft'messages in web applications, a few people have asked me how I do it in .NET, so here goes...&lt;/p&gt;&lt;p&gt;Ok, we need a message file. For this we will use an xml file.&lt;br /&gt;We need a few methods in a class to get the message out of the message file.&lt;br /&gt;We need to know a bit about XML.&lt;br /&gt;We need to know a bit about XPath.&lt;br /&gt;We need to know a bit about c#.&lt;br /&gt;We need to have something to say.&lt;/p&gt;&lt;p&gt;Ok, first up, open your favourite xml editor. You can use Visual Studio or notepad or anything in between. Don't use anything like word or TextEdit (Basically, anything that does rich text).&lt;/p&gt;&lt;p&gt;Create an XML file, something like:&lt;/p&gt;&lt;p&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&amp;gt;&lt;br /&gt;&amp;lt;messages&amp;gt;&lt;br /&gt;  &amp;lt;message id=&quot;message&quot;&amp;gt;&lt;br /&gt;    &amp;lt;content&amp;gt;&lt;br /&gt;        &amp;lt;![CDATA[&lt;br /&gt;            &amp;lt;p&amp;gt;I am a message&amp;lt;/p&amp;gt;     &lt;br /&gt;         ]]&amp;gt;   &lt;br /&gt;    &amp;lt;/content&amp;gt;&lt;br /&gt;  &amp;lt;/message&amp;gt;&lt;br /&gt;&amp;lt;/messages&amp;gt;&lt;/p&gt;&lt;p&gt;This has a very sinple structure. Note I have added a CDATA section, so the markup inside it won't be parsed. This isn't absolutely necessary, but it allows us to add markup within the XML file without worrying about it being meaningful to the parser. Also note, there is a &amp;lt;content&amp;gt; tag defined inside the &amp;lt;message&amp;gt; tag, which may seem  little superfluous but this will allow you to add more values later on without changing anything, except the XPath.&lt;/p&gt;&lt;p&gt;Next, open or create a utilities class in c#. (Remember, it goes in the App_Code folder).&lt;/p&gt;&lt;p&gt;The class will look something like:&lt;/p&gt;&lt;p&gt;using System; // Plus some others...&lt;/p&gt;&lt;p&gt;public class UtilitiesClass&lt;br /&gt;{&lt;br /&gt;    public UtilitiesClass()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// TODO: Add constructor logic here&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&lt;br /&gt;    }&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;To play with XML, we need to ensure there are a few libraries added to our reference at the top of the class. We will need:&lt;/p&gt;&lt;p&gt;using System.Text;&lt;br /&gt;using System.Xml;&lt;/p&gt;&lt;p&gt;So, if they aren't there, please add them.&lt;/p&gt;&lt;p&gt;Ok, now to the mechanics of it all.&lt;/p&gt;&lt;p&gt;We need to add a method that will return the message that we want, from the message id. To make this re-usabel, we will add a parameter to the method for the path to the XML file and the XPath to find the right node.&lt;/p&gt;&lt;p&gt;So, this is how I've done it before:&lt;/p&gt;&lt;p&gt;public static string GetXMLNodeValue(string sDoc, string sNodePath)&lt;br /&gt;{&lt;br /&gt;    return GetXMLDocument(sDoc).SelectSingleNode(sNodePath).InnerText;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;...and we also need the GetXMLDocuments() method.&lt;/p&gt;&lt;p&gt;private static XmlDocument GetXMLDocument(string sDoc)&lt;br /&gt;{&lt;br /&gt;    XmlDocument xDoc = new XmlDocument();&lt;br /&gt;    xDoc.Load(sDoc);&lt;br /&gt;    return xDoc;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;...all this does is get an XML doc and return it to the method that extracts the value from the node we have targetted. You could just add this to the first method, but I like re-usability.&lt;/p&gt;&lt;p&gt;Note: I've not paid any attention to resolving your document root or using Server.MapPath() in this example. Running on localhost or a web server will most likely have a different file structure, so you will need to take this into account when you create your files. &lt;/p&gt;&lt;p&gt;Notice in this example I use static methods. It will work just as well as a non-static method.&lt;/p&gt;&lt;p&gt;That's it. Just add that method to the utilities class (or any other one you want to use) and you can get the text inside the &amp;lt;content&amp;gt; tags ready for output. In a compiled application, all you need to do to change the message is to change the XML file. No re-compile. Cool :)&lt;/p&gt;&lt;p&gt;To make this work in your aplication, just add a call to the class method wherever you want to use the message. For example:&lt;/p&gt;&lt;p&gt;protected void LinkButton_Command(object sender, CommandEventArgs e)&lt;br /&gt;{&lt;br /&gt;        literal.Text = UtilitiesClass.GetXMLNodeValue(&quot;c:\Inetpub\MySite\xmlfile.xml&quot;, &quot;/messages/message[@id=\&quot;message\&quot;]/content/text()&quot;&lt;br /&gt;}&lt;/p&gt;&lt;p&gt;...and that's it.&lt;/p&gt;&lt;p&gt;Note: I've just hacked this out, untested and uncompiled, so there may be a few errors in it. It works fine though, so try it and let's give our clients far better, easier to manage messaging on their web sites... :)&lt;/p&gt;&lt;p&gt;Thanks for reading.&lt;/p&gt;</description>
			<pubDate>Thu, 30 Jul 2009 15:19:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/how-to-make-soft-messages-in-c-asp-net/</guid>
		</item>
		
		<item>
			<title>Softly softly, catchee monkey...</title>
			<link>http://www.n-webdesign.co.uk/softly-softly-catchee-monkey/</link>
			<description>&lt;p&gt;A while back, I worked on a project for a software house for a big on-line application and every time we added some functionality or logic, the project manager always said 'and make it soft'.&lt;/p&gt;&lt;p&gt;So what did he mean by 'make it soft', what impact did it have on the project and most importantly, why would you be interested?&lt;/p&gt;&lt;p&gt;Let's do a little background.&lt;/p&gt;&lt;p&gt;When you write something in a computer program, you invariably have to communicate some message to the user. This could be the web page content, a response to an activity, interaction or selection you have made or some messages, error or otherwise.&lt;/p&gt;&lt;p&gt;The 'make it soft' requirement is now very important. Take this example.&lt;/p&gt;&lt;p&gt;if (SomeErrorCondition)&lt;br /&gt;{&lt;br /&gt;    echo 'ErrorMessage'; / Response.Write(&quot;Error Message&quot;);    &lt;br /&gt;}&lt;/p&gt;&lt;p&gt;This is very common practice and works fine. But say somebody decides this isn't a particularly meaningful error message and wants it to be &quot;Please select something&quot;. Ok, this isn't so bad in PHP or ASP3 [I'm not picking on anyone particularly here. This is aimed at all lazy programmers!] but in .NET you have to change the source code, recompile, upload the .dll (at least). A world of pain.&lt;/p&gt;&lt;p&gt;So how do we get round this? Well, it's simple, and I guess most programmers know this anyway, but you put the string in a file that can easily be read and edited. This could be .txt, .XML, .csv, in a database or an .ini file. Note: Using web.config isn't a good place for this content BTW.  &lt;/p&gt;&lt;p&gt;The way I do this in c#/.net for example, is to create a few XML files. I then have a few methods in my utility class that get values from nodes (defined by XPath) in the xml file, that returns a string that I can either output to somewhere appropriate in the markup or use String.Format() to output something meaningful like:&lt;/p&gt;&lt;p&gt;string s1 = &quot;user name&quot;;&lt;br /&gt;string s2 = &quot;account&quot;;&lt;br /&gt;String.Format(&quot;Please enter your {0} in the {1} field.&quot;, s1, s2);&lt;/p&gt;&lt;p&gt;So what impact will hard coding values have on your project? Well, apart from it being bad practice and also a little lazy, it can add to the cost of site updates. It may also create situations of inflexibility or mis-understanding in your web site where messages become out of sync with changes to content . This can't be good. The biggest thing of all, is having to pay the developer to change a line of text, in an application, that he didn't structure appropriately.&lt;/p&gt;&lt;p&gt;Worst of all is where people hard code things like Literal.Text = '&amp;lt;p&amp;gt;Sorry, you can't do that&amp;lt;/p&amp;gt;'; This isn't good.&lt;/p&gt;&lt;p&gt;I hate seeing this approach in source code. Considering how easy it is to do better, I can't understand why programmers don't just do it as a matter of course.   &lt;/p&gt;&lt;p&gt;However you decide to do this, the important thing is that when you need to change a message or content or ant [potentially] volative text in a web site or application, you should be able to change it without changing any source code.&lt;/p&gt;&lt;p&gt;And most importantly, if someone is building a web site for you, make sure they make as much of the text as 'soft' as possible. It will save everyone time and money in the long run.&lt;/p&gt;&lt;p&gt;.&lt;/p&gt;</description>
			<pubDate>Sun, 19 Jul 2009 14:27:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/softly-softly-catchee-monkey/</guid>
		</item>
		
		<item>
			<title>My top ten most useful websites</title>
			<link>http://www.n-webdesign.co.uk/my-top-ten-most-useful-websites/</link>
			<description>&lt;p&gt;Here is a list of some cool and useful web based resources. I use most of these a lot, and I hope you'll find something new and useful too.&lt;/p&gt;&lt;p&gt;Number 10 - Kuler &lt;a href=&quot;http://kuler.adobe.com/#&quot;&gt;http://kuler.adobe.com/#&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Kuler is cool. It's cooler than cool. (see what I did there?)&lt;/p&gt;&lt;p&gt;Number 9 -  DNS Watch &lt;a href=&quot;http://www.dnswatch.info/&quot;&gt;http://www.dnswatch.info/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Does what it says on the tin. Does reverse lookup etc. Simple, useful, free. I like free best of all.&lt;/p&gt;&lt;p&gt;Number 8 -  Developer notes for prototype &lt;a href=&quot;http://www.sergiopereira.com/articles/prototype.js.html&quot;&gt;http://www.sergiopereira.com/articles/prototype.js.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This is really helpful for guys like me who are [a bit thick] not doing stuff with Ptototype that regularly, but occasionally need something from it.&lt;/p&gt;&lt;p&gt;Kudos to the author for taking the time to document it all in a really useful way.&lt;/p&gt;&lt;p&gt;Number 7 - Market Share &lt;a href=&quot;http://marketshare.hitslink.com/&quot;&gt;http://marketshare.hitslink.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Not as much 'useful' as 'interesting' this one. Helps you with all kinds of useful [and not so useful] statistics about the world of 'pooters.&lt;/p&gt;&lt;p&gt;Number 6 - W3C &lt;a href=&quot;http://www.w3.org/&quot;&gt;http://www.w3.org/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;It couldn't NOT be on the list really? It has everything from turorials to new technologies to helpful checking tools to downright nerdy nonsense that I'm not sure is relevant to anything in the known universe.&lt;/p&gt;&lt;p&gt;Number 5 - Web Sniffer &lt;a href=&quot;http://web-sniffer.net/&quot;&gt;http://web-sniffer.net/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;A neat little web site that returns header info from any site. Really handy for, well, when you need to look at headers...&lt;/p&gt;&lt;p&gt;Number 4 to 1 coming shortly...&lt;/p&gt;</description>
			<pubDate>Fri, 05 Jun 2009 11:54:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/my-top-ten-most-useful-websites/</guid>
		</item>
		
		<item>
			<title>My top ten tools</title>
			<link>http://www.n-webdesign.co.uk/my-top-ten-tools/</link>
			<description>&lt;p&gt;Whilst writing some news a few days ago, I got thinking about some free tools and apps that I use all the time that realy make my life a whole lot easier.&lt;/p&gt;&lt;p&gt;The thing that got me thinking about it was when I mentioned Speed Dial in Opera, I wondered if there was an Add On like it for Firefox? Of course there was. It isn't quite as slick as the one in Opera, but it works just as well, so I've added it.&lt;/p&gt;&lt;p&gt;I realised that there are a lot of things that I use that are really useful, free and could be useful to others too.&lt;/p&gt;&lt;p&gt;So my top ten apps and tools. The term is Killer Apps isn't it? Ok, my top ten Killer Apps.&lt;/p&gt;&lt;p&gt;Number 1 - Firebug Add On for Firefox &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/1843&quot;&gt;https://addons.mozilla.org/en-US/firefox/addon/1843&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Firebug is a browser add on that lets you inspect the html and css for a web page. Well, that sounds simple and you can see that anyway, so what's the big deal?&lt;/p&gt;&lt;p&gt;Well, it lets you select elements within the html and tells you what css element is styling it. Ok, a little more interesting...&lt;/p&gt;&lt;p&gt;It also shows outlines overlayed on the web page, plus many more features that you will find useful.&lt;/p&gt;&lt;p&gt;Seriously, if you write html/css, this is a must. If I had to lose a finger or Firebug, I'd lose a finger. I've got ten of them. There is only one Firebug.&lt;/p&gt;&lt;p&gt;Number 2 - The RegEx Coach &lt;a href=&quot;http://www.weitz.de/regex-coach/&quot;&gt;http://www.weitz.de/regex-coach/&lt;/a&gt; &lt;/p&gt;&lt;p&gt;If you don't know what regular expressions are, you probably won't share my passion and enthusiasm for this app.&lt;/p&gt;&lt;p&gt;If you write code but don't know what they are [catch up dude], if do know what they are but either don't use them or use them all the time, this is still a great piece of kit.&lt;/p&gt;&lt;p&gt;It allows you to write and test regular expressions against text. Simple I know but it saves so much time testing stuff in a sandbox before wondering why things aren't working in your application. It is also a little known fact that girls go wild for guys who know regular expressions.&lt;/p&gt;&lt;p&gt;Number 3 - Xpath Designer &lt;a href=&quot;http://www.organicbit.com/Posts/2007-02-XPathDesigner.html&quot;&gt;http://www.organicbit.com/Posts/2007-02-XPathDesigner.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Like Reg Ex, XPath is something you use or you don't. &lt;/p&gt;&lt;p&gt;XPath (for those of you who don't know) is a way of defining a position within the nodes and elements of an XML document. If you use XML or XSL(T) you will probably use XPath.&lt;/p&gt;&lt;p&gt;The great thing about XPath Designer is that it lets you text XPath expressions against XML in a sandbox. This is great to write, test and debug XPAth stuff before it goes in to your application.&lt;/p&gt;&lt;p&gt;It's written in .NET with source supplied. Respect to Gerry Shaw (who wrote it).&lt;/p&gt;&lt;p&gt;Number 4 - Notepad++ &lt;a href=&quot;http://notepad-plus.sourceforge.net/uk/site.htm&quot;&gt;http://notepad-plus.sourceforge.net/uk/site.htm&lt;/a&gt;  &lt;/p&gt;&lt;p&gt;Notepad++ is really just a text editor but it is great for writing any text based files, especially source code.&lt;/p&gt;&lt;p&gt;Tools like Eclipse, Visual Studio and DreamWeaver are all great but sometimes, you just need a small, lightweight tool that lets you write code. This fits the bill perfectly.&lt;/p&gt;&lt;p&gt;It does some additional things like language intellisense and spell checkers but I only really use it for simple text style editing.&lt;/p&gt;&lt;p&gt;The best text editor around in probably UltraEdit &lt;a href=&quot;http://www.ultraedit.com/&quot;&gt;http://www.ultraedit.com/&lt;/a&gt;. It is a commercial product but at $50 it is a great piece of kit. &lt;/p&gt;&lt;p&gt;Number 5 - IcoFX - &lt;a href=&quot;http://icofx.ro/&quot;&gt;http://icofx.ro/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;IcoFX is a free icon editor.&lt;/p&gt;&lt;p&gt;I use it mainly for creating favicons but in the hands of a good designer, it can produce some great work.&lt;/p&gt;&lt;p&gt;Number 6 - FileZilla &lt;a href=&quot;http://filezilla-project.org/&quot;&gt;http://filezilla-project.org/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;FileZilla is a free ftp client and server.&lt;/p&gt;&lt;p&gt;I use the client all the time. It makes it really quick and easy to manage web site files.&lt;/p&gt;&lt;p&gt;The server rocks too, so if you are looking for a really usable ftp server application, check it out.&lt;/p&gt;&lt;p&gt;Number 7 - MySqlYog &lt;a href=&quot;http://www.webyog.com/en/&quot;&gt;http://www.webyog.com/en/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;MySqlYog is a GUI for administering and developing in MySql. The community edition is free.&lt;/p&gt;&lt;p&gt;If you use MySql or want to start, this is a great way to develop databases. It's especially useful if you use Windows as the shell is pretty awful, even if you use Putty.&lt;/p&gt;&lt;p&gt;Number 8 - WAMPServer &lt;a href=&quot;http://www.wampserver.com/en/&quot;&gt;http://www.wampserver.com/en/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;WAMPServer is an application that installs Apache, MySql and PHP in a Windows desktop. It also installs an admin tool.&lt;/p&gt;&lt;p&gt;Although this is techniclly a 4-in-1 application, it is the admin tool that is the cool part. &lt;/p&gt;&lt;p&gt;Yes, Apache, MySql and PHP are all great but installing and configuring it all, especially on windows, can be a bit of a bind. WAMPServer seems to fit the bill, plus it gives you a whole load more stuff that you'd never have with installing it all individually. This is why it is on the list.&lt;/p&gt;&lt;p&gt;With WAMPServer, you get a nice GUI menu that allows you to start/stop things right down to the module level in Apache and config settings in PHP.&lt;/p&gt;&lt;p&gt;There is a similar thing for the mac &lt;a href=&quot;http://www.mamp.info/&quot;&gt;http://www.mamp.info&lt;/a&gt; which is amazingly called MAMP Server. I've not used it but it seems to do more or less the same thing.&lt;/p&gt;&lt;p&gt;If you develop in PHP on Windows, this really does make any dev environment on localhost a breeze. &lt;/p&gt;&lt;p&gt;Number 9 - SilverStripe &lt;a href=&quot;http://www.silverstripe.org/&quot;&gt;http://www.silverstripe.org&lt;/a&gt;&lt;/p&gt;&lt;p&gt;There are a load of open source CMS frameworks out there, but I kinda like SilverStripe best.&lt;/p&gt;&lt;p&gt;Ok, compared with Drupal, Joomla and Wordpress, it is still quite immature, but it really is a great way to build a web site with a content management interface built in.&lt;/p&gt;&lt;p&gt;One small criticism would be the documentation and help which is ok but can be a bit fragmented and it can be difficult to get straightforward answers to some questions. This is to expected though and it is down to users like myself to contribute to the community and share my knowledge. See, I told myself off there...&lt;/p&gt;&lt;p&gt;If you get a CMS from me, t will most likely be based on SilverStripe. If you want to try a CMS framework out for yourself, install WAMPServer and try SilverStripe.&lt;/p&gt;&lt;p&gt;Number 10 - Password Safe &lt;a href=&quot;http://passwordsafe.sourceforge.net/&quot;&gt;http://passwordsafe.sourceforge.net/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Now this was going to be Kuler, but I realised I have a load of great web sites to tell you about, so I'm going to tell you about that later.&lt;/p&gt;&lt;p&gt;For me, Password Safe is a godsend. It works as the name would suggest. It is a safe that stores all your passwords.&lt;/p&gt;&lt;p&gt;Ok, it's really just a little GUI with an encrypted database but it is easy to use, can be put on a pen drive and means I only need to remember 1 strong password, not 4/5/600.&lt;/p&gt;&lt;p&gt;Only last week a client got bitten by a zombie guessing passwords. An annoyingly, they used one password for everything. Oh joy. Another great thing about Password Safe is that it generates really random passwords for you. And best of all, you don't need to remember them any more.&lt;/p&gt;&lt;p&gt;Ok, so that's my current top ten killer apps. I'm glad I had ten, I actually have a few more but I promised ten, so you only get ten.&lt;/p&gt;&lt;p&gt;If you ave some killer apps that I don't know about, please post them here.&lt;/p&gt;&lt;p&gt;If you enjoy reading my posts, remember to subscribe.&lt;/p&gt;&lt;p&gt;Thanks for reading.&lt;/p&gt;&lt;p&gt;//ed.&lt;/p&gt;</description>
			<pubDate>Fri, 05 Jun 2009 09:26:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/my-top-ten-tools/</guid>
		</item>
		
		<item>
			<title>Social networking, Web2.0 and generally mixing it up</title>
			<link>http://www.n-webdesign.co.uk/social-networking-web2-0-and-generally-mixing-it-up/</link>
			<description>&lt;p&gt;Everyone is at it.&lt;/p&gt;&lt;p&gt;It seems like there are more blogs than topics in the universe.&lt;/p&gt;&lt;p&gt;There are more blogs about blogs than there are bloggers.&lt;/p&gt;&lt;p&gt;People are tweeting about blogging, blogging about tweeting, sharing, bookmarking....&lt;/p&gt;&lt;p&gt;Where will it end?&lt;/p&gt;&lt;p&gt;Hopefully it won't. &lt;/p&gt;&lt;p&gt;I'm not a big blogger. I'm also a VERY modest tweeter. I have more than one and less than a hundred [I think] friends on facebook. I have 100 of every possible alert or request or notification on there too. For a guy in this industry, I'm probably pretty lame.&lt;/p&gt;&lt;p&gt;I tell all my clients 'you need a blog', 'get your news on feedburner (...that reminds me :o)' and suggest all kinds of business networking, communication, sharing, viral-ing things.&lt;/p&gt;&lt;p&gt;Let's face it, social networking has now epanded quite vigorously into business networking. Things like linkedin &lt;a href=&quot;http://www.linkedin.co.uk/&quot;&gt;http://www.linkedin.co.uk&lt;/a&gt; have been around for ages and there are now many free business indexes to add yourselves to, old ones like Applegate &lt;a href=&quot;http://www.applegate.co.uk&quot;&gt;http://www.applegate.co.uk&lt;/a&gt; and new ones, like the really cool FreeIndex &lt;a href=&quot;http://www.freeindex.co.uk&quot;&gt;http://www.freeindex.co.uk&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;One of my favourite web sites of the last 12 months has been Qype &lt;a href=&quot;http://www.qype.co.uk/&quot;&gt;http://www.qype.co.uk&lt;/a&gt;. True to form, I've been a slacker of immense non-proportions and haven't added much to it, but I really liked the way it was presented. I preferred the scheme and layout prior to the current one, but it is still a really nice way of checking new things out and telling the world about it.&lt;/p&gt;&lt;p&gt;My point you ask...&lt;/p&gt;&lt;p&gt;Information overload is upon us. Most bloggers, tweeters and other contributors are drowning in a sea of so-so similarity and samey-ness. I think the social aspect of it all has fallen by the wayside, making people venture into obtuse comment and invasive narrative in a vain attempt to be interesting and popular with people they don' actually know. It's all about to fragment and reduce into smaller segments of like minded bloggers, tweeters and contributors with global notoriety being reserved for celebs, industrati [is that really a word? I may have made it up, which is cool] and the already established.&lt;/p&gt;&lt;p&gt;Where will this lead? Well, funnily enough, I think it will serve to create better 'communities' within blogging and social networking. A little like a FaceBook reverse where everyone who only know people virtually will once again regain the desire to meet face to face or communicate with people with very similar tastes, bored and frustrated by the vagueness, information overload and downright nonsense that is starting to pervade the internet.&lt;/p&gt;&lt;p&gt;Don't worry though. It will all work out.&lt;/p&gt;</description>
			<pubDate>Tue, 19 May 2009 18:41:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/social-networking-web2-0-and-generally-mixing-it-up/</guid>
		</item>
		
		<item>
			<title>Sorry, more Internet Explorer woes...</title>
			<link>http://www.n-webdesign.co.uk/sorry-more-internet-explorer-woes/</link>
			<description>&lt;p&gt;IE8 is a pretty big event. Potentially it could revolutionise the world's browsing.&lt;/p&gt;&lt;p&gt;It probably won't, but it is still an important consideration for web designers and developers.&lt;/p&gt;&lt;p&gt;So we are all [or at least should be] watching closely to see what is happening.&lt;/p&gt;&lt;p&gt;I check the W3C's browser usage table &lt;a href=&quot;http://www.w3schools.com/browsers/browsers_stats.asp&quot;&gt;http://www.w3schools.com/browsers/browsers_stats.asp&lt;/a&gt; quite often, just to see how much closer we are to forgetting IE6 hacks, but also to see how many people are switching over. It's like a really, really, really long horse race. The favourites are already way out in front.&lt;/p&gt;&lt;p&gt;Once it gets to about 5% for IE8, I'll upgrade and make another VM with IE7 on.&lt;/p&gt;&lt;p&gt;Anyway, on to the point.&lt;/p&gt;&lt;p&gt;I was watching a video on how IE8 treats some box model (the way a browser draws squares and rectangles on the page, with width, height, padding, margins and borders)  css attributes &lt;a href=&quot;http://msdn.microsoft.com/en-us/ie/dd483219.aspx&quot;&gt;http://msdn.microsoft.com/en-us/ie/dd483219.aspx&lt;/a&gt; and it just seems to cloud the issue even more.&lt;/p&gt;&lt;p&gt;The box model has always been a nightmare for web developers, especially for IE6. The way IE6 interprets the size calculations are way different from most other browsers (who do all seem to be slightly different) so you would think that Microsoft would want to get in line with the other 4 or 5 main players.&lt;/p&gt;&lt;p&gt;It was all looking good in IE7. The box model took a lot less work to hack and the browser generally behaved more like other products. It was still slow and we still had IE6 being used far more than was good for the world, but there was definite change in the air.&lt;/p&gt;&lt;p&gt;So IE8 arrives. Cynical me thinks it will still be slow, have more holes than swiss cheese and never get all the IE market share. I was optimistic about the prosect of rendering and CSS behaviour bein more normal [and some AJAX  things that I won't go in to now]. &lt;/p&gt;&lt;p&gt;It seems that IE is going right ahead and interpreting CSS 3 how it likes, rather then comparing notes which would seem on the face of it to be the best plan. Yet more IE specific attributes too.&lt;/p&gt;&lt;p&gt;It doesn't look good really.&lt;/p&gt;&lt;p&gt;The one saving grace for the moment is IE7 compatability mode. IE7 is pretty decent and behaves reasonably well, so I can see that it will be a commonly used meta value. &lt;/p&gt;&lt;p&gt;The real concern here is that it took IE a while to come [kinda] in line with everyone else for CSS 2, but with CSS 3 fast approaching finalisation, I can see it creating a great big interpretational divide again between the way browsers behave. This is likely to happen between other browsers like Chrome, Opera and Firefox too.&lt;/p&gt;&lt;p&gt;I can see some more blogging coming on in the near future. And me desperately looking for CSS 3 hacks....&lt;/p&gt;</description>
			<pubDate>Wed, 29 Apr 2009 10:23:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/sorry-more-internet-explorer-woes/</guid>
		</item>
		
		<item>
			<title>Mashups</title>
			<link>http://www.n-webdesign.co.uk/monster-mash-ups/</link>
			<description>&lt;p&gt;There is very little that is really new.&lt;/p&gt;&lt;p&gt;Most really amazing things were discovered or invented ages ago. Nothing left to become immortalised with. Yes, scientists are still finding new things and bashing hadron's heads together to look for bosons and still have a lot to do before it all means anything, if it ever does. I read about some astrologers who recently discovered a new planet 20 something light years away. &lt;/p&gt;&lt;p&gt;This is all really intersting and cool stuff, but how does it help the budding entrepreneur?&lt;/p&gt;&lt;p&gt;Well, we come on to mashups and disruptive technology.&lt;/p&gt;&lt;p&gt;What's all that then? Well, like colloids, we use them but most of us aren't really sure what they are [toothpaste is apparently a colloid].&lt;/p&gt;&lt;p&gt;A mashup is where one quite cool thing is added to anoher quite cool thing to make a really cool thing. A great example of a reallygood mashup is Google Maps &lt;a href=&quot;http://maps.google.com/&quot;&gt;http://maps.google.com/&lt;/a&gt; which has great mapping software that somebody added overlays to so we can all add our interesting things to our own maps. Good + good = great... &lt;/p&gt;&lt;p&gt;A disruptive technology is a slightly different concept. This is where a commonly used or accepted thing is changed in such a way that it radically adjusts the market for that product or service or device. I guess really big examples would be free OS products like Linux and FreeBSD [we love FreeBSD] being put up in front of Microsoft Windows [we think Vista is pretty cool too].&lt;/p&gt;&lt;p&gt;Disruptive technology is really about marketing or presenting something differently, that changes the way it is percieved by consumers. This could be price or usage or anything that is unexpected.&lt;/p&gt;&lt;p&gt;So how can this make me immortal?&lt;/p&gt;&lt;p&gt;Well nobody is going to live forever, but it would be nice to have a statue in front of parliament. Even a Wiki about something cool I did would be great :) [we love Tim Berners-Lee most of all].&lt;/p&gt;&lt;p&gt;And don't think this concept or idea is a dream. I meet people all the time that mashup or disrupt, doing things with established ideas that really change the usefulness of a simple or well used idea by adapting it or changing it in some subtle, even unnoticed way.&lt;/p&gt;&lt;p&gt;One example of this was a chap I met recently who represented a business called  Adinsight &lt;a href=&quot;http://www.adinsight.eu/&quot;&gt;http://www.adinsight.eu/&lt;/a&gt; that really amazed me. Some very simple and well established technologies, put together in such a way that they become greater than the sum of the parts and in my opinion combine to make a really useful business sales tool. I'm not going to tell you about it here, but if you do multi-channel marketing and sales, this really could help your business, marketing and sales analysis.&lt;/p&gt;&lt;p&gt;So how can mashups and disruptive technology be used?&lt;/p&gt;&lt;p&gt;I guess it is just a matter of time and necessity. That is [necessity] after all the mother of invention. I have put obscure things together in the past to do a specific job. Nothing on the grand scale of the famous mashups, but it shows they are ready and ripe for the mashing [or disrupting].&lt;/p&gt;&lt;p&gt;I'm not going to sit here staring at the screen, trying to force a mashup or disruptive idea to emerge. I think it happens when it needs to, so here's to the challenges and ideas that make mankind the creative being that it is.&lt;/p&gt;&lt;p&gt;If I do get round to creating something especially significant and useful because that's what it's all about, I will certainly share it with you.&lt;/p&gt;</description>
			<pubDate>Thu, 23 Apr 2009 11:23:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/monster-mash-ups/</guid>
		</item>
		
		<item>
			<title>We've got wired</title>
			<link>http://www.n-webdesign.co.uk/we-ve-got-wired/</link>
			<description>&lt;p&gt;What's that all about then?&lt;/p&gt;&lt;p&gt;Well, I've been on a mailing list from something called 'Wired City Reconnected' for a while now. I've no idea how I got on there, but I am regaled with events and lists of people that, until now, I've mostly ignored. &lt;/p&gt;&lt;p&gt;Anyway, spring is well and truly in the air, I figured I'd give it a go...&lt;/p&gt;&lt;p&gt;These events are run all over the country by Alba Associates &lt;a href=&quot;http://www.albaassoc.com/&quot;&gt;http://www.albaassoc.com/&lt;/a&gt;, but there was a nice convenient one near me today, so I signed up and went along to see what it was all about.&lt;/p&gt;&lt;p&gt;I got some details via e-mail telling me about who the other delegates were, what they wanted from the event and a little bit of background on everything I was likely to need to know.&lt;/p&gt;&lt;p&gt;I arrived bang on time and was greeted by a few men in suits and a very helpful chap (one of the organisers) who offered me sustenance and a few pointers for the night.&lt;/p&gt;&lt;p&gt;The room quickly filled up and there were 30 or so delegates by the time it was in full swing. One chap I spoke to said it was a quiet event compared with normal so there may be up to 50 delegates at some events.&lt;/p&gt;&lt;p&gt;So what is it for?&lt;/p&gt;&lt;p&gt;Ok, a simple idea. It brings businesses together. It works by matching businesses with other businesses so they can extend and diversify their services to clients. It is also quite helpful to find resources to supplement shortfalls in time (which we all have at one time or another).&lt;/p&gt;&lt;p&gt;In this event, all the businesses were involved with technology, design, media and communications. Some were direct suppliers of design and development services, such as myself, others were companies with technology based applications that needed additional skills to enhance their product or bring to market.&lt;/p&gt;&lt;p&gt;Who did I meet? Well, I had a few interesting chats with non-pertinent companies, I had nothing to offer them immediately and they had nothing I had a requirement for, but it got the atmosphere going so that was fine.(I apologise to the nice chap from Melbourne &lt;a href=&quot;http://www.melbourne.co.uk/&quot;&gt;http://www.melbourne.co.uk/&lt;/a&gt; who I bored senseless with my questions about virtualisation and how it is configured. I do find it interesting though.) &lt;/p&gt;&lt;p&gt;I did meet one representative from a company that was interested in development partners for forthcoming projects so all in all, a worthwhile event. There also seemed to be a lot of business cards changing hands and some very earnest discussions which I take to be a good sign for the power of the event as a business networking tool.&lt;/p&gt;&lt;p&gt;The organisers worked very hard on the night. They were constantly breaking up conversations in favour of matching people and company representatives with meaningful contacts. This was all done very well and it managed to give the event  warm, vibrant and sociable atmosphere without leaving people to stagnate. Even when I (and I assume others) had nothing specific to discuss, there was always someone to chat to.&lt;/p&gt;&lt;p&gt;What did I get from the event?&lt;/p&gt;&lt;p&gt;First of all, I learned that procrastinating and signing up the day before the event was probably not the best way of approaching it. Being a late arrival, I was not on the delegate list (which had all the companies, contacts and business summaries on) which made it a little awkward for the organisers to 'fit me in', but they did an outstanding job with their lost sheep. &lt;/p&gt;&lt;p&gt;This also meant I hadn't really looked at the dlegates myself so had no meaningful direction or prepared dialog with which to introduce myself to prospective partners. It was only down to the organiser's skill and experience that I was matched to a meaningful contact. &lt;/p&gt;&lt;p&gt;When I attend another Wired City Reconnected event (and I will), I will sign up early, read the list and make some notes. It is also inportant to present your company, product or service appropriately.&lt;/p&gt;&lt;p&gt;In a way, I think being a bit disorganised was a good thing. It meant I didn't really expect too much from the event and I now know what it is all about and will be able to aim my credentials more precisely at the target requirements of the group.&lt;/p&gt;&lt;p&gt;In summary.&lt;/p&gt;&lt;p&gt;A well organised but relaxed event. Hard working organisers. A good range of delegates. A worthwhile event for making business contacts and building partnerships. It gets the Ed thumbs up :)&lt;/p&gt;</description>
			<pubDate>Tue, 21 Apr 2009 09:13:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/we-ve-got-wired/</guid>
		</item>
		
		<item>
			<title>'bots never sleep...</title>
			<link>http://www.n-webdesign.co.uk/bots-never-sleep/</link>
			<description>&lt;p&gt;..but they don't buy products or services either.&lt;/p&gt;&lt;p&gt;We have recently suffered a spate of comments from spammers or spam 'bots. On the face of it, it seemed a bit of a pain. We ike blogs and comments, but we really hate spammers. Oh, what to do.&lt;/p&gt;&lt;p&gt;We've changed the setup a tad to suppress comments before approval and also to use a spam checker. All very easy to do and seems to be working better.&lt;/p&gt;&lt;p&gt;But this recent attention got me thinking. Spammers and spam 'bots use very similar mechanisms to search engine bots for finding and posting spam. They probably just crawl the web, looking for blogs and enabled comments, then do their worst.&lt;/p&gt;&lt;p&gt;This led me to think that if these spam 'bots are finding our site, so too are the search engine 'bots and spiders.&lt;/p&gt;&lt;p&gt;I know we get visited by our good friend GoogleBot on a regular basis, but sometime it's difficult to see where our content is propagating. The spammers seem to suggest our content is getting out there quickly at least.&lt;/p&gt;&lt;p&gt;I then started to consider the many calls, e-mails and requests we receive from companies offering us services. I know you can get data from Companies House and various list brokers, but I think a lot of the attention we get from link exchange, software and service providers comes from our google and other search engine rankings.&lt;/p&gt;&lt;p&gt;We do get genuine traffic of course but sometimes it seems a little more of it is people trying to sell to us?&lt;/p&gt;&lt;p&gt;Here's to less spam...&lt;/p&gt;</description>
			<pubDate>Fri, 17 Apr 2009 15:47:00 +0100</pubDate>
			
			
			<guid>http://www.n-webdesign.co.uk/bots-never-sleep/</guid>
		</item>
		

	</channel>
</rss>