<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Digi, Aye?</title>
  <subtitle>A look at design through the lens of code, kindness and confusion</subtitle>
  <id>http://struanfraser.co.uk/blog</id>
  <link href="http://struanfraser.co.uk/blog"/>
  <link href="http://struanfraser.co.uk/feed.xml" rel="self"/>
  <updated>2023-12-23T20:56:00+00:00</updated>
  <author>
    <name>Struan Fraser</name>
  </author>
  <entry>
    <title>A Little Bit of Christmas Code</title>
    <link rel="alternate" href="http://struanfraser.co.uk/blog/a-little-christmas"/>
    <id>http://struanfraser.co.uk/blog/a-little-christmas</id>
    <published>2023-12-23T20:56:00+00:00</published>
    <updated>2025-02-16T23:37:52+00:00</updated>
    <author>
      <name>Struan Fraser</name>
    </author>
    <content type="html">&lt;p&gt;&lt;img src="https://www.struanfraser.co.uk/images/2023/santr.jpeg" alt="A p5js sketch showing a daft wee set of choices for Santa to make from the head elf" class="full-width"&gt;&lt;/img&gt;&lt;/p&gt;

&lt;h3&gt;Hello again test test, is anyone there&lt;/h3&gt;

&lt;p&gt;It&amp;rsquo;s been a long time since I&amp;rsquo;ve posted anything here and like everyone, life&amp;rsquo;s very different to what it was in 2019. I&amp;rsquo;ve finished a bout of studying citizenship and design, I&amp;rsquo;ve worked with a group of friends to make some fun wee games and I&amp;rsquo;ve started a new job in a new city.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;ve just uploaded a little Christmas sketch as invited to by the ever kind and creative &lt;a href="https://twitter.com/vividfax"&gt;Rianna&lt;/a&gt; and &lt;a href="https://twitter.com/mtrc"&gt;Mike&lt;/a&gt;. It&amp;rsquo;s now available on day 20 of the Generative Advent Calendar. You&amp;rsquo;ll have to forgive the way it looks, it&amp;rsquo;s been a very busy Christmas and I haven&amp;rsquo;t written code properly for some time. That being said though, I&amp;rsquo;m pleased with what it turned into in it&amp;rsquo;s &amp;ldquo;My first HTML project&amp;rdquo; style. I strongly recommend you have a look at the other contributors though, they&amp;rsquo;re much better!&lt;/p&gt;

&lt;figure&gt;
&lt;a href="https://generativeadvent.itch.io/generative-advent-2023"&gt;&lt;img src="https://www.struanfraser.co.uk/images/2023/advent.jpg" alt="A p5js sketch illustrating a house with 25 windows at Christmas time" class="full-width"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;figcaption&gt;Generative Advent 2023&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;In the depths of the pandemic, Rianna and I co-worked on a bunch of little creative sketches which turned into Games for Crows. I spent a good bit more time thinking about game design than I ever had previously and we carved out a small niche in Games for Crows. We wanted to make things that were reflective and relaxing, it seemed appropriate in the midst of a pandemic. Rianna then became extremely prolific and produced a whole multitude of games tools and fidget toys.&lt;/p&gt;

&lt;p&gt;Later we invited Ryan and Matt to both write and produce illustrations for a game that plays with different ideas of who we are and how we participate in our community and wider society. Those games are still in a cupboard that has been firmly shut since the pandemic but I will get round to releasing at least one of them this year.&lt;/p&gt;

&lt;figure&gt;
&lt;img src="https://www.struanfraser.co.uk/images/2023/project-arc.png" alt="A browser window showing an abstract 3d visualisation of an alien planet" class="full-width"&gt;&lt;/img&gt;
&lt;figcaption&gt;Project Arc&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;And back to the Christmas sketch. This was a very small contribution to imagining things differently. Years ago, I heard an expert describe how authors spend chapters and chapters trying to get the reader to project themself onto the protagonist in a book. In a game, you need only pick up the controller and push forward, and magically the projection has already happened. You&amp;rsquo;re movement and the character&amp;rsquo;s is one. It&amp;rsquo;s so much easier to reveal new possibilities and ideas of what&amp;rsquo;s possible through characters in computer games because projection and the associated empathy is much smoother. Anyway, I hope you all have some proper restful holidays, I&amp;rsquo;m off to drink a few pints of gravy!&lt;/p&gt;

