<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: canvas</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/canvas.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2025-02-04T20:53:29+00:00</updated><author><name>Simon Willison</name></author><entry><title>Animating Rick and Morty One Pixel at a Time</title><link href="https://simonwillison.net/2025/Feb/4/animating-rick-and-morty-one-pixel-at-a-time/#atom-tag" rel="alternate"/><published>2025-02-04T20:53:29+00:00</published><updated>2025-02-04T20:53:29+00:00</updated><id>https://simonwillison.net/2025/Feb/4/animating-rick-and-morty-one-pixel-at-a-time/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://danielchasehooper.com/posts/code-animated-rick/"&gt;Animating Rick and Morty One Pixel at a Time&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Daniel Hooper says he spent 8 months working on the post, the culmination of which is an animation of Rick from Rick and Morty, implemented in 240 lines of GLSL - the OpenGL Shading Language which apparently has been directly supported by browsers for many years.&lt;/p&gt;
&lt;p&gt;The result is a comprehensive GLSL tutorial, complete with interactive examples of each of the steps used to generate the final animation which you can tinker with directly on the page. It feels a bit like Logo!&lt;/p&gt;
&lt;p&gt;&lt;img alt="Animated demo - as I edit the shader code Rick's half-drawn eye pupils move from side to side live with my edits" src="https://static.simonwillison.net/static/2025/rick-edit.gif" /&gt;&lt;/p&gt;
&lt;p&gt;Shaders work by running code for each pixel to return that pixel's color - in this case the &lt;code&gt;color_for_pixel()&lt;/code&gt; function is wired up as the core logic of the shader.&lt;/p&gt;
&lt;p&gt;Here's &lt;a href="https://gist.github.com/danielchasehooper/72da5d9c286e5e94fdfb8e82bea288cc"&gt;Daniel's code for the live shader editor&lt;/a&gt; he built for this post. It looks like &lt;a href="https://gist.github.com/danielchasehooper/72da5d9c286e5e94fdfb8e82bea288cc#file-inline_shader-js-L47-L60"&gt;this&lt;/a&gt; is the function that does the most important work:&lt;/p&gt;
&lt;div class="highlight highlight-source-js"&gt;&lt;pre&gt;&lt;span class="pl-k"&gt;function&lt;/span&gt; &lt;span class="pl-en"&gt;loadShader&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;shaderSource&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-s1"&gt;shaderType&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
    &lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;shader&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s1"&gt;gl&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;createShader&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;shaderType&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
    &lt;span class="pl-s1"&gt;gl&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;shaderSource&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;shader&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-s1"&gt;shaderSource&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
    &lt;span class="pl-s1"&gt;gl&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;compileShader&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;shader&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
    &lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;compiled&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s1"&gt;gl&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;getShaderParameter&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;shader&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-s1"&gt;gl&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;COMPILE_STATUS&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
    &lt;span class="pl-k"&gt;if&lt;/span&gt; &lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-c1"&gt;!&lt;/span&gt;&lt;span class="pl-s1"&gt;compiled&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
        &lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;lastError&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s1"&gt;gl&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;getShaderInfoLog&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;shader&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
        &lt;span class="pl-s1"&gt;gl&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-en"&gt;deleteShader&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;shader&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
        &lt;span class="pl-k"&gt;return&lt;/span&gt; &lt;span class="pl-s1"&gt;lastError&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
    &lt;span class="pl-kos"&gt;}&lt;/span&gt;
    &lt;span class="pl-k"&gt;return&lt;/span&gt; &lt;span class="pl-s1"&gt;shader&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Where &lt;code&gt;gl&lt;/code&gt; is a &lt;code&gt;canvas.getContext("webgl2")&lt;/code&gt; &lt;code&gt;WebGL2RenderingContext&lt;/code&gt; object, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext"&gt;described by MDN here&lt;/a&gt;.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://lobste.rs/s/ycbpnz/animating_rick_morty_one_pixel_at_time"&gt;lobste.rs&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/animation"&gt;animation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webgl"&gt;webgl&lt;/a&gt;&lt;/p&gt;



