<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>we evolve</title>
	<link>http://we-evolve.co.uk/</link>
	<description></description>
	<copyright>2009 Stoo Goff</copyright>
	<language>en</language>
	<item>
		<guid isPermaLink='false'>http://we-evolve.co.uk/go/26</guid>
		<title >Blocking Spam Comments Using a Honey Pot</title>
		<link >http://we-evolve.co.uk/articles/blocking-spam-comments-using-a-honey-pot</link>
		<description >Everyone who uses the internet is familiar with spam and the problems it causes. Most people's familiarity is through its intrusion on email, and I've already outlined how I use gmail to block email spam. Since running this site I've had to deal with a lot of comment spam. It goes in phases but I receive about 2&amp;ndash;3 spam comments per week and sometimes as much as 20. And this is a low traffic site.
My initial strategy was to delete spam comments as they appear. I receive a notification...</description>
		<pubDate>Sun, 01 Nov 2009 00:00:00 -0000</pubDate>
		<author>hello@we-evolve.co.uk (Stoo Goff)</author>
		<content:encoded>&lt;p&gt;Everyone who uses the internet is familiar with spam and the problems it causes. Most people's familiarity is through its intrusion on email, and I've already outlined &lt;a href=&quot;http://we-evolve.co.uk/articles/using-gmail-as-a-spam-filter&quot;&gt;how I use gmail to block email spam&lt;/a&gt;. Since running this site I've had to deal with a lot of comment spam. It goes in phases but I receive about 2&amp;ndash;3 spam comments per week and sometimes as much as 20. And this is a low traffic site.&lt;/p&gt;
&lt;p&gt;My initial strategy was to delete spam comments as they appear. I receive a notification email whenever a comment is posted and while working I'm never too far away from a computer so spam comments wouldn't appear for too long on the site. Of course, having to delete spam comments quickly became tedious!&lt;/p&gt;
&lt;p&gt;There are a number of common methods for blocking spam comments &amp;mdash; forcing the user to register with the site, hiding comments until approved by a moderator, &lt;a href=&quot;http://en.wikipedia.org/wiki/CAPTCHA&quot;&gt;CAPTCHA images&lt;/a&gt;, etc. Whatever method I decided on I knew it had to require as little thought from the end user as possible. I don't want to stop the few legitimate comments I am getting in my effort to stop spam.&lt;/p&gt;
&lt;p&gt;That cuts registration from my available options and, I would argue, CAPTCHA. While CAPTCHA is becoming more familiar to internet users and a lot of good work is being done by &lt;a href=&quot;http://recaptcha.net/&quot;&gt;reCAPTCHA&lt;/a&gt; it's still an impediment to the commenter. This leaves comment moderation, but that feels too close to my current system.&lt;/p&gt;
&lt;p&gt;After some  research I came across &lt;a href=&quot;http://en.wikipedia.org/wiki/Honeypot_(computing)&quot;&gt;honey pots as a security concept&lt;/a&gt; and found a lot of information in the article &lt;a href=&quot;http://nedbatchelder.com/text/stopbots.html&quot;&gt;Stopping spambots with hashes and honeypots&lt;/a&gt; by &lt;a href=&quot;http://nedbatchelder.com/&quot;&gt;Ned Batchelder&lt;/a&gt;. Using programming cunning to prevent spam is a bit more like it! I decided to try implementing the ideas outlined in the article one at a time, starting with a honey pot.&lt;/p&gt;
&lt;p&gt;The honey pot idea is very simple: provide something enticing for the spambot but hide it from the user. Spambots vary in their sophistication but most operate by trying to fill relevant information into the form e.g. a field named 'email' will be filled with an email address. Hidden fields are left untouched as these often contain information vital to filling in the form. The trick to the honey pot is that spambots will fill in &lt;em&gt;all&lt;/em&gt; text fields.&lt;/p&gt;
&lt;p&gt;With this in mind I created an additional text field in the comment form with the name of 'lastname'. It's randomly inserted into the form each time it is generated and removed from display by using CSS absolute positioning within the stylesheet. As far as a spambot is aware the field is there on the page &amp;mdash; you can see it by viewing the source code &amp;mdash; but doesn't appear to the end user. If the field is filled in when the form is submitted the comment is flagged as spam and not displayed on the site. I can then delete or allow the comment as I see fit. My only concern with this method is accessibility: screen readers will probably display the field. Currently the field is labelled 'Input not required' which I hope is enough to stop legitimate users from filling it in.&lt;/p&gt;
&lt;p&gt;Over the past 3 months this technique has worked incredibly well: I've had a 100% success rate so far.&lt;/p&gt;</content:encoded>

		<category >help</category>