&lt;figure&gt;
&lt;a href="https://gamesforcrows.itch.io/"&gt;
&lt;img src="https://www.struanfraser.co.uk/images/2023/gfc.png" alt="A screenshot of the Games for Crows itch page" class="full-width"&gt;&lt;/img&gt;
&lt;/a&gt;
&lt;figcaption&gt;Games for Crows on itch.io&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;P.S. Here are some books I really liked this year.&lt;/p&gt;

&lt;div class="gallery"&gt;
    &lt;img src="https://www.struanfraser.co.uk/images/2023/lazy.jpeg" alt="Lazy City by Rachel Connolly"&gt;&lt;/img&gt;
    &lt;img src="https://www.struanfraser.co.uk/images/2023/dawn.jpeg" alt="Dawn of Everything by David Graeber and David Wengrow"&gt;&lt;/img&gt;
    &lt;img src="https://www.struanfraser.co.uk/images/2023/pastoral.jpg" alt="English Pastoral by James Rebanks"&gt;&lt;/img&gt;
    &lt;img src="https://www.struanfraser.co.uk/images/2023/zami.jpg" alt="Zami: A New Spelling of My Name A Biomythography"&gt;&lt;/img&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <title>TVKit - A TV Prototyping Toolkit</title>
    <link rel="alternate" href="http://struanfraser.co.uk/blog/tv-kit"/>
    <id>http://struanfraser.co.uk/blog/tv-kit</id>
    <published>2019-06-03T17:39:00+01:00</published>
    <updated>2025-02-16T23:37:47+00:00</updated>
    <author>
      <name>Struan Fraser</name>
    </author>
    <content type="html">&lt;figure&gt;
&lt;img src="https://www.struanfraser.co.uk/blog/posts/2019/images/tv-kit/carousel.gif" alt="The text types 'carousel = new Carousel' and a carousel appears in the preview window" class="full-width"&gt;&lt;/img&gt;
&lt;/figure&gt;

&lt;p&gt;I&amp;rsquo;ve finally got access to Framer X again! Unfortunately I haven&amp;rsquo;t had much access to time. Until I do work up the courage to begin properly learning React again, I have some tools that I&amp;rsquo;d like to share. &lt;/p&gt;

&lt;p&gt;First of all, there&amp;rsquo;s EasyNav.
&lt;a href="https://github.com/Skinny-Malinky/EasyNav-for-Framer-Studio" target="_blank"&gt;
&lt;figure&gt;
&lt;img src="https://www.struanfraser.co.uk/blog/posts/2019/images/tv-kit/easynav.png" alt="Five frames show a highlighted position in logical order. The center frame shows blue a highlight; the top frame shows a slightly higher highlight in the frame; the bottom frame, slightly lower; the left frame shows a highlight to the left and the right frame shows a highlight to the right." class="full-width"&gt;&lt;/img&gt;
&lt;figcaption&gt;
This is EasyNav
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/a&gt;
&lt;h3&gt;Taking it back to the design view&lt;/h3&gt;
&lt;p&gt;I made EasyNav because I wanted a flexible tool that would allow me to quickly make D-Pad navigable prototypes without having to spend too much time with code. It also lowers the barrier of entry to those who want to use it while allowing you to use Framer&amp;rsquo;s full feature set if you want to.&lt;/p&gt;&lt;/p&gt;

&lt;h4&gt;How it works&lt;/h4&gt;

&lt;p&gt;
EasyNav reads the document and infers navigation from the position of each Frame. So if you draw a Frame above another one, EasyNav will allow you to navigate up to the frame above it. On top of that, it also allows you to override those default behaviours if you wish to block navigation for whatever reason. You can find more instructions in the example project on the Github page: &lt;a href="https://github.com/Skinny-Malinky/EasyNav-for-Framer-Studio"&gt;EasyNav for Framer Studio - Github&lt;/a&gt;
&lt;/p&gt;

&lt;h3&gt;TVKit&lt;/h3&gt;