</summary><category term="animation"/><category term="canvas"/><category term="javascript"/><category term="webgl"/></entry><entry><title>Instant colour fill with HTML Canvas</title><link href="https://simonwillison.net/2023/May/24/instant-colour-fill-with-html-canvas/#atom-tag" rel="alternate"/><published>2023-05-24T01:27:00+00:00</published><updated>2023-05-24T01:27:00+00:00</updated><id>https://simonwillison.net/2023/May/24/instant-colour-fill-with-html-canvas/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://shaneosullivan.wordpress.com/2023/05/23/instant-colour-fill-with-html-canvas/"&gt;Instant colour fill with HTML Canvas&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Shane O'Sullivan describes how to implement instant colour fill using HTML Canvas and some really clever tricks with Web Workers. A new technique to me is passing a &lt;code&gt;canvas.getImageData()&lt;/code&gt; object to a Web Worker via &lt;code&gt;worker.postMessage({action: "process", buffer: imageData.data.buffer}, [imageData.data.buffer])&lt;/code&gt; where that second argument is a list of objects to "transfer ownership of" - then the worker can create a new &lt;code&gt;ImageData()&lt;/code&gt;, populate it and transfer ownership of that back to the parent window.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=36049386"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webworkers"&gt;webworkers&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="javascript"/><category term="webworkers"/></entry><entry><title>μPlot</title><link href="https://simonwillison.net/2019/Oct/14/uplot/#atom-tag" rel="alternate"/><published>2019-10-14T23:03:56+00:00</published><updated>2019-10-14T23:03:56+00:00</updated><id>https://simonwillison.net/2019/Oct/14/uplot/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/leeoniya/uPlot"&gt;μPlot&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
“An exceptionally fast, tiny time series chart. [...] from a cold start it can create an interactive chart containing 150,000 data points in 40ms. [...] at &amp;lt; 10 KB, it’s likely the smallest and fastest time series plotter that doesn’t make use of WebGL shaders or WASM”

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/mikeal/status/1183872361755492352"&gt;@mikeal&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/charting"&gt;charting&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/graphing"&gt;graphing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="charting"/><category term="graphing"/><category term="javascript"/></entry><entry><title>Zdog</title><link href="https://simonwillison.net/2019/May/28/zdog/#atom-tag" rel="alternate"/><published>2019-05-28T21:59:27+00:00</published><updated>2019-05-28T21:59:27+00:00</updated><id>https://simonwillison.net/2019/May/28/zdog/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://zzz.dog/"&gt;Zdog&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Well this is absolutely delightful: Zdog is a pseudo-3D engine for canvas and SVG that outputs 3D models rendered as super-stylish flat shapes. It’s hard to describe with words—go play with the demos!

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/desandro/status/1133373535542489088"&gt;Dave DeSandro&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/3d"&gt;3d&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;&lt;/p&gt;



