Havoc's Blog

this blog contains blog posts

Diagnosing the tech industry

According to an an
article in today’s paper
Clayton Christensen took a stand for
design over
megapixel
in last month’s Harvard Business Review. I’ll have to
find a copy.

Harvard Business School professor Clayton M. Christensen is trying to
shake up the marketing establishment with a deceptively simple
proposition that flies in the face of conventional wisdom:
People hire a product to get a job done.

Sometimes the job is functional: I need to send this document from
here to there as fast as possible. Other times it is emotional: Help
me escape the chaos in my world. And often it’s aspirational: I need
to feel pampered. Different products — Federal Express, Apple’s iPod,
and Gucci’s handbags — are retained for these different tasks.

Marketers, however, ply their trade in a whirl of product extensions
and customer segmentation increasingly divorced from the realities of
needs and jobs. They focus on bells and whistles, features and
options, baby boomers, soccer moms, and upwardly mobile young
professionals with disposable income.

Employing customers or products as the fundamental unit of analysis –
rather than jobs — amounts to ”marketing malpractice,” Christensen
and a pair of coauthors contend in a provocative essay in last month’s
Harvard Business Review.

Christensen, in an interview, said product managers should spend less
time on market research and more time walking around and observing how
people live their lives — their habits, behavior, and cycles.

That last paragraph especially points toward ethnography-driven
product design… something one can get a college degree in, or at
least read stacks of books about. And something one can have natural
talent for (or not — I don’t). How many product managers have this
kind of skill? How many tech companies have both a product management
and a design/usability function, and does that make any sense?
Seth Godin might go
further and wonder why marketing is also separate, since he argues the
core of marketing is the product/service offering itself.

(Caveat, the title “product manager” can apply to lots of jobs,
I’m referring to a product manager who designs and specifies the
details of a new product, not one who’s a project manager, customer
request manager, logistics specialist, or partner relationship manager
for example. “Marketing” of course also includes a lot of different
jobs.)

There was also a great
article
from Walter Mossberg a couple days ago.

In fact, the industry operates on a false model of the
U.S. computer-using population. It imagines the world is divided
between “consumers,” who lie around at home playing games and
listening to music, with the occasional homework assignment or tax
form thrown in; and “enterprises,” large corporations where computing
is controlled by IT departments and only mission-critical tasks are
performed.

If these models acknowledge small businesses at all, they get lumped
into a category called SMB, for small and medium businesses, where the
minimum size is something like 500 employees and an IT staff rules.

In fact, the most accurate way to divide the computer-using world is
into two segments: the one controlled by an IT department and the one
controlled by the people who actually use the computers, be they
consumers or small-business folks. A vast amount of business crucial
to the U.S. economy is conducted every day in the non-IT part of the
computing world.

The computer industry loves, and caters to, the IT segment because it
buys machines in large quantities and is run by a geeky priesthood
that speaks the industry language. By contrast, the non-IT camp, even
though it is larger in the aggregate, buys one, two or three machines
at a time and tends to be nontechnical.

Speculation: if the industry favors selling to industry “insiders” — e.g. IT
departments and developers — this is in part because an
engineering/IT-driven organization, as many tech companies are, will
have a much easier time figuring out how to build and market a product
for other people like themselves.

There are other, more mundane
explanations too though I imagine. As demanding as they are, a few
large enterprise deals can be a lot easier for a small software
company to manage than a couple bucks from each of thousands of
consumer customers.