&lt;p&gt;This project was made to give us a set of standard patterns to use for prototyping at YouView. I&amp;rsquo;ve removed all of the YouView stuff but it still leaves you with quite a lot of power and has also taught me a great deal about javascript. I&amp;rsquo;ll post some gifs to show the basics of it:
&lt;figure&gt;
&lt;img src="https://www.struanfraser.co.uk/blog/posts/2019/images/tv-kit/carousel-two.gif" alt="carousel = new Carousel is written in an IDE and the preview shows the carousel appear." class="full-width"&gt;&lt;/img&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src="https://www.struanfraser.co.uk/blog/posts/2019/images/tv-kit/menu.gif" alt="menu = new Menu is written in an IDE and the preview shows the menu appear." class="full-width"&gt;&lt;/img&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src="https://www.struanfraser.co.uk/blog/posts/2019/images/tv-kit/programme-tile.gif" alt="programmeTile = new ProgrammeTile is written in an IDE and the preview shows the tile appear" class="full-width"&gt;&lt;/img&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;At YouView we have set these up to work with our APIs meaning we get all of the cloud metadata that we&amp;rsquo;re not showing here. This means we have carousels that work with Search, Discover, the Main Menu, the Miniguide and any combined mix you might want. These components are also fully interactive. One of the problems I&amp;rsquo;d started to notice however was how we could navigate between the components, this is where I created Navigables.&lt;/p&gt;

&lt;p&gt;Navigables work off of a fairly simple premise, choose the direction you want to go in, then choose the next Navigable you&amp;rsquo;d like to highlight. An example of this might be&lt;/p&gt;

&lt;p&gt;&lt;code&gt;myNavigable.onUpOut(-&amp;gt; highlight.setContext(otherNavigable))&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;ve found it really useful for quickly spinning up prototypes as it allows you to start sending layer-based events based on keyboard input. It also works great with a &lt;a href="https://flirc.tv/"&gt;FLIRC&lt;/a&gt; and other controllers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Skinny-Malinky/TV-Kit-for-Framer-Classic" target="_blank"&gt;You can find more examples and code here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you try any of this, let me know! I suspect my documentation might trip you up here as I haven&amp;rsquo;t been the most studious of documenters so &lt;a href="https://twitter.com/struanfraser" target="_blank"&gt;give me a shout if you run into any problems&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m going to try and find some time for Framer X now, though I&amp;rsquo;ve got some research coming up and I&amp;rsquo;ll likely have to fallback onto TVKit as it&amp;rsquo;s served me well up until now!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Another Alpha Channel Experiment</title>
    <link rel="alternate" href="http://struanfraser.co.uk/blog/alpha-channel-experiment"/>
    <id>http://struanfraser.co.uk/blog/alpha-channel-experiment</id>
    <published>2018-09-27T23:00:00+01:00</published>
    <updated>2025-02-16T23:37:47+00:00</updated>
    <author>
      <name>Struan Fraser</name>
    </author>
    <content type="html">&lt;figure&gt;
&lt;video src="https://www.struanfraser.co.uk/blog/posts/2018/video/alpha-trail.mp4" controls class="full-width" autoplay="false" loop&gt;&lt;/video&gt;
&lt;figcaption&gt;Requires a cyberpunk backing track&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3&gt;Stressing out&lt;/h3&gt;

&lt;p&gt;Stress! That&amp;rsquo;s my aim. I wanted to go further than last time. It&amp;rsquo;s clear to me that time is an important element as the last sketch felt &lt;a href="https://www.struanfraser.co.uk/blog/open-frameworks-and-processing#trippy-webcam" target="_blank"&gt;disconnected and loose&lt;/a&gt;. This has much more of a satisfying, &lt;em&gt;disconcerting&lt;/em&gt;* feel to it. Whenever I use it I feel like I&amp;rsquo;m becoming more stressed just by appearing and moving in the image. It almost makes you want to stop moving. &lt;/p&gt;

&lt;p&gt;I suspect this won&amp;rsquo;t be the end of my interest in alpha channels. I&amp;rsquo;ve been looking at an awful lot of &lt;a href="https://www.pinterest.co.uk/struanf/80s-90s-retro-design/" target="_blank"&gt; old VHS covers on pinterest which may have something to do with it.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It works by allowing the red alpha channel to move around in real time but only occasionally capturing the blue and green channels&amp;rsquo; frames. They also have a blend mode applied to them as appeared in the previous sketch.&lt;/p&gt;

