October 22, 2013

Citation Needed

I may revisit this later. Consider this a late draft. I’m calling this done.

“Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.” — Stan Kelly-Bootle

Sometimes somebody says something to me, like a whisper of a hint of an echo of something half-forgotten, and it lands on me like an invocation. The mania sets in, and it isn’t enough to believe; I have to know.

I’ve spent far more effort than is sensible this month crawling down a rabbit hole disguised, as they often are, as a straightforward question: why do programmers start counting at zero?

Now: stop right there. By now your peripheral vision should have convinced you that this is a long article, and I’m not here to waste your time. But if you’re gearing up to tell me about efficient pointer arithmetic or binary addition or something, you’re wrong. You don’t think you’re wrong and that’s part of a much larger problem, but you’re still wrong.

For some backstory, on the off chance anyone still reading by this paragraph isn’t an IT professional of some stripe: most computer languages including C/C++, Perl, Python, some (but not all!) versions of Lisp, many others – are “zero-origin” or “zero-indexed”. That is to say, in an array A with 8 elements in it, the first element is A[0], and the last is A[7]. This isn’t universally true, though, and other languages from the same (and earlier!) eras are sometimes one-indexed, going from A[1] to A[8].

While it’s a relatively rare practice in modern languages, one-origin arrays certainly aren’t dead; there’s a lot of blood pumping through Lua these days, not to mention MATLAB, Mathematica and a handful of others. If you’re feeling particularly adventurous Haskell apparently lets you pick your poison at startup, and in what has to be the most lunatic thing I’ve seen on a piece of silicon since I found out the MIPS architecture had runtime-mutable endianness, Visual Basic (up to v6.0) featured the OPTION BASE flag, letting you flip that coin on a per-module basis. Zero- and one-origin arrays in different corners of the same program! It’s just software, why not?

All that is to say that starting at 1 is not an unreasonable position at all; to a typical human thinking about the zeroth element of an array doesn’t make any more sense than trying to catch the zeroth bus that comes by, but we’ve clearly ended up here somehow. So what’s the story there?

The usual arguments involving pointer arithmetic and incrementing by sizeof(struct) and so forth describe features that are nice enough once you’ve got the hang of them, but they’re also post-facto justifications. This is obvious if you take the most cursory look at the history of programming languages; C inherited its array semantics from B, which inherited them in turn from BCPL, and though BCPL arrays are zero-origin, the language doesn’t support pointer arithmetic, much less data structures. On top of that other languages that antedate BCPL and C aren’t zero-indexed. Algol 60 uses one-indexed arrays, and arrays in Fortran are arbitrarily indexed – they’re just a range from X to Y, and X and Y don’t even need to be positive integers.

So by the early 1960’s, there are three different approaches to the data structure we now call an array.

  • Zero-indexed, in which the array index carries no particular semantics beyond its implementation in machine code.
  • One-indexed, identical to the matrix notation people have been using for quite some time. It comes at the cost of a CPU instruction or disused word to manage the offset; usability isn’t free.
  • Arbitrary indices, in which the range is significant with regards to the problem you’re up against.

So if your answer started with “because in C…”, you’ve been repeating a good story you heard one time, without ever asking yourself if it’s true. It’s not about *i = a + n*sizeof(x) because pointers and structs didn’t exist. And that’s the most coherent argument I can find; there are dozens of other arguments for zero-indexing involving “natural numbers” or “elegance” or some other unresearched hippie voodoo nonsense that are either wrong or too dumb to rise to the level of wrong.

The fact of it is this: before pointers, structs, C and Unix existed, at a time when other languages with a lot of resources and (by the standard of the day) user populations behind them were one- or arbitrarily-indexed, somebody decided that the right thing was for arrays to start at zero.

So I found that person and asked him.

His name is Dr. Martin Richards; he’s the creator of BCPL, now almost 7 years into retirement; you’ve probably heard of one of his doctoral students Eben Upton, creator of the Raspberry Pi. I emailed him to ask why he decided to start counting arrays from zero, way back then. He replied that…