</summary><category term="3d"/><category term="canvas"/></entry><entry><title>VoxelSpace</title><link href="https://simonwillison.net/2017/Nov/24/voxelspace/#atom-tag" rel="alternate"/><published>2017-11-24T19:30:56+00:00</published><updated>2017-11-24T19:30:56+00:00</updated><id>https://simonwillison.net/2017/Nov/24/voxelspace/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/s-macke/VoxelSpace"&gt;VoxelSpace&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Lovely clear explanation of the voxel space landscape rendering technique used by NovaLogic for Comanche back in 1992, including a working JavaScript demo plus pseudo-code in Python.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=15772065"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="javascript"/></entry><entry><title>PaintbrushJS</title><link href="https://simonwillison.net/2010/Oct/9/mezzoblue/#atom-tag" rel="alternate"/><published>2010-10-09T11:53:00+00:00</published><updated>2010-10-09T11:53:00+00:00</updated><id>https://simonwillison.net/2010/Oct/9/mezzoblue/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://mezzoblue.com/archives/2010/10/07/paintbrushjs/"&gt;PaintbrushJS&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Impressive open source JavaScript library from Dave Shea for applying image filters (sharpen, blur, emboss, greyscale etc) to the canvas element.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dave-shea"&gt;dave-shea&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="dave-shea"/><category term="javascript"/><category term="recovered"/></entry><entry><title>canto.js: An Improved HTML5 Canvas API</title><link href="https://simonwillison.net/2010/Jul/29/cantojs/#atom-tag" rel="alternate"/><published>2010-07-29T09:39:00+00:00</published><updated>2010-07-29T09:39:00+00:00</updated><id>https://simonwillison.net/2010/Jul/29/cantojs/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.davidflanagan.com/2010/07/cantojs-an-impr.html"&gt;canto.js: An Improved HTML5 Canvas API&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Improved is an understatement: canto adds jQuery-style method chaining, the ability to multiple coordinates to e.g. lineTo at once, relative coordinate methods (regular Canvas does everything in terms of absolute coordinates), the ability to use degrees instead of radians, a rounded corner shortcut, a more convenient .revert() method and a simple parser that can understand SVG path expressions! The only catch: it uses getters and setters so won’t work in IE.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://ajaxian.com/archives/canto-js-an-improved-canvas-api"&gt;Ajaxian&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html5"&gt;html5&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/svg"&gt;svg&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/canto"&gt;canto&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/david-flanagan"&gt;david-flanagan&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="html5"/><category term="javascript"/><category term="svg"/><category term="recovered"/><category term="canto"/><category term="david-flanagan"/></entry><entry><title>Music Notation with HTML5 Canvas</title><link href="https://simonwillison.net/2010/May/12/notation/#atom-tag" rel="alternate"/><published>2010-05-12T08:53:00+00:00</published><updated>2010-05-12T08:53:00+00:00</updated><id>https://simonwillison.net/2010/May/12/notation/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://0xfe.blogspot.com/2010/05/music-notation-with-html5-canvas.html"&gt;Music Notation with HTML5 Canvas&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A pretty decent effort at rendering musical notation using JavaScript and the canvas element.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/music"&gt;music&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="javascript"/><category term="music"/><category term="recovered"/></entry><entry><title>Blowing up HTML5 video and mapping it into 3D space</title><link href="https://simonwillison.net/2010/Apr/21/blowing/#atom-tag" rel="alternate"/><published>2010-04-21T09:30:11+00:00</published><updated>2010-04-21T09:30:11+00:00</updated><id>https://simonwillison.net/2010/Apr/21/blowing/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.craftymind.com/2010/04/20/blowing-up-html5-video-and-mapping-it-into-3d-space/?reddit"&gt;Blowing up HTML5 video and mapping it into 3D space&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The canvas drawImage() method can take an HTML video element as its source, making all kinds of interesting effects possible. The author notes that performance was dramatically improved by copying the video frame in to a separate canvas element and then copying regions out of that element rather than grabbing regions from the video directly.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html5"&gt;html5&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/seanchristmann"&gt;seanchristmann&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/video"&gt;video&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="html5"/><category term="seanchristmann"/><category term="video"/></entry><entry><title>Flash CS5 will export to HTML5 Canvas</title><link href="https://simonwillison.net/2010/Apr/11/fxg/#atom-tag" rel="alternate"/><published>2010-04-11T18:33:01+00:00</published><updated>2010-04-11T18:33:01+00:00</updated><id>https://simonwillison.net/2010/Apr/11/fxg/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.9to5mac.com/Flash-html5-canvas-35409730"&gt;Flash CS5 will export to HTML5 Canvas&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This looks pretty awesome—Illustrator CS5 and Flash CS5 can export to a new “FXG” format, and Adobe are providing a JavaScript library to load that format via Ajax and render the contents (including Flash animations) in a canvas element. Could be great for displaying newspaper infographics on the iPad.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/adobe"&gt;adobe&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/flash"&gt;flash&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fxg"&gt;fxg&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html5"&gt;html5&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/illustrator"&gt;illustrator&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ipad"&gt;ipad&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/iphone"&gt;iphone&lt;/a&gt;&lt;/p&gt;



