<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Outside The Page]]></title><description><![CDATA[Various musings, rants and maybe even code, from the perspective of a frontend dev ]]></description><link>https://outsidethepage.co.uk/</link><image><url>https://outsidethepage.co.uk/favicon.png</url><title>Outside The Page</title><link>https://outsidethepage.co.uk/</link></image><generator>Ghost 1.23</generator><lastBuildDate>Tue, 24 Mar 2026 05:43:02 GMT</lastBuildDate><atom:link href="https://outsidethepage.co.uk/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Time to stop Microsoft Bashing]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Microsoft. The company everyone loves to hate. Especially devs. It's a common theme in any dev circles, and has been for quite some time. People look over snootily at the 'poor, misinformed Windows' user, as if they can't be taken seriously as a dev. I know, I've been guilty of</p></div>]]></description><link>https://outsidethepage.co.uk/time-to-stop-microsoft-bashing/</link><guid isPermaLink="false">5b1553d31475863e9bf19882</guid><dc:creator><![CDATA[Paul Sebborn]]></dc:creator><pubDate>Sun, 06 Dec 2015 14:39:58 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>Microsoft. The company everyone loves to hate. Especially devs. It's a common theme in any dev circles, and has been for quite some time. People look over snootily at the 'poor, misinformed Windows' user, as if they can't be taken seriously as a dev. I know, I've been guilty of this in the past. But it's time we, as a dev community, stopped this bigotry.</p>
<p>It's bad enough dealing with fanboi-ism from Mac users (disclosure: I'm a Mac user at home, but at work I use Ubuntu), but are we that bitchy that we have to mock people's work based on the OPERATING SYSTEM they built it on? After all, we're all building for the World Wide Web, right? The whole point of the Internet is that it's platform agnostic, and thankfully you can write HTML on <em>any</em> text editor.</p>
<p>Yes, Microsoft have a patchy history. IE6 got a bad rep, but actually when it was released it was a good browser. They just didn't update it for years.. Try comparing it to Mozilla (it wasn't even called Firefox back then!)</p>
<p>In the past, it's arguably right they've had a bad name. The problem is as devs a lot of our attitudes don't seem to have changed. Maybe it's just like The Offspring said - <a href="https://www.youtube.com/watch?v=PkRJzErnRmY">&quot;It's cool to hate&quot;</a> The thing is though, Microsoft's trying, and they've come a long way. They've got great people on their team now, people like <a href="https://twitter.com/reybango">Rey Bango</a>, <a href="https://twitter.com/thebeebs">Martin Beeby</a> and <a href="https://twitter.com/codepo8">Christian Heilman</a>. Also IE11 isn't bad at all!<br>
I've not used Windows 10, but that looks pretty nice too, and I hear good things about Edge. Yes, the Windows Phone might not be as popular or ubiquitous as Android and iOS but that doesn't make it crap.</p>
<p>As for judging people for what platform they choose to write their code, that's just stupid. It's like saying people who have blinds instead of curtains in their house are idiots. Get over yourself and realise that as long as you are creating stuff on the web and having fun - who cares?!</p>
</div>]]></content:encoded></item><item><title><![CDATA[CSS nth-child goodness]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Whilst working on a client site at work recently I came across an interesting design / CSS challenge.</p>
<p>Basically, the information on the page is represented by a series of boxes, let's imagine they're numbered 1 to 16. Every other row, the flow will be right-to-left, creating a sort of 'reverse</p></div>]]></description><link>https://outsidethepage.co.uk/css-nth-child-goodness/</link><guid isPermaLink="false">5b1553d31475863e9bf19883</guid><category><![CDATA[development]]></category><category><![CDATA[css]]></category><dc:creator><![CDATA[Paul Sebborn]]></dc:creator><pubDate>Mon, 21 Sep 2015 11:03:50 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>Whilst working on a client site at work recently I came across an interesting design / CSS challenge.</p>
<p>Basically, the information on the page is represented by a series of boxes, let's imagine they're numbered 1 to 16. Every other row, the flow will be right-to-left, creating a sort of 'reverse S' layout (see the diagram below, and sorry for the terrible design skills!<br>
<img src="https://outsidethepage.co.uk/content/images/2015/09/grid-flow.png" alt="Visual respresentation of reverse 's' layout"></p>
<p>If this was a fixed number of items, or even a fixed number of columns, this wouldn't be so difficult. Of course, we live in the modern world, the <em>future web</em> world, so has got to be scalable and responsive (mobile-first, naturally). Oh, and I know &quot;just use jQuery and add a class&quot; is an option, but not for me as I knew it should be possible in CSS.</p>
<p>Knowing that <code>nth-child</code> was a starting point (and knowing all the browsers we needed to support also supported that!) I started off by looking at the awesome article that <a href="http://twitter.com/heydonworks">Heydon Pickering</a> wrote a few months back: <a href="http://alistapart.com/article/quantity-queries-for-css">Quantity Queries for CSS</a>. This got me halfway there, and although slightly off-track I'd read it if you haven't already as it's brilliant.</p>
<p>Using <code>nth-child(4n+1)</code> would get me the 5th, 9th, 12th, etc elements which was not quite there. By using <code>nth-child(8n+1)</code> gets closer, but also matched the first element in the row. Settling on <code>nth-child(8n+5)</code> gave me what I wanted - the 5th, and 12th items. (An aside: <a href="https://css-tricks.com/examples/nth-child-tester/">this tool by Chris Coyier</a> is very useful for testing nth-child patterns).</p>
<p>From there it's just a case of adding one for each element after that you want to me. For brevity I just added one layout, but the principle would apply e.g. for 3-columns. I ended up with this:</p>
<pre><code>.item:nth-child(8n+5),
.item:nth-child(8n+6),
.item:nth-child(8n+7),
.item:nth-child(8n+8) {
    float: right;
    // Other fancy styling
}
</code></pre>
<p>For a different number of columns, you can work it out like this:</p>
<p><code>:nth-child(Xn+y)</code></p>
<p>Where X is the <code>number of columns * 2</code> (for 3 cols, this would be <strong>6</strong>), and Y is <code>number of columns + 1</code> (so for 3 cols it's <strong>5</strong>)</p>
<p>And there you have it! I created a little <a href="http://codepen.io/anon/pen/xwGWpM">CodePen</a> for the finished solution; it's a bit messy but you should hopefully get the idea..</p>
<p>DISCLOSURE: I work for <a href="http://zoocha.com">Zoocha</a>, so credit where credit's due as this was done on their time  :)</p>
</div>]]></content:encoded></item><item><title><![CDATA[Google Chrome and REM units - a little quirk]]></title><description><![CDATA[<div class="kg-card-markdown"><p>I noticed something today whilst working on a new client project, that seems to be a bug in the way Chrome calculates <code>rem</code> units.<br>
By default, I tend to set the body font size to 62.5% which works out to be 10px, then it makes the maths for font</p></div>]]></description><link>https://outsidethepage.co.uk/google-chrome-and-rem-units-a-little-quirk/</link><guid isPermaLink="false">5b1553d31475863e9bf19881</guid><category><![CDATA[development]]></category><category><![CDATA[chrome]]></category><category><![CDATA[css]]></category><dc:creator><![CDATA[Paul Sebborn]]></dc:creator><pubDate>Tue, 18 Aug 2015 10:48:09 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>I noticed something today whilst working on a new client project, that seems to be a bug in the way Chrome calculates <code>rem</code> units.<br>
By default, I tend to set the body font size to 62.5% which works out to be 10px, then it makes the maths for font sizing easier. Today however I noticed that doing this:</p>
<pre><code class="language-css">html {
  font-size: 62.5%;
}

body {
  font-size: 1.4rem; /* should compute to 14px */
}
</code></pre>
<p>…in Chrome, the body text wasn't 14px but in fact 20px. It was ignoring the 62.5% declaration, but only for the body calculation.</p>
<p>Changing this use <code>em</code> instead of <code>rem</code> seems to fix the problem:</p>
<pre><code class="language-css">body {
  font-size: 1.4em; 
}
</code></pre>
<p>As the rest of the site uses <code>rem</code> nothing else is affected.</p>
<p><strong>P.S</strong> I did find a bug that seems to suggest this is fixed: <a href="https://code.google.com/p/chromium/issues/detail?id=319623">https://code.google.com/p/chromium/issues/detail?id=319623</a> however for me it's still a problem. The above fix worked well for me though :)</p>
</div>]]></content:encoded></item><item><title><![CDATA[Graphical Git Tools]]></title><description><![CDATA[<div class="kg-card-markdown"><p>If, like me, you're a dev and you work in a team of more than one (or in fact you work on <em>any</em> project, you probably use Git to track your changes. I personally prefer the command line for committing, pulling, pushing and all things Git-related. One thing I always</p></div>]]></description><link>https://outsidethepage.co.uk/graphical-git-tools/</link><guid isPermaLink="false">5b1553d31475863e9bf19880</guid><category><![CDATA[development]]></category><dc:creator><![CDATA[Paul Sebborn]]></dc:creator><pubDate>Tue, 21 Jul 2015 11:34:37 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>If, like me, you're a dev and you work in a team of more than one (or in fact you work on <em>any</em> project, you probably use Git to track your changes. I personally prefer the command line for committing, pulling, pushing and all things Git-related. One thing I always do when I'm about to commit something (and it should really be a no-brainer) is to review what's changed. No matter how small, it serves as a mini code review and lets me sanity check what I'm about to commit.</p>
<p>The problem is, when you run <code>git diff</code> in Terminal it's a pretty ugly sight, and often baffling if you've changed more than two lines. See exhibit A:</p>
<p><img src="https://outsidethepage.co.uk/content/images/2015/07/exhibit-a.png" alt="Even with a small change this isn't that easy to read"></p>
<p>Thankfully however, there are plenty of GUI tools to help out. If you've ever used an IDE with Git integration (such as <a href="http://jetbrains.com/webstorm">WebStorm</a> or <a href="http://eclipse.org">Eclipse</a>) then you may have seen a nice side-by-side comparison with your changes. Github does it too, and the desktop app also shows your changes nicely. If you're a Sublime Text or Vim (or anything else) user, you can configure Git to use an external diff program.</p>
<p>Try running <code>git difftool</code> in your terminal window. On OSX <code>filemerge</code> will normally be launched by default (in my experience), or <code>meld</code> if you're on Ubuntu. You now get a prettier view (OK, it's Linux so pretty is a relative term):</p>
<p><img src="https://outsidethepage.co.uk/content/images/2015/07/meld.png" alt="Screenshot of meld"></p>
<p>There are tons of diff tools out on the web, so you're not limited to what's installed by default. A couple of good tools I've stumbled on are:</p>
<ul>
<li>
<p><a href="http://kdiff3.sourceforge.net/">Kdiff3</a> is an open source, thus free, tool. It's not the prettiest but it does work fairly well</p>
</li>
<li>
<p><a href="https://sourcegear.com/diffmerge">Diffmerge</a> - I prefer this as it's a bit nicer to reader, but of course it's not free. Probably explains why it's nicer :)</p>
</li>
</ul>
<p>One last thing - where graphical git tools come into their own is with merge conflicts. They will show a 3-way merge between your original and incoming versions, with the merged result in the middle. Much better than spending hours tracking down the <code>======</code> and <code>&lt;&lt;&lt;&lt;&lt;</code> combinations that appear in the file normally!<br>
An example of this is here:<br>
<img src="https://outsidethepage.co.uk/content/images/2015/07/diffmerge.png" alt="Example of a 3-way merge"></p>
<p>It's so much easier to see at a glance what's been changed so you can figure out which version to keep!</p>
<p>Finally - there's some config that needs to be done to tell Git what to do with your new mergetool (if you're using Diffmerge). <a href="https://gist.github.com/psebborn/d08faa0fe4c016a41a31">This gist</a> describes what you need to do (and actually probably summarises this post better!)</p>
<p>Enjoy :)</p>
</div>]]></content:encoded></item><item><title><![CDATA[Handling Office Music Politics]]></title><description><![CDATA[<div class="kg-card-markdown"><h2 id="withasonosnodejsvetobutton">…with a Sonos / NodeJS Veto button!</h2>
<p><img src="https://outsidethepage.co.uk/content/images/2015/03/veto.jpg" alt=""></p>
<p>We recently upgraded our sound system in the office, with a lovely shiny Sonos system. With our ever-increasing staff numbers we soon discovered that our music taste was broadening too! Our previous music choice was more of a dictatorship than a representation of the</p></div>]]></description><link>https://outsidethepage.co.uk/handling-office-music-politics-with-sonos-veto-node/</link><guid isPermaLink="false">5b1553d31475863e9bf1987f</guid><dc:creator><![CDATA[Paul Sebborn]]></dc:creator><pubDate>Sat, 07 Mar 2015 13:09:02 GMT</pubDate><media:content url="https://outsidethepage.co.uk/content/images/2015/03/pisonos.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="withasonosnodejsvetobutton">…with a Sonos / NodeJS Veto button!</h2>
<img src="https://outsidethepage.co.uk/content/images/2015/03/pisonos.jpg" alt="Handling Office Music Politics"><p><img src="https://outsidethepage.co.uk/content/images/2015/03/veto.jpg" alt="Handling Office Music Politics"></p>
<p>We recently upgraded our sound system in the office, with a lovely shiny Sonos system. With our ever-increasing staff numbers we soon discovered that our music taste was broadening too! Our previous music choice was more of a dictatorship than a representation of the whole office's music tastes. We did have a shared Spotify playlist that people could add to, but as it was played from one person's computer it would invariably be monitored and offending songs removed. It became apparent this wouldn't really work</p>
<p>With Sonos everyone can install the Sonos app, and add their own choice of tunes to the playlist. A perfect balance: everyone adds music without the threat of filtration. Well, most of them - a good chunk of our devs run Linux and there's no Linux Sonos client. Then again everyone has a smartphone and there's an app for them, so problem solved, right?</p>
<p>Well, not quite. The Sonos app isn't the nicest in the world, plus having to get your phone out and load the app just to change a track seemed to be a pain. I started looking around to see if anyone had written a webclient that we could all access, and found two options:</p>
<ol>
<li>a Perl-based controller called <a href="http://www.purple.org/sonos/">Purple</a>. I'm irrationaly scared of Perl so I kept looking…</li>
<li>A NodeJS Web controller (<a href="https://github.com/jishi/node-sonos-web-controller">Github link</a>. This is more up my street, being a frontend dev!</li>
</ol>
<p>The original thought was just to have the web player up and running, but then I did some digging and noticed that it's built on top of an API too. (see <a href="https://github.com/jishi/node-sonos-discovery">https://github.com/jishi/node-sonos-discovery</a>)</p>
<p>Inspired by the <a href="https://www.youtube.com/watch?v=fJmrWN_kCqs">store opening scene from Empire Records</a> along with a desire to do something tactile and use some of the dev boards I have lying around, I decided to make the office a Veto Button.</p>
<p>The basic idea is simple: a big red button that you wallop if you don't like the song, and it'll skip to the next track.</p>
<h3 id="technology">Technology</h3>
<p>I've already mentioned about the Sonos API. It looked like a nice, straightforward answer to my problems. I could write everything in Node for extra hipster points and it'd all be straightforward (I won't have get dirty and write Perl).</p>
<p>To hit Hipster Level: Ninja, I decided to use a <a href="http://tessel.io/">Tessel</a>. For those that don't know, Tessel is a microntroller board that runs Javascript. It also has built-in wifi. Perfect for this application: simply connect up a button and <code>tessel push</code> the code up.</p>
<p>The next go-to board was the Raspberry Pi. Being a fully fledged Linux machine this had no problems. It supports Node and has built in networking so it was all plain sailing. Also the GPIO pins provide a nice easy way of adding a physical buttong. I tested this circuit with a little breadboard push button but I've order a big ass red button which will become the final button</p>
<h3 id="thecode">The Code</h3>
<p>As I've mentioned above, the project is built on top of Node. I included a couple of packages to help:</p>
<ul>
<li>
<p>&quot;sonos-discovery&quot;: <a href="http://github.com/jishi/node-sonos-discovery">http://github.com/jishi/node-sonos-discovery</a><br>
This is a nice package that allows us to find, and talk to, the Sonos system. There are lots of features such as set / get volume, group, etc but for this project I'm just using the discovery and nextTrack method</p>
</li>
<li>
<p>&quot;onoff&quot;: &quot;~0.3.2&quot;<br>
A little helper utility that makes talking to the GPIO pins on the RaspberryPi (including debouncing for example)</p>
</li>
</ul>
<h4 id="connectingtosonos">Connecting to Sonos</h4>
<p>The code for this is pretty straightforward. Once you've <code>reuquire</code>d the modules you're dependant on (in my case <code>sonos-discovery</code>, <code>onoff</code> and my <code>Veto</code> library, you can create a new instance with a nice oneliner:</p>
<pre><code>var discovery = new SonosDiscovery();
</code></pre>
<p>There are a bunch of mehtods that you can now use to get at your Sonos. For example:</p>
<pre><code>this.discovery.getZones()
this.discovery.getPlayer(playerName)
</code></pre>
<p>These should all be self-explanatory so I won't go into it here. There's also some documentation on the Github repo.</p>
<h4 id="settingupthegpio">Setting up the GPIO</h4>
<p>Using the <code>onoff</code> library you can quickly create a link to one of the Pi's GPIO pins, like this:</p>
<pre><code>var button = new gpio(18, 'input', 'both', {
    debounceTimeout: 50
});
</code></pre>
<p>Once this is set up you can the <code>watch</code> method to – yep you guessed it – watch for change in value:</p>
<pre><code>vetoButton.watch(function(err, value) {
    if(value == 1) {
      vetoSong();
    }
});
</code></pre>
<p>Here we're simply checking if the value is 1, i.e. the button is pressed, and then calling the <code>vetoSong</code> method.</p>
<h4 id="changingtracks">Changing tracks</h4>
<p>To change the track, we first need to get the player. As the office only has the one group we've hardcoded a player name (&quot;Reception&quot; in our case) and pass that to <code>getPlayer</code>.<br>
Next, it's a simple case of calling the <code>nextTrack()</code> and BOOM. Track vetoed.</p>
<h4 id="otherbits">Other bits</h4>
<p>We've written a couple of method, <code>pauseAll</code> and <code>playAll</code>, that do what they say. They're not used for anything yet but could be used further down the line (see below for the 'roadmap')</p>
<h3 id="thebutton">The Button</h3>
<p>It's just a straightforward button. For testing I used a little breadboard mounted click switch, but I've ordered a big ass red button that we'll mount properly in the office when it turns up</p>
<h3 id="futureimprovements">Future improvements</h3>
<p>There's a long list of features that I either want to add or have been suggested to me. A few that we'll add:</p>
<ul>
<li>Cross-posting to slack</li>
<li>Record all vetoed songs and display on a webpage
<ul>
<li>If a song has been vetoed more than three times in a week, automatically remove it from the playlist</li>
</ul>
</li>
<li>Add a big flashing light and play a siren noise when the song's vetoed</li>
<li>Port over to Tessel (might be possible with Tessel 2 )</li>
<li>Hook in with our VOIP system to pause on ring / resume on call end</li>
</ul>
<h3 id="fullcode">Full Code</h3>
<p>All the code is available on Github, at <a href="https://github.com/psebborn/sonos-veto-controller:">https://github.com/psebborn/sonos-veto-controller:</a><br>
Feel free to have a look and if you want to leave any comments, go for it!</p>
</div>]]></content:encoded></item><item><title><![CDATA[Full Frontal 2014]]></title><description><![CDATA[<div class="kg-card-markdown"><h2 id="ascatterbrainedroundupoftheday">A scatter-brained round up of the day</h2>
<p>Last Friday (7th November) was <a href="http://ffconf.org">Full Frontal</a>. It's the 3rd (I think) time I've been although I've missed the last couple of years, so I knew what to expect. As usual, my expectations were exceeded and I came away at the end both</p></div>]]></description><link>https://outsidethepage.co.uk/full-frontal-2014/</link><guid isPermaLink="false">5b1553d31475863e9bf1987e</guid><dc:creator><![CDATA[Paul Sebborn]]></dc:creator><pubDate>Mon, 10 Nov 2014 17:28:42 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><h2 id="ascatterbrainedroundupoftheday">A scatter-brained round up of the day</h2>
<p>Last Friday (7th November) was <a href="http://ffconf.org">Full Frontal</a>. It's the 3rd (I think) time I've been although I've missed the last couple of years, so I knew what to expect. As usual, my expectations were exceeded and I came away at the end both excited and dazed at the ridiculously good talks. What was nice this year was that while the topics were announced in advance, it wasn't 'til the day that we saw <em>who</em> was talking.</p>
<p><em>A quick side note:</em> This might be a bit messy and incoherent, but it's content. I've been meaning to have a 'web presence' for a long time now. I've been working on the web for nearly 10 years so it's a bit odd not to have a site! Jeremy Keith said something which struck a chord with me at <a href="http://responsiveconf.com/">Responsive Day Out</a> about content being king on the web. Just write something, anything, get it up and out on the web; that was his motto. So that's what this is. Hopefully it'll spur me on to have a 'proper' website but for the time being it's here anyway.</p>
<h3 id="buildingthephysicalwebtogether">Building the Physical Web together</h3>
<p><strong>Scott Jenson</strong></p>
<p>Scott opened the talks for the day, with a talk on The Physical Web project. It's a proof-of-concept type project from Google, about trying to find a better way of interacting with the web. &quot;URLs are 70s s**t&quot;. His point was that we improved everything the browser displays, but we're stuck in the dark ages of manually typing in a web address each time.</p>
<p><strong>Update</strong>: To clarify, Scott wasn't saying he was anti-URL entirely - just that typing them in isn't exactly user friendly. Technology has advanced in every other aspect of the browser, maybe it's time to update URL input?</p>
<p>QR codes went a way to solving that but they're pretty awful. iBeacon is a clever way but it's sandboxed to an app. 15 iBeacons from 15 stores = 15 different apps.<br>
The Physical Web is an attempt to create a new standard for broadcast URLs over BLE (but <strong>not</strong> push; only when you <strong>request</strong> to find beacons - an important distinction)</p>
<p>Also, we all got a BLE beacon to play with, which is rather awesome!</p>
<h3 id="movingseamlesslythroughofflineandonline">Moving seamlessly through offline and online</h3>
<p><strong>Caolan McMahon</strong></p>
<p>Picking up on the Offline First ideology of Hood.ie, Caolan's talk showed us a simple way of implementing an app offline, and then syncing it up with a CouchDB instance. A really slick presentation, he live coded the whole thing - LOLBin, an offline first joke database (poking fun at Remy's JSBin).</p>
<p>There were some nice concepts there including distinguishing between edited, saved and synced items to help the user know what's where. It's certainly given me inspiration for a project I've been meaning to do for ages, so fingers crossed I get round to it now!</p>
<h3 id="navigatingopensource">Navigating Open Source</h3>
<p><strong>Hannah Wolfe</strong></p>
<p>Hannah Wolfe gave a brilliant talk about Ghost, the open source blogging platform (in fact, this post is running off Ghost at the time of writing!). They always wanted to be an open source project, and she talks about the process they went through.</p>
<p>To start with Ghost was crowdfunded on Kickstarter, and developed as closed source. This was just to get the project up and running Hannah explained, and quickly they opened up to a few contributors as an invite-only model, to help flesh out the project. This meant that when they launched, and opened the source to everyone, they already had a history of open source - with commits, issues, etc that meant people could already get stuck into contributing.</p>
<p>Some interesting lessons learnt along the way, it's all about trust. Letting go and allowing certain trusted contributors commit rights was a tough decision but ultimately improved the end project. The key take-away was just three words: &quot;Hi&quot;, &quot;Welcome&quot; and &quot;Thank you&quot; – words that are often forgotten in OpenSourceLand.</p>
<h3 id="selfhostedjs">Self-hosted JS</h3>
<p><strong>Andy Wingo</strong></p>
<p>Andy Wingo took the live coding to a different level. He is a contributor to V8 and other JS engines, and went through the process of adding to the JS core. Quite a bit of the JS engine is written using Javascript. I know. Weird. And Weird Javascript it is: for example you don't get real error handling because at the time of running your code, the error handling code isn't there yet!</p>
<p>I confess that most of this went over my head but it was fascinating to watch, and a really entertaining talk to sit through. It did make for an eye-opening session and left me thinking how little I know about the inner workings of JS engines.</p>
<h3 id="leanmeancssmachine">Lean Mean CSS Machine</h3>
<p><strong>Tobias Ahlin</strong></p>
<p>Tobias had the un-enviable position of post-lunch talk. Luckily for him he's a really engaging speaker, and kept everyone's attention talking about good quality CSS. This covered two parts: one part guidelines, and the other refactoring CSS.</p>
<p>The guidelines part was really intersting as I'm currently going through this process at Zoocha. It was nice to see that we both have similar ways of thinking (which I'm taking to mean I'm on the right track!)</p>
<p>The refactoring CSS demo was really interesting, and although it was a little drastic (binning some UI elements as unnecessary bloat), it showed a really simple, workable approach to cutting back on CSS cruft. This'll be handy in the future, definitely.</p>
<h3 id="asinglepagestory">A Single Page Story</h3>
<p><strong>Henrik Joreteg</strong></p>
<p>Henrik attacked the sensitive subject of single page apps, or web apps, or whatever you choose to call them. The challenge - &quot;Is it OK to write web(app|sites) that <em><strong>rely</strong></em> on Javascript?&quot;. His take on it is yes, in certain cases.</p>
<p>He coined the name of <strong>Native Web Apps</strong>. I think this sums it up. There are some instances where latest technology e.g getUserMedia <em>can't</em> be progressive enhancement (there's no fallback currently). Serving JS-only sites is in his opinion OK. I'm not sure I agree with it, but I see where he's coming from.</p>
<p>There was a question raised about &quot;server-side initial render&quot; (where the HTML is first rendered on the server, then the JS takes over from there). AirBNB did this approach with their tool, Rendr, but Henrik's argument is that currently we don't have the tooling to make this feasible.</p>
<p>Jury's out, but a good talk nonetheless</p>
<h3 id="toolsforthe21stcenturymusician">Tools for the 21st century musician</h3>
<p><strong>Soledad Penadés</strong></p>
<p>Soledad turned up the fun factor a bit in the afternoon, showing us all about the Web Audio API and what you can do with it. Synths, loops, crazy noises. It was all in there.</p>
<p>It also served as a springboard to talk about her new project, Open Music, which is well worth a look</p>
<h3 id="gettingclosewiththeweb">Getting Close with the Web</h3>
<p><strong>Ben Foxall</strong></p>
<p>In the Full Frontal's I've been to in the past, the last talk of the day is usually a showstopper (the first one had Seb Lee-Delisle live-coding a 3D Unity world!), and this one did not disappoint.<br>
Ben used the crowd's mobile devices, to create an audience Jumbotron. Building on Seb Lee-Delisle's Pixelphones project, he used a simple three button (left, right, down) scan line approach to plot the locations. Then, each phone became a 'pixel' (and speaker), and was synced to show a rainbow effect, that moved around the room. Oh, and the sound moved round with it too.</p>
<p>All done with frontend technology, and according to this tweet, all done offline too!</p>
<h3 id="summingup">Summing up</h3>
<p>There's a reason Full Frontal sold out in 9 minutes this year: it's awesome! I did feel a similar anxiety when trying to get a ticket, that I feel when trying to get Glastonbury tickets. It's totally worth it though. I like how Remy hasn't bowed to pressure and put it in a bigger venue as I don't think it would work. Its intimacy is one of the things that sets it apart from the megabuck conferences like FOWA.</p>
<p>I want to recommend you go next year, but then there's more competition for my ticket, so how about you stay away?!</p>
</div>]]></content:encoded></item></channel></rss>