As for BCPL and C subscripts starting at zero. BCPL was essentially designed as typeless language close to machine code. Just as in machine code registers are typically all the same size and contain values that represent almost anything, such as integers, machine addresses, truth values, characters, etc. BCPL has typeless variables just like machine registers capable of representing anything. If a BCPL variable represents a pointer, it points to one or more consecutive words of memory. These words are the same size as BCPL variables. Just as machine code allows address arithmetic so does BCPL, so if p is a pointer p+1 is a pointer to the next word after the one p points to. Naturally p+0 has the same value as p. The monodic indirection operator ! takes a pointer as it’s argument and returns the contents of the word pointed to. If v is a pointer !(v+I) will access the word pointed to by v+I. As I varies from zero upwards we access consecutive locations starting at the one pointed to by v when I is zero. The dyadic version of ! is defined so that v!i = !(v+I). v!i behaves like a subscripted expression with v being a one dimensional array and I being an integer subscript. It is entirely natural for the first element of the array to have subscript zero. C copied BCPL’s approach using * for monodic ! and [ ] for array subscription. Note that, in BCPL v!5 = !(v+5) = !(5+v) = 5!v. The same happens in C, v[5] = 5[v]. I can see no sensible reason why the first element of a BCPL array should have subscript one. Note that 5!v is rather like a field selector accessing a field in a structure pointed to by v.

This is interesting for a number of reasons, though I’ll leave their enumeration to your discretion. The one that I find most striking, though, is that this is the earliest example I can find of the understanding that a programming language is a user interface, and that there are difficult, subtle tradeoffs to make between resources and usability. Remember, all this was at a time when everything about the future of human-computer interaction was up in the air, from the shape of the keyboard and the glyphs on the switches and keycaps right down to how the ones and zeros were manifested in paper ribbon and bare metal; this note by the late Dennis Ritchie might give you a taste of the situation, where he mentions that five years later one of the primary reasons they went with C’s square-bracket array notation was that it was getting steadily easier to reliably find square brackets on the world’s keyboards.

“Now just a second, Hoye”, I can hear you muttering. “I’ve looked at the BCPL manual and read Dr. Richards’ explanation and you’re not fooling anyone. That looks a lot like the efficient-pointer-arithmetic argument you were frothing about, except with exclamation points.” And you’d be very close to right. That’s exactly what it is – the distinction is where those efficiencies take place, and why.

BCPL was first compiled on an IBM 7094here’s a picture of the console, though the entire computer took up a large room – running CTSS – the Compatible Time Sharing System – that antedates Unix much as BCPL antedates C. There’s no malloc() in that context, because there’s nobody to share the memory core with. You get the entire machine and the clock starts ticking, and when your wall-clock time block runs out that’s it. But here’s the thing: in that context none of the offset-calculations we’re supposedly economizing are calculated at execution time. All that work is done ahead of time by the compiler.

You read that right. That sheet-metal, “wibble-wibble-wibble” noise your brain is making is exactly the right reaction.

Whatever justifications or advantages came along later – and it’s true, you do save a few processor cycles here and there and that’s nice – the reason we started using zero-indexed arrays was because it shaved a couple of processor cycles off of a program’s compilation time. Not execution time; compile time.

Does it get better? Oh, it gets better:

IBM had been very generous to MIT in the fifties and sixties, donating or discounting its biggest scientific computers. When a new top of the line 36-bit scientific machine came out, MIT expected to get one. In the early sixties, the deal was that MIT got one 8-hour shift, all the other New England colleges and universities got a shift, and the third shift was available to IBM for its own use. One use IBM made of its share was yacht handicapping: the President of IBM raced big yachts on Long Island Sound, and these boats were assigned handicap points by a complicated formula. There was a special job deck kept at the MIT Computation Center, and if a request came in to run it, operators were to stop whatever was running on the machine and do the yacht handicapping job immediately.