</summary><category term="adobe"/><category term="canvas"/><category term="flash"/><category term="fxg"/><category term="html5"/><category term="illustrator"/><category term="ipad"/><category term="iphone"/></entry><entry><title>Internet Explorer Platform Preview Guide for Developers</title><link href="https://simonwillison.net/2010/Mar/16/preview/#atom-tag" rel="alternate"/><published>2010-03-16T18:36:38+00:00</published><updated>2010-03-16T18:36:38+00:00</updated><id>https://simonwillison.net/2010/Mar/16/preview/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/ie/ff468705.aspx"&gt;Internet Explorer Platform Preview Guide for Developers&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Lots of SVG and CSS3 stuff, no mention of canvas here either though.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://ie.microsoft.com/testdrive/info/ReleaseNotes/Default.html"&gt;IE testdrive preview release notes&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/css3"&gt;css3&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html5"&gt;html5&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ie9"&gt;ie9&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/internet-explorer"&gt;internet-explorer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/microsoft"&gt;microsoft&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/svg"&gt;svg&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="css3"/><category term="html5"/><category term="ie9"/><category term="internet-explorer"/><category term="microsoft"/><category term="svg"/></entry><entry><title>An Early Look At IE9 for Developers</title><link href="https://simonwillison.net/2010/Mar/16/ie9/#atom-tag" rel="alternate"/><published>2010-03-16T18:11:25+00:00</published><updated>2010-03-16T18:11:25+00:00</updated><id>https://simonwillison.net/2010/Mar/16/ie9/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/ie/archive/2009/11/18/an-early-look-at-ie9-for-developers.aspx"&gt;An Early Look At IE9 for Developers&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Surprisingly, no mention of SVG or canvas and only a note in passing about HTML 5.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www.zeldman.com/"&gt;Jeffrey Zeldman&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html5"&gt;html5&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ie9"&gt;ie9&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/internet-explorer"&gt;internet-explorer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/microsoft"&gt;microsoft&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/svg"&gt;svg&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="html5"/><category term="ie9"/><category term="internet-explorer"/><category term="microsoft"/><category term="svg"/></entry><entry><title>Quoting Larry Masinter</title><link href="https://simonwillison.net/2010/Feb/15/adobe/#atom-tag" rel="alternate"/><published>2010-02-15T21:31:02+00:00</published><updated>2010-02-15T21:31:02+00:00</updated><id>https://simonwillison.net/2010/Feb/15/adobe/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://www.9to5mac.com/adobe-html5-objections-95496864#comment-66680"&gt;&lt;p&gt;No part of HTML5 is, or was ever, "blocked" in the W3C HTML Working Group -- not HTML5, not Canvas 2D Graphics, not Microdata, not Video -- not by me, not by Adobe. Neither Adobe nor I oppose, are fighting, are trying to stop, slow down, hinder, oppose, or harm HTML5, Canvas 2D Graphics, Microdata, video in HTML, or any of the other significant features in HTML5. Claims otherwise are false. Any other disclaimers needed?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://www.9to5mac.com/adobe-html5-objections-95496864#comment-66680"&gt;Larry Masinter&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/adobe"&gt;adobe&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html5"&gt;html5&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/larry-masinter"&gt;larry-masinter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/w3c"&gt;w3c&lt;/a&gt;&lt;/p&gt;



</summary><category term="adobe"/><category term="canvas"/><category term="html5"/><category term="larry-masinter"/><category term="w3c"/></entry><entry><title>Quoting Ian Hickson</title><link href="https://simonwillison.net/2010/Feb/15/hixie/#atom-tag" rel="alternate"/><published>2010-02-15T19:38:29+00:00</published><updated>2010-02-15T19:38:29+00:00</updated><id>https://simonwillison.net/2010/Feb/15/hixie/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://www.reddit.com/r/web_design/comments/b19ob/adobe_now_holding_up_publication_of_the_html5/c0kgxub"&gt;&lt;p&gt;At this point all I could honestly tell you from the point of view of the editor of several of the HTML5 documents being held up is that the W3C have said they're won't publish without the objections being resolved, and that the objection is from Adobe. I can't even tell what I could do to resolve the objection. It seems to be entirely a process-based objection.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://www.reddit.com/r/web_design/comments/b19ob/adobe_now_holding_up_publication_of_the_html5/c0kgxub"&gt;Ian Hickson&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/adobe"&gt;adobe&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hixie"&gt;hixie&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html5"&gt;html5&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ian-hickson"&gt;ian-hickson&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/process"&gt;process&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/w3c"&gt;w3c&lt;/a&gt;&lt;/p&gt;



