<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: gifs</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/gifs.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2020-10-09T22:28:53+00:00</updated><author><name>Simon Willison</name></author><entry><title>Animating a commit based Sudoku game using Puppeteer</title><link href="https://simonwillison.net/2020/Oct/9/animating-using-puppeteer/#atom-tag" rel="alternate"/><published>2020-10-09T22:28:53+00:00</published><updated>2020-10-09T22:28:53+00:00</updated><id>https://simonwillison.net/2020/Oct/9/animating-using-puppeteer/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://dev.to/anishkny/animating-a-commit-based-sudoku-game-using-puppeteer-185f"&gt;Animating a commit based Sudoku game using Puppeteer&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This is really clever. There’s a GitHub repo that tracks progress in a game of Sudoku: Anish Karandikar wrote code which iterates through the game board state commit by commit, uses that state to generate an HTML table, passes that table to Puppeteer using a data: URI, renders a PNG of each stage and then concatenates those PNGs together into an animated GIF using the gifencoder Node.js library.

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


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/datauri"&gt;datauri&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gifs"&gt;gifs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/puppeteer"&gt;puppeteer&lt;/a&gt;&lt;/p&gt;



</summary><category term="datauri"/><category term="gifs"/><category term="puppeteer"/></entry><entry><title>Evolution of &lt;img&gt;: Gif without the GIF</title><link href="https://simonwillison.net/2017/Dec/4/mp4/#atom-tag" rel="alternate"/><published>2017-12-04T19:28:03+00:00</published><updated>2017-12-04T19:28:03+00:00</updated><id>https://simonwillison.net/2017/Dec/4/mp4/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://calendar.perfplanet.com/2017/animated-gif-without-the-gif/"&gt;Evolution of &amp;lt;img&amp;gt;: Gif without the GIF&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Safari Technology Preview lets you use &lt;code&gt;&amp;lt;img src="movie.mp4"&amp;gt;&lt;/code&gt;, for high quality animated gifs in 1/14th of the file size.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/cramforce/status/937746796951957504"&gt;Malte Ubl&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/gifs"&gt;gifs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/safari"&gt;safari&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/video"&gt;video&lt;/a&gt;&lt;/p&gt;



</summary><category term="gifs"/><category term="safari"/><category term="video"/></entry><entry><title>"I made the first animated under construction icon"</title><link href="https://simonwillison.net/2009/Oct/15/twoleftfeet/#atom-tag" rel="alternate"/><published>2009-10-15T14:11:53+00:00</published><updated>2009-10-15T14:11:53+00:00</updated><id>https://simonwillison.net/2009/Oct/15/twoleftfeet/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.metafilter.com/85695/Please-Be-Patient-This-Page-is-Under-Construction#2774563"&gt;&amp;quot;I made the first animated under construction icon&amp;quot;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
twoleftfeet on MetaFilter describes how he created the first ever Under Construction animation in 1995, after discovering his server-push animations could be replaced by the exciting new animated GIF.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/animation"&gt;animation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gifs"&gt;gifs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/history"&gt;history&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/internet-history"&gt;internet-history&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/metafilter"&gt;metafilter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/underconstruction"&gt;underconstruction&lt;/a&gt;&lt;/p&gt;



</summary><category term="animation"/><category term="gifs"/><category term="history"/><category term="internet-history"/><category term="metafilter"/><category term="underconstruction"/></entry><entry><title>Evil GIFs: Partial Same Origin Bypass with Hybrid Files</title><link href="https://simonwillison.net/2008/Jul/1/evil/#atom-tag" rel="alternate"/><published>2008-07-01T08:58:45+00:00</published><updated>2008-07-01T08:58:45+00:00</updated><id>https://simonwillison.net/2008/Jul/1/evil/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://radar.oreilly.com/archives/2008/06/partial-same-origin-bypass-wit.html"&gt;Evil GIFs: Partial Same Origin Bypass with Hybrid Files&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
First there were PNGs that had crossdomain.xml files embedded in them, now there are GIFs that contain Java applets (as JAR files). At this point I’d say don’t even bother trying to validate uploaded files, just make sure they’re served off an entirely different domain instead where XSS doesn’t matter.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/applets"&gt;applets&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/crossdomainxml"&gt;crossdomainxml&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gifs"&gt;gifs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javaapplets"&gt;javaapplets&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pngs"&gt;pngs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uploads"&gt;uploads&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/validation"&gt;validation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xss"&gt;xss&lt;/a&gt;&lt;/p&gt;



</summary><category term="applets"/><category term="crossdomainxml"/><category term="gifs"/><category term="javaapplets"/><category term="pngs"/><category term="security"/><category term="uploads"/><category term="validation"/><category term="xss"/></entry></feed>