summaryrefslogtreecommitdiff
path: root/.html/cool-urls-can-change.html
blob: f61f8e47f6cc06b01ea6ba74d2dfdb235fcb6ea2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<!DOCTYPE html>
<html>
<head>
	<title>
		The Codex » 
		Cool URLs Do Change (Sometimes)
	</title>

	<link
		rel='stylesheet'
		type='text/css'
		href='http://fonts.googleapis.com/css?family=Buenard:400,700&amp;subset=latin,latin-ext'>
	<link
		rel="stylesheet"
		type="text/css"
		href="media/css/reset.css">
	<link
		rel="stylesheet"
		type="text/css"
		href="media/css/grimoire.css">
</head>
<body>

<div id="shell">
	
		<ol id="breadcrumbs">
			
				<li class="crumb-0 not-last">
					
						<a href="./">index</a>
					
				</li>
			
				<li class="crumb-1 last">
					
						cool-urls-can-change
					
				</li>
			
		</ol>
	

	
	<div id="article">
		<h1 id="cool-urls-do-change-sometimes">Cool URLs Do Change (Sometimes)</h1>
<p>Required reading: <a href="http://www.w3.org/Provider/Style/URI.html">Cool URLs don't
change</a>.</p>
<p>When I wrote <a href="http://codex.grimoire.ca/2008/09/24/nobody-cares-about-your-build/">Nobody Cares About Your
Build</a>, I
set up a dedicated publishing platform - Wordpress, as it happens - to host
it, and as part of that process I put some real thought into the choice of
“permalink” schemes to use. I opted to use a “dated” scheme, baking the
publication date of each article into its name - into its URL - for all
eternity. I'm a big believer in the idea that a URL should be a long-term name
for the appropriate bit of data or content, and every part of a dated scheme
“made sense” at the time.</p>
<p>This turned out to be a mistake.</p>
<p>The web is not, much, like print media. Something published may be amended;
you don't even have to publish errata or a correction, since you can correct
the original mistake “seamlessly.” This has its good and its
<a href="http://en.wikipedia.org/wiki/Memory_hole">bad</a> parts, but with judicious use
and <a href="https://github.com/ojacobson/grimoiredotca">a public history</a>, amendment
is more of a win than a loss. However, this plays havoc with the idea of a
“publication” date, even for data that takes the form of an article: is the
publication date the date it was first made public, the date of its most
recent edit, or some other date?</p>
<p>Because the name - the URL - of an article was set when I first published it,
the date in the name had to be its initial publication date. <em>This has
actually stopped me from making useful amendments to old articles</em> because the
effort of writing a full, free-standing followup article is more than I'm
willing to commit to. Had I left the date out of the URLs, I'd feel more free
to judiciously amend articles in place and include, in the content, a short
amendment summary.</p>
<p>The W3C's informal suggestions on the subject state that “After the creation
date, putting any information in the name is asking for trouble one way or
another.” I'm starting to believe that this doesn't go far enough: <em>every</em>
part of a URL must have some semantic justification for being there, dates
included:</p>
<ol>
<li>
<p><em>Each part must be meaningful</em>. While
    <code>http://example.com/WW91IGp1c3QgbG9zdCB0aGUgZ2FtZQ==</code> is fairly easy to
    render stable, the meaningless blob renders the name immemorable.</p>
</li>
<li>
<p><em>Each part must be stable</em>. This is where I screwed up worst: I did not
    anticipate that the “date” of an article could be a fluid thing. It's
    tempting to privilege the first date, and it's not an unreasonable
    solution, but it didn't fit how I wanted to address the contents of
    articles.</p>
</li>
</ol>
<p>Running a web server gives you one namespace to play with. Use it wisely.</p>
<h2 id="ok-but-ive-already-got-these-urls">Ok, But I've Already Got These URLs</h2>
<p>Thankfully, there's a way out - for <em>some</em> URLs. URLs inherently name
resources <em>accessed using some protocol</em>, and some protocols provide support
for resources that are, themselves, references to other URLs. HTTP is a good
example, providing a fairly rich set of responses that all, fundamentally,
tell a client to check a second URL for the content relevent to a given URL.
In protocols like this, you can easily replace the content of a URL with a
reference to its new, “better” URL rather than abandoning it entirely.</p>
<p>Names can evolve organically as the humans that issue them grow a better
understanding of the problem, and don't always have to be locked in stone from
the moment they're first used.</p>
	</div>


	
<div id="comments">
<div id="disqus_thread"></div>
<script type="text/javascript">
    /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
    var disqus_shortname = 'grimoire'; // required: replace example with your forum shortname

    /* * * DON'T EDIT BELOW THIS LINE * * */
    (function() {
        var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
    })();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
</div>


	
	<div id="footer">
		<p>
			
				The Codex —
			
			Powered by <a href="http://markdoc.org/">Markdoc</a>.
			
<a href="https://bitbucket.org/ojacobson/grimoire.ca/src/master/wiki/cool-urls-can-change.md">See this page on Bitbucket</a> (<a href="https://bitbucket.org/ojacobson/grimoire.ca/history-node/master/wiki/cool-urls-can-change.md">history</a>).

		</p>
	</div>
	
</div>
</body>
</html>