</summary><category term="adobe"/><category term="canvas"/><category term="hixie"/><category term="html5"/><category term="ian-hickson"/><category term="process"/><category term="w3c"/></entry><entry><title>Lou's Pseudo 3d Page</title><link href="https://simonwillison.net/2010/Feb/8/pseudo/#atom-tag" rel="alternate"/><published>2010-02-08T11:21:18+00:00</published><updated>2010-02-08T11:21:18+00:00</updated><id>https://simonwillison.net/2010/Feb/8/pseudo/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.gorenfeld.net/lou/pseudo/"&gt;Lou&amp;#x27;s Pseudo 3d Page&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Spectacularly detailed exploration of the road graphics used in racing games prior to true 3D. This is a potential gold mine for anyone looking for a fun project to try out with canvas. Bonus points for comet integration—I’m still looking forward to the first real-time multiplayer game in the browser using comet and canvas.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/3d"&gt;3d&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/comet"&gt;comet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/game-design"&gt;game-design&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/graphics"&gt;graphics&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html5"&gt;html5&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;&lt;/p&gt;



</summary><category term="3d"/><category term="canvas"/><category term="comet"/><category term="game-design"/><category term="graphics"/><category term="html5"/><category term="javascript"/></entry><entry><title>Sketchpad - Online Paint/Drawing application</title><link href="https://simonwillison.net/2010/Feb/7/sketchpad/#atom-tag" rel="alternate"/><published>2010-02-07T10:45:51+00:00</published><updated>2010-02-07T10:45:51+00:00</updated><id>https://simonwillison.net/2010/Feb/7/sketchpad/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://mugtug.com/sketchpad/"&gt;Sketchpad - Online Paint/Drawing application&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Impressive canvas based bitmap drawing tool with an extremely smooth UI.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www.colorjack.com/blog/"&gt;Design News @ ColorJack&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sketchpad"&gt;sketchpad&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="sketchpad"/></entry><entry><title>jQSlickWrap</title><link href="https://simonwillison.net/2009/Nov/23/jqslickwrap/#atom-tag" rel="alternate"/><published>2009-11-23T07:44:41+00:00</published><updated>2009-11-23T07:44:41+00:00</updated><id>https://simonwillison.net/2009/Nov/23/jqslickwrap/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://jwf.us/projects/jQSlickWrap/"&gt;jQSlickWrap&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Clever jQuery plugin which allows text to wrap around irregularly shaped images, by processing the image with canvas and rewriting it as a sequence of floated horizontal bars of different widths. It’s a a modern variant of the the ragged float trick first introduced by Eric Meyer.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/css"&gt;css&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/eric-meyer"&gt;eric-meyer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/float"&gt;float&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jquery"&gt;jquery&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="css"/><category term="eric-meyer"/><category term="float"/><category term="jquery"/></entry><entry><title>cloud-crowd</title><link href="https://simonwillison.net/2009/Sep/21/cloudcrowd/#atom-tag" rel="alternate"/><published>2009-09-21T23:09:04+00:00</published><updated>2009-09-21T23:09:04+00:00</updated><id>https://simonwillison.net/2009/Sep/21/cloudcrowd/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/documentcloud/cloud-crowd"&gt;cloud-crowd&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
New parallel processing worker/job queue system with a strikingly elegant architecture. The central server is an HTTP server that manages job requests, which are farmed out to a number of node HTTP servers which fork off worker processes to do the work. All communication is webhook-style JSON, and the servers are implemented in Sinatra and Thin using a tiny amount of code. The web-based monitoring interface is simply beautiful, using canvas to display graphs showing the system’s overall activity.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cloudcrowd"&gt;cloudcrowd&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/http"&gt;http&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/message-queues"&gt;message-queues&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ruby"&gt;ruby&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sinatra"&gt;sinatra&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/thin"&gt;thin&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webhooks"&gt;webhooks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/workers"&gt;workers&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="cloudcrowd"/><category term="http"/><category term="json"/><category term="message-queues"/><category term="ruby"/><category term="sinatra"/><category term="thin"/><category term="webhooks"/><category term="workers"/></entry><entry><title>Dive Into HTML 5</title><link href="https://simonwillison.net/2009/Aug/20/diveintohtml5/#atom-tag" rel="alternate"/><published>2009-08-20T14:40:23+00:00</published><updated>2009-08-20T14:40:23+00:00</updated><id>https://simonwillison.net/2009/Aug/20/diveintohtml5/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://diveintohtml5.org/"&gt;Dive Into HTML 5&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Mark Pilgrim’s free online book on HTML 5—currently just one chapter on canvas (which neatly illustrates the coordinate system using a diagram rendered using canvas itself) but certain to become an invaluable resource for anyone looking to take advantage of HTML 5.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/books"&gt;books&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html5"&gt;html5&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mark-pilgrim"&gt;mark-pilgrim&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-standards"&gt;web-standards&lt;/a&gt;&lt;/p&gt;



