<?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>The Sheep</title>
	<atom:link href="http://www.thesheep.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thesheep.co.uk</link>
	<description>Ovine Perspectives On The Digital Age</description>
	<lastBuildDate>Wed, 03 Feb 2010 00:57:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>A really simple font resizer using JQuery</title>
		<link>http://www.thesheep.co.uk/2010/02/02/a-really-simple-font-resizer-using-jquery/</link>
		<comments>http://www.thesheep.co.uk/2010/02/02/a-really-simple-font-resizer-using-jquery/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 22:55:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.thesheep.co.uk/?p=270</guid>
		<description><![CDATA[<p>Sometimes it&#8217;s useful to have links or buttons to increase the font size on a website. Even though browsers have built-in functions to resize content, not all users are aware of this, or can easily remember how to increase the&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>Sometimes it&#8217;s useful to have links or buttons to increase the font size on a website. Even though browsers have built-in functions to resize content, not all users are aware of this, or can easily remember how to increase the text size.</p>
<p>The general mechanism for resizing text is to have one link to increase the font size and one to reduce it. However, it can get tricky for the user to keep track of what the original size was, so sometimes people include a &#8216;reset font size&#8217; button.</p>
<p>At this point the UI is starting to get a tiny bit complicated, so I was looking for a way to create a dead-simple widget with just 2 options – small font or big font. Keep it simple.</p>
<p>I&#8217;m sure someone has done this before, but I couldn&#8217;t find a script on Google that did everything I wanted, including changing the styling of the currently selected font size to make it obvious, as well as a cookie to make the size selection persistent across pages in the site. So I hacked around with a couple of other scripts I found and created a solution using JQuery.</p>
<ul>
<li><a href="http://www.thesheep.co.uk/examples/font-resizer/"><strong>View the demo »</strong></a>.</li>
<li><a href="http://www.thesheep.co.uk/examples/font-resizer/font-resizer.zip">Download the source files</a></li>
</ul>
<p>The advantages of this solution are:</p>
<ul>
<li>The UI is really clear and simple (you could make buttons instead of links if you like)</li>
<li>A separate class is toggled for the currently selected size</li>
<li>The resize links are only displayed if the user has javascript enabled</li>
<li>The font size selection is persistent across pages</li>
<li>The resize affects the font-size as set on the HTML body element. So all text that you want to be resized needs to be sized in percentages or ems. If there are some elements you don&#8217;t want to be affected by the resizing, you can specify their size separately in pixels.</li>
<li>Unobtrusive Javascript</li>
</ul>
<p>A few notes:</p>
<ul>
<li>By loading the JQuery library from Google&#8217;s servers, it&#8217;s likely that the code will already be cached, thus saving download time</li>
<li>You need to include the <a href="http://plugins.jquery.com/project/cookie">JQuery Cookie plugin</a> separately</li>
<li>Font sizes for LARGE and SMALL need to be set in the JS file</li>
<li>The links need to be set to display: none within your stylesheet so they are hidden by default. They are then revealed for JS-capable browsers only</li>
</ul>
<p>I got the basic idea for how to approach this using JQuery from <a href="http://www.shopdev.co.uk/blog/text-resizing-with-jquery/">a post on ShopDev</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thesheep.co.uk/2010/02/02/a-really-simple-font-resizer-using-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using metaphors in web design</title>
		<link>http://www.thesheep.co.uk/2009/09/23/using-metaphors-in-web-design/</link>
		<comments>http://www.thesheep.co.uk/2009/09/23/using-metaphors-in-web-design/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 16:44:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[metaphor]]></category>
		<category><![CDATA[non-literal]]></category>

		<guid isPermaLink="false">http://www.thesheep.co.uk/?p=221</guid>
		<description><![CDATA[<p>Graphic design is all about communication, and on a website we usually want to communicate something about a service or product or organisation. We probably want to tell people about its benefits and strengths. Of course one way to do&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>Graphic design is all about communication, and on a website we usually want to communicate something about a service or product or organisation. We probably want to tell people about its benefits and strengths. Of course one way to do this is to tell people directly &#8211; to write down various facts about your service or product. Another way is to help shape a viewer&#8217;s emotional response to a web page by the way it is styled &#8211; particular uses of colour, contrast and typography are used to create a particular &#8216;look and feel&#8217;. This is communication working on a more subtle and &#8216;emotional&#8217; level. A third method we can use is to sort of combine the two and create a metaphor that communicates the essence of your message in a non-literal way. It&#8217;s something that we see around us in advertising all the time.</p>
<p>To give an example, at ILRT we were recently working on a new website for the Worldwide Universities Network, an alliance of 18 universities across the globe that join together to encourage interdisciplinary research. The main audience for the site are academic researchers who may be interested in starting a new collaborative research relationship with another group in another WUN university. In this case it was useful to distill out a key message for that audience &#8211; one that summarised the benefits offered by WUN &#8211; and marry that to an image that illustrates that message metaphorically:</p>
<p><img class="alignnone size-full wp-image-87" src="http://intdev.blogs.ilrt.org/files/2009/05/wun-homepage.jpg" alt="wun-homepage" width="600" height="153" /></p>
<p>The benefit of this type of design is that it allows you to communicate your message in a visual way. Images are more instantly accessible than words and require less effort to process. In this case the distant expanse of horizon ties in with the idea of looking at the future and meshes with the tag line. Tag lines can often be used to clarify the metaphor you are making and anchor a non-literal image to the actual subject of the design.</p>
<p>Here&#8217;s a homepage for a software company:</p>
<p><img class="alignnone size-full wp-image-261" title="stand-out" src="http://www.thesheep.co.uk/wp-content/uploads/stand-out.jpg" alt="stand-out" width="600" height="160" /></p>
<p>In this case we determined that the immediate appeal of the company&#8217;s software products was to help it&#8217;s clients stand out in the market place. So I set about trying to capture that concept in a non-literal way. In a literal sense, of course, fruit has very little to do with software. But the image implies the concept of &#8217;standing out from the crowd&#8217; or &#8216;being special&#8217; which is what we wanted to communicate in this case. The fruit also has a secondary connotation &#8211; that of being tasty. Images of delicious food work on our senses in a more immediate way than software usually does.</p>
<p>As a web designer, using conceptual or non-literal design solutions can be liberating. You know what it&#8217;s like, you&#8217;ve just landed a new job to design a website for a firm of accountants. The obvious choice is to use images of people in suits reading documents, perhaps a close-up of a spreadsheet or a calculator. Not the most inspiring stuff to work with. But perhaps we can look at it from another angle &#8211; what kind of function does a good accountant really perform in the life of a business? He is a necessary part of helping a company grow and flourish, helps to keep things in order. Something like a gardener perhaps? You could then shoot off to your favourite stock photo site and start looking at images of tended gardens or beautiful trees growing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thesheep.co.uk/2009/09/23/using-metaphors-in-web-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting up a local server on OS X Leopard</title>
		<link>http://www.thesheep.co.uk/2009/06/24/setting-up-a-local-server-on-os-x-leopard/</link>
		<comments>http://www.thesheep.co.uk/2009/06/24/setting-up-a-local-server-on-os-x-leopard/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 14:39:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<category><![CDATA[servers]]></category>

		<guid isPermaLink="false">http://www.thesheep.co.uk/?p=196</guid>
		<description><![CDATA[<p>This week I&#8217;ve spent quite a few hours trying to set up a local development environment on my new Mac. Although I&#8217;ve used the built in version of Apache 2, much of the other software that comes pre-installed with OS&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>This week I&#8217;ve spent quite a few hours trying to set up a local development environment on my new Mac. Although I&#8217;ve used the built in version of Apache 2, much of the other software that comes pre-installed with OS X is not ideal and needs to be replaced or tweaked. It is also not a bad idea to <a href="http://hivelogic.com/articles/view/using_usr_local">have your server software in /usr/local</a> to avoid it being potentially broken by system updates. This is a brief record of the steps necessary to create a solid server setup that suits me, mainly for running WordPress sites (PHP and MySQL) and Ruby on Rails. It&#8217;s really more of a record for myself if I ever have to do it again &#8211; although no doubt next time it will be on Snow Leopard and everything will be slightly different!</p>
<ol>
<li>We&#8217;ve going to use the built-in version of the Apache web server. To start/stop the web server, go to System Preferences in OS X and select Sharing > Web Sharing.</li>
<li>Move the Apache document root to a more convenient location (my personal &#8216;Sites&#8217; directory): open /etc/apache2/httpd.conf and change the &#8216;DocumentRoot&#8217; variable in 2 places (note: the PHP module should be left commented out, as it is by default). Next enable .htaccess by editing /etc/apache2/users/&lt;username&gt;/&lt;username&gt;.conf and specifying <code>Options All</code> and <code>AllowOverride All</code>. Restart Apache.</li>
<li>Download and install <a href="http://www.entropy.ch/phpbb2/viewtopic.php?t=3937" target="_blank">a more recent version of PHP</a> with more capability than the standard Apple one (GD library, Mcrypt, etc). This installs PHP into the directory /usr/local/php5.</li>
<li>Download and install <a href="http://downloads.mysql.com/archives.php?p=mysql-5.0&amp;v=5.0.77">a version of MySQL</a> server that correlates with that version of PHP (so the PHP MySQL library matches). MySQL is installed into /usr/local/mysql-5.0.77-osx10.5-x86 with a symbolic link from /usr/local/mysql.</li>
<li>Create or edit ~/.bash_login and add this line to the end: <code>export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"</code>. This makes it more convenient to interact with MySQL from the command line, as well as pointing our system to our custom software installations in /usr/local.</li>
<li>To start MySQL from the command line type <code>sudo mysqld_safe</code> (To stop MySQL type <code>mysqladmin -u root -p shutdown</code>)</li>
<li>Set password for MySQL root user: <code>mysqladmin  -u root -p 'mypassword'</code> (Note that the MySQL user is different from the Unix user that the MySQL is running under &#8211; usually _mysql).</li>
<li>To check current users in MySQL, use: <code>SELECT Host, User, Password FROM mysql.user;</code>. Set passwords for all as necessary. Alternatively, to limit access to your personal machine only, create the file /etc/my.cnf as detailed on <a href="http://hivelogic.com/articles/view/installing-mysql-on-mac-os-x">this page</a> (&#8216;A Note About Security&#8217;).</li>
<li>Set passwords for other users/hosts as required &#8211; see instructions half way down <a href="http://pages.cs.wisc.edu/~bolo/notes/mysql.html" target="_blank">this page</a>. Create an &#8216;admin&#8217; user for MySQL so we&#8217;re not using root in the various config files etc. Will need to <a href="http://dev.mysql.com/doc/refman/5.1/en/adding-users.html">grant privileges</a>.</li>
<li>Download and install <a href="http://www.phpmyadmin.net/">PHPMyAdmin</a>. Unzip and rename directory, then place in web document root. Make a file called config.inc.php to put in your blowfish password (any random phrase will do). You can copy libraries/config.default.php if you like.</li>
<li>Make sure you&#8217;ve installed Xcode from the OSX install disk.</li>
<li>Add in MySQL C bindings for Ruby, to make Rails faster &#8211; instructions near the bottom of <a href="http://hivelogic.com/articles/view/installing-mysql-on-mac-os-x">this page</a> (you will need to have Xcode Tools installed in OS X to do this &#8211; use your OS X installation disk if needed)</li>
<li>Follow the <a href="http://hivelogic.com/articles/view/ruby-rails-leopard/">instructions on HiveLogic</a> for installing Ruby and Ruby on Rails into /usr/local.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.thesheep.co.uk/2009/06/24/setting-up-a-local-server-on-os-x-leopard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Correct use of HTML headings on a homepage</title>
		<link>http://www.thesheep.co.uk/2009/06/11/correct-use-of-html-headings-on-a-homepage/</link>
		<comments>http://www.thesheep.co.uk/2009/06/11/correct-use-of-html-headings-on-a-homepage/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 16:20:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[markup]]></category>
		<category><![CDATA[wcag]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://www.thesheep.co.uk/?p=148</guid>
		<description><![CDATA[<p>There&#8217;s been quite a lot of debate about the correct use of HTML headings (H1, H2, H3, etc) to define a document structure. <a href="http://www.w3.org/TR/WCAG20-TECHS/G141.html">WCAG 2.0 says</a> that we should create a correctly nested structure of headings, not least to&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s been quite a lot of debate about the correct use of HTML headings (H1, H2, H3, etc) to define a document structure. <a href="http://www.w3.org/TR/WCAG20-TECHS/G141.html">WCAG 2.0 says</a> that we should create a correctly nested structure of headings, not least to help users with screen readers browse through content on a page. Conventional standards-aware wisdom says that each page should have a single H1, followed by H2s, H3s, etc. This is fine for a web page that is structured like a Word document &#8211; we have an overall heading, and then sub-headings. But what about a homepage that consists of some branding, navigation, and then a grid of &#8216;teasers&#8217; for deeper content on the site? This is a different kind of page structure, and arguably not one that HTML was designed for, so there&#8217;s going to be some compromise.</p>
<ol>
<li>There&#8217;s a good case for saying that on the hompage (only) the logo or name of the site should be marked up as H1. I don&#8217;t think this should be applied as a general rule on other &#8216;content pages&#8217; because this is a waste of the H1 function both for screen readers and for search engine ranking. But we could make an exception for the homepage. It sort of makes sense. But then you have a slightly fussy situation where the HTML and CSS for your logo is different for the homepage than for all other pages.</li>
<li>Another alternative would be to allow multiple H1s on the page and markup all the teaser headings as H1. This feels instinctively wrong to me, because I think an H1 should define the overall, main content for a page. It probably also dilutes the effectiveness of the headings in search engines, and isn&#8217;t going to help screen readers if they&#8217;re expecting a single H1.</li>
<li>Alternatively, we could choose to miss out the H1 tag for the homepage. This makes sense from the perspective of the information architecture for the site. Afterall, those teaser headings are H1s on the content pages they link to, but shouldn&#8217;t be H1s on the index page. In terms of screen readers: if an H1 is not found, presumably a decent screen reader will try jumping to H2. It may not be totally &#8216;correct&#8217; but I doubt this is going to trip someone up in practice? On the other hand, you are wasting the power of that H1 for search engine ranking.</li>
<li>I suppose a further option is to put in a &#8216;phantom H1&#8242; and then hide it with CSS. But that also feels a bit messy.</li>
</ol>
<p>So anyway, I&#8217;m leaning towards options 3 at the moment in cases where an H1 tag doesn&#8217;t really &#8216;make sense&#8217;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thesheep.co.uk/2009/06/11/correct-use-of-html-headings-on-a-homepage/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Designing Web Apps Workshop with Ryan Singer</title>
		<link>http://www.thesheep.co.uk/2009/05/01/designing-web-apps-workshop-with-ryan-singer/</link>
		<comments>http://www.thesheep.co.uk/2009/05/01/designing-web-apps-workshop-with-ryan-singer/#comments</comments>
		<pubDate>Fri, 01 May 2009 16:57:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[37 signals]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[ryan singer]]></category>
		<category><![CDATA[user research]]></category>

		<guid isPermaLink="false">http://www.thesheep.co.uk/?p=166</guid>
		<description><![CDATA[<p>Earlier this week I went to Ryan Singer&#8217;s workshop on <a href="http://carsonworkshops.com/2009/ryansinger/">Designing Web Application User Interfaces</a>. Ryan is a designer at <a href="http://www.37signals.com/">37 Signals</a>, the company behind the massively popular <a href="http://www.basecamphq.com/">Basecamp</a> project management software (which I use myself all&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>Earlier this week I went to Ryan Singer&#8217;s workshop on <a href="http://carsonworkshops.com/2009/ryansinger/">Designing Web Application User Interfaces</a>. Ryan is a designer at <a href="http://www.37signals.com/">37 Signals</a>, the company behind the massively popular <a href="http://www.basecamphq.com/">Basecamp</a> project management software (which I use myself all the time) and several other useful web apps. Here are some thoughts on the workshop.</p>
<h2>Clean UI Design</h2>
<p>Ryan has a real ability to simplify and re-structure a UI so that it communicates as clearly and effectively as possible. The basics of his approach are available in a paper on <a href="http://www.37signals.com/papers/introtopatterns/">UI Design Patterns</a> he wrote a few years ago. He argues that most of the important work in UI design actually consists of writing copy, rather than creating graphics or layouts. Cleanly written labels and headings are the key to improving &#8217;scanability&#8217; and therefore a clear UI. Sort of reminds me of Oliver Reichenstein&#8217;s <cite></cite>observation that<a href="http://informationarchitects.jp/the-web-is-all-about-typography-period/"> 95% of web design is typography</a>. And seeing Ryan in action working on a UI was definitely useful for me, even though I already know much of the &#8216;theory&#8217; and have done it many times myself. It gave me a bit of a fresh perspective.</p>
<h2>Designing for Yourself</h2>
<p>37 Signals seem to follow a sort &#8216;expert-led&#8217; design philosophy. They don&#8217;t really do user research. And I suspect they can get away with this partly because they are designing for themselves and for people just like them &#8211; other web geeks. It&#8217;s a pretty liberating way to work and it&#8217;s clear that they&#8217;re good at what they do, but I wonder if they would be quite so successful if they were designing web apps a completely different demographic. Basecamp is great but I wonder sometimes if non-geeks really &#8216;get it&#8217;. For example, at work when we ask non-techy clients to use it, they often seem to prefer email and telephone calls.</p>
<p>I was also a little bit shocked by Ryan&#8217;s admission that he &#8216;doesn&#8217;t really think about accessibility&#8217;. Perhaps that also says something about the target audience for their apps. But it wasn&#8217;t an entirely helpful stance to take in a workshop teaching a general audience in the UK about web app design.</p>
<h2>Workflow</h2>
<p>Ryan told us quite a lot about how the team works at 37 Signals. One clear advantage of using an <a href="http://en.wikipedia.org/wiki/Model-view-controller">MVC</a> framework like Rails is that, because of the strict separation of markup from program logic, the designer can continue to &#8216;own&#8217; the front-end CSS <strong><em>and</em></strong> HTML right through the life-cycle of the product. This sounds really ideal and I&#8217;m sure it makes a huge difference to the final quality of the interface. It can be really frustrating as a designer to hand over a carefully constructed HTML template, only to see it gradually erroded and degraded as it is integrated into the back-end and new functionality added.</p>
<p>Another key aspect of the 37 Signals workflow is the practice of designing directly in HTML. I think this kind of an interesting idea and has some upsides. Clearly it can work well and it results in designs that work with, rather than fight against, the medium of implementation. But it occurs to me that all of 37 Signals&#8217; applications are very much purely functional &#8216;tools&#8217;. For some web apps imagery and &#8216;visual design&#8217; are more important and in those cases where you need &#8216;more graphic design&#8217;, working directly in HTML is going to be very inefficient.</p>
<h2>Conclusion</h2>
<p>Overall it was valuable to see Ryan in action and to get first-hand exposure to the way he thinks about and analyses UI problems. I&#8217;ve already found myself thinking in a slightly different way when designing a complex page. It has also led to some useful discussions about how to allow designers to keep &#8216;ownership&#8217; of HTML markup right through the life-cycle of a web application. I think that is something 37 Signals have got exactly right. I think Ryan could make his workshops even better by doing a bit of extra research about the general environments people have to work in today, and considering some of the issues we face. For example, accessibility is quite an important issue and can&#8217;t just be brushed aside, and designing directly in HTML is not going to work for every kind of web application.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thesheep.co.uk/2009/05/01/designing-web-apps-workshop-with-ryan-singer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Customised search scope in WordPress</title>
		<link>http://www.thesheep.co.uk/2009/05/01/customised-search-scope-in-wordpress/</link>
		<comments>http://www.thesheep.co.uk/2009/05/01/customised-search-scope-in-wordpress/#comments</comments>
		<pubDate>Fri, 01 May 2009 16:09:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.thesheep.co.uk/?p=169</guid>
		<description><![CDATA[<p>Sometimes in a WordPress site you might want to have the option to search within different types of content. For example, if one category contains blog posts and another one contains white papers, you might want to allow people to&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>Sometimes in a WordPress site you might want to have the option to search within different types of content. For example, if one category contains blog posts and another one contains white papers, you might want to allow people to restrict their search query to blog posts only. Here is a slightly hacky way to achieve this.</p>
<p>Create a specific template for displaying search results &#8211; <strong>search.php</strong>. Then, by placing an extra field in your search forms, you can check for this value within search.php and display or hide certain categories depending on what you detect.</p>
<p>So for example on your homepage you might have a search form with a field like this:<br />
<code><br />
&lt;label&gt;Restrict search to blog: &lt;input name="scope" type="radio" value="blog" /&gt;&lt;/label&gt;<br />
</code></p>
<p>Then within <strong>search.php</strong> you would pick up that value like this:<br />
<code><br />
&lt;?php $scope = $_GET['scope']; ?&gt;<br />
</code></p>
<p>And then use that to skip certain categories within the loop:<br />
<code><br />
&lt;?php while (have_posts()) : the_post(); ?&gt;<br />
//Skip this result if it's out of scope:<br />
&lt;?php if($scope == 'blog' &amp;&amp; !in_category(1)) continue; ?&gt;<br />
....<br />
</code></p>
<p>Of course you can make this more complex by setting up multiple scopes and including more categories in each.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thesheep.co.uk/2009/05/01/customised-search-scope-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Adding a YouTube feed to a WordPress template</title>
		<link>http://www.thesheep.co.uk/2009/03/17/adding-a-youtube-feed-to-a-wordpress-template/</link>
		<comments>http://www.thesheep.co.uk/2009/03/17/adding-a-youtube-feed-to-a-wordpress-template/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 16:19:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://www.thesheep.co.uk/?p=151</guid>
		<description><![CDATA[<p>The built in WordPress function <a title="WordPress function reference for fetch_rss()" href="http://codex.wordpress.org/Function_Reference/fetch_rss" target="_blank">fetch_rss()</a> makes it easy to pull in an RSS feed from any other site and display it on your own blog.  The function gives you convenient access to&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>The built in WordPress function <a title="WordPress function reference for fetch_rss()" href="http://codex.wordpress.org/Function_Reference/fetch_rss" target="_blank">fetch_rss()</a> makes it easy to pull in an RSS feed from any other site and display it on your own blog.  The function gives you convenient access to the raw data from the feed, so you can parse it in any way you like. For example, you might want to pull in the feed from a particular YouTube user and display their most recent 3 videos in your sidebar.</p>
<p>The first thing we want to do is visit the user&#8217;s page on YouTube to grab the feed URL for that person. It might be your own account, of course, but there&#8217;s no need to log in, and feeds are publically available from anyone&#8217;s account. Once on a user&#8217;s page, your browser should display an RSS icon: click on it and copy the URL of the feed. It will look something like this:</p>
<p><code>http://gdata.youtube.com/feeds/base/users/MontyPython/uploads?alt=rss&amp;v=2&amp;orderby=published&amp;client=ytapi-youtube-profile<br />
</code><br />
In this case I&#8217;ve grabbed the feed from a channel.</p>
<p>Next open up the WordPress template file for the page you want to display the content on. It might be &#8217;sidebar.php&#8217;, for example. Wherever you want the videos to appear, you need to call the fetch_rss() function as described in the <a href="http://codex.wordpress.org/Function_Reference/fetch_rss" target="_blank">WordPress documentation</a>.</p>
<p><code class="prettyprint">&lt;?php<br />
// Get RSS Feed(s)<br />
include_once(ABSPATH . WPINC . '/rss.php');<br />
$rss = fetch_rss('http://gdata.youtube.com/feeds/base/users/MontyPython/uploads?alt=rss&amp;v=2&amp;orderby=published&amp;client=ytapi-youtube-profile');<br />
$maxitems = 3; //set number of items to display<br />
$items = array_slice($rss-&gt;items, 0, $maxitems);<br />
?&gt;<br />
</code></p>
<p>In order to embed a YouTube Flash movie we could use the <a href="http://www.alistapart.com/articles/flashembedcagematch/">nested objects method</a>, so we have valid HTML, and include some appropriate alternative content (in case the Flash fails to load for some reason). To set this up for each item, all we need from the feed is the ID of the video.</p>
<p>If we examine the RSS feed itself, we find that the video ID is contained in the final part of the &#8216;link&#8217; element. To extract it, we&#8217;ll need to use a tiny bit of PHP to break up the URL string.</p>
<p>Of course we need to repeat this for each item in the feed, so we set up a loop like this:</p>
<p><code class="prettyprint"><br />
&lt;ul&gt;<br />
&lt;?php if (empty($items)) echo '&lt;li&gt;No items&lt;/li&gt;';<br />
else foreach ( $items as $item ) : ?&gt;<br />
&lt;div&gt;<br />
&lt;?php<br />
      $youtubeid = strchr($item['link'],'='); //split off the final bit of the URL beginning with '='<br />
      $youtubeid = substr($youtubeid,1); //remove that equals sign to get the video ID<br />
      //Now embed the flash:<br />
      ?&gt;<br />
      &lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="320" height="265"&gt;<br />
      &lt;param name="movie" value="http://www.youtube.com/v/&lt;?php echo $youtubeid ?&gt;&amp;hl=en&amp;fs=1" /&gt;<br />
      &lt;!--[if !IE]&gt;--&gt;<br />
      &lt;object type="application/x-shockwave-flash" data="http://www.youtube.com/v/&lt;?php echo $youtubeid  ?&gt;&amp;hl=en&amp;fs=1" width="320" height="265"&gt;<br />
      &lt;!--&lt;![endif]--&gt;<br />
      &lt;p&gt;&lt;a href="http://www.youtube.com/v/&lt;?php echo $youtubeid ?&gt;"&gt;View movie&amp;raquo;&lt;/a&gt;&lt;/p&gt;<br />
      &lt;!--[if !IE]&gt;--&gt;<br />
      &lt;/object&gt;<br />
      &lt;!--&lt;![endif]--&gt;<br />
      &lt;/object&gt;<br />
      &lt;/li&gt;<br />
&lt;?php endforeach; ?&gt;<br />
&lt;/ul&gt;</code></p>
<p>This method is pretty easy to adapt for any type of RSS feed you might want to use: Vimeo, Slideshare, Twitter, etc. Of course there are loads of WordPress plugins that can help you embed this stuff, but sometimes a plugin doesn&#8217;t give you exactly the output you need, and it&#8217;s helpful to be able to parse the feed yourself. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.thesheep.co.uk/2009/03/17/adding-a-youtube-feed-to-a-wordpress-template/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Using Adobe Illustrator for web design</title>
		<link>http://www.thesheep.co.uk/2009/02/20/using-adobe-illustrator-for-web-design/</link>
		<comments>http://www.thesheep.co.uk/2009/02/20/using-adobe-illustrator-for-web-design/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 15:44:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[illustrator]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.thesheep.co.uk/?p=102</guid>
		<description><![CDATA[<p>The majority of web designers seem to use Photoshop, but Illustrator has some real strengths when it comes to designing web layouts. Moving and resizing elements on the canvas is much faster and more intuitive, and this helps make the&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>The majority of web designers seem to use Photoshop, but Illustrator has some real strengths when it comes to designing web layouts. Moving and resizing elements on the canvas is much faster and more intuitive, and this helps make the process more fluid. Illustrator does have some shortcomings &#8211; mainly its lack of strict adherence to pixel-based measurements. But these can be worked around. In this article I&#8217;m going to discuss some tips and techniques for using Illustrator to design web pages. Personally, I&#8217;ve used both Photoshop and Illustrator to design many web layouts, and Illustrator remains my tool of choice. Fireworks is also worth looking at.</p>
<h3>Snap to pixel</h3>
<p>In Illustrator CS1 and older, getting objects to ‘snap to pixel’ properly was difficult. Even when you set your units to &#8220;pixels&#8221;, positions on the canvas are very sensitive and tend to end up as fractions of a pixel. This introduces anti-aliasing artifacts when exporting the image so that your web graphics don&#8217;t look very &#8216;crisp&#8217;.</p>
<p>To get a ‘snap to pixel’ effect in these older versions of Illustrator, first set up your grid so that you have a grid line every 128px with 128 subdivisions. That in effect gives you a pixel grid, but with a usable number of lines visible. Then turn on &#8220;snap to grid&#8221; under the &#8220;View&#8221; menu. This keeps all your movements and transformations locked in to the nearest pixel, and keeps your graphics nice and crisp. (Thanks to <a href="http://www.corebasis.com" target="_blank">Hennning</a> for first showing me this technique).</p>
<p><img class="alignnone size-full wp-image-141" title="Snap to pixel option" src="http://www.thesheep.co.uk/wp-content/uploads/snap-to-pixel.png" alt="Snap to pixel option" width="240" height="177" /></p>
<p>As of CS2, Adobe introduced a specific ‘snap to pixel’ option, which you can see under the <em>View</em> menu after you select &#8220;Pixel preview&#8221;. This will keep all your objects snapped to the nearest pixel.</p>
<h3>Clean outlines</h3>
<p>By default, a stroke line around an object will follow the centre of the outline. This means that a stroke line of 1 pixel will have 0.5 pixels either side of that line, and we&#8217;ll end up with anti-aliasing artifacts. To solve this, always select &#8220;Align stroke to outside&#8221; or &#8220;Align stroke to inside&#8221; from the Stroke options window.</p>
<p><img class="alignnone size-full wp-image-124" title="Adding a 1px stroke" src="http://www.thesheep.co.uk/wp-content/uploads/pixel-stroke-example1.png" alt="Adding a 1px stroke" width="354" height="135" /></p>
<p>Unfortunately, even when you do this, and have &#8220;snap to pixel&#8221; turned on, Illustrator will randomly introduce an extra 1px anti-alias shade below the top edge of a rectangle. This is one of those annoying Illustrator bugs that (almost) makes you wish you&#8217;d just stuck with using Photoshop. This bug seems to occur in both CS3 an CS4 versions. The only way around this that I know of, if it is absolutely critical, is to draw the stroke separately as very thin rectangles &#8211; see below.<em><strong> [Update: setting the stroke weight to 0.999px solves this problem. Thanks to <a href="#comments">Benjamin McDowell</a> for posting this in the comments.]</strong></em></p>
<h3>Drawing lines</h3>
<p>In theory, the centre of a line lies between two pixels, and hence we get anti-aliasing problems when drawing lines with &#8220;snap to pixel&#8221; selected. Rather than nudging the centre measurement of a line by 0.5 pixels (which will give you a clean line), I prefer to draw lines as very thin rectangles. For example, a 1px horizontal line can be made up of a 1px high rectangle. In a similar way, controllable shading can be achieved by creating thin rectangles filled with a black to white gradient, setting the blending mode to &#8220;multiply&#8221;, and then reducing the opacity as required.</p>
<p><img class="alignnone size-full wp-image-139" title="Shading example" src="http://www.thesheep.co.uk/wp-content/uploads/shading-example1.png" alt="Shading example" width="406" height="173" /></p>
<h3>Use layers</h3>
<p>Unlike Photoshop, by default Illustrator allows any element on the canvas to be selected and moved/modified with a single click. This makes designing more fluid and quicker &#8211; resizing an object requires less clicks. It also makes it important to set up a few different layers, so that you can lock some layers while you work on others. I tend to place some example browser chrome on a top layer (to help get an &#8216;in-context&#8217; preview of the design), a layout grid on a second layer, main content on a third layer, and structural elements like boxes or columns on a &#8216;ground&#8217; layer. But depending on the complexity of the design, you may want to set up more layers &#8211; don&#8217;t forget to name them to help you keep track.</p>
<h3>Use character and paragraph styles</h3>
<p>Another area where Illustrator scores is its ability to define character and paragraph styles. Say you have a full web page design with a fair amount of content: text may appear in different columns, break-out boxes and sidebars. Now say you want to try tweaking the link colour, or changing the font of the headings. Instead of selecting each instance of link text in turn and making the colour adjustment, you can just make a global change to your &#8220;link&#8221; character style. It takes a little longer to set up, but you can end up saving time, especially if you&#8217;re the kind of perfectionist designer who likes to keep fiddling with things.</p>
<h3>Working with bitmaps</h3>
<p>For some things, like editing photos, you&#8217;re going to have to use Photoshop. It&#8217;s often worth &#8216;placing&#8217; PSD files into Illustrator so that transparency works properly. Placing an image (as opposed to just copying and pasting via the clipboard) also means that Illustrator can automatically update the image when you make changes to the file within Photoshop, which can be handy. Note that you can do some quick &#8216;cropping&#8217; work in Illustrator by making a &#8216;Clipping Mask&#8217;.</p>
<h3>Getting help</h3>
<p>There are lots of decent books and online tutorials around, although few of them focus on using Illustrator for web work. I&#8217;ve always preferred to teach myself, using the Adobe help files. A good place to go if you get really stuck is the official <a href="http://www.adobe.com/support/forums/">Adobe support forum</a>. There are some knowledgeable power users there, although don&#8217;t expect an answer right away. Illustrator does also have the odd strange bug every now and again, so if you really can&#8217;t work out what&#8217;s going on, it might not be your fault! 99% of the time though, the answer is there somewhere in the help files.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thesheep.co.uk/2009/02/20/using-adobe-illustrator-for-web-design/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>CSS typography: setting a vertical rhythm</title>
		<link>http://www.thesheep.co.uk/2009/01/14/css-typography-setting-a-vertical-rhythm/</link>
		<comments>http://www.thesheep.co.uk/2009/01/14/css-typography-setting-a-vertical-rhythm/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 12:31:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[typography]]></category>

		<guid isPermaLink="false">http://www.thesheep.co.uk/?p=80</guid>
		<description><![CDATA[<p>An <a href="http://www.webtypography.net/Rhythm_and_Proportion/Vertical_Motion/2.2.2/">increasing</a> <a href="http://24ways.org/2006/compose-to-a-vertical-rhythm">number</a> <a href="http://www.alistapart.com/articles/settingtypeontheweb">of</a> <a href="http://www.markboulton.co.uk/journal/comments/incremental_leading/">people</a> are starting to think about vertical rhythm in their web typography, so I thought I&#8217;d share my CSS implementation, which uses <em>ems</em> (to allow for text resizing), a global <em>line-height</em> and&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>An <a href="http://www.webtypography.net/Rhythm_and_Proportion/Vertical_Motion/2.2.2/">increasing</a> <a href="http://24ways.org/2006/compose-to-a-vertical-rhythm">number</a> <a href="http://www.alistapart.com/articles/settingtypeontheweb">of</a> <a href="http://www.markboulton.co.uk/journal/comments/incremental_leading/">people</a> are starting to think about vertical rhythm in their web typography, so I thought I&#8217;d share my CSS implementation, which uses <em>ems</em> (to allow for text resizing), a global <em>line-height</em> and negative margins for headings.</p>
<p>The basic idea behind composing to a vertical rhythm is to keep text lined up on an imaginary grid of evenly spaced horizontal lines all the way down the page. The effect is unconscious to the average reader but helps to make the layout of the page feel harmonious and restful.</p>
<p>Handily, the CSS property <em>line-height</em> can be set globally on the BODY element and inherited down through every other element to form the basis of our invisible grid (which I&#8217;ve made visible on <a title="View example in a new window" href="http://www.thesheep.co.uk/examples/vertical-rhythm/" target="_blank">my example</a>). We also set a default font size in a similar way:</p>
<blockquote><p><code>body {<br />
font-family: Verdana, sans-serif;<br />
font-size: 0.875em; /* set default font size to 14px */<br />
line-height: 1.42857em; /* set global line height to 20px */<br />
}</code></p></blockquote>
<p>In order to maintain our grid, it is important that the margins relate to the line height rather than the font size. So we set margins on individual element types like this:</p>
<blockquote><p><code>p { margin: 1.42857em 0; /* Set margins on paragraphs to 1 x line-height */ }</code></p></blockquote>
<p>Of course, not all text on a page will be the same size, so we can vary this on individual element types (note that this doesn&#8217;t affect the line height, which retains its value as inherited from the body element). The important thing is to adjust the margins accordingly:</p>
<blockquote><p><code>#sidebar p {<br />
font-size: 0.85714em; /* reduce font-size to 12px for #sidebar */<br />
margin: 1.6667em 0; /* adjust margins accordingly */<br />
}</code></p></blockquote>
<p>You&#8217;ll see there&#8217;s a bit of maths going on here. To work out a new font size in ems, simply divide the target pixel size by the default pixel size. So if the default font size is 14px and we want a pixel size of 12px, we set it to 12/14 = 0.8571. Then, remembering that margins relate to the font size, we scale them so they match the global line height. In this case we want a margin of 20px (to match our line height) so the calculation is 20/12 = 1.6667.</p>
<p>So far so good. The only other tricky bit comes if we want to set the margins on our headings so that they are closer to the text below them, and have a bigger margin above. This helps re-inforce the relationship between a section of text and its heading, and helps create more appropriate spacing between sections.</p>
<p>One way to achive this is to double the top margin for headings, but that can make the spacing pretty large. So often I prefer to move the headings down by a fraction of the global line height. The important thing here is to keep the overall rhythm going, even though the rhythm is broken for a particular heading (maybe we should call this &#8217;syncopated headings&#8217;). To do this, just make sure that when you take something off the bottom margin, you add the same amount onto the top margin. That way the overall grid is maintained. We can use negative bottom margins to help with the interaction with the top margin on a following P element:</p>
<blockquote><p><code>h2 {<br />
font-size: 1.2857em; /* 18px */<br />
margin: 1.6666em 0 -0.5556em; /* top margin: 30px, bottom margin: 10px */<br />
}</code></p></blockquote>
<p>And that&#8217;s basically it. You can see a live demo of this technique <a title="View example in a new window" href="http://www.thesheep.co.uk/examples/vertical-rhythm/" target="_blank">here</a>. I&#8217;ve added the horizontal grid lines on with a background image, to help see how the spacing works.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thesheep.co.uk/2009/01/14/css-typography-setting-a-vertical-rhythm/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Speaking to other SSH users</title>
		<link>http://www.thesheep.co.uk/2008/12/19/speaking-to-other-ssh-users/</link>
		<comments>http://www.thesheep.co.uk/2008/12/19/speaking-to-other-ssh-users/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 11:51:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.thesheep.co.uk/?p=78</guid>
		<description><![CDATA[<p>A not very useful tip:</p>
<p>To check who may be on your machine, open the Terminal and type &#8216;who&#8217; (or to see who was on recently, type &#8216;last&#8217;).</p>
<p>To send everyone a message type:</p>
<p>echo &#8216;Stop sneaking around on my&#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>A not very useful tip:</p>
<p>To check who may be on your machine, open the Terminal and type &#8216;who&#8217; (or to see who was on recently, type &#8216;last&#8217;).</p>
<p>To send everyone a message type:</p>
<p>echo &#8216;Stop sneaking around on my machine&#8217; | wall</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thesheep.co.uk/2008/12/19/speaking-to-other-ssh-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 4.812 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-03-17 12:09:22 -->