Jobs on the IBM 7090, one generation behind the 7094, were batch-processed, not timeshared; you queued up your job along with a wall-clock estimate of how long it would take, and if it didn’t finish it was pulled off the machine, the next job in the queue went in and you got to try again whenever your next block of allocated time happened to be. As in any economy, there is a social context as well as a technical context, and it isn’t just about managing cost, it’s also about managing risk. A programmer isn’t just racing the clock, they’re also racing the possibility that somebody will come along and bump their job and everyone else’s out of the queue.

I asked Tom Van Vleck, author of the above paragraph and also now retired, how that worked. He replied in part that on the 7090…

“User jobs were submitted on cards to the system operator, stacked up in a big tray, and a rudimentary system read, loaded, and ran jobs in sequence. Typical batch systems had accounting systems that read an ID card at the beginning of a user deck and punched a usage card at end of job. User jobs usually specified a time estimate on the ID card, and would be terminated if they ran over. Users who ran too many jobs or too long would use up their allocated time. A user could arrange for a long computation to checkpoint its state and storage to tape, and to subsequently restore the checkpoint and start up again.

The yacht handicapping job pertained to batch processing on the MIT 7090 at MIT. It was rare — a few times a year.”

So: the technical reason we started counting arrays at zero is that in the mid-1960’s, you could shave a few cycles off of a program’s compilation time on an IBM 7094. The social reason is that we had to save every cycle we could, because if the job didn’t finish fast it might not finish at all and you never know when you’re getting bumped off the hardware because the President of IBM just called and fuck your thesis, it’s yacht-racing time.

There are a few points I want to make here.

The first thing is that as far as I can tell nobody has ever actually looked this up.

Whatever programmers think about themselves and these towering logic-engines we’ve erected, we’re a lot more superstitious than we realize. We tell and retell this collection of unsourced, inaccurate stories about the nature of the world without ever doing the research ourselves, and there’s no other word for that but “mythology”. Worse, by obscuring the technical and social conditions that led humans to make these technical and social decisions, by talking about the nature of computing as we find it today as though it’s an inevitable consequence of an immutable set of physical laws, we’re effectively denying any responsibility for how we got here. And worse than that, by refusing to dig into our history and understand the social and technical motivations for those choices, by steadfastly refusing to investigate the difference between a motive and a justification, we’re disavowing any agency we might have over the shape of the future. We just keep mouthing platitudes and pretending the way things are is nobody’s fault, and the more history you learn and the more you look at the sad state of modern computing the the more pathetic and irresponsible that sounds.

Part of the problem is access to the historical record, of course. I was in favor of Open Access publication before, but writing this up has cemented it: if you’re on the outside edge of academia, $20/paper for any research that doesn’t have a business case and a deep-pocketed backer is completely untenable, and speculative or historic research that might require reading dozens of papers to shed some light on longstanding questions is basically impossible. There might have been a time when this was OK and everyone who had access to or cared about computers was already an IEEE/ACM member, but right now the IEEE – both as a knowledge repository and a social network – is a single point of a lot of silent failure. “$20 for a forty-year-old research paper” is functionally indistinguishable from “gone”, and I’m reduced to emailing retirees to ask them what they remember from a lifetime ago because I can’t afford to read the source material.

The second thing is how profoundly resistant to change or growth this field is, and apparently has always been. If you haven’t seen Bret Victor’s talk about The Future Of Programming as seen from 1975 you should, because it’s exactly on point. Over and over again as I’ve dredged through this stuff, I kept finding programming constructs, ideas and approaches we call part of “modern” programming if we attempt them at all, sitting abandoned in 45-year-old demo code for dead languages. And to be clear: that was always a choice. Over and over again tools meant to make it easier for humans to approach big problems are discarded in favor of tools that are easier to teach to computers, and that decision is described as an inevitability.

