<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ryan Seddon</title>
    <link>https://ryanseddon.com/</link>
    <description>Recent content on Ryan Seddon</description>
    <generator>Hugo</generator>
    <language>en-GB</language>
    <lastBuildDate>Wed, 13 Aug 2025 23:02:26 +0000</lastBuildDate>
    <atom:link href="https://ryanseddon.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How to build an Agent, On-Device Edition</title>
      <link>https://ryanseddon.com/ai/how-to-build-an-agent-on-device/</link>
      <pubDate>Wed, 13 Aug 2025 23:02:26 +0000</pubDate>
      <guid>https://ryanseddon.com/ai/how-to-build-an-agent-on-device/</guid>
      <description>&lt;p&gt;This post explores how to build an agent using an on-device model such as Phi-4-mini or Gemini Nano (available in Edge or Chrome browsers respectively), all behind a simple flag. This approach lowers the barrier to entry since it requires no external API or service.&lt;/p&gt;&#xA;&lt;p&gt;You can read the original, &lt;a href=&#34;https://ampcode.com/how-to-build-an-agent&#34;&gt;How to Build an Agent&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I &lt;em&gt;urge&lt;/em&gt; you to follow along. The barrier is so low, it’s less than 200 lines of code, just pop open your browser dev tools console and you can follow right along as you read this!&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Rise of On-Device AI: What&#39;s Next for LLMs in the Browser</title>
      <link>https://ryanseddon.com/ai/the-rise-of-on-device-ai/</link>
      <pubDate>Sat, 14 Jun 2025 03:21:38 +0000</pubDate>
      <guid>https://ryanseddon.com/ai/the-rise-of-on-device-ai/</guid>
      <description>&lt;p&gt;On June 12th, 2025 I gave a talk at Web Directions Code conference about the rise of on-device AI and how rapidly the capabilities are moving, and how capable they are today.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Presentation: On-device LLM with Gemini Nano</title>
      <link>https://ryanseddon.com/ai/on-device-llm-chrome-ai/</link>
      <pubDate>Thu, 14 Nov 2024 09:07:32 +0000</pubDate>
      <guid>https://ryanseddon.com/ai/on-device-llm-chrome-ai/</guid>
      <description>&lt;p&gt;I recently gave a talk at a local meetup, &lt;a href=&#34;https://melbjs.com/&#34;&gt;MelbJS&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Talk was about my explorations with the &lt;a href=&#34;https://developer.chrome.com/docs/ai/built-in&#34;&gt;Google Chrome Built-in AI early preview&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>View transitions &#43; speculative rules</title>
      <link>https://ryanseddon.com/web/view-transitions-speculative/</link>
      <pubDate>Sat, 06 Jul 2024 00:16:47 +0000</pubDate>
      <guid>https://ryanseddon.com/web/view-transitions-speculative/</guid>
      <description>&lt;p&gt;I’ve been very interested in the potential of view transitions since they were called &lt;a href=&#34;https://github.com/jakearchibald/navigation-transitions&#34;&gt;navigation transitions&lt;/a&gt;. Recently, they’ve landed in Chrome stable v126 with a more stable API. Initially it was a SPA-only API but has now been opened up to MPA, first with an experimental meta tag and now via a CSS at-rule.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Narrate your life with Generative AI</title>
      <link>https://ryanseddon.com/ai/narrate-your-life-with-gen-ai/</link>
      <pubDate>Fri, 08 Dec 2023 02:53:08 +0000</pubDate>
      <guid>https://ryanseddon.com/ai/narrate-your-life-with-gen-ai/</guid>
      <description>&lt;p&gt;A few weeks ago Charlie Holtz (&lt;a href=&#34;https://twitter.com/charliebholtz/status/1724815159590293764&#34;&gt;@charliebholtz&lt;/a&gt;) showed a pretty cool demo using GPT4’s multimodal abilities to caption and narrate a screenshot of you which was then passed to &lt;a href=&#34;https://elevenlabs.io/&#34;&gt;ElevenLabs&lt;/a&gt; to speak out in the voice of David Attenborough with their cloning service.&lt;/p&gt;&#xA;&lt;p&gt;T﻿his demo required you to run the &lt;a href=&#34;https://github.com/cbh123/narrator&#34;&gt;code&lt;/a&gt; on your machine using python. I wanted to see if it could be done in the browser since all the generative AI capabilities were done through APIs.&lt;/p&gt;&#xA;&lt;p&gt;A﻿ll that was needed was the ability to capture a stream from a users webcam and take a snapshot at required intervals. This is fairly trivial these days in the browser.&lt;/p&gt;</description>
    </item>
    <item>
      <title>3d printed rainbox overflow shark</title>
      <link>https://ryanseddon.com/making/sharbox/</link>
      <pubDate>Fri, 24 Mar 2023 00:05:23 +0000</pubDate>
      <guid>https://ryanseddon.com/making/sharbox/</guid>
      <description>&lt;p&gt;We have a large hole, 65mm, cut into our gutter rainbox to allow it to overflow in the case of a large downpour. Rather than have a hole there I worked with my daughter on choosing something fun to cover it while still allowing it to overflow.&lt;/p&gt;&#xA;&lt;p&gt;After deliberating over a unicorn vs trex vs shark we settled on the &lt;a href=&#34;https://www.thingiverse.com/thing:3870774&#34;&gt;low-poly shark head&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Check out &lt;a href=&#34;https://www.thingiverse.com/thing:5924538&#34;&gt;sharkbox&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://ryanseddon.com/img/uploads/img_6678.jpg&#34; alt=&#34;Sharbox model printed and installed in rainbox&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Earth in 2022</title>
      <link>https://ryanseddon.com/hacking/earth-in-2022/</link>
      <pubDate>Mon, 16 Jan 2023 04:03:35 +0000</pubDate>
      <guid>https://ryanseddon.com/hacking/earth-in-2022/</guid>
      <description>&lt;p&gt;Another year another timelapse of earth as seen from 5 satellites!&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been running this little twitter bot for over 5 years now and it never gets old watching this beautiful pale blue dot.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve previously wrote about &lt;a href=&#34;https://ryanseddon.com/hacking/handy-cli-commands-earthin24-yearly-summary/&#34;&gt;how I do the yearly timelapse&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;Earth in 2022. A year in review 🧵&lt;/p&gt;&amp;mdash; Earth (@earthin24) &lt;a href=&#34;https://twitter.com/earthin24/status/1614829838673805313?ref_src=twsrc%5Etfw&#34;&gt;January 16, 2023&lt;/a&gt;&lt;/blockquote&gt;&#xA;&lt;script async src=&#34;https://platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&#xA;&#xA;&#xA;&lt;p&gt;If twitter isn&amp;rsquo;t your thing it&amp;rsquo;s also on mastodon! &lt;a href=&#34;https://botsin.space/@earthin24/109696834017584339&#34;&gt;https://botsin.space/@earthin24/109696834017584339&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Patching builtin Web APIs using Proxy and Reflect</title>
      <link>https://ryanseddon.com/javascript/patching-web-apis-proxy-reflect/</link>
      <pubDate>Wed, 30 Nov 2022 04:20:26 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/patching-web-apis-proxy-reflect/</guid>
      <description>&lt;p&gt;I recently wrote something up on the &lt;a href=&#34;https://zendesk.engineering/&#34;&gt;work engineering publication&lt;/a&gt; on a production use of the &lt;code&gt;Proxy&lt;/code&gt; &amp;amp; &lt;code&gt;Reflect&lt;/code&gt; objects to hook into the &lt;code&gt;createElement&lt;/code&gt;web api and add a CSP nonce to any style tags created that way.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://zendesk.engineering/patching-builtin-web-apis-using-proxy-and-reflect-807f56914cb1&#34;&gt;📝 Patching builtin Web APIs using Proxy and Reflect.&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Smarter automations with dummy switches</title>
      <link>https://ryanseddon.com/automation/smarter-dummy-switches/</link>
      <pubDate>Tue, 16 Aug 2022 22:13:10 +0000</pubDate>
      <guid>https://ryanseddon.com/automation/smarter-dummy-switches/</guid>
      <description>&lt;p&gt;The Home app has some frustrating limitations around creating automations or triggering events that don’t require auth from the user.&lt;/p&gt;&#xA;&lt;p&gt;Apps like &lt;a href=&#34;https://www.evehome.com/en/eve-app&#34;&gt;Eve&lt;/a&gt; allow you to hook into more HomeKit APIs and create automations that can react to more sensors.&lt;/p&gt;&#xA;&lt;p&gt;What’s missing though is awareness of the automation suite as a whole e.g. overrides, priorities, and general awareness of how a bunch of automations could be modelled as a whole system.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using virtual lightbulbs to represent solar stats in HomeKit</title>
      <link>https://ryanseddon.com/renewables/virtual-lightbulbs-solar-homekit/</link>
      <pubDate>Sun, 03 Jul 2022 04:40:04 +0000</pubDate>
      <guid>https://ryanseddon.com/renewables/virtual-lightbulbs-solar-homekit/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://homebridge.io/&#34;&gt;Homebridge&lt;/a&gt; has been an amazing contribution to connecting most of my home into a single automation platform.&lt;/p&gt;&#xA;&lt;p&gt;If you’ve read this blog you’ll know that I’ve &lt;a href=&#34;https://ryanseddon.com/renewables/year-in-review-electric-home&#34;&gt;electrified my home&lt;/a&gt; and dumped fossil gas into the past where it belongs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;bringing-solar-into-homekit&#34;&gt;Bringing solar into HomeKit&lt;/h2&gt;&#xA;&lt;p&gt;Part of electrifying my home was adding solar and I’ve talked about how I’ve extracted data from my realtime circuit hardware via a &lt;a href=&#34;https://ryanseddon.com/hacking/solar-dashboard-adafruit-magtag&#34;&gt;dashboard created with a magtag device&lt;/a&gt; on my fridge. But I wanted to bring it into HomeKit so I could run automations based on my solar generation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A year in review of an electric home</title>
      <link>https://ryanseddon.com/renewables/year-in-review-electric-home/</link>
      <pubDate>Wed, 27 Apr 2022 23:23:06 +0000</pubDate>
      <guid>https://ryanseddon.com/renewables/year-in-review-electric-home/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s start with the acknowledgment that I am in a very privileged position to be able to do this to a home I own. I do believe that my home will be commonplace in the coming decade, clean, fossil fuel-free, and efficient. I just got here earlier as I had the means and passion to be an early adopter.&lt;/p&gt;&#xA;&lt;p&gt;I electrified my home about 18 months ago but have only now clocked over 12 months of an electric home with rooftop solar.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I produce the @earthin24 yearly summary</title>
      <link>https://ryanseddon.com/hacking/handy-cli-commands-earthin24-yearly-summary/</link>
      <pubDate>Sun, 20 Feb 2022 22:32:17 +0000</pubDate>
      <guid>https://ryanseddon.com/hacking/handy-cli-commands-earthin24-yearly-summary/</guid>
      <description>&lt;p&gt;Every year I produce a timelapse video of my &lt;a href=&#34;https://twitter.com/earthin24&#34;&gt;@earthin24 twitter bot&lt;/a&gt; for each of the 5 satellites that it tracks.&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;Earth in 2021, a year in review thread 🧵 &lt;a href=&#34;https://t.co/L485FyF7EH&#34;&gt;pic.twitter.com/L485FyF7EH&lt;/a&gt;&lt;/p&gt;&amp;mdash; Earth (@earthin24) &lt;a href=&#34;https://twitter.com/earthin24/status/1477977321000763392?ref_src=twsrc%5Etfw&#34;&gt;January 3, 2022&lt;/a&gt;&lt;/blockquote&gt;&#xA;&lt;script async src=&#34;https://platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&#xA;&#xA;&#xA;&lt;p&gt;This year was the first year I built, tweeted, and stored each video and fulldisc frame inside github using their actions infrastructure. So my usual process of ssh&amp;rsquo;ing into my VPS and running some flaky scripts to generate the videos would have to be changed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Solar dashboard using Adafruit MagTag</title>
      <link>https://ryanseddon.com/hacking/solar-dashboard-adafruit-magtag/</link>
      <pubDate>Sun, 26 Sep 2021 03:24:19 +0000</pubDate>
      <guid>https://ryanseddon.com/hacking/solar-dashboard-adafruit-magtag/</guid>
      <description>&lt;p&gt;I recently had the privilege of being able to install solar on my roof and with that came the need/want to track and monitor lots of information about my solar install and my usage patterns of it.&lt;/p&gt;&#xA;&lt;p&gt;Having recently electrified my home and completely removing gas all together (I plan to write about this too), I wanted to know where I could load shift some of my usage patterns.&lt;/p&gt;&#xA;&lt;p&gt;Another aspect of monitoring was to know my panels were performing at their optimal, and expected, output. I have a large flat roof at the back of my house and did the calculations on tilt frames vs laying flat, I could fit almost twice as many panels if I laid them flat. I needed something to monitor that their performance was outputting expected kW and the monitoring device/software could tell me if I needed to get up there and clean them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>An earth mosaic</title>
      <link>https://ryanseddon.com/javascript/an-earth-mosaic/</link>
      <pubDate>Fri, 12 Jan 2018 17:00:25 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/an-earth-mosaic/</guid>
      <description>&lt;p&gt;So a while back I created a twitter bot &lt;a href=&#34;https://twitter.com/earthin24&#34;&gt;@earthin24&lt;/a&gt; that generates a video of earth, as seen from himawari8 satellite, every day.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I built my earthin24 twitter bot</title>
      <link>https://ryanseddon.com/hacking/how-i-built-my-earthin24-twitter-bot/</link>
      <pubDate>Sat, 26 Aug 2017 05:43:36 +0000</pubDate>
      <guid>https://ryanseddon.com/hacking/how-i-built-my-earthin24-twitter-bot/</guid>
      <description>&lt;p&gt;At work my team have recently taken over a &lt;a href=&#34;https://golang.org/&#34;&gt;golang&lt;/a&gt; app. To learn a new language I like to build something that keeps my interest and by the nature of exploring something of interest you tend to cover way more surface area of a language this way.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stop iOS10 browser auto-locking</title>
      <link>https://ryanseddon.com/html5/stop-ios10-safari-auto-locking/</link>
      <pubDate>Tue, 27 Sep 2016 04:19:30 +0000</pubDate>
      <guid>https://ryanseddon.com/html5/stop-ios10-safari-auto-locking/</guid>
      <description>&lt;p&gt;I had twitter open the other day and I had to put my phone down and attend to something else, the timeline happened to be on a looping gif video and I noticed when I came back that my phone was still awake and unlocked the fact that video was in view kept the phone awake and this got me thinking about the new &lt;code&gt;playsinline&lt;/code&gt; attribute that has been enabled for &lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt; elements in iOS10 Safari.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Changing content type of a file in a FormData request with cURL</title>
      <link>https://ryanseddon.com/hacking/content-type-formdata-curl/</link>
      <pubDate>Mon, 25 Jul 2016 16:00:02 +0000</pubDate>
      <guid>https://ryanseddon.com/hacking/content-type-formdata-curl/</guid>
      <description>&lt;p&gt;The other day I had to test an API response based on a file having the incorrect Content-Type of a &lt;a href=&#34;https://developer.mozilla.org/en/docs/Web/API/FormData&#34;&gt;FormData&lt;/a&gt; PUT request.&lt;/p&gt;</description>
    </item>
    <item>
      <title>So how does the browser actually render a website</title>
      <link>https://ryanseddon.com/browser/jsconfeu15/</link>
      <pubDate>Wed, 04 Nov 2015 09:47:28 +0000</pubDate>
      <guid>https://ryanseddon.com/browser/jsconfeu15/</guid>
      <description>&lt;p&gt;September 2015 I had the privelage of giving a talk at JSConfEU 2015 in Berlin. My topic was about what the browser actually does to construct your website and show it on the screen. This is a topic I’ve been digging into for a few years now and it was really fun trying to distill it into a ~25 minute talk.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Modernizr 3: A beginners guide</title>
      <link>https://ryanseddon.com/css/modernizr-3-a-beginners-guide/</link>
      <pubDate>Thu, 24 Sep 2015 15:18:09 +0000</pubDate>
      <guid>https://ryanseddon.com/css/modernizr-3-a-beginners-guide/</guid>
      <description>&lt;p&gt;Just in time for the launch of &lt;a href=&#34;https://modernizr.com/news/modernizr-3-new-release-site&#34;&gt;Modernizr 3&lt;/a&gt; I’ve been working on a &lt;a href=&#34;https://www.sitepoint.com/premium/courses/modernizr-3-2905&#34; title=&#34;Modernizr 3 course&#34;&gt;beginners course&lt;/a&gt;. This is aimed at people who are getting started in web development and want to know how they can use Modernizr in their workflows.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.sitepoint.com/premium/courses/modernizr-3-2905&#34; title=&#34;Modernizr 3 course&#34;&gt;&lt;img src=&#34;https://d3rj1gznkm47xj.cloudfront.net/37691fd4-f791-4343-9ebc-9bb779de3d46.png&#34; alt=&#34;Modernizr 3 course promo image&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;&#xA;&lt;del datetime=&#34;2015-09-24T15:32:32+00:00&#34;&gt;I have 5 vouchers to give away that will give you free access to the course! The first 5 people to tweet the &lt;a href=&#34;https://www.sitepoint.com/premium/courses/modernizr-3-2905&#34; title=&#34;Modernizr 3 course&#34; target=&#34;_blank&#34;&gt;course link&lt;/a&gt; with the hashtag &lt;strong&gt;#modernizr3course&lt;/strong&gt; will get a voucher link to access the course for free.&lt;/del&gt;&#xA;&#xA;&#xA;&lt;p&gt;They’re &lt;a href=&#34;https://twitter.com/hashtag/modernizr3course&#34;&gt;all gone&lt;/a&gt; thanks for playing :).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sample Page</title>
      <link>https://ryanseddon.com/sample-page/</link>
      <pubDate>Sun, 12 Oct 2014 00:26:37 +0000</pubDate>
      <guid>https://ryanseddon.com/sample-page/</guid>
      <description>&lt;p&gt;This is an example page. It’s different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Hi there! I’m a bike messenger by day, aspiring actor by night, and this is my blog. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin’ caught in the rain.)&lt;/p&gt;</description>
    </item>
    <item>
      <title>UITableView in JavaScript, list view with re-usable cells using flexbox</title>
      <link>https://ryanseddon.com/css/scrolllistview/</link>
      <pubDate>Tue, 22 Jul 2014 11:19:05 +0000</pubDate>
      <guid>https://ryanseddon.com/css/scrolllistview/</guid>
      <description>&lt;p&gt;If you’re familiar with iOS development you will know that a UITableView is very efficient when displaying a list of data. A simplification of what it does is display enough cells to fill the viewport plus a few more either side. As you scroll it re-uses cells that are now out of the viewport so a list with thousands of items will only ever use a fixed amount of cells. Highly recommend reading The fine art of &lt;a href=&#34;https://alexeckermann.com/blog/legacy/the-fine-art-of-uitableviews&#34;&gt;UITableViews&lt;/a&gt;. Now this has certainly been done before in JavaScript, the best known project being &lt;a href=&#34;https://airbnb.github.io/infinity/&#34;&gt;infinity.js&lt;/a&gt;, but my approach takes an interesting turn, I avoid heavy DOM operations by using flexbox.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating a sunrise alarm with the LIFX lightbulb</title>
      <link>https://ryanseddon.com/hacking/sunrise-lifx/</link>
      <pubDate>Fri, 18 Apr 2014 14:00:16 +0000</pubDate>
      <guid>https://ryanseddon.com/hacking/sunrise-lifx/</guid>
      <description>&lt;p&gt;If you’re unfamiliar with &lt;a href=&#34;https://lifx.co&#34;&gt;LIFX&lt;/a&gt; it’s basically a smart wifi enabled led lightbulb. Lifx recently released a Ruby &lt;a href=&#34;https://github.com/LIFX/lifx-gem&#34;&gt;gem&lt;/a&gt; to communicate with it and give it instructions. With winter looming in the southern hemisphere and the sun being up for what feels like 4 seconds at that time of year it’s really hard to get up in the morning so I investigated using their gem to simulate a sunrise effect in time with my alarm on my phone.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A follow up to obtaining 60fps scrolling performance</title>
      <link>https://ryanseddon.com/css/follow-up-60fps-scroll/</link>
      <pubDate>Mon, 13 Jan 2014 12:02:16 +0000</pubDate>
      <guid>https://ryanseddon.com/css/follow-up-60fps-scroll/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://ryanseddon.com/javascript/pointer-events-60fps&#34;&gt;60fps scrolling article&lt;/a&gt; got quite a few people excited but also a few smart people to point out some flaws in the approach. I was planning to just update the original article but I’ve compiled so much info about this topic that I thought it would be better to do a follow up article and dive into the detail of the techniques that I tried and some solutions to the critiques made about the last technique.&lt;/p&gt;</description>
    </item>
    <item>
      <title>60fps scrolling using pointer-events: none</title>
      <link>https://ryanseddon.com/css/pointer-events-60fps/</link>
      <pubDate>Mon, 25 Nov 2013 10:30:36 +0000</pubDate>
      <guid>https://ryanseddon.com/css/pointer-events-60fps/</guid>
      <description>&lt;p&gt;Paul Lewis did an interesting article a while back about &lt;a href=&#34;https://www.html5rocks.com/en/tutorials/speed/unnecessary-paints/&#34;&gt;avoiding unnecessary paints&lt;/a&gt; through disabling hover effects as the user scrolls, which is a great approach. The down side being managing all your hover states through a parent class.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Composited layers in iOS Safari bug</title>
      <link>https://ryanseddon.com/css/composited-layers-ios/</link>
      <pubDate>Wed, 30 Oct 2013 09:57:20 +0000</pubDate>
      <guid>https://ryanseddon.com/css/composited-layers-ios/</guid>
      <description>&lt;p&gt;So had an interesting bug the other day where upon refresh, navigating to another page or external site within the same tab on iOS safari would cause some of my content to flash before the page was loaded. What’s interesting is the main layer over the top was a composited layer and the one beneath was not.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Instrumenting code with generators in JavaScript</title>
      <link>https://ryanseddon.com/javascript/generators/</link>
      <pubDate>Thu, 15 Aug 2013 11:22:03 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/generators/</guid>
      <description>&lt;p&gt;I saw a really cool demo by &lt;a href=&#34;https://github.com/jlongster/steps&#34;&gt;James Long&lt;/a&gt; using Firefoxes implementation of &lt;a href=&#34;https://jlongster.com/2012/10/05/javascript-yield.html&#34;&gt;Generators&lt;/a&gt; to instrument code so you can stop the execution and step through it like your in the dev tools using break points.&lt;/p&gt;</description>
    </item>
    <item>
      <title>iOS6 network activity spinner and CORS</title>
      <link>https://ryanseddon.com/javascript/ios6-spinner/</link>
      <pubDate>Wed, 12 Jun 2013 11:27:24 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/ios6-spinner/</guid>
      <description>&lt;h2 id=&#34;tldr&#34;&gt;TL;DR;&lt;/h2&gt;&#xA;&lt;p&gt;iOS6 will keep the network activity spinner around forever, with no fix, if you do a CORS ajax request at any time with preflight the network activity spinner will stay until the tab is closed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stealing the users back button with the History API</title>
      <link>https://ryanseddon.com/javascript/stealing-history-api/</link>
      <pubDate>Wed, 24 Apr 2013 08:50:08 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/stealing-history-api/</guid>
      <description>&lt;p&gt;Gruber posted a &lt;a href=&#34;https://vimeo.com/64567684&#34;&gt;video&lt;/a&gt; of a website that does some dodgy history insertion. Go to &lt;!-- raw HTML omitted --&gt;tgdaily.com&lt;!-- raw HTML omitted --&gt; let it load (it has horrible perf so give it a bit) and click back and you’ll notice that you get taken back to exitjunction.com with tgdaily as a query. Insert rage face here. Once past rage face open dev tools and investigate.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing $location in an Angular service</title>
      <link>https://ryanseddon.com/angularjs/angular-location-testing/</link>
      <pubDate>Fri, 01 Feb 2013 07:12:16 +0000</pubDate>
      <guid>https://ryanseddon.com/angularjs/angular-location-testing/</guid>
      <description>&lt;p&gt;I’ve been deep in the &lt;a href=&#34;https://angularjs.org/&#34;&gt;Angularjs&lt;/a&gt; world and have gone through the many &lt;a href=&#34;https://melbjs-preso.angularftw.com/##4.0&#34;&gt;emotions&lt;/a&gt; other developers have &lt;a href=&#34;https://www.bennadel.com/blog/2439-My-Experience-With-AngularJS-The-Super-heroic-JavaScript-MVW-Framework.htm&#34;&gt;expressed&lt;/a&gt;. One thing that is lacking is best practice on testing, although &lt;a href=&#34;https://www.yearofmoo.com/2013/01/full-spectrum-testing-with-angularjs-and-testacular.html&#34;&gt;yearofmoo&lt;/a&gt; has a huge article on testing which improves this greatly. I still had some trouble and I thought I’d post this to help others.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Multi-level Source maps</title>
      <link>https://ryanseddon.com/javascript/multi-level-sourcemaps/</link>
      <pubDate>Fri, 02 Nov 2012 09:43:27 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/multi-level-sourcemaps/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://ryanseddon.com/javascript/source-mapping&#34;&gt;Source maps&lt;/a&gt; are awesome but one issue is that compiling from x-lang to JavaScript is a single level of mapping, if you want to go from x-lang &amp;gt; JavaScript &amp;gt; minified JavaScript you couldn’t as closure compiler, currently, only has a single level of mapping, until now. &lt;a href=&#34;https://github.com/mishoo/UglifyJS2&#34;&gt;UglifyJS2&lt;/a&gt; allows you to specify an input source map from the first stage of compilation, enabling multi-level mapping.&lt;/p&gt;&#xA;&lt;p&gt;Check out the following demonstration showing multi-level source maps for TypeScript and Coffeescript. &lt;!-- raw HTML omitted --&gt;If you haven’t enabled source maps you can do so in Chrome and WebKit Nightly by opening the dev tools &amp;gt; clicking the cog in the lower right corner &amp;gt; general &amp;gt; enable source maps&lt;!-- raw HTML omitted --&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weird behaviour with optgroups in iOS6 Safari</title>
      <link>https://ryanseddon.com/html/optgroup-ios6/</link>
      <pubDate>Wed, 10 Oct 2012 11:01:34 +0000</pubDate>
      <guid>https://ryanseddon.com/html/optgroup-ios6/</guid>
      <description>&lt;p&gt;So recently the company I work for has been getting quite a few complaints on our location dropdown randomly (un)selecting country locations in iOS6 Safari. Thinking at first it may be something to do with our code I quickly created a reduced &lt;a href=&#34;https://codepen.io/ryanseddon/pen/CnEJl&#34;&gt;test case&lt;/a&gt; that stripped everything away except for the select in question and the behaviour persisted.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Extreme specificity overriding a CSS ID with 256 chained Classes</title>
      <link>https://ryanseddon.com/css/extreme-specificity/</link>
      <pubDate>Fri, 17 Aug 2012 03:27:58 +0000</pubDate>
      <guid>https://ryanseddon.com/css/extreme-specificity/</guid>
      <description>&lt;p&gt;The other day Chris Coyier created a &lt;a href=&#34;https://codepen.io/chriscoyier/pen/lzjqh&#34;&gt;test case&lt;/a&gt; demonstrating that chaining together 256 classes will give it greater specificity than an id, in theory it shouldn’t. But in IE, Mozilla and WebKit browsers it does, Opera on the other hand upholds the specificity. Not familiar with CSS specificity then take a look at Estelle Weyl’s hilariously informative &lt;a href=&#34;https://specifishity.com/&#34;&gt;specifishity chart&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Curtain reveal effect using CSS</title>
      <link>https://ryanseddon.com/css/reveal-effect/</link>
      <pubDate>Wed, 18 Jul 2012 11:11:49 +0000</pubDate>
      <guid>https://ryanseddon.com/css/reveal-effect/</guid>
      <description>&lt;p&gt;I recently redesigned my site and wanted to add a little fun effect at the bottom of the page (go on scroll down I’ll wait) that looked liked the whole website was sliding up and revealing a secret section under the footer and I wanted to do it without JavaScript.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bunyip: client-side unit testing made easy</title>
      <link>https://ryanseddon.com/javascript/bunyip/</link>
      <pubDate>Tue, 05 Jun 2012 12:37:11 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/bunyip/</guid>
      <description>&lt;p&gt;Let’s face it doing thorough client-side unit testing fills me with rage, throw mobile browsers into the mix and I want to start flipping tables. There are tools out there to somewhat tackle this issue but they either require painful setups or want you to rewrite your unit tests using their framework. What if I told you there’s a tool that is easy to get up and running, doesn’t require you to rewrite your tests and allows you do it all from the command line in desktop and mobile browsers. Watch a video showing it working.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing on Mobile devices</title>
      <link>https://ryanseddon.com/mobile/testing-devices/</link>
      <pubDate>Wed, 28 Mar 2012 08:58:41 +0000</pubDate>
      <guid>https://ryanseddon.com/mobile/testing-devices/</guid>
      <description>&lt;p&gt;A while back Brad Frost posted a very useful breakdown on &lt;a href=&#34;https://bradfrostweb.com/blog/mobile/test-on-real-mobile-devices-without-breaking-the-bank/&#34;&gt;testing mobile devices&lt;/a&gt; and how to do it without breaking the bank. This post is kind of an extension to it but pointing to other useful resources that I have come across and used.&lt;/p&gt;&#xA;&lt;p&gt;Frost went down the route of physical devices, what you should test and their breakdown in prices. This post will be a list of services I have come across for testing on a vast array mobile devices without having to purchase said devices.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introduction to JavaScript Source Maps</title>
      <link>https://ryanseddon.com/javascript/source-mapping/</link>
      <pubDate>Wed, 21 Mar 2012 23:55:26 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/source-mapping/</guid>
      <description>&lt;p&gt;Have you ever found yourself wishing you could keep your client-side code readable and more importantly debuggable even after you’ve combined and minified it, without impacting performance? Well now you can through the magic of &lt;a href=&#34;https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?hl=en_US&amp;amp;pli=1&amp;amp;pli=1&#34;&gt;source maps&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A short Modernizr course</title>
      <link>https://ryanseddon.com/css/modernizr-course/</link>
      <pubDate>Wed, 11 Jan 2012 22:57:34 +0000</pubDate>
      <guid>https://ryanseddon.com/css/modernizr-course/</guid>
      <description>&lt;p&gt;Last year, I did a quick 5 min presentation on some of the features available in Modernizr for &lt;a href=&#34;https://whatdoyouknow.webdirections.org/videos/all-up-in-your-grill-with-modernizr&#34;&gt;&lt;em&gt;Web Directions What Do You Know&lt;/em&gt;&lt;/a&gt; event. From there, Sitepoint &amp;amp; Learnable’s Kevin Yank asked me to put together a short course for &lt;a href=&#34;https://learnable.com&#34;&gt;learnable.com&lt;/a&gt; based on the presentation. So after working on the occasional weekend I put it all together and got it launched just before xmas 2011.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Playing with the clipboard in iOS safari</title>
      <link>https://ryanseddon.com/javascript/ios-clipboard/</link>
      <pubDate>Wed, 21 Dec 2011 10:33:16 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/ios-clipboard/</guid>
      <description>&lt;p&gt;So the other day it hit me that since iOS safari supports contenteditbale it should surely have support the clipboard events and other handy bits and pieces. Like any good hacker I created a &lt;a href=&#34;https://ryanseddon.com/demo/clipboard/&#34;&gt;testcase&lt;/a&gt; to find out basic support of events and getting selection range values, and as expected the support is pretty good. Let’s dive deeper.&lt;/p&gt;</description>
    </item>
    <item>
      <title>addEventListener, handleEvent and passing objects</title>
      <link>https://ryanseddon.com/javascript/handleevent/</link>
      <pubDate>Fri, 21 Oct 2011 09:47:20 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/handleevent/</guid>
      <description>&lt;p&gt;Here’s a super awesome trick I had no idea about until someone pointed out you could do this. &lt;code&gt;addEventListener&lt;/code&gt; can take an object as a second argument that will look for a method called &lt;a href=&#34;https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventListener-handleEvent&#34;&gt;&lt;code&gt;handleEvent&lt;/code&gt;&lt;/a&gt; and call it! No need for binding “this” so it will pass around the context correctly, the context is the object you’ve just set as the event listener callback.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fullscreen HTML5 video</title>
      <link>https://ryanseddon.com/javascript/fullscreen/</link>
      <pubDate>Mon, 10 Oct 2011 09:38:10 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/fullscreen/</guid>
      <description>&lt;p&gt;In preparation for a talk I’m doing at &lt;a href=&#34;https://south11.webdirections.org/program/development#remote-debugging-landscape&#34; title=&#34;Remote debugging landscape&#34;&gt;Web Directions South&lt;/a&gt; I needed to be able to put video into fullscreen mode from within my HTML based slides. In order to do this I imagined I would of needed to use flash but thankfully Webkit nightly, Chrome dev and Firefox nightly have added the ability to put HTML5 videos, and other elements, into fullscreen mode using javascript. The &lt;a href=&#34;https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html&#34; title=&#34;FullScreen Editor Draft API specification&#34;&gt;FullScreen API&lt;/a&gt; now updated to point to official editor draft, thanks &lt;a href=&#34;#comment-2743&#34;&gt;Hans&lt;/a&gt;!.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Talks</title>
      <link>https://ryanseddon.com/speaking/</link>
      <pubDate>Sun, 14 Aug 2011 01:18:50 +0000</pubDate>
      <guid>https://ryanseddon.com/speaking/</guid>
      <description>&lt;p&gt;I love writing about web tech and now I’m starting to speak about web tech! Here you’ll find links to slides I’ve talked about and upcoming events.&lt;/p&gt;&#xA;&lt;p&gt;If you’d like to contact me about speaking somewhere hit me up through the &lt;a href=&#34;https://ryanseddon.com/contact&#34;&gt;contact&lt;/a&gt; page.&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;</description>
    </item>
    <item>
      <title>Handling high resolution sprite images with CSS3</title>
      <link>https://ryanseddon.com/css/high-res-sprites/</link>
      <pubDate>Wed, 15 Jun 2011 12:41:09 +0000</pubDate>
      <guid>https://ryanseddon.com/css/high-res-sprites/</guid>
      <description>&lt;p&gt;The iPhone 4 has introduced a new challenge to web developers due to its retina display using a higher dpi than most devices. What looked sharp in desktop browsers and other lower dpi devices appears blurry and pixelated on the iPhone 4 and potentially other devices which will have higher dpi screens. The current solution is to have two sets of images one for general and one for high dpi screens. You then switch it up using media queries depending on the screens dpi, this has been &lt;a href=&#34;https://blog.iwalt.com/2010/06/targeting-the-iphone-4-retina-display-with-css3-media-queries.html&#34;&gt;documented&lt;/a&gt; and &lt;a href=&#34;https://www.lukew.com/ff/entry.asp?1142&#34;&gt;discussed&lt;/a&gt; many &lt;a href=&#34;https://aralbalkan.com/3331&#34;&gt;times&lt;/a&gt;. Let’s try a different approach.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I scope, you scope, we all scope for NoScope! JS style element injection quirks in IE</title>
      <link>https://ryanseddon.com/javascript/noscope/</link>
      <pubDate>Wed, 13 Apr 2011 12:18:09 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/noscope/</guid>
      <description>&lt;p&gt;The other day I was writing some updates and improvements for &lt;a href=&#34;https://www.modernizr.com/&#34;&gt;Modernizr&lt;/a&gt;, one to detect for generated content support and two to improve stylesheet and element injection. Modernizr already in a few places inserts a stylesheet and a corresponding element to do some tests e.g. &lt;code&gt;generatedcontent&lt;/code&gt;, &lt;code&gt;touch&lt;/code&gt;, &lt;code&gt;css3transforms&lt;/code&gt; and a few others. All this happened multiple times; each test would inject an element and an inline style element, do its test then remove both elements. All this happens while the page is loading and as you can see the more tests that involve these steps exponentially grow the number of times it needs to touch the DOM.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Remote debugging with jsconsole, a different take</title>
      <link>https://ryanseddon.com/javascript/remote-debug/</link>
      <pubDate>Mon, 07 Mar 2011 11:15:05 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/remote-debug/</guid>
      <description>&lt;p&gt;Ever wanted to remotely access the DOM of a mobile device so you could make changes, test ideas and generally just have a bit of fun. I know I have and I’ve been hacking to create a proof of concept piggy backed on the development of two great projects. The first is Remy Sharps awesome little &lt;a href=&#34;https://jsconsole.com/&#34;&gt;jsconsole web app&lt;/a&gt; that lets you do a bunch of cool stuff using a simple yet elegant interface. The second is a &lt;a href=&#34;https://browsersocket.org/&#34;&gt;Firefox plugin&lt;/a&gt; that allows Firefox to act as a WebSocket server and receive and delegate messages sent from a client.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting fancy with the console</title>
      <link>https://ryanseddon.com/javascript/console/</link>
      <pubDate>Wed, 23 Feb 2011 11:36:42 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/console/</guid>
      <description>&lt;p&gt;The trusty &lt;code&gt;console.log()&lt;/code&gt; method serves a great functional purpose to write messages to the developer console. But did you know the console object has around twenty other methods you can use? I rarely see developers tapping into the extra power the console provides other than using it as a non-blocking alert. Let’s change that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I’ll have the DOMFileSystem with a side of read/write access please…</title>
      <link>https://ryanseddon.com/javascript/filesystem/</link>
      <pubDate>Thu, 02 Dec 2010 13:44:42 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/filesystem/</guid>
      <description>&lt;p&gt;Filesystem access has been a pipe dream for web developers for many years. With the ever evolving complexity of web apps and their need to potentially process large amounts of data, filesystem access is the next evolutionary step in order to push web apps to the next level. Thankfully, smart people have been thinking about these issues and defining new and useful specifications that fill those gaps. Eric Uhrhane of Google has been working on the working draft of the &lt;a href=&#34;https://dev.w3.org/2009/dap/file-system/file-dir-sys.html&#34;&gt;File API: Directories and System&lt;/a&gt; specification which defines a set of APIs to create a sandboxed filesystem where a web app can read and write data to.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The H5F library, emulate the HTML5 forms chapter</title>
      <link>https://ryanseddon.com/javascript/h5f/</link>
      <pubDate>Wed, 29 Sep 2010 11:33:17 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/h5f/</guid>
      <description>&lt;p&gt;Recently I wrote an article for A List Apart about &lt;a href=&#34;https://www.alistapart.com/articles/forward-thinking-form-validation&#34;&gt;Forward thinking form validation&lt;/a&gt; and I introduced a script I wrote that emulates some of the new HTML Forms chapter functionality in older browsers, allowing a developer to use all these new features and have it work the same across the board.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Drag out files like Gmail</title>
      <link>https://ryanseddon.com/html5/gmail-dragout/</link>
      <pubDate>Mon, 16 Aug 2010 12:53:42 +0000</pubDate>
      <guid>https://ryanseddon.com/html5/gmail-dragout/</guid>
      <description>&lt;p&gt;Google in their quest to keep me busy in trying to figure out how they do their innovative features in Gmail are at it again. First it was &lt;a href=&#34;https://ryanseddon.com/javascript/gmail-upload&#34;&gt;drag and drop uploading&lt;/a&gt; which used a clever trick to make it work in Chrome which currently doesn’t support the FileReader in their stable release. Now they’ve added the ability to drag out attachments to your file system, allowing you to bypass the usual method of the save dialog.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pure CSS collapsible tree menu</title>
      <link>https://ryanseddon.com/css/css-tree-menu/</link>
      <pubDate>Wed, 14 Jul 2010 11:52:53 +0000</pubDate>
      <guid>https://ryanseddon.com/css/css-tree-menu/</guid>
      <description>&lt;p&gt;The classic tree view, we all know it, it’s used everywhere and it definitely can be useful in the right context. I’ve seen various examples about doing it with CSS and they’ve all required JavaScript. Not content with any of those solutions I investigated doing it with pure CSS, I got a good head start from my &lt;a href=&#34;https://ryanseddon.com/css/custom-inputs-using-css&#34;&gt;Custom Radio and Checkbox inputs&lt;/a&gt; article. From there I’ve come up with a solution that works pretty well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How Gmail’s drag and drop works and why it’s not supported in Safari</title>
      <link>https://ryanseddon.com/javascript/gmail-upload/</link>
      <pubDate>Wed, 21 Apr 2010 12:42:51 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/gmail-upload/</guid>
      <description>&lt;p&gt;Recently Gmail pushed out an update that allowed users to drag and drop files from desktop to Gmail and have them automatically uploaded. Being the web geek I am I had to figure out how it functioned. Firefox was easy and I have covered &lt;a href=&#34;https://ryanseddon.com/javascript/fileapi&#34;&gt;drag and drop uploading&lt;/a&gt; already. They also mentioned in their post that Chrome was supported but I know Chrome is yet to implement the File API. Most intriguing was that it doesn’t work in Safari?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Futurebox, lightbox without the javascript and target pseudo-class</title>
      <link>https://ryanseddon.com/css/futurebox3/</link>
      <pubDate>Sat, 10 Apr 2010 02:05:14 +0000</pubDate>
      <guid>https://ryanseddon.com/css/futurebox3/</guid>
      <description>&lt;p&gt;So I recently released a &lt;a href=&#34;https://ryanseddon.com/xhtml/futurebox&#34;&gt;revised version of Futurebox&lt;/a&gt; which added a lot of functionality. But one thing was nagging me, the fact that it utilised the &lt;a href=&#34;https://www.w3.org/TR/css3-selectors/#target-pseudo&#34;&gt;target pseudo-class&lt;/a&gt; to hijack in page anchors which has a few side effects that can create some major drawbacks to the technique. One being that if you click multiple futurebox links and then click the browser back button it will go through all the previous overlays that were activated due to the natural behaviour of in page anchors. The other drawback, clicking an in page anchor can cause the page to abruptly jump as it tries to bring the anchor location to the top of the page.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Is that a Speedo in your pocket?</title>
      <link>https://ryanseddon.com/css/pocket-speedo/</link>
      <pubDate>Sat, 13 Mar 2010 04:11:25 +0000</pubDate>
      <guid>https://ryanseddon.com/css/pocket-speedo/</guid>
      <description>&lt;p&gt;Why yes it is…&lt;/p&gt;&#xA;&lt;p&gt;I’ve been sitting on this little idea for a while and as a bit of fun I finally got around to putting it together and properly testing it. Basically on an iPhone with geolocation support (3.0+), I have set up a little web app that will get the speed from the GPS and move the speedometer needle according to your current speed in kilometres.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Custom radio and checkbox inputs using CSS</title>
      <link>https://ryanseddon.com/css/custom-inputs-using-css/</link>
      <pubDate>Fri, 19 Feb 2010 05:13:08 +0000</pubDate>
      <guid>https://ryanseddon.com/css/custom-inputs-using-css/</guid>
      <description>&lt;p&gt;In my never ending quest to find weird and wonderful ways to abuse CSS and all its little intricacies, I have come up with a pretty good way of using CSS to create custom radio and checkbox inputs without JavaScript, that are accessible, keyboard controlled, don’t use any hacks and degrade nicely in non supporting browsers. The journey wasn’t easy and I was on the brink of filing it in the “to crazy” folder, never to be seen again. Luckily I had a brain wave that paid off and actually allowed this to be a very viable solution that degrades beautifully and works in 80% of the browsers. This is my story.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Web Notifications</title>
      <link>https://ryanseddon.com/html5/web-notifications/</link>
      <pubDate>Sat, 06 Feb 2010 06:40:58 +0000</pubDate>
      <guid>https://ryanseddon.com/html5/web-notifications/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://dvcs.w3.org/hg/notifications/raw-file/tip/Overview.html&#34;&gt;Web Notifications&lt;/a&gt; allows users to get updates on a webpage even if they’re not looking at it, shown to them through small notification boxes, think &lt;a href=&#34;https://growl.info/screenshots.php&#34;&gt;growl&lt;/a&gt;. This opens up some great potential for the current web apps out there. When you get a new email it could popup a little notification much like our desktop email clients do now or your twitter page could let you know when new @replies have come in, the possibilities are endless.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Even better image preloading with CSS2</title>
      <link>https://ryanseddon.com/css/even-better-image-preloading-with-css2/</link>
      <pubDate>Tue, 05 Jan 2010 08:35:17 +0000</pubDate>
      <guid>https://ryanseddon.com/css/even-better-image-preloading-with-css2/</guid>
      <description>&lt;p&gt;Recently I read an article on &lt;a href=&#34;https://perishablepress.com/press/2010/01/04/preload-images-css3/&#34;&gt;better image preloading using CSS3&lt;/a&gt; which presented a clever idea using CSS3 &lt;a href=&#34;https://www.w3.org/TR/2009/CR-css3-background-20091217/#layering&#34;&gt;multiple background images&lt;/a&gt; to preload images on one element as opposed to another method of having containers for each image. As of writing the support for multiple backgrounds is fairly sparse with webkit having the best support (Safari 3+ &amp;amp; Chrome 1+), Firefox is introducing this in the upcoming 3.6 release.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Futurebox, revisited</title>
      <link>https://ryanseddon.com/css/futurebox2/</link>
      <pubDate>Sat, 19 Dec 2009 05:12:01 +0000</pubDate>
      <guid>https://ryanseddon.com/css/futurebox2/</guid>
      <description>&lt;p&gt;Earlier this year I unleashed &lt;a href=&#34;https://ryanseddon.com/xhtml/futurebox&#34;&gt;futurebox&lt;/a&gt; into the wild. It got a whole lot more attention than I anticipated and I got some great feedback. Since then, I have been slowly working on a new version of futurebox which incorporates many new features.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The File API has changed</title>
      <link>https://ryanseddon.com/html5/fileapi/</link>
      <pubDate>Thu, 10 Dec 2009 06:53:52 +0000</pubDate>
      <guid>https://ryanseddon.com/html5/fileapi/</guid>
      <description>&lt;p&gt;Recently I have been touting how awesome and revolutionary the &lt;a href=&#34;https://www.w3.org/TR/FileAPI/&#34;&gt;File API&lt;/a&gt; is through a &lt;a href=&#34;https://ryanseddon.com/javascript/drag-and-drop-upload&#34;&gt;few&lt;/a&gt; &lt;a href=&#34;https://ryanseddon.com/javascript/font-dragr&#34;&gt;demo’s&lt;/a&gt;. After some feedback on webapps mailing list there have been some major changes to the API and how it works.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Font Dragr: A drag and drop font tester</title>
      <link>https://ryanseddon.com/html5/font-dragr/</link>
      <pubDate>Tue, 13 Oct 2009 07:39:27 +0000</pubDate>
      <guid>https://ryanseddon.com/html5/font-dragr/</guid>
      <description>&lt;p&gt;After playing with the new file API draft spec available in Firefox 3.6 with my &lt;a href=&#34;https://ryanseddon.com/javascript/drag-and-drop-upload&#34;&gt;drag and drop upload article&lt;/a&gt;. I had another idea when I was playing with custom fonts, @font-face, in the browser. What if you could drag an drop a font file (otf, ttf, svg, woff) from your desktop into the browser and have text rendered on the fly using any available valid font.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Make IE awesome by turning it into Google Chrome</title>
      <link>https://ryanseddon.com/html5/make-ie-awesome/</link>
      <pubDate>Wed, 23 Sep 2009 12:15:15 +0000</pubDate>
      <guid>https://ryanseddon.com/html5/make-ie-awesome/</guid>
      <description>&lt;p&gt;As I’m sure you all know by now Google made an announcement about their &lt;a href=&#34;https://blog.chromium.org/2009/09/introducing-google-chrome-frame.html&#34;&gt;Chrome Frame plugin for IE&lt;/a&gt; that turns the Trident rendering engine into the Chrome rendering engine giving IE access to the awesome power that is &lt;a href=&#34;https://code.google.com/chrome/chromeframe/&#34;&gt;Chrome&lt;/a&gt;. No longer will IE miss out on those awesome new features in CSS3 &amp;amp; HTML5 the more competent browsers enjoy today such as the soon to be released &lt;a href=&#34;https://wave.google.com/&#34;&gt;Google Wave&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Drag and drop file uploading using JavaScript</title>
      <link>https://ryanseddon.com/html5/drag-and-drop-upload/</link>
      <pubDate>Wed, 26 Aug 2009 08:52:39 +0000</pubDate>
      <guid>https://ryanseddon.com/html5/drag-and-drop-upload/</guid>
      <description>&lt;p&gt;With the recent announcement of the &lt;a href=&#34;https://dev.w3.org/2006/webapi/FileUpload/publish/FileAPI.html&#34;&gt;File API&lt;/a&gt; draft specification being published I’m sure a lot of people were confused as to what it could really do and why it is truly a powerful API. Firefox’s latest alpha release of their 3.6 browser, aka Namoroka, is the first to implement this new draft specification.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Create the accordion effect using CSS3</title>
      <link>https://ryanseddon.com/css/accordian-effect-using-css/</link>
      <pubDate>Wed, 05 Aug 2009 13:26:25 +0000</pubDate>
      <guid>https://ryanseddon.com/css/accordian-effect-using-css/</guid>
      <description>&lt;p&gt;Recently I have been playing around with &lt;a href=&#34;https://webkit.org/blog/324/css-animation-2/&#34;&gt;CSS transitions and animations&lt;/a&gt; as implemented in webkit based browsers such as Safari and Chrome. They have been submitted to the W3C for consideration in the &lt;a href=&#34;https://www.w3.org/TR/css3-transitions/&#34;&gt;CSS3 spec&lt;/a&gt; so hopefully we should see more browsers support this soon, Firefox 3.5 supports &lt;a href=&#34;https://developer.mozilla.org/En/CSS/Using_CSS_transforms&#34;&gt;CSS transforms&lt;/a&gt; which was developed by the webkit people to work alongside CSS animations &amp;amp; transitions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Real text rotation with CSS</title>
      <link>https://ryanseddon.com/css/real-text-rotation-with-css/</link>
      <pubDate>Wed, 29 Jul 2009 11:27:22 +0000</pubDate>
      <guid>https://ryanseddon.com/css/real-text-rotation-with-css/</guid>
      <description>&lt;p&gt;Just saw a great post on &lt;a href=&#34;https://snook.ca/s/952&#34;&gt;Jonathan Snooks’ blog&lt;/a&gt; about doing text rotation with CSS and how to accomplish it in IE using IE propriety &lt;a href=&#34;https://msdn.microsoft.com/en-us/library/ms532918%28VS.85%29.aspx&#34;&gt;&lt;em&gt;filter&lt;/em&gt; basic image&lt;/a&gt; property to rotate a text block. But there is a better way using CSS3 &lt;em&gt;writing-mode&lt;/em&gt; property that has been in IE since version 5.5.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Accessing the GPS in iPhone Safari</title>
      <link>https://ryanseddon.com/javascript/geolocation-iphone/</link>
      <pubDate>Wed, 08 Jul 2009 13:15:18 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/geolocation-iphone/</guid>
      <description>&lt;p&gt;Finally with the release of the 3.0 firmware update to the iPhone we now have access to the GPS coordinates in Safari. Using the &lt;a href=&#34;https://www.w3.org/TR/geolocation-API/&#34;&gt;W3C Geolocation API&lt;/a&gt; we can access the users position much the same way a native app would. The user can either allow or disallow the current websites’ access to your location.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Determine iPhone orientation using CSS</title>
      <link>https://ryanseddon.com/css/iphone-orientation-css/</link>
      <pubDate>Mon, 29 Jun 2009 11:08:19 +0000</pubDate>
      <guid>https://ryanseddon.com/css/iphone-orientation-css/</guid>
      <description>&lt;p&gt;With the beta of Firefox 3.5 showcasing &lt;a href=&#34;https://hacks.mozilla.org/2009/06/35-days/&#34;&gt;35 new features over 35 days&lt;/a&gt;, the article on &lt;a href=&#34;https://hacks.mozilla.org/2009/06/media-queries/&#34;&gt;CSS3 media queries&lt;/a&gt; stuck out, the orientation detection really got my attention and immediately put my thought process to mobile devices, in my case the iPhone. I thought this is great maybe this has been snuck into the iPhone 3.0, unfortunately for us it wasn’t. That didn’t stop me and I got thinking about how it could be done if at all on the iPhone without using JavaScript.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Futurebox, lightbox without the JavaScript</title>
      <link>https://ryanseddon.com/css/futurebox/</link>
      <pubDate>Sat, 20 Jun 2009 06:42:04 +0000</pubDate>
      <guid>https://ryanseddon.com/css/futurebox/</guid>
      <description>&lt;p&gt;I was playing around the other day and had a bright spark. Is it possible to do the “lightbox” effect without JavaScript? The answer is yes! Thanks to the &lt;a href=&#34;https://www.w3.org/TR/css3-selectors/#target-pseudo&#34;&gt;:target pseudo class&lt;/a&gt;. Without further ado I introduce Futurebox.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to create offline webapps on the iPhone</title>
      <link>https://ryanseddon.com/css/how-to-create-offline-webapps-on-the-iphone/</link>
      <pubDate>Tue, 28 Apr 2009 04:30:46 +0000</pubDate>
      <guid>https://ryanseddon.com/css/how-to-create-offline-webapps-on-the-iphone/</guid>
      <description>&lt;p&gt;Recently &lt;a href=&#34;https://googlemobile.blogspot.com/2009/04/gmail-gets-new-engine-for-iphone-and.html&#34;&gt;Google launched their latest mobile version of Gmail&lt;/a&gt; optimised for iPhone and Android based browsers. One of the features that stood out was the offline access thanks to the browsers support of &lt;a href=&#34;https://www.w3.org/TR/offline-webapps/#offline&#34;&gt;html5 application cache&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Top 8 April Fools websites of 2009</title>
      <link>https://ryanseddon.com/rant/top-8-april-fools-2009/</link>
      <pubDate>Sun, 05 Apr 2009 12:56:06 +0000</pubDate>
      <guid>https://ryanseddon.com/rant/top-8-april-fools-2009/</guid>
      <description>&lt;p&gt;Each and every the web produces some of the best April Fools jokes across the globe, some go all out and create fantastic often highly involved and well thought out pranks. Let take a look at the top 8.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Advanced hover states using CSS</title>
      <link>https://ryanseddon.com/css/advanced-hover-css/</link>
      <pubDate>Wed, 01 Apr 2009 12:30:13 +0000</pubDate>
      <guid>https://ryanseddon.com/css/advanced-hover-css/</guid>
      <description>&lt;p&gt;The hover pseudo-element in CSS can be a powerful tool in a front-end developers arsenal, it’s not only for changing a links colour. In good browsers the hover element can be applied to almost anything but unfortunately ie6 &amp;amp; 7 only support the hover selector on the anchor tag, but of course that isn’t going to stop us accomplishing something cool. I’ll be looking at using the hover pseudo-element to add some clever functionality when a user hovers over an image.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chroming: How google is changing the browser</title>
      <link>https://ryanseddon.com/rant/chroming-how-google-is-changing-the-browser/</link>
      <pubDate>Mon, 23 Mar 2009 11:23:22 +0000</pubDate>
      <guid>https://ryanseddon.com/rant/chroming-how-google-is-changing-the-browser/</guid>
      <description>&lt;p&gt;The browser wars are in full effect once again thanks to a healthy plethora of browsers available such as Safari, Firefox, Opera and Chrome all leading the way in the addition of new and exciting features in the upcoming &lt;a href=&#34;https://www.w3.org/TR/css3-roadmap/&#34;&gt;CSS3&lt;/a&gt; &amp;amp; &lt;a href=&#34;https://dev.w3.org/html5/spec/Overview.html&#34;&gt;html 5&lt;/a&gt; specifications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Don’t kill IE6, degrade it.</title>
      <link>https://ryanseddon.com/css/dont-kill-ie6-degrade-it/</link>
      <pubDate>Wed, 11 Mar 2009 11:12:57 +0000</pubDate>
      <guid>https://ryanseddon.com/css/dont-kill-ie6-degrade-it/</guid>
      <description>&lt;p&gt;Buzz about the internet has been rampant this year with many claiming that this is it, 2009 will be the death of IE6. &lt;a href=&#34;https://labs.finn.no/blog/finn-anbefaler-ie6-brukere-a-oppgradere-sin-nettleser&#34;&gt;A campaign in Norway has declared war&lt;/a&gt; with some great success. There are now some high profile Norwegian sites following with a week long campaign to educate users on more suitable browsers they can use instead of IE6.&lt;/p&gt;</description>
    </item>
    <item>
      <title>5 clever uses of the canvas tag</title>
      <link>https://ryanseddon.com/javascript/5-uses-canvas-tag/</link>
      <pubDate>Wed, 25 Feb 2009 11:17:01 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/5-uses-canvas-tag/</guid>
      <description>&lt;p&gt;If there is one thing that really gets me exciting about the upcoming HTML 5 specification it’s the canvas tag. This relatively simple tag holds so much potential and power thanks to the strong well thought out JavaScript API available to manipulate what appears on the canvas.&lt;/p&gt;</description>
    </item>
    <item>
      <title>iPhone bookmarklet, for saving bookmarklets</title>
      <link>https://ryanseddon.com/javascript/iphone-bookmarklet/</link>
      <pubDate>Sat, 14 Feb 2009 05:09:14 +0000</pubDate>
      <guid>https://ryanseddon.com/javascript/iphone-bookmarklet/</guid>
      <description>&lt;p&gt;Have you ever found a useful bookmarklet while browsing on your iPhone only to discover that you can’t actually save it directly from the phone. Frustrating I know, so much so that I decided to make my own bookmarklet that lets you save it on your phone. Let’s delve right in and take a look at the JavaScript involved.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sangraal layout: A true flexible, fluid CSS layout</title>
      <link>https://ryanseddon.com/css/sangraal-layout/</link>
      <pubDate>Tue, 10 Feb 2009 01:10:10 +0000</pubDate>
      <guid>https://ryanseddon.com/css/sangraal-layout/</guid>
      <description>&lt;p&gt;The wait is over, finally a real ‘sangraal’ layout that ticks all the boxes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;3 column, 2 column, 1 column it’s all flexible&lt;/li&gt;&#xA;&lt;li&gt;Fluid centre layout&lt;/li&gt;&#xA;&lt;li&gt;No need for negative margins.&lt;/li&gt;&#xA;&lt;li&gt;Works in ie5+, firefox 1+, opera 9.6+, safari 2+, chrome&lt;/li&gt;&#xA;&lt;li&gt;Minimal mark-up &amp;amp; clean CSS&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>A look at pure CSS IE6 min-width solutions</title>
      <link>https://ryanseddon.com/css/ie6-min-width-solutions/</link>
      <pubDate>Sun, 01 Feb 2009 03:18:12 +0000</pubDate>
      <guid>https://ryanseddon.com/css/ie6-min-width-solutions/</guid>
      <description>&lt;p&gt;As a large user base are still using Internet Explorer 6, with it’s extremely poor support for essential CSS, we as front-end developers need to come up with creative solutions to Internet Explorer’s limitations. One such limitation is the &lt;a href=&#34;https://www.w3.org/TR/CSS21/visudet.html#propdef-min-width&#34; title=&#34;CSS 2.1 specification details on the min-width property&#34;&gt;min-width&lt;/a&gt; property. In this article I will be looking at 2 pure CSS solutions each with their strengths and weaknesses.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why display: table shouldn’t be frowned upon</title>
      <link>https://ryanseddon.com/css/why-display-table-shouldnt-be-frowned-upon/</link>
      <pubDate>Sat, 24 Jan 2009 03:44:12 +0000</pubDate>
      <guid>https://ryanseddon.com/css/why-display-table-shouldnt-be-frowned-upon/</guid>
      <description>&lt;p&gt;I’ve seen a lot of commentary on the for, and against of using the CSS property &lt;em&gt;display: table&lt;/em&gt;, a lot of it negative. It takes us back to the dark ages, using tables for layout. These people tend to forget that CSS is purely presentational and setting something as &lt;em&gt;display: table&lt;/em&gt; is not the same as using the table tag. A screen reader going over a layout styled using the CSS table model will not get confused and muddled up. It will in fact breeze through a layout done correctly no matter which technique used floats or CSS tables. The display properties values: &lt;em&gt;table, table-cell, table-row&lt;/em&gt; etc are named due to the fact its presentational result is that best described of how a table would work and the similarities end there.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://ryanseddon.com/contact/</link>
      <pubDate>Wed, 10 Dec 2008 12:05:20 +0000</pubDate>
      <guid>https://ryanseddon.com/contact/</guid>
      <description>&lt;h2 class=&#34;subtitle02.subtitle03&#34; id=&#34;need-to-get-in-contact-fill-out-the-form-below&#34;&gt;Need to get in contact? Fill out the form below.&lt;/h2&gt;&#xA;&lt;p&gt;Please &lt;strong&gt;do not&lt;/strong&gt; contact me for the following&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SEO, seriously go jump off a cliff.&lt;/li&gt;&#xA;&lt;li&gt;Advertising, go through &lt;a href=&#34;https://adpacks.com&#34;&gt;adpacks.com&lt;/a&gt; if you want to advertise on my site&lt;/li&gt;&#xA;&lt;li&gt;Support for a project on github, go to github and file an issue&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Getting hammered with spam so turning off this contact form. If you can google, you can find my email that way&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://ryanseddon.com/about/</link>
      <pubDate>Wed, 10 Dec 2008 11:22:54 +0000</pubDate>
      <guid>https://ryanseddon.com/about/</guid>
      <description>&lt;h2 id=&#34;what-is-the-css-ninja&#34;&gt;What is The CSS Ninja?&lt;/h2&gt;&#xA;&lt;p&gt;The CSS Ninja is a personal blog and playground where I can put my skills and ideas out into the public.&lt;/p&gt;&#xA;&lt;h2 id=&#34;who-is-the-css-ninja&#34;&gt;Who is The CSS Ninja?&lt;/h2&gt;&#xA;&lt;p&gt;My name is &lt;a href=&#34;https://www.ryanseddon.com/&#34;&gt;Ryan&lt;/a&gt;, I live in the great city of Melbourne, Australia. I’ve been in the front-end developing game for a long time. This is my ‘lab’ where I post my thoughts, tutorials, trends and ramblings on front-end dev sexyness.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
