CINXE.COM

Simon Willison on urls

<!DOCTYPE html> <html lang="en-gb"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="canonical" href="https://simonwillison.net/tags/urls/"> <title>Simon Willison on urls</title> <script defer data-domain="simonwillison.net" src="https://plausible.io/js/plausible.js"></script> <link rel="alternate" type="application/atom+xml" title="Atom" href="/atom/everything/"> <link rel="stylesheet" type="text/css" href="/static/css/all.css"> <link rel="webmention" href="https://webmention.io/simonwillison.net/webmention"> <link rel="pingback" href="https://webmention.io/simonwillison.net/xmlrpc"> <meta name="author" content="Simon Willison"> <meta property="og:site_name" content="Simon Willison’s Weblog"> <meta property="og:type" content="website" /> <meta property="og:title" content="Simon Willison on urls" /> <meta property="og:description" content="77 posts tagged ‘urls’. " /> <meta property="og:site_name" content="Simon Willison’s Weblog" /> </head> <body class="smallhead"> <div id="smallhead"> <div id="smallhead-inner"> <h1><a href="/">Simon Willison’s Weblog</a></h1> <a id="smallhead-about" href="/about/#subscribe">Subscribe</a> </div> </div><!-- #smallhead --> <div id="wrapper"> <div id="primary"> <a style="float: right; border-bottom: none; margin-top: 0.4em" href="/tags/urls.atom"><svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewBox="0 0 256 256" role="img" aria-labelledby="atomFeedTitle"> <title>Atom feed for urls</title> <defs> <linearGradient id="a" x1=".1" x2=".9" y1=".1" y2=".9"> <stop offset="0" stop-color="#E3702D"></stop> <stop offset=".1" stop-color="#EA7D31"></stop> <stop offset=".4" stop-color="#F69537"></stop> <stop offset=".5" stop-color="#FB9E3A"></stop> <stop offset=".7" stop-color="#EA7C31"></stop> <stop offset=".9" stop-color="#DE642B"></stop> <stop offset="1" stop-color="#D95B29"></stop> </linearGradient> </defs> <rect width="256" height="256" fill="#CC5D15" rx="55" ry="55"></rect> <rect width="246" height="246" x="5" y="5" fill="#F49C52" rx="50" ry="50"></rect> <rect width="236" height="236" x="10" y="10" fill="url(#a)" rx="47" ry="47"></rect> <circle cx="68" cy="189" r="24" fill="#FFF"></circle> <path fill="#FFF" d="M160 213h-34a82 82 0 0 0-82-82V97a116 116 0 0 1 116 116z"></path> <path fill="#FFF" d="M184 213A140 140 0 0 0 44 73V38a175 175 0 0 1 175 175z"></path> </svg> </a> <h2 class="archive-h2">77 posts tagged “urls”</h2> <!-- Tag ID: 4344 --> <form action="/search/" method="GET"> <input type="search" class="search-input" name="q" value="" placeholder="Search everything tagged 'urls'" style="width: 80%"> <input type="submit" class="search-submit" value="Search"> <input type="hidden" name="tag" value="urls"> </form> <h3 class="blog-mixed-list-year">2025</h3> <div class="entry segment" data-type="entry" data-id="8778"> <h3><a href="/2025/Feb/13/url-addressable-python/" rel="bookmark">URL-addressable Pyodide Python environments</a></h3> <div class="card-container"> <a href="/2025/Feb/13/url-addressable-python/"><img src="https://static.simonwillison.net/static/2025/datasette-lite-bug.jpg" alt="Visit URL-addressable Pyodide Python environments"></a> </div> <p> <p>This evening I spotted <a href="https://github.com/simonw/datasette/issues/2466">an obscure bug</a> in <a href="https://datasette.io/">Datasette</a>, using <a href="https://github.com/simonw/datasette-lite">Datasette Lite</a>. I figure it’s a good opportunity to highlight how useful it is to have a URL-addressable Python environment, powered by Pyodide and WebAssembly.</p> <span style="font-size: 0.9em">[... <a href="/2025/Feb/13/url-addressable-python/">1,905 words</a>]</span> </p> <div class="entryFooter"> <a href="/2025/Feb/13/url-addressable-python/" title="Permalink for &quot;URL-addressable Pyodide Python environments&quot;">5:13 am</a> / <a href="/2025/Feb/13/">13th February 2025</a> / <a href="/tags/python/">python</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/datasette/">datasette</a>, <a href="/tags/webassembly/">webassembly</a>, <a href="/tags/pyodide/">pyodide</a>, <a href="/tags/datasette-lite/">datasette-lite</a> </div> </div> <!-- end div.entry --> <h3 class="blog-mixed-list-year">2024</h3> <div class="blogmark segment" data-type="blogmark" data-id="8053"> <p><strong><a href="https://docs.djangoproject.com/en/5.1/ref/templates/builtins/#std-templatetag-querystring">New Django {% querystring %} template tag</a></strong>. Django 5.1 <a href="https://www.djangoproject.com/weblog/2024/aug/07/django-51-released/">came out last week</a> and includes a neat new template tag which solves a problem I've faced a bunch of times in the past.</p> <pre><code>{% querystring color="red" size="S" %} </code></pre> <p>Adds <code>?color=red&amp;size=S</code> to the current URL - keeping any other existing parameters and replacing the current value for <code>color</code> or <code>size</code> if it's already set.</p> <pre><code>{% querystring color=None %} </code></pre> <p>Removes the <code>?color=</code> parameter if it is currently set.</p> <p>If the value passed is a list it will append <code>?color=red&amp;color=blue</code> for as many items as exist in the list.</p> <p>You can access values in variables and you can also assign the result to a new template variable rather than outputting it directly to the page:</p> <pre><code>{% querystring page=page.next_page_number as next_page %} </code></pre> <p>Other things that caught my eye in Django 5.1:</p> <ul> <li><a href="https://docs.djangoproject.com/en/5.1/ref/databases/#postgresql-pool">PostgreSQL connection pools</a>.</li> <li>The new <a href="https://docs.djangoproject.com/en/5.1/ref/middleware/#django.contrib.auth.middleware.LoginRequiredMiddleware">LoginRequiredMiddleware</a> for making every page in an application require login.</li> <li>The SQLite database backend now accepts <a href="https://docs.djangoproject.com/en/5.1/ref/databases/#sqlite-init-command">init_command</a> for settings things like <code>PRAGMA cache_size=2000</code> on new connections.</li> <li>SQLite can also be passed <code>"transaction_mode": "IMMEDIATE"</code> to <a href="https://docs.djangoproject.com/en/5.1/ref/databases/#sqlite-transaction-behavior">configure the behaviour of transactions</a>.</li> </ul></p> <p class="date-and-tags"><a href="/2024/Aug/13/django-querystring-template-tag/" rel="bookmark">#</a> <a href="/2024/Aug/13/">13th August 2024</a>, <a href="/2024/Aug/13/django-querystring-template-tag/">6:03 pm</a> / <a href="/tags/urls/">urls</a>, <a href="/tags/sqlite/">sqlite</a>, <a href="/tags/postgresql/">postgresql</a>, <a href="/tags/django/">django</a></p> </div> <h3 class="blog-mixed-list-year">2023</h3> <div class="blogmark segment" data-type="blogmark" data-id="7090"> <p><strong><a href="https://daniel.haxx.se/blog/2023/04/03/introducing-trurl/">trurl manipulates URLs</a></strong>. Brand new command-line tool from curl creator Daniel Stenberg: The tr stands for translate or transpose, and the tool provides various mechanisms for normalizing URLs, adding query strings, changing the path or hostname and other similar modifications. I’ve tried designing APis for this kind of thing in the past—Datasette includes some clumsily named functions such as path_with_removed_args()—and it’s a deceptively deep set of problems.<br>.</p> <p class="date-and-tags"><a href="/2023/Apr/4/trurl-manipulates-urls/" rel="bookmark">#</a> <a href="/2023/Apr/4/">4th April 2023</a>, <a href="/2023/Apr/4/trurl-manipulates-urls/">10:08 pm</a> / <a href="/tags/urls/">urls</a>, <a href="/tags/curl/">curl</a>, <a href="/tags/daniel-stenberg/">daniel-stenberg</a></p> </div> <h3 class="blog-mixed-list-year">2022</h3> <div class="entry segment" data-type="entry" data-id="8150"> <h3><a href="/2022/Mar/5/dash-encoding/" rel="bookmark">Why I invented “dash encoding”, a new encoding scheme for URL paths</a></h3> <div class="card-container"> <a href="/2022/Mar/5/dash-encoding/"><img src="https://static.simonwillison.net/static/2022/dash-encoding-regex-full.png" alt="Visit Why I invented &quot;dash encoding&quot;, a new encoding scheme for URL paths"></a> </div> <p> <p><a href="https://datasette.io/">Datasette</a> now includes its own custom string encoding scheme, which I’ve called <strong>dash encoding</strong>. I really didn’t want to have to invent something new here, but unfortunately I think this is the best solution to my very particular problem. Some notes on how dash encoding works and why I created it.</p> <span style="font-size: 0.9em">[... <a href="/2022/Mar/5/dash-encoding/">1,392 words</a>]</span> </p> <div class="entryFooter"> <a href="/2022/Mar/5/dash-encoding/" title="Permalink for &quot;Why I invented &quot;dash encoding&quot;, a new encoding scheme for URL paths&quot;">9:50 pm</a> / <a href="/2022/Mar/5/">5th March 2022</a> / <a href="/tags/regular-expressions/">regular-expressions</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/datasette/">datasette</a> </div> </div> <!-- end div.entry --> <h3 class="blog-mixed-list-year">2020</h3> <div class="entry segment" data-type="entry" data-id="7983"> <h3><a href="/2020/Nov/1/datasette-0-51/" rel="bookmark">Datasette 0.51 (plus weeknotes)</a></h3> <div class="card-container"> <a href="/2020/Nov/1/datasette-0-51/"><img src="https://static.simonwillison.net/static/2020/datasette-0.51.png" alt="Visit Datasette 0.51 (plus weeknotes)"></a> </div> <p> <p>I shipped <a href="https://docs.datasette.io/en/stable/changelog.html#v0-51">Datasette 0.51</a> today, with a new visual design, plugin hooks for adding navigation options, better handling of binary data, URL building utility methods and better support for running Datasette behind a proxy. It’s a lot of stuff! Here are the annotated release notes.</p> <span style="font-size: 0.9em">[... <a href="/2020/Nov/1/datasette-0-51/">2,020 words</a>]</span> </p> <div class="entryFooter"> <a href="/2020/Nov/1/datasette-0-51/" title="Permalink for &quot;Datasette 0.51 (plus weeknotes)&quot;">4:22 am</a> / <a href="/2020/Nov/1/">1st November 2020</a> / <a href="/tags/natalie-downe/">natalie-downe</a>, <a href="/tags/projects/">projects</a>, <a href="/tags/security/">security</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/xss/">xss</a>, <a href="/tags/datasette/">datasette</a>, <a href="/tags/weeknotes/">weeknotes</a>, <a href="/tags/annotated-release-notes/">annotated-release-notes</a> </div> </div> <!-- end div.entry --> <h3 class="blog-mixed-list-year">2019</h3> <div class="blogmark segment" data-type="blogmark" data-id="6048"> <p><strong><a href="https://24ways.org/2019/microbrowsers-are-everywhere/">Microbrowsers are Everywhere</a></strong> (<a href="https://news.ycombinator.com/item?id=21800346" title="Hacker News">via</a>) Colin Bendell introduces a new-to-me term, “microbrowsers”, to describe the user-agents which hit websites to generate unfurled link previews in messenger apps. Twitter and Facebook first popularized them, but today you’re likely getting far more preview-generating traffic from chat clients such as iMessage, WhatsApp and Slack (which won’t execute script and ignore cookies, and hence won’t show up in Google Analytics). Lots of great tips here—one example: if you provide three og:image meta tags iMessage will render them as a collage.</p> <p class="date-and-tags"><a href="/2019/Dec/18/microbrowsers-are-everywhere/" rel="bookmark">#</a> <a href="/2019/Dec/18/">18th December 2019</a>, <a href="/2019/Dec/18/microbrowsers-are-everywhere/">8:32 am</a> / <a href="/tags/urls/">urls</a>, <a href="/tags/24-ways/">24-ways</a>, <a href="/tags/metadata/">metadata</a></p> </div> <h3 class="blog-mixed-list-year">2017</h3> <div class="blogmark segment" data-type="blogmark" data-id="5373"> <p><strong><a href="https://www.annashipman.co.uk/jfdi/removing-mediawiki-cool-uris.html">Removing MediaWiki from SPA: Cool URIs don’t change</a></strong> (<a href="https://twitter.com/SteveMarshall/status/917110425308803072" title="Steve Marshall">via</a>) Detailed write-up from Anna Shipman describing how she archived an old MediaWiki as static content using recursive wget and some cunning application of mod_rewrite.</p> <p class="date-and-tags"><a href="/2017/Oct/8/cool-uris/" rel="bookmark">#</a> <a href="/2017/Oct/8/">8th October 2017</a>, <a href="/2017/Oct/8/cool-uris/">7:54 pm</a> / <a href="/tags/urls/">urls</a>, <a href="/tags/annashipman/">annashipman</a></p> </div> <div class="entry segment" data-type="entry" data-id="7779"> <h3><a href="/2017/Oct/8/missing-content/" rel="bookmark">Recovering missing content from the Internet Archive</a></h3> <p> <p>When <a href="https://simonwillison.net/2017/Oct/1/ship/">I restored my blog last weekend</a> I used the most recent SQL backup of my blog’s database from back in 2010. I thought it had all of my content from before I started my 7 year hiatus, but in watching the 404 logs I started seeing the occasional hit to something that really should have been there but wasn’t. Turns out the SQL backup I was working from was missing some content.</p> <span style="font-size: 0.9em">[... <a href="/2017/Oct/8/missing-content/">636 words</a>]</span> </p> <div class="entryFooter"> <a href="/2017/Oct/8/missing-content/" title="Permalink for &quot;Recovering missing content from the Internet Archive&quot;">7:08 pm</a> / <a href="/2017/Oct/8/">8th October 2017</a> / <a href="/tags/beautifulsoup/">beautifulsoup</a>, <a href="/tags/internet-archive/">internet-archive</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/jupyter/">jupyter</a> </div> </div> <!-- end div.entry --> <h3 class="blog-mixed-list-year">2013</h3> <div class="entry segment" data-type="entry" data-id="6821"> <h3><a href="/2013/Dec/8/what-do-twitter-and/" rel="bookmark">What do Twitter and Gawker think of hash-bangs URLs?</a></h3> <p> <p>As of December 2013 (and potentially much earlier, I don’t have the exact dates) both Twitter and a Gawker have moved away from hash bang URLs, so my guess is they turned out not to be a good idea.</p> <span style="font-size: 0.9em">[... <a href="/2013/Dec/8/what-do-twitter-and/">82 words</a>]</span> </p> <div class="entryFooter"> <a href="/2013/Dec/8/what-do-twitter-and/" title="Permalink for &quot;What do Twitter and Gawker think of hash-bangs URLs?&quot;">5:45 pm</a> / <a href="/2013/Dec/8/">8th December 2013</a> / <a href="/tags/twitter/">twitter</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/quora/">quora</a> </div> </div> <!-- end div.entry --> <div class="entry segment" data-type="entry" data-id="7040"> <h3><a href="/2013/Aug/26/how-to-find-the/" rel="bookmark">How to find the URL of a page in an iframe? </a></h3> <p> <p>You can’t, as this would be a security and privacy violation. Imagine an evil website which loads up Google in a full page iframe and then tracks what the unsuspecting user searches for and clicks on.</p> <span style="font-size: 0.9em">[... <a href="/2013/Aug/26/how-to-find-the/">125 words</a>]</span> </p> <div class="entryFooter"> <a href="/2013/Aug/26/how-to-find-the/" title="Permalink for &quot;How to find the URL of a page in an iframe? &quot;">3:22 pm</a> / <a href="/2013/Aug/26/">26th August 2013</a> / <a href="/tags/urls/">urls</a>, <a href="/tags/quora/">quora</a> </div> </div> <!-- end div.entry --> <h3 class="blog-mixed-list-year">2012</h3> <div class="entry segment" data-type="entry" data-id="7376"> <h3><a href="/2012/May/31/what-is-the-most/" rel="bookmark">What is the most efficient way to lookup an object (e.g. a user) by only a string?</a></h3> <p> <p>Yes—an index on a varchar column is exactly how you would implement this.</p> <span style="font-size: 0.9em">[... <a href="/2012/May/31/what-is-the-most/">38 words</a>]</span> </p> <div class="entryFooter"> <a href="/2012/May/31/what-is-the-most/" title="Permalink for &quot;What is the most efficient way to lookup an object (e.g. a user) by only a string?&quot;">5:27 pm</a> / <a href="/2012/May/31/">31st May 2012</a> / <a href="/tags/mysql/">mysql</a>, <a href="/tags/twitter/">twitter</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/quora/">quora</a> </div> </div> <!-- end div.entry --> <div class="entry segment" data-type="entry" data-id="7375"> <h3><a href="/2012/May/31/is-there-an-api/" rel="bookmark">Is there an API that returns metadata for a given URL?</a></h3> <p> <p>I suggest taking a look at <span><a href="http://embed.ly/">http://embed.ly/</a></span>—it can take a huge range of URLs and turn them in to JSON metadata. Here’s what it can do with a Wikipedia page: <span><a href="http://embed.ly/docs/explore/objectify?maxwidth=500&amp;url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FWorld_War_II">http://embed.ly/docs/explore/obj...</a></span>—and here’s Google Maps URL (not as useful, but still some interesting metadata extracted) <span><a href="http://embed.ly/docs/explore/objectify?maxwidth=500&amp;url=https%3A%2F%2Fmaps.google.co.uk%2F%3Fll%3D52.643063%2C-2.076416%26spn%3D0.026769%2C0.080338%26t%3Dm%26z%3D14&amp;url=https%3A%2F%2Fmaps.google.co.uk%2F%3Fll%3D52.643063%2C-2.076416%26spn%3D0.026769%2C0.080338%26t%3Dm%26z%3D14">http://embed.ly/docs/explore/obj...</a></span></p> <span style="font-size: 0.9em">[... <a href="/2012/May/31/is-there-an-api/">69 words</a>]</span> </p> <div class="entryFooter"> <a href="/2012/May/31/is-there-an-api/" title="Permalink for &quot;Is there an API that returns metadata for a given URL?&quot;">4:01 pm</a> / <a href="/2012/May/31/">31st May 2012</a> / <a href="/tags/apis/">apis</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/web-services/">web-services</a>, <a href="/tags/quora/">quora</a> </div> </div> <!-- end div.entry --> <div class="entry segment" data-type="entry" data-id="7373"> <h3><a href="/2012/May/31/how-did-artsy-get/" rel="bookmark">How did art.sy get a “.sy” url?</a></h3> <p> <p>Here’s a generally useful tip: if you’re interested in learning more about ANY top level domain, visit the Wikipedia page for it—which will be <span><a href="https://en.wikipedia.org/wiki/.sy">http://en.wikipedia.org/wiki/.sy</a></span> in this case (just add the domain, complete with its dot prefix, directly after <span><a href="https://en.wikipedia.org/wiki/">en.wikipedia.org/wiki/</a></span> ).</p> <span style="font-size: 0.9em">[... <a href="/2012/May/31/how-did-artsy-get/">105 words</a>]</span> </p> <div class="entryFooter"> <a href="/2012/May/31/how-did-artsy-get/" title="Permalink for &quot;How did art.sy get a &quot;.sy&quot; url?&quot;">11 am</a> / <a href="/2012/May/31/">31st May 2012</a> / <a href="/tags/urls/">urls</a>, <a href="/tags/quora/">quora</a> </div> </div> <!-- end div.entry --> <div class="entry segment" data-type="entry" data-id="7377"> <h3><a href="/2012/May/31/which-sites-have-the/" rel="bookmark">Which sites have the best URL design?</a></h3> <p> <p>GitHub’s URL design is fantastic—it’s a virtually flawless mapping of Git semantics to URL space. Their basic URL structure is excellent, but they also have a bunch of neat URL hacks going on. Here are a few of my favourites:</p> <span style="font-size: 0.9em">[... <a href="/2012/May/31/which-sites-have-the/">97 words</a>]</span> </p> <div class="entryFooter"> <a href="/2012/May/31/which-sites-have-the/" title="Permalink for &quot;Which sites have the best URL design?&quot;">9:08 am</a> / <a href="/2012/May/31/">31st May 2012</a> / <a href="/tags/design/">design</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/quora/">quora</a> </div> </div> <!-- end div.entry --> <div class="entry segment" data-type="entry" data-id="7374"> <h3><a href="/2012/May/31/when-referring-to-our/" rel="bookmark">When referring to our web site in publications (or Twitter or Facebook), when is it important to provide the full URL—http://www.mywebsite.com and when should you provide just the mywebsite.com?</a></h3> <p> <p>You have no control over how other publications refer to your site—if you’re lucky, they might spell it correctly and check the link works before publishing (but I wouldn’t bet on it). What you DO have control over is making sure you compensate for any mistakes they make.</p> <span style="font-size: 0.9em">[... <a href="/2012/May/31/when-referring-to-our/">166 words</a>]</span> </p> <div class="entryFooter"> <a href="/2012/May/31/when-referring-to-our/" title="Permalink for &quot;When referring to our web site in publications (or Twitter or Facebook), when is it important to provide the full URL - http://www.mywebsite.com and when should you provide just the mywebsite.com?&quot;">9:07 am</a> / <a href="/2012/May/31/">31st May 2012</a> / <a href="/tags/urls/">urls</a>, <a href="/tags/quora/">quora</a> </div> </div> <!-- end div.entry --> <div class="entry segment" data-type="entry" data-id="7422"> <h3><a href="/2012/Feb/10/how-did-slashes-become/" rel="bookmark">How did slashes become the standard path separators for URLs?</a></h3> <p> <p>I’m going to take an educated guess and say it’s because of unix file system conventions. Early web servers mapped the URL to a path on disk inside the document root—this is still how most static sites work today.</p> <span style="font-size: 0.9em">[... <a href="/2012/Feb/10/how-did-slashes-become/">57 words</a>]</span> </p> <div class="entryFooter"> <a href="/2012/Feb/10/how-did-slashes-become/" title="Permalink for &quot;How did slashes become the standard path separators for URLs?&quot;">2:51 pm</a> / <a href="/2012/Feb/10/">10th February 2012</a> / <a href="/tags/internet/">internet</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/w3c/">w3c</a>, <a href="/tags/quora/">quora</a> </div> </div> <!-- end div.entry --> <div class="entry segment" data-type="entry" data-id="7444"> <h3><a href="/2012/Jan/30/how-do-you-find/" rel="bookmark">How do you find the new URL of a Tumblr that has moved?</a></h3> <p> <p>One trick that might work is to look up the old tumble in the Google cache or on <span><a href="http://archive.org">archive.org</a></span>, then copy and paste a unique search phrase from that page and run a Google search for:</p> <span style="font-size: 0.9em">[... <a href="/2012/Jan/30/how-do-you-find/">72 words</a>]</span> </p> <div class="entryFooter"> <a href="/2012/Jan/30/how-do-you-find/" title="Permalink for &quot;How do you find the new URL of a Tumblr that has moved?&quot;">5:32 pm</a> / <a href="/2012/Jan/30/">30th January 2012</a> / <a href="/tags/urls/">urls</a>, <a href="/tags/quora/">quora</a>, <a href="/tags/tumblr/">tumblr</a> </div> </div> <!-- end div.entry --> <h3 class="blog-mixed-list-year">2011</h3> <div class="quote segment" data-type="quotation" data-id="417"> <blockquote cite="http://www.tbray.org/ongoing/When/201x/2011/02/09/Hash-Blecch#c1297353079.775017"><p>URLs are supposed to represent resources. A web app can be a resource, and there are techniques for managing state within those. Hashbangs might be one of these. But when large web properties are converting all their links to <em>articles</em> and other <em>bits of text</em> (tweets/twits/whatever) into these monstrosities, it’s not innovation. It’s a huge mistake that ought to be regretted now and will certainly be regretted in the future.</p></blockquote> <p class="cite">&mdash; <a href="http://www.tbray.org/ongoing/When/201x/2011/02/09/Hash-Blecch#c1297353079.775017">Reed Underwood</a></span></p> <p class="date-and-tags"> <a href="/2011/Feb/10/reed/" rel="bookmark">#</a> <a href="/2011/Feb/10/">10th February 2011</a>, <a href="/2011/Feb/10/reed/">4:56 pm</a> / <a href="/tags/hashbanghell/">hashbanghell</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/recovered/">recovered</a> </p> </div> <div class="quote segment" data-type="quotation" data-id="400"> <blockquote cite="http://www.tbray.org/ongoing/When/201x/2011/02/09/Hash-Blecch"><p>Before events took this bad turn, the contract represented by a link was simple: “Here’s a string, send it off to a server and the server will figure out what it identifies and send you back a representation.” Now it’s along the lines of: “Here’s a string, save the hashbang, send the rest to the server, and rely on being able to run the code the server sends you to use the hashbang to generate the representation.” Do I need to explain why this is less robust and flexible? This is what we call “tight coupling” and I thought that anyone with a Computer Science degree ought to have been taught to avoid it.</p></blockquote> <p class="cite">&mdash; <a href="http://www.tbray.org/ongoing/When/201x/2011/02/09/Hash-Blecch">Tim Bray</a></span></p> <p class="date-and-tags"> <a href="/2011/Feb/10/ongoing/" rel="bookmark">#</a> <a href="/2011/Feb/10/">10th February 2011</a>, <a href="/2011/Feb/10/ongoing/">6 am</a> / <a href="/tags/hashbanghell/">hashbanghell</a>, <a href="/tags/javascript/">javascript</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/recovered/">recovered</a>, <a href="/tags/tim-bray/">tim-bray</a> </p> </div> <div class="blogmark segment" data-type="blogmark" data-id="5247"> <p><strong><a href="http://adactio.com/journal/4346/">Going Postel</a></strong>. Jeremy points out that one of the many disadvantages of publishing JavaScript dependent content on the Web is that a single typo can render your entire site unusable.</p> <p class="date-and-tags"><a href="/2011/Feb/9/adactio/" rel="bookmark">#</a> <a href="/2011/Feb/9/">9th February 2011</a>, <a href="/2011/Feb/9/adactio/">2:18 am</a> / <a href="/tags/ajax/">ajax</a>, <a href="/tags/gawker/">gawker</a>, <a href="/tags/hashbanghell/">hashbanghell</a>, <a href="/tags/jeremy-keith/">jeremy-keith</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/recovered/">recovered</a></p> </div> <div class="blogmark segment" data-type="blogmark" data-id="5239"> <p><strong><a href="http://isolani.co.uk/blog/javascript/BreakingTheWebWithHashBangs">Breaking the Web with hash-bangs</a></strong>. Mike Davies explains why Gawker’s new Ajax fragment-tastic redesign is a web architecture error of colossal proportions.</p> <p class="date-and-tags"><a href="/2011/Feb/9/isolani/" rel="bookmark">#</a> <a href="/2011/Feb/9/">9th February 2011</a>, <a href="/2011/Feb/9/isolani/">2:17 am</a> / <a href="/tags/ajax/">ajax</a>, <a href="/tags/gawker/">gawker</a>, <a href="/tags/hashbanghell/">hashbanghell</a>, <a href="/tags/mike-davies/">mike-davies</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/recovered/">recovered</a></p> </div> <div class="entry segment" data-type="entry" data-id="7596"> <h3><a href="/2011/Jan/21/is-there-a-way/" rel="bookmark">Is there a way of tracking shortened URLs with Twitter streaming API?</a></h3> <p> <p>Think about it like this: the whole point of the Twitter streaming API is to get you the tweets as soon after they are posted as possible. If the API were to provide access to the lengthened URLs, it would have to delay emitting a Tweet on to the stream until a resolver had gone through each shortened URL in the tweet and checked to find what it redirects to. This would mean that the speed with which the streaming API could deal out tweets would be dependent on the speed of the third party servers that serve up the redirects. I doubt Twitter would ever want to implement this.</p> <span style="font-size: 0.9em">[... <a href="/2011/Jan/21/is-there-a-way/">159 words</a>]</span> </p> <div class="entryFooter"> <a href="/2011/Jan/21/is-there-a-way/" title="Permalink for &quot;Is there a way of tracking shortened URLs with Twitter streaming API?&quot;">9:47 am</a> / <a href="/2011/Jan/21/">21st January 2011</a> / <a href="/tags/twitter/">twitter</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/quora/">quora</a> </div> </div> <!-- end div.entry --> <div class="blogmark segment" data-type="blogmark" data-id="5335"> <p><strong><a href="https://code.google.com/apis/urlshortener/v1/getting_started.html#analytics">Getting Started—Google URL Shortener API</a></strong>. The API for the goo.gl URL shortener is really nice—no API key required, easy to create a short URL and you can retrieve detailed stats breakdowns (similar to bit.ly) as JSON for any URL.</p> <p class="date-and-tags"><a href="/2011/Jan/13/getting/" rel="bookmark">#</a> <a href="/2011/Jan/13/">13th January 2011</a>, <a href="/2011/Jan/13/getting/">3:49 am</a> / <a href="/tags/google/">google</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/recovered/">recovered</a></p> </div> <div class="entry segment" data-type="entry" data-id="7634"> <h3><a href="/2011/Jan/1/could-browsers-be-made/" rel="bookmark">Could browsers be made to scroll down (e.g. by 67%) if you add #67% to a URL?</a></h3> <p> <p>I’d say no.</p> <span style="font-size: 0.9em">[... <a href="/2011/Jan/1/could-browsers-be-made/">89 words</a>]</span> </p> <div class="entryFooter"> <a href="/2011/Jan/1/could-browsers-be-made/" title="Permalink for &quot;Could browsers be made to scroll down (e.g. by 67%) if you add #67% to a URL?&quot;">3:07 pm</a> / <a href="/2011/Jan/1/">1st January 2011</a> / <a href="/tags/browsers/">browsers</a>, <a href="/tags/html/">html</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/quora/">quora</a> </div> </div> <!-- end div.entry --> <h3 class="blog-mixed-list-year">2010</h3> <div class="blogmark segment" data-type="blogmark" data-id="5266"> <p><strong><a href="http://warpspire.com/posts/url-design/">URL Design</a></strong>. Thoughtful tips on modern URL design, from GitHub designer Kyle Neath. GitHub has the best designed URLs of any application I can think of.</p> <p class="date-and-tags"><a href="/2010/Dec/31/url/" rel="bookmark">#</a> <a href="/2010/Dec/31/">31st December 2010</a>, <a href="/2010/Dec/31/url/">10:03 am</a> / <a href="/tags/github/">github</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/recovered/">recovered</a></p> </div> <div class="entry segment" data-type="entry" data-id="7645"> <h3><a href="/2010/Dec/22/is-it-a-good/" rel="bookmark">Is it a good idea to allocate URLs such as quora.com/username to users?</a></h3> <p> <p>There’s an interesting discussion about this issue on this question: <span><a href="https://www.quora.com/How-do-sites-prevent-vanity-URLs-from-colliding-with-future-features">How do sites prevent vanity URLs from colliding with future features ?</a></span></p> <span style="font-size: 0.9em">[... <a href="/2010/Dec/22/is-it-a-good/">42 words</a>]</span> </p> <div class="entryFooter"> <a href="/2010/Dec/22/is-it-a-good/" title="Permalink for &quot;Is it a good idea to allocate URLs such as quora.com/username to users?&quot;">3:17 pm</a> / <a href="/2010/Dec/22/">22nd December 2010</a> / <a href="/tags/seo/">seo</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/quora/">quora</a> </div> </div> <!-- end div.entry --> <div class="blogmark segment" data-type="blogmark" data-id="5190"> <p><strong><a href="http://spacelog.org/">Spacelog: space exploration stories from the original transcripts</a></strong>. The product of the most recent /dev/fort outing—a beautiful, web-native interface for browsing the NASA transcripts from the Apollo 13 and Mercury 6 missions (more to come). Every key moment has a URL.</p> <p class="date-and-tags"><a href="/2010/Dec/10/spacelog/" rel="bookmark">#</a> <a href="/2010/Dec/10/">10th December 2010</a>, <a href="/2010/Dec/10/spacelog/">10:07 am</a> / <a href="/tags/devfort/">devfort</a>, <a href="/tags/space/">space</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/recovered/">recovered</a></p> </div> <div class="blogmark segment" data-type="blogmark" data-id="5360"> <p><strong><a href="http://lanyrd.com/2010/yuiconf/spdm/">Porting Flickr to YUI 3: Lessons in Performance (at YUIConf 2010)</a></strong>. Some very interesting tips here. The new Flickr photo pages suffered from what I’ve been calling “Flash of Un-Behavioured Content”, where slow loading JavaScript results in poor behaviour from some UI controls. They started using “Action Queueing”, where a small JS stub ensures a loading indicator is shown for clicks on features that have not yet fully loaded. Also, it turns out some corporate firewalls (Sonicwall in particular) dislike URLs over 1600 characters, and filter out any URL with xxx in it.</p> <p class="date-and-tags"><a href="/2010/Nov/10/porting/" rel="bookmark">#</a> <a href="/2010/Nov/10/">10th November 2010</a>, <a href="/2010/Nov/10/porting/">6:33 pm</a> / <a href="/tags/flickr/">flickr</a>, <a href="/tags/javascript/">javascript</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/yui/">yui</a>, <a href="/tags/recovered/">recovered</a></p> </div> <div class="entry segment" data-type="entry" data-id="7709"> <h3><a href="/2010/Oct/15/is-there-any-consensus/" rel="bookmark">Is there any consensus yet on link rel=shorturl vs rev=canonical?</a></h3> <p> <p>It’s pretty clear from the answers that rev=canonical v.s. rel=canonical is way too confusing—so it’s down to rel=shortlink v.s. rel=shorturl.</p> <span style="font-size: 0.9em">[... <a href="/2010/Oct/15/is-there-any-consensus/">38 words</a>]</span> </p> <div class="entryFooter"> <a href="/2010/Oct/15/is-there-any-consensus/" title="Permalink for &quot;Is there any consensus yet on link rel=shorturl vs rev=canonical?&quot;">12:03 pm</a> / <a href="/2010/Oct/15/">15th October 2010</a> / <a href="/tags/html/">html</a>, <a href="/tags/html5/">html5</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/quora/">quora</a> </div> </div> <!-- end div.entry --> <div class="entry segment" data-type="entry" data-id="7716"> <h3><a href="/2010/Oct/13/why-doesnt-facebook-use/" rel="bookmark">Why doesn’t Facebook use nicer URLs?</a></h3> <p> <p>Just noticed this link: <span><a href="https://www.facebook.com/notes/facebook-engineering/using-html5-today/438532093919">http://www.facebook.com/notes/fa...</a></span>—so it looks like things are beginning to improve.</p> <span style="font-size: 0.9em">[... <a href="/2010/Oct/13/why-doesnt-facebook-use/">28 words</a>]</span> </p> <div class="entryFooter"> <a href="/2010/Oct/13/why-doesnt-facebook-use/" title="Permalink for &quot;Why doesn&#x27;t Facebook use nicer URLs?&quot;">12:50 pm</a> / <a href="/2010/Oct/13/">13th October 2010</a> / <a href="/tags/facebook/">facebook</a>, <a href="/tags/urls/">urls</a>, <a href="/tags/quora/">quora</a>, <a href="/tags/ux/">ux</a> </div> </div> <!-- end div.entry --> <div class="pagination"> <span class="step-links"> <span class="current"> page 1 / 3 </span> <a href="?page=2">next &raquo;</a> <a href="?page=3">last &raquo;&raquo;</a> </span> </div> </div> <!-- #primary --> <div id="secondary"> <div class="metabox"> <p><strong>Related</strong></p> <a class="item-tag" href="/tags/quora/" rel="tag"> quora <span>1005</span> </a> <a class="item-tag" href="/tags/recovered/" rel="tag"> recovered <span>213</span> </a> <a class="item-tag" href="/tags/django/" rel="tag"> django <span>569</span> </a> <a class="item-tag" href="/tags/python/" rel="tag"> python <span>1138</span> </a> <a class="item-tag" href="/tags/openid/" rel="tag"> openid <span>213</span> </a> <a class="item-tag" href="/tags/security/" rel="tag"> security <span>508</span> </a> <a class="item-tag" href="/tags/twitter/" rel="tag"> twitter <span>158</span> </a> <a class="item-tag" href="/tags/revcanonical/" rel="tag"> revcanonical <span>9</span> </a> <a class="item-tag" href="/tags/hashbanghell/" rel="tag"> hashbanghell <span>4</span> </a> <a class="item-tag" href="/tags/datasette/" rel="tag"> datasette <span>431</span> </a> </p> </div> </div> <!-- #secondary --> </div> <!-- #wrapper --> <div id="ft"> <ul> <li><a href="/about/#about-site">Colophon</a></li> <li>&copy;</li> <li><a href="/2002/">2002</a></li> <li><a href="/2003/">2003</a></li> <li><a href="/2004/">2004</a></li> <li><a href="/2005/">2005</a></li> <li><a href="/2006/">2006</a></li> <li><a href="/2007/">2007</a></li> <li><a href="/2008/">2008</a></li> <li><a href="/2009/">2009</a></li> <li><a href="/2010/">2010</a></li> <li><a href="/2011/">2011</a></li> <li><a href="/2012/">2012</a></li> <li><a href="/2013/">2013</a></li> <li><a href="/2014/">2014</a></li> <li><a href="/2015/">2015</a></li> <li><a href="/2016/">2016</a></li> <li><a href="/2017/">2017</a></li> <li><a href="/2018/">2018</a></li> <li><a href="/2019/">2019</a></li> <li><a href="/2020/">2020</a></li> <li><a href="/2021/">2021</a></li> <li><a href="/2022/">2022</a></li> <li><a href="/2023/">2023</a></li> <li><a href="/2024/">2024</a></li> <li><a href="/2025/">2025</a></li> </ul> </div> <script> document.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('h4[id],h5[id],h6[id]').forEach(el => { const id = el.getAttribute('id'); const permalinkContext = el.closest('[data-permalink-context]'); if (permalinkContext) { const url = permalinkContext.getAttribute('data-permalink-context'); const hashLink = document.createElement('a'); hashLink.style.borderBottom = 'none'; hashLink.style.color = '#666'; hashLink.style.fontSize = '1em'; hashLink.style.opacity = 0.8; hashLink.setAttribute('href', url + '#' + id); hashLink.innerText = '#'; el.appendChild(document.createTextNode(' ')); el.appendChild(hashLink); } }); }); </script> <script type="module"> const config = [ {"tag": "lite-youtube", "js": "/static/lite-yt-embed.js", "css": "/static/lite-yt-embed.css"} ]; for (const {tag, js, css} of config) { if (document.querySelector(tag)) { if (css) { document.head.appendChild( Object.assign(document.createElement('link'), { rel: 'stylesheet', href: css }) ); } if (js) { await import(js); } } } </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10