This isn’t just Worse Is Better, this is “Worse Is All You Get Forever”. How many off-by-one disasters could we have avoided if the “foreach” construct that existed in BCPL had made it into C? How much more insight would all of us have into our code if we’d put the time into making Michael Chastain’s nearly-omniscient debugging framework – PTRACE_SINGLESTEP_BACKWARDS! – work in 1995? When I found this article by John Backus wondering if we can get away from Von Neumann architecture completely, I wonder where that ambition to rethink our underpinnings went. But the fact of it is that it didn’t go anywhere. Changing how you think is hard and the payoff is uncertain, so by and large we decided not to. Nobody wanted to learn how to play, much less build, Engelbart’s Violin, and instead everyone gets a box of broken kazoos.

In truth maybe somebody tried – maybe even succeeded! – but it would cost me hundreds of dollars to even start looking for an informed guess, so that’s the end of that.

It’s hard for me to believe that the IEEE’s membership isn’t going off a demographic cliff these days as their membership ages, and it must be awful knowing they’ve got decades of delicious, piping-hot research cooked up that nobody is ordering while the world’s coders are lining up to slurp watery gruel out of a Stack-Overflow-shaped trough and pretend they’re well-fed. You might not be surprised to hear that I’ve got a proposal to address both those problems; I’ll let you work out what it might be.

July 25, 2013

Algorithmically Marginalized

Filed under: digital,fail,future,interfaces,science,work — mhoye @ 1:03 pm

I wouldn’t have thought that mathematics or signal processing would have a cultural bent, but I just sat through a conference call where everyone was reasonably clear except for one guy, with a pronounced central-African accent, whose voice was getting audibly butchered by the noise cancellation algorithm on the line. The beginning of every sentence, and every pause, was punctuated by a sort of wierd, static-and-squarewave tug-of-war with the background noise.

I think it’s some combination of his accent and cadence of his speech, and it was really weird to notice the trend. On reflection, it makes perfect sense – algorithms optimized for the majority, as defined by the people who wrote them, would of course have a cultural impact on people at the margins – it just hadn’t occurred to me how that would work until just now.

April 11, 2013

No Shirt, No Shoes, No Service

Filed under: business,digital,fail,future,hate,interfaces,life,losers,toys,vendetta — mhoye @ 3:52 pm

No Wearable Cameras

If you own a public establishment, consider putting one of these near the door.

The keynote file it comes from is right here, under a CC-BY-SA 3.0 license, and you’re welcome to use it as often as you feel is necessary.

March 20, 2013

It’s Not Just For Lolcats

Filed under: awesome,digital,fail,hate,interfaces,losers — mhoye @ 9:22 pm

So, this is pretty awesome.

How does Wells Fargo secure your communications channel?

With animated gifs.

Ladies and gentlemen, Wells Fargo’s security. And, not to put to fine a point on it, their opinion of how trivially gulled their clients are.

Are you a client of Wells Fargo?

I’m just asking.

December 21, 2012

Genuflecting To Fools

Filed under: analog,doom,fail,future,losers,lunacy — mhoye @ 11:49 am

Guys guys great news: it turns out that panicky superstitious people who deliberately misinterpret their shallow understanding of an incredibly narrow slice of a foreign culture they’re otherwise completely disinterested in aren’t reliable predictors of anything at all ever.

Who saw that coming, right?

I like to imagine that for months now somewhere in the Yucatan peninsula people have been saying “Oh shit, man! The white people’s calendar ends on December 31st!!” and then howling with laughter, because somehow it’s hilarious every time.

December 11, 2012

Solidarity For A Few Minutes If Everyone’s OK With That Maybe I Guess

Filed under: digital,fail,hate,interfaces,losers,mail,vendetta — mhoye @ 3:38 pm

Just to set the mood, here’s a bit Matt Taibbi wrote about the ability of the American left get themselves organized, specifically with respect to the anti-war protests in 2007:

“The post-sixties dogma that everyone’s viewpoint is legitimate, everyone‘s choice about anything (lifestyle, gender, ethnicity, even class) is valid, that’s now so totally ingrained that at every single meeting, every time some yutz gets up and starts rambling about anything, no matter how ridiculous, no one ever tells him to shut the fuck up. Next thing you know, you’ve got guys on stilts wearing mime makeup and Cat-in-the-Hat striped top-hats leading a half-million people at an anti-war rally. Why is that guy there? Because no one told him that war is a matter of life and death and that he should leave his fucking stilts at home.”

A week ago, in response to the short-lived and possibly illegal Respect Democracy get-Rob-Ford-reelected site, I put up I publicized it with two tweets, it got a few thousand views and sort of made the rounds, at least as far as the small pond of Toronto-politics-on-Twitter is concerned.

The “Respect Democracy” site was completely obscured – it was difficult, intentionally, to figure out who is behind it or what the information is being collected for. I built Respect The Law with just one breadcrumb in it, one more than none, deliberately put my email address at the top of the source. Links to source material but no other pages, affiliations or policy statements, again deliberately.

It didn’t take long for people, via Twitter and email, to ask me to confirm it was me, which I did. But then a surprising thing happened – I got a lot, indeed quite a lot, of pushback from people asking me what my usage and data retention policies are, and accusing me in pretty stark language of being an enemy of democracy. “You either believe in accountability and transparency, or you don’t” said one poorly-nuanced commenter, they were not alone.

The most interesting thing about this is that all, not some or most but 100%, of the criticism I’ve received for the effort has come from self-described “leftists”. And these weren’t polite requests for information or gentle suggestions, my goodness no: these were repeated assertions that I wasn’t taking data integrity, transparency and accountability seriously, and was consequently a bad person.

Well then.

On the one hand, that is absolutely a legitimate concern. I did not tell anyone who I am, how I intended to use that data, or how it was stored. That’s absolutely true.

On the other hand: honestly, put a fucking sock in it.

I’m a straight-up socialist. Not a liberal or left-leaning, but an actual socialist. We live in one of the richest societies in the world; our schools and libraries should be palaces. Our hospitals should be the envy of the entire planet. Our boulevards and public buildings should be towering edifices of stone and steel that we’ll be proud to pass down to our great-grandchildren along with clean air and clean water, freely and equally accessible to all of us. And I’m increasingly convinced that the reason so many people call themselves “centrists” now is that calling yourself a “leftist” is a license for every unshaven pinhead with a Che shirt you cross paths with to explain to you, in granular, inclusive detail, how you’re doing it wrong.

I suspect I’m going to go back to that myself, if only to save myself the hours in the day. You know what’s way, way more important to me than the “progressive” label? Making some fucking progress. So next time you see somebody trying to move the world a little closer to the way you both think it should be, but you disagree with their approach? Put a lid on it and let them work. The political right by and large gets this, and consequently they can get a lot accomplished. The left, us, well. Not so much.

I’ve added a usage policy page to the site, clearly visible before user data goes in.

Thanks for your feedback.

August 25, 2012


Filed under: digital,documentation,fail,future,interfaces,linux,toys,vendetta — mhoye @ 9:15 pm

I was idly looking over the shooting script for Men In Black the other day. Different from the movie, in a lot of little ways that add up; as filmed it came out a fun, largely harmless sci-fi movie of no particular note but the original script was quietly darker and more introspective than you’d expect. As an example, the scene where Edwards (Will Smith) has been given until sun-up to decide if he’s in; he asks Jay (Tommy-Lee Jones) “Is it worth it?”

On screen, Jay replies “It is. If you’re strong enough” as he walks away. But on the page Jay’s explanation of the cost of signing up is a lot more personal.

EDWARDS – So what’s the catch?