&lt;p&gt;Hopefully I&amp;rsquo;ll be able to produce a p5js version some time soon so I can share it around but until then I&amp;rsquo;ll settle for just listening to Carpenter Brut until my ears bleed –&lt;/p&gt;

&lt;iframe width="100%" height="400" src="https://www.youtube-nocookie.com/embed/DY1s9SmrQRE?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;* Forgive the oxymoron&lt;/p&gt;

&lt;h3&gt;Some Bonus Mistakes&lt;/h3&gt;

&lt;div class="fukol-grid"&gt;
    &lt;ul&gt;&lt;figure&gt;&lt;img alt="Struan appears with a blue hue in an office. A larger image with a red hue appears super imposed over the original image. Struan is waving." src="https://www.struanfraser.co.uk/blog/posts/2018/images/alpha-channels/glitch-1.png" /&gt;&lt;/figure&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;figure&gt;&lt;img alt="Struan appears with a blue hue in an office. A larger image with a red hue appears super imposed over the original image. Struan is looking pensive." src="https://www.struanfraser.co.uk/blog/posts/2018/images/alpha-channels/glitch-2.png" /&gt;&lt;/figure&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;figure&gt;&lt;img alt="Struan appears with a blue hue in an office. A larger image with a red hue appears stretched and super imposed over the original image. Struan is confused." src="https://www.struanfraser.co.uk/blog/posts/2018/images/alpha-channels/glitch-3.png" /&gt;&lt;/figure&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;figure&gt;&lt;img alt="Six inverted images appear of Struan each with a different hue. The first is full colour, the second is inverted, the third is red and inverted, as is the fourth, the fifth is green and inverted and the last is blue and inverted. Struan looks very suprised and is waving." src="https://www.struanfraser.co.uk/blog/posts/2018/images/alpha-channels/glitch-4.png" /&gt;&lt;/figure&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;figure&gt;&lt;img alt="Struan partially appears in an office environemnt. A distorted image appears beside the webcam feed that appears to show a broken webcam feed." src="https://www.struanfraser.co.uk/blog/posts/2018/images/alpha-channels/glitch-5.png" /&gt;&lt;/figure&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;figure&gt;&lt;img alt="Struan partially appears in an office environemnt. A distorted image appears beside the webcam feed that appears to show a broken webcam feed. Struan is waving." src="https://www.struanfraser.co.uk/blog/posts/2018/images/alpha-channels/glitch-6.png" /&gt;&lt;/figure&gt;&lt;/ul&gt;
    &lt;ul&gt;&lt;figure&gt;&lt;img alt="Six inverted images appear of Struan each with a different hue. The first is full colour, the second is inverted, the third is red and inverted, as is the fourth, the fifth is green and inverted and the last is blue and inverted. Struan is talking to someone out of shot." src="https://www.struanfraser.co.uk/blog/posts/2018/images/alpha-channels/glitch-7.png" /&gt;&lt;/figure&gt;&lt;/ul&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <title>Trying Some Libraries</title>
    <link rel="alternate" href="http://struanfraser.co.uk/blog/open-frameworks-and-processing"/>
    <id>http://struanfraser.co.uk/blog/open-frameworks-and-processing</id>
    <published>2018-08-07T18:09:00+01:00</published>
    <updated>2025-02-16T23:37:47+00:00</updated>
    <author>
      <name>Struan Fraser</name>
    </author>
    <content type="html">&lt;figure&gt;
&lt;video src="https://www.struanfraser.co.uk/blog/posts/2018/video/trying-libraries/torus.mp4" controls class="full-width" autoplay="false" loop&gt;&lt;/video&gt;
&lt;figcaption&gt;My First Attempt at THREEJS&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Uh oh, I&amp;rsquo;m spending an awful lot of time with code. With the advent of Framer and now Framer X, I&amp;rsquo;ve become a bit of an addict for trying out all of the different packages that are floating around the scriptiverse and it&amp;rsquo;s far too tempting to give them a poke. &lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s some of the stuff I&amp;rsquo;ve been playing with: –&lt;/p&gt;

&lt;h3&gt; P5.JS&lt;/h3&gt;