</summary><category term="books"/><category term="canvas"/><category term="html5"/><category term="mark-pilgrim"/><category term="web-standards"/></entry><entry><title>Firefox 3.5 for developers</title><link href="https://simonwillison.net/2009/Jun/30/firefox/#atom-tag" rel="alternate"/><published>2009-06-30T18:08:34+00:00</published><updated>2009-06-30T18:08:34+00:00</updated><id>https://simonwillison.net/2009/Jun/30/firefox/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.mozilla.org/en/Firefox_3.5_for_developers"&gt;Firefox 3.5 for developers&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
It’s out today, and the feature list is huge. Highlights include HTML 5 drag ’n’ drop, audio and video elements, offline resources, downloadable fonts, text-shadow, CSS transforms with -moz-transform, localStorage, geolocation, web workers, trackpad swipe events, native JSON, cross-site HTTP requests, text API for canvas, defer attribute for the script element and TraceMonkey for better JS performance!


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/audio"&gt;audio&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/browsers"&gt;browsers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/crossdomain"&gt;crossdomain&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/csstransforms"&gt;csstransforms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dragndrop"&gt;dragndrop&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/firefox"&gt;firefox&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/firefox35"&gt;firefox35&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fonts"&gt;fonts&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geolocation"&gt;geolocation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html5"&gt;html5&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/localstorage"&gt;localstorage&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mozilla"&gt;mozilla&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/offlineresources"&gt;offlineresources&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/performance"&gt;performance&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/textshadow"&gt;textshadow&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tracemonkey"&gt;tracemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/video"&gt;video&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webworkers"&gt;webworkers&lt;/a&gt;&lt;/p&gt;