KAY – What you’ll gain in perspective, you’ll lose in ways you’re too young to comprehend. You give up everything. Sever every human contact. No one will know you exist. Ever.

EDWARDS – Nobody?

KAY – You’re not even allowed a favorite shirt. There. That’s the speech I never heard. That’s the choice I never got.

EDWARDS – Hold up. You track me down, put me through those stupid-ass tests, now you’re trying to talk me out of it. I don’t get it.

KAY – You got ’til sun-up.

EDWARDS – Is it worth it?

KAY – You find out, you let me know.

Kev called me out yesterday, and he was not wrong.

Haters Gonna Tweet

I’m back to carrying around a Linux laptop these days, and all those old mixed feelings are still there. Power management is still really dodgy, the UI is a mess, lots of stuff that should Just Work by now either just doesn’t, or somehow stopped working for a while after a good run. Plug the wrong USB dingus into it, and if you close the lid it will try to cook itself; using it for day to day stuff isn’t wildly better than I remember it being a few years ago; I’m back to using it for reasons that I refer to as “principles”, stuff about information freedom and freedom-to vs. freedom-from, developing on the platform you’re deploying to, that sort of thing. They’re arguments that I can make pretty convincingly, even to myself sometimes, but there are days (like this one) that all that rhetoric seems like a thin veneer over some self-imposed variety of Stockholm Syndrome.

I have a paragraph here about how “It is better, the saying goes, to light a single candle than to curse the darkness”, and then goes on to something about being honest about your motivations, and maybe you’re lighting the candle to cover up the smell, not push back the dark. It’s not really coming together for me, but that’s the broad strokes of it.

You get the idea.

But here’s a thing: my brother sent me a PDF he needed to quote some passages from, the usual horrible “PDF-full-of-scanned-JPEGs” garbage you find everywhere. He was losing patience with it, and all the OCR software he could find was either insanely expensive or useless junk or both.

But I know that pdf2html will give me a numbered list of all those images, and after a few seconds of research with apt-cache, I found Tesseract-OCR, installed it and tested it against a small sample of pages to see if the output looked sane. It did; it doesn’t to output to anything but a file, but that’s fine. So a quick for i in `seq` do later, my laptop is quietly grinding out a text file a human can copy and paste from.

The good parts of life with Linux are like that. Rich scripting languages, an incredibly broad, deep and on-demand tools that have been hammered into shape for years or decades, job control that lets you just put it in the background (or on a server somewhere else) and let it run. Being able to chain tools together so that when you need something novel done you can just get it done, and not spend hours scavenging around the ‘net for that one piece of random crapware that does 70% of the job, it’s so great.

Linux on a laptop has a set of problems that have existed for years; I know I’m bringing a lot of this on myself. If I was using a desktop, a lot of these hardware hangups might just disappear, just by virtue of the fact that you never unplug a desktop, or put it to sleep. And I know what way the trends are going, here, too – the Free Software tools people care about seem to be finding their way over to OSX, with varying degrees of speed and elegance, but the rare design sensibilities that find their way back, seemingly via a cargo cult’s long march, don’t seem to be helping much. Bold efforts (like Gnome Shell) that sail less than perfectly polished run rapidly aground on the shoals of the Linux community’s profound fear of change. And as for hardware, well. Um.

But: Apt-get. Shell scripting. Pipe, job control. All the old, unglorious tools, so many of them rock solid and reliable; they are incredibly great. Being able to just have the tools you need, to test and experiment and process and have the computer doing stuff for you instead of having to muck around manually basically all the time, it is so good. Being able to see the right-out-there experimental stuff, like software radio, gestating; amazing. Macports and (God help you) Homebrew are a thin gruel in comparison, and Windows has nothing to compare it to.

I feel like I’m typing with mittens on when they’re not around, like I’ve looked into my toolbox and found one oversize novelty Tonka screwdriver and wrench made of Nerf. These are just the basic fundamental particles of getting anything done! How do people live without this stuff?

