<?xml version="1.0" encoding="utf-8"?><!-- generator="Kirby" -->

<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">

  <channel>
    <title>Steff.me &#62; Journal</title>
    <link>http://steff.me/journal</link>
    <generator>Kirby</generator>
    <lastBuildDate>Tue, 03 Sep 2013 23:29:32 +0000</lastBuildDate>
    <atom:link href="http://steff.me/rss" rel="self" type="application/rss+xml" />

        <description>I'm Steffan Williams, a freelance front-end developer. These are my thoughts.</description>
      
        <item>
      <title>Design Storytelling</title>  
      <link>http://steff.me/journal/design-storytelling</link>
      <guid>http://steff.me/journal/design-storytelling</guid>
      <pubDate>Mon, 30 Jul 2012 09:32:25 +0000</pubDate>
        
                  <description><![CDATA[<div class="six-col prefix-three suffix-three">
<p>It was over a year ago that I moved into my house, and yet it's only now that I'm getting around to building a shed. Before piecing it together, I decided to treat and paint every part individually, and this required a trip to B&amp;Q (other DIY retailers do exist). I had already scouted out a few colour variations, but had to run them passed the significant other before committing.</p>

<p>We arrive at retail park, and no further than one step outside of the car do we notice the smell. The air is filled with the delicious scent of a burger van, pitched next to the doors of B&amp;Q. The tantalising fragrance of beef burgers and onions masking the odour of the rolls of grass and hanging baskets of flowers on display outside the store. My girlfriend proceeds with her usual comment, that she loves the smell, but hates the eating onions because of the texture. A sudden memory comes to me, and I start talking about some old story I'd heard from when I was in primary school. Unfortunately the memory was vague and a bit light on the details, but the general gist was as follows.</p>

<div class="story">
<p>One day, as a tramp is eating a loaf of bread, he happens to pass by a van selling burgers. Noticing instantly that the smell helps transform the bread, he stops and sits down next to the van to continue his meal. As the burgers and onions cook, the tramp savours every mouthful of his improved bread. Upon noticing the tramp, the owner of the van becomes angered and demands payment for the smell he's stolen.</p>
<p>Then something happens, and the tramp doesn't end up paying but there's definitely a moral to it. I drift off into a world of my own, desperately trying to claw at any details that I could get at, but the hazy memory of six year old me couldn't produce anything. It definitely had something to do with smell, sound and the tramp gets away with it.</p>
</div>

<p>By the time I finish rattling on about this story, we have reached the paint aisle. I apologise to my girlfriend for having no reason for bringing up the tale, and for not being able to remember the ending. We pick out the colours we like, and head home.</p>

<p>Earlier that day, I'd received a package I had been looking forward to for some time. A project I had backed on Kickstarter at the end of January 2011 had finally arrived — "<a href=" http://www.shapeofdesignbook.com/">The Shape of Design</a>", by Frank Chimero.</p>

</div>

<p style="padding-top:1em;" class="text-center clear">
<img src="http://steff.me/site/content/04-journal/09-design-storytelling/sod-per.png" alt="Steff.me" />
</p>

<div class="six-col prefix-three suffix-three">
<p>It was worth the wait; I tore through the pages. For someone who doesn't call himself much of a "reader", there was something almost magical about this book as I was incapable of putting it down. Its contents capture the <strong>How</strong> and <strong>Why</strong> of the creative process without the more common "How-to" tutorial. The storytelling throughout this book is inspiring, philosphical and analytical at the same time.</p>

<p>In the <a href="http://shapeofdesignbook.com/chapter10.html">final chapter of the book</a>, Chimero writes about an old Japanese tale of a poor student. Suddenly I couldn't believe what I was reading; my hazy recollections from primary school brought back and fleshed out. The book had connected with me on a level I didn't think possible, far beyond insights about what I do for a living.</p>

<p>If you consider yourself a "creative" &mdash; heck, even if you don't &mdash; I strongly encourage you to check out this book and experience it for yourself. It has been made available to <a href="http://shapeofdesignbook.com/foreword.html">read online</a>, but you should definitely go <a href="http://shapeofdesignbook.com/">buy yourself a copy</a> if possible.</p>

</div>
]]></description>      
            
    </item>
        <item>
      <title>FreeAgent Invoice Pack</title>  
      <link>http://steff.me/journal/freeagent-invoice-pack</link>
      <guid>http://steff.me/journal/freeagent-invoice-pack</guid>
      <pubDate>Tue, 08 May 2012 00:00:00 +0000</pubDate>
        
                  <description><![CDATA[<div>

  <p><a href="http://fre.ag/41tc1035" title="Small Business Online Accounting">FreeAgent</a>, if you don't know, is an awesome online accounting software aimed at freelancers and small businesses. Having made the switch over to it completely for my invoices, expenses and time tracking, I couldn't recommend it enough. While their default invoice themes are great, I've created a pack that is available for you to download and use for your own invoices!</p>

  <p>The pack consists of a set of five colours &ndash; grey, blue, green, orange and pink &ndash; displayed above, and a print stylesheet. These can be used as-is, or customised to use any colours you'd like.</p>

  <p><img src="http://steff.me/site/content/04-journal/08-freeagent-invoice-pack/themes.png" alt="Steff.me" /></p>


  <p class="text-center">
    <strong>
      Like what you see? <br /> 
      Buy the pack, or Tweet about it and get a discount!
    </strong> 
  </p>
  <p class="text-center">
    <a href="http://sellfy.com/p/UEsw" id="UEsw" class="sellfy-buy-button sellfy-large">Buy now</a>
    <!--[if gt IE 8]><!-->
    <script type="text/javascript" src="http://sellfy.com/js/api_buttons.js"></script>
    <!--<![endif]-->
  </p>

  <p>The rest of this post is how to install and customise the themes. So, go ahead and <a href="http://sellfy.com/p/UEsw">download the pack</a> first and come back for more information.</p>
  
  <h2>Installation instructions</h2>
  <p>To install one of the themes, follow the directions on the FreeAgent website found here: <a href="http://www.freeagent.com/support/kb/invoicing/theme-gallery">http://www.freeagent.com/support/kb/invoicing/theme-gallery</a>.</p>
  
  <p>Select your favourite colour from the pack, and paste the
  contents into the "Main CSS" tab. Regardless of which theme
  you choose, paste the contents of sjw_print.css into the
  "Print CSS" tab. Click the save button, and you're good to
  go! Now start sending those awesome invoices to clients.</p>
  
  <h2>Browser support</h2>
  <p>IE6+, Firefox, Chrome, Safari etc. are all supported for layout. All modern browsers that support CSS3 will also have some added niceties; rounded-corners, drop shadows and so forth.</p>
  
  <h2>Customisation</h2>
  <h3>Zebra stripes</h3>
  <p>By default each of the themes has <a href="http://www.alistapart.com/articles/zebratables/">zebra stripes</a> applied to the item rows of the invoice details table. If you're not a fan of zebra stripes, simply find the comment about "zebra stripes" in the CSS to remove them. This is an example from sjw_grey.css:</p>
  
<pre class="code"><code>/* --- delete the next two lines to remove zebra stripes --- */
#invoice-amount .item td { background: #f5f5f5; }
#invoice-amount .odd td { background: #fff; }
</code></pre>
  
  <h3>Show or hide addresses</h3>
  <p>Though the <a href="http://www.freeagent.com/support/kb/invoicing/invoice-devkit">Invoice Devkit</a> FreeAgent supply has all of the possible information, sometimes I find that I don't have much more than a name and email address for a client. For this reason, I've also made an option to remove the address lines from the invoice. Look in the "Customization" section of the CSS file for the following, and remove the two lines it says to delete:</p>
<pre class="code"><code>/* --- delete this line to remove addresses ---
.vcard { display: none; }
#invoice #invoice-info { clear: right; }
#invoice-header { float: left; display: inline; }
--- delete this line to remove addresses --- */
</code></pre>
<!--  Currently does not work:
  <h3>Fixed footer (PDF)</h3>
  <p>On the screen, the invoice will always have the "Payment Details" and "Other Information" sections at the bottom of the page. For the printed PDF version, this section will just visually appear <strong>after</strong> the table &mdash; not necessarily at the bottom of the page.</p>
  <p>In sjw_print.css I have included CSS for a "fixed footer", which will make these sections appear at the bottom of the printed page. The issue with this is as I am using fixed positioning, there can be potential problems if the invoice table is too long; the table will be hidden underneath. For this reason, it is commented out by default, however if your invoices happen to be just a few lines long then I would suggest uncommenting the following lines, as it is visually more appealing in the printed PDF:</p>
<pre class="code"><code>/* Fixed footer modification */
/* --- delete this line to enable a fixed position footer ---
body { background: #fff; margin: 0 1cm; }
#invoice { border: 0!important; width: 100%!important; padding: 0!important; width: 100%!important; overflow: visible!important; }
#payment-details { position: fixed; padding-right:0!important; margin-left:0!important; bottom:0; left:0; width: 100%; }
--- delete this line to enable a fixed position footer --- */
</code></pre>
-->
  
  <h3>Make it your own</h3>
  <p>Each of the themes is built on top of the base "grey" colour, with the styling applied at the bottom of the CSS file. This makes it easy to customise any of the themes to fit your brand!</p>
  
  <p class="text-center">
    <strong>
      Like what you see? <br /> 
      Buy the pack, or Tweet about it and get a discount!
    </strong> 
  </p>
  <p class="text-center">
    <a href="http://sellfy.com/p/UEsw" id="UEsw" class="sellfy-buy-button sellfy-large">Buy now</a>
    <!--[if gt IE 8]><!-->
    <script type="text/javascript" src="http://sellfy.com/js/api_buttons.js"></script>
    <!--<![endif]-->
  </p>
  
</div>
]]></description>      
            
    </item>
        <item>
      <title>2011&#8211;2012</title>  
      <link>http://steff.me/journal/2011_2012</link>
      <guid>http://steff.me/journal/2011_2012</guid>
      <pubDate>Mon, 19 Mar 2012 00:00:00 +0000</pubDate>
        
                  <description><![CDATA[<div class="six-col prefix-three suffix-three">

  <p>Another year older, and I felt that this time it might be worth the recap on what I've achieved and what's happened for posterity's sake. This post is going to be a little rough, as it's mainly a brain dump of memories. This last year was &mdash; and I use the clich&eacute; purposefully &mdash; a roller-coaster ride of emotions.</p>

  
  <p class="no-margin">In January I attended my first funeral. My grandfather passed away in the December, just before New Years. It was one of the most difficult things I have had to go through, and left me out of touch with reality for a little while.</p>
    <p class="indent">He was my only male influence in life growing up, and as I moved away from home for university and work I had not spent as much time with him as I once had. That regret is still with me now.</p>
    
    <p>In March, my cat &mdash; Felix &mdash; <a href="http://twitter.com/steffanwilliams/status/46420528134750208" title="Remembering my cat...">died</a>. Fifteen years old; one month after his birthday. We still have his mother, but she was noticeably lost and confused for some time after losing him. While being allergic to them, I couldn't imagine being without them.</p>

  <p class="img-wrapper pull-three twelve-col">
    <img src="http://steff.me/site/content/04-journal/07-2011_2012/felix.jpg" alt="Felix the cat" />
  </p>

  <p>To something more positive. That Summer, in June, my girlfriend <a href="http://twitter.com/becca">Becca</a> and I bought our first house!</p>
  
  <p class="img-wrapper pull-three twelve-col">
    <img src="http://steff.me/site/content/04-journal/07-2011_2012/house.jpg" alt="My house!" />
  </p>
  
  <p class="indent">Back home, in South Wales, not too far from our families. Having been away to be closer to work this made for a rather relaxing change. Whether its a Welsh thing or not (as my <a href="http://twitter.com/johnoxton">old boss</a> [we'll get to that] seems to think it is) &mdash; it's nice to be back around my family and old friends.</p>

  <p class="no-margin">After Summer, I attended my second funeral. I was asked by my cousin to be a pallbearer at her mother's funeral. I have always been very close with my family; my cousin &mdash; or Auntie as I have always called her &mdash; used to babysit me, take me to school, and hasn't lived more than half a mile away my entire life. Her mum always had time for me.</p>
    <p class="indent">The funeral was hard. Mainly just the look on peoples faces. The sadness that possessed them as they turned to look at what&hellip; who&hellip; you're carrying.</p>

  <p>Two weeks after that, I attended my third funeral. Much like busses, at this point (if you don't laugh, you'll only cry). Becca's uncle passed away, and while I didn't know him, I went to support. It was held at the same crematorium my grandfather's had been in January &mdash; which brought back a lot of the same emotion and made it so much harder than I thought it would be.</p>
  
  <p class="no-margin">September saw me end a three-year contract with <a href="http://scholastic.co.uk/">Scholastic UK</a>. I worked with a lot of talented people there, and am quite proud of a lot of the work we produced. Getting the chance to build a website for <a href="/work/horrible-histories/">one of my favourite set of books</a> growing up still feels pretty cool.</p>
  
  <p class="indent no-margin">To think it all started with a Tweet to <a href="http://mrandmrsok.com/">one of my idols</a> &mdash; of Rissington Podcast fame &mdash; that I was pushed into sending. 
  The Scholastic web team were a group of highly talented people, and I urge you to check them and their work out:</p>
  
  <p class="indent"><a href="http://www.simonclayson.co.uk/">Simon Clayson</a>, <a href="http://twitter.com/grahambancroft">Graham Bancroft</a>, <a href="http://mrandmrsok.com/">Rachel King</a>, <a href="http://mrandmrsok.com/">John Oxton</a>, <a href="http://omarqureshi.net/">Omar Qureshi</a>, <a href="http://twitter.com/shelleyfish">Shelley Fisher</a> and <a href="http://about.me/pmahnke">Peter Mahnke</a>.</p>
  
  <p class="no-margin">Moving on&hellip; in October I bought Becca a puppy. To get the horrible bit out of the way — due to my allergic reactions to him, he lives with Becca's parents which is literally around the corner and so we still see him every day.</p>
    <p class="indent">His name is Milo. He is a labradoodle, which, as it turns out, isn't hypoallergenic. He's absolutely awesome. Becca and I take him for walks every day, and try I try to get as much time with him as possible before the allergies kick off.</p> 
    
    <p class="img-wrapper pull-three twelve-col">
      <img src="http://steff.me/site/content/04-journal/07-2011_2012/IMG_0343.jpg" alt="Milo, 10 weeks old" />
      <span class="caption">Milo, 10 weeks old</span>
    </p>
    
    <p class="img-wrapper pull-three twelve-col">
      <img src="http://steff.me/site/content/04-journal/07-2011_2012/IMG_0551.jpg" alt="Milo, 7 months old" />
      <span class="caption">Milo, 7 months old</span>
    </p>

    <p>I still haven't quite gotten used to the <em>"eating your own poo"</em> thing, but <a href="http://elliotjaystocks.com/blog/dog-days/">Elliot Jay Stocks' post</a> seems to sum it up perfectly:</p>

  <blockquote>
  <p>if you could make your favourite food come out of your bottom — and hot — wouldn’t you eat it?</p>
  <p><cite>Ozzy's eyes</cite></p>
  </blockquote>

    
  <p>Since leaving Scholastic, I've had the opportunity to work on quite a few awesome projects, such as <a href="/work/sandvox-blueprint/">a feature theme for Karelia's Mac application, Sandvox</a>. While I can't talk about some of the other projects I've been involved with yet, I look forward to sharing them in the future.</p>
  
  <p>Here's to 2012!</p>
  
</div>
]]></description>      
            
    </item>
        <item>
      <title>Archiving Scribble</title>  
      <link>http://steff.me/journal/archiving-scribble</link>
      <guid>http://steff.me/journal/archiving-scribble</guid>
      <pubDate>Mon, 04 Jul 2011 00:00:00 +0000</pubDate>
        
                  <description><![CDATA[<div class="six-col prefix-three suffix-three">
<p>After receiving yet another 'your domain is about to expire!' email from GoDaddy, I decided to let it do just that. I'm finally shutting down Scribble, and archiving it to some dusty corner of my back-up hard-drive. I wouldn't be at all surprised if you're never heard of Scribble, but it was in building the site during my spare time at university that made me want to do what I'm doing today. I won't go into any details on how I built the app (mainly because it was so long ago, and I can't remember everything), but for nostalgia's sake I wanted to give it one final farewell.</p>

<figure>
  <p class="img-wrapper ten-col pull-two">
    <a class="full" href="http://steff.me/site/content/04-journal/06-archiving-scribble/homepage.png"><img src="http://steff.me/site/content/04-journal/06-archiving-scribble/homepage.png" class="full" alt="Scribble Homepage &amp;mdash; Logged out" /></a>
  </p>
  <figcaption>Scribble's Homepage &mdash; Logged out</figcaption>
</figure>

<h2>What is Scribble?</h2>

<div class="pull-three twelve-col">
<blockquote>
  <p>Scribble is a small, light-weight to-do list tool. We like to keep things simple and easy, so that's exactly what Scribble was designed to be.</p>
</blockquote>
</div>

<p>Scribble started out as a simple to-do list application. I created Scribble to solve my own major problem: keeping track of university assignments. I have an absolutely terrible memory, and the idea of a centralised list of things I need to get done that I could open on any computer on campus really appealed to me. I had checked a whole slew of GTD and todo-list apps but none of them seemed to fit with what I wanted.</p>

<figure>
  <p class="img-wrapper ten-col pull-two">
    <a class="full" href="http://steff.me/site/content/04-journal/06-archiving-scribble/logged-in-homepage.png"><img src="http://steff.me/site/content/04-journal/06-archiving-scribble/logged-in-homepage.png" class="full" alt="Scribble Homepage &amp;mdash; Logged in" /></a>
  </p>
  <figcaption>Scribble's Homepage &mdash; Logged in</figcaption>
</figure>

<p>I started with the basics; adding, deleting and editing to-do's (be a bit of a rubbish to-do application otherwise, wouldn't it). As there were multiple university assignments running at the same time, I added the ability to prioritize to-do's over others and sorting so that you could list them by priority or date added. I also added tagging, so I could tag the module each to-do was associated with and sort by that too.</p>

<p>While all well and good, I still had one problem left: I kept losing the files I was working on for each of the assignments. After completing a to-do, I'd email the file to myself so that I could wander up to campus, print it off and hand it in. Well, in the mass amounts of emails, I'd lose track of which version I was meant to be submitting. So, I decided to add file uploads to Scribble. I could assign myself a to-do saying <i>X needs to be done</i>, then when I completed it, mark it as done and upload the corresponding file. I encorporated Scribble into my workflow, which let me upload a file, tag it with the module and version number, delete the previous version and repeat until I was finished with the assignment. I didn't need anything as advanced as a version control system, not for simple documents and essays. Of course, this is before the days of <a href="http://db.tt/8yNNymI">Dropbox</a> &mdash; where the majority of my files now live.</p>

<h2>Getting "social"</h2>

<p>When a university class assigned a group project, it was time to update Scribble to allow users to interact. I created a really basic way of allowing a user to assign another user a to-do, all you had to do is know the other person's username. When the other person logged in, they would be presented with a message saying they've had new tasks assigned to them. Viewing the list of assigned tasks, the assignee could then either choose to accept the tasks, or ignore them; whichever they chose, the assigner would be sent an email with the decision.</p>

<figure>
  <p class="img-wrapper ten-col pull-two">
    <a class="full" href="http://steff.me/site/content/04-journal/06-archiving-scribble/suggestions.png"><img src="http://steff.me/site/content/04-journal/06-archiving-scribble/suggestions.png" class="full" alt="Scribble &amp;mdash; Suggested to-do's" /></a>
  </p>
  <figcaption>Scribble &mdash; Suggested to-do's</figcaption>
</figure>

<p>A friend's list seemed too advanced for Scribble; I had been reading 37signals "<a href="http://gettingreal.37signals.com/">Getting Real</a>". Reading the chapter on <em>Feature Selection</em>, I decided that it was down to the user to track their own friends. If you wanted to manage your friends, just create a to-do, tag it as "friends" and keep updating it with the users. Need to keep people separate, and remember who you are doing that maths class with? Create multiple todos, and tag them as friends and "maths class". It was a simplistic way of doing it, but it worked for me and didn't require me to spend too much time implementing new features.</p>

<h2>Bookmarklets</h2>

<p>The way I was using Scribble started to change from the initial "to-do list app", to remembering articles I wanted to read or videos I wanted to watch with the sound turned up (because that wouldn't be a great idea in the middle of class). So, I built two bookmarklets to help me add new items to Scribble.</p>

<figure>
  <p class="img-wrapper ten-col pull-two">
    <a class="full" href="http://steff.me/site/content/04-journal/06-archiving-scribble/bookmarklets.png"><img src="http://steff.me/site/content/04-journal/06-archiving-scribble/bookmarklets.png" class="full" alt="Scribble &amp;mdash; Bookmarklets installation help" /></a>
  </p>
  <figcaption>Scribble &mdash; Bookmarklets installation help</figcaption>
</figure>

<p>Version one was the 'quick scribble'. Clicking the bookmarklet grabbed the page title along with any text you had selected within the document, and added it as a link to the top of your Scribble list.</p>

<p>Version two was 'scribble this'. This embedded the 'new to-do' form to the top of the page you were on, giving you the ability to write any text you wanted and set a priority on it. This version would also add a default value to the textarea, picking up the title of the page you were on and any text you selected. Both bookmarklets also appended a link back to the original page you were viewing.</p>

<p>Realising that a few of my <em>scribbles</em> were funny videos (of cats), I decided to embed the videos right into Scribble so that I could save myself the click. I implemented embedding for various video sites, including: YouTube, flickr, Vimeo, Metacafe, Viddler, Revision3, Qik, Hulu, Funny or Die and College Humour. I also added image embedding, from flickr and Picasa.</p>

<p>After graduating this is all I used Scribble for &mdash; browsing the web and saving articles to read later.</p>

<h2>Mobile</h2>

<p>When I got my hands on an iPhone, I realised I needed to add a mobile version of Scribble &mdash; it was the future, and I was excited to be able to carry around all my to-do's in my pocket. http://m.scribbleit.net/ wasn't an iPhone specific site exactly, but a stripped down 'mobile' version. No images, no video embedding, just a simple list and a way to add and track your <em>scribbles</em>.</p>
</div>

<ul class="row">
  <li class="four columns">
    <figure>
      <a class="full" href="http://steff.me/mobile-homepage.ong"><img src="http://steff.me/site/content/04-journal/06-archiving-scribble/mobile-homepage.png" class="full" alt="Scribble Mobile Homepage &amp;mdash; Logged out" /></a>
      <figcaption>Scribble's Mobile Homepage &mdash; Logged out</figcaption>
    </figure>
  </li>
  <li class="four columns">
    <figure>
      <a class="full" href="http://steff.me/site/content/04-journal/06-archiving-scribble/mobile-logged-in-homepage.png"><img src="http://steff.me/site/content/04-journal/06-archiving-scribble/mobile-logged-in-homepage.png" class="full" alt="Scribble Mobile Homepage" /></a>
      <figcaption>Scribble's Mobile Homepage &mdash; Logged in</figcaption>
    </figure>
  </li>
  <li class="four columns">
    <figure>
      <a class="full" href="http://steff.me/site/content/04-journal/06-archiving-scribble/mobile-sorting.png"><img src="http://steff.me/site/content/04-journal/06-archiving-scribble/mobile-sorting.png" class="full" alt="Scribble Mobile &amp;mdash; Sorted list" /></a>
      <figcaption>Scribble Mobile &mdash; Sorted list</figcaption>
    </figure>
  </li>
  <li class="four columns first">
    <figure>
      <a class="full" href="http://steff.me/site/content/04-journal/06-archiving-scribble/mobile-complete-todo.png"><img src="http://steff.me/site/content/04-journal/06-archiving-scribble/mobile-complete-todo.png" class="full" alt="Scribble Mobile &amp;mdash; Complete to-do" /></a>
      <figcaption>Scribble Mobile &mdash; Complete to-do</figcaption>
    </figure>
  </li>
  <li class="four columns">
    <figure>
      <a class="full" href="http://steff.me/site/content/04-journal/06-archiving-scribble/mobile-new-todo.png"><img src="http://steff.me/site/content/04-journal/06-archiving-scribble/mobile-new-todo.png" class="full" alt="Scribble Mobile &amp;mdash; New to-do" /></a>
      <figcaption>Scribble Mobile &mdash; New to-do</figcaption>
    </figure>
  </li>
</ul>

<div class="six-col prefix-three suffix-three">
  <p>The mobile version of Scribble offered all of the same features as the main site &mdash; suggestions, sorting, editing etc. &mdash; less the file uploading.</p>
  
  <h2>Extras</h2>
  <p>In the spirit of throwing the kitchen sink into the app, I decided to add a few other features that I didn't really use, but thought were cool. Just to list a few:</p>
  
  <ul class="bullets">
  <li>RSS feed</li>
  <li>RESTful API</li>
  <li>Twitter integration &mdash; DM @scribbleit your to-do, and it would be added to the top of your list (which reminds me, I need to delete that account).</li>
  <li>Email todo@scribbleit.net and the content would be added to the top of your list.</li>
  </ul>
  
  <h2>End of an era</h2>
  <p>So that's Scribble; the to-do list app you never knew and will forget about as soon as you close this page. If you made it this far, I'd like to thank you for allowing me the self-indulgent moment to reflect on why I got into this business to begin with: creating things is fun. The knowledge I gained in building the web app was well worth the time and effort I invested into it. Before starting, I'd never touched PHP or JavaScript, and I was only just getting started playing with HTML and CSS.</p>
  
  <p>If it weren't for Scribble, I would be doing something very different for a living, and I wouldn't have discovered the passion I have for the web.</p>
</div>
]]></description>      
            
    </item>
        <item>
      <title>Fluid Inconsistencies</title>  
      <link>http://steff.me/journal/fluid-inconsistencies</link>
      <guid>http://steff.me/journal/fluid-inconsistencies</guid>
      <pubDate>Wed, 01 Dec 2010 00:00:00 +0000</pubDate>
        
                  <description><![CDATA[<div class="six-col prefix-three suffix-three">
  <p>In developing the next version of <a href="http://gridinator.com/">Gridinator</a>, I wanted to make sure that everything that I was allowing in the pixel and em based layouts were available in the percentage ones too. That meant I needed to write fluid prefixes, suffixes and a few other things that are a little bit more complex in a liquid layout.</p>
  
  <p>So this is where I ran into some major inconsistencies in the way different browsers render percentage values. While I'm well aware that things <a href="http://dowebsitesneedtolookexactlythesameineverybrowser.com/">don't have to look the same in every browser</a>, it just seems to strike me as odd that CSS3 features keep getting touted on the front of browser homepages, and yet something as fundamental as a percentage would be rendered incorrectly (or, rather, not as well as would be expected).</p>
  
  <p class="pull-three twelve-col">
      <a class="full" href="http://steff.me/site/content/04-journal/05-fluid-inconsistencies/gridinator-columns.png"><img src="http://steff.me/site/content/04-journal/05-fluid-inconsistencies/gridinator-columns.png" class="full" alt="A cimparison of Gridinator columns displayed in various browsers" /></a>
  </p>
  
  <p>The image above shows a comparison of a Gridinator generated grid as displayed in Firefox, Safari, Chrome, Opera and IE6 through to IE9. To make it a fair test, the browser window was set to 940px in each case (thus giving IE6 a fighting chance, as it would normally ignore the max-width attribute). Each column is floated left except for the last one in each row, which is floated right.</p>
  
  <p>Anything strike you as odd?</p>
  
  <p>I don't know what I was expecting, but I was hoping for consistency between the <strong>modern</strong> browsers at least. Opera ignores the decimal places, Safari and Chrome seem to round to one decimal place, and who knows what IE8/9 are doing. Interestingly, it seems that Firefox rounds almost perfectly, as do Internet Explorer 6 and 7. This means that Internet Explorer is getting <strong>worse</strong> at rendering percentages in the more standards compliant versions than the ones us webbies have wanted dead for some time.</p>
  
  <p>So, what is the answer? Is the hope of a truly flexible, fluid grid just a dream? Do we have to just settle for using CSS3 media queries and use things like <a href="http://lessframework.com/">Less Framework</a>? Don't get me wrong, I have nothing against the noble pixel, but I really want to push forward and use more <a href="http://www.alistapart.com/articles/responsive-web-design/">responsive designs</a> with true fluidity.</p>
  
  <p><strong>Update:</strong> I've put the <a href="http://steff.me/static/fluid-inconsistencies/">source HTML/CSS online so you can test for yourself</a>.</p>
</div>
]]></description>      
            
    </item>
        <item>
      <title>Static Textpattern Forms and Pages</title>  
      <link>http://steff.me/journal/static-textpattern-forms-and-pages</link>
      <guid>http://steff.me/journal/static-textpattern-forms-and-pages</guid>
      <pubDate>Fri, 22 Oct 2010 00:00:00 +0000</pubDate>
        
                  <description><![CDATA[<div>
  
  <hr />
  <p style="margin-bottom:0;"><strong>Note: This article was originally written for Textpattern version 4.2. The links below are for different versions:</strong></p>
  <ul>
    <li><a href="4_4">View this article for Textpattern 4.4</a></li>
    <li><a href="4_2">View this article for Textpattern 4.2</a></li>
  </ul>
  <hr />
  
  <p>When I started work on redesigning this site, I also made the switch from WordPress to Textpattern. There was one thing that I really started to miss while developing the site &mdash; files for templates. WordPress had made this so easy in its theming system, which uses PHP files, thus allowing the use of an external text editor. Instead, Textpattern forces you to use a textarea in the admin interface, and saves the markup in a database. Since I like to have syntax highlighting and the ability to quickly edit multiple templates at once, I decided to create a little workaround to allow me to use files for both <strong>page and form</strong> templates.</p>

  <h2>Warning &amp; Disclaimer</h2>
  <p>Before I begin, if you are allergic to looking at source code I recommend you look away now. Still here? Then let's begin, and don't say I didn't warn you.</p>
  <p>The modifications made here are to the <strong>Textpattern 4.2.0</strong> core library files, as such any updates to Textpattern will require you to repeat this process. While unlikely (I run this on all my Textpattern installations), I take no responsibility if your install breaks as a result of making these changes. If you would like a quick and easy method of having static page files <strong>only</strong> (ie: not forms), then please read <a href="http://hicksdesign.co.uk/journal/using-files-for-page-templates-in-textpattern">this post by Mr. Hicks</a> which explains how to achieve this with a lot less effort.</p>
  
  <h2>Getting started</h2>
  <p>This guide is based on creating the template folder outside of your textpattern folder at the same level as it. If you would like your templates somewhere else, modify the location in each case below. You will also need to enable "Allow PHP in pages?" in Advanced Preferences of the Admin tab, if you haven't already.</p>
  
  <h2>Pages</h2>
  <p>First, the templates for pages. In the textpattern folder, open the file <code>publish.php</code>. On line 482 is the start of the <code>textpattern()</code> function (do a search for 'function textpattern' in your favourite text editor). We want to edit this function to try and import a file, should it exist, before looking in the databse for the page HTML.</p>
  
  <p>Replace lines 496 to 498 with the code shown in the Gist below &mdash; start copying from <code>$html</code>. The ... indicates that there is more code not shown, and the <code>function textpattern()</code> is to show what function you are editing in the file.</p>
  <p class="no-js-only"><a href="http://gist.github.com/583356">View code on GitHub</a></p>
  <script src="http://gist.github.com/583356.js?file=Static%20pages%20in%20TextPattern%3A%20publish.php"></script>


  <p>Textpattern will now look for page templates in <code>templates/pages/</code> folder. Make sure to set up your sections and corresponding page templates as you want them. Create a new file in the pages folder with the same name as the page template you wish to use: default.php, for example, if you wish to overwrite the default page.</p>
  
  <h2>Forms</h2>
  <p>Following the same process as for pages above, open the file <code>textpattern/lib/txplib_misc.php</code>. On line 1589 you will find <code>function fetch_form($name)</code> (do a search for 'function fetch_form' in your favourite text editor). Replace this function with the one below:
  <p class="no-js-only"><a href="http://gist.github.com/583352">View code on GitHub</a></p>
  <script src="http://gist.github.com/583352.js?file=Static%20forms%20in%20TextPattern%3A%20txplib_misc.php"></script>


  <h2>Error pages</h2>
  <p>Just one more step left, 404/error pages (error_default in a standard Textpattern install). If you'd like a static error page too, there's one more step you need to do.</p>
  
  <p>In the file <code>textpattern/lib/txplib_misc.php</code>, on line 1827, you'll find a function called txp_die (do a search for 'function txp_die' in your favourite text editor). Simply replace the code in that file with the code below.</p>
  <p class="no-js-only"><a href="http://gist.github.com/583310">View code on GitHub</a></p>
  <script src="http://gist.github.com/583310.js"></script>

  <p>And you're done! Congratulations, you now have a Textpattern install that can use template files!</p>
</div>
]]></description>      
            
    </item>
        <item>
      <title>Ignoring iOS &#60; 4 when embedding Typekit</title>  
      <link>http://steff.me/journal/ignoring-ios-4-when-embedding-typekit</link>
      <guid>http://steff.me/journal/ignoring-ios-4-when-embedding-typekit</guid>
      <pubDate>Wed, 20 Oct 2010 00:00:00 +0000</pubDate>
        
                  <description><![CDATA[<div class="six-col prefix-three suffix-three">
  <p>If you are a user of Typekit you might be aware of a <a href="http://blog.typekit.com/2010/06/23/improvements-to-iphone-font-support-in-ios4/">small problem reported on the Typekit blog</a>:</p>
  
  <div class="twelve-col pull-three">
    <blockquote>
      <p>Mobile Safari on iPhone OS 3.1+ will crash when rendering multiple weights and styles of SVG webfonts</p>
    </blockquote>
  </div>
  <p>If you are one of the people who use multiple font weights, I've written a little script to browser-sniff for iOS under version 4 and not include the Typekit embed script.</p>
  
  <p>The first is JavaScript; where you would normally put <code>try{Typekit.load();}catch(e){}</code>, replace it with the first gist.</p>
  <p>The second is a PHP version. It doesn't even embed the Typekit JS source if an iOS &lt; 4 is detected, which saves some bytes &mdash; useful on a mobile browser, especially if it doesn't support the feature anyway.</p>
  <p class="no-js-only"><a href="http://gist.github.com/636181">View code on GitHub</a></p>
</div>

<p><script src="http://gist.github.com/636181.js"></script></p>
]]></description>      
            
    </item>
        <item>
      <title>&#34;CMD+F&#34; for Mobile Safari</title>  
      <link>http://steff.me/journal/cmdf-for-mobile-safari</link>
      <guid>http://steff.me/journal/cmdf-for-mobile-safari</guid>
      <pubDate>Mon, 10 Oct 2011 00:00:00 +0000</pubDate>
        
                  <description><![CDATA[<div>

<p>Find on page (CMD+F on a Mac) was never something I really felt like I <em>needed</em> in Mobile Safari, until I bought an iPad. As the experience is more than the iPhone, it felt like it needed more of the features from a desktop version of the application. In an effort to learn more <em>pure</em> JavaScript I decided to create a bookmarklet to solve the problem. While I'm sure there are others out there, I created this for myself as a way to back away from relying on jQuery and teach myself some raw JS.</p>


<ul class="twelve columns no-bullets">
  <li class="six columns">
    <img src="http://steff.me/site/content/04-journal/02-cmdf-for-mobile-safari/cmd-f-image-1.png" class="full" alt="Find on page bar loaded" />
  </li>
  <li class="six columns">
    <img src="http://steff.me/site/content/04-journal/02-cmdf-for-mobile-safari/cmd-f-image-2.png" class="full" alt="Entering a search term of Steff into find on page" />
  </li>
  <li class="first six columns">
    <img src="http://steff.me/site/content/04-journal/02-cmdf-for-mobile-safari/cmd-f-image-3.png" class="full" alt="Reporting how many results find on page found" />
  </li>
  <li class="six columns">
    <img src="http://steff.me/site/content/04-journal/02-cmdf-for-mobile-safari/cmd-f-image-4.png" class="full" alt="Showing find on page highlighting the keyword Steff in the page" />
  </li>
  <li class="twelve columns">
    <img src="http://steff.me/site/content/04-journal/02-cmdf-for-mobile-safari/cmd-f-image-5.png" class="full" alt="Showing find on page highlighting the keyword Steff in the page on the iPad" />
  </li>
</ul>


<h2>Features</h2>
<ul class="bullets">
  <li>It reports how many results are found for your search keyword, and allows you to easily step through them.</li>
  <li>Text that is contained within a hidden element (display:none or visibility:hidden) are not shown; it highlights only what you're able to see.</li>
  <li>Native<em>-ish</em> look and feel for both the iPad and iPhone.</li>
  <li>It doesn't break the content of the page you search on, so multiple searches can be made without any issue.</li>
</ul>

<h2>Known issues</h2>
<ul class="bullets">
  <li>
    <p>Text within different nodes cannot be highlighted together &mdash; if part of a word is bold, it is considered a different word in terms of the search.</p>
    <p>Example: Java<strong>Scr</strong>ipt</p>
    <p>The word "JavaScript" above is considered three words &mdash; "Java", "Scr" and "ipt", as part of the text is within a &lt;strong&gt; tag. As such, it won't get highlighted in a search for "JavaScript".</p>
  </li>
</ul>

<h2>Download</h2>
<p>CMD+F is free and open source. It is available to <a href="http://steff.me/lab/cmd-f/">install from the installation guide here</a>, and you can <a href="http://github.com/steffanwilliams/cmd-f">view the source and fork it on GitHub</a>.</p>

<p><strong>Update:</strong> Before you complain about the installation process, please <a href="http://www.marco.org/1288715399">read this post</a> by Marco Arment regarding the state of bookmarklets on Mobile Safari.</p>
</div>
]]></description>      
            
    </item>
        <item>
      <title>The Return of Steff dot Me</title>  
      <link>http://steff.me/journal/the-return-of-steff-dot-me</link>
      <guid>http://steff.me/journal/the-return-of-steff-dot-me</guid>
      <pubDate>Tue, 05 Oct 2010 00:00:00 +0000</pubDate>
        
                  <description><![CDATA[<div class="six-col prefix-three suffix-three">
  <p>A while back I intentionally broke the site in order to push me to redesign it and rethink the content I was putting out. Unfortunately, that didn't work and I just ended up with a broken site sitting online for months. So, after a (very) long break, Steff dot Me is once more!</p>
  
  <h2>The details</h2>
  
  <p>I've made the switch away from <a href="http://wordpress.org/">WordPress</a>, and this site is now powered by <a href="http://textpattern.com/">Textpattern</a>. It's taking a bit of getting used to, but ultimately I felt a bit trapped by WordPress and needed a bit more freedom &mdash; less of a blogging engine and more of a content management system.</p>
  
  <p>The layout for this site makes use of a fluid grid generated by <a href="http://gridinator.com/">Gridinator</a> (it actually uses a new version, more on that soon!), combined with @media queries, which has let me jump on the bandwagon of <a href="http://www.alistapart.com/articles/responsive-web-design/">responsive web design</a>.</p>
  
  <p>You can view the grid by pressing G (or two-finger tap on an iOS device &mdash; <strong>warning</strong>: can be slow on long pages, and will lockup Mobile Safari until the grid is shown/hidden) as I'm using <a href="http://hashgrid.com/">#grid</a> from <a href="http://analog.coop/">Analog</a>, which I have modified slightly to make use of the Gridinator class names and thus making it fluid. As part of the responsive design, the leading and vertical rhythm of #grid adapts to the size of the browser.</p>
  
  <p>The type in use is <a href="http://typekit.com/fonts/adelle-web">Adelle</a> for headings and navigation, and <a href="http://typekit.com/fonts/proxima-nova">Proxima Nova</a> for body text. This is being served via the wonderful <a href="http://typekit.com/">Typekit</a>. You can <a href="http://typekit.com/colophons/wue5kco">view more details about the fonts</a> used on this website on Typekit.</p>
  
  <p>This site is marked up with HTML5 (for <a href="http://www.zeldman.com/2010/08/03/html5-fuzzies/">border-radius and text-shadow</a>, obviously), and uses <a href="http://www.modernizr.com/">Modernizr</a> to give IE the kick it needs to use the new elements, while providing feature detection for any snazzy things I want to progressively enhance. That being said, if anything looks a bit broken in any of the non-modern browsers, I don't overly care (sorry, but this is my personal site and it's my choice... just upgrade already).</p>
  
  <figure>
  <p class="img-wrapper twelve-col pull-three"><a href="http://www.flickr.com/photos/steffanwilliams/5054404323/" title="Steff dot Me &mdash; small by Steffan Williams, on Flickr"><img src="http://farm5.static.flickr.com/4126/5054404323_c40a456afa_b.jpg" alt="Steff dot Me &mdash; small" class="full" /></a></p>
  
  <p class="img-wrapper twelve-col pull-three"><a href="http://www.flickr.com/photos/steffanwilliams/5054404643/" title="Steff dot Me &mdash; medium by Steffan Williams, on Flickr"><img src="http://farm5.static.flickr.com/4128/5054404643_47614a8964_b.jpg" alt="Steff dot Me &mdash; medium" class="full" /></a></p>
  
  <p class="img-wrapper twelve-col pull-three"><a href="http://www.flickr.com/photos/steffanwilliams/5054404961/" title="Steff dot Me &mdash; large by Steffan Williams, on Flickr"><img src="http://farm5.static.flickr.com/4087/5054404961_7ee6c7542a_b.jpg" alt="Steff dot Me &mdash; large" class="full" /></a></p>
  
  <p class="img-wrapper twelve-col pull-three"><a href="http://www.flickr.com/photos/steffanwilliams/5055023908/" title="Steff dot Me &mdash; extra large by Steffan Williams, on Flickr"><img src="http://farm5.static.flickr.com/4126/5055023908_d8969e2a7a_b.jpg" alt="Steff dot Me &mdash; extra large" class="full" /></a></p>
  
  <figcaption>
  <p>Steff dot Me in its various incarnations of responsiveness with @media queries and a fluid layout. How meta is it to see a screenshot of the article you're reading in the article?</p>
  </figcaption>
  </figure>
  
  <h2>Going forward</h2>
  
  <p>The goal of this new site &mdash; more than anything &mdash; is to give me the freedom to create. Whether it be in the form of writing in the journal section or experimenting in the lab; the aim is to just keep playing with and learning the new web technologies as they develop. It's certainly an exciting time for the web, and I'm happy once again to have a part of it where I can express myself.</p>
</div>
]]></description>      
            
    </item>
            
  </channel>
</rss>