<?xml version="1.0"  encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="http://thingsinjars.com/includes/style/rss.css" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<atom:link href="http://thingsinjars.com/rss/opinion/" rel="self" type="application/rss+xml" />
<title>Things in Jars</title>
<link>http://thingsinjars.com/</link>
<description>Articles from Things in Jars</description>
<language>en</language>
<docs>http://en.wikipedia.org/wiki/RSS_(file_format)</docs>
<lastBuildDate>Sat, 27 Apr 13 00:00:00 -0700</lastBuildDate>
<ttl>45</ttl><item>
<title>How App.net became useful</title>
<link>http://thingsinjars.com/post/464/how-appnet-became-useful/</link>
<guid>http://thingsinjars.com/post/464/how-appnet-became-useful/</guid>
<description><![CDATA[
        <div class="teaser markdown" id="teaser-464">
        <p><a href="http://thingsinjars.com/post/464/how-appnet-became-useful/">How App.net became useful</a></p>
<p>After Twitter started announcing changes to its API usage and people started to get worried about the future of the developer eco-system, <a href="http://join.app.net/">App.net</a> appeared. It provides a streaming data-platform in much the same way Amazon provides a web hosting platform. The reason for the Twitter comparison is that one of the things you can make with it is a Twitter-like public short message system. This was, in fact, the first thing the App.net developers made to showcase the platform: <a href="http://alpha.app.net/">Alpha</a> although that example seems to have convinced many people that the whole point was to build a Twitter-clone instead of a service whose purpose is to stream small, discrete blocks of meta-tagged data. The <a href="https://github.com/appdotnet/api-spec">community-developed API spec</a> is an important aspect of App.net as well although feature discussions can devolve into musings on Computer Science theory a bit too easily.</p>

<p>For the first couple of weeks, it was fun to just hack around with the APIs, post a bit, build a little <a href="http://thelab.thingsinjars.com/appnet/">test app</a> (disabled now that more App.net clients have push notifications). It all became much more interesting, however, when two new features were added to the platform – Machine-only posts and Well-known Annotations.</p>

<h2>Machine-only posts</h2>

<p>Pretty much exactly what they sound like. These are posts that are not intended to be viewed in any human-read conversation stream. They still get pushed around the network exactly the same as all other posts but to see them, you must explicitly say 'include machine-only posts' in your API calls. For developers who have been building silly toys on Twitter for a couple of years, this is fantastic. You don't need to create a separate account purely for data transfer. This can be part of your main account's data stream. I have quite a few Twitter accounts that I just use for outputs from various applications. I have one, in fact, that does nothing but list the tracks I listen to that I created for <a href="http://thingsinjars.com/post/250/building-an-objective-c-growlview/">this side-project</a>.</p>

<p>By classifying these as <code>'machine-only'</code>, they can stay associated with the user and subject to whatever privacy controls they have set in general. This makes it far easier for the user to keep control of their data and easier for the service to track accurate usage. For devs, it also means you can hack away at stuff, even if it is to be public eventually, without worrying too much about polluting the global stream with nonsense.</p>

<h2>Well-known Annotations</h2>

<p>Annotations were part of the spec from the beginning but only implemented at the end of August. Annotation is just another word for per-post meta-data – each post has a small object attached which provides extra information. That's it. </p>

<p>The annotations can be up to 8192 bytes of valid JSON which is quite a lot of meta-data. Even with this, however, the usefulness is limited to per application use-cases until some standards start to appear. There's nothing to stop a popular application being the one to set the standard but for the more general cases, it is most fitting to continue with the community-led development model. This is where Well-known Annotations come in. </p>

<p>Well-known annotations are those attributes which are defined within the API spec. This means that the community can define a standard for 'geolocation', for example, and everyone who wants to use geolocation can use the standard to make their application's posts compatible with everybody else's. </p>

<p>Obviously, I'm quite into my geolocated data. I love a bit of map-based visualisation, I do. Here's a sample of jQuery that will create a post with a <a href="https://github.com/appdotnet/api-spec/blob/master/annotations.md#geolocation">standard geolocation annotation</a>:</p>

<pre><code>$.ajax({
  contentType: 'application/json',
  data: JSON.stringify({
    "annotations": [{
      "type": "net.app.core.geolocation",
      "value": {
        "latitude": 52.5,
        "longitude": 13.3,
        "altitude": 0,
        "horizontal_accuracy": 100,
        "vertical_accuracy": 100
      }
    }],
    machine_only: true
  }),
  dataType: 'json',
  success: function(data) {
    console.log("Non-text message posted");
  },
  error: function() {
    console.log("Non-text message failed");
  },
  processData: false,
  type: 'POST',
  url: 'https://alpha-api.app.net/stream/0/posts?access_token=USERS_OAUTH_TOKEN'
});
</code></pre>

<p>In the same way as the machine-only posts, these annotations aren't provided on a default API request, you have to specifically ask for them to be included in the returned data. This is to make sure that the majority of use cases (public streaming, human-readable conversation) don't have to download up to 8KB of unnecessary data.</p>

<h2>Retrieving both</h2>

<p><a href="https://alpha-api.app.net/stream/0/posts/stream/global?&amp;include_machine=1&amp;include_annotations=1">This is an API call to retrieve posts marked machine-only and with annotations</a></p>

<h2>Potential use cases</h2>

<p>You might have noticed, the API call above had the machine-only attribute as well as the well-known geo annotation. If I wanted to create an app that would run on my phone and track my routes throughout the day, all I would need to do would be to run that <code>$.ajax</code> call periodically with my current geolocation. The data would be saved, distributed, streamed and could be rendered onto a map or into a KML at the end of the day. I could record hiking trails or museum tours, or share my location with someone I'm supposed to be meeting so they can find out where I'm coming from and why I'm late. That's just a couple of the single-user cases. Having a shared standard means that the potential for geo-tagged posts opens up to at least equal that of Twitter's. Heatmap-density diagrams showing areas of the most activity; global and local trends; location-based gaming. Add a <code>'news'</code> annotation to geotagged posts and suddenly you've got a real-time local-news feed. Add <code>'traffic'</code> and you've got community-created traffic reports.</p>

<p>There are so many clever things you can do with location-tagged data. I hope others are just as enthused about the possibilities as I am.</p>
      </div>
]]></description>
<pubDate>Tue, 02 Oct 2012 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>CSS Verification Testing</title>
<link>http://thingsinjars.com/post/437/css-verification-testing/</link>
<guid>http://thingsinjars.com/post/437/css-verification-testing/</guid>
<description><![CDATA[
        <div class="teaser html" id="teaser-437">
        <p><a href="http://thingsinjars.com/post/437/css-verification-testing/">CSS Verification Testing</a></p>
<p>It&#x27;s difficult to test CSS. In <a href="http://maps.nokia.com/">Nokia Maps</a>, we use lots of different kinds of automated tests to ensure the build is doing what it&#x27;s supposed to do &ndash; <a href="http://pivotal.github.com/jasmine/">Jasmine</a> for JS unit tests, <a href="http://jbehave.org/">jBehave</a> for Java acceptance tests, a whole load of integration tests and systems to make sure all along the process that we know as soon a something goes wrong.</p>

<p>CSS has typically been left out of this process &ndash; not just in our team but generally throughout the industry &ndash; because it&#x27;s a difficult thing to test. CSS is a declarative language meaning that the CSS of a page doesn&#x27;t describe how the page is to accomplish the task of turning text red, for example, it simply says &#x27;the text should be red&#x27; and the implementation details are left up to the browser. This doesn&#x27;t fit well into typical testing strategies as there is no sensible way to pass information in to check the outputs are as expected. With a declarative language, there is very little logic around which you can wrap a test. In essence, the bit you would normally test is the bit handled by the browser. About the closest CSS gets to having continuous-deployment style tests is to run your files against the in-house style guide using <a href="http://csslint.net/">CSSLint</a>.</p>

<p>That&#x27;s not to say people haven&#x27;t tried testing CSS. There are lots of opinions on how or why it should be done but with no concrete answers. There has also been a lot of thinking and quite a lot of work done in the past to try and solve this requirement. <a href="http://morethanseven.net/2008/10/13/unit-testing-css-looking-solution.html">This article from 2008</a> and <a href="http://blog.jonnay.net/archives/695-Unit-testing-CSS-and-HTML.html">this article from 2006</a> both propose a potential route to investigate for testing strategies.</p>

<p>In summary, the two main approaches used are:</p>
<ul>
<li>Generate images from the rendered HTML and compare differences (c.f. <a href="https://github.com/garethr/css-test">css-test by Gareth Rushgrove</a>)</li>
<li>Specify expected values and compare actual values (<a href="https://github.com/gagarine/CSSunit">cssUnit</a>, <a href="http://www.trisis.co.uk/blog/?p=356">CSSUnit</a>)</li>
</ul>

<p>There must be something about the desire to test CSS and the name Simon as both <a href="https://github.com/gagarine/CSSunit">Simon Perdrisat</a> and <a href="http://www.trisis.co.uk/blog/?p=356">Simon Kenyon Shepard</a> created (separate) unit-testing frameworks called &#x27;CSSUnit&#x27;. And there&#x27;s me, obviously.</p>

<p>As a related aside, there may also be something to do with working at Nokia and wanting to test CSS as Simon Shepard is the Tech Lead on Nokia Maps although I stumbled across his project completely randomly outside work. Weird.</p>


<p>Another important related note: there&#x27;s no point in developing a CSS testing framework for <a href="http://en.wikipedia.org/wiki/Test-driven_development">Test-Driven Development</a>. Again, this is an aspect of being a declarative language but, by the time you&#x27;ve written your test, you&#x27;ve written your code. There&#x27;s no Red-Green pattern here. It either does what you intended it to or it doesn&#x27;t.</p>

<p>In essence, the only way to test CSS is by verification testing &ndash; the kind of thing you do before and after refactoring your styles. This, essentially, involves working within your normal process until the job is done then creating &#x27;snapshots&#x27; of the DOM and capturing the current cascaded styles. You can then refactor, rework and reorganise your CSS as much as you like and, as long as the combination of snapshot DOM plus CSS produces the same results as before, you can be confident that your entire system still appears the same way.</p>

<h2>Get to the point...</h2>
<p>Why the long ramble about CSS testing strategies? Well, unsurprisingly, I&#x27;ve had a go at it myself. My approach falls into the second category mentioned above &ndash; measure styles once finished and create secure test-beds of DOM structure which can have CSS applied to them. The test system is currently being run through its paces in <a href="http://maps.nokia.com/city/germany/berlin">Nokia Maps City Pages</a> (my bit of maps) and, if it passes muster, I&#x27;ll put it out into the big, wide world.</p>
      </div>
]]></description>
<pubDate>Wed, 28 Dec 2011 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>You must be able to read before you get a library card</title>
<link>http://thingsinjars.com/post/416/you-must-be-able-to-read-before-you-get-a-library-card/</link>
<guid>http://thingsinjars.com/post/416/you-must-be-able-to-read-before-you-get-a-library-card/</guid>
<description><![CDATA[
        <div class="teaser html" id="teaser-416">
        <p><a href="http://thingsinjars.com/post/416/you-must-be-able-to-read-before-you-get-a-library-card/">You must be able to read before you get a library card</a></p>
<p>I like JavaScript. JS. ECMAScript. Ol' Jay Scrizzle as nobody calls it.</p>

<p>I also like <a href="http://jquery.com/">jQuery</a>. jQ. jQuizzie. jamiroQuery. Whatever.</p>

<p>Ignoring the stoopid nicknames I just made up, did you notice how I referred to JavaScript and jQuery separately? I didn't say "I like JavaScript, there are some really great lightbox plugins for it" just the same as I didn't say "I wish there was a way to do indexOf in jQuery".</p>

<p>I'm regularly amazed at how many new (and some not-so-new) web developers either think they know JavaScript because they know jQuery or wish there was a way to do something in jQuery that they read about in an article about JavaScript. jQuery is a <em>library</em> written to make coding in JavaScript easier. It's made in JavaScript so you can say "jQuery is JavaScript" but only in the same way that "Simon is male". To confuse jQuery as all of JavaScript is the same as saying "Simon is all men" (don't worry, there's still only one of me).</p>

<p>For most web site or web app development, I do recommend using a library. Personally, I've used jQuery and <a href="http://www.prototypejs.org/">Prototype</a> extensively and decided I prefer jQuery. Libraries are designed to make coding faster and more intuitive and they can be a great productivity aid. You can get a lot more done quicker. There is a downside, however.</p>

<h2>Downside</h2>
<p>If you're doing what the library was intended to help with, great. Slide this panel up, pop open a modal window, scroll to the bottom of the page and highlight that header. Brilliant. The difficulties come when you're either trying to do something the library wasn't intended to do or something nobody's thought of before or you're just plain doing something wrong. If you are fluent in your library of choice but don't know the JavaScript underpinnings, your usual debugging tools can only help you so far. There will come a point where there's an impenetrable black-box where data goes in and something unexpected comes out. Okay, it's probably still data but it's unexpected data.</p>

<p>Don't let this point in the process be the discouragement. This is where the fun bit is.</p>

<h2>Learning to read</h2>
<p>Library authors are very clever groups of people. Often large groups. Reading through the unminified source of a library can be an awesomely educational experience as it's usually the culmination of many years best practice. If you want a nice introduction to some of the cool things in jQuery, for instance, check out these videos from <a href="http://paulirish.com/">Paul Irish</a>:</p>

<ul><li><a href="http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/">http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/</a></li>
<li><a href="http://paulirish.com/2011/11-more-things-i-learned-from-the-jquery-source/">http://paulirish.com/2011/11-more-things-i-learned-from-the-jquery-source/</a></li></ul>

<p>I've dug around in jQuery many, many times to try and figure out why something does or doesn't do what it should or shouldn't. The most detailed investigation was probably <a href="http://thingsinjars.com/post/371/investigating-ies-innerhtml/">Investigating IE's innerHTML</a> during which nothing was solved but I found out some cool stuff.</p>

<h2>Learning to write</h2>
<p>The best way to get your head around libraries is to write your own. Yes, there are literally millions of them (not literally) out there already but you don't need to aim for world dominance, that's not the point of writing your own. Start simply, map the dollar symbol to <code>document.getElementById</code>. Done. You've written a tiny library. </p>

<pre><code>function $(id){ 
    return document.getElementById(id);
}</code></pre>

<p>Now you can add some more stuff. Maybe you could check to see if the thing passed to the $ is already an element or if it's a string. That way, you could be a bit more carefree about how you pass things around.</p>

<pre><code>function $(id){ 
  if(id.nodeType) {
    return id;
  } else {
    return document.getElementById(id);
  }
}</code></pre>

<p>Add in a couple of AJAX methods, some array manipulation and before you know it, you've got a full-blown web development toolkit. </p>

<p>If you're wanting a boilerplate to start your library off, I recommend Adam Sontag's <a href="https://github.com/ajpiano/boilerplate-boilerplate">Boilerplate Boilerplate</a>.</p>

<h2>Here's your Library Card</h2>
<p>By now, you've rooted around in the jQuery undergrowth, dug through some of Moo's AJAX and pulled apart Prototype's string manipulation. You've written your own mini library, gotten a bit frustrated and wished you had a community of several thousand contributors to make it more robust. Now you're ready to start getting irked every time someone on <a href="http://forrst.com">Forrst</a> asks if there's a jQuery plugin for charAt. Enjoy.</p>
<p>This article is modified from a chapter in a book <a href="http://www.phenotypic.co.uk">Andrew</a> and I were writing a couple of years ago about web development practical advice. Seeing as we both got too busy to finish it, I'm publishing bits here and there. If you'd like to see these in book form, let me know.</p>      </div>
]]></description>
<pubDate>Thu, 04 Aug 2011 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>Don’t be seduced by the drag-and-drop side</title>
<link>http://thingsinjars.com/post/405/dont-be-seduced-by-the-drag-and-drop-side/</link>
<guid>http://thingsinjars.com/post/405/dont-be-seduced-by-the-drag-and-drop-side/</guid>
<description><![CDATA[
        <div class="teaser html" id="teaser-405">
        <p><a href="http://thingsinjars.com/post/405/dont-be-seduced-by-the-drag-and-drop-side/">Don’t be seduced by the drag-and-drop side</a></p>
<p>You don&rsquo;t have to be a survivor of the vi and Emacs holy wars to appreciate the beauty of fully hand-crafted code. There was a bit of attention a couple of weeks ago on the soon-to-be-launched <a href="http://muse.adobe.com/">Adobe Muse</a> which lets you &ldquo;Design and publish HTML websites without writing code&rdquo;. If you want to be a kick-ass developer, you must realise that tools like this aren't designed for you. They're designed for people who want to do what you can do but either don't have the time or the inclination to learn how. Although drag 'n' drop application do lower the barrier to entry for creating a website, there is still a need for web developers to know exactly what's going on in their pages.</p>

<p>I'm not saying that there will never be a time when visual design can be automatically translated into as good a product as a hand-crafted site, I'm just saying it&rsquo;s not yet.</p>

<p>In much the same way as with JavaScript (See &ldquo;<a href="http://thingsinjars.com/post/416/you-must-be-able-to-read-before-you-get-a-library-card/">You must be able to read before you get a library card</a>&rdquo;), building your HTML using that extra level of abstraction might work for almost every situation but will eventually leave you stuck somewhere you don&rsquo;t want to be. By all means, pimp up your text editor with all manner of handy tools, shortcuts and code snippets but make sure you still know exactly what each bit of mark up means and does. If you structure your code well (more on that in a later post), your natural feel for the code will be as good a validator as anything automated (by which I mean prone to errors and worth double-checking).</p>

<p>Learn the keyboard shortcuts. If you learn nothing else from this, learn the importance of keyboard shortcuts. You might start off thinking you'll never need a key combination to simply swap two characters around but one day, you'll find yourself in the middle of a functino reaching for ctrl-T.</p>

<p>Also, there is no easy way to tell if a text editor is fit for you until you have tried it, looking at screenshots won&rsquo;t work. You don't need to build an entire project to figure out whether or not you're going to get on with a new text editor, just put together a couple of web pages, maybe write a jQuery plugin. Do the key combinations stick in your head or are you constantly looking up the same ones again and again? Do you have to contort your hand into an unnatural and uncomfortable claw in order to duplicate a line?</p>

<p>The final thing to cover about text editors is that it's okay to pay for them. Sure, we all love free software. &ldquo;Free as in pears <em>and</em> free as in peaches&rdquo; (or whatever that motto is) but there are times when a good, well-written piece of software will cost money. And that's okay. You're a web developer. You are going to be spending the vast proportion of your day using this piece of software. If the people that made it would like you to spend $20 on it, don't instantly balk at the idea. Think back to the idea of web developers as artisan craftsmen. You're going to be using this chisel every day to carve out patterns in stone. Every now and then, you might need to buy your own chisel.</p>

<p>This article is modified from a chapter in a book <a href="http://www.phenotypic.co.uk">Andrew</a> and I were writing a couple of years ago about web development practical advice. Seeing as we both got too busy to finish it, I'm publishing bits here and there. If you'd like to see these in book form, let me know.</p>      </div>
]]></description>
<pubDate>Mon, 29 Aug 2011 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>HTML5 for Large Public Bodies</title>
<link>http://thingsinjars.com/post/382/html5-for-large-public-bodies/</link>
<guid>http://thingsinjars.com/post/382/html5-for-large-public-bodies/</guid>
<description><![CDATA[
        <div class="teaser html" id="teaser-382">
        <p><a href="http://thingsinjars.com/post/382/html5-for-large-public-bodies/">HTML5 for Large Public Bodies</a></p>
<h2>Your country needs you...</h2>

<p>...to stand at the cutting edge of technology.</p>

<p>Sounds awfully impressive, don't you think?</p>

<p>There are quite a few regulations to bear in mind and comply with when developing a website for a Government organisation or any large public body. This has lead to a lot of sites being developed in a very defensive manner, ensuring safe compliance at the expense of a great and consistent user experience.</p>

<p>This video features a presentation about how large publicly-liable institutions should and can embrace the latest in web technologies without sacrificing standards. By embracing them, in fact.</p>

<p>The content of this was developed while planning and building the <a href="http://www.nms.ac.uk/">National Museums Scotland website</a> which launched last November. The messages presented are applicable to museums, galleries, swimming pools, councils, anywhere, really.</p>

<p>If you're a techie person in the cultural or government sector, you might find this useful in convincing others to take advantage of the latest cool (and useful) technologies.</p>

<h2>Video</h2>
<p><a href="http://vimeo.com/24436131">HTML5 for Large Public Bodies</a> from <a href="http://vimeo.com/madine">Simon Madine</a> on <a href="http://vimeo.com">Vimeo</a>.</p>

<h2>Links from the presentation</h2>
<ul>
<li><a href="http://remysharp.com/2010/10/08/what-is-a-polyfill/">PolyFills</a></li>
<li><a href="http://www.netmagazine.com/features/making-html5-and-css3-work-polyfills-and-shims">.NET magazine article</a></li>
<li><a href="https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills">(Almost) complete list of polyfills</a></li>
<li><a href="http://diveintohtml5.org/">Dive into HTML5</a></li>
<li><a href="http://html5boilerplate.com/">HTML5 Boilerplate</a></li>
<li><a href="http://www.smashingmagazine.com/2009/08/04/designing-a-html-5-layout-from-scratch/">Smashing Magazine</a></li>
<li><a href="http://html5doctor.com/">HTML5 Doctor</a></li>
<li><a href="http://alpha.gov.uk/">AlphaGov</a></li>
</ul>

<h2>Slideshow</h2>
<p>The source for the slides is <a href="http://thingsinjars.com/widgets/html5-presentation/">available online</a> although it's mostly webkit-friendly. I realise the irony of a presentation about cross-platform HTML5 not being a great example itself of that but it does degrade adequately. If I get the time in the future, I'll tidy it up. An actual good (and relevant) example of cross-platform web technologies is the <a href="http://www.nms.ac.uk/">National Museums Scotland website</a> itself which performs fantastically across all manner of platforms.</p>      </div>
]]></description>
<pubDate>Tue, 31 May 2011 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>Psychopathic megalomaniac vs Obsequious sycophant?</title>
<link>http://thingsinjars.com/post/380/psychopathic-megalomaniac-vs-obsequious-sycophant/</link>
<guid>http://thingsinjars.com/post/380/psychopathic-megalomaniac-vs-obsequious-sycophant/</guid>
<description><![CDATA[
        <div class="teaser html" id="teaser-380">
        <p><a href="http://thingsinjars.com/post/380/psychopathic-megalomaniac-vs-obsequious-sycophant/">Psychopathic megalomaniac vs Obsequious sycophant?</a></p>
<h2> - or - </h2>
<h2>Tabs vs Spaces?</h2>
<p>Which are you? Is there any middle ground?</p>

<p>In any modern, code-friendly text editor, you can set tab size. This means that one tab can appear to be as wide as a single space character or - more commonly - 2 or 4 spaces. It's even possible in some to set any arbitrary size so there's nothing stopping you setting tabs to be 30 spaces and</p>
<pre><code>format() {
                              your code() {
                                                            like;
                              }
                              this;
}</code></pre>

<p>However you do it, the point is that using tabs allows the reader personal preference.</p>

<p>Indenting your code using spaces, however, is completely different. A space is always a space. There's actually a simple conversion chart:</p>

<ul>
<li>1 = One</li>
<li>2 = Two</li>
<li>3 = Three</li>
<li>and so on.</li>
</ul>
<p>The fundamental difference here is that the person reading the code has no choice about how it's laid out. Tabs means you get to read the code how <em>you</em> want to, spaces means you read the code how <em>I</em> want you to. It's a subtle difference but an important one. </p>

<p>Space indenting is therefore perfectly suited to psychopathic megalomaniacs who insist their way is right while tab indenting is for obsequious sycophants who are putting the needs of others above themselves. Sure, there may be lots of grades in-between but why let moderation get in the way of a barely coherent point?</p>

<p>
Curiously, neither of these extremes feels a great need to comment their code. One sees no need as their code is for themselves and they already understand it, the other assumes that if they can understand it, its purpose is so obvious as to be trivial. Both are wrong here.</p>

<p>There's unfortunately no real middle ground here. Teams must agree amongst themselves what side of the fence they fall down on. It is entirely possible to set many text editors to automatically convert tabs to spaces or spaces to tabs on file save but if you're doing that, you'd better hope your favourite diff algorithm ignores white space otherwise version control goes out the window.</p>
<p>This article is modified from a chapter in a book <a href="http://www.phenotypic.co.uk">Andrew</a> and I were writing a couple of years ago about web development practical advice. Seeing as we both got too busy to finish it, I'm publishing bits here and there. If you'd like to see these in book form, let me know.</p>      </div>
]]></description>
<pubDate>Mon, 25 Jul 2011 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>Autogenerated Everything</title>
<link>http://thingsinjars.com/post/369/autogenerated-everything/</link>
<guid>http://thingsinjars.com/post/369/autogenerated-everything/</guid>
<description><![CDATA[
        <div class="teaser html" id="teaser-369">
        <p><a href="http://thingsinjars.com/post/369/autogenerated-everything/">Autogenerated Everything</a></p>
<p>After seeing this <a href="http://www.dubberly.com/concept-maps/3x4grid.html">collection</a> of the 892 different ways you can partition a 3 x 4 grid<a href="http://thingsinjars.com/post/369/autogenerated-everything/#generate_foot_1" id="generate_foot_a" class="footnote">1</a>, I was struck by a thought. If these were generated as HTML templates, they could be combined with a couple of other useful websites and become a nice, API-driven site builder<a href="http://thingsinjars.com/post/369/autogenerated-everything/#generate_foot_2" id="generate_foot_b" class="footnote">2</a>.</p>

<h2>The process</h2>
<ul>
	<li>On the site-building webpage, you'd enter a few keywords describing the site you want and drag a slider along between 1 and 12 to specify how many content areas you want. The value from the slider would be used to pick a template randomly from the number available for that combination of panels.</li>
	<li>This template would be dropped into the middle of an <a href="http://www.html5boilerplate.com/">HTML 5 boilerplate</a> (possibly generated via <a href="http://initializr.com">Initializr</a>)</li>
	<li>The keywords would be passed to <a href="http://colorapi.com/">ColorAPI</a> to generate an asthetically pleasing colour-scheme</li>
	<li>The keywords would then be passed to <a href="http://flickholdr.com/">FlickHoldr</a> along with the dimensions of some of the areas from the template to get relevant imagery</li>
	<li>Grab some lorem ipsum of the right length from <a href="http://loremipscream.com/api">LoremIpscream</a> to fill out the content areas of the site</li>
	<li>Done. Your asthetically pleasing, nicely designed site is ready to download within a few seconds.</li>
</ul>

<p>Once this service has been created, I'm fairly sure me and the rest of the industry will be out of a job.</p>


	<p><a id="generate_foot_1" href="http://thingsinjars.com/post/369/autogenerated-everything/#generate_foot_a" class="footnote">1</a> Technically, there are 3,164 ways you can partition the grid but most of them are vertical or horizontal mirrors of the 892 mentioned.</p>
	<p><a id="generate_foot_2" href="http://thingsinjars.com/post/369/autogenerated-everything/#generate_foot_b" class="footnote">2</a> There are a few references to <a href="http://3x4grid.com">3x4grid.com</a> which is apparently going to be an API-accessible collection of these layouts but there doesn't seem to be anything there yet.</p>
      </div>
]]></description>
<pubDate>Fri, 01 Apr 2011 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>Context-free content and content-agnostic design</title>
<link>http://thingsinjars.com/post/348/context-free-content-and-content-agnostic-design/</link>
<guid>http://thingsinjars.com/post/348/context-free-content-and-content-agnostic-design/</guid>
<description><![CDATA[
        <div class="teaser html" id="teaser-348">
        <p><a href="http://thingsinjars.com/post/348/context-free-content-and-content-agnostic-design/">Context-free content and content-agnostic design</a></p>
<p>Last year I wrote about the trend towards separation between the design creators and the content creators and I think it&rsquo;s time to revisit that topic. The idea was that, although the tools of the future would mean there would be less need for individual content to be designed and developed by hand, there would be an increasing number of opportunities for content to be viewed within the context the consumer wants to view it rather than the way the designer wanted it viewed.</p>
<p>Okay, that sounds a lot more complicated than it is. Here&rsquo;s a scenario:</p>
<h2>Part One</h2>
<ol>
   <li>I write interesting articles</li>
   <li>I post them on my MySpace-inspired, geocities refugee, blink-tag-heavy page</li>
   <li>You refuse to read them because the design literally makes your eyeballs itchy.</li>
</ol>
<h2>Part Two</h2>
<ol>
   <li>Some other guy writes reeeeeeeally dull articles</li>
   <li>He posts them on his beautifully-designed, subtly gradiented, drop-shadowed, Helvetica Neue Light site</li>
   <li>You refuse to read them because the content is so dull your heart-rate slows almost to a stop and you forget to breathe.</li>
</ol>
<p>The type of content/design separation I&rsquo;m talking about here would mean you take my wonderfully written articles, his exquisitely-designed layout and put the two together. Technically, you might be able to create a brain-numbingly-dull but eye-ball-searing monster out of the left-over parts but you shouldn&rsquo;t. At the moment, we can&rsquo;t just take any arbitrary design and apply it to any arbitrary content but it won&rsquo;t be that long. As I mentioned last year, the separation of design and content is not a bad thing for designers, in fact, it&rsquo;s an opportunity to create a better content consumption experience than the next guy.</p>
<p>The last year has provided a great number of examples of this trend and it seems it can only continue. Some of the more high-profile ones are:</p>
<h2><a href="http://www.flipboard.com/">FlipBoard</a></h2>
<p>The hype around this was so immense that <em>everybody</em> absolutely <em>had to have it</em> on launch day. It was so popular, in fact, that it was about a week before anyone could actually use it, the load on their servers bringing them grinding to a halt. It was kinda justified, though. Having all of your own tailored content pulled from Twitter, FaceBook and any number of recommended channels (groups of RSS feeds and websites) then presented to you as a personalised magazine is quite enjoyable. The creators got into a bit of trouble for screen-scraping (what they refer to as &lsquo;<a href="http://gizmodo.com/5594176/is-flipboard-legal">parsing</a>&rsquo;) rather than using the content the way the creators intended but that seemed to die down once the content creators realised they were still getting the ad revenue.</p>
<h2><a href="http://reederapp.com/">Reeder</a></h2>
<p>This really applies to any RSS reader but Reeder by Silvio Rizzi is a particularly nice and well-known example. RSS is really the best example of context-free content where, for many years now, the audience has had the ability to take in the content of articles in their reader of choice. Initially, this was for convenience &ndash; why access content in 20 different places when you could access one &ndash; but now that the RSS-consuming public are au fait with that, it has moved on to more aesthetic concerns. Reeder presents articles in off-black text on an off-white background in Helvetica. It&rsquo;s possibly an overused visual clich&eacute; but it&rsquo;s a nice one and it works.</p>
<h2>Bookmarklets, UserScript, UserStyles and Extensions</h2>
<p>There are a number of bookmarklets whose specific purpose is to apply a predefined design to any arbitrary content. Many of them use Helvetica. Although Bookmarklets have been around for a long time, their popularity never really took off with the mainstream web audience. It&rsquo;s probably something to do with the conflicting messages tech-types give to non-tech-types: &ldquo;Never install programs from the web, they&rsquo;re almost certainly viruses&rdquo; and &ldquo;A Bookmarklet is a little program that runs in your browser...&rdquo;. UserScripts keep pushing the boundaries for what is possible via JS but require a level of technical ability beyond the vast majority. UserStyles are a more passive way of doing many of the same things as UserScripts and Bookmarklets although whereas they run JS and actively modify the page, UserStyles take the markup they&rsquo;re given and change it.</p>
<p>At the moment, it seems the most user-understandable way to enhance the browser experience is with browser extensions, even if they are simply used to run the same JS you&rsquo;d have in a bookmarklet or a userscript.</p>
<h2><a href="http://helvetireader.com/">Helvetireader</a></h2>
<p>We&rsquo;re getting quite meta here. If you&rsquo;re using Google Reader for consuming your RSS, you&rsquo;ve already brought the content into a new context. Helvetireader from <a href="http://www.hicksdesign.co.uk">Jon Hicks</a> takes that content and overlays another design. Which uses Helvetica.</p>
<h2><a href="http://lab.arc90.com/experiments/readability/">Readability</a></h2>
<p>I mentioned this briefly last year. This is probably the highest-profile bookmarklet in this field. In the words of the creators, <a href="http://www.arc90.com/">arc90</a>, it &lsquo;...makes reading on the Web more enjoyable by removing the clutter...&rsquo; actually, that&rsquo;s a far better way of describing what I&rsquo;m talking about than my whole first three paragraphs. This allows a few variations in designs giving the user a bit more control over how they want things presented.</p>
<h2><a href="http://www.notforest.com/">NotForest</a></h2>
<p>This is superficially similar to readability but whereas with readability, you customise the design before you install the bookmarklet, this allows you to choose your design each time it is launched.</p>
<h2>More than words...</h2>
<p>When I&rsquo;m referring to content, I don&rsquo;t just mean text. Any media &ndash; audio, video, photo &ndash; can be separated from its original context and presented in a more accessible way. <a href="http://quietube.com">QuietTube</a> does this for YouTube videos, presenting them on a white page with no recommended videos, no channel subscription buttons and, most importantly, no comments<a href="http://thingsinjars.com/post/348/context-free-content-and-content-agnostic-design/#footnote348-2" class="footnote" id="footnote348-b">[1]</a>. <a href="http://flickriver.com">Flickriver</a> presents the photos from a Flickr user&rsquo;s account on a black background in an endless scroll so that you can just immerse yourself in the photos without having to look for the &lsquo;next&rsquo; button every time. <a href="http://huffduffer.com">Huffduffer</a> picks up any audio files you want in webpages and gives them to you as an RSS feed that can be subscribed to in iTunes. You&rsquo;re taking the audio out of its original context and consuming it how you choose.</p>
<p><a id="footnote348-2" class="footnote">[1]</a>YouTube comments are a great way to remind yourself that IQ 100 is an <em>average</em>. Half of the population are below that.<a href="http://thingsinjars.com/post/348/context-free-content-and-content-agnostic-design/#footnote348-b" class="footnote">&uarr;</a></p>      </div>
]]></description>
<pubDate>Thu, 13 Jan 2011 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>Cash machine frustrations</title>
<link>http://thingsinjars.com/post/344/cash-machine-frustrations/</link>
<guid>http://thingsinjars.com/post/344/cash-machine-frustrations/</guid>
<description><![CDATA[
        <div class="teaser html" id="teaser-344">
        <p><a href="http://thingsinjars.com/post/344/cash-machine-frustrations/">Cash machine frustrations</a></p>
<p>Cash machines, ATMs, AutoTellers, Cashpoints... whatever you call them in your bit of the world, have been around <a href="http://www.bbc.co.uk/london/content/articles/2007/06/26/cash_machine_feature.shtml">since the 1960s</a> and yet there is still no user-interface standardisation. There’s a wide difference in user experiences, designs, hardware, layout. A certain amount can be attributed to the kind of variation you’d expect – font, colour, terminology – but after almost 50 years, there’s still a gulf between a good experience – the kind where you barely notice the machine: you have a task, you do it, you’re done – and a bad one – the kind that would prompt you to write a post about it, for example.</p>

<p>It may seem like a trivial thing to most people but I find I’ve actually started avoiding the machine near my house just because it is the worst offender I have ever come across in terms of consistency, design and sense. This interface was definitely planned by programmers and not designers.</p>

<p>Roughly, the process goes like this:</p>

<h2>Screen one</h2>
<pre class="uncode">

Insert your card

</pre>

<p><em>Inserts card</em></p>

<p>Okay so far.</p>

<h2>Screen two</h2>
<pre class="uncode">

Please type your PIN then press Enter

</pre>
<p><em>beep, beep, beep, beep<a href="http://thingsinjars.com/post/344/cash-machine-frustrations/#footnote344-1" class="footnote" id="footnote344-a">[1]</a>, look for the Enter button...</em></p>


<h2>Screen three</h2>
<pre class="uncode">

Please wait, processing...

</pre>
<p><em>Wait, I haven’t pressed enter yet! Apparently I didn’t need to press enter, did I? You were lying when you said ’press Enter’. You’re already making me dislike you.</em></p>

<h2>Screen four</h2>
<pre class="uncode">

Would you like a receipt with this transaction?






                         yes >
                          no >

</pre>

<p>The gap between the question (at the top of the screen) and the options (at the bottom) is just big enough to make me want to double-check the question. This would be much better if the options were themselves descriptive:</p>
<pre class="uncode">

       I want a receipt >
I do not want a receipt >

</pre>

<p>Even better if this was asked at the end of the transaction. Maybe I haven’t decided whether or not I want a receipt. I’ll have a better idea <em>after</em> my transaction. What if I say no now and change my mind later? Is it too late then? Will I get another chance? Oh no, I’m hyper-ventilating...</p>

<p>Related to this screen is my biggest cause for complaint. When there is no receipt paper left what does the machine do? Miss out this question? Replace it with a single notification screen? No, instead, we get this screen:</p>

<h2>Screen four, take 2</h2>
<pre class="uncode">

Unable to print receipt, would you like to continue
with this transaction?






                         yes >
                          no >

</pre>

<p>If you’re in the habit of anticipating the receipt question, you’re prepped and ready to press ’no’ as in "No, I don’t want a receipt". However, if this screen comes up, even if you notice the question is different, nine times out of ten, muscle memory kicks in and you find yourself pressing it anyway with a voice in your head shouting ’Stooooop!’ at whatever’s controlling your finger. You press it, your card is spat out, you have to start again. This experience will ensure that the next time you’re presented with the screen, you’ll double-check the question then the options then the question and then the options. Twice. Even if you try to scan the text, your eyes will still pick out ’receipt’ in the middle and ’with this transaction’ at the end. That doesn’t help, you actually need to read and comprehend fully. And here was you thinking you only wanted to get some cash out.</p>

<h2>Screen five</h2>
<pre class="uncode">

Please select transaction






                         View Balance >
                             Withdraw >

</pre>

<p>I don’t have too many complains about this screen except for the unnecessary distance between the question and the options. It is a touch irksome that they’ve now switched to action-based label text ("view") from the option-based labels ("yes" above)</p>

<h2>Screen six</h2>
<pre class="uncode">

Please select amount to withdraw


        < £100                  Other >
        < £70	                   £50 >
        < £40	                   £30 >
        < £20	                   £10 >

</pre>

<p><em>I would like £30, please. *beep*</em></p>

<h2>Screen seven</h2>
<pre class="uncode">

Please wait, processing...

</pre>

<p>About 30% of the time, this is the next screen:</p>

<h2>Screen eight</h2>
<pre class="uncode">

Unable to dispense required amount. Please enter a
different amount.

   Suggested amount(s): £20, £40

   £[   ]

</pre>
<p>There are several annoyances with this screen:</p>
<ol>
	<li>why was I even asked if I wanted £30 if the machine was never going to give me £30? </li>
	<li>what if I were to type in £50? Would the machine also be unable to dispense that amount? £20 and £40 are suggestions but there’s nothing to say why I can’t have £50.</li>
	<li>was it so utterly impossible for the programmers to figure out whether they were displaying one suggested amount or two? There should never be any reason for dynamically generated text to resort to the bracket(s).</li>
</ol>

<p>As an aside, this reminds me of an online mortgage calculator I used once where you’d enter an amount like ”£20,000“ and it would say ”Incorrect Value“ but not say what was wrong so you’d try ”20,000“, ”Incorrect Value“, ”20000“, ”Incorrect Value“, ”£20000“, ”Thank you“.</p>

<p>The operators of these machines must have a lot of usage statistics so rather than give equal billing to all possible options throughout the process, why not reorganise so that the greatest number of people have the smallest amount of work to do? If 90% of users use the machines to withdraw £20, put that on the front screen (just after the PIN). Don’t insist on brand colours when they’re annoyingly intrusive on the user experience. Heck, why not just set the whole thing in off-black Helvetica on an off-white background with that ubiquitous swiss red colour?</p>

<p>I’d rather something like this</p>
<p><img src="http://thingsinjars.com/uploaded/images/thumbs/ATM-nice-thumb.png" alt="Nice-looking ATM"></p>
<p>than something like this</p>
<p><img src="http://thingsinjars.com/uploaded/images/thumbs/ATM-nasty-thumb.png" alt="Nasty-looking ATM">
</p>

<h2>Am I over-reacting?</h2>
<p>Yes, completely. That’s not the point. Well thought-out user interfaces are what separates us from the animals. Or something like that. There are now <a href="http://www.atmia.com/mig/globalatmclock/">over 2 million ATMs in the world</a>, so unifying them will probably never happen but that doesn’t give the designers of the next generation of machines free reign to start from scratch all over again.</p>

<h2>Am I generalising?</h2>
<p>Okay, maybe a bit. Maybe a lot, actually. I’ve successfully used ATMs in a number of countries in a variety of languages but then, I do ‘tech stuff’ for a living. Without getting my hands on those usage statistics, I couldn’t really say.</p>
<p>Anyway, aren’t we supposed to be paying for everything by thumbprint these days?</p>

<p><a id="footnote344-1" class="footnote">1</a>Note, this is not my actual PIN, that would be ‘beep, beep, beep, beep’<a href="http://thingsinjars.com/post/344/cash-machine-frustrations/#footnote344-a" class="footnote">↑</a></p>      </div>
]]></description>
<pubDate>Tue, 11 Jan 2011 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>Bad tweet, go to your room</title>
<link>http://thingsinjars.com/post/301/bad-tweet-go-to-your-room/</link>
<guid>http://thingsinjars.com/post/301/bad-tweet-go-to-your-room/</guid>
<description><![CDATA[
        <div class="teaser html" id="teaser-301">
        <p><a href="http://thingsinjars.com/post/301/bad-tweet-go-to-your-room/">Bad tweet, go to your room</a></p>
<p>Disclaimer: I'm not a social media guru, consultant, expert, doctor, nurse, midwife, engineer, ninja or rockstar. Because of this, you know you can trust what I say about social media because I'm not trying to sell it to you. You can also ignore it because you're not paying me.</p>

<p>I don't tend to say much on the subject of Twitter. I also don't tend to say that much on <a href="http://twitter.com/thingsinjars">Twitter</a> itself. That said, I do spend a lot of time on the Internet so here are some things you should stop doing now. Like, right now. Call it ‘Social media bad practice’ if you will, or ‘Tips and Tricks for a Tidier Tweet’ if that's the kind of thing you're into. Whatever, stop doing these:</p>

<h2>Autotweeting from 3rd party apps</h2>
<p>When you use one of the many apps that track your weight, book-reading habits, location, tweetability or shoe-size, disable the 'post to Twitter?' option, please. When I see these posts, all I read is either:</p>
<p>“According to amIanEejit.com, I'm an Eejit. Are you? Try it now.”</p>
<p>or</p>
<p>“I need public validation. Did I do good? Did I?”</p>

<h2>Tweeting a shortened URL which performs an action on the logged-in user's account</h2>
<p>Of course, fault for this should also be spread equally between the tweeter, the website which allows GET operations to modify data and the user who isn't wary enough of shortened URLs to expand them first. The person who creates the shortened URL without being aware of the consequences is to blame <em>and</em> an eejit. If you're not sure what I'm talking about, here's an example:</p>
<ol>
<li>You have an account on website X which you are logged into</li>
<li>I have an account on website X which I am logged into</li>
<li>Website X allows you to delete your account by going to www.example.com/deletemyaccount.php</li>
<li>You copy that URL and shorten it using bit.ly</li>
<li>You tweet “Hey, this is what I think of Website X: http://bit.ly/madeupthing”</li>
<li>I click the link</li>
<li>My account on Website X gets deleted</li>
<li>I stab you with pencils.</li>
</ol>

<h2>Using inappropriate hashtags to piggy-back on an unrelated discussion</h2>
<p>Some people use #hashtags as tweet meta data providing an extra piece of context on the tweet – “Om nom nom #fridaymorningbaconroll” – while others use them to create fluid, transient chatrooms. Where in the past you'd have used IRC and created a relevant room, using Twitter and a hashtag, you can jump into a conversation and out again without even trying. If you attempt to barge your way in with irrelevant comments, advertising nonsense or general eejicy, you act no better than an out-and-out-spammer and I don't follow no spammers.</p>

<h2>Flooding followers with real-time reporting</h2>
<p>Use a separate account for this kind of thing. <a href="http://www.macrumors.com">Macrumors</a> do this whenever there's one of those big Steve Jobs parties – if you want to follow all the info, follow the <a href="http://twitter.com/macrumorslive">@macrumorslive</a> account. Similarly, <a href="http://fridaymix.com">Fridaymix</a> do the same thing. Discussions happen with the <a href="http://twitter.com/fridaymix">@fridaymix</a> account while the announcements of what is currently being played come from <a href="http://twitter.com/fridaymixdj">@fridaymixdj</a>.</p>
<h3>Related: Retweeting your other account.</h3>
<p>If I wanted to follow the other account, I'd follow the other account.</p>
<h3>Also related: Retweeting your own main account</h3>
<p>I heard you. Don't be the guy at the party with one punchilne that you tell again and again. I already know that guy. I don't follow him on Twitter.</p>

<h2>Posting quotes from conference presentations without context or grammar</h2>
<h3>This doubly applies if the quote sounds like a half-hearted Zen koan.</h3>
<p>“Listen to the youth. They have younger voices.”</p>
<p>“Use torches to light the way. Technology is your torch.”</p>

<h3>This triply applies if you use antimetabole</h3>
<p>“Don't follow the herd, herd the followers.”</p>
<p>“Don't live beyond means, have meaning beyond living.”</p>

<p>Of course, the worst is probably tweeting about your own blog post in which you discuss tweeting as if it actually matters.</p>      </div>
]]></description>
<pubDate>Wed, 06 Oct 2010 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>...and a salesman, too.</title>
<link>http://thingsinjars.com/post/300/and-a-salesman-too/</link>
<guid>http://thingsinjars.com/post/300/and-a-salesman-too/</guid>
<description><![CDATA[
        <div class="teaser " id="teaser-300">
        <p><a href="http://thingsinjars.com/post/300/and-a-salesman-too/">...and a salesman, too.</a></p>
It seems to be a fundamental aspect of the world that, whatever you do for a living, you have to do that <em>and</em> be a salesman. When I say selling, I don't mean the purely business related contract-signing, accounting and banking aspect of sales, I mean <em>really</em> 'Selling yourself'. Marketing, if you will. The bit of the process that involves firm handshakes, giving presentations at conferences, reminding people at every opportunity that you are selling something they need. Even if they don't know they need it. Even if they don't need it.

You could be the greatest web developer known to the history of the interweb creating progressively-enhanced, backwards-compatible masterpieces of semantic mark-up which not only push the boundaries in the latest Webkit nightlies but still fly pixel-perfect in IE6 and you still wouldn't be able to run your own agency without selling your services.

Your iPhone app might be 'The Greatest App Ever Invented' combining the power of <a href="http://itunes.apple.com/us/app/google-mobile-app/id284815942?mt=8">Google</a>, the ease of use of <a href="http://itunes.apple.com/us/app/twitter/id333903271?mt=8">Twitter</a> and the graphics of <a href="http://itunes.apple.com/us/app/epic-citadel/id388888815?mt=8">Epic Citadel</a>. It might prove the <a href="http://en.wikipedia.org/wiki/Riemann_hypothesis">Riemann Hypothesis</a>, remind you of birthdays, cure cancer all while showing pictures of <a href="http://www.cutethingsfallingasleep.org/">cats falling asleep</a> but unless somebody actually knows it exists, it's no more useful than those apps that play the noises of bodily functions while simultanesouly being less succesful. By putting it in the iTunes Store you are technically selling it but you're not 'selling it'.

The same situation applies in every industry – writing books, making sandwiches, playing piano, juggling. Unless you are lucky enough to be 'discovered' by someone with the ability to sell but without anything to actually sell, there is no difference between you and everybody else in your field. Despite what you may have learnt in school, you do not get to the top of the class by being the smartest. You get to the top by putting your hand up when the teacher asks a question.

A few months back I saw an article entitled 'Talent does not go unrewarded'. I've seen too many shy, socially awkward developers who won't progress past the minimum acceptable salary for their job title to believe this. More accurately, I'd say 'Talent does not go unrecognised'. They don't get rewarded for their technical wizardry, they get rewarded for convincing their bosses they're worth more than they're currently being paid. For selling themselves.

Evan Williams' recent step down from CEO of Twitter to focus on product develpment strikes me as the developer's ideal – all the success and reward (financial and kudos) without the daily requirement to constantly sell. Of course, Twitter wouldn't have gotten to where it is if he hadn't been able to take on that role along the way.      </div>
]]></description>
<pubDate>Wed, 06 Oct 2010 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>licences.xml</title>
<link>http://thingsinjars.com/post/290/licencesxml/</link>
<guid>http://thingsinjars.com/post/290/licencesxml/</guid>
<description><![CDATA[
        <div class="teaser html" id="teaser-290">
        <p><a href="http://thingsinjars.com/post/290/licencesxml/">licences.xml</a></p>
<p>JavaScript libraries and CSS frameworks are very popular these days. With each library, plugin, extension and template, comes another licencing statement. For most of these licences (<a href="http://www.opensource.org/licenses/mit-license.php">MIT</a>, for instance), you must include the licence statement in order to be able to use the code. In many cases, you also have to provide the original source and your own modifications. While, for uncompiled technologies such as these, this is a trivial matter, both this requirement and that of including the licence are awkward to implement if you like to minify your code. The licence is usually kept in an uncompressed comment at the top of the library (the YUI compressor specifically takes this into account with comments marked /*!  */ ) and, although anyone can read your modifications to whatever you've used, post-minification code is much harder to follow (cf. three of my last four blog posts) and is really not 'in the spirit' of sharing your code.</p>
<p>I'd like to be able to bundle all the licences and sources together outside the production files. Somewhere the interested user would be able to look them up if they liked but not somewhere that would automatically be downloaded on a standard visit. To that end, I have looked around for an established standard for this and not found anything. If you know of one, please let me know. Until I do find a good standard, here's my suggestion – a simple XML file located at /licences.xml in the format outlined below. It contains details of the file the licence pertains to, the uncompressed source (optional), the title of the licence and a URL where the full licence text can be found (on opensource.org or creativecommons.org, for instance). It also includes a (probably superfluous) shortname for the licence. I might remove that bit. You can optionally include this meta in your HTML if you want an explicit link between your source and the licence file:</p>
<pre><code>&lt;meta name=&quot;licences&quot; value=&quot;/licences.xml&quot; /&gt;</code></pre> 
<p>I'm currently undecided as to whether to go with XML or JSON. They're fairly interchangeable (barring XML attributes) but JSON takes less space. Then again, there's not as much need to save space in this file. Anyone have any recommendations? The entire format is, of course, up for discussion. Have I forgotten anything? Have I included anything unnecessary? I'm going to start using this in my projects until someone points out some major legal problem with it, I think.</p>
 
<h2>XML</h2> 
<pre> 
&lt;licences&gt;
 &lt;licence&gt;
  &lt;source&gt;
   &lt;url&gt;
    /includes/script/jquery/1.4/jquery.min.js
   &lt;/url&gt;
   &lt;uncompressed&gt;
    /includes/script/jquery/1.4/jquery.js
   &lt;/uncompressed&gt;
  &lt;/source&gt;
  &lt;deed&gt;
   &lt;title&gt;
   MIT License
   &lt;/title&gt;
   &lt;url&gt;
    http://www.opensource.org/licenses/mit-license.php
   &lt;/url&gt;
   &lt;shortform&gt;
   MIT
   &lt;/shortform&gt;
  &lt;/deed&gt;
 &lt;/licence&gt;
 &lt;licence&gt;
  &lt;source&gt;
   &lt;url&gt;
    /includes/script/custom/0.1/custom.js
   &lt;/url&gt;
   &lt;uncompressed&gt;
    /includes/script/custom/0.1/custom.min.js
   &lt;/uncompressed&gt;
  &lt;/source&gt;
  &lt;deed&gt;
   &lt;title&gt;
   Attribution Share Alike
   &lt;/title&gt;
   &lt;url&gt;
    http://creativecommons.org/licenses/by-sa/3.0
   &lt;/url&gt;
   &lt;shortform&gt;
   cc by-sa
   &lt;/shortform&gt;
  &lt;/deed&gt;
 &lt;/licence&gt;
&lt;/licences&gt;
</pre> 
<h2>JSON</h2> 
<pre> 
{
 licences:{
  {
   source:{
    url:'/includes/script/jquery/1.4/jquery.min.js',
    uncompressed:'/includes/script/jquery/1.4/jquery.js'
   },
   deed:{
    title:'MIT License',
    url:'http://www.opensource.org/licenses/mit-license.php',
    shortform:'MIT'
   }
  },
  {
   source:{
    url:'/includes/script/custom/0.1/custom.min.js',
    uncompressed:'/includes/script/custom/0.1/custom.js'
   },
   deed:{
    title:'Attribution Share Alike',
    url:'http://creativecommons.org/licenses/by-sa/3.0',
    shortform:'cc by-sa'
   }
  }
 }
}
</pre>      </div>
]]></description>
<pubDate>Fri, 20 Aug 2010 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>Appreciate the artisans</title>
<link>http://thingsinjars.com/post/259/appreciate-the-artisans/</link>
<guid>http://thingsinjars.com/post/259/appreciate-the-artisans/</guid>
<description><![CDATA[
        <div class="teaser " id="teaser-259">
        <p><a href="http://thingsinjars.com/post/259/appreciate-the-artisans/">Appreciate the artisans</a></p>
I know that every professional thinks their bit of the process is more important than people give them credit for. Designer's don't just colour in wireframes handed to them by the Information Architect. IAs don't just draw boxes and arrows. Copy writers don't just copy-and-paste the company brochure over the lorem ipsum.

Now that I've said that, I must now point out: Developers don't get nearly enough credit.

This may be something to do with the odd confusion that is 'web designer vs. web developer'. In some - and possibly the majority of - agencies, the web <em>designer</em> not only designs what the page looks like in Photoshop/Fireworks/Whatever but also produces the HTML templates, CSS and whatever JavaScript they feel comfortable with (the tutorials at <a href="http://jqueryfordesigners.com/">jQuery for Designers</a> probably help, too). In these agencies, if there is such a person as a web <em>developer</em>, they are most likely responsible for moving the relevant bits of HTML into template files, adding in any back-end integration and possibly writing some of the trickier JavaScript. The confusion arises in the other kind of agencies. The kind where web <em>designers</em> make Photoshop files and web <em>developers</em> turn them into HTML. The designer doesn't necessarily need to know anything about HTML, semantics or scripting. Not to minimise the importance of this kind of designer - they'll know a lot about typography, and visual relations, probably quite a lot about user experience and the process involved in bridging the gap between what the client wants to say and how the user wants to hear - but it's this kind of web developer I think doesn't get enough credit. 

If you're designing a site with a full knowledge of how it could be marked up, you will naturally - even if it's subconsciously - be marking it up in your head. This will influence your design and not necessarily in a bad way. You might ensure the semantics are just that little bit clearer or you might nudge these bits over that way so they can be grouped with those other ones there. If, however, you design with no thought at all about how this is going to be made, you will, most likely, do some things that you wouldn't otherwise. If your front-end developer can take this and turn it into a perfectly semantic, clean-coded masterpiece of HTML and CSS then apply JavaScript to progressively enhance the heck out of it and still keep it looking like you designed, they deserve to be lauded, applauded, praised and thanked. Publicly. The usual outcome of this situation is that the designer gets asked along to the awards ceremonies, puts it on their portfolio, an article in <a href="http://www.thedrum.co.uk/">the Drum</a>, happy. The developer gets a pat on the back from the team leader and asked if they could just tidy up how it looks in IE5.5 before they head home for the night, that'd be great, thanks.

Sure, maybe we just need some better awards ceremonies for geeks. The kind of thing that the agency sales team will be able to brag about to potential customers (as that, in essence, seems to be the point of awards ceremonies) but I also think there might need to be a bit of a change of opinion in the industry. Just as designers don't just colour in wireframes, developers don't just open the designs in Photoshop and press 'Save for web...'.

I hope this doesn't sound too ranty. These thoughts were prompted after seeing a few designer and copy writer portfolios which contained sites that either I'd built or one of my team had built. Writers credited, designers credited, developers (who built some awesome stuff on them, by the way) lost in the mists of time.      </div>
]]></description>
<pubDate>Mon, 25 Jan 2010 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>User style</title>
<link>http://thingsinjars.com/post/256/user-style/</link>
<guid>http://thingsinjars.com/post/256/user-style/</guid>
<description><![CDATA[
        <div class="teaser html" id="teaser-256">
        <p><a href="http://thingsinjars.com/post/256/user-style/">User style</a></p>
<p>A few years ago, I made a prediction about the way the web was going and so far it hasn't come true but it's definitely coming closer. To me it seems that the logical extension of us developers separating style and substance – what we've been doing for years with semantic mark-up – is for the general consumer to take that substance and give it their own style. I'm in no way suggesting that everyone become a designer. That would be a terrible, terrible thing. What I mean is that the consumer takes in/reads/experiences whatever it is you're giving to them in the manner that best suits them. There are many examples of what I mean around already but they're still not quite where I think they will end up.</p>

<h2>RSS</h2>
<p>We (web developers) already provide RSS feeds on our sites. By subscribing to a site's RSS feed, you get the content delivered directly to your RSS reader. As long as the site is providing the full article content (shame on you, if not) the consumer gets to see your content in a design format you have little control over. There is a basic level allowed for RSS formatting but nothing you can rely on. The control for the visual appearance of your content is now in the hands of the designer of the reader and the consumer (by way of choosing which reader they use).</p>

<h2>userstyle.css</h2>
<p>This was what initially prompted my thoughts on the subject. I've used Opera as my main browser for almost 10 years and I've always liked the Author mode/User mode switch. In essence, you can quickly toggle between seeing a web page as it was intended by the designer or disregarding the original layout and applying your own stylesheets to it. For the most part, this is used to be able to set high contrast for visually impaired users or to test various criteria (showing only images that have missing alt attributes, for example) but they can be used to produce any visual effect achievable with CSS.</p>

<p>User stylesheets can also be assigned on a per-site basis rather than globally which means that you could have your Google results rendered in courier, right-aligned in green on black while your facebook pages can be set in Times in a sepia colourscheme.</p>

<p>As with many things on the web, userstyles became a lot more popular once this functionality was available in Firefox (via the add-on <a href="https://addons.mozilla.org/en-US/firefox/addon/2108">Stylish</a>) and not just Opera. Now there's a growing <a href="http://userstyles.org/">community of Userstyle developers</a> and a <a href="http://userstyles.org/styles/browse?sort=popularity&sort_direction=desc">directory of styles</a>. Unfortunately, this is still not quite ready for mainstream use. It requires at least a basic level of technical ability to enable userstyles and to install them.</p>

<h2>userscript.js</h2>
<p>The userstyles community is, however, dwarfed in comparison to the userscript community. In pretty much exactly the same way that userstyles work, users can execute a specific Javascript file whenever they visit a site. Again, this can be enabled in Opera using site preferences and in Firefox using the <a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey add-on</a>. These scripts can completely change the way a site functions as well as how it looks. Combine them with userstyles (which userscripts can include automatically) and the only thing you can rely on remaining from your original design is the URL. There's a <a href="http://userscripts.org/">massive database of userscripts</a> available.</p>

<p>Again, though, these are still just that <em>little bit too hard</em>. The standard user isn't going to install the extension, isn't going to browse for scripts and isn't going to run Opera so these are still a bit too far away.</p>

<h2>Grab now, read later</h2>
<p>There are now quite a few sites where you can save stuff to read later. If you find an interesting article or a funny blog post but don't have time to read it or if it appears on a site with a garish and unusable design, you can send it to <a href="http://www.instapaper.com/">Instapaper</a> or <a href="http://www.evernote.com/">Evernote </a>. You can then read it in their interface, on your iPhone, on your Kindle... all separated from your design.</p>

<p>It's not only text that gets this treatment, you can use <a href="http://emberapp.com/">Ember</a> and <a href="http://www.realmacsoftware.com/littlesnapper/">LittleSnapper</a> to grab and store visuals for later perusal or use <a href="http://huffduffer.com/">Huffduffer</a> to collect any audio files you find and serve them back to you as your very own personalised podcast. Again, this is <em>your</em> content separated entirely from the way you wanted it seen. And that's a good thing.</p>

<p>For content creators, all this means is that your content can be consumed anywhere, even via sites, tools and delivery mechnisms you've never heard of. Designers, don't despair, users aren't suddenly going to take their content elsewhere and not need you any more – users still want and <em>need</em> things designed well, this just means that if your design works for the user for a particular type of content, they'll use it for any content of that type. I'd much rather watch youtube videos using vimeo's layout than youtube's. Actually, I'd much rather have vimeo's comments, too.</p>

<p>We're still quite a way off the average user being able to see whatever they want however they want it but these technologies and tools are definitely heading that way. I just wish I'd made a bet on it way back when.</p>      </div>
]]></description>
<pubDate>Fri, 15 Jan 2010 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>Side Tab</title>
<link>http://thingsinjars.com/post/252/side-tab/</link>
<guid>http://thingsinjars.com/post/252/side-tab/</guid>
<description><![CDATA[
        <div class="teaser html" id="teaser-252">
        <p><a href="http://thingsinjars.com/post/252/side-tab/">Side Tab</a></p>
<ul class="gallery"><li><a href="http://blah.thingsinjars.com/uploaded/images/expanded/side-tab.jpg" title="Opera with Tabs down the side" rel="lightbox[252]"><img src="http://blah.thingsinjars.com/uploaded/images/thumbs/side-tab.jpg" alt="thumb of my Opera layout"/></a></li></ul>
<p>After reading Aza Raskin's post about Firefox moving its tabs <a href="http://www.azarask.in/blog/post/firefoxnext-tabs-on-the-side/">down the side</a> of the window, I decided to give it a go in Opera. It turns out to be very useful when you have a widescreen monitor. I usually end up with several dozen tabs open at once and it's much easier to be able to put them down the side in an area which is, for most websites at least, dead space. On the rare occasions I do find myself on a website which requires more than the 1470px horizontal space this gives me, I can just tap f4 and get my full 1650px back. As the window sidepanel also groups by window and lists all tabs open across all windows, I can keep them ordered thematically, too.</p>
<p>This arrangement definitely doesn't work, however, when you have a small screen. When I tried this on my netbook, I had to choose between losing half of my screen to the tab list or only being able to read the beginning of each page title, even if I only had one tab open.</p>
<p>A quick aside, when I first read about moving tabs down the side, my initial thought was "It's a shame Opera doesn't have add-ons, I'd like to give this a go" and very nearly fired up Firefox before I realised that Opera already has this functionality and has had since (approximately) version 5 (almost 10 years ago). Just sayin'.</p>      </div>
]]></description>
<pubDate>Thu, 10 Dec 2009 00:00:00 GMT</pubDate>
<category>opinion</category>
</item><item>
<title>It's not difficult, don't make it difficult</title>
<link>http://thingsinjars.com/post/248/its-not-difficult-dont-make-it-difficult/</link>
<guid>http://thingsinjars.com/post/248/its-not-difficult-dont-make-it-difficult/</guid>
<description><![CDATA[
        <div class="teaser textonly" id="teaser-248">
        <p><a href="/post/248/its-not-difficult-dont-make-it-difficult/">It's not difficult, don't make it difficult</a></p>
        <p>What's easier? Boiling a single potato, letting it cool, mashing it using a toothpick then repeating with a different potato until you have a plateful of mashed potato...</p>
<p>or </p>
<p>Boiling all the potatoes you need at once then mashing them together with a potato masher?</p>
<p>Okay, choose between one of these methods of determining whether the bathroom light is on: Draw up a list of people who have visited your house recently. Interview them to build a data set of all rooms visited and by whom. Re-interview those who visited the bathroom. Determine a timeline of bathroom visits and light switch position on entry and on exit. Analyse the data to find the last visitor to the bathroom and the position of the light switch. Examine the electrical connections between the light switch and the light bulb to determine what the current status of the light itself might be.</p>
<p>or</p>
<p>Go look.</p>
<p>How are you doing on the quiz so far? Okay. So, final question: What's easier? Building a convoluted web site using proprietary code, conflicting CSS requiring you to target everything with !important, making all interaction rely on JavaScript for even the most basic functionality, fighting between form and function so much that you end up having a website that only works occasionally and even then only works for a subset of the available users.</p>
<p>or</p>
<p>Building a straightforward website using nothing but standard mark-up, styles which cascade in a predictable fashion and enhancing already-working functionality with a dash of JavaScript to make people go 'Ooh, shiny'?</p>
<p>If you thought the second option was easier, I'm sorry, you would appear to be wrong. At least, that's the impression I get every single day while wandering round the internet. It must be really easy to make a ham-fisted, in-bred, should be kept in the basement monstrous-crime-against-nature abomination of a website because otherwise, people wouldn't do it so much.</p>
<p>I've used Opera as my main browser for almost 10 years now and I've lost count of the number of times I've been faced with a message apologising to me because it appears my browser is out of date. If I could just update my browser to Internet Explorer 5, I could enjoy their site. Seriously, it must be a lot easier to make a web page locking me out of the site than not to. It must be a matter of a few seconds work to write browser-sniffing scripts and learn all the proprietary foibles of IE whereas not writing that script must take hours and not learning bad habits must take years.</p>
<p>I have some ability to forgive those websites which are obviously the work of someone whose passion is something else. If I'm looking at a site where a guy has meticulously documented the different ways different cats react to different balls of yarn, I'm guessing his interests is in yarn. Or cats. Or the combination thereof. He's not necessarily going to know the best way to make a website. I find it much harder, however, forgive big companies. Either those with an in-house web staff or those who contract agencies. Whatever way they do it, someone is getting paid to make the website. It is someone's job to write code. </p>
<p>I've always been of the opinion that if you're going to do any thing, you should at least try to do it as well as it can possibly be done. It doesn't matter if you're playing piano, rowing, juggling chickens or making a website, you have no excuse for not at least trying to be awesome at it. If you end up being awesome at it: great! You're the world's best chicken juggler, go into the world knowing that and be happy. If you don't: great! You gave it a darn good try and you probably ended up pretty good, at least. Maybe try juggling cats next time. I have a hard enough time getting my head around the idea that not everybody follows this same level of obsession in their interests but to have people who are actually getting paid actual money to do something (in this case, making a website, not chicken juggling) and who feel it's okay to be 'okay' is a concept I have great difficulty understanding.</p>
<p>Okay, impassioned rant over. I'm not going to name any sites. Just consider this a warning, Internet.</p>      </div>
]]></description>
<pubDate>Sun, 25 Oct 2009 00:00:00 GMT</pubDate>
<category>opinion</category>
</item></channel>
</rss>