(This post was originally found at http://log.ometer.com/2006–01.html#1.2)

Tripleverb anthology

tripleverb.com goes live!

Already there is controversy. Does a quad-verb count? What if you have
a verb-bar, like View Publish
Connect Communicate
? What is a tripleverb anyway?

(This post was originally found at http://log.ometer.com/2005–12.html#31)

December All-In-One Super Blog Bundle

Up to all sorts of things this month, but apparently not writing blog
entries until today.

Intelligent Design

I haven’t been following any of the media coverage of Intelligent
Design, since I generally have better things to do (not good
things mind you). Tonight though I found myself (for example) trying
to burn up moldy cheese with a half-evaporated bottle of bad brandy,
and rather than document it Federico-style, I read
the Dover court opinion on ID
which turns out to be pretty
fun. Whether you take the science or religion side of things (or as
the judge often suggests, don’t see the two in conflict), you have to
admit it’s sort of amazing that grownups are playing this game.

The Dover school district declared that prior to teaching evolution,
teachers had to read a few paragraphs to the class stating that
evolution was just a theory and that to learn about Intelligent Design kids
could read the panda
book
. In practice, all the teachers refused to read the
paragraphs, so an administrator had to come into the room and read
them. Just think about how silly everyone should feel during the
following:

  • Parents had to submit permission slips indicating whether their
    child could be in the room during the reading of The
    Paragraphs.
  • The administrator comes in the room and sends out the kids
    whose parents didn’t give permission.
  • Administrator intones the Paragraphs, trying to keep a straight face
    while telling 9th-graders to read a book called Of People and Pandas.
  • Administrator then informs students that their teacher can’t answer
    any questions about the Paragraphs, and they are not to discuss the
    topic further in class.
  • Everything goes back to normal.

To enable those 5 minutes of bizarreness, there were hundreds of
letters and editorials, public hearings, a mass mailing to the whole town, the
permission slips, a 21-day trial, …

The ever-popular Rick Santorum was
“troubled
by testimony indicating that religion motivated some school board
members to adopt the policy”
— not the sharpest tool in the shed,
this guy.

In the 80s, apparently pretty much the same thing happened only they
called it “creation science.” The authors of the panda book it turns
out literally went through their manuscript and replaced all
occurrences of “creation science” with “intelligent design” after a
1987 court decision banned teaching “creation science” in public
schools. You laugh, but it fooled Rick Santorum.

Content

Hoping to enrich my life by providing me with digital
content
, Amy gave me this
Sufjan Stevens album
, described by Amazon as:

Illinois sounds like The Sea and Cake collaborating with the
high-school band from a Wes Anderson film on banjo-driven, pulsing
meditations on Vince Guaraldi’s music for Peanuts.

That description is pretty accurate. The album is cool. Check
it out.

Christian
didn’t like Shadow of the Wind
too much, but I thought it was very
enjoyable. The ending is a bit tacked-on IIRC but you can
decide to ignore the last chapter and still have a satisfying book, if
you so choose.

I signed up for Rhapsody which is
pretty nice for listening to multimedia content (aka “music”) at work,
and now works on Fedora Core 4 with Firefox 1.0. I found a couple bugs
but nothing major and Linux seems on par with Mac/Windows. Worth
checking out.

Tripleverb

I bought the domain tripleverb.com early in the month. What is a
tripleverb you ask? del.icio.us has
a good one right now:

Please email me your awesome tripleverb finds. I want to be #1 in the
tripleverb space. Or sell the domain to whoever is, at least.

Non-Designer’s Design Book

If you haven’t noticed, my blog looks like ass. I got a copy of the
Non-Designer’s
Design Book
hoping to teach myself to fish, and it’s a pretty good
book. That said I think I’m hopeless and will end up begging or paying
someone talented.

Technology Industry vs. Reality

Increasingly starting to believe that “conventional wisdom” in the
tech community has almost nothing to do with the mainstream. (While
before I would have admitted it was “possibly loosely related,” if
pressed, now I’m going more radical and claiming that most of what we
talk about around the water cooler is just pure navel-gazing.)

The fastest-growing web
sites
in November were PhotoBucket, MySpace, Facebook,
Memegen.net, Slate, M&M’s, LimeWire, Heavy.com, Wikipedia, and
Mate1.com. Only Wikipedia is dorksville; the rest of these have
nothing to do with Ajax or Web 2.0 or anything like that. Heavy.com is
highly-un-PC, just Flash, no HTML in sight. Popular sites like MySpace
and Xanga in my experience regularly crash Firefox, or don’t work
properly, because Firefox users never go to them and the bugs don’t
get filed, and the sites are full of bad HTML and Flash and who knows
what.

Ask a typical GNOME or Firefox developer (or venture capitalist) to
name a photo site, they will say Flickr. But PhotoBucket, Kodak,
Shutterfly, Picasa, iPhoto, etc. are probably all better-known in the
world at large — and better-suited for what a lot of people want to do
with their photos than Flickr is. Not picking on Flickr, it’s a good
site and well-suited to many, just an example. (“All photo sites are
the same category” is itself tech industry lazythink, as PhotoBucket,
Flickr, and Shutterfly for example have pretty different design
centers. At least I didn’t lump all “digital content” sites together!)

Many will find this obvious: there’s a sharp line between the
mainstream and some of the things we engineers might think are
important. But if I had a nickel for everyone who argues otherwise on
an open source mailing list…

Head First Series

If you need to teach someone programming via Java,
I thought Head First
Java
was really good. The author’s
blog
rocks too. If you’re considering this book, be warned you may
be culturally incompatible with it; in fact the more you disagree with
my above punditry on the tech industry, the more you’ll probably
hate this book. 😉 Also, Joel
says
real men only program in C while walking to school uphill both
ways in the snow.

XM Radio

I got Amy an XM radio for Christmas, and I’m pretty impressed with
it. Good stations and the device itself is inexpensive and
well-designed. The main practical problem is the same one as the iPod,
cars just aren’t designed for these things and you end up with wires
everywhere and having to pipe the sound to your speakers via a bad FM
transmitter.

Woot

Woot.com, pretty
awesome if you haven’t seen it. I don’t think they ever have anything
I’d buy, but it’s fun to read the FAQ.

Laptop

Starting to think about a new laptop, as my X31 is over 3 years old.
Oddly, the latest X series isn’t really very different; I guess the
battery and size limitations squish Moore’s law like a bug. I’m
traveling less than I used to, and doing more coding instead of just
mail/web, so I think I want to get something faster and with a larger
screen. Probably I’ll just go with the large-screen version of the T
series. The Z series is cute, but the Z60t has too small a screen and
the Z60m is too big and heavy. In general I can’t handle the full-on
“desktop replacement” sized laptops, they are just too luggable. I
haven’t seen any non-Thinkpad models that look all that appealing but
if you have suggestions I’d appreciate them. Anyone tried the Dell
D610?

Niece

We have a new niece:

Happy New Year

Should be interesting…

(This post was originally found at http://log.ometer.com/2005–12.html#30)

?

I think this is a
debate I didn’t intend to start
— I concur that yes, there are
lots of formats you can send over a socket and you can wedge most use
cases into most of the formats if you try hard enough. A meaningful
discussion of protocols though would recognize that “could possibly be
made to work” isn’t how one chooses a technology; you need to know the
context of the usage — desired properties and tradeoffs, who is doing
the coding and their knowledge, what’s available on the platform,
needs of customers or co-developers, whatever it is. Then pick
something appropriate. It’s not about One True Way.

As you illustrate, REST is a stupid choice for a desktop
bus. I don’t see how that’s relevant to Amazon’s APIs or
to D‑BUS.

My offhand remark about SOAP (in a very long post about something
else) was intended to convey that personally I wouldn’t mess with SOAP
in the context of looking up some simple details of an Amazon item. It
must not be that controversial a comment if 85% of Amazon API users
made the same decision. But if Amazon only had SOAP (or CORBA, or some
made-up protocol) I’d use it and not get especially hot and
bothered. If I were using C# and already knew the SOAP APIs I’d
probably use them then too, but I’m not going to install and learn a
major new technology and API just to do something really simple.

For the record I’m not trying to say “SOAP sucks” or something. I
don’t know much about it or care either way until I have reason to use it.

As for D‑BUS, it’s a protocol/library that has certain properties that
I felt were useful for two
use-cases
in the specific (social and technical) context of
GNOME/KDE/Linux. The case that funded/motivated the D‑BUS project was
the systemwide bus, and D‑BUS remains to my knowledge the only project
that even attempts to implement such a thing for Linux. It seems to
work fine for that. D‑BUS tries to support a desktop session bus also,
but secondarily, and it hasn’t been much hacked on in that
context. That’s why GNOME still uses Bonobo and KDE still uses
DCOP. Beyond those two use-cases, D‑BUS has no aspirations to be an
ISO-certified scalable enterprise middleware or Internet web services
protocol, nor would I ever suggest it (or use it myself) for those
purposes.

I’m happy to debate which protocol is appropriate for a particular
context, assuming I have any knowledge of and interest in that
context, but comparing protocols in the abstract makes no sense to me.
There must be at least hundreds of thousands of protocols spoken over
sockets out there in active use and it doesn’t seem to be killing
anyone. It certainly isn’t keeping me up at night.

(This post was originally found at http://log.ometer.com/2005–11.html#26.4)

SOAP

Miguel,
that’s cool, I know SOAP (with a library) doesn’t involve a ton of
application code. My point is more that (to me) it’s just not worth
learning about for this sort of thing. If you want to get a couple of
pieces of data on an Amazon product you just do “get url contents” and
“stuff into XML parser” and “grab the Item node” and that’s about
it. All programmers already know how to download a URL and pull out an
XML node, and being able to try out requests in the browser by editing
the address in the location bar is pretty useful. “REST” is
just very conceptually simple and requires no ramp-up time, even if it
involves a couple more lines of code. But if you already know SOAP and
have the library sitting there, by all means it makes sense to use it.

According to this Tim
O’Reilly article
the real percentage was 85% of Amazon usage is
REST, 15% SOAP — just to set the record straight vs. the 1%
I had misremembered.

For this particular task the transport protocol hardly matters; as
you say the time is all in registering for the account and so
forth. On that front Amazon via any protocol is way, way better than
eBay via any protocol, I assure you!

i.e. the actual API and service design are much more important than how
one gets the bits from point A to point B.

(This post was originally found at http://log.ometer.com/2005–11.html#26.3)

Theme Systems

Regarding
GTK+ themes
, I think the metacity approach to themes worked
out pretty well. You could definitely improve on the details
(inventing my own little expression language was kinda weird, and
there are lots of
feature requests for the format
). But metacity themes are
“just data” rather than code while remaining reasonably flexible.

Arguably you want to go even more in the direction of “just data”
and keep themes to a pixmap-engine type of thing preferably with a GUI
theme editor. Lots of theme designers don’t want to mess with editing
an XML file anyway.

(This post was originally found at http://log.ometer.com/2005–11.html#26.2)

Adventures in Web 2.0

Over the holidays I thought I’d play with the Amazon and eBay web services APIs.
What a contrast! I got Amazon working in a couple of hours, and eBay… well, it’s
two days later and I’m starting to feel stupid.

For Amazon, to get information on a product you just register to get
an ID for your application, using your existing Amazon account if you
want, and then you plug that ID into a link
like this
and the HTTP GET returns a bunch of XML. So you have
your Amazon username/password, and one application ID string. There’s
also a “shared secret” used for any calls that require authentication,
but most calls don’t require it. Both application ID and shared secret are viewable online
as part of your account.

Amazon has SOAP too, for masochists, but I think I remember reading that only 1% of their API
users bother with it.

That’s the straightforward way to do a web services API. Now let’s
see what eBay has. First, there are three different
username/password logins
and it’s never clear which to type
in. Since they’re all on the same site, your browser will try to
autofill the login fields, usually with the wrong one.

Here’s what makes it even more awesome: the three logins at times I
don’t understand seem to interfere with each other by using the same
cookies. So e.g. you can try to log in to ebay.com and it will
redirect you to sandbox.ebay.com, things like that. Basically you need to use
Firefox for one site and IE for the other or something. Which is fun
since I can’t keep straight which login is which in the first place.

After you create your account (one of the three), eBay sends one time
via email three different ID strings; “developer ID,” “application
ID,” and “certification ID.” If you lose this email you are hosed,
they’re only sent one time.

Now you go to the “sandbox” fake-eBay web site and create a fake
user. Only you don’t want to do it on the sandbox itself because you
have to make up all the bogus info (credit card, address, etc.);
there’s a tool to make fake users without entering all that, but it’s
not on the sandbox site, you have to find it separately.

Fake user in hand, you go back to the developer site and manually
cut-and-paste into a form your three ID strings, and then log in as
the fake user, and it gives you another ID string specific to
the user. Only in my case it doesn’t; it says one of my three ID
strings is invalid. Stuck at this point (help?).

If I could get past that, then I could make an API call in the
sandbox environment. But I still wouldn’t be done. Next I’d have to
go through a certification process and get three more ID strings to
use with the production environment, generate another ID string using
a production user account, and I think finally be able to make a
simple API call to get real data from the site.

Let’s review, to make one call you end up with:

  • At least 4 separate login/password combinations
  • At least 8 tokens or ID strings

This is to get public information that anyone could anonymously screen-scrape.

I haven’t even started to complain about the API itself. Rather than a simple GET, you have
to do a POST with special headers. You are already POST-ing an XML document, so the
information could just be in the XML document; but nooooo. Then the headers include:

	X-EBAY-API-SESSION-CERTIFICATE: devId;appId;certId
        X-EBAY-API-DEV-NAME: devId
        X-EBAY-API-APP-NAME: appId
	X-EBAY-API-CERT-NAME: certId
        X-EBAY-API-CALL-NAME: callName

So yes, you have to put in each of the three IDs twice (someone send
eBay the docs on split() and join()); and you have to put the callName
in there, even though it’s also in the XML document. I imagine this is due to
some internal system that wants to route via HTTP header, or some other
implementation detail, but geez.

eBay does have prebuilt SDK code in various languages to do this for you, but
to me one of the whole ideas of web services is that you don’t need a special library
SDK. I would much rather they’d spent time making it easy to use the service than
coding SDKs in a bunch of languages.

Other frustrations I encountered:

  • For the first 6 hours I was trying to use it the API servers were apparently
    just broken; they would hang forever and then close the connection, without returning
    any errors
  • There are several different unrelated bits of documentation, some of them discoverable
    only via the forums
  • The documentation is in some crazy format where the links are javascript and
    thus opening in a new tab won’t work
  • The schema of the XML files seems like a raw database dump, while Amazon has some
    nice “pre-cooked” fields and other useful information.

What makes all this really painful is that in most cases it would
have been better if eBay had just spent less time on it and
kept developer site, API, and docs simpler. Instead of rolling out a
Content Management System for their developer site, they could have
just made their Getting Started page possible to find… seriously, I know
I saw it but now it doesn’t turn up in a search for “getting started” nor
does it appear to be linked from anywhere obvious…

On the plus side, the eBay dev support staff seems pretty responsive in the forums
(where there are lots of questions and confused people related to all of the above…)

(This post was originally found at http://log.ometer.com/2005–11.html#26)

iPod

Ben,
interesting that Europe has different sales numbers. For purposes of
thinking about product design though, to me the $50 flash players are
a distinct product category from the iPod or the Toshiba. People buy
the small solid-state players for different reasons (and at $50, the
reason need not be as compelling as the reason to buy a $400
gadget). iPod Shuffle tries to put the flash player into the iPod
design vision, and Apple markets it specifically for jogging and other
cases where you could not use the regular iPod. But the Shuffle’s
positioning and design is not typical of flash players and I don’t
know if it’s been successful.

Not sure comparing absolute number of $50 solid-state players sold
vs. $400 all-your-music players sold means much; it’s similar to
comparing CD‑R sales to iPod sales, or Corolla sales to Mercedes
sales. The success of the iPod was in giving people enough value over
a CD player or radio that they wanted to buy a new product category
with a base price in the hundreds of dollars.

“But they both play music” is a
generalization that clouds thinking
in my opinion. “Play music” is
not specific enough as a design vision to understand a product and its
tradeoffs; it doesn’t explain how the product will be different from
alternative products or product categories. It’s like the
empty mission statement “do good things well.”

Dom
— there are certainly other music players that work, but I would argue
that the iPod was the first one to figure out the formula that defined
its product category, and it continues to stand out.

Your point about marketing goes right to why I was mocking
Toshiba’s new campaign. I think you are wrong to say that Apple’s
marketing is better because of the marketing budget; though that
doubtless helps, to me a fundamental reason their marketing is better
is their understanding of the product design. They don’t waste their
breath on irrelevancies like “music is better in color,” nor do they
bombard you with feature lists. They know what the product was
designed to do and how it was designed to make you feel. And they
market it by telling you exactly that. The visual and emotional
design are part of it; far from merely cosmetic, they make people like
the product more.

You and I might bother to research the iAudio (I did when I was
shopping for players), but their marketing blows goats. I just went to
their X5 product page (can’t link to it because it’s all flash), and
their front-and-center pitch is a huuuuuge feature list, where many of
the features are irrelevant noise. Most people are going to tune that
out in a hurry. And let’s not neglect the marketing handicap of the
unknown brand name.

Apple seems to be sinking further into feature wars recently, as they
try to distinguish their new iPods from their old ones — their product
web site used to be better. But in particular their TV ads still stick
to the emotional experience of the product.

Unlike the iAudio people, Toshiba and Sony and friends have large
marketing budgets. But if they waste their money saying the wrong
thing, the budget won’t help them vs. Apple. You can see Toshiba’s
lack of understanding of the product in both their
implementation/engineering and in their marketing message.

Calum
brings up the music store; another important thing about Apple’s
approach is that they understood the user experience to be more than
the hardware device. It includes the store, the iTunes software, and
yes, the marketing. I’m hardly an expert in music player history but I
don’t think anyone else had put all the pieces together before Apple
did.

BTW, one word that waves the big red flag of Clueless is “content”
(with “media” as some kind of synonym). Whenever you see someone
saying “content” you know they’re being too imprecise to think clearly
about product design. When was the last time you heard a
non-technology person wandering around saying “I wish I had a better
way to access my digital content!” Apple is notable for using specific
words like “music” or “photos” almost always (in both marketing and
user interface).

(This post was originally found at http://log.ometer.com/2005–11.html#13)

Music in color?

It blows my mind that you can go to Apple’s web site and just
read what makes the iPod a better design than most music players, but
their competition can’t seem to figure it out. So Apple continues to
crush them. It’s just not that complicated: the iPod lets you listen
to all your music. That’s it. Apple gives you the design secret right
on their web page, saying things like “you can put all your music in
your pocket.” That’s why it’s better than a CD player.

If you have that design principle, you can know that the following
things aren’t all that important:

  • lightest weight
  • color screen
  • support for tons of formats
  • solid state storage and resulting greater reliability

Original iPod had none of that compared to the competition. Those
things can be nice, but only if they don’t break the core: a
convenient way to listen to all your music. The big amazing secret to
Apple’s design is simply knowing what the heck the device is for and
consistently applying that knowledge.

Note the iPod Shuffle. Apple’s flash player still preserves the
“listen to all your music” aspect
, with the “randomly shuffle new
songs onto it every day” trick.

Similarly, I remember reading that they wanted to be able to jump
to any song in some small number of clicks. Again, all your music, at
your fingertips. There’s a design vision here. They know why it’s
better than a CD player and focus on ensuring the details of the
product support the design objective.

This isn’t the same as saying the iPod is “user friendly.” “User
friendly” is just another lame checkbox in a lame feature list.
Design goals resolve tradeoffs; “user friendly” does not.
“User friendly” is like an empty company mission statement
that fails to distinguish a company from its competitors: “our mission
is to sell stuff, and be a good company to work for.” Design goals
will always be notable for how they are not
shared by other possible and actual products; they eliminate as many
directions as they add.

Other music players keep taking a feature-list-based approach to their
product. They are all “our player has more megapixels!” or “we
support 613 different codecs!” or “now with 53 buttons instead of 3!”
or whatever. They mishmash the tradeoffs in an incoherent way, never
focusing on clear design goals and thus unable to decide what’s
important. If you don’t understand the design, you don’t know whether
small size or 40GB hard drive is the more important feature.

What brought on this rant? Today I saw a music player
package with a screenshot of a terrible-looking UI and the prominent
tagline “Because Music is Just Better in Color.”
It seems this is Toshiba’s
big idea for their line of music players.

Last I checked, I don’t give a crap how many color megapixels my music
player has. I can’t believe they are making a mostly-irrelevant
feature the center of their ad campaign. They may as well write
Clueless About Product Design in magic marker on their forehead.

Sure, iPod Photo is cute, but it’s not why the iPod is a big seller.

(This post was originally found at http://log.ometer.com/2005–11.html#12)

TextView algorithmic complexity

Thinking about Morten’s comment,
one of the main goals of GtkTextView was to keep everything better
than O(n), because I’d seen so many posts to gtk-list where people
inadvertently wrote quadratic code with GtkCList and the old GtkText.
(Those widgets also had the evil freeze/thaw convention, where you
could “freeze”, do stuff, and “thaw” and it was supposed to magically
make the “do stuff” fast. Mostly it made the widgets crash by
creating strange code paths.)

The idea with GtkTextView is that for the most part you can just
use it and it’s scalable and things are fast. Lots of internal
complexity to enable that. We had a good starting point with the
TkText btree and we improved on it a fair bit.

However, there’s one exception to the scalability, and that’s long
paragraphs. GtkTextView has code that’s O(n) in
number of characters in a paragraph or number of “segments” (analagous
to XML text nodes) in a paragraph. (Note, paragraph is the same as a
newline-terminated line.) There are various bugs about
it
, but it would be extremely hard to fix.
It is mitigated somewhat by the
crazy
overengineered iterators
.
Pango also
works on the level of paragraphs (PangoLayout) and really can’t do
units of work below the paragraph level, so you can’t do something
like incrementally lay out only part of a paragraph.

I have no clue how you’d make the whole stack support really long
paragraphs, without using reams of memory of creating some scary(-er)
code. But it’s probably possible (I imagine word processors do
it). Not sure it’s genuinely a problem in real life, though.

(This post was originally found at http://log.ometer.com/2005–11.html#3)