&lt;figure&gt;
&lt;video src="https://www.struanfraser.co.uk/blog/posts/2018/video/trying-libraries/do-it-now.mp4" controls class="full-width"&gt;&lt;/video&gt;
&lt;figcaption&gt;Made with p5.js&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The Web Audio API&amp;rsquo;s capabilities have blown me away as you can do all kinds of witchcraft when combined with P5.js. This is a quick prototype I built with the &lt;a href="http://https://p5js.org/reference/#/libraries/p5.sound"&gt;p5.sound&lt;/a&gt; library which I&amp;rsquo;ve only just scratched the surface of. This uses mouse input to control a low pass and amplitude if I remember correctly. I&amp;rsquo;d love to try hooking this up to an Arduino to create some cool performative artifacts.&lt;/p&gt;

&lt;h3&gt;Sketches for Fountains&lt;/h3&gt;

&lt;p&gt;After giving a friend a little support for their final year project, they offered to let me try out a processing sketch on the fountains at Central Saint Martins –
&lt;figure&gt;
&lt;video src="https://www.struanfraser.co.uk/blog/posts/2018/video/trying-libraries/fountain-sketch.mp4" controls&gt;&lt;/video&gt;
&lt;figcaption&gt;You can see a live demo of the &lt;a href="https://www.struanfraser.co.uk/fountain-sketch"&gt;Fountain Sketch here&lt;/a&gt;. Made with p5.js.&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;The left hand side shows the height of the wave: the whiter it is, the higher the wave. The right hand side shows the colour projected through the jet. Unfortunately we ran out of time on the day but I did get this photo of a trial run &lt;i&gt;almost&lt;/i&gt; working correctly – 
&lt;figure&gt;
&lt;img src="https://www.struanfraser.co.uk/blog/posts/2018/images/trying-libraries/fountain.jpg" alt="The fountains at Central Saint Martins arranged in a sine wave"&gt;&lt;/img&gt;
&lt;figcaption&gt;A Processing Sketch in a Fountain&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;h3&gt; P5 with 3D&lt;/h3&gt;

&lt;figure&gt;
&lt;video src="https://www.struanfraser.co.uk/blog/posts/2018/video/trying-libraries/spinny-ball.mp4" controls class="full-width"&gt;&lt;/video&gt;
&lt;figcaption&gt;First foray into 3D using p5.js&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Um, I&amp;rsquo;m not sure there&amp;rsquo;s much to say about this other than I have a lot to learn about 3D. I had a go at THREEJS at the start of this post too but it&amp;rsquo;s just a whole new set of skills and ideas to get my head around&amp;hellip; I&amp;rsquo;ll keep at it.&lt;/p&gt;

&lt;h3&gt;Open Frameworks&lt;/h3&gt;

&lt;p&gt;Over the past couple of years, I think I&amp;rsquo;ve finally learned how to wield Twitter effectively and it&amp;rsquo;s introduced me to swathes of new artists&amp;rsquo; and coders&amp;rsquo; work. I found a video of Zach Lieberman talking at the AIGA design conference last year and I found the ease with which he was able to create shapes in code and talk about his journey with creative code inspiring. Seeing that talk made me want to try out Open Frameworks. The following is a result of that exploration –
&lt;figure&gt;
&lt;video src="https://www.struanfraser.co.uk/blog/posts/2018/video/trying-libraries/square-grid-swoop-lieberman.mp4" controls class="full-width"&gt;&lt;/video&gt;
&lt;figcaption&gt;An Open Processing Sketch – inspired by/stolen from – Zach Lieberman&amp;rsquo;s AIGA talk.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;video src="https://www.struanfraser.co.uk/blog/posts/2018/video/trying-libraries/lines-and-swoop.mp4" controls class="full-width"&gt;&lt;/video&gt;
&lt;figcaption&gt;A progression of that initial idea.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;video src="https://www.struanfraser.co.uk/blog/posts/2018/video/trying-libraries/wacky-lines.mp4" controls class="full-width"&gt;&lt;/video&gt;
&lt;figcaption&gt;Learning about the importance of using time as this is HECTIC.&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;Quickly I&amp;rsquo;m realising I need to become a master of time and colour. Understanding how to use time in a sketch is so important and quite a new way of thinking compared to the programming environments I&amp;rsquo;m familiar with.&lt;/p&gt;