These days my everyday computing carry is ideologically polarized. My Macbook is mostly a desktop I can move to the couch, and I roll with a Thinkpad and an iPad. The small number of things I need to Just Work just work, and there’s room to (and yes, frequently, need to) tinker with the rest. I’m actually thinking about my next laptop being a linux on a non-Macbook, as crazy as that sounds. And if you’ve ever tried figuring out if a laptop runs linux correctly, well. You’ve read The Killing Joke, right?

So I don’t even know what direction that pendulum is swinging, now. I guess we’ll see again in a few years. I don’t know if it’s worth it; if I figure it out, I’ll let you know.

May 10, 2012

On The Perpetual Threat Of Regressive Nonsense In Children’s Literature

Don't Interrupt

We took Arthur’s Science Fair Trouble out of the library for Maya the other day, and let me tell you: I had always suspected that most of what adults tell you is bullshit, but children’s books live at some horrible Venn overlap of Moore and Sturgeon’s respective Laws where 90% of everything is not only crap but getting twice as crappy every year and a half or so.

I had to go over this book carefully with Maya after I read it, to explain to her why every single part of it is wrong. The description from the dust cover reads:

Arthur has to do a science fair project, but all of the good ideas are taken: Buster is building a rocket, Muffy is growing crystals, and Francine is making a bird feeder. Arthur learns a valuable lesson when he finds his father’s old solar system project in the attic and tries to use it for his own science fair project.

That’s right: Arthur’s in a pickle, because all the good science ideas have been done by other children doing wholly original work. But when Arthur instead decides to update his father’s old solar system project (repainting it) and presenting that he feels, we are told, terribly guilty, finally breaking down after winning first prize to admit the work wasn’t wholly his. He is suitably chastised, of course.

I don’t think Maya understood my rant about why verifying old assumptions was incredibly valuable, not merely per se but particularly in light of Pluto’s redefined status and the inclusion of Eris and Ceres in the “Dwarf Planet” category as well.

I had to explain to her Arthur was explaining the evolution of cosmology by repurposing and updating older (handmade by his father!) demonstration materials, which is not only great on its own, but vastly better scientific and expository work than his classmates’ projects, who were showing no insight into why assembling premanufactured toys might not count as science.

“Maya, the people harassing Arthur for this are lazy, ignorant people saying dumb things to make Arthur feel bad, and Arthur is wrong to feel bad about his work. Building on top of each others’ work is the only reason we have this world of incredible, miraculous wonder we live in, and don’t let anyone tell you otherwise.”

I don’t think it stuck, but I’ll keep repeating it.

I was thinking about this today when this quote from Mark Twain on plagiarism started making the rounds:

Mark Twain, letter to Helen Keller, after she had been accused of plagiarism for one of her early stories (17 March 1903), published in Mark Twain’s Letters, Vol. 1 (1917) edited by Albert Bigelow Paine, p. 731:

Oh, dear me, how unspeakably funny and owlishly idiotic and grotesque was that “plagiarism” farce! As if there was much of anything in any human utterance, oral or written, except plagiarism! The kernal, the soul — let us go further and say the substance, the bulk, the actual and valuable material of all human utterances — is plagiarism. For substantially all ideas are second-hand, consciously and unconsciously drawn from a million outside sources, and daily used by the garnerer with a pride and satisfaction born of the superstition that he originated them; whereas there is not a rag of originality about them anywhere except the little discoloration they get from his mental and moral calibre and his temperament, and which is revealed in characteristics of phrasing. When a great orator makes a great speech you are listening to ten centuries and ten thousand men — but we call it his speech, and really some exceedingly smail portion of it is his. But not enough to signify. It is merely a Waterloo. It is Wellington’s battle, in some degree, and we call it his; but there are others that contributed. It takes a thousand men to invent a telegraph, or a steam engine, or a phonograph, or a photograph, or a telephone or any other important thing—and the last man gets the credit and we forget the others. He added his little mite — that is all he did. These object lessons should teach us that ninety-nine parts of all things that proceed from the intellect are plagiarisms, pure and simple; and the lesson ought to make us modest. But nothing can do that.