<category >anti-spam</category>
<category >honey pots</category>
<category >recaptcha</category>
<category >eadn</category>
	</item>
<item>
		<guid isPermaLink='false'>http://we-evolve.co.uk/go/25</guid>
		<title >Order, Inheritance and Specificity in CSS</title>
		<link >http://we-evolve.co.uk/articles/order-inheritance-and-specificity-in-css</link>
		<description >Some quick notes on an easily misunderstood area of CSS.
One thing to remember with CSS is the order statements appear in the stylesheet is important along with inheritance and specificity. So if you have the following:
div {
	background-color: red;
}

... snip ...

div {
	background-color: green;
}
The green background will be applied. This is also true across multiple stylesheets. Rules from stylesheets linked later in the HTML will take precedence over stylesheets appearing earlier...</description>
		<pubDate>Sat, 19 Sep 2009 00:00:00 -0000</pubDate>
		<author>hello@we-evolve.co.uk (Stoo Goff)</author>
		<content:encoded>&lt;p&gt;Some quick notes on an easily misunderstood area of &lt;acronym title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/acronym&gt;.&lt;/p&gt;
&lt;p&gt;One thing to remember with CSS is the order statements appear in the stylesheet is important along with inheritance and specificity. So if you have the following:&lt;/p&gt;
&lt;pre&gt;div {
	background-color: red;
}

... snip ...

div {
	background-color: green;
}&lt;/pre&gt;
&lt;p&gt;The green background will be applied. This is also true across multiple stylesheets. Rules from stylesheets linked later in the &lt;acronym title=&quot;Hyper Text Markup Language&quot;&gt;HTML&lt;/acronym&gt; will take precedence over stylesheets appearing earlier in the HTML.&lt;/p&gt;
&lt;p&gt;Inheritance allows some styles to be inherited. Not all styles are, but generally the ones you would want to be inherited are. So borders aren't inherited but font and colour information generally is, so if you do:&lt;/p&gt;
&lt;pre&gt;body {
	color: blue;
	font: 0.9em bold verdana, sans-serif;
}

p {
	border: 1px solid gray;
}

span {
	color: green;
}&lt;/pre&gt;
&lt;p&gt;In this case all text on the page would be a medium sized Verdana in blue, except &lt;code&gt;spans&lt;/code&gt; which would be a medium sized Verdana in green. All paragraphs would have a grey border, but &lt;code&gt;span&lt;/code&gt; tags within paragraphs wouldn't have the border.&lt;/p&gt;
&lt;p&gt;Specificity is a little more complicated but assigns a sort of weighting to how rules are applied. Tags have the least 'weight', then classes / attributes, then ids then inline styles (styles set with the style attribute in the HTML). So using the previous example as a base, if we added the following rules:&lt;/p&gt;
&lt;pre&gt;.orange {
	border: 1px solid orange;
}

#border {
	border: 1px solid red;
}&lt;/pre&gt;
&lt;p&gt;Any HTML tag, including &lt;code&gt;p&lt;/code&gt;'s, with a class of orange would display an orange border, despite the previous &lt;code&gt;p&lt;/code&gt; rule in the stylesheet. A &lt;code&gt;p&lt;/code&gt; with an id of border and a class of orange would display a red border because the id is more specific than the class and the tag selector.&lt;/p&gt;
&lt;p&gt;The way you write your selectors is also important for specificity. The more specific your selector is the higher the specificity. That's a very confusing sentence but what it means is if you had &lt;code&gt;div p&lt;/code&gt; as your selector it would have more weight than &lt;code&gt;p&lt;/code&gt; on its own. Building on our body / p /span example from before, we can add the following rules:&lt;/p&gt;
&lt;pre&gt;p span {
	color: red;
}