</summary><category term="audio"/><category term="browsers"/><category term="canvas"/><category term="crossdomain"/><category term="csstransforms"/><category term="dragndrop"/><category term="firefox"/><category term="firefox35"/><category term="fonts"/><category term="geolocation"/><category term="html5"/><category term="javascript"/><category term="json"/><category term="localstorage"/><category term="mozilla"/><category term="offlineresources"/><category term="performance"/><category term="textshadow"/><category term="tracemonkey"/><category term="video"/><category term="webworkers"/></entry><entry><title>Browsing my browsing</title><link href="https://simonwillison.net/2009/Apr/10/roo/#atom-tag" rel="alternate"/><published>2009-04-10T08:48:47+00:00</published><updated>2009-04-10T08:48:47+00:00</updated><id>https://simonwillison.net/2009/Apr/10/roo/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://rooreynolds.com/2009/04/05/browsing-my-browsing/"&gt;Browsing my browsing&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Roo Reynolds used the MeeTimer Firefox extension to gather statistics on his browsing habits, then extracted data directly from the SQLite database and generated his own graphs using PHP and the canvas element.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/firefox"&gt;firefox&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/meetimer"&gt;meetimer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/php"&gt;php&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rooreynolds"&gt;rooreynolds&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sqlite"&gt;sqlite&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="firefox"/><category term="javascript"/><category term="meetimer"/><category term="php"/><category term="rooreynolds"/><category term="sqlite"/></entry><entry><title>Protovis</title><link href="https://simonwillison.net/2009/Apr/10/protovis/#atom-tag" rel="alternate"/><published>2009-04-10T08:43:56+00:00</published><updated>2009-04-10T08:43:56+00:00</updated><id>https://simonwillison.net/2009/Apr/10/protovis/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://vis.stanford.edu/protovis/"&gt;Protovis&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
JavaScript graphing library based on canvas, with an elegant chaining style API.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/graphs"&gt;graphs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/protovis"&gt;protovis&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/visualisation"&gt;visualisation&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="graphs"/><category term="javascript"/><category term="protovis"/><category term="visualisation"/></entry><entry><title>cufon</title><link href="https://simonwillison.net/2009/Apr/6/cufon/#atom-tag" rel="alternate"/><published>2009-04-06T22:29:47+00:00</published><updated>2009-04-06T22:29:47+00:00</updated><id>https://simonwillison.net/2009/Apr/6/cufon/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://wiki.github.com/sorccu/cufon/about"&gt;cufon&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A promising alternative to sIFR, cufon uses VML on IE and canvas on other browsers to render custom fonts in the browser. You have to convert your font to JavaScript first, either using their free hosted tool or by installing the FontForge based server-side script yourself. The JavaScript encoded font file uses VML primitives to improve IE performance; the JavaScript library converts that to canvas calls for other, faster browsers.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/browsers"&gt;browsers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cufon"&gt;cufon&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fontforge"&gt;fontforge&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fonts"&gt;fonts&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/internet-explorer"&gt;internet-explorer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sifr"&gt;sifr&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/typography"&gt;typography&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vml"&gt;vml&lt;/a&gt;&lt;/p&gt;