Which is all to say: Constant vigilance!

April 23, 2012

Breakfix Wayfinding

Filed under: documentation,fail,interfaces,losers,travel,want — mhoye @ 10:25 pm

At the November 24th, 2011 TTC Town Hall meeting, it was noted that:

The TTC has attempted to make incremental improvements as we provide new entrances / exits or elevators for step-free access. One of the recommendations made by the Customer Service Advisory Panel in 2010 focuses on improving signs and other customer information. We are working on a plan to do this but re-signing a station is an expensive proposition both in terms of the planning required, the material cost and implementation. We need better understanding of what priority customers give to improved way finding when balanced against things like an increase in service levels.

Having said that, we must get much better at not degrading the look and feel of our stations and trains with visual clutter such as handwritten signs. Such improvements should have little cost impact but can be difficult to ensure consistency. We are experimenting with a new “wrap” on the Davisville collector booth that we hope will balance our operational and customer needs and control some of the clutter on and in our booths.

Line Up

I took this a few weeks ago at Spadina Station during rush hour. It’s classic TTC signage: hastily assembled by TTC employees using all the resources they have at their disposal, which is usually the side of a cardboard box and a sharpie.

Noted accessibility author Joe Clark has written extensively on the subject, though as of early 2008 he has understandably abandoned that project. When an organization doesn’t even want to admit there’s a problem, what do you do?

A sign

I’ve said this a lot recently. When something is a priority for an organization, it has three things: a budget, a calendar and exactly one person responsible for it. Missing any one of those is a guarantee that whatever that organization says, its real priorities are elsewhere. So whatever the TTC’s management says about wayfinding and signage the budget they’ve actually allocated for all that is a pizza box, a broom handle and a sharpie. The person responsible for it is whoever happens to be there that day.

All the evidence suggests that there’s nobody at the TTC that anyone, inside or out, can call to say that signs are broken or missing or need to be printed. There’s no budget, no standards and nobody to ask about any of that and if there is, then boy howdy they’re not answering the phone.

That town hall comment above, as misguided as it is in many respects does get one thing exactly right: it can be inexpensive, but has to be consistent.

It’s impossible for me to blame the boots-on-the-ground TTC employees for this. Hand-scribbled signs like that are adorable; they make it look like the third-busiest transit system in North America is managed by some kids the TTC headhunted away from a lemonade stand, an image I love. And I’m not sure what else to expect, given that we’re looking at the best effort from well-meaning people without expertise, management support, goals, oversight or any guidelines at all, and a time and money budget of zero.

April 11, 2012

Colluding To Make Books Expensive

Filed under: digital,documentation,fail,future,hate,interfaces,losers,vendetta — mhoye @ 8:38 pm

So remember a while ago when I mentioned that publishers wanted to collude to make ebooks really expensive?

Mr. Young lays it flat out: that laws prohibiting anticompetitive collusion and price-fixing are having a “chilling effect” on major publishers’ attempts to collude, fix prices and thwart competition.

Funny story: The law be damned, they went ahead and tried anyway. And the U.S. Government, rightly contending that price fixing is illegal, appears to have a solid case. Three of the seven publishers being sued by the U.S. Department of Justice for said collusion have reportedly settled already. Including the Hachette Book Group where the aforementioned Mr. Young may still be CEO in a month, or may not.

Like all those named in the suit the Hachette Book Group publishes quite a bit of crime fiction, stories you’d think would give them some insight into why your savvier white-collar criminals don’t preannounce their intention to engage in illegal business practices in the business section of the New York Times. And yet here we are.

So if you’d like a good look at what naked greed, fear and stupidity looks like, there you are.

« Newer PostsOlder Posts »

Powered by WordPress