.bordered {
	border: 1px solid gray;
}

p.bordered {
	border: 1px solid blue;
}&lt;/pre&gt;
&lt;p&gt;In this example all spans would be green, except those within &lt;code&gt;p&lt;/code&gt;'s, which would be blue. All tags with a class of bordered would have a grey border except for &lt;code&gt;p&lt;/code&gt;'s with a class of bordered. They'd have a blue border.&lt;/p&gt;
&lt;p&gt;Specificity, order and inheritance are important areas to understand in CSS, but specificity in particular can be confusing. If anyone wants any more information and Google doesn't help, contact me directly or post something in the comments.&lt;/p&gt;</content:encoded>

		<category >help</category>
<category >css</category>
<category >eadn</category>
	</item>
<item>
		<guid isPermaLink='false'>http://we-evolve.co.uk/go/24</guid>
		<title >Thoughts on dConstruct</title>
		<link >http://we-evolve.co.uk/articles/thoughts-on-dconstruct</link>
		<description >Last week was dConstruct here in Brighton, which I found to be a mix of interesting, inspiring and frustrating; but, above all, entertaining. The topic for the day was &quot;Designing for the Future&quot; and varied from a very high level dreamer's view of what could be, a look at how sci-fi has influenced interface design and vice-versa, to a very practical look at what can be done now in different media.

The speaking highlights for me were Russell Davies's talk on bringing the digital world to the...</description>
		<pubDate>Thu, 10 Sep 2009 00:00:00 -0000</pubDate>
		<author>hello@we-evolve.co.uk (Stoo Goff)</author>
		<content:encoded>&lt;p&gt;Last week was &lt;a href=&quot;http://2009.dconstruct.org/&quot;&gt;dConstruct&lt;/a&gt; here in &lt;a href=&quot;http://en.wikipedia.org/wiki/Brighton&quot;&gt;Brighton&lt;/a&gt;, which I found to be a mix of interesting, inspiring and frustrating; but, above all, entertaining. The topic for the day was &quot;Designing for the Future&quot; and varied from a very high level dreamer's view of what could be, a look at how sci-fi has influenced interface design and vice-versa, to a very practical look at what can be done &lt;em&gt;now&lt;/em&gt; in different media.&lt;/p&gt;

&lt;p&gt;The speaking highlights for me were &lt;a href=&quot;http://russelldavies.typepad.com/home/&quot;&gt;Russell Davies's&lt;/a&gt; talk on bringing the digital world to the physical realm and &lt;a href=&quot;http://www.microsoft.com/design/People/Detail.aspx?key=august&quot;&gt;August de los Reyes's&lt;/a&gt; comparison of university and corporate life and brief discussion of the design of the windows key.&lt;/p&gt;

&lt;p&gt;The real highlights for me were outside the conference room in amongst the bluster of the promotional area and book stores. There I got a chance to have a play with the &lt;a href=&quot;http://www.microsoft.com/surface/&quot;&gt;Microsoft Surface&lt;/a&gt; and to talk with &lt;a href=&quot;http://www.richardsprojects.co.uk/&quot;&gt;Richard&lt;/a&gt; about &lt;a href=&quot;http://friispray.co.uk/&quot;&gt;FriiSpray&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The Surface is a multi-user, multi-touch computer table produced by &lt;a href=&quot;http://www.microsoft.com/&quot;&gt;Microsoft&lt;/a&gt;. Mutli-touch technology is something I'm interested in, particularly with the open source &lt;a href=&quot;http://www.reactable.com/&quot;&gt;reactable&lt;/a&gt; software available. My first attempts at developing a multi-touch interface used a Wiimote controller and a couple of &lt;acronym title=&quot;Infrared&quot;&gt;IR&lt;/acronym&gt; pens built by &lt;a href=&quot;http://overthink.co.uk/&quot;&gt;Robbie&lt;/a&gt;. Youtube has a video of the &lt;a href=&quot;http://www.youtube.com/watch?v=0CYVxQ2OM9s&quot;&gt;multi-touch gallery&lt;/a&gt; I built and I'll post about it properly soon.&lt;p&gt;

