<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>A Web Developers Blog</title>
	<atom:link href="http://jamesowers.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://jamesowers.co.uk</link>
	<description>The blog of James Owers, a Newcastle based web developer.</description>
	<lastBuildDate>Mon, 26 May 2014 08:31:33 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0.8</generator>
	<item>
		<title>AngularJS: An introduction</title>
		<link>http://jamesowers.co.uk/javascript/884/angularjs-an-introduction/</link>
		<comments>http://jamesowers.co.uk/javascript/884/angularjs-an-introduction/#comments</comments>
		<pubDate>Sun, 11 May 2014 14:13:45 +0000</pubDate>
		<dc:creator><![CDATA[jmz]]></dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://jamesowers.co.uk/?p=884</guid>
		<description><![CDATA[This blog post will be the first in a series I’m writing on AngularJS. The series will hopefully be a gentle introduction into the AngularJS framework, covering the most important aspects of the framework. By the end you should have a firm grasp of Angular. First of all, we’ll look at what exactly AngularJS is]]></description>
				<content:encoded><![CDATA[<p>This blog post will be the first in a series I’m writing on AngularJS. The series will hopefully be a gentle introduction into the AngularJS framework, covering the most important aspects of the framework. By the end you should have a firm grasp of Angular.</p>
<p><span id="more-884"></span></p>
<p>First of all, we’ll look at what exactly AngularJS is and how you would go about creating your very first Angular app.</p>
<p>This article is a quick introduction to what AngularJS is, what the main components of an Angular application are and how you’d go about building your first app.</p>
<h2>What is AngularJS?</h2>
<p>AngularJS is an open source javascript framework maintained by Google that is aimed at making building testable single page applications easy. Unlike with a lot of Javascript frameworks, Angular handles all of presentation, logic, data and processing code and gives specific guidelines on how each of these should be organised which should help keep your apps clean and well laid out. </p>
<p>Angular uses an MVC architecture to structure apps. Models are plain old javascript objects (POJO) meaning there’s no weird and wonderful methods to access or update your variables. Views are simple HTML (with some special Angular tags that we’ll look at later). Controllers are the javascript code used to glue everything together.</p>
<h2>Your First AngularJS App</h2>
<p>While there may be a few things that can seem tricky to get your head around at first, most of the core stuff in Angular is actually pretty simple. Lets go through and build a very simple app.</p>
<p>First of all we’ll need a very simple HTML file to use as our main file, below you can see mine.</p>
<a href="https://gist.github.com/b8322bddf56f2709abd5" target="_blank"><em>View this code snippet on GitHub.</em></a>
<p>First of all you’ll see I’ve included the Angular javascript file from a CDN. Secondly, you’ll see that I’ve added a funny looking tag to my body element.</p>
<a href="https://gist.github.com/b8322bddf56f2709abd5" target="_blank"><em>View this code snippet on GitHub.</em></a>
<p>This is your first look at an Angular directive, something you’ll be seeing a lot of in the future. For now, you just need to know that directives tell Angular that it has to do something with this section of the document. Angular comes with lots of built in directives and you can define your own. The ng-app directive just tells Angular that it should process this part of the document as an app. </p>
<p>I have seen some debate on whether you should put ng-app in the html or body tag. From my experience, it doesn’t matter too much performance wise but you will have to add it to the html tag if you want Angular to dynamically update the title of the document.</p>
<p>Next we want to create a file for our main application to go in. We’ll call this app.js. Include the app.js file after the Angular CDN file.</p>
<a href="https://gist.github.com/9e9b7bfa67ff51d60d51" target="_blank"><em>View this code snippet on GitHub.</em></a>
<p>The first thing we’ll do in here is define our app.</p>
<a href="https://gist.github.com/f9f2cfed1d85a8ebf0ca" target="_blank"><em>View this code snippet on GitHub.</em></a>
<p>In Angular, a module is a section of an application. You can have many modules in your application, this makes it more granular and easier to test or re-use code in the future. Here we have created a new module for our “HelloWorld” app and set it to a variable called app.</p>
<p>The empty square brackets are where we would load any dependencies our app might have. Angular will only load the dependencies our app requires, if multiple modules need the same dependencies, it will only load them once. As we are just building a simple app, we don’t need to load anything here. It is important to leave the empty square brackets here even if we don’t have any dependencies. Without them, this statement would try to get the “HelloWorld” module which doesn’t exist yet!</p>
<p>Next we want to create our controller! As this is just a small app, we’ll keep all of our javascript code in the one file. In a real world app, we’d want to organise everything into separate files and folders. </p>
<a href="https://gist.github.com/d46b33bb873f8596d465" target="_blank"><em>View this code snippet on GitHub.</em></a>
<p>As you can see, we’ve created a new controller called “HelloController” using the app variable we defined before. </p>
<p>We’ve passed the $scope variable to our controller too, scopes in AngularJS can be one of the things that are tricky to get your head around and they definitely merit a whole article of their own which will come later in the series. For now a scope is just the container for the data that is shared between the controller and the view. If something is updated in the scope, the update will be reflected in the view and the controller. This is called data binding and is one of the core features in AngularJS. Lets see it working!</p>
<p>To demonstrate the data binding, lets create a new item in our scope. Remember we learned before that models are just POJO? Well, that means adding a new item is as simple as this.</p>
<a href="https://gist.github.com/56d2bd276b4009cbc035" target="_blank"><em>View this code snippet on GitHub.</em></a>
<p>Now, lets display the value of the hello item in our view. To display a variable (or any sort of expression) in Angular you use the following syntax {{ expression }}. Inside your expression you can use anything from variables to array items or even simple mathematical calculations.</p>
<a href="https://gist.github.com/e6724f084d8ef8acdecf" target="_blank"><em>View this code snippet on GitHub.</em></a>
<p>Now you should see the “Hello, world!” text inside your index.html file. That’s cool, but Angular can do better. Lets try some two way data binding! We’ll add an input to our HTML page.</p>
<a href="https://gist.github.com/9e9b7bfa67ff51d60d51" target="_blank"><em>View this code snippet on GitHub.</em></a>
<p>As you can see I’ve added some extra code to the input, hopefully you’ll recognise it as another Angular directive! The ng-model directive maps our form input field to an item in the $scope object. In this case, we’ve mapped it to the ‘hello’ item. This means when our page loads, angular populates the input with the value of the item and the two way data binding means that when we update the value in the input the changes automatically propagate to the scope object and then to anywhere else where that value appears in our app.</p>
<p>Hopefully you’ll now have a good idea of what AngularJS is and the basics of creating an Angular app. There’s still lots more to learn over the next few articles in this series and I’ll go into the things we have learned in a lot more detail.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesowers.co.uk/javascript/884/angularjs-an-introduction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Review: Javascript the definitive guide 6th Edition</title>
		<link>http://jamesowers.co.uk/book-reviews/622/javascript-the-definitive-guide-review/</link>
		<comments>http://jamesowers.co.uk/book-reviews/622/javascript-the-definitive-guide-review/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 08:41:47 +0000</pubDate>
		<dc:creator><![CDATA[jmz]]></dc:creator>
				<category><![CDATA[Book Reviews]]></category>

		<guid isPermaLink="false">http://jamesowers.co.uk/?p=622</guid>
		<description><![CDATA[This is the first of a new type of post I&#8217;ll be adding to my blog. I&#8217;ll be reviewing books and possibly some other items that have been of great help to me and that I think other developers will find useful. I won&#8217;t just be reviewing things for the sake of it and I&#8217;ll]]></description>
				<content:encoded><![CDATA[<p>This is the first of a new type of post I&#8217;ll be adding to my blog. I&#8217;ll be reviewing books and possibly some other items that have been of great help to me and that I think other developers will find useful. I won&#8217;t just be reviewing things for the sake of it and I&#8217;ll be doing my best to be totally objective.</p>
<p>The first book I&#8217;ll be reviewing is <a title="Javascript The Definitive Guide on Amazon" href="http://www.amazon.com/gp/product/0596805527/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&#038;tag=awebdevblo-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0596805527">Javascript The Definitive guide</a> by David Flanagan. First off, this book is huge! (it&#8217;s almost 1100 pages).</p>
<p><span id="more-622"></span></p>
<p>Normally when you get a book that is as big as this you kind of expect it to be over elaborate when making points and it can get old a bit fast but I didn&#8217;t think this was the case with this book, it is very concise.</p>
<p>As the name suggests, the book will teach you everything from the very basics of javascript to the more advanced stuff meaning it is good for both beginners and developers who have been working with javascript for a while. If you have experience with languages that use similar syntax such as PHP or C you might find that some of the earlier sections (I&#8217;m thinking variable types and operators here) aren&#8217;t new to you, I read through these bits anyway. I did find some of the earlier chapters very informative too (the stuff on variable scope was pretty interesting).</p>
<p>Later chapters in the book go over everything from object-oriented subjects to regular expressions and even a few chapters HTML 5 APIs (geolocation, web workers, client-side databases, web sockets and some more!).</p>
<p>Even after a read through, this book will be very useful for any little problems I might come across later on.</p>
<p>If you&#8217;re looking for a book to teach you jQuery, Mootools or another javascript library then this book isn&#8217;t for you. Similarly, if you want ready made solutions you can just copy then this isn&#8217;t the book for you either. What this book will do is to teach you how these javascript libraries work behind the scenes and give you a much clearer idea what you&#8217;re doing when you load that jQuery plugin.</p>
<p>I would actually advise people to read a book like this before trying to learn to use a javascript library, I think the knowledge you would gain from this book will make picking up any javascript library much easier and will especially help you if you want to create your own plugins etc.</p>
<p>Also, as I mentioned earlier on in the article. This book is huge so it&#8217;s maybe not the best book to take on holiday with you to read on a plane or something but it is (for me anyway) an essential book to have on your bookshelf.</p>
<p>If you&#8217;d like to buy <a title="Javascript The Definitive Guide on Amazon" href="http://www.amazon.com/gp/product/0596805527/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&#038;tag=awebdevblo-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0596805527">Javascript The Definitive guide</a>, head on over to Amazon (they also have a <a title="Javascript The Definitive Guide Kindle Version" href="http://www.amazon.com/gp/product/B004XQX4K0/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&#038;tag=awebdevblo-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=B004XQX4K0">Kindle version</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesowers.co.uk/book-reviews/622/javascript-the-definitive-guide-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding your latest tweets to your WordPress blog</title>
		<link>http://jamesowers.co.uk/wordpress/644/adding-your-latest-tweets-to-your-wordpress-blog/</link>
		<comments>http://jamesowers.co.uk/wordpress/644/adding-your-latest-tweets-to-your-wordpress-blog/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 09:18:42 +0000</pubDate>
		<dc:creator><![CDATA[jmz]]></dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://jamesowers.co.uk/?p=644</guid>
		<description><![CDATA[A very simple way of keeping the content on your website fresh is to grab your latest tweets from Twitter and display them on your WordPress site. At first it might seem like it could be quite a lot of work to do this. Luckily WordPress has a fantastic community of plugin developers and an]]></description>
				<content:encoded><![CDATA[<p><a href="http://jamesowers.co.uk/wp-content/uploads/wordpress-logo-hoz-rgb.png"><img class="aligncenter size-full wp-image-718" title="wordpress-logo-hoz-rgb" src="http://jamesowers.co.uk/wp-content/uploads/wordpress-logo-hoz-rgb.png" alt="" width="300" height="68" /></a></p>
<p>A very simple way of keeping the content on your website fresh is to grab your latest tweets from Twitter and display them on your WordPress site. At first it might seem like it could be quite a lot of work to do this. Luckily WordPress has a fantastic community of plugin developers and an easy way of adding new content to certain areas of your site.</p>
<p>You might have guessed that I&#8217;m talking about widgets here. If you don&#8217;t know what widgets in WordPress are you could check out my other article on <a title="Adding widgets to your WordPress theme" href="http://jamesowers.co.uk/wordpress/646/adding-widgets-to-your-wordpress-theme/">adding widgets to your WordPress site</a> and also have a look at what the <a href="http://codex.wordpress.org/WordPress_Widgets">official WordPress site has to say</a> on widgets.</p>
<p><span id="more-644"></span></p>
<p>Once your happy that your theme will support widgets and you know how to add them, we&#8217;ll move on to the best WordPress plugins to add tweets to your site and some other cool features.</p>
<h2><a href="http://wordpress.org/extend/plugins/wp-twitter-feed/">Twitter Feed For WordPress</a></h2>
<p>This one is a nice simple plugin to get any Twitter users tweets and display them on your blog. If you only want to display your tweets then this plugin is great, it&#8217;s really easy to customise too!</p>
<h2><a href="http://wordpress.org/extend/plugins/tweetable/">Tweetable</a></h2>
<p>This plugin has quite a few features. It can automatically post to your Twitter account when you add a new blog post, you can also tweet straight from the WordPress admin panel. Of course there are a few different options ways of displaying tweets in your widget areas and in your posts!</p>
<h2><a href="http://wordpress.org/extend/plugins/tweet-blender/">Tweet Blender</a></h2>
<p>Tweet blender will grab tweets based on lots of different criteria, you can filter tweets from one user, multiple users, tweets that contain a certain hash tag or keyword and some other things.</p>
<h2><a href="http://wordpress.org/extend/plugins/elegant-twitter-widget/">Elegant Twitter Widget</a></h2>
<p>Another nice simple plugin that will output semantic HTML. This plugin is one of the few Twitter plugins for WordPress that will work on a PHP 4 server.</p>
<h2><a href="http://wordpress.org/extend/plugins/twitter-widget-pro/">Twitter Widget Pro</a></h2>
<p>This widget will grab the latest posts for a user you specify. It will also handle hashtags, @usernames and in tweet links properly. It also supports displaying profile images and there are a few different options on how to display dates.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesowers.co.uk/wordpress/644/adding-your-latest-tweets-to-your-wordpress-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding widgets to your WordPress theme</title>
		<link>http://jamesowers.co.uk/wordpress/646/adding-widgets-to-your-wordpress-theme/</link>
		<comments>http://jamesowers.co.uk/wordpress/646/adding-widgets-to-your-wordpress-theme/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 20:47:53 +0000</pubDate>
		<dc:creator><![CDATA[jmz]]></dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://jamesowers.co.uk/?p=646</guid>
		<description><![CDATA[In WordPress, widgets allow you to add content to special areas of your theme without having to modify any code. If your theme is &#8216;widgetized&#8217; you can use the built in drag and drop functionality built into WordPress to add new content and move content around on your site. Widgets make it really easy to]]></description>
				<content:encoded><![CDATA[<p>In WordPress, widgets allow you to add content to special areas of your theme without having to modify any code. If your theme is &#8216;widgetized&#8217; you can use the built in drag and drop functionality built into WordPress to add new content and move content around on your site. Widgets make it really easy to add things like a &#8216;latest tweets&#8217; box or a custom menu to any widget area in your theme.</p>
<p><span id="more-646"></span></p>
<p>If your theme isn&#8217;t widgetized, then don&#8217;t worry. Adding widget areas is really simple!</p>
<p>First of all, you will need to make sure your theme has got a functions.php file. Most themes will have this already but if it isn&#8217;t there just create it and WordPress will pick it up automatically. If you&#8217;re modifying a theme you&#8217;ve downloaded, it might be worth creating a <a href="http://jamesowers.co.uk/wordpress/665/child-themes-in-wordpress/">child theme</a> so that your changes aren&#8217;t overwritten during the next update.</p>
<p>In the functions.php file, simply add the following code.</p>
<pre><code class="language-php">if ( function_exists('register_sidebar') )
register_sidebar();
</code></pre>
<p>In the array we pass some options to the <a href="http://codex.wordpress.org/Function_Reference/register_sidebar">register_sidebar</a> function. Here&#8217;s the options and what they do (<a title="WordPress Widgets" href="http://codex.wordpress.org/Function_Reference/register_sidebar">quoted from the WordPress site</a>):</p>
<blockquote>
<ul>
<li><tt>name</tt> &#8211; Sidebar name.</li>
<li><tt>id</tt> &#8211; Sidebar id &#8211; Must be all in lowercase, with no spaces.</li>
<li><tt>description</tt> &#8211; Text description of what/where the sidebar is. Shown on widget management screen. (Since 2.9)</li>
<li><tt>before_widget</tt> &#8211; HTML to place before every widget.</li>
<li><tt>after_widget</tt> &#8211; HTML to place after every widget.</li>
<li><tt>before_title</tt> &#8211; HTML to place before every title.</li>
<li><tt>after_title</tt> &#8211; HTML to place after every title.</li>
</ul>
</blockquote>
<p>The next step is to add the code to the places where our widget will appear in our theme. To do this we will use the <a href="http://codex.wordpress.org/Function_Reference/dynamic_sidebar">dynamic_sidebar</a> function in WordPress. The most simple example of this in action is:</p>
<pre><code class="language-php">if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : endif;
</code></pre>
<p>If you have some default code to run if no widgets have been added to the sidebar, you would do it like this:</p>
<pre><code class="language-php">if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) :
	//Default code to run here
endif;
</code></pre>
<p>If you gave your widget area a name in the functions.php file then you can specifically load the settings for that widget by passing its name to the <a href="http://codex.wordpress.org/Function_Reference/dynamic_sidebar">dynamic_sidebar</a> function.</p>
<p>Finally we can now go to the Appearance -&gt; Widgets option in the WordPress menu to see our available widgets and widget areas. Adding / removing widgets is as simple as dragging and dropping them.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesowers.co.uk/wordpress/646/adding-widgets-to-your-wordpress-theme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Child themes in WordPress</title>
		<link>http://jamesowers.co.uk/wordpress/665/wordpress-child-themes/</link>
		<comments>http://jamesowers.co.uk/wordpress/665/wordpress-child-themes/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 08:51:40 +0000</pubDate>
		<dc:creator><![CDATA[jmz]]></dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://jamesowers.co.uk/?p=665</guid>
		<description><![CDATA[In WordPress a child theme is simply a theme that inherits style and functionality from it&#8217;s parent theme. All you really need to create a child theme is a style.css file in the themes directory of your WordPress installation. This quick article will show you situations in which child themes might be useful and how]]></description>
				<content:encoded><![CDATA[<p>In WordPress a child theme is simply a theme that inherits style and functionality from it&#8217;s parent theme. All you really need to create a child theme is a style.css file in the themes directory of your WordPress installation. This quick article will show you situations in which child themes might be useful and how to create them.</p>
<p><span id="more-665"></span></p>
<p>Child themes are useful in a few different situations. The first is theme frameworks. If you use the main theme framework as the parent theme, you can create a child theme to extend or change some of the functionality and style of the framework without ever modifying any of the frameworks original files. In theory you could have many child themes that all extend the parent theme.</p>
<p>The second situation where using child themes in WordPress can be useful is when you download a theme from the internet. By default WordPress will tell you when your themes need to be updated, if you do the update after making some modifications to your theme you will lose all of your changes, not good.</p>
<p>By using a child theme you can extend the parent theme and make your changes in there. Then if the parent theme is ever updated, you will still have your nicely intact child theme. There is still a possibility that something might break depending on what is changed in the update, but at least you haven&#8217;t lost all of your hard work!</p>
<p>Like most things in WordPress, setting up a child theme is pretty straight forward. First of all we would create a folder for our new theme inside the wp-content/themes folder of your WordPress installation. Inside that you will need a style.css file. Here&#8217;s an example of the header of a style.css file taken from the <a href="http://codex.wordpress.org/Child_Themes">official WordPress sites page on child themes</a>.</p>
<pre><code class="language-css">/*
Theme Name:     Twenty Eleven Child
Theme URI:      http://example.com/
Description:    Child theme for the Twenty Eleven theme
Author:         Your name here
Author URI:     http://example.com/about/
Template:       twentyeleven
Version:        0.1.0
*/
</code></pre>
<p>If you&#8217;ve ever created a theme before this won&#8217;t be new to you. The only option that is new is the &#8216;Template&#8217; option. This is simply the name of the folder that contains the theme you want to extend.</p>
<p>Now that you know what a child theme is and how to set one up, you never have to worry about overwriting your work again! Check out what the <a href="http://codex.wordpress.org/Child_Themes">WordPress Codex</a> has to say on child themes for more information.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesowers.co.uk/wordpress/665/wordpress-child-themes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting up Postmark with NameCheap</title>
		<link>http://jamesowers.co.uk/development/551/setting-up-postmark-with-namecheap/</link>
		<comments>http://jamesowers.co.uk/development/551/setting-up-postmark-with-namecheap/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 08:00:58 +0000</pubDate>
		<dc:creator><![CDATA[jmz]]></dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://jamesowers.co.uk/?p=551</guid>
		<description><![CDATA[If you run any sort of web app, the chances are you&#8217;ll be sending out some sort of transactional email. Whether it&#8217;s account verification, password reminders or something else most web based applications do it these days. You may have come across the problem where your perfectly nice emails get marked as spam so the]]></description>
				<content:encoded><![CDATA[<p>If you run any sort of web app, the chances are you&#8217;ll be sending out some sort of transactional email. Whether it&#8217;s account verification, password reminders or something else most web based applications do it these days. You may have come across the problem where your perfectly nice emails get marked as spam so the end user never sees them making your application look, well, a bit unprofessional.</p>
<p>This is where <a href="http://postmarkapp.com/">Postmark</a> comes in, they say that sending your transactional emails through their API can make them look better to the recieving server so they&#8217;re less likely to be marked as spam. What&#8217;s more, they even allow you to track how many emails you&#8217;ve sent and how many went into the intended recipients spam box. This promise plus the offer of 1000 free emails on registration and at only $1.5 for 1000 emails I decided to test Postmark out on a new application I was working on.</p>
<p><span id="more-551"></span></p>
<p>Setting up Postmark is as easy as whoever you manage your DNS through makes it! First off I signed up for a free Google apps account for my domain, this part it really straight forward. Next I signed up for Postmark account, again nice and easy. The next step was to set up the sender signatures, this is where it got tricky.</p>
<p>My main server is with 1&#038;1 and so the DNS was pointed at the 1&#038;1 name servers. I discovered that 1&#038;1 will not let you add the required settings to the DNS, it&#8217;s a no-go. Luckily, I had registered my domains with NameCheap who do let you add TXT information to the DNS, it just takes a bit of digging to find out how so I thought I&#8217;d share it as it might help somebody.</p>
<p>First of all you need to make sure the DNS is with NameCheap. When you are looking at your domain in the &#8216;Modify Domain&#8217; section there will be a button that says &#8216;Transfer DNS Back to Us&#8217; (see below).</p>
<p><img src="http://jamesowers.co.uk/wp-content/uploads/1.png" alt="" title="1" width="207" height="203" class="alignnone size-full wp-image-552" /></p>
<p>I saw a lot of people trying to do the next step before this one and get stuck. You won&#8217;t be able to see the button in the next step until you have done this!</p>
<p>Once I&#8217;d transferred the DNS back to NameCheap I needed to point the domain at my hosting so that my site still worked. You should see a new button that says &#8216;All Host Records&#8217; (see below). This is the button you couldn&#8217;t see without transferring the DNS to NameCheap.</p>
<p><img src="http://jamesowers.co.uk/wp-content/uploads/2.png" alt="" title="2" width="207" height="203" class="alignnone size-full wp-image-554" /></p>
<p>Pointing the domain at your hosting is simple. Copy the settings below but use your own IP (I&#8217;ve blurred mine out to stop people getting confused).</p>
<p><img src="http://jamesowers.co.uk/wp-content/uploads/3.png" alt="" title="3" width="581" height="218" class="alignnone size-full wp-image-555" /></p>
<p>The top two make sure that http://yourdomain.com and http://www.yourdomain.com both point to your site. The third one points any subdomains at your site. As far as the server is concerned http://something.yourdomain.com is a different domain to http://yourdomain.com. This just points them all to the same place (this one is optional really). The fourth one just lets you use FTP on your site by going to ftp.yoursite.com.</p>
<p>Next we need to do the last bit, adding the SPF and DKIM values given to us in the Postmark application. As far as I know, each signature has its own values given to it by the app. You will have to log in to your account, select the correct server (you will only have one if you&#8217;re setting your first site up) and then click the &#8216;Sender Signatures&#8217; link. Anyway, the codes will be something along the lines of:</p>
<pre class="brush: plain; title: ; notranslate">
v=spf1 a mx include:spf.mtasv.net ~all

k=rsa; p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhALZllb8wNEhCMSNSdMXG3eL...
</pre>
<p>The top code is the SPF one and the bottom code is the DKIM one. You should still be in the &#8216;All host records&#8217; section of namecheap. We&#8217;ll do the DKIM one first as that one took me longest to get right.</p>
<p>Under the * and &#8216;ftp&#8217; subdomains add another entry. In the first box you want to type:</p>
<pre class="brush: plain; title: ; notranslate">
pm._domainkey
</pre>
<p>In the second box copy and paste the whole second line of code that Postmark gave to you (starting with k=rsa; p=MHww&#8230;). In the third box select &#8216;TXT Record&#8217; and put 1800 in the TTL box.</p>
<p>That should do it for the DKIM. For the SPF. I put an @ symbol in the first box because it says in the legend at the bottom of the page that @ = none. Just leaving the first box blank might work for this one but I haven&#8217;t tested it, the @ worked for me.</p>
<p>Again in the second box paste the text from the first line of the code the app gave you. Choose &#8216;TXT Record&#8217; and 1800 again and save it. That should do it, you might have to wait a little while before the app can see the changes you have made.</p>
<p>Here&#8217;s an image of how my finished entries look:</p>
<p><img src="http://jamesowers.co.uk/wp-content/uploads/4.png" alt="" title="4" width="582" height="79" class="alignnone size-full wp-image-562" /></p>
<p>Also, if you have any problems head over to the <a href="http://help.postmarkapp.com/">Postmark support section</a> where I found Chris to be very helpful.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesowers.co.uk/development/551/setting-up-postmark-with-namecheap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easily get javascript libraries using Script SRC</title>
		<link>http://jamesowers.co.uk/general/526/script-src/</link>
		<comments>http://jamesowers.co.uk/general/526/script-src/#comments</comments>
		<pubDate>Tue, 25 May 2010 09:17:40 +0000</pubDate>
		<dc:creator><![CDATA[jmz]]></dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://jamesowers.co.uk/?p=526</guid>
		<description><![CDATA[When developing a new site I always like to make sure I use the latest release of my javascript library hosted by Google. Then I just update it to a local version before the site goes live. Today I came across a great little site that lets you get the links to the latest versions]]></description>
				<content:encoded><![CDATA[<p>When developing a new site I always like to make sure I use the latest release of my javascript library hosted by Google. Then I just update it to a local version before the site goes live.</p>
<p>Today I came across a great little site that lets you get the links to the latest versions of the most popular javascript libraries quickly and easily.</p>
<p><span id="more-526"></span></p>
<p><a href="http://scriptsrc.net/"><img src="http://jamesowers.co.uk/wp-content/uploads/scriptsrc.png" alt="scriptsrc" title="scriptsrc" width="520" height="129" class="alignnone size-full wp-image-527" /></a></p>
<p>You find your library on the page and click the &#8216;Copy&#8217; button. Then all the code you need to include the library in your page is copied to your clipboard. </p>
<p>I really like simple, easy to use sites like this that do one thing and do it well rather than trying to do too much.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesowers.co.uk/general/526/script-src/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Font API</title>
		<link>http://jamesowers.co.uk/general/520/google-font-api/</link>
		<comments>http://jamesowers.co.uk/general/520/google-font-api/#comments</comments>
		<pubDate>Thu, 20 May 2010 10:40:29 +0000</pubDate>
		<dc:creator><![CDATA[jmz]]></dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://jamesowers.co.uk/?p=520</guid>
		<description><![CDATA[I wrote an article a while back on font replacement techniques, this is a quick update about Google&#8217;s version of this which is seriously easy to use. The Google Font API allows you to use any font from their font directory or you can use the font loader to load other fonts which they co-developed]]></description>
				<content:encoded><![CDATA[<p>I wrote an article a while back on <a href="http://jamesowers.co.uk/typography/320/font-replacement-techniques/">font replacement techniques</a>, this is a quick update about Google&#8217;s version of this which is seriously easy to use.</p>
<p>The <a href="http://code.google.com/apis/webfonts/">Google Font API</a> allows you to use any font from their font directory or you can use the font loader to load other fonts which they co-developed with TypeKit.</p>
<p><span id="more-520"></span><br />
<img src="http://www.jamesowers.co.uk/wp-content/uploads/font/font.png" alt="" /></p>
<h2>Using the Google Font API</h2>
<p>There&#8217;s no point in re-inventing the wheel so I&#8217;ll just link to a great article and video guide by Jeffrey Way over at Nettuts. You can have a <a href="http://net.tutsplus.com/tutorials/html-css-techniques/quick-tip-google-fonts-api-youre-going-to-love-this/">look at his article here</a>.</p>
<h2>Other Info</h2>
<p>The great thing about the Google Fonts API is the fact that you can still use CSS3 effects on your text if you want to. As for page performance, obviously the initial download may slow your page down slightly but they do try to cache everything to minimise and extra loading times, just make sure you don&#8217;t try and load too many fonts!</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesowers.co.uk/general/520/google-font-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enabling and disabling a text input with a checkbox using jQuery</title>
		<link>http://jamesowers.co.uk/javascript/506/enabling-and-disabling-a-text-input-with-a-checkbox-using-jquery/</link>
		<comments>http://jamesowers.co.uk/javascript/506/enabling-and-disabling-a-text-input-with-a-checkbox-using-jquery/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 07:00:22 +0000</pubDate>
		<dc:creator><![CDATA[jmz]]></dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://jamesowers.co.uk/?p=506</guid>
		<description><![CDATA[I wanted to make a quick bit of javascript that would enable or disable a text input based on whether a checkbox was checked or not. I thought this might come in handy so I made it into a tutorial and posted it here. This script will work for any amount of checkboxes and text]]></description>
				<content:encoded><![CDATA[<p>I wanted to make a quick bit of javascript that would enable or disable a text input based on whether a checkbox was checked or not. I thought this might come in handy so I made it into a tutorial and posted it here. This script will work for any amount of checkboxes and text inputs on a page. You can see a <a href="http://jamesowers.co.uk/wp-content/uploads/roi/demo.html">working demo of it here</a>.</p>
<p><span id="more-506"></span></p>
<p>First we start off with our blank HTML page.</p>
<pre><code class="language-markup">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;title&gt;Enabling and disabling a text input with a checkbox using jQuery&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>Next include the jQuery js file from Google.</p>
<pre><code class="language-markup">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;title&gt;Readonly Input Box&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>Next we add our text inputs and check boxes. I have also added some labels so that you can see which check box goes with which input. I have added 3 inputs so to show that you can use this technique with multiple boxes.</p>
<pre><code class="language-markup">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;title&gt;Readonly Input Box&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Readonly Input Box&lt;/h1&gt;

&lt;label&gt;My Test Label 1&lt;/label&gt;
&lt;input type=&quot;checkbox&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test1&quot; /&gt;

&lt;br /&gt;

&lt;label&gt;My Test Label 2&lt;/label&gt;
&lt;input type=&quot;checkbox&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test2&quot; /&gt;

&lt;br /&gt;

&lt;label&gt;My Test Label 3&lt;/label&gt;
&lt;input type=&quot;checkbox&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test3&quot; /&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>Now I add a class to each check box so that I know which check boxes I want jQuery to watch for clicks on. You don&#8217;t have to do this but you might get some strange results if you didn&#8217;t and you had other check boxes on your page.</p>
<pre><code class="language-markup">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;title&gt;Readonly Input Box&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Readonly Input Box&lt;/h1&gt;

&lt;label&gt;My Test Label 1&lt;/label&gt;
&lt;input type=&quot;checkbox&quot; class=&quot;input_control&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test1&quot; /&gt;

&lt;br /&gt;

&lt;label&gt;My Test Label 2&lt;/label&gt;
&lt;input type=&quot;checkbox&quot; class=&quot;input_control&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test2&quot; /&gt;

&lt;br /&gt;

&lt;label&gt;My Test Label 3&lt;/label&gt;
&lt;input type=&quot;checkbox&quot; class=&quot;input_control&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test3&quot; /&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>I&#8217;ll also add a value to each check box, this will match the name of the input I want it to control.</p>
<pre><code class="language-markup">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;title&gt;Readonly Input Box&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Readonly Input Box&lt;/h1&gt;

&lt;label&gt;My Test Label 1&lt;/label&gt;
&lt;input type=&quot;checkbox&quot; class=&quot;input_control&quot; value=&quot;test1&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test1&quot; /&gt;

&lt;br /&gt;

&lt;label&gt;My Test Label 2&lt;/label&gt;
&lt;input type=&quot;checkbox&quot; class=&quot;input_control&quot; value=&quot;test2&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test2&quot; /&gt;

&lt;br /&gt;

&lt;label&gt;My Test Label 3&lt;/label&gt;
&lt;input type=&quot;checkbox&quot; class=&quot;input_control&quot; value=&quot;test3&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test3&quot; /&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>Next, the jQuery. First of all we need the javascript tags, this normally goes at the end of the document so that the HTML &#038; CSS are loaded before any javascript, giving the user the impression that the page is loading faster.</p>
<pre><code class="language-markup">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;title&gt;Readonly Input Box&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;h1&gt;Readonly Input Box&lt;/h1&gt;

&lt;label&gt;My Test Label 1&lt;/label&gt;
&lt;input type=&quot;checkbox&quot; class=&quot;input_control&quot; value=&quot;test1&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test1&quot; /&gt;

&lt;br /&gt;

&lt;label&gt;My Test Label 2&lt;/label&gt;
&lt;input type=&quot;checkbox&quot; class=&quot;input_control&quot; value=&quot;test2&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test2&quot; /&gt;

&lt;br /&gt;

&lt;label&gt;My Test Label 3&lt;/label&gt;
&lt;input type=&quot;checkbox&quot; class=&quot;input_control&quot; value=&quot;test3&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test3&quot; /&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
	$(document).ready(function(){
//Our code will go in here
	});
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>This tutorial will only deal with inputs that are all enabled when the page first loads (I might write another one in the future that covers having some disabled when the page loads) so we need to make sure that all the checkboxes are checked when the page loads. I did this with javascript, this might not be the right way to do it if you want it to degrade gracefully. To check all of my checkboxes when the page loads I use the code.</p>
<pre><code class="language-javascript">$(document).ready(function(){
		$('.input_control').attr('checked', true);
	});
</code></pre>
<p>Next I write some jQuery code that tells jQuery to do something whenever someone clicks one of the checkboxes with the class of &#8216;input_control&#8217;.</p>
<pre><code class="language-javascript">$(document).ready(function(){
		$('.input_control').attr('checked', true);
		$('.input_control').click(function(){
//Do this when someone clicks something with the class input_control
		});
	});
</code></pre>
<p>Now we do a simple if statement that says &#8216;if the check box was checked then set the disabled attribute to false, if the check box was unchecked then set the disabled attribute to true.</p>
<pre><code class="language-javascript">$(document).ready(function(){
		$('.input_control').attr('checked', true);
		$('.input_control').click(function(){
			if($('input[name='+ $(this).attr('value')+']').attr('disabled') == false){
				$('input[name='+ $(this).attr('value')+']').attr('disabled', true);
			}else{
				$('input[name='+ $(this).attr('value')+']').attr('disabled', false);	
			}
		});
	});
</code></pre>
<p>And that&#8217;s it! I&#8217;ve added the code of the completed page below and you can <a href="http://jamesowers.co.uk/wp-content/uploads/roi/demo.html">see a demo here</a>. There are probably other ways of doing this, but this is the simplest way that I came up with. I did try doing this with toggle rather than using an if statement but although the disable/enable checkbox worked, the checkbox didn&#8217;t check/uncheck.</p>
<h2>Completed Page</h2>
<pre><code class="language-markup">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;title&gt;Readonly Input Box&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;h1&gt;Readonly Input Box&lt;/h1&gt;

&lt;label&gt;My Test Label 1&lt;/label&gt;
&lt;input type=&quot;checkbox&quot; class=&quot;input_control&quot; value=&quot;test1&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test1&quot; /&gt;

&lt;br /&gt;

&lt;label&gt;My Test Label 2&lt;/label&gt;
&lt;input type=&quot;checkbox&quot; class=&quot;input_control&quot; value=&quot;test2&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test2&quot; /&gt;

&lt;br /&gt;

&lt;label&gt;My Test Label 3&lt;/label&gt;
&lt;input type=&quot;checkbox&quot; class=&quot;input_control&quot; value=&quot;test3&quot;/&gt;
&lt;input type=&quot;text&quot; name=&quot;test3&quot; /&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
	$(document).ready(function(){
		$(&#39;.input_control&#39;).attr(&#39;checked&#39;, true);
		$(&#39;.input_control&#39;).click(function(){
			if($(&#39;input[name=&#39;+ $(this).attr(&#39;value&#39;)+&#39;]&#39;).attr(&#39;disabled&#39;) == false){
				$(&#39;input[name=&#39;+ $(this).attr(&#39;value&#39;)+&#39;]&#39;).attr(&#39;disabled&#39;, true);
			}else{
				$(&#39;input[name=&#39;+ $(this).attr(&#39;value&#39;)+&#39;]&#39;).attr(&#39;disabled&#39;, false);	
			}
		});
	});
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://jamesowers.co.uk/javascript/506/enabling-and-disabling-a-text-input-with-a-checkbox-using-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Customizing the WordPress Admin Panel</title>
		<link>http://jamesowers.co.uk/wordpress/491/customizing-the-wordpress-admin-panel/</link>
		<comments>http://jamesowers.co.uk/wordpress/491/customizing-the-wordpress-admin-panel/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 14:19:45 +0000</pubDate>
		<dc:creator><![CDATA[jmz]]></dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[dashboard]]></category>
		<category><![CDATA[menu]]></category>
		<category><![CDATA[options]]></category>
		<category><![CDATA[panel]]></category>

		<guid isPermaLink="false">http://jamesowers.co.uk/?p=491</guid>
		<description><![CDATA[If you&#8217;re creating a website for a client you will normally find they don&#8217;t want to learn how to use everything in the WordPress admin panel. They probably hired you so that they didn&#8217;t have to learn loads of new stuff and I&#8217;m sure what they wanted was a simple admin panel that made updating]]></description>
				<content:encoded><![CDATA[<p><img src="http://jamesowers.co.uk/wp-content/uploads/wpadmin.png" alt="WPAdmin" /></p>
<p>If you&#8217;re creating a website for a client you will normally find they don&#8217;t want to learn how to use everything in the WordPress admin panel. They probably hired you so that they didn&#8217;t have to learn loads of new stuff and I&#8217;m sure what they wanted was a simple admin panel that made updating their site easy. </p>
<p><span id="more-491"></span></p>
<p>Unfortunately, as brilliant as WordPress is, if you simply gave them a login and left them to it the chances are they&#8217;d look at the admin panel, get scared and never go there again, or start changing all of the settings until they broke something. Luckily, there are a ton of different ways we can modify the WordPress admin panel to make it quicker and easier for our clients to use.</p>
<h2>Hiding stuff they don&#8217;t need</h2>
<p>This one is obvious, if they can&#8217;t see a button to click, then they can&#8217;t click it! I normally hide things to do with automated site backups (which you should be doing on all of your sites!), settings (for the site and plugins) etc. Basically stuff they wouldn&#8217;t normally need to use.</p>
<p>For this I use WPLite. Once installed WPLite gives you a list of all the options on the left menu in WordPress with a checkbox next to it. Simply select the ones you want to hide from the menu and that&#8217;s it! There is no editing any of WPs files and if in the future they need to see an option that they currently can&#8217;t, it&#8217;s as simple as logging in and changing some options. </p>
<p><img src="http://jamesowers.co.uk/wp-content/uploads/wplite.png" alt="WPLite" /></p>
<p>Just don&#8217;t forget not to hide the WPLite link from yourself! There is an option to show everything to admin users so it&#8217;s advisable to do that and set yourself up as admin and the other users as something else if possible.</p>
<p>A similar plugin to this that I haven&#8217;t tested is the <a href="http://wordpress.org/extend/plugins/hide-admin-panels/">Hide Admin Panels</a> plugin which says it will let you hide certain admin options from specific users. This could come in very hand for some sites.</p>
<h2>Integrating Analytics</h2>
<p>Everybody wants to know how much traffic they&#8217;re getting on their new website but giving a user some login credentials and a link to update their website and then some more credentials and another link for their web statistics can be a little overwhelming for them. Luckily there is a nice plugin for WordPress that allows you to easily integrate Google Analytics into the WordPress dashboard. No more links, no more login details, it just works! Have a look at <a href="http://ronaldheft.com/code/analyticator/">Google Analyticator</a>.</p>
<h2>Custom WordPress Option Panels</h2>
<p>If you&#8217;ve made a custom theme for a client. It might be a good idea to add some custom options to that theme to make it a better fit for the users. I wrote a post a little while back on <a href="http://jamesowers.co.uk/wordpress/471/wordpress-options-panels/">Custom WordPress Option Panels</a> that rounded up some tutorials.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesowers.co.uk/wordpress/491/customizing-the-wordpress-admin-panel/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
