Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
michael@0 | 1 | <?xml version='1.0' encoding='UTF-8'?> |
michael@0 | 2 | <!-- |
michael@0 | 3 | Description: Feed title works with full entry |
michael@0 | 4 | Expect: feed.title.text == 'ongoing' |
michael@0 | 5 | --> |
michael@0 | 6 | <feed xmlns='http://www.w3.org/2005/Atom' |
michael@0 | 7 | xml:base='http://www.tbray.org/ongoing/ongoing.atom' |
michael@0 | 8 | xml:lang='en-us'> |
michael@0 | 9 | <title>ongoing</title> |
michael@0 | 10 | <id>http://www.tbray.org/ongoing/</id> |
michael@0 | 11 | <link href='./' /> |
michael@0 | 12 | <link rel='self' href='' /> |
michael@0 | 13 | <logo>rsslogo.jpg</logo> |
michael@0 | 14 | <icon>/favicon.ico</icon> |
michael@0 | 15 | <updated>2006-04-26T20:10:25-08:00</updated> |
michael@0 | 16 | <author><name>Tim Bray</name></author> |
michael@0 | 17 | <subtitle>ongoing fragmented essay by Tim Bray</subtitle> |
michael@0 | 18 | <rights>All content written by Tim Bray and photos by Tim Bray Copyright Tim Bray, some rights reserved, see /ongoing/misc/Copyright</rights> |
michael@0 | 19 | <generator uri='/misc/Colophon'>Generated from XML source code using Perl, Expat, XML::Parser, Emacs, Mysql, and ImageMagick. Industrial strength technology, baby.</generator> |
michael@0 | 20 | |
michael@0 | 21 | <entry xml:base='When/200x/2006/04/26/'> |
michael@0 | 22 | <title>Spring in White on White</title> |
michael@0 | 23 | <link href='Spring-in-White-on-White' /> |
michael@0 | 24 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/26/Spring-in-White-on-White</id> |
michael@0 | 25 | <published>2006-04-26T13:00:00-08:00</published> |
michael@0 | 26 | <updated>2006-04-26T20:10:16-08:00</updated> |
michael@0 | 27 | <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Photos' /> |
michael@0 | 28 | <category scheme='http://www.tbray.org/ongoing/What/' term='Arts' /> |
michael@0 | 29 | <category scheme='http://www.tbray.org/ongoing/What/' term='Photos' /> |
michael@0 | 30 | <category scheme='http://www.tbray.org/ongoing/What/' term='Garden' /> |
michael@0 | 31 | <category scheme='http://www.tbray.org/ongoing/What/' term='Garden' /> |
michael@0 | 32 | <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Most people would generally prefer a climate where it’s bright and warm most of the time. But for Canadians and others who live where it’s not, there are compensations, and one is the experience of spring. I have a picture.</div></summary> |
michael@0 | 33 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 34 | <p>Most people would generally prefer a climate where it’s bright |
michael@0 | 35 | and warm most of the time. But for Canadians and others who live where it’s |
michael@0 | 36 | not, there are compensations, and one is the experience of |
michael@0 | 37 | spring. I have a picture.</p> |
michael@0 | 38 | <img src="IMGP3247.png" alt="Pear blossoms against cherry blossoms" /> |
michael@0 | 39 | <div class="caption"><p>The blossoms are pear in the foreground, cherry behind.</p></div> |
michael@0 | 40 | <p>After all the months of 50° North Latitude winter—icy-sharp in most |
michael@0 | 41 | of Canada, wet and dark here in Vancouver—the soul, the spirit, and the |
michael@0 | 42 | libido all spring to life when the sun comes back. We’ve had a solid year of |
michael@0 | 43 | crappy weather, but this last Saturday through Monday were solidly summery, |
michael@0 | 44 | bright |
michael@0 | 45 | and warm; and in this season the days are already long and each gets |
michael@0 | 46 | longer so fast you can feel it.</p> |
michael@0 | 47 | <p>On the back porch, our pear tree’s branches were silhouetted against the |
michael@0 | 48 | neighbors’ big wild old cherry; the cherry yields no edible fruit but who |
michael@0 | 49 | cares, it’s beautiful |
michael@0 | 50 | tree any time of year.</p> |
michael@0 | 51 | </div></content></entry> |
michael@0 | 52 | |
michael@0 | 53 | <entry xml:base='When/200x/2006/04/26/'> |
michael@0 | 54 | <title>Scott</title> |
michael@0 | 55 | <link href='Scott' /> |
michael@0 | 56 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/26/Scott</id> |
michael@0 | 57 | <published>2006-04-26T13:00:00-08:00</published> |
michael@0 | 58 | <updated>2006-04-26T20:06:50-08:00</updated> |
michael@0 | 59 | <category scheme='http://www.tbray.org/ongoing/What/' term='Business/Sun' /> |
michael@0 | 60 | <category scheme='http://www.tbray.org/ongoing/What/' term='Business' /> |
michael@0 | 61 | <category scheme='http://www.tbray.org/ongoing/What/' term='Sun' /> |
michael@0 | 62 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 63 | <p>I’ve been watching our internal leadership conference and spending quite a |
michael@0 | 64 | bit of time talking in the virtual hallways, and I’ve been surprised at |
michael@0 | 65 | the intensity of feeling about Mr. McNealy. Yes, there are those |
michael@0 | 66 | here saying “About bloody time, now we can make some progress” but there’s a |
michael@0 | 67 | much bigger group that is genuinely emotional about this transition. |
michael@0 | 68 | Maybe it’s a function of seniority: I never met nor corresponded with Scott, and |
michael@0 | 69 | he hasn’t been |
michael@0 | 70 | much of a presence in the company’s conversation in the time I’ve been here. |
michael@0 | 71 | But there are a lot of smart, seasoned, unsentimental people making it clear |
michael@0 | 72 | that |
michael@0 | 73 | he’s been a major force in their lives, at a more personal level than I’m |
michael@0 | 74 | used to hearing when people speak about executives. I guess also that to a |
michael@0 | 75 | lot of people, Sun’s vision, for which Scott gets some of the credit, was a |
michael@0 | 76 | radical and wonderful thing. I first used Unix in 1979 and quit a nice |
michael@0 | 77 | big-company job |
michael@0 | 78 | to become a VAX-bsd sysadmin in 1983, so I’ve always kind of |
michael@0 | 79 | lived inside that vision. |
michael@0 | 80 | But I’ll tell you one thing, what I’ve been hearing the last couple of days |
michael@0 | 81 | makes me really regret that I didn’t get to know Scott.</p> |
michael@0 | 82 | </div></content></entry> |
michael@0 | 83 | |
michael@0 | 84 | <entry xml:base='When/200x/2006/04/26/'> |
michael@0 | 85 | <title>Jacobs, Pictures, Spartans</title> |
michael@0 | 86 | <link href='Jane-Jacobs' /> |
michael@0 | 87 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/26/Jane-Jacobs</id> |
michael@0 | 88 | <published>2006-04-26T13:00:00-08:00</published> |
michael@0 | 89 | <updated>2006-04-26T17:28:59-08:00</updated> |
michael@0 | 90 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World' /> |
michael@0 | 91 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World' /> |
michael@0 | 92 | <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Photos' /> |
michael@0 | 93 | <category scheme='http://www.tbray.org/ongoing/What/' term='Arts' /> |
michael@0 | 94 | <category scheme='http://www.tbray.org/ongoing/What/' term='Photos' /> |
michael@0 | 95 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 96 | <p><a href="http://en.wikipedia.org/wiki/Jane_Jacobs">Jane Jacobs</a> died; |
michael@0 | 97 | the city I live in, Vancouver, is pretty solidly Jacobsian both in its current |
michael@0 | 98 | shape and its planning dogma. By choosing to live here I’m empirically a |
michael@0 | 99 | fan. Oddly, few have remarked how great Jacobs |
michael@0 | 100 | <em>looked</em>; her face commanded the eye. Which leads me Alex |
michael@0 | 101 | Waterhouse-Hayward’s wonderful |
michael@0 | 102 | <a href="http://www.alexwaterhousehayward.com/blog/2006/04/jane-jacobs-viveca-lindfors_26.html">Jane Jacobs & Viveca Lindfors</a>; |
michael@0 | 103 | surprising portraits and thoughts on decoration. W-H’s blog has become one of |
michael@0 | 104 | only two or three that I |
michael@0 | 105 | stab at excitedly whenever I see something new. For example, see |
michael@0 | 106 | <a href="http://www.alexwaterhousehayward.com/blog/archives/2006_04_01_archive.html#114476408248660848">Sex Crimes, Homicide and Drugs</a> |
michael@0 | 107 | and yes, that’s what it’s about. |
michael@0 | 108 | Staying with the death-and-betrayal theme, and apparently (but not really) |
michael@0 | 109 | shifting back 2½ millennia, see John Cowan’s |
michael@0 | 110 | <a href="http://recycledknowledge.blogspot.com/2006/04/war-after-simonides.html">The |
michael@0 | 111 | War (after Simonides)</a>, being careful to look closely at the links. |
michael@0 | 112 | I’ve |
michael@0 | 113 | <a href="http://www.tbray.org/ongoing/When/200x/2003/03/24/Herodotus">written</a> |
michael@0 | 114 | about those same wars.</p> |
michael@0 | 115 | </div></content></entry> |
michael@0 | 116 | |
michael@0 | 117 | <entry xml:base='When/200x/2006/04/25/'> |
michael@0 | 118 | <title>LAMP and MARS</title> |
michael@0 | 119 | <link href='Scaling-Rails' /> |
michael@0 | 120 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/25/Scaling-Rails</id> |
michael@0 | 121 | <published>2006-04-25T13:00:00-08:00</published> |
michael@0 | 122 | <updated>2006-04-26T07:24:06-08:00</updated> |
michael@0 | 123 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Web' /> |
michael@0 | 124 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' /> |
michael@0 | 125 | <category scheme='http://www.tbray.org/ongoing/What/' term='Web' /> |
michael@0 | 126 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Sun' /> |
michael@0 | 127 | <category scheme='http://www.tbray.org/ongoing/What/' term='Sun' /> |
michael@0 | 128 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 129 | <p>At |
michael@0 | 130 | <a href="/ongoing/When/200x/2006/04/13/RoR">that Rails conference</a>, when I |
michael@0 | 131 | was |
michael@0 | 132 | <a href="http://blog.garbledygook.com/2006/04/17/ruby-on-rails-podcast-tim-bray-ruby-on-rails-podcast/">talking</a> |
michael@0 | 133 | to |
michael@0 | 134 | <a href="http://jroller.com/page/obie">Obie Fernandez</a>, he asked, more or |
michael@0 | 135 | less “How can Sun love us? We’re not Java” and I said, more or less, “Hey, |
michael@0 | 136 | you’re programmers, you write software and there have to be computers to run |
michael@0 | 137 | it, we sell computers, why wouldn’t we love you?” Anyhow, we touched on |
michael@0 | 138 | parallelism a bit and I talked up the |
michael@0 | 139 | <a href="http://www.sun.com/processors/UltraSPARC-T1/">T1</a>; |
michael@0 | 140 | Obie took that ball and |
michael@0 | 141 | <a href="http://jroller.com/page/obie?entry=will_ultrasparc_t1_emerge_as">ran with it</a>, |
michael@0 | 142 | saying all sorts of positive things about synergy between Rails’ |
michael@0 | 143 | shared-nothing architecture and our multicore systems. Yeah, well, good in |
michael@0 | 144 | theory, but I’m too old to make that kind of prediction without running some |
michael@0 | 145 | tests. Hah, it turns out that |
michael@0 | 146 | <a href="http://joyent.com/">Joyent</a> has been |
michael@0 | 147 | <a href="http://scalewithrails.com/">doing that</a>, and have |
michael@0 | 148 | <a href="http://scalewithrails.com/downloads/ScaleWithRails-April2006.pdf">76 |
michael@0 | 149 | PDF slides</a> on the subject. |
michael@0 | 150 | If you care about big-system scaling issues, read the whole thing; a little |
michael@0 | 151 | long, but amusing and with hardly any bullet lists. If you’re a Sun |
michael@0 | 152 | shareholder looking for a pick-me up, check out slides 40-41, 49, and 52-74. |
michael@0 | 153 | Oh, I gather that the T1, Solaris, and ZFS are OK for Java too. |
michael@0 | 154 | <i>[Update: The title was just “SAMR”, as in LAMP with two new letters. |
michael@0 | 155 | Enough people didn’t get it that I was forced to think about it, and MARS |
michael@0 | 156 | works better anyhow.]</i></p> |
michael@0 | 157 | </div></content></entry> |
michael@0 | 158 | |
michael@0 | 159 | <entry xml:base='When/200x/2006/04/25/'> |
michael@0 | 160 | <title>Real-Time Journalism</title> |
michael@0 | 161 | <link href='Talk-With-Berlind' /> |
michael@0 | 162 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/25/Talk-With-Berlind</id> |
michael@0 | 163 | <published>2006-04-25T13:00:00-08:00</published> |
michael@0 | 164 | <updated>2006-04-26T06:40:19-08:00</updated> |
michael@0 | 165 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Journalism' /> |
michael@0 | 166 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World' /> |
michael@0 | 167 | <category scheme='http://www.tbray.org/ongoing/What/' term='Journalism' /> |
michael@0 | 168 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Syndication' /> |
michael@0 | 169 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' /> |
michael@0 | 170 | <category scheme='http://www.tbray.org/ongoing/What/' term='Syndication' /> |
michael@0 | 171 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 172 | <p>I got email late yesterday from |
michael@0 | 173 | <a href="http://blogs.zdnet.com/bio.php#berlind">David Berlind</a>: “Hey, can |
michael@0 | 174 | I call you for a minute?” He wanted commentary on |
michael@0 | 175 | <a href="http://blogs.zdnet.com/BTL/?p=2906">a story he was writing</a> that I |
michael@0 | 176 | think is about the potential for intellectual-property lock-ins on RSS and Atom |
michael@0 | 177 | extensions. I say “I think is about” because the headline is “Will or could |
michael@0 | 178 | RSS get forked?”. After a few minutes’ chat, David asked if he could record |
michael@0 | 179 | for a podcast, and even though I only had a cellphone, the audio came out OK. |
michael@0 | 180 | The conversation was rhythmic: David brought up a succession of potential |
michael@0 | 181 | issues and answered each along the lines of “Yes, it’s reasonable to worry |
michael@0 | 182 | about that, but in this |
michael@0 | 183 | case I don’t see any particular problems.” |
michael@0 | 184 | Plus I emitted a mercifully-brief rant on the difference between protocols, |
michael@0 | 185 | data, and software. |
michael@0 | 186 | On the one hand, I thought David could have been a |
michael@0 | 187 | little clearer that I was pushing back against the thrust of his story, but on |
michael@0 | 188 | the other hand he included the whole conversation right |
michael@0 | 189 | there in the piece, so anyone who actually cares can listen and find out what |
michael@0 | 190 | I actually said, not what I think I said nor what David reported I said. |
michael@0 | 191 | I find this raw barely-intermediated journalism (we |
michael@0 | 192 | talk on the phone this afternoon, it’s on the Web in hours) a little |
michael@0 | 193 | shocking still. |
michael@0 | 194 | On balance, it’s better than the way we used to do things.</p> |
michael@0 | 195 | </div></content></entry> |
michael@0 | 196 | |
michael@0 | 197 | <entry xml:base='When/200x/2006/04/24/'> |
michael@0 | 198 | <title>The Transition Explained</title> |
michael@0 | 199 | <link href='CEO-Transition' /> |
michael@0 | 200 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/24/CEO-Transition</id> |
michael@0 | 201 | <published>2006-04-24T13:00:00-08:00</published> |
michael@0 | 202 | <updated>2006-04-24T16:49:05-08:00</updated> |
michael@0 | 203 | <category scheme='http://www.tbray.org/ongoing/What/' term='Business/Sun' /> |
michael@0 | 204 | <category scheme='http://www.tbray.org/ongoing/What/' term='Business' /> |
michael@0 | 205 | <category scheme='http://www.tbray.org/ongoing/What/' term='Sun' /> |
michael@0 | 206 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 207 | <p>It’s not that complicated, really. |
michael@0 | 208 | Bloggers are |
michael@0 | 209 | <a href="http://www.sun.com/2006-0418/js/index.jsp">taking over the world</a>. |
michael@0 | 210 | Resistance is futile; you will be assimilated.</p> |
michael@0 | 211 | </div></content></entry> |
michael@0 | 212 | |
michael@0 | 213 | <entry xml:base='When/200x/2006/04/24/'> |
michael@0 | 214 | <title>5✭♫: One More Cup of Coffee</title> |
michael@0 | 215 | <link href='One-More-Cup-Of-Coffee' /> |
michael@0 | 216 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/24/One-More-Cup-Of-Coffee</id> |
michael@0 | 217 | <published>2006-04-24T13:00:00-08:00</published> |
michael@0 | 218 | <updated>2006-04-24T13:00:00-08:00</updated> |
michael@0 | 219 | <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Music/Recordings' /> |
michael@0 | 220 | <category scheme='http://www.tbray.org/ongoing/What/' term='Arts' /> |
michael@0 | 221 | <category scheme='http://www.tbray.org/ongoing/What/' term='Music' /> |
michael@0 | 222 | <category scheme='http://www.tbray.org/ongoing/What/' term='Recordings' /> |
michael@0 | 223 | <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Music/5 Stars' /> |
michael@0 | 224 | <category scheme='http://www.tbray.org/ongoing/What/' term='5 Stars' /> |
michael@0 | 225 | <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>I’m not really a <a href='http://en.wikipedia.org/wiki/Bob_Dylan'>Bob Dylan</a> fan. A voice like that, and a tunesmithing talent like that, come along only a few times per century, but he’s still kind of irritating. That aside, the song <cite>One More Cup of Coffee</cite>, from the 1976 album <a href='http://en.wikipedia.org/wiki/Desire_%28album%29'>Desire</a>, can’t be ignored; wonderful tune, wonderful orchestration, wonderful performance. <i>(“5✭♫” series introduction <a href='/ongoing/When/200x/2006/01/23/5-Star-Music'>here</a>; with <a href='/ongoing/When/200x/2006/01/23/5-Star-Music#p-1'>an explanation</a> of why the title may look broken.)</i></div></summary> |
michael@0 | 226 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 227 | <p>I’m not really a |
michael@0 | 228 | <a href="http://en.wikipedia.org/wiki/Bob_Dylan">Bob Dylan</a> fan. A voice |
michael@0 | 229 | like that, and a tunesmithing talent like that, come along only a few times |
michael@0 | 230 | per century, but he’s still kind of irritating. |
michael@0 | 231 | That aside, the song <cite>One More Cup of Coffee</cite>, from the 1976 album |
michael@0 | 232 | <a href="http://en.wikipedia.org/wiki/Desire_%28album%29">Desire</a>, can’t be |
michael@0 | 233 | ignored; wonderful tune, wonderful orchestration, wonderful performance. |
michael@0 | 234 | <i>(“5✭♫” series introduction <a href="/ongoing/When/200x/2006/01/23/5-Star-Music">here</a>; |
michael@0 | 235 | with <a href="/ongoing/When/200x/2006/01/23/5-Star-Music#p-1">an |
michael@0 | 236 | explanation</a> of why the title may look broken.)</i></p> |
michael@0 | 237 | <img src="Desire.png" class="inline" alt="Desire, by Bob Dylan" /> |
michael@0 | 238 | <h2 id='p-1'>The Context</h2> |
michael@0 | 239 | <p>Nothing I can possibly write will add any wisdom to the |
michael@0 | 240 | millions of words, some 90% of them in excess of needs, written on the subject |
michael@0 | 241 | of this particular person.</p> |
michael@0 | 242 | <p>A personal statement: Bob Dylan has long irritated me for, during the first |
michael@0 | 243 | thirty years or |
michael@0 | 244 | so of his career, never having given a straight answer to a straight question, |
michael@0 | 245 | and for writing songs with dozens of boring verses. But they’ll still be |
michael@0 | 246 | listening |
michael@0 | 247 | to lots of his performances long after I’m dead, and in recent years he’s |
michael@0 | 248 | become a better, more direct, interview.</p> |
michael@0 | 249 | <p>My taste in Dylan is a little unusual: once you get past <cite>One More Cup |
michael@0 | 250 | of Coffee</cite>, my favorites would be <cite>Baby Let Me Follow You |
michael@0 | 251 | Down</cite> (from the <cite>Last Waltz</cite> soundtrack) and |
michael@0 | 252 | <cite>Crash on the Levee (Down in the Flood)</cite> from |
michael@0 | 253 | <a href="http://en.wikipedia.org/wiki/The_Basement_Tapes">The Basement |
michael@0 | 254 | Tapes</a>.</p> |
michael@0 | 255 | <p><cite>Desire</cite>, the record, is hit and miss. <cite>Joey</cite>, |
michael@0 | 256 | glorification of the life of some mafioso, is flawed in concept |
michael@0 | 257 | and unlistenable in execution. <cite>Hurricane</cite>, whatever you think |
michael@0 | 258 | about |
michael@0 | 259 | <a href="http://en.wikipedia.org/wiki/Rubin_Carter">Mr. Carter</a>, that song |
michael@0 | 260 | rocks; and <cite>Isis</cite> hits pretty hard too.</p> |
michael@0 | 261 | <h2 id='p-2'>The Music</h2> |
michael@0 | 262 | <p>Is there anything in <cite>One More Cup of Coffee</cite> that’s not |
michael@0 | 263 | perfect? Well yes, in the verses, the |
michael@0 | 264 | lyrics on occasion drag (“He oversees his kingdom / So no stranger does |
michael@0 | 265 | intrude / His voice it trembles as he calls out / For another plate of food”). |
michael@0 | 266 | But apart from that, the sentiment is compelling, |
michael@0 | 267 | <a href="http://en.wikipedia.org/wiki/Scarlet_Rivera">Scarlet Rivera’s</a> |
michael@0 | 268 | violin is beautifully scored and played, the tune is to die for, and the |
michael@0 | 269 | backing vocals are by Emmylou Harris, who you can bet is going to be here in |
michael@0 | 270 | the 5-✭ series one of these days. |
michael@0 | 271 | And while there’s not much middle ground on the subject of Dylan’s singing, if |
michael@0 | 272 | you like it, you’ll <em>really</em> like this song.</p> |
michael@0 | 273 | <p>Listen to the choruses: Bob and Emmylou veer wildly around the rhythm, then |
michael@0 | 274 | coalesce on the beat when it matters, and they’re making it |
michael@0 | 275 | up as they go along, they’re wholly inhabiting the moment, and it’s |
michael@0 | 276 | quite, quite perfect.</p> |
michael@0 | 277 | <h2 id='p-3'>Sampling It</h2> |
michael@0 | 278 | <p>Oh yeah, it’s out there. And there’s a live version too; but the smart |
michael@0 | 279 | thing would be to go buy the un-compressed un-DRM’ed shiny round silver |
michael@0 | 280 | version of <cite>Desire</cite>; it’s a keeper.</p> |
michael@0 | 281 | </div></content></entry> |
michael@0 | 282 | |
michael@0 | 283 | <entry xml:base='When/200x/2006/04/24/'> |
michael@0 | 284 | <title>Atomic Monday</title> |
michael@0 | 285 | <link href='Atomic-Monday' /> |
michael@0 | 286 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/24/Atomic-Monday</id> |
michael@0 | 287 | <published>2006-04-24T13:00:00-08:00</published> |
michael@0 | 288 | <updated>2006-04-24T00:44:06-08:00</updated> |
michael@0 | 289 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Syndication' /> |
michael@0 | 290 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' /> |
michael@0 | 291 | <category scheme='http://www.tbray.org/ongoing/What/' term='Syndication' /> |
michael@0 | 292 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Atom' /> |
michael@0 | 293 | <category scheme='http://www.tbray.org/ongoing/What/' term='Atom' /> |
michael@0 | 294 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 295 | <p>First of all, implementors of anything Atom-related need to spend some time |
michael@0 | 296 | <a href="http://golem.ph.utexas.edu/~distler/blog/archives/000793.html">chez |
michael@0 | 297 | Jacques Distler</a>; in particular, the conversation that plays out in the |
michael@0 | 298 | comments. Second, there’s this piece of software called |
michael@0 | 299 | <a href="http://www.planetplanet.org/">Planet Planet</a> that allows you to |
michael@0 | 300 | make an aggregate web page by reading lots of feeds; for example, see |
michael@0 | 301 | <a href="http://www.planetapache.org/">Planet Apache</a> or |
michael@0 | 302 | <a href="http://planetsun.org/">Planet Sun</a>. |
michael@0 | 303 | Sam Ruby decided that its Atom support needed some work, so |
michael@0 | 304 | <a href="http://www.intertwingly.net/blog/2006/04/23/Adding-Atom-support-to-PlanetPlanet">he did |
michael@0 | 305 | it</a>. Now, here’s the exciting part: he pinged me over the weekend and said |
michael@0 | 306 | “Hey, look at this” wanting to show me his cleverly-Atomized |
michael@0 | 307 | Planet Intertwingly feed. |
michael@0 | 308 | I looked at it in |
michael@0 | 309 | <a href="http://ranchero.com/netnewswire/">NetNewsWire</a> and was puzzled for |
michael@0 | 310 | a moment; some but not all of the |
michael@0 | 311 | things in the feed were highlighted as unread, even though this was the first |
michael@0 | 312 | time I’d seen it. Then the light went on. |
michael@0 | 313 | This |
michael@0 | 314 | is Atom doing <em>exactly what we went to all that trouble to make it do</em>. |
michael@0 | 315 | NetNewsWire has good Atom support and, because Atom entries all have unique |
michael@0 | 316 | IDs and timestamps, it can |
michael@0 | 317 | tell that it’s seen lots of those entries before in other feeds that I |
michael@0 | 318 | subscribe to. That’s how I found Jacques’ piece. This is huge; anyone who |
michael@0 | 319 | uses synthetic or aggregated feeds knows that dupes are a big problem, showing |
michael@0 | 320 | up all over the place. |
michael@0 | 321 | No longer, Atom makes that problem go away.</p> |
michael@0 | 322 | </div></content></entry> |
michael@0 | 323 | |
michael@0 | 324 | <entry xml:base='When/200x/2006/04/22/'> |
michael@0 | 325 | <title>Hyatt on the High-Res Web</title> |
michael@0 | 326 | <link href='High-Res-Web' /> |
michael@0 | 327 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/22/High-Res-Web</id> |
michael@0 | 328 | <published>2006-04-22T13:00:00-08:00</published> |
michael@0 | 329 | <updated>2006-04-23T17:12:18-08:00</updated> |
michael@0 | 330 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Web' /> |
michael@0 | 331 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' /> |
michael@0 | 332 | <category scheme='http://www.tbray.org/ongoing/What/' term='Web' /> |
michael@0 | 333 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Presentation' /> |
michael@0 | 334 | <category scheme='http://www.tbray.org/ongoing/What/' term='Presentation' /> |
michael@0 | 335 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 336 | <p>Check out Dave Hyatt’s |
michael@0 | 337 | <a href="http://webkit.opendarwin.org/blog/?p=55">excellent write-up</a> on |
michael@0 | 338 | designing and rendering Web pages so they take advantage of the |
michael@0 | 339 | higher-resolution screens that <em>may</em> be coming our way. |
michael@0 | 340 | I emphasize “may” because I’ve seen how slowly we’ve picked up pixels over |
michael@0 | 341 | the years. The first really substantial screen I ever worked on was a |
michael@0 | 342 | 1988-vintage Sun workstation with about a million pixels. The Mac on my |
michael@0 | 343 | lap right now, which has 125 times as much memory as that workstation, has |
michael@0 | 344 | only 1.38 million pixels. |
michael@0 | 345 | Anyhow, Hyatt has some smart things to say on the issues, |
michael@0 | 346 | which are trickier than you might think. I suspect that sometime in a couple of |
michael@0 | 347 | years, if I still care about <span class='o'>ongoing</span>, I’m going to |
michael@0 | 348 | have to go back and reprocess all the images so that higher-res versions are |
michael@0 | 349 | available for those who have the screens and don’t mind downloading bigger |
michael@0 | 350 | files. |
michael@0 | 351 | Anyhow, Dave’s piece may be slightly misleading in that he talks about SVG |
michael@0 | 352 | as though |
michael@0 | 353 | it’s something coming in the future. Not so, check out |
michael@0 | 354 | <a href="http://zcorpan.1go.dk/sandbox/svg/atom/.xml">this nifty SVG Atom |
michael@0 | 355 | logo</a>, which works fine in all the Mozilla browsers I have here. |
michael@0 | 356 | Load it up, resize the window, and watch what happens. Then do a “view |
michael@0 | 357 | source”. |
michael@0 | 358 | <i>[Update: |
michael@0 | 359 | <a href="http://blog.codedread.com">Jeff Schiller</a> writes to tell me that |
michael@0 | 360 | Opera 9 does SVG (and Opera 8 “SVG Tiny”) too.] |
michael@0 | 361 | [<a href="http://www.freeke.org/ffg">Dave Walker</a> writes: Though the shipping version of Safari doesn’t support SVG, |
michael@0 | 362 | <a href="http://nightly.webkit.org/builds/Latest-WebKit-SVN.dmg">the |
michael@0 | 363 | nightlies</a> do.] |
michael@0 | 364 | [<a href="http://www.davelemen.com/archives/2006/04/is_it_time_for_jpeg_2000_to_go_mainstream.html">Dave Lemen</a> |
michael@0 | 365 | points to |
michael@0 | 366 | <a href="http://en.wikipedia.org/wiki/JPEG-2000">JPEG 2000</a> as possibly |
michael@0 | 367 | useful in a high-res context.]</i></p> |
michael@0 | 368 | </div></content></entry> |
michael@0 | 369 | |
michael@0 | 370 | <entry xml:base='When/200x/2006/04/23/'> |
michael@0 | 371 | <title>Wrong About the Infield Fly Rule</title> |
michael@0 | 372 | <link href='Wrong-About-the-Infield-Fly-Rule' /> |
michael@0 | 373 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/23/Wrong-About-the-Infield-Fly-Rule</id> |
michael@0 | 374 | <published>2006-04-23T13:00:00-08:00</published> |
michael@0 | 375 | <updated>2006-04-23T15:02:41-08:00</updated> |
michael@0 | 376 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Family' /> |
michael@0 | 377 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World' /> |
michael@0 | 378 | <category scheme='http://www.tbray.org/ongoing/What/' term='Family' /> |
michael@0 | 379 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 380 | <p>My brother |
michael@0 | 381 | <a href="http://takingalongview.blogspot.com/">Rob</a> is really taking to |
michael@0 | 382 | this blogging medium. Check out his recent |
michael@0 | 383 | <a href="http://takingalongview.blogspot.com/2006/04/credo.html">Credo</a>, |
michael@0 | 384 | and also the only instance I’ve seen of |
michael@0 | 385 | <a href="http://takingalongview.blogspot.com/2006/04/ode-to-96-chevy-lumina.html">Anglo-Saxon alliterative poetry</a> |
michael@0 | 386 | applied to a mini-van.</p> |
michael@0 | 387 | </div></content></entry> |
michael@0 | 388 | |
michael@0 | 389 | <entry xml:base='When/200x/2004/12/12/'> |
michael@0 | 390 | <title>Statistics</title> |
michael@0 | 391 | <link href='BMS' /> |
michael@0 | 392 | <id>http://www.tbray.org/ongoing/When/200x/2004/12/12/BMS</id> |
michael@0 | 393 | <published>2004-12-12T12:00:00-08:00</published> |
michael@0 | 394 | <updated>2006-04-23T10:10:02-08:00</updated> |
michael@0 | 395 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Publishing' /> |
michael@0 | 396 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' /> |
michael@0 | 397 | <category scheme='http://www.tbray.org/ongoing/What/' term='Publishing' /> |
michael@0 | 398 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Web' /> |
michael@0 | 399 | <category scheme='http://www.tbray.org/ongoing/What/' term='Web' /> |
michael@0 | 400 | <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Almost every Sunday I grab the week’s <span class="o">ongoing</span> logfiles and update my numbers. I find it interesting and maybe others will too, so this entry is now the charts’ permanent home. I’ll update it most weeks, probably. <i>[Updated: 2006/04/23.]</i></div></summary> |
michael@0 | 401 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 402 | <p>Almost every Sunday I grab the week’s <span class='o'>ongoing</span> |
michael@0 | 403 | logfiles and update my numbers. |
michael@0 | 404 | I find it interesting |
michael@0 | 405 | and maybe others will too, so |
michael@0 | 406 | this entry is now the charts’ permanent home. I’ll update it most weeks, |
michael@0 | 407 | probably. |
michael@0 | 408 | <i>[Updated: 2006/04/23.]</i></p> |
michael@0 | 409 | <img src="Browser-Market-Share.png" alt="Browser market shares at ‘ongoing’" /> |
michael@0 | 410 | <div class="caption"><p>Browsers visiting <span class='o'>ongoing</span>, |
michael@0 | 411 | percent.</p></div> |
michael@0 | 412 | <img src="Browsers-via-search.png" alt="Browser market shares at ‘ongoing’, visitors via search engines" /> |
michael@0 | 413 | <div class="caption"><p>Browsers visiting <span class='o'>ongoing</span> via |
michael@0 | 414 | search engines, percent.</p></div> |
michael@0 | 415 | <img src="Search-Engines.png" alt="Search engine market shares at ‘ongoing’" /> |
michael@0 | 416 | <div class="caption"><p>Search referrals to <span |
michael@0 | 417 | class='o'>ongoing</span> .</p></div> |
michael@0 | 418 | <img src="Feeds.png" alt="RSS and Atom feed fetches" /> |
michael@0 | 419 | <div class="caption"><p>Fetches of the RSS 2.0 and Atom 1.0 feeds.</p></div> |
michael@0 | 420 | <p>The notes on usage and source code will return in coming weeks when I get |
michael@0 | 421 | the cycles to rewrite this whole article.</p> |
michael@0 | 422 | <h2 id='p-1'>What a “Hit” Means</h2> |
michael@0 | 423 | <p>I recently |
michael@0 | 424 | <a href="/ongoing/When/200x/2006/02/07/Thumbnail">updated</a> the |
michael@0 | 425 | <a href="/ongoing/misc/Colophon"><span class='o'>ongoing</span> software</a> |
michael@0 | 426 | (but haven’t updated the Colophon I see, oops). |
michael@0 | 427 | Anyhow, the <code>XMLHttpRequest</code> now issued by each page seems to be a |
michael@0 | 428 | pretty reliable counter of the number of actual browsers with humans behind |
michael@0 | 429 | them reading the pages. I checked against |
michael@0 | 430 | <a href="/ongoing/When/200x/2005/12/04/Google-Analytics">Google Analytics</a> |
michael@0 | 431 | and the numbers agreed to within a dozen or two on days with 5,000 to 10,000 |
michael@0 | 432 | page views; interestingly, Google Analytics was always 10 or 20 views |
michael@0 | 433 | higher.</p> |
michael@0 | 434 | <p>Anyhow, do <em>not</em> conclude that now I know how many people are |
michael@0 | 435 | reading whatever it is I write here; because I publish lots of short pieces |
michael@0 | 436 | that are all there in my RSS feed, and anyone reading my Atom feed gets the |
michael@0 | 437 | full content of everything. |
michael@0 | 438 | I and I have <em>no #&*!$ idea</em> how many people look at my feeds.</p> |
michael@0 | 439 | <p>By the way, this was the first time in weeks and weeks that I’d looked at the |
michael@0 | 440 | Analytics numbers, and they showed almost exactly zero change from the report |
michael@0 | 441 | linked above. So I’m going to turn them off; they’re a little too intrusive |
michael@0 | 442 | and I think may be slowing page loads.</p> |
michael@0 | 443 | <p>Anyhow, I ran some detailed statistics on the traffic for Wednesday, |
michael@0 | 444 | February 8th, 2006.</p> |
michael@0 | 445 | <table cellspacing="3" cellpadding="2" class="wltable"> |
michael@0 | 446 | <tr valign="top"><td>Total connections to the server</td><td align="right">180,428</td></tr> |
michael@0 | 447 | <tr valign="top"><td>Total successful GET transactions</td><td align="right">155,507</td></tr> |
michael@0 | 448 | <tr valign="top"><td>Total fetches of the RSS and Atom feeds</td><td align="right">88,450</td></tr> |
michael@0 | 449 | <tr valign="top"><td>Total GET transactions that actually fetched data (i.e. status code |
michael@0 | 450 | 200 as opposed to 304)</td><td align="right">87,271</td></tr> |
michael@0 | 451 | <tr valign="top"><td>Total GETs of actual ongoing pages (i.e. not CSS, js, or |
michael@0 | 452 | images)</td><td align="right">18,444</td></tr> |
michael@0 | 453 | <tr valign="top"><td>Actual human page-views</td><td align="right">6,348</td> |
michael@0 | 454 | </tr> |
michael@0 | 455 | </table> |
michael@0 | 456 | <p>So, there you have it. Doing a bit of rounding, if you take the 180K |
michael@0 | 457 | transactions and subtract the 90K feed fetches and the 6000 actual human page |
michael@0 | 458 | views, you’re left with 84,000 or so “Web overhead” transactions, mostly |
michael@0 | 459 | stylesheets and graphics and so on. |
michael@0 | 460 | For every human who viewed a page, it was fetched almost twice again by |
michael@0 | 461 | various kinds of robots and non-browser automated agents.</p> |
michael@0 | 462 | <p>It’s amazing that the whole thing works at all.</p> |
michael@0 | 463 | </div></content></entry> |
michael@0 | 464 | |
michael@0 | 465 | <entry xml:base='When/200x/2006/04/18/'> |
michael@0 | 466 | <title>XML Automaton</title> |
michael@0 | 467 | <link href='XML-Grammar' /> |
michael@0 | 468 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/18/XML-Grammar</id> |
michael@0 | 469 | <published>2006-04-18T13:00:00-08:00</published> |
michael@0 | 470 | <updated>2006-04-23T08:25:56-08:00</updated> |
michael@0 | 471 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/XML' /> |
michael@0 | 472 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' /> |
michael@0 | 473 | <category scheme='http://www.tbray.org/ongoing/What/' term='XML' /> |
michael@0 | 474 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Coding' /> |
michael@0 | 475 | <category scheme='http://www.tbray.org/ongoing/What/' term='Coding' /> |
michael@0 | 476 | <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>In December of 1996 I released a piece of software called <a href='http://www.textuality.com/Lark/'>Lark</a>, which was the world’s first <a href='http://www.w3.org/TR/REC-xml/#dt-xml-proc'>XML Processor</a> (as the term is defined in the <a href='http://www.w3.org/TR/REC-xml/'>XML Specification</a>). It was successful, but I stopped maintaining it in 1998 because lots of other smart people, and some big companies like Microsoft, were shipping perfectly good processors. I never <em>quite</em> open-sourced it, holding back one clever bit in the moronic idea that I could make money out of Lark somehow. The magic sauce is a finite state machine that can be used to parse XML 1.0. Recently, someone out there needed one of those, so I thought I’d publish it, with some commentary on Lark’s construction and an amusing anecdote about the name. I doubt there are more than twelve people on the planet who care about this kind of parsing arcana. <i>[Rick Jelliffe <a href='http://www.oreillynet.com/xml/blog/2006/04/xml_in_xml.html'>has upgraded</a> the machine].</i></div></summary> |
michael@0 | 477 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 478 | <p>In December of 1996 I released a piece of software called |
michael@0 | 479 | <a href="http://www.textuality.com/Lark/">Lark</a>, which was |
michael@0 | 480 | the world’s first |
michael@0 | 481 | <a href="http://www.w3.org/TR/REC-xml/#dt-xml-proc">XML Processor</a> (as the |
michael@0 | 482 | term is defined in the |
michael@0 | 483 | <a href="http://www.w3.org/TR/REC-xml/">XML Specification</a>). |
michael@0 | 484 | It was successful, but I stopped maintaining it in 1998 because lots of other |
michael@0 | 485 | smart people, and some big companies like Microsoft, were shipping perfectly |
michael@0 | 486 | good processors. I never <em>quite</em> open-sourced it, holding back one |
michael@0 | 487 | clever bit in the moronic idea that I could make money out of Lark somehow. |
michael@0 | 488 | The magic sauce is a finite state machine that can be used to parse XML 1.0. |
michael@0 | 489 | Recently, someone out there needed one of those, so I thought I’d publish |
michael@0 | 490 | it, with some commentary on Lark’s construction and an amusing anecdote about |
michael@0 | 491 | the name. |
michael@0 | 492 | I doubt there are more than twelve people on the planet who care about |
michael@0 | 493 | this kind of parsing arcana. |
michael@0 | 494 | <i>[Rick Jelliffe |
michael@0 | 495 | <a href="http://www.oreillynet.com/xml/blog/2006/04/xml_in_xml.html">has |
michael@0 | 496 | upgraded</a> the machine].</i></p> |
michael@0 | 497 | <h2 id='p-1'>Why “Lark”?</h2> |
michael@0 | 498 | <p><a href="http://www.laurenwood.org/anyway/">Lauren</a> and I went to |
michael@0 | 499 | Australia in late 1996 to visit her mother and to get married, which we |
michael@0 | 500 | did on November 30th. Forty-eight hours later, Lauren twisted her knee |
michael@0 | 501 | badly enough that she was pretty well |
michael@0 | 502 | confined to a sofa for the rest of our Australian vacation.</p> |
michael@0 | 503 | <p>So I broke out my computer and finished the work I’d already started on my |
michael@0 | 504 | XML processor, and decided to call it Lark for <b>La</b>uren’s <b>R</b>ight |
michael@0 | 505 | <b>K</b>nee.</p> |
michael@0 | 506 | <h2 id='p-2'>How Lark Worked</h2> |
michael@0 | 507 | <p>Lark was a pure |
michael@0 | 508 | <a href="http://en.wikipedia.org/wiki/Deterministic_finite_state_machine">deterministic |
michael@0 | 509 | finite automaton</a> (DFA) |
michael@0 | 510 | parser, with a little teeny state stack. |
michael@0 | 511 | Some of its transitions were labeled with named “events” that would provoke |
michael@0 | 512 | the parser to do something if, for example, it had just recognized a start tag |
michael@0 | 513 | or whatever.</p> |
michael@0 | 514 | <p>DFA-driven parsers are a common enough design pattern, although I think |
michael@0 | 515 | Lark is the only example in the XML space. |
michael@0 | 516 | There are well-known parser generators such as |
michael@0 | 517 | <a href="http://en.wikipedia.org/wiki/Yacc">yacc</a>, |
michael@0 | 518 | <a href="http://en.wikipedia.org/wiki/GNU_bison">GNU bison</a>, and |
michael@0 | 519 | <a href="https://javacc.dev.java.net/">javacc</a>, |
michael@0 | 520 | usually used in combination with lexical scanners such as |
michael@0 | 521 | <a href="http://en.wikipedia.org/wiki/Flex_lexical_analyser">flex</a> so that |
michael@0 | 522 | you can write your grammar in terms of tokens not characters. |
michael@0 | 523 | Also, they handle LALR langauges, so the parsing technique is quite a bit |
michael@0 | 524 | richer than a pure state machine.</p> |
michael@0 | 525 | <p>I thought I had a better idea. The grammar of XML is simple |
michael@0 | 526 | enough, and the syntax characters few enough, that I thought I could just |
michael@0 | 527 | write down the state machine by hand. |
michael@0 | 528 | So that’s what I did, inventing a special-purpose DFA-description |
michael@0 | 529 | language for the purpose.</p> |
michael@0 | 530 | <p>Then I had a file called <code>Lark.jin</code> which was really a Java |
michael@0 | 531 | program that used the state machine to parse XML. The transition “events” |
michael@0 | 532 | in the machine were mapped to <code>case</code> labels in a huge |
michael@0 | 533 | <code>switch</code> construct. Then there was a horrible, <em>horrible</em> |
michael@0 | 534 | Perl program that read the <code>Lark.jin</code> and the automaton, |
michael@0 | 535 | generated the DFA tables in Java syntax, inserted them into the code and |
michael@0 | 536 | produced <code>Lark.java</code>, which you actually compiled |
michael@0 | 537 | to make the parser.</p> |
michael@0 | 538 | <p>So while Java doesn’t have a preprocessor, Lark did, which made quite a few |
michael@0 | 539 | things easier.</p> |
michael@0 | 540 | <p>There were a lot of tricks; some of the state transitions |
michael@0 | 541 | weren’t on characters, they were on XML character classes such as |
michael@0 | 542 | <code>NameChar</code> and so on. |
michael@0 | 543 | This made the automaton easier to write, and in fact, to keep the class files |
michael@0 | 544 | small, the character-class transitions persisted into the Java form, and the |
michael@0 | 545 | real DFA was built at startup time. |
michael@0 | 546 | These days, quick startup might be more important than <code>.class</code> |
michael@0 | 547 | file size.</p> |
michael@0 | 548 | <h2 id='p-3'>What Was Good</h2> |
michael@0 | 549 | <p>It was <em>damn</em> fast. James Clark managed to hand-craft a |
michael@0 | 550 | Java-language XML parser called |
michael@0 | 551 | <a href="http://jclark.com/xml/xp/index.html">XP</a> that was a little faster |
michael@0 | 552 | than Lark, but he did that by clever I/O buffering, and I was determined to |
michael@0 | 553 | leapfrog him by improving my I/O.</p> |
michael@0 | 554 | <p>This was before the time of standardized XML APIs, but Lark had a stream API |
michael@0 | 555 | that influenced SAX, and a DOM-like tree API; both worked just fine. |
michael@0 | 556 | Lark is one of very few parsers ever to have survived the |
michael@0 | 557 | <a href="http://www.securityfocus.com/archive/1/303509/2002-12-13/2002-12-19/0">billion |
michael@0 | 558 | laughs attack</a>.</p> |
michael@0 | 559 | <p>Lark was put into production in quite a few deployments, and the flow of |
michael@0 | 560 | bug reports slowed to a trickle. |
michael@0 | 561 | Then in 1998 I noticed that IBM and Microsoft and BEA and everyone else |
michael@0 | 562 | were building XML Processors, so I decided that it wasn’t worthwhile |
michael@0 | 563 | maintaining mine.</p> |
michael@0 | 564 | <h2 id='p-4'>What Was Bad</h2> |
michael@0 | 565 | <p>I never got around to teaching it namespaces, which means it wouldn’t be |
michael@0 | 566 | real useful today.</p> |
michael@0 | 567 | <p>It had one serious bug that would have been real work to fix and since |
michael@0 | 568 | nobody ever encountered it in practice, I kept putting it off and never did. |
michael@0 | 569 | If you had an internal parsed entity reference in an attribute value and the |
michael@0 | 570 | replacement text included the attribute delimiter (<code>'</code> or |
michael@0 | 571 | <code>"</code>), it would scream and claim you had a busted XML document.</p> |
michael@0 | 572 | <h2 id='p-5'>That Automaton</h2> |
michael@0 | 573 | <p>What happened was, |
michael@0 | 574 | <a href="http://www.oreillynet.com/pub/au/1712">Rick Jelliffe</a>, who is a |
michael@0 | 575 | Good Person, was |
michael@0 | 576 | <a href="http://www.stylusstudio.com/xmldev/200604/post30110.html">looking for |
michael@0 | 577 | a FSM for XML</a> and I eventually noticed, and so I sent him mine.</p> |
michael@0 | 578 | <p>There’s no reason whatsoever to keep it a secret: |
michael@0 | 579 | <a href="/ongoing/code/lark/com/textuality/autom.txt">here it is</a>. |
michael@0 | 580 | Be warned: it’s ugly.</p> |
michael@0 | 581 | <p>Fortunately, there were only 227 states and 8732 transitions, so the state |
michael@0 | 582 | number fit into a |
michael@0 | 583 | byte; that and the associated event index pack into a short. |
michael@0 | 584 | To make things even tighter, the transitions were only keyed by characters up |
michael@0 | 585 | to 127, as in 7-bit ASCII. |
michael@0 | 586 | Characters higher than that can’t be XML syntax characters, so we’re only |
michael@0 | 587 | interested whether they fall into classes like <code>NameChar</code> and |
michael@0 | 588 | <code>NameStartChar</code> and so on. A 64K <code>byte[]</code> array takes |
michael@0 | 589 | care of that, each byte having a class bitmask.</p> |
michael@0 | 590 | <p>As a result of all this jiggery-pokery, the DFA ends up, believe it |
michael@0 | 591 | or not, constituting a <code>short[227][128]</code>.</p> |
michael@0 | 592 | <p>Here’s a typical chunk of the automaton:</p> |
michael@0 | 593 | <pre><code>1. # in Start tag GI |
michael@0 | 594 | 2. State StagGI BustedMarkup {in element type} |
michael@0 | 595 | 3. T $NameC StagGI |
michael@0 | 596 | 4. T $S InStag !EndGI |
michael@0 | 597 | 5. T > InDoc !EndGI !ReportSTag |
michael@0 | 598 | 6. T / EmptyClose !EndGI</code></pre> |
michael@0 | 599 | <p>This state, called <code>StagGI</code>, is the state where we’re actually |
michael@0 | 600 | reading the name of a tag, we got here by seeing a <code><</code> followed |
michael@0 | 601 | by a <code>NameStart</code> character.<br/> |
michael@0 | 602 | Line 1 is a comment.<br/> |
michael@0 | 603 | In line 2 we name the state, and support error reporting, providing the name |
michael@0 | 604 | of another state to fall back into in case of error, and in the curly braces, |
michael@0 | 605 | some text to help build an error message.<br/> |
michael@0 | 606 | Line 3 says that if we see a valid XML Name character, we just stay in this |
michael@0 | 607 | state.<br/> |
michael@0 | 608 | Line 4 says that if we see an XML space character, we move to state |
michael@0 | 609 | <code>InStag</code> and process an <code>EndGI</code> event, which would stash |
michael@0 | 610 | the characters in the start tag.<br/>And so on.</p> |
michael@0 | 611 | <h2 id='p-6'>Other Hackery</h2> |
michael@0 | 612 | <p>An early cut of Lark used String and StringBuffer objects to hold all the |
michael@0 | 613 | bits and pieces of the XML. This might be a viable strategy today, but in |
michael@0 | 614 | 1996’s Java it was painfully slow. |
michael@0 | 615 | So the code goes to heroic lengths to live in the land of character arrays at |
michael@0 | 616 | all times, making Strings only when a client program asks for one through the |
michael@0 | 617 | API. The performance difference was mind-boggling.</p> |
michael@0 | 618 | <h2 id='p-7'>An Evil Idea</h2> |
michael@0 | 619 | <p>If you look at the automaton, and the Lark code, at least half—I’d bet |
michael@0 | 620 | three quarters—is there to deal with parsing the DTD and then dealing with |
michael@0 | 621 | entity wrangling. |
michael@0 | 622 | A whole bunch more is there to support DOM-building and walking.</p> |
michael@0 | 623 | <p>I bet if I went through and simply removed support for anything coming out |
michael@0 | 624 | of the <code><!DOCTYPE></code>, including all entity processing, |
michael@0 | 625 | then discarded |
michael@0 | 626 | the DOM stuff, then added namespace support and SAX and StAX APIs, it would be |
michael@0 | 627 | less than half its current size. |
michael@0 | 628 | Then if I reworked the I/O, knowing what I know now and stealing some tricks |
michael@0 | 629 | that James Clark uses in |
michael@0 | 630 | <a href="http://expat.sourceforge.net/">expat</a>, I bet it would |
michael@0 | 631 | be the fastest Java XML parser on the planet for XML docs without a |
michael@0 | 632 | DOCTYPE; by a wide margin. It’s hard to beat a DFA.</p> |
michael@0 | 633 | <p>And it would still be fully XML 1.0 compliant. Because (snicker) this is |
michael@0 | 634 | Java, and your basic core Java now includes an XML parser, so I could simply |
michael@0 | 635 | instrument Larkette to buffer the prologue and if it saw a DOCTYPE with an |
michael@0 | 636 | internal subset, defer to Java’s built-in parser.</p> |
michael@0 | 637 | <p>I’ll probably never do it. But the thought brings a smile to my face.</p> |
michael@0 | 638 | </div></content></entry> |
michael@0 | 639 | |
michael@0 | 640 | <entry xml:base='When/200x/2006/04/22/'> |
michael@0 | 641 | <title>Just A Kid</title> |
michael@0 | 642 | <link href='Just-a-Kid' /> |
michael@0 | 643 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/22/Just-a-Kid</id> |
michael@0 | 644 | <published>2006-04-22T13:00:00-08:00</published> |
michael@0 | 645 | <updated>2006-04-22T13:37:58-08:00</updated> |
michael@0 | 646 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Food and Drink' /> |
michael@0 | 647 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World' /> |
michael@0 | 648 | <category scheme='http://www.tbray.org/ongoing/What/' term='Food and Drink' /> |
michael@0 | 649 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 650 | <p>Last weekend, Lauren felt like cooking up home-made Easter eggs, so |
michael@0 | 651 | the shopping list included “chocolate chips (large bag)”. I was heading down |
michael@0 | 652 | the bulk-foods aisle and realized one of the vertical acrylic bins was full of |
michael@0 | 653 | them. Someone had been sloppy, and there was a little heap of chocolate chips |
michael@0 | 654 | on the shelf underneath it. For a second, I flashed into pure eight-year-old |
michael@0 | 655 | mode, thinking “Holy cow, there’s a <em>whole bin</em> full of chocolate |
michael@0 | 656 | chips, and more just lying there!” I popped a few in my mouth and they were |
michael@0 | 657 | excellent; semi-sweet, dark, strong, and firm. I was still in the state that |
michael@0 | 658 | Buddhists don’t mean when they say “Child’s Mind”, thinking “I |
michael@0 | 659 | can get as many as I want!” The list did say “large bag” after all, so I put |
michael@0 | 660 | a bag under the spout and gleefully jammed the lever <em>all the way |
michael@0 | 661 | over</em>. At home, Lauren said “You went overboard, a bit, didn’t you?” |
michael@0 | 662 | and now we have a plastic canister-full in the pantry which should last us |
michael@0 | 663 | into 2007. It’s a good feeling.</p> |
michael@0 | 664 | </div></content></entry> |
michael@0 | 665 | |
michael@0 | 666 | <entry xml:base='When/200x/2006/04/22/'> |
michael@0 | 667 | <title>Goddess</title> |
michael@0 | 668 | <link href='Goddess' /> |
michael@0 | 669 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/22/Goddess</id> |
michael@0 | 670 | <published>2006-04-22T13:00:00-08:00</published> |
michael@0 | 671 | <updated>2006-04-22T12:25:59-08:00</updated> |
michael@0 | 672 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Family' /> |
michael@0 | 673 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World' /> |
michael@0 | 674 | <category scheme='http://www.tbray.org/ongoing/What/' term='Family' /> |
michael@0 | 675 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Microsoft' /> |
michael@0 | 676 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' /> |
michael@0 | 677 | <category scheme='http://www.tbray.org/ongoing/What/' term='Microsoft' /> |
michael@0 | 678 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 679 | <p>That would be my wife |
michael@0 | 680 | <a href="http://www.laurenwood.org/anyway/">Lauren</a>. After |
michael@0 | 681 | <a href="/ongoing/When/200x/2006/04/16/Mad-at-Microsoft">I b0rked</a> our |
michael@0 | 682 | Win2K gamebox, I tried re-installing the OS and eventually reduced it to |
michael@0 | 683 | complete brick-ness, it recognized neither the video adapter nor the network |
michael@0 | 684 | card. So Lauren brushed me aside and started wrestling with the problem, and |
michael@0 | 685 | to make a long story short, it almost completely works again. At one point |
michael@0 | 686 | she seemed nearly infinite in her capabilities, sitting in front of the |
michael@0 | 687 | computer wrangling software updates while knitting baby stuff and looking up |
michael@0 | 688 | words in a German dictionary for the kid’s homework. Some of the German nouns |
michael@0 | 689 | and muttered curses at the Windows install sounded remarkably like each other. |
michael@0 | 690 | Why would anyone not marry a geek? The only problem is that Win2K won’t |
michael@0 | 691 | auto-switch resolutions to play games any more, it gets the frequency wrong |
michael@0 | 692 | and the LCD goes pear-shaped, you have to hand-select the frequency and |
michael@0 | 693 | switch into the right resolution first. LazyWeb?</p> |
michael@0 | 694 | </div></content></entry> |
michael@0 | 695 | |
michael@0 | 696 | <entry xml:base='When/200x/2006/04/21/'> |
michael@0 | 697 | <title>Routing Around Spotlight</title> |
michael@0 | 698 | <link href='Routing-Around-Spotlight' /> |
michael@0 | 699 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/21/Routing-Around-Spotlight</id> |
michael@0 | 700 | <published>2006-04-21T13:00:00-08:00</published> |
michael@0 | 701 | <updated>2006-04-21T23:16:25-08:00</updated> |
michael@0 | 702 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Mac OS X/Gripes' /> |
michael@0 | 703 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' /> |
michael@0 | 704 | <category scheme='http://www.tbray.org/ongoing/What/' term='Mac OS X' /> |
michael@0 | 705 | <category scheme='http://www.tbray.org/ongoing/What/' term='Gripes' /> |
michael@0 | 706 | <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Herewith two hideously ugly little shell scripts for use when Spotlight refuses to search your mail. Spotlight is a flawed v1.0 implementation of a really good idea and will, I’m sure, be debugged in a near-future release. <i>[Update: The LazyWeb is educating me... these are moving targets.]</i></div></summary> |
michael@0 | 707 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 708 | <p>Herewith two hideously ugly little shell scripts for use when Spotlight |
michael@0 | 709 | refuses to search your mail. |
michael@0 | 710 | Spotlight is a flawed v1.0 implementation of a really good idea and will, I’m |
michael@0 | 711 | sure, be debugged in a near-future release. |
michael@0 | 712 | <i>[Update: The LazyWeb is educating me... these are moving targets.]</i></p> |
michael@0 | 713 | <p>My problem is that whereas Mail.app will search my To/From/Subject |
michael@0 | 714 | lines (slowly, and with a |
michael@0 | 715 | <a href="/ongoing/When/200x/2005/11/20/UnTiger">really irritating GUI</a>), |
michael@0 | 716 | the “Entire Message” option just doesn’t work, it returns instantly with no |
michael@0 | 717 | results. Yes, I’ve read the hints about making Spotlight re-index, |
michael@0 | 718 | but it just flatly refuses to work for me. Mind you, I have a lot of |
michael@0 | 719 | email, but still, it should at least try.</p> |
michael@0 | 720 | <p>It turns out I had never really figured out the <code>-print0</code> and |
michael@0 | 721 | <code>-0</code> idioms that a lot of the shell-command stalwarts now have. |
michael@0 | 722 | Thanks to Malcolm Tredinnick for raising my consciousness.</p> |
michael@0 | 723 | <p>This lives in <code>$HOME/bin</code> under the name |
michael@0 | 724 | <code>mailgrep</code>:</p> |
michael@0 | 725 | <pre><code>#!/bin/sh |
michael@0 | 726 | find $HOME/Library/Mail/IMAP* -name '*.emlx' -print0 | \ |
michael@0 | 727 | xargs -0 fgrep -i $@</code></pre> |
michael@0 | 728 | <p>Isn’t <code>xargs</code> a funny command? I’ve discovered that it’s nearly |
michael@0 | 729 | impossible to describe what does, and then why what it does is necessary, but |
michael@0 | 730 | there are just a whole bunch of places where you’d be lost without it.</p> |
michael@0 | 731 | <p>This lives in <code>$HOME/bin/mailview</code>:</p> |
michael@0 | 732 | <pre><code>#!/bin/sh |
michael@0 | 733 | find $HOME/Library/Mail/IMAP* -name '*.emlx' -print0 | \ |
michael@0 | 734 | xargs -0 fgrep -i -l -Z $@ | \ |
michael@0 | 735 | xargs -0 open</code></pre> |
michael@0 | 736 | <p>The first cut of this dodged <code>xargs</code> and used an |
michael@0 | 737 | incredibly-inefficient and slow chain of <code>-exec</code> arguments to open |
michael@0 | 738 | the files one at a time with |
michael@0 | 739 | <code>view</code> (aka <code>vim</code>), to work around |
michael@0 | 740 | a well-known <code>vim</code> misfeature; it complained about the input |
michael@0 | 741 | not being a terminal and left my Terminal.app keystrokes borked.</p> |
michael@0 | 742 | <p>But Malcolm, confirming my belief in the broken-ness of <code>vim</code>, |
michael@0 | 743 | said “Oh, *that* ‘view’. I thought it was some sexy Mac ‘view my email’ app”. |
michael@0 | 744 | D’oh, of course; the magic OS X <code>open</code> command does just the right |
michael@0 | 745 | thing. |
michael@0 | 746 | Erm, you might want to run <code>mailgrep</code> before you run |
michael@0 | 747 | <code>mailview</code>; I’m not sure what would happen if you asked OS X to |
michael@0 | 748 | open three or four thousand email messages at once.</p> |
michael@0 | 749 | </div></content></entry> |
michael@0 | 750 | |
michael@0 | 751 | <entry xml:base='When/200x/2006/04/21/'> |
michael@0 | 752 | <title>FSS: Pink Flowers</title> |
michael@0 | 753 | <link href='Dracon-Help' /> |
michael@0 | 754 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/21/Dracon-Help</id> |
michael@0 | 755 | <published>2006-04-21T13:00:00-08:00</published> |
michael@0 | 756 | <updated>2006-04-21T17:19:27-08:00</updated> |
michael@0 | 757 | <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Photos' /> |
michael@0 | 758 | <category scheme='http://www.tbray.org/ongoing/What/' term='Arts' /> |
michael@0 | 759 | <category scheme='http://www.tbray.org/ongoing/What/' term='Photos' /> |
michael@0 | 760 | <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Friday Slide Scan #28 is two Eighties florals, one interior, one exterior. With a confession.</div></summary> |
michael@0 | 761 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 762 | <p>Friday Slide Scan #28 is two Eighties florals, one interior, one |
michael@0 | 763 | exterior. With a confession.</p> |
michael@0 | 764 | <p>First some spring flowers fallen from a tree, just as now in our front |
michael@0 | 765 | yard, at dusk.</p> |
michael@0 | 766 | <img src="0506.png" alt="Fallen pink treeflowers on grass at dusk" /> |
michael@0 | 767 | <p>I’m not sure what these are, but look at the light in the center. Rewards |
michael@0 | 768 | enlarging.</p> |
michael@0 | 769 | <img src="0713.png" alt="Flowers in shadow with light in background" /> |
michael@0 | 770 | <p>Here’s the confession. Sometimes on Fridays when I’m feeling kinda |
michael@0 | 771 | burned-out, I knock off work and do these slide scans in the office, because |
michael@0 | 772 | this is where I have the |
michael@0 | 773 | <a href="http://www.tbray.org/ongoing/When/200x/2004/04/14/MineIsBigger">big |
michael@0 | 774 | screen</a>. |
michael@0 | 775 | Blowing these pictures up to mega-huge, picking away at the old-slide crud and |
michael@0 | 776 | scanning artifacts, tinkering with the colour balance, and listening; I never |
michael@0 | 777 | play music while I’m writing or coding seriously, but I play it real loud while |
michael@0 | 778 | photo-editing. It’s all pretty well pure pleasure; you just can’t imagine |
michael@0 | 779 | how good that second one above looks at near-native size. |
michael@0 | 780 | It reconstitutes the part of my mind that I earn my living with; that’s my |
michael@0 | 781 | story and I’m sticking to it.</p> |
michael@0 | 782 | <p>Images in the Friday Slide Scans are from 35mm slides taken between 1953 |
michael@0 | 783 | and 2003 by (in rough chronological order) |
michael@0 | 784 | <a href="http://www.textuality.com/BillBray/">Bill Bray</a>, |
michael@0 | 785 | <a href="/ongoing/When/200x/2004/08/11/MomsGarden">Jean Bray</a>, Tim Bray, Cath |
michael@0 | 786 | Bray, and |
michael@0 | 787 | <a href="http://www.laurenwood.org/anyway/">Lauren Wood</a>; when I know |
michael@0 | 788 | exactly who took one, I’ll say; in this case, at least one is by Cath Bray. |
michael@0 | 789 | Most but not all of the slides were on Kodachrome; they were digitized using |
michael@0 | 790 | a Nikon CoolScan 4000 ED scanner and cleaned up by a combination of the Nikon |
michael@0 | 791 | scanning software and PhotoShop Elements.</p> |
michael@0 | 792 | </div></content></entry> |
michael@0 | 793 | |
michael@0 | 794 | <entry xml:base='When/200x/2006/04/20/'> |
michael@0 | 795 | <title>Spring Pix</title> |
michael@0 | 796 | <link href='Spring-Pix' /> |
michael@0 | 797 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/20/Spring-Pix</id> |
michael@0 | 798 | <published>2006-04-20T13:00:00-08:00</published> |
michael@0 | 799 | <updated>2006-04-20T23:07:10-08:00</updated> |
michael@0 | 800 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Places/Vancouver' /> |
michael@0 | 801 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World' /> |
michael@0 | 802 | <category scheme='http://www.tbray.org/ongoing/What/' term='Places' /> |
michael@0 | 803 | <category scheme='http://www.tbray.org/ongoing/What/' term='Vancouver' /> |
michael@0 | 804 | <category scheme='http://www.tbray.org/ongoing/What/' term='Arts/Photos' /> |
michael@0 | 805 | <category scheme='http://www.tbray.org/ongoing/What/' term='Arts' /> |
michael@0 | 806 | <category scheme='http://www.tbray.org/ongoing/What/' term='Photos' /> |
michael@0 | 807 | <summary type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>Three pictures around Vancouver; one of a fresh green springtime tree, two of rotten old buildings being torn down.</div></summary> |
michael@0 | 808 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 809 | <p>Three pictures around Vancouver; one of a fresh green springtime tree, two |
michael@0 | 810 | of rotten old buildings being torn down.</p> |
michael@0 | 811 | <p>There’s nothing quite as fresh as just-sprouted deciduous leaves; |
michael@0 | 812 | another few weeks and this tree will be just a tree.</p> |
michael@0 | 813 | <img src="IMG_4656.png" alt="Sunlit fresh young leaves" /> |
michael@0 | 814 | <p>I have a thing about demolition. |
michael@0 | 815 | The first is a rotten dingy old one-story on Main Street near 23rd, the second |
michael@0 | 816 | is an unlovely grey mid-rise being torn down to build still more condos at |
michael@0 | 817 | Homer and Helmcken.</p> |
michael@0 | 818 | <img src="IMG_4665.png" alt="Demolition site on Main Street, Vancouver" /> |
michael@0 | 819 | <img src="IMG_4671.png" alt="Demolition site at Homer and Helmcken, Vancouver" /> |
michael@0 | 820 | </div></content></entry> |
michael@0 | 821 | |
michael@0 | 822 | <entry xml:base='When/200x/2006/04/20/'> |
michael@0 | 823 | <title>Totten’s Trip</title> |
michael@0 | 824 | <link href='Totten-on-Iraq' /> |
michael@0 | 825 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/20/Totten-on-Iraq</id> |
michael@0 | 826 | <published>2006-04-20T13:00:00-08:00</published> |
michael@0 | 827 | <updated>2006-04-20T21:05:22-08:00</updated> |
michael@0 | 828 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Places/Middle East' /> |
michael@0 | 829 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World' /> |
michael@0 | 830 | <category scheme='http://www.tbray.org/ongoing/What/' term='Places' /> |
michael@0 | 831 | <category scheme='http://www.tbray.org/ongoing/What/' term='Middle East' /> |
michael@0 | 832 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 833 | <p><a href="http://www.michaeltotten.com/">Michael J. Totten</a> is a |
michael@0 | 834 | journalist and blogger who’s back and forth to the |
michael@0 | 835 | Middle East and writes about it, quite well in my opinion; he supports this by |
michael@0 | 836 | freelancing and with his blog’s tip jar. He gets lots of |
michael@0 | 837 | link love from the right-wing blogosphere, which is puzzling because Totten is |
michael@0 | 838 | balanced and clear-eyed and doesn’t seem to have any particular axe to grind. |
michael@0 | 839 | Recently, he and a friend were |
michael@0 | 840 | <a href="http://www.michaeltotten.com/archives/001117.html">having fun in |
michael@0 | 841 | Istanbul</a> and, on a random drive out into the country, decided on impulse to |
michael@0 | 842 | keep going, all the way across Turkey and into Iraq; into the Kurdish |
michael@0 | 843 | mini-state in Iraq’s north, to |
michael@0 | 844 | be precise. It makes a heck of a story, with lots of pictures, in six parts: |
michael@0 | 845 | <a href="http://www.michaeltotten.com/archives/001119.html">I</a>, |
michael@0 | 846 | <a href="http://www.michaeltotten.com/archives/001120.html">II</a>, |
michael@0 | 847 | <a href="http://www.michaeltotten.com/archives/001121.html">III</a>, |
michael@0 | 848 | <a href="http://www.michaeltotten.com/archives/001124.html">IV</a>, |
michael@0 | 849 | <a href="http://www.michaeltotten.com/archives/001126.html">V</a>, and |
michael@0 | 850 | <a href="http://www.michaeltotten.com/archives/001127.html">VI</a>. |
michael@0 | 851 | </p> |
michael@0 | 852 | </div></content></entry> |
michael@0 | 853 | |
michael@0 | 854 | <entry xml:base='When/200x/2006/04/19/'> |
michael@0 | 855 | <title>The Cost of AJAX</title> |
michael@0 | 856 | <link href='The-Cost-of-AJAX' /> |
michael@0 | 857 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/19/The-Cost-of-AJAX</id> |
michael@0 | 858 | <published>2006-04-19T13:00:00-08:00</published> |
michael@0 | 859 | <updated>2006-04-20T00:37:46-08:00</updated> |
michael@0 | 860 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology/Web' /> |
michael@0 | 861 | <category scheme='http://www.tbray.org/ongoing/What/' term='Technology' /> |
michael@0 | 862 | <category scheme='http://www.tbray.org/ongoing/What/' term='Web' /> |
michael@0 | 863 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 864 | <p>James Governor |
michael@0 | 865 | <a href="http://www.redmonk.com/jgovernor/archives/001526.html">relays a |
michael@0 | 866 | question</a> that sounds important |
michael@0 | 867 | but I think is actively dangerous: do AJAX apps present more of |
michael@0 | 868 | a server-side load? The question is dangerous because it’s meaningless and |
michael@0 | 869 | unanswerable. Your typical Web page will, in the process of |
michael@0 | 870 | loading, call back to the server for a bunch of stylesheets and graphics and |
michael@0 | 871 | scripts and so on: for example, this <span class='o'>ongoing</span> page calls |
michael@0 | 872 | out to three different graphics, one stylesheet, and one JavaScript file. |
michael@0 | 873 | It also has one “AJAXy” XMLHttpRequest call. |
michael@0 | 874 | From the server’s point of view, those are all just requests to dereference |
michael@0 | 875 | one URI or another. In the case |
michael@0 | 876 | of <span class='o'>ongoing</span>, the AJAX request is for a static file less |
michael@0 | 877 | than 200 bytes in size (i.e. cheap). |
michael@0 | 878 | On the other hand, it could have been for something that required a |
michael@0 | 879 | complex outer join on two ten-million-row tables (i.e. <em>very</em> |
michael@0 | 880 | expensive). And one of the virtues of |
michael@0 | 881 | the Web Architecture is that it hides those differences, the “U” in URI stands |
michael@0 | 882 | for “Uniform”, it’s a Uniform interface to a resource on the Web that could |
michael@0 | 883 | be, well, anything. |
michael@0 | 884 | So saying “AJAX is expensive” (or that it’s cheap) is like saying “A mountain |
michael@0 | 885 | bike is slower than a battle tank” (or that it’s faster). |
michael@0 | 886 | The truth depends on what you’re doing with it. |
michael@0 | 887 | In the case of web sites, it depends on how many fetches you do and |
michael@0 | 888 | where you have to go to get the data to satisfy them. |
michael@0 | 889 | <span class='o'>ongoing</span> is a pretty quick web site, even though it runs |
michael@0 | 890 | on a fairly modest server, but |
michael@0 | 891 | that has nothing to do with AJAX-or-not; it’s because of the particular way |
michael@0 | 892 | I’ve set up the Web resources that make the pages here. |
michael@0 | 893 | I’ve |
michael@0 | 894 | <a href="/ongoing/When/200x/2006/02/14/AJAX-Performance">argued elsewhere</a> |
michael@0 | 895 | that AJAX can be a performance win, system-wide; but that argument too is |
michael@0 | 896 | contingent on context, lots of context.</p> |
michael@0 | 897 | </div></content></entry> |
michael@0 | 898 | |
michael@0 | 899 | <entry xml:base='When/200x/2006/04/18/'> |
michael@0 | 900 | <title>Hao Wu and Graham McMynn</title> |
michael@0 | 901 | <link href='Hao-Wu' /> |
michael@0 | 902 | <id>http://www.tbray.org/ongoing/When/200x/2006/04/18/Hao-Wu</id> |
michael@0 | 903 | <published>2006-04-18T13:00:00-08:00</published> |
michael@0 | 904 | <updated>2006-04-18T22:00:40-08:00</updated> |
michael@0 | 905 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Places/China' /> |
michael@0 | 906 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World' /> |
michael@0 | 907 | <category scheme='http://www.tbray.org/ongoing/What/' term='Places' /> |
michael@0 | 908 | <category scheme='http://www.tbray.org/ongoing/What/' term='China' /> |
michael@0 | 909 | <category scheme='http://www.tbray.org/ongoing/What/' term='The World/Politics' /> |
michael@0 | 910 | <category scheme='http://www.tbray.org/ongoing/What/' term='Politics' /> |
michael@0 | 911 | <content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'> |
michael@0 | 912 | <p>Graham McMynn is a teenager who was kidnapped in Vancouver on April 4th and |
michael@0 | 913 | freed, in a large, noisy, and |
michael@0 | 914 | <a href="http://www.cbc.ca/story/news/national/2006/04/12/bcabduction060412.html">newsworthy</a> |
michael@0 | 915 | police operation, on April 12th. |
michael@0 | 916 | <a href="http://en.wikipedia.org/wiki/Hao_Wu">Hao Wu</a> is a Chinese |
michael@0 | 917 | film-maker and |
michael@0 | 918 | <a href="http://beijingorbust.blogspot.com/">blogger</a> who was kidnapped in |
michael@0 | 919 | Beijing on February 22nd in a |
michael@0 | 920 | small, quiet police operation not intended to be newsworthy, and who has not |
michael@0 | 921 | been freed. |
michael@0 | 922 | Read about it |
michael@0 | 923 | <a href="http://spaces.msn.com/wuhaofamily/">here</a>, |
michael@0 | 924 | <a href="http://ethanzuckerman.com/haowu/">here</a>, and |
michael@0 | 925 | <a href="http://rconversation.blogs.com/rconversation/freehaowu/index.html">here</a>. |
michael@0 | 926 | Making noise about it <em>might</em> influence the government of China to |
michael@0 | 927 | moderate its actions against Mr. Wu, and can’t do any harm. |
michael@0 | 928 | Mr. McMynn’s kidnappers were a gaggle of small-time hoodlums, one of whom was |
michael@0 | 929 | out on bail while awaiting trial for another kidnapping (!). |
michael@0 | 930 | Mr. Wu’s were police. |
michael@0 | 931 | In a civilized country, the function of the police force is to deter such |
michael@0 | 932 | people and arrest them. A nation where they are the same people? Nobody |
michael@0 | 933 | could call it “civilized”.</p> |
michael@0 | 934 | </div></content></entry> |
michael@0 | 935 | |
michael@0 | 936 | </feed> |