&lt;p&gt;Richard's FriiSpray takes a very similar approach, using an IR light within a spray can to add graffiti to any image projected onto a screen. FriiSpray uses a Wiimote controller as a receiver for the IR light and has the added bonus of sending the resulting image to a &lt;a href=&quot;http://www.flickr.com/&quot;&gt;flickr&lt;/a&gt; &lt;a href=&quot;http://www.flickr.com/photos/friispray/&quot;&gt;account&lt;/a&gt; for anyone to view.&lt;/p&gt;

&lt;p&gt;What was really interesting, and funny to watch, was people's usage of FriiSpray. At a conference about interface development, where augmented reality and &quot;juicy&quot; interfaces were discussed and phrases like &quot;cybernetic &lt;a href=&quot;http://en.wikipedia.org/wiki/Synesthesia&quot;&gt;synesthesia&lt;/a&gt;&quot; were bandied around, outside was a perfect example of a tactile interface which exactly modelled its real world origins. When the IR spray can didn't work, the user shook the can! Exactly as if they were using a real can and graffitiing a wall. And as a bonus, Richard had observed this in the past and added ball bearings to the cans so they even sounded authentic!&lt;/p&gt;

&lt;p&gt;All in all an inspiring day at dConstruct, but frustrating as I'm not currently doing anything similar. Thanks to everyone who talked and to &lt;a href=&quot;http://clearleft.com/&quot;&gt;Clearleft&lt;/a&gt; for organising it.&lt;/p&gt;</content:encoded>

		<category >dconstruct</category>
<category >multi touch</category>
<category >friispray</category>
<category >design</category>
<category >conference</category>
	</item>
<item>
		<guid isPermaLink='false'>http://we-evolve.co.uk/go/22</guid>
		<title >Installing VMWare Server and Running Windows XP on Ubuntu 8.10 Intrepid</title>
		<link >http://we-evolve.co.uk/articles/installing-vmware-server-and-running-windows-xp-on-ubuntu-8-10-intrepid</link>
		<description >Recently I was asked to do some .Net development and, unfortunately, my cranky old Win XP laptop is definitely not up to the challenge. Not wanting to buy a new machine or mess with my Ubuntu install I decided to try a virtual install using VMWare Server 2.0. The following isn't exactly a how to, it's more notes and links on what I had to do, so I have any easy reference for next time.
A very good walk through of installing VMWare Server on Ubuntu Intrepid Ibex can be found here:
How to...</description>
		<pubDate>Wed, 29 Jul 2009 00:00:00 -0000</pubDate>
		<author>hello@we-evolve.co.uk (Stoo Goff)</author>
		<content:encoded>&lt;p&gt;Recently I was asked to do some &lt;a href=&quot;http://www.microsoft.com/NET/&quot;&gt;.Net&lt;/a&gt; development and, unfortunately, my cranky old &lt;a href=&quot;http://www.microsoft.com/windows/windows-xp/default.aspx&quot;&gt;Win XP&lt;/a&gt; laptop is definitely not up to the challenge. Not wanting to buy a new machine or mess with my Ubuntu install I decided to try a virtual install using &lt;a href=&quot;http://www.vmware.com/products/server/&quot;&gt;VMWare Server 2.0&lt;/a&gt;. The following isn't exactly a how to, it's more notes and links on what I had to do, so I have any easy reference for next time.&lt;/p&gt;