&lt;p&gt;Colour is also really difficult as you&amp;rsquo;re using time to change the properties of colour. Slowly, mastery of the sine wave is emerging as a necessary skill to create a well composed sketch: it allows for a much more naturalistic shift in colour and space.
&lt;figure&gt;
&lt;video src="https://www.struanfraser.co.uk/blog/posts/2018/video/trying-libraries/chromatic-aberration-webcam.mp4" controls class="full-width" id="trippy-webcam"&gt;&lt;/video&gt;
&lt;figcaption&gt;Trippy camera stuff made with Open Frameworks.&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/struanfraser/status/956183356160475136"&gt;I saw this on tumblr&lt;/a&gt; some time ago but was never able to track down another source. I&amp;rsquo;m a really big fan of people&amp;rsquo;s interpretations of chromatic aberration and I wanted to have a go at creating something interesting.&lt;/p&gt;

&lt;p&gt;And finally here&amp;rsquo;s the talk that kicked off the Open Frameworks intrigue –&lt;/p&gt;

&lt;iframe width="100%" height="400" src="https://www.youtube-nocookie.com/embed/bmztlO9_Wvo?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen&gt;&lt;/iframe&gt;
</content>
  </entry>
  <entry>
    <title>TV &amp; Framer</title>
    <link rel="alternate" href="http://struanfraser.co.uk/blog/tv-and-framer"/>
    <id>http://struanfraser.co.uk/blog/tv-and-framer</id>
    <published>2018-04-22T00:00:00+01:00</published>
    <updated>2025-02-16T23:37:47+00:00</updated>
    <author>
      <name>Struan Fraser</name>
    </author>
    <content type="html">&lt;figure&gt;
&lt;video src="https://www.struanfraser.co.uk/blog/posts/2018/images/keyboard-input.mp4" controls="false" class="full-width" autoplay loop&gt;&lt;/video&gt;
&lt;figcaption&gt;Hello world, hello TV&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3&gt;Prototyping for TV&lt;/h3&gt;

&lt;p&gt;Information about user research and prototyping for TV is lacking compared to mobile &amp;amp; web. Most of it is transferrable but – at YouView – we&amp;rsquo;ve encountered problems where we&amp;rsquo;ve had to innovate in order to achieve what&amp;rsquo;s standard practice on other platforms. One of the biggest barriers has been prototyping because we use infrared input and there aren&amp;rsquo;t any obvious, pre-packaged solutions for prototyping with a remote control.&lt;/p&gt;

&lt;p&gt;It feels like we&amp;rsquo;ve tried every prototyping tool under the sun &lt;em&gt;(R.I.P. Pixate ⚰️)&lt;/em&gt;. Using Axure we&amp;rsquo;d tied ourselves into the deepest, most convoluted conditional logic  that it was no longer feasible to return to a project. &lt;/p&gt;

&lt;p&gt;A screenshot of one of my colleague&amp;rsquo;s more complicated prototypes –
&lt;figure&gt;
&lt;img src="https://www.struanfraser.co.uk/blog/posts/2018/images/axure-chaos.png" alt="Screenshot of Axure with hundreds of conditional statements in the right hand panel." class="no-shadow" loop style="margin-bottom:0;"&gt;&lt;/img&gt;
&lt;figcaption style="margin-top: -0.2em;"&gt;Axure&amp;rsquo;s conditional chaos. And that&amp;rsquo;s a fraction of it.&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;Axure was good in that it was one of the few prototyping tools that allowed for keyboard input. We&amp;rsquo;d discovered that you could buy a cheap infrared receiver called a &lt;a href="http://www.flirc.tv"&gt;FLIRC&lt;/a&gt; and that it could be used to convert infrared input into keyboard input. Perfect.&lt;/p&gt;

&lt;p&gt;We got by like this for some time and when we needed more intricate prototypes, we would hire contractors who weren&amp;rsquo;t from a design background. That made communication difficult.&lt;/p&gt;

&lt;h3&gt;Enter Framer.&lt;/h3&gt;

&lt;p&gt;Framer was introduced to me by a colleague who described it as, &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;hellip;pretty much javascript. If you can use that you might as well work on the set top box.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was fairly intimidating but equipped with some decaying programming skills from school and a determination to stop using Axure (see above), I&amp;rsquo;d decided to stick with it.&lt;/p&gt;