</summary><category term="browsers"/><category term="canvas"/><category term="cufon"/><category term="fontforge"/><category term="fonts"/><category term="internet-explorer"/><category term="javascript"/><category term="sifr"/><category term="typography"/><category term="vml"/></entry><entry><title>Fixing IE by porting Canvas to Flash</title><link href="https://simonwillison.net/2009/Mar/15/azaus/#atom-tag" rel="alternate"/><published>2009-03-15T13:34:47+00:00</published><updated>2009-03-15T13:34:47+00:00</updated><id>https://simonwillison.net/2009/Mar/15/azaus/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.azarask.in/blog/post/flash-canvas/"&gt;Fixing IE by porting Canvas to Flash&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Implementing canvas using Flash is an obvious step, but personally I’m much more interested in an SVG renderer using Flash that finally brings non-animated SVGs to IE.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/flash"&gt;flash&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/internet-explorer"&gt;internet-explorer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/svg"&gt;svg&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="flash"/><category term="internet-explorer"/><category term="svg"/></entry><entry><title>jQuery Sparklines</title><link href="https://simonwillison.net/2009/Feb/27/sparklines/#atom-tag" rel="alternate"/><published>2009-02-27T20:43:04+00:00</published><updated>2009-02-27T20:43:04+00:00</updated><id>https://simonwillison.net/2009/Feb/27/sparklines/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.omnipotent.net/jquery.sparkline/"&gt;jQuery Sparklines&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Delightful Sparklines implementation, using canvas or VML in IE. A neat nod towards unobtrusiveness as well: you can specify your data as comma separated values inside a span, then use a single jQuery method call to convert the span in to a sparkline image.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gareth-watts"&gt;gareth-watts&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/graphs"&gt;graphs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jquery"&gt;jquery&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sparklines"&gt;sparklines&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vml"&gt;vml&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="gareth-watts"/><category term="graphs"/><category term="javascript"/><category term="jquery"/><category term="sparklines"/><category term="vml"/></entry><entry><title>OCR and Neural Nets in JavaScript</title><link href="https://simonwillison.net/2009/Jan/25/ocr/#atom-tag" rel="alternate"/><published>2009-01-25T00:00:28+00:00</published><updated>2009-01-25T00:00:28+00:00</updated><id>https://simonwillison.net/2009/Jan/25/ocr/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://ejohn.org/blog/ocr-and-neural-nets-in-javascript/"&gt;OCR and Neural Nets in JavaScript&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
John dissects the brilliant Greasemonkey script that solves simple captchas using the canvas element and HTML5’s getImageData API.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/captchas"&gt;captchas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/getimagedata"&gt;getimagedata&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/john-resig"&gt;john-resig&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ocr"&gt;ocr&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="captchas"/><category term="getimagedata"/><category term="greasemonkey"/><category term="javascript"/><category term="john-resig"/><category term="ocr"/></entry><entry><title>JSSpeccy</title><link href="https://simonwillison.net/2008/Oct/29/zx/#atom-tag" rel="alternate"/><published>2008-10-29T17:25:01+00:00</published><updated>2008-10-29T17:25:01+00:00</updated><id>https://simonwillison.net/2008/Oct/29/zx/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://matt.west.co.tt/spectrum/jsspeccy/"&gt;JSSpeccy&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A ZX Spectrum emulator written in Javascript.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/emulator"&gt;emulator&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jsspeccy"&gt;jsspeccy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/matt-westcott"&gt;matt-westcott&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/spectrum"&gt;spectrum&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/zxspectrum"&gt;zxspectrum&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="emulator"/><category term="javascript"/><category term="jsspeccy"/><category term="matt-westcott"/><category term="spectrum"/><category term="zxspectrum"/></entry><entry><title>typeface.js</title><link href="https://simonwillison.net/2008/Oct/27/typefacejs/#atom-tag" rel="alternate"/><published>2008-10-27T23:45:30+00:00</published><updated>2008-10-27T23:45:30+00:00</updated><id>https://simonwillison.net/2008/Oct/27/typefacejs/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://typeface.neocracy.org/"&gt;typeface.js&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Outstanding hack—renders custom fonts using VML in IE and canvas in everything else, using fonts that are defined as a set of vector paths stored using JSON.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fonts"&gt;fonts&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/typefacejs"&gt;typefacejs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/typography"&gt;typography&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vml"&gt;vml&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="fonts"/><category term="javascript"/><category term="json"/><category term="typefacejs"/><category term="typography"/><category term="vml"/></entry><entry><title>Antisocial</title><link href="https://simonwillison.net/2008/Oct/9/mattwestcott/#atom-tag" rel="alternate"/><published>2008-10-09T18:42:52+00:00</published><updated>2008-10-09T18:42:52+00:00</updated><id>https://simonwillison.net/2008/Oct/9/mattwestcott/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://matt.west.co.tt/demoscene/antisocial/"&gt;Antisocial&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Matt Westcott (a.k.a. Gasman) provides some technical background to his awesome Antisocial 3D canvas demo.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/3d"&gt;3d&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/demoscene"&gt;demoscene&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gasman"&gt;gasman&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/matt-westcott"&gt;matt-westcott&lt;/a&gt;&lt;/p&gt;



</summary><category term="3d"/><category term="canvas"/><category term="demoscene"/><category term="gasman"/><category term="javascript"/><category term="matt-westcott"/></entry><entry><title>Antisocial: a Javascript demo by Gasman</title><link href="https://simonwillison.net/2008/Oct/8/antisocial/#atom-tag" rel="alternate"/><published>2008-10-08T15:00:54+00:00</published><updated>2008-10-08T15:00:54+00:00</updated><id>https://simonwillison.net/2008/Oct/8/antisocial/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://antisocial.demozoo.org/"&gt;Antisocial: a Javascript demo by Gasman&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The demo is cool (3D on top of canvas); the “demotool” editor is simply amazing.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/3d"&gt;3d&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/antisocial"&gt;antisocial&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/demo"&gt;demo&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/demotool"&gt;demotool&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gasman"&gt;gasman&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/matt-westcott"&gt;matt-westcott&lt;/a&gt;&lt;/p&gt;



</summary><category term="3d"/><category term="antisocial"/><category term="canvas"/><category term="demo"/><category term="demotool"/><category term="gasman"/><category term="javascript"/><category term="matt-westcott"/></entry></feed>