&lt;p&gt;A very good walk through of installing VMWare Server on Ubuntu Intrepid Ibex can be found here:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://maketecheasier.com/how-to-install-vmware-server-20-in-ubuntu-intrepid/2008/11/18&quot;&gt;How to Install VMware server 2.0 in Ubuntu Intrepid&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once the install is complete, creating a new virtual machine is simple. The thing to remember &amp;ndash; and this seems incredibly obvious now &amp;ndash; is creating a new virtual machine doesn't install an operating system. Just because you've selected an OS as part of the creation process doesn't mean it's installed on the machine. What you have is a fresh PC configured to best run the OS you've chosen. The next step is installing the OS.&lt;/p&gt;
&lt;p&gt;If you need to tweak the BIOS settings to change the boot order you may need to set your key mappings. I found I couldn't use the cursor keys to navigate around the BIOS. I can't find the website which gave me the information but correcting it was as simple as adding the following line to &lt;code&gt;/etc/vmware/config&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;xkeymap.nokeycodeMap = &quot;TRUE&quot;
&lt;/pre&gt;
&lt;p&gt;You'll need to sudo or have root access in order to make this change.&lt;/p&gt;
&lt;p&gt;In the end I didn't need to adjust the BIOS, but it's still a handy thing to know about.&lt;/p&gt;
&lt;p&gt;Installing XP from the CD also caused problems. It didn't have the correcft drivers for the hard drive, but switching it to BusLogic drivers and following the instructions here solved the problem:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://virtrix.blogspot.com/2007/09/vmware-installing-windows-xp-on-esx.html&quot;&gt;VMware: Installing Windows XP on ESX using LSI Logic driver&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once you have the OS installed and the machine up and running it's recommended you install VMWare tools, which come with VMWare Server.&lt;/p&gt;
&lt;p&gt;After that I was finished! Aside from the endless procession of windows updates...&lt;/p&gt;
&lt;p&gt;Next I want to try installing a few different OS's and after that, cloning my laptop.&lt;/p&gt;</content:encoded>

		<category >help</category>
<category >vmware</category>
<category >winxp</category>
<category >ubuntu intrepid</category>
	</item>
<item>
		<guid isPermaLink='false'>http://we-evolve.co.uk/go/21</guid>
		<title >32 bit DSN on 64 bit Windows</title>
		<link >http://we-evolve.co.uk/articles/32-bit-dsn-on-64-bit-windows</link>
		<description >Earlier in the week I came across something which had me stumped for a while. After a lot of training on the Endeca platform I finally had an opportunity to set up an instance for a new site. Unfortunately it was a duplication of an existing site so there wasn't that much to do.

Still, I got the tweaked version running on my dev box with no trouble. When I moved it to the staging server it wouldn't work. It consistently failed to connect to the database via a DSN, though the JDBC connection...</description>
		<pubDate>Sat, 18 Jul 2009 00:00:00 -0000</pubDate>
		<author>hello@we-evolve.co.uk (Stoo Goff)</author>
		<content:encoded>&lt;p&gt;Earlier in the week I came across something which had me stumped for a while. After a lot of training on the &lt;a href=&quot;http://www.endeca.com/&quot;&gt;Endeca&lt;/a&gt; platform I finally had an opportunity to set up an instance for a new site. Unfortunately it was a duplication of an existing site so there wasn't that much to do.&lt;/p&gt;

&lt;p&gt;Still, I got the tweaked version running on my dev box with no trouble. When I moved it to the staging server it wouldn't work. It consistently failed to connect to the database via a &lt;acronym title=&quot;Data Source Name&quot;&gt;DSN&lt;/acronym&gt;, though the &lt;acronym title=&quot;Java Database Connectivity&quot;&gt;JDBC&lt;/acronym&gt; connection used elsewhere in the configuration worked fine. I checked and double checked the DSN; it worked, no problems. I renamed it, removed and reset it, set it as a user DSN rather than a system DSN, to no avail.&lt;/p&gt;

&lt;p&gt;Then I remembered that it's a 64 bit machine, which has bitten me before with an incorrect &lt;a href=&quot;http://tortoisesvn.tigris.org/&quot;&gt;TortoiseSVN&lt;/a&gt; install. After a lot of reading I discovered this relevant 
&lt;a href=&quot;http://support.microsoft.com/kb/942976&quot;&gt;Microsoft Knowledge Base article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The 32 bit version of ODBC administrator is available on 64 bit machines, you just have to go looking for it. So I set up a 32 bit DSN and Endeca ran without a hitch.&lt;/p&gt;</content:encoded>

		<category >help</category>
<category >endeca</category>
<category >dsn</category>
<category >32bit</category>
<category >64bit</category>
	</item>
</channel>
</rss>