&lt;p&gt;We&amp;rsquo;d stumbled upon &lt;a href="http://examples.framerjs.com/#event-keyboard-shortcuts.framer"&gt;this nifty little example&lt;/a&gt; which seemed to perfectly meet our needs. Unfortunately the syntax looked pretty dense compared to the mobile prototypes and it became fairly clear that Framer wasn&amp;rsquo;t designed for TV but we persevered. 
&lt;figure&gt;
&lt;video src="https://www.struanfraser.co.uk/blog/posts/2018/video/flirc.mp4" controls class="full-width" loop&gt;&lt;/video&gt;
&lt;figcaption&gt;Using FLIRC with a YouView TV Guide prototype&lt;/figcaption&gt;
&lt;/figure&gt;&lt;/p&gt;

&lt;p&gt;A year of learning later and we&amp;rsquo;re finding it&amp;rsquo;s quite hard to get an entire design team – with little knowledge of object oriented programming – to use a tool to do something for which it wasn&amp;rsquo;t designed. Keyboard input creates a whole host of problems, such as repeating input and complicated syntax, so we came up with a &lt;em&gt;(hopefully)&lt;/em&gt; simpler solution than Framer had previously offered.&lt;/p&gt;

&lt;blockquote class="twitter-tweet tw-align-center" data-lang="en"&gt;&lt;p lang="en" dir="ltr"&gt;Using a remote control with framer 😎 by &lt;a href="https://twitter.com/struanfraser?ref_src=twsrc%5Etfw"&gt;@struanfraser&lt;/a&gt; uhuuuu I want to try that too &lt;a href="https://twitter.com/hashtag/framerlondon?src=hash&amp;amp;ref_src=twsrc%5Etfw"&gt;#framerlondon&lt;/a&gt; &lt;a href="https://t.co/alxncDo4Mq"&gt;pic.twitter.com/alxncDo4Mq&lt;/a&gt;&lt;/p&gt;&amp;mdash; Marie Schweiz (@ma_rylou) &lt;a href="https://twitter.com/ma_rylou/status/988867630500057091?ref_src=twsrc%5Etfw"&gt;April 24, 2018&lt;/a&gt;&lt;/blockquote&gt;

&lt;script async src="https://platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;

&lt;h3&gt;Keyboard Input for Framer&lt;/h3&gt;

&lt;p&gt;After many prototypes I felt like I&amp;rsquo;d come to a conclusion about how I wanted to use keyboard input in a way that was relatively similar to Framer&amp;rsquo;s existing syntax. It still requires a knowledge of functions which I think was a bit of a stumbling block. That said, you only have to write one line of code for each key which simplifies things considerably –&lt;/p&gt;

&lt;h4&gt;The Old Way&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;table class="rouge-table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="rouge-gutter gl"&gt;&lt;pre class="lineno"&gt;1
2
3
4
5
6
7
8
9
&lt;/pre&gt;&lt;/td&gt;&lt;td class="rouge-code"&gt;&lt;pre&gt;enter = 13
document.addEventListener 'keydown', (event) -&amp;gt;
    keyCode = event.which
    eventHandler(keyCode)
    event.preventDefault()
eventHandler = Utils.throttle 0.3, (keyCode) -&amp;gt;
    switch keyCode
        when enter
            doSomething()
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4&gt;The New Way&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;table class="rouge-table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="rouge-gutter gl"&gt;&lt;pre class="lineno"&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class="rouge-code"&gt;&lt;pre&gt;keyboard.onKey(keyboard.enter, doSomething, 0.3)
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I&amp;rsquo;ve written a more comprehensive guide on how to use the module on Github so if the module sounds like something you&amp;rsquo;d be interested in, take a look –
&lt;figure&gt;
&lt;a href="https://github.com/Skinny-Malinky/Keyboard-Input-for-Framer"&gt;
&lt;figure&gt;
&lt;video src="https://www.struanfraser.co.uk/blog/posts/2018/images/keyboard-input.mp4" controls="false" class="full-width" autoplay loop&gt;&lt;/video&gt;
&lt;figcaption&gt;Get the Module&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
</feed>
