<?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>Brandnoo &#187; Web Development</title>
	<atom:link href="http://www.brandnoo.com/category/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.brandnoo.com</link>
	<description>A blog by Ben Hindmarch</description>
	<lastBuildDate>Wed, 30 Sep 2009 09:54:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>S2U Cubed</title>
		<link>http://www.brandnoo.com/2009/09/30/s2u-cubed/</link>
		<comments>http://www.brandnoo.com/2009/09/30/s2u-cubed/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 09:54:43 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.brandnoo.com/?p=202</guid>
		<description><![CDATA[I&#8217;ve just had a go at creating my second WordPress theme. It&#8217;s not quite as customisable as Marchie Candy (my first theme), but was an interesting exercise in CSS.
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just had a go at creating my second WordPress theme. It&#8217;s not quite as customisable as Marchie Candy (my first theme), but was an interesting exercise in CSS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandnoo.com/2009/09/30/s2u-cubed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technical Prowess &amp; the Inability to Say Sorry</title>
		<link>http://www.brandnoo.com/2008/08/14/technical-prowess-the-inability-to-say-sorry/</link>
		<comments>http://www.brandnoo.com/2008/08/14/technical-prowess-the-inability-to-say-sorry/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 07:53:13 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.brandnoo.com/2008/08/14/technical-prowess-the-inability-to-say-sorry/</guid>
		<description><![CDATA[This is a rant. Just so you know.
At work it&#8217;s been a bad week for our hosting partner. We found out on Monday that they had been serving Webalizer on our server without telling us for a whole year. So that&#8217;s one year of confidential marketing reports freely available to anyone who stumbles on the [...]]]></description>
			<content:encoded><![CDATA[<p>This is a rant. Just so you know.</p>
<p>At work it&#8217;s been a bad week for our hosting partner. We found out on Monday that they had been serving Webalizer on our server without telling us for a whole year. So that&#8217;s one year of confidential marketing reports freely available to anyone who stumbles on the URL (which was not hard to guess). After ignoring my first request (marked urgent) they replied with a snotty email telling me it stats are installed by default, but these days they don&#8217;t do that. Of course, I was overjoyed to hear that their new customers don&#8217;t suffer this embarrassing lapse in security.</p>
<p>No apology.</p>
<p>On Tuesday I chased a new account request with them that wasn&#8217;t done from the previous day. An equally unapologetic response.</p>
<p>On Wednesday we realised that after repeated requests to have somebody who has moved to another team in my company to be removed as a contact, it still wasn&#8217;t done. They told us to go through every individual domain registered with them and to change the contact name listed. We responded with a firm &#8216;hell no,&#8217; as we&#8217;re the paying customer and will not spend hours going through our domains because of their inability to create an efficient management tool. They responded back with what was effectively flipping us the bird, saying they&#8217;re not willing to make the changes.</p>
<p>Today they told me that the Senior Developer at Host wasn&#8217;t an authorised contact onour account. I sent them email proof that I requested Werner has the same authorisation as I do back in January. Their response was to tell me that we&#8217;ve got two accounts, and Werner&#8217;s only authorised on one. No apology.</p>
<p>I understand how it can be hard to say sorry. When something goes wrong, putting a &#8217;sorry&#8217; in an email takes guts. Although when you don&#8217;t do it, it makes you look cowardly and a little pathetic. We don&#8217;t doubt they&#8217;re good at what they do, and an apology wouldn&#8217;t change that view but actually help us in that we&#8217;d know they understood something went wrong and will make sure it doesn&#8217;t happen again.</p>
<p>&#8216;Sorry&#8217; for the rant. See?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandnoo.com/2008/08/14/technical-prowess-the-inability-to-say-sorry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML 5. New Elements, Attributes, Problems</title>
		<link>http://www.brandnoo.com/2008/01/27/html-5-new-elements-attributes-problems/</link>
		<comments>http://www.brandnoo.com/2008/01/27/html-5-new-elements-attributes-problems/#comments</comments>
		<pubDate>Sun, 27 Jan 2008 06:31:56 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.brandnoo.com/2008/01/27/html-5-new-elements-attributes-problems/</guid>
		<description><![CDATA[I&#8217;ve been reviewing the document at the w3c about the new elements in HTML 5.  I won&#8217;t repeat what the document covers, so read it for yourself at http://www.w3.org/TR/html5-diff/. This article is aimed at discussing the new elements and attributes used in the new version. Looking at the additions from the perspective of a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been reviewing the document at the w3c about the new elements in HTML 5.  I won&#8217;t repeat what the document covers, so read it for yourself at <a href="http://www.w3.org/TR/html5-diff/">http://www.w3.org/TR/html5-diff/</a>. This article is aimed at discussing the new elements and attributes used in the new version. Looking at the additions from the perspective of a marketer rather than an academic I can see several issues I would have.</p>
<p>Just as a side note, I am aware that browsers released in the future will continue to support HTML 4 and other previous versions, so I&#8217;m not trying to encourage any kind of panic. I&#8217;m simply imagining using HTML 5 (based on the linked article, above) for the things my team and I do every day.</p>
<p><strong>Tracking</strong><br />
There&#8217;s a new attribute for the a and area elements called &#8216;ping&#8217;.  This is used for tracking, so when a link is clicked the URI is pinged at the same time. This is designed as a simpler alternative than the current method that involves sending the user to a page that tracks the click and redirects to the content page. This also gives the user the ability to switch tracking off. I know that absolutely none of my clients would appreciate this as a feature (why would they opt for profiling a fraction of their audience opposed to all of it?). Another aspect of this would mean that users would be made more aware of website user tracking. This is not necessarily a bad thing, but I could imagine plenty of confusion for a lot of users in determining the difference between regular audience trackers and snooping on an individual. How would you explain tracking to your aunt without her feeling as if her privacy was being invaded?</p>
<p><strong>Forms</strong><br />
HTML forms are getting some fresh air. New input types support inserting time-related data, URLs and email addresses. Added to that is the attribute &#8216;required&#8217; that&#8217;s been thrown into the mix. This is a step in the right direction given the number of bad JavaScript form validators in circulation, but the helpfulness of such an addition is limited to how browsers implement the changes.</p>
<p>If I were to create a simple form asking a user for a name, email and serial number I may run into some problems. For the &#8216;name&#8217; field I would just add the required attribute on a normal text field as a name is going to be text: there&#8217;s nothing else to validate. The email field would use the new input type of &#8216;email&#8217;, and also the required attribute to ensure the data was indeed an email address. But what of the &#8217;serialNumber&#8217; field? There is no input type for my serial number, so in order to properly validate the data as being a valid serial number I&#8217;d have to use a regular expression within a JavaScript function to check that the field value follows the format I expect. I&#8217;d be mixing native browser data validation with supporting JavaScript functionality, which I think is potentially very messy!</p>
<p>I think the addition of the time and date input types are really useful. It means users can select dates from a familiar interface. I think the email and URL field types are an attempt to bring data validation to the browser, and given the complexity and the range of data that often goes into forms I think that this could prove difficult.</p>
<p><strong>The good bits</strong><br />
There are some really nice additions to this version of HTML. Making the embed tag a w3c recommendation will mean easier Flash implementation in the future.</p>
<p>Header and footer as elements will possibly confuse new web developers with both &#8216;head&#8217; and &#8216;header&#8217; being used in the same document but for different uses. They will probably be more useful for SEO reasons, as I don&#8217;t see why developers would stop using div tags with a &#8216;header&#8217; or &#8216;footer&#8217; id attribute.</p>
<p>The nav tag will be great for improving a web page&#8217;s accessibility offering, since it enables the developer to indicate where the site navigation sits.</p>
<p>I&#8217;m interested in the canvas element, and what that will mean. It is meant to provide a space for rendering media on the fly and spawning on-page games and graphs.</p>
<p>There aren&#8217;t many new features that I saw that are geared-up towards AJAX fans, however the &#8216;event-source&#8217; and &#8216;output&#8217; elements might prove to be useful.</p>
<p>Back with forms, there is now a &#8216;form&#8217; attribute to be used within fields that means a single form field can belong to more than one form.</p>
<p><strong>No more frames!</strong><br />
Framesets and frame elements have been shown the door in this version of HTML. The Iframe element still exists, but the w3c found that the standard frame elements were decremental to accessibility so therefore scrapped them. I haven&#8217;t seen frames used in quite a while, but I do remember them being an important part of my first few websites in the 90s. I&#8217;ve also seen framesets used by SEO companies (the SEO content would go within the &#8216;noframes&#8217; tag). I think scrapping frames is a good move, but it could really help accessibility.</p>
<p><strong>Problems with HTML emails and CMS content</strong><br />
One thing my agency do quite a lot is build HTML emails for subscribers to our clients&#8217; brands. With the end of the width and height, background, and most importantly the style attributes it&#8217;s going to be hard to build HTML emails for applications that have poor HTML parsers. This includes Hotmail, Gmail and Yahoo! online email readers that all parse HTML email content on the server before it&#8217;s displayed in the browser to prevent the content impacting the application interface. I agree that in principle, all style information should be kept out of the HTML template &#8211; this is the job of CSS. Although building emails is a big part of my team&#8217;s responsibilities and the abandonment of the inline style information is going to either force the email applications to be more compliant or is going to make life a living hell for the guy in my office who builds these emails!</p>
<p>Also I&#8217;m writing this in Wordpress: one of many CMS&#8217;s available for free or commercial license and one of millions when counting the bespoke CMS solutions created all the time.  To allow authors using these CMS&#8217;s to control how their information is displayed (such as alignment, colour etc.) the style attribute would have to be used. I cannot see how a CMS could be efficient in managing style information as a separate entity to the content being written given that the style attribute is to be pulled as an HTML standard.</p>
<p><strong>My thoughts</strong><br />
I think the w3c have been careful in analysing popular use of HTML and how they can improve it. Although I think the developments of HTML in this version may be trying to become too involved directly with the user that might create a lot of poorly implemented web pages. I also think that dynamic content created with CMS applications and such have not been considered properly.</p>
<p>I definitely agree with attempts to improve accessibility, and the inclusion of better data descriptors will no doubt help that effort.  However, I doubt that the ping attribute will prove popular with developers unless users come to expect to be able to choose whether they&#8217;re tracked or not; I question the need for browser-based form data validation; I&#8217;m also unsure about the decision to rely more heavily on CSS over inline style information.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandnoo.com/2008/01/27/html-5-new-elements-attributes-problems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Developing for Creative Agencies: a Different Animal?</title>
		<link>http://www.brandnoo.com/2007/10/12/web-developing-for-creative-agencies-a-different-animal/</link>
		<comments>http://www.brandnoo.com/2007/10/12/web-developing-for-creative-agencies-a-different-animal/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 08:05:15 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.brandnoo.com/2007/10/12/web-developing-for-creative-agencies-a-different-animal/</guid>
		<description><![CDATA[The other week I met up with my old Technical Director whilst I was in London and spent a short while reflecting on how hard it seems to be to find developers, and then further to that how hard it is to find developers suited to agency work.
Now I&#8217;m in an agency where I&#8217;m the [...]]]></description>
			<content:encoded><![CDATA[<p>The other week I met up with my old Technical Director whilst I was in London and spent a short while reflecting on how hard it seems to be to find developers, and then further to that how hard it is to find developers suited to agency work.</p>
<p>Now I&#8217;m in an agency where I&#8217;m the only Web Developer, I&#8217;m on the interview panel when it comes to finding other developers. This process has meant I&#8217;ve realised how hard it is to find people suitable for the job. There seems to be a mix of designers wanting to try their hand at developing and semi-skilled developers trying to go for a senior position before their time. The creative industry doesn&#8217;t seem to attract the talented developers it requires.</p>
<p>I&#8217;ve met a few other developers who are skilled but wouldn&#8217;t like working in a creative agency. They&#8217;re application developers, not web developers. When I asked, they said they actually make an effort to stay clear of jobs like mine. I was not going to be able to convince them to send me their CV. Finding Web Developers for our agency isn&#8217;t going to be so easy.</p>
<p>There are characteristics I think developers in creative agencies need to be born with or quickly acquire in order to survive:</p>
<ol>
<li><strong>Social skills. </strong>Geeks notoriously don&#8217;t have the best people skills, and when it comes to working in a creative agency where sitting in the corner keeping to yourself isn&#8217;t going to work, you&#8217;re going to have to face up to the fact there&#8217;s no getting out of going to lunch with the chatty project manager who thinks as a web developer you should be able to fix his X-Box. I&#8217;ve also had to feign an interest in sports a number of times, just to keep up.</li>
<li><strong>Ability to work with computer illiterates.</strong> Being able to resist self-harm when I&#8217;m politely asked to download files and burn them onto a DVD as that is, apparently, what I do for a living. Oh, and I can also offer lots of advice about PowerPoint transitions.</li>
<li><strong>Put a project down, picking it up again; repeat. </strong>This is more about developing in a way that allows the project to be continued after being put on hold for x amount of time. For example, I&#8217;d stop working on Project A because a more urgent Project B needs kicking off, then a number of weeks later I&#8217;d be asked to carry on with Project A from where I left off for a couple of days until Project C gets signed off. And no, I can&#8217;t get more time for Project A as it&#8217;s already over-budget and we don&#8217;t want the client back in for another meeting about timings as he eats all the best cookies and hits on the receptionist.</li>
<li><strong>Explain yourself in small short words.</strong> Bearing in mind that some people in the office still think that a hyperlink is a new type of Japanese train, they&#8217;re not going to understand DNS propegation is the reason we can&#8217;t launch the website right now, after lunch on a Friday afternoon. Explaining technical concepts to non-technical people take a long patience and short words.</li>
<li><strong>Fight for testing. Or test post-launch.</strong> Testing is something expected by everyone to be in the project plan, it even makes it into the Gantt charts the producer writes up, but it will be the first thing to go if the deadline looms a little too close for comfort. Or there may be a testing phase, but this is soon followed by changes to the creative that nullifies all testing done so far. Or there will be a testing phase, but only after the site has launched. I can&#8217;t point the finger of blame at anyone in particular, as it&#8217;s the way things work when you&#8217;ve got a small project with a tough deadline. The client asks for changes but the deadline won&#8217;t move. Proper testing seems to be a luxury reserved for those clients lacking extensive change requests and a clear understanding of what &#8217;signing off&#8217; really means.</li>
<li><strong>See the design as the designer sees it.</strong> I&#8217;m anal about my work, so quite rightfully the designer will be anal about hers. A bad designer will never say when I&#8217;ve messed up a design because she&#8217;s scared of me, a good designer will tell me about a mistake I made, a great designer will tell me that I messed up and then tell me why it needs to be fixed. If I can understand the thinking behind the design, I can build it better.</li>
</ol>
<p>I don&#8217;t think that working for a creative agency makes me a better developer, or a worse one. I do think it means I have to approach projects differently. I think working for an agency means you So there are quite specific skills that I think are needed to work in a creative agency as a developer. A lot of these skills are a little different from the stereotypical developer skillset. However, a lot of very talented developers do prefer the creative environment (I just need to find them). I like the small and exciting projects I do in a creative agency. I don&#8217;t have the attention span to stay put on one application for months on end. I&#8217;d rather download files and burn them obediently to a DVD for the TV producer who doesn&#8217;t know what a codec is, whilst performing self-harm here at my desk with a soggy cocktail stick.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandnoo.com/2007/10/12/web-developing-for-creative-agencies-a-different-animal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How Not To Hire A Web Developer</title>
		<link>http://www.brandnoo.com/2007/09/10/hints-that-the-developer-youre-hiring-may-not-be-up-to-the-job/</link>
		<comments>http://www.brandnoo.com/2007/09/10/hints-that-the-developer-youre-hiring-may-not-be-up-to-the-job/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 01:48:06 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.brandnoo.com/2007/09/10/hints-that-the-developer-youre-hiring-may-not-be-up-to-the-job/</guid>
		<description><![CDATA[I recently interviewed a contract developer for a project we&#8217;re short of people on. I was going to be on vacation during the project, so the developer needed to be self-sufficient and able to fully understand the task at hand so I could brief him before I left. I hired a freelancer I thought was [...]]]></description>
			<content:encoded><![CDATA[<p>I recently interviewed a contract developer for a project we&#8217;re short of people on. I was going to be on vacation during the project, so the developer needed to be self-sufficient and able to fully understand the task at hand so I could brief him before I left. I hired a freelancer I thought was best for the job. He wasn&#8217;t.</p>
<p>Things I&#8217;ll now see as hints I shouldn&#8217;t hire a developer:</p>
<p>1. Boasting that he can touch-type as one of the leading items in his skillset<br />
2. Claiming his previous employer &#8216;didn&#8217;t understand him&#8217; and spends 10 minutes ranting about them during the interview<br />
3. He has a law degree and claims that he&#8217;ll rip any contract apart<br />
4. He can&#8217;t talk plain English to plain English speaking people. Types on an imaginary keyboard as he speaks.<br />
5. He&#8217;s 42 and lives in the mountains with his mother. Probably<br />
6. Says something ridiculous and possibly inappropriate in a meeting, then claims it was a &#8216;brain fart&#8217;.<br />
7. Tells my junior behind my back that he&#8217;ll learn nothing from me. Tells him that indenting code is a waste of time.<br />
8. Keeps saying &#8216;crunch crunch crunch&#8217; really loudly when explaining how his code parses data<br />
9. Seems to think a brief is below him, but doesn&#8217;t seem to have fully understood it 4 days later<br />
10. Won&#8217;t give a time estimate after reading the brief; technical spec; and after several meetings. Has to wait until he&#8217;s spent several days working on a script for which you have no use, and then finally saying that he&#8217;ll need 8 weeks for a 3 week project without offering any formal breakdown of timings.</p>
<p>This is someone who claims to have 10 years of experience, which is twice what I have. Of course,  I&#8217;m taking responsibility for hiring the muppet and I thought that with 10 years under his rather long belt he&#8217;d find this project easy. Lesson learnt. Next time I&#8217;m definitely checking references, asking for sample code and disregarding the claims of grandiose experience and perfect development skills.</p>
<p>If anybody knows of a good PHP developer in Sydney with agency experience please get in touch.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandnoo.com/2007/09/10/hints-that-the-developer-youre-hiring-may-not-be-up-to-the-job/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Social Network Aggregators: Automatically Measuring The Importance Of Events</title>
		<link>http://www.brandnoo.com/2007/08/22/social-network-aggregators-automatically-measuring-the-importance-of-events/</link>
		<comments>http://www.brandnoo.com/2007/08/22/social-network-aggregators-automatically-measuring-the-importance-of-events/#comments</comments>
		<pubDate>Wed, 22 Aug 2007 02:56:19 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Interactivity]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.brandnoo.com/2007/08/22/social-network-aggregators-automatically-measuring-the-importance-of-events/</guid>
		<description><![CDATA[Here&#8217;s an idea I&#8217;ve had and will never do anything about so I thought I&#8217;d put it out there and see what people think.
My problem is that on my Facebook (this idea could apply to other sites but in this post I&#8217;m just going to use Facebook) I have lots of people listed as friends. [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s an idea I&#8217;ve had and will never do anything about so I thought I&#8217;d put it out there and see what people think.</p>
<p>My problem is that on my Facebook (this idea could apply to other sites but in this post I&#8217;m just going to use Facebook) I have lots of people listed as friends. I have a few close friends, then I have friends who I know but who aren&#8217;t close &#8211; workmates, friends of friends and so on. Then the bulk is made up of the people who I haven&#8217;t seen in years, but for some reason are still my friend. The result is too much information for me to manage that isn&#8217;t effectively organised. Sure, Facebook lets me define who I want to hear more about and who I want to hear less about, but this is a manual control and I think it should be able to work this out by itself.</p>
<p>How can a system like Facebook work out which is more important to me: wedding photos from someone I went to school with; knowing that my flatmate &#8216;is bored at work&#8217;; or photos of my workmate&#8217;s new dog?<br />
<span id="more-44"></span><br />
<strong>Step 1: How much do I care about the person?</strong><br />
Facebook could work this out from the amount of correspondence between my friends and myself on the site. Then there&#8217;s the number of photos we appear in together and the groups or networks we&#8217;re both members of. Although granted, my close friends and I don&#8217;t speak exclusively through Facebook, so some manual intervention may be necessary. But for the most-part my degree of &#8216;closeness&#8217; with the friends I have on Facebook could be calculated.</p>
<p><strong>Step 2:  How important is the news to others?</strong><br />
First of all the relative importance of the news for the author could be calculated by how often the author posts news. By taking the &#8216;cry wolf&#8217; concept; if someone posts news every day it is possibly less important than someone else who has posted an item for the first time in three months.</p>
<p><strong>Step 3: How popular is the news to other people who know this person as well as I do?</strong><br />
If someone else has clicked on a news item for a mutual friend we both went to school with, it&#8217;s possibly also interesting to me. If I post an item that only my close friends have shown an interest in, it probably won&#8217;t be of interest to someone I worked with years ago and don&#8217;t speak to any longer.</p>
<p><strong>Existing Features</strong><br />
Facebook already allows you to select the kind of news you want to see more of. So for example, if you happen to like seeing new photos from your friends, it will offer these up. If you don&#8217;t like seeing people&#8217;s status changes you can see less of them. You can also select the people you&#8217;re more interested in, as well the people you&#8217;re not interested in &#8211; although this is done manually: Facebook can&#8217;t determine how &#8216;interested&#8217; you are in each of your friends by your dealings with them through the site.</p>
<p><strong>Opening It Up</strong><br />
Of course, a lot of people are on more than one social network. A decent aggregator would sit outside of Facebook and MySpace, watching and analysing everyone&#8217;s reactions to news.</p>
<p>Potentially, the system could even take on StumbleUpon to monitor more than social network activity.  If several people you know visit a certain website, or a news story or video, you could be alerted to the same content based on how close you are to the friends who also visited that page.</p>
<p>It&#8217;s a matter of managing mass-information. As more people become proactive in creating web content, there should be a way of managing the publicising of this content to the right people. Monitoring social interactions does wreak of an Owellian telescreen; but there should be a way of creating a system that would benefit its users rather than its administrators.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandnoo.com/2007/08/22/social-network-aggregators-automatically-measuring-the-importance-of-events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Image Color Analysis (PHP)</title>
		<link>http://www.brandnoo.com/2007/06/26/image-color-analysis-php-code/</link>
		<comments>http://www.brandnoo.com/2007/06/26/image-color-analysis-php-code/#comments</comments>
		<pubDate>Tue, 26 Jun 2007 07:14:54 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.brandnoo.com/2007/06/26/image-color-analysis-php-code/</guid>
		<description><![CDATA[I&#8217;m working on a project at the moment where part of the brief is to allow categories of images to be analysed for the main colours they use so we&#8217;ll end up with a colour chart for the category.
I tried to find some code I could adapt for this function, but came up short. So [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on a project at the moment where part of the brief is to allow categories of images to be analysed for the main colours they use so we&#8217;ll end up with a colour chart for the category.</p>
<p>I tried to find some code I could adapt for this function, but came up short. So I wrote my own. I&#8217;m putting it here in the hope that someone else might find it useful. Sorry it&#8217;s not so elegant, but I hope the method is easy enough to follow:</p>
<p><span id="more-24"></span><br />
<code>/**<br />
* This function accepts a truecolor image object and analyzes the colors.<br />
* It works by dividing the image into x*y blocks and identifying the dominant color in each<br />
* block. It returns these colors in an array in the format array[xPos][yPos]<br />
* @author Ben Hindmarch<br />
* @copyright 2007<br />
* @version 0.2 (2007-06-26)<br />
* @abstract Grabs the main colors from an image<br />
* @param binary $im The image object<br />
* @param integer $xCount The number of blocks along the x-axis (default 3)<br />
* @param integer $yCount The number of blocks along the y-axis (default 3)<br />
* @return array containing x and y position of color, individual decimal red, green and blue<br />
* values as well as a hex value<br />
*/<br />
function analyzeImageColors($im, $xCount =3, $yCount =3) {<br />
//get dimensions for image<br />
$imWidth =imagesx($im);<br />
$imHeight =imagesy($im);<br />
//find out the dimensions of the blocks we're going to make<br />
$blockWidth =round($imWidth/$xCount);<br />
$blockHeight =round($imHeight/$yCount);<br />
//now get the image colors...<br />
for($x =0; $x&amp;lt;$xCount; $x++) { //cycle through the x-axis<br />
for ($y =0; $y&amp;lt;$yCount; $y++) { //cycle through the y-axis<br />
//this is the start x and y points to make the block from<br />
$blockStartX =($x*$blockWidth);<br />
$blockStartY =($y*$blockHeight);<br />
//create the image we'll use for the block<br />
$block =imagecreatetruecolor(1, 1);<br />
//We'll put the section of the image we want to get a color for into the block<br />
imagecopyresampled($block, $im, 0, 0, $blockStartX, $blockStartY,  1, 1, $blockWidth, $blockHeight );<br />
//the palette is where I'll get my color from for this block<br />
imagetruecolortopalette($block, true, 1);<br />
//I create a variable called eyeDropper to get the color information<br />
$eyeDropper =imagecolorat($block, 1, 1);<br />
$palette =imagecolorsforindex($block, $eyeDropper);<br />
$colorArray[$x][$y]['r'] =$palette['red'];<br />
$colorArray[$x][$y]['g'] =$palette['green'];<br />
$colorArray[$x][$y]['b'] =$palette['blue'];<br />
//get the rgb value too<br />
$hex =sprintf("%02X%02X%02X", $colorArray[$x][$y]['r'], $colorArray[$x][$y]['g'], $colorArray[$x][$y]['b']);<br />
$colorArray[$x][$y]['rgbHex'] =$hex;<br />
//destroy the block<br />
imagedestroy($block);<br />
}<br />
}<br />
//destroy the source image<br />
imagedestroy($im);<br />
return $colorArray;<br />
}<br />
?&gt;</code><br />
The function works by marking out several (3&#215;3 as default) blocks for the image; shrinking each block down to 1&#215;1 pixels; converts the pixel image to a colour value and finally adds the value to an array which is mapped out according to the x and y position of the block before being returned.</p>
<p>Examples of the code working below. The image on the left was created using CSS to display the colours in the relative location they were found on the image:</p>
<p><img src="http://www.brandnoo.com/wp-content/uploads/2007/06/vinyard.jpg" alt="vinyard.jpg" /></p>
<p><img src="http://www.brandnoo.com/wp-content/uploads/2007/06/treebeach.jpg" alt="treebeach.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandnoo.com/2007/06/26/image-color-analysis-php-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some Ideas for Securing Your Users&#8217; Passwords in a Database</title>
		<link>http://www.brandnoo.com/2007/06/20/some-ideas-for-securing-your-users-passwords-in-a-database/</link>
		<comments>http://www.brandnoo.com/2007/06/20/some-ideas-for-securing-your-users-passwords-in-a-database/#comments</comments>
		<pubDate>Wed, 20 Jun 2007 03:27:07 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.brandnoo.com/2007/06/20/some-ideas-for-securing-your-users-passwords-in-a-database/</guid>
		<description><![CDATA[I&#8217;m not an web-application developer and I certainly don&#8217;t have any experience at creating websites where security is mission critical. I work as a web developer in an advertising agency and every now and again need to create websites that have above-normal security for some of our clients. This article describes a method and I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not an web-application developer and I certainly don&#8217;t have any experience at creating websites where security is mission critical. I work as a web developer in an advertising agency and every now and again need to create websites that have above-normal security for some of our clients. This article describes a method and I welcome any ideas to improve this method.</p>
<p><strong>Overview</strong><br />
What if someone wanted to log into your website using someone else&#8217;s account? <a href="http://blog.reddit.com/2006/12/what-week.html">What if they managed to get a copy of your database?</a></p>
<p><span id="more-20"></span>If you have any information stored on a site that contains powerful functionality or information or that is valuable (or sensitive) to you or someone else, it&#8217;s worth making an extra effort to stop anyone else getting access. The first step is to make sure your users don&#8217;t use ridiculous passwords (because they probably will). How you can do that is up to you and isn&#8217;t within the scope of this article.</p>
<p>After the usual form submission and validation you&#8217;ll be at the point where you need to store that username and password in the database. You could do something like this:</p>
<p><code>"INSERT INTO users (username, passwd) VALUES ('$username', '$password')"</code></p>
<p>That would enter everything as-is and not help you at all if someone could see the contents of the &#8216;users&#8217; table.</p>
<p><strong>MD5 The Password</strong><br />
One of the first things I learnt about attempting to store information was the <a href="http://en.wikipedia.org/wiki/MD5">md5 (Message-Digest algorithm 5)</a>. This is a mathematical formula I don&#8217;t understand and never really want to. All I know is that it encrypts text strings with a 128-bit hash value and that&#8217;s good enough for me. On the sample table below, you&#8217;ll see how passwords are stored using the md5() function.</p>
<table border="1">
<tr>
<td>user</td>
<td>password (md5)</td>
</tr>
<tr>
<td>jo</td>
<td>5f4dcc3b5aa765d61d8327deb882cf99</td>
</tr>
<tr>
<td>laura</td>
<td>7fe4771c008a22eb763df47d19e2c6aa</td>
</tr>
<tr>
<td>pam</td>
<td>5f4dcc3b5aa765d61d8327deb882cf99</td>
</tr>
<tr>
<td>sean</td>
<td>f48861ca24e26a23a923ca68657079f4</td>
</tr>
</table>
<p>To log in as user I would take the password they enter, pass that password through the md5 function and use the result to check for matches in the database.</p>
<p>The weakness here is that if someone really wanted in on your system they could use a word list of passwords against the table to crack the password. There&#8217;s actually online services (called rainbow tables) that offer to <a href="http://www.passcracking.com/">crack an md5 encrypted password in no time at all</a>. These services will usually check the md5 hash against their databases of words and their md5 equivalents to find the password.</p>
<p>That&#8217;s a scary thought for anyone who felt comfortable with their md5 hashed passwords. There&#8217;s a method called salting that makes decryption far harder:</p>
<p><strong>Salting</strong><br />
This is a really simple idea. You prefix passwords with a string constant made up of random characters (that you keep secret). So you&#8217;d set the constant in your php code like below:<br />
<code>define('mySalt', 'dvxcbTgh1245X');</code></p>
<p>You should also consider using extended characters to make your salt even more indecipherable.</p>
<p>And the passwords stored are prefixed with the constant:</p>
<p><code>$saltedPassword =md5(mySalt . $unencryptedPassword);</code></p>
<p>This will mean that the services to look-up passwords are going to have a much harder time, as they won&#8217;t recognise the md5 hashes they&#8217;re given:</p>
<table border="1">
<tr>
<td>user</td>
<td>password (salted)</td>
</tr>
<tr>
<td>jo</td>
<td>0b1cdf48291b451e8fbb33883f097471</td>
</tr>
<tr>
<td>laura</td>
<td>9a5648b4f0c7a1a24fba14dca2b05dda</td>
</tr>
<tr>
<td>pam</td>
<td>0b1cdf48291b451e8fbb33883f097471</td>
</tr>
<tr>
<td>sean</td>
<td>e445dd2da57303f20c31a4ca0c1c3cfc</td>
</tr>
</table>
<p>So we&#8217;ve done pretty well, although there&#8217;s a big hole in the plan. If our hacker was really determined, he&#8217;d notice that the passwords for Jo and Pam are the same. In practise, this happens a lot &#8211; especially on systems that are used by people working for the same organisation. The chances are that they&#8217;ll both have used their company name, street name, city or post code as a password. Finding two passwords that are the same will be a hint to me that the password will be a word common to both, so potentially guessable for any intrepid hacker.</p>
<p><strong>Using the username</strong><br />
In order to make the identical plain-text passwords distinct from one-another when they&#8217;re encrypted we could consider making use of the username when storing the password.</p>
<p>We won&#8217;t use the username as the salt, as this could be a step backwards for us (think of someone using &#8216;green&#8217; as a username and &#8216;fields&#8217; as a password, which is probably not too hard to crack). So we&#8217;ll just add the username to the method:</p>
<p><code>$saltedPasswordWithUsername =md5(mySalt. $usernameLowerCase . $password);</code></p>
<p>I&#8217;ve converted the username to lowercase, as I don&#8217;t want my username to be case-sensitive, and different casing would affect the final md5 hash.</p>
<table border="1">
<tr>
<td>user</td>
<td>password (salted and username added)</td>
</tr>
<tr>
<td>jo</td>
<td>ffeadd9ff3bf4e23584207bcf2c87c49</td>
</tr>
<tr>
<td>laura</td>
<td>cc8d4ca7918eb1219252ee53647cc3f3</td>
</tr>
<tr>
<td>pam</td>
<td>e2936a1ef84597accfc1704a25ae6bcc</td>
</tr>
<tr>
<td>sean</td>
<td>18845b861a6c0e480a2be7db1d4c3341</td>
</tr>
</table>
<p>You can see that Jo and Pam&#8217;s password hashes are now different, so there is no way to tell that unencrypted they are the same password.</p>
<p><strong>Further Work</strong><br />
If you encrypt the passwords, you won&#8217;t be able to send password reminders to your users for those occasions when they&#8217;re forgotten. Instead you&#8217;ll need to write in functionality to reset passwords. Advocates of storing passwords as plain-text usually use the &#8217;send me a password reminder&#8217; functionality as their main defence in using this strategy. Sure, password reminders are easier to develop and the user probably prefers them to password resets, but having to apologise to your users for allowing a malicious hacker to gain access to their personal login information is a post I&#8217;d never want to have to write.</p>
<p><strong>Possible Additions</strong><br />
You could possibly salt and md5 the username too, so to take away the one piece of information the hacker would use to get started. As mentioned above, it would be worth converting usernames to lowercase before they&#8217;re put through the md5 function as users aren&#8217;t used to case-sensitive usernames.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandnoo.com/2007/06/20/some-ideas-for-securing-your-users-passwords-in-a-database/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>All Those &#8216;Do This And Don&#8217;t Do That&#8217; and Every &#8216;Top 5 Tips for Web Development&#8217; Ever</title>
		<link>http://www.brandnoo.com/2007/06/19/all-those-do-this-and-dont-do-that-and-every-top-5-tips-for-web-development-ever/</link>
		<comments>http://www.brandnoo.com/2007/06/19/all-those-do-this-and-dont-do-that-and-every-top-5-tips-for-web-development-ever/#comments</comments>
		<pubDate>Tue, 19 Jun 2007 06:15:03 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.brandnoo.com/2007/06/19/all-those-do-this-and-dont-do-that-and-every-top-5-tips-for-web-development-ever/</guid>
		<description><![CDATA[Recently I joined the StumbleUpon community and I think it&#8217;s great. At lunch when I&#8217;m at my desk or when my brain feels fried I&#8217;ll press the little green and blue button and find a page I&#8217;m going to like because of the profile I set up when I registered.
Because I&#8217;m a web developer, a [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I joined the <a href="http://www.stumbleupon.com/" >StumbleUpon</a> community and I think it&#8217;s great. At lunch when I&#8217;m at my desk or when my brain feels fried I&#8217;ll press the little green and blue button and find a page I&#8217;m going to like because of the profile I set up when I registered.</p>
<p>Because I&#8217;m a web developer, a lot of the time I get to these pages which offer tips about what to do and what not to do when it comes to web development and design.</p>
<p>It&#8217;s annoying, because a lot of the time the tips are written by an arrogant upstart with a couple of year&#8217;s experience under his/her belt. They&#8217;re written with such authority the tips are given more gravitas than they deserve.</p>
<p><span id="more-19"></span></p>
<p>After Stumbling, I read a tip by a Danish guy (who isn&#8217;t Jakob Neilson) that suggested users are bored of drop-down menus and users should never be given the option to view a site in Flash or HTML. If you offer a site in Flash, you really should offer an alternative HTML version too.</p>
<p>In a young industry, when do you become an authority on web design and development? It sure as hell isn&#8217;t when you install Wordpress on your webspace and start writing. Should you ever say to others what they should never and shouldn&#8217;t ever do?</p>
<p>I&#8217;ve had enough of these tips. Every time I read through these lists it makes me realise the value in going to the bookshop and buying books written by people with credentials that make their advice worthy of being in print. You shouldn&#8217;t learn everything about the Internet on the Internet, as quite often the instructions they give aren&#8217;t worth the HTML they&#8217;re written in.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandnoo.com/2007/06/19/all-those-do-this-and-dont-do-that-and-every-top-5-tips-for-web-development-ever/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Email is Dead. Long Live RSS. Skim the Internet.</title>
		<link>http://www.brandnoo.com/2007/06/08/email-is-dead-long-live-rss-skim-the-internet/</link>
		<comments>http://www.brandnoo.com/2007/06/08/email-is-dead-long-live-rss-skim-the-internet/#comments</comments>
		<pubDate>Fri, 08 Jun 2007 06:28:41 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.brandnoo.com/2007/06/08/email-is-dead-long-live-rss-skim-the-internet/</guid>
		<description><![CDATA[Yesterday, Ben Cooper, one of the other guys on the digital team here at Host gave a presentation about RSS to the company. My company is in advertising, and despite the people I work with all being very bright it doesn&#8217;t mean they&#8217;re familiar with any Internet technologies other than email, HTML and Flash.
To be [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, <a href="http://www.benhamin.com" title="Ben Cooper's Blog">Ben Cooper</a>, one of the other guys on the digital team here at <a href="http://www.hostville.com.au" title="Host">Host</a> gave a presentation about <a href="http://en.wikipedia.org/wiki/RSS_(file_format)">RSS</a> to the company. My company is in advertising, and despite the people I work with all being very bright it doesn&#8217;t mean they&#8217;re familiar with any Internet technologies other than email, HTML and Flash.</p>
<p>To be honest I don&#8217;t have much user experience with RSS. I&#8217;ve created RSS XML pages that are dynamically created through a CMS and I&#8217;ve got the <a href="http://www.explosm.net" title="Explosm">Happiness and Cyanide</a> comic feeding through to my iGoogle page. So it was also an education for me too. I don&#8217;t know much about FeedBurner or Aggregators. I admit, I&#8217;m a bit behind.</p>
<p>Ben explained everything very well, and actually got me on-side: I went into the talk with the idea that email is the standard way a website reaches out to its audience, and will continue to be the standard for a long time. Back in the UK I received my Amazon newsletter that was completely customised to the things Amazon told me I needed to buy because I&#8217;d like them. In a nutshell, I felt that you can customise an email right down to the individual preferences of the recipient, and then push it out to your users. What I found out is that as a user, once you&#8217;re familiar with RSS you educate yourself to control the information you read.</p>
<p><span id="more-15"></span></p>
<p>I&#8217;m a developer, so I&#8217;ve had to send out newsletters before to thousands of subscribers using various tools (at my previous agency we used <a href="http://www.de-mailer.net">de-mailer, a mass mailing application</a> built by my then-colleague <a href="http://www.webponce.com">Matt Knight</a>). Sending emails is far cheaper than sending out pamphlets and catalogues through the letterbox, but it still costs something. RSS feeds can be created and subscribed to at absolutely zero cost.</p>
<p>Emails highlight a point in time when the information contained within them is relevant. You can&#8217;t update the words in an email after it&#8217;s been sent, and if there&#8217;s something incorrect or something missing from the original email you have to weigh up the pros and cons of inundating your subscribers&#8217; inboxes with a follow-up email, that might tempt them to unsubscribe from your newsletter mail-outs entirely. You can correct or add to an RSS feed at any point, and all your subscribers will see the updates.</p>
<p>There are drawbacks to RSS. Well, two of them that stand out to me.</p>
<p>First of all the penetration of the technology is still mostly geek-central. RSS features exist on <a href="http://www.ebay.com">eBay</a> and the <a href="http://news.bbc.co.uk">BBC news website</a>, but that doesn&#8217;t mean my mum knows what RSS is. My mum uses email, MSN Messenger and will book her holidays online, but hasn&#8217;t heard of Really Simple Syndication, and the words &#8216;really simple syndication&#8217; don&#8217;t exactly make it any clearer. IE7 and of course FireFox support RSS (although IE7 doesn&#8217;t support secure RSS &#8211; so can&#8217;t deliver private content, which means things like having an RSS feed of your new Gmail emails isn&#8217;t possible). The support of mainstream software is a step in the right direction, but doesn&#8217;t mean the general Internet population is aware of it.</p>
<p>Secondly you need to have content to support the subscription. An email newsletter might be sent out once a quarter, if you didn&#8217;t update your RSS feed for 3 straight months you&#8217;d have people unsubscribing after seeing the same content on their screens for so long. The advantage email has is that subscribers to a quarterly newsletter will see their email when it&#8217;s relevant, and then it will sink to the bottom of their inboxes, forgotten until the next newsletter. If your website can&#8217;t support regular content updates, there would be very little point in providing an RSS feed.</p>
<p>In the end, the user has a system where all the information of interest to her is available in one place. There are no spam messages popping up, and in the same vein your messages don&#8217;t get sent to the junk folder. Someone might subscribe to 60 or so websites and use their RSS reader to check the updates from all of them. What then happens is interesting. Instead of being overwhelmed by the amount of information available, it&#8217;s skimmed, in much the same way as a newspaper is read: you read the headline and possibly the first few words and from that decide if you want to read more.</p>
<p>The user has the power to review content before it&#8217;s read. This means the user is driven straight to the content she wants to see: targeted traffic for your site, and a more efficient user experience for your subscribers.</p>
<p>Going back to my opinion before Ben&#8217;s talk, if I were in the UK I would still have my Amazon newsletter because it&#8217;s a brand I like and a service that&#8217;s useful to me. Although if I were to consider the newsletters from Threadless, eBuyer, Busted Tees and eBay all as important as each other; the weight of the information from each wouldn&#8217;t get my attention as well as it would if it were formatted in an easy-to-read list such as RSS.</p>
<p>Of course, there is the argument that your website isn&#8217;t suitable for an RSS feed since your content isn&#8217;t updated frequently enough. Although to counter, one might say that if you don&#8217;t update your content you don&#8217;t really have much of a website anyway.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandnoo.com/2007/06/08/email-is-dead-long-live-rss-skim-the-internet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
