Archive for July, 2007

danah boyd responds to her critics

Monday, July 30th, 2007

I’ve previously linked to danah boyd’s controversial essay about social class on MySpace and Facebook. A month later, boyd has taken the time to respond to her critics:

Qualitative research has data. Typically, written ethnographies and other qualitative-driven findings show that data through individual accounts, quotes by people that are contextualized, and detailed descriptions of people or situations. I have that data but I did not include it in my blog essay. I intentionally save data for my academic works so that I can flesh it out and situate it in the depth that needs to happen. The decision to not reveal data has to do with separating the academic writing from the blog writing, but it also has to do with what I’m trying to accomplish with each. Writing a case study of someone or using data requires a lot more fleshing out than I typically do in my blog. Thus, I didn’t show data in that essay but that is not because I don’t have it. This is another way in which this is not a formal article – leaps of faith are fine when you’re having a conversation, but not when you are trying to document something for posterity.

I’m mildly uneasy with “leaps of faith are fine when you’re having a conversation”. I know one thing my friends appreciate about me is my precision, and that when I quote something I often recall exactly where I read it. That is, I can offer cites. I think people are willing to tolerate uncited material in a conversation because none of us have the kind of memory that would allow us to remember where we learned every fact in our head. Nevertheless, I think it is the kind of thing that people indulge for the sake of friendship (and the knowledge that they will need to be indulged the same way, that is, reciprocity), but they are never really happy about it. And if you speak to someone who is not a friend of yours, and especially if they disagree with what you are saying, then assumptions of goodwill, indulgence and reciprocity cease to exist. Even among people I’ve known ten years, when we have a conversation where we disagree sharply about a political issues, they ask me to cite where I am getting my facts, and I’m often curious where they are getting theirs.

However, I have no reservations with anything boyd writes about the difficulty of defining social class in America. This is really one of the aspects of her writing that I enjoy most:

At the top of the essay, I snarkily wrote “I wish I could just put numbers in front of it all and be done with it, but instead, I’m going to face the stickiness…” The issue is not just that I don’t have quantitative data; it’s that quantitative data does not have the nuance to show what’s going on. It gets us part way there, but there are problems with it. Class is not simply a matter of what income bracket you’re at. When we use income level as a marker, we get the Marxist cafe worker and the immigrant janitor in the same bucket, but they are not living the same lifestyle at all. Another approximation that is often used for class is parental education. Post-graduate degrees are often helpful at pointing to upper class activity, but there’s still a huge difference between a Stanford Law degree and a master’s in special ed from the local night college. There’s also a big difference between dropping out of Harvard after 2 years and getting a 2-year community college degree. Surveys usually ask what the last degree one got was. Do we really put Bill Gates in the same bucket with other just-finished-HS individuals? (Gates was not just an average dropout… His parents were powerful and he dropped out of Harvard.) Marking teens’ class is even more sticky because we use their parents as proxies. Many children replicate their parents class norms, but not all. This is why parents complain that one kid is doing “OK” and the other is not; this means that one kid is living up to parental class expectations and the other is not.

Also:

I chose the term subaltern to refer to subculturally-identified and non-hegemonic teens because their expressions are often interpreted by hegemonic mass media in a way that they are always seen as failure. I wanted to choose a term that did not simply place them as second-tier citizens, but as powerful voices in discourse. Too many people who read my article assumed that the group that I talked about as subalterns are somehow inferior or less valuable than hegemonic teens. Perhaps that’s hegemony speaking, but I find it frustrating. I think that they are equally powerful forces in society (and they are certainly equally powerful in the market) but I think that they have different views on the construction and maintenance of society as we know it.

The terms are extremely problematic but I used them with a smile on my face because I thought that they would evoke an image and make people think. Many have been outraged that I appear biased towards one or the other (although no one seems to know which – I’ve been accused of being condescending towards subaltern teens and I’ve also been accused of fetishizing them). Perhaps I should’ve located myself. As a teen, I would’ve been caught in between – a smart kid whose friends and world were very much in the subaltern camps (geeks and burnouts primarily). As an adult, I have more privilege than I ever thought possible and my world is extremely hegemonic and I’m always trying to fight against that. Thus, I probably have more sympathy with subaltern teens but my friends are all raising hegemonic ones who I adore. Thus, I’m definitely caught in the middle.

It is amazing to me how many people will criticize an essay before they’ve read it:

Unfortunately, misinterpretations were made worse by the mainstream media, and namely the initial BBC article that talked about this essay as a formal report of a six month study. (The article was corrected a few days later.) I realized very quickly that people read the BBC article or the Slashdot coverage or their friends’ blog posts and decided to critique from there. I have been astonished at how lazy people have been. My article is not that inaccessible and it’s not even that long. What was even funnier was that when I wrote a response to the BBC article on my blog, people then took that to say that I saw the essay as based on no data and otherwise meaningless. The essay is based on data; it is rooted in a very long ethnographic study; but it is just not a formal report of my findings.

I especially like this, utopia is dead:

We used to have this utopian view that the Internet would solve all of our societal divisions. On the Internet, no one would know you’re a dog, right? The reality is that all of society’s issues are simply perpetuated online. And that’s frustrating. I liked the utopian dream better, even if it’s not real. But if we accept the reality – that the Internet mirrors and magnifies offline values and views – we must start to think of what the implications of this are. Society is in a dangerous position when people who are different do not interact. This is how intolerance breeds and we definitely have enough of that in this country.

boyd describes the criticism of her as absolutely brutal:

I couldn’t help but wonder if the academics I know could’ve handled some of what I received this month. Not all of it was what we would call a review. I’ve had to practice deep breathing as I went through detailed discussions of whether or not I was cute enough to fuck or look through bulletins that had decided to gather photos of me for analysis (they concluded that my arm bracelets prove that I’m a cutter). I know the Slashdot/Metafilter community well enough to not take the personal threats on my life or body seriously, but that doesn’t mean they don’t suck. Emails from parents accusing me of destroying their children’s lives suck. PR campaigns to discredit me suck. In general, being mocked isn’t any fun. Many of my dearest friends can’t stand even the slightest personal attack online; I’ve learned to take it for granted while being continuously disappointed by it. If online peer review is going to be this personal, few are going to be masochistic enough to want it.

For all that was written about Kathy Sierra and the attempts to silence women online, this strikes me as a more common example of the forces at work that might limit women’s careers, especially careers that depend on some kind of online presence.

Brendan Eich on the need for Mozilla to cut Thunderbird loose

Sunday, July 29th, 2007

Brendan Eich invented Javascript back in 1994, when he was working at Netscape. He’s since been busy with Mozilla. He is on the board, and he is a leading voice arguing that Thunderbird must be cut off from the rest of the Mozilla organization:

Turning this into a “I doubt MoCo ‘cares’ for other XUL apps than Firefox” is both:

1. irresponsible — sayrer’s right, we have to favor Firefox, “we” being the whole community, but especially MoCo (as distinct from MoFo); and

2. categorically confused — emotional when the topic here is technical: how to do Mozilla 2 so that all XUL apps have a better future, without serializing with 1.9 or taking on impossible workload in keeping to the current tree rules every day we develop Mozilla 2 in the new repo.

Money is not the issue. Hiring is one issue. Management bandwidth is another. Build infrastructure is yet another. Organization focus is yet another, and it’s a vague term, but obvious to anyone who has worked at a startup that grew into a big company. I could write about it at length and define it concretely, but I’m out of time here.

I’m focusing on Mozilla 2. That’s necessary and overriding. Thunderbird will have to fly free. If it does not reach a promised land, even with a good plan and some investment, I will be sad. But I will not jeopardize Firefox and the platform, which depend on Mozilla 2, by spending more time on it than my MF board duties require.

So again, apart from my board duties you won’t hear from me on this thread. And I’m not going to speak for the Mozilla Foundation board, or preempt them in any way. All the above is my opinion, which I’ve shared before. I’ve given my reasoning. I hope it’s both sound and valid, and that it can overcome raw feelings and help others, so that we can all improve the situation.

MySpace continues to fail to get basic programming right

Sunday, July 29th, 2007

When I log into MySpace, I’m told that I’m part of my extended network:

Myspace has a lot of errors

This is idiotic. I’m me, my friends are my network, and their friends are my extended network. Yes, because I am one of my friend’s friends, I can see why the code might initially think of me as part of my own extended network. However, it is confusing, and it speaks to really poor programming. After all these years, with all their money, can’t they get something so obvious fixed?

Database war stories

Sunday, July 29th, 2007

This article regarding data storage and its use is a goldmine of information. The comments that follow are also excellent. The article is focused on Bloglines and Memeorandum, but the comments evolved into a “flat files versus databases” debate. Some choice excerpts from both the article and the comments follow:

[For Bloglines] As evidenced by our design, traditional database systems were not appropriate (or at least the best fit) for large parts of our system. There’s no trace of SQL anywhere (by definition we never do an ad hoc query, so why take the performance hit of a SQL front-end?), we resort to using external (to the databases at least) caches, and a majority of our data is stored in flat files. Sure, we could have just gone with Oracle running on a big SAN, but that would have been very expensive overkill, both on the hardware and on the software licenses (and features, for that matter). And relational databases oftentimes are not the most efficient mechanism to store data, so we’d still most likely have to resort to using memcacheds.

In the comments, a fellow named Phil Swenson said that using flat files, instead of a database, was always a terrible idea. Many comments then followed, offering opposing views.

John Hart said:

Databases are useful for ad-hoc queries, schema flexibility, transactional semantics, and flexible indexing.

If you don’t need these things, you can get a _lot_ of wins by not using a database. If you’ve been developing within a database for a long time, seeing the performance you can get from flat files will blow you away. You realize, “oh, wow, computers are a lot faster than I realized because the database has been in my way for so long.”

As a funny example, what’s the quickest way to get a sorted 1TB dataset from Oracle? No matter how you define your indices, it’s still quicker to export unsorted data via SQL*Loader and then sort it yourself. Crazy, but (in my experience) true.

Scott Lewis:

Part of Phil’s point may be that databases provide a consistent, highly-referenced system for storing and retrieving data, whereas flat-file systems tend to be idiosyncratic. This affects not only ongoing support issues, but the actual value of a product, potentially. New purchasers of an online site, for example, would want surety that the data can be easily and reliably managed in the future. Databases tend to be better at providing that than flat-file systems, no matter how robust or fast.

Patrick Tufts disagreed with Phil’s assertion that “if you ever wants to extract/analyze data it will be painful.” Patrick wrote:

In my experience, doing very large-scale data analysis at Amazon and IBM, this is not the case. I prefer to work with flat files (either logfiles or full database extracts) because I’m going to do multiple passes over nearly every record, and most databases, while great for random access to records, are terrible when you just want everything.

Andy writes:

I have a huge directed graph stored in MySQL as a single table with (parent, child) relationships. As an optimization for other purposes, this gets flattened into a complete mapping of all ancestors to all descendents. The graph is maintained in an SQL table for maintenance reasons (we already have the tools that can manipulate the graph as stored in MySQL). The graph, and thus the table, is relatively small, 4000 nodes and 2000 edges.

Traversing the entire graph using SQL queries in sequence (query each node when it is reached) took 25 minutes. Selecting everything from the table and generating the same data structure (parent->child relationships, not nested structures) in perl cut the run time down to 45 seconds. That’s 45 seconds to traverse the entire graph. Of course, once it’s all in memory, that kind of speed is to be expected.

Chris M writes:

one advantage of a database is it makes it easy to change your schema, as phil pointed out. If your project is at all visionary or cutting-edge, that freedom is indispensible, since you never know what direction you’ll be going in next. What kind of relationships will be the most important ones, etc.

If you’re lucky though, and then smart, you’ll be able to cache essentially all of your application in “flat” html files in front of your database. You regenerate only the ones you need to when the database is modified, which should be infrequently. This is the approach Rails takes. Then also your pages can be comprised of up to dozens of small bits and pieces, so that when a master page is invalidated, the database is only hit to regenerate just the part that was changed and the regeneration only takes a half second or something.

Gavin writes:

The time to learn a relational db and then special cases to back up, etc., are big time inputs needed for rdbms. Do not forget that in the ‘against’ category..

YouTube Scalability

Sunday, July 29th, 2007

How does YouTube deal with the huge amounts of data that it must manage?

I found it interesting in light of my own comments on YouTube’s 45 TB a while back.

Here are my notes from his talk, a mix of what he said and my commentary:

In the summer of 2006, they grew from 30 million pages per day to 100 million pages per day, in a 4 month period. (Wow! In most organizations, it takes nearly 4 months to pick out, order, install, and set up a few servers.)

YouTube uses Apache for FastCGI serving. (I wonder if things would have been easier for them had they chosen nginx, which is apparently wonderful for FastCGI and less problematic than Lighttpd)

YouTube is coded mostly in Python. Why? “Development speed critical”.

They use psyco, Python -> C compiler, and also C extensions, for performance critical work.

They use Lighttpd for serving the video itself, for a big improvement over Apache.

Each video hosted by a “mini cluster”, which is a set of machine with the same content. This is a simple way to provide headroom (slack), so that a machine can be taken down for maintenance (or can fail) without affecting users. It also provides a form of backup.

The most popular videos are on a CDN (Content Distribution Network) – they use external CDNs and well as Google’s CDN. Requests to their own machines are therefore tail-heavy (in the “Long Tail” sense), because the head codes to the CDN instead.

Via Sam Ruby.

If you are successful on Facebook, then you will fail

Saturday, July 28th, 2007

A very interesting take on the Facebook platform:

Translation: unless you already have, or are prepared to quickly procure, a 100-500+ server infrastructure and everything associated with it — networking gear, storage gear, ISP interconnetions, monitoring systems, firewalls, load balancers, provisioning systems, etc. — and a killer operations team, launching a successful Facebook application may well be a self-defeating proposition.

This is a “success kills” scenario — the good news is you’re successful, the bad news is you’re flat on your back from what amounts to a self-inflicted denial of service attack, unless you have the money and time and knowledge to tackle the resulting scale challenges.

Will every Facebook application go through this?

No, of course not. The ones that nobody uses will not have this problem.

But the successful ones all will.

The implication is, in my view, quite clear — the Facebook Platform is primarily for use by either big companies, or venture-backed startups with the funding and capability to handle the slightly insane scale requirements. Individual developers are going to have a very hard time taking advantage of it in useful ways.

How to use OpenId

Wednesday, July 25th, 2007

Sam Ruby has an awesome article on how to use OpenId. He summarizes:

All told: I signed up for one free service, installed and tailored one PHP script, added one line to my weblog template, created one simple XML file and added a total of four lines to my .htaccess files.

System Administration basics

Wednesday, July 25th, 2007

System administration is not my strong point. However, today I had to create some users and groups on a Redhat Linux box that serves websites for Bluewall. I was lucky to find a helpful tutorial, however, when I tried to run the commands as it describes, I ran into this problem:

[root@www httpdocs]# groupadd devteam
bash: groupadd: command not found

Command not found? How could that be? I asked my friend Chris Clarke about this, as he knows more about sysadmin that I do. He wrote back:

Try ‘/usr/sbin/useradd’

If that doesn’t work: ‘updatedb’ then ‘locate *useradd’

His first suggestion was what I needed. This worked perfectly:

[root@www httpdocs]# /usr/sbin/groupadd devteam

Connections made via Couchsurfing.com

Wednesday, July 25th, 2007

Last year I signed up for an account on Couchsurfing.com. Mostly the people who’ve come to visit have been friends of mine from outside of the network. But sometimes someone comes through who knows me only from reading my profile. Some of the folks are unforgetably interesting, like Phil Erner, a grad student studying physics, who stopped by and explained to me exactly why dark matter is needed to explain observed anomalies in the rotation of galaxies. Some of the visitors seem sent by mysterious but caring forces, just to help me out. For instance, last month I was wrestling with the issue of how to proceed with a very large web client of mine. I asked myself, should I write their software from scratch, or should I take an existing CMS like WordPress or Joomla and customize it? Just then some fellow named Andy called up. He said he was biking across America, and he was wondering if he could crash at my place for a night. Turned out it was Andy Skelton, who is on the core team of WordPress. So he stopped by and we spent some time talking about the client and talking about how to customize WordPress. What are the chances of such a thing?

There is so much data on the web that all the rules of databases need to be rewritten

Tuesday, July 24th, 2007

The modern relational database came together around 1970. SQL (Structured Query Language), the language for getting data into and out of databases, was created shortly thereafter. The early relational databases were great for when a company needed to manage a few million records. Banks could keep track of their customers transactions, and airlines could keep track of their customers tickets. But now, it seems, we’ve reached a point where relational databases no longer work. At least, not for the giant stores of data that exist on the web, stores that might have billions, or tens of billions, of records. Apparently the increased speed of CPUs and the much greater availability of RAM has not been enough to give databases the extra speed they need to handle the larger data sets. The implications of that are worrisome.

Joe Gregorio has seen a new pattern emerge for handling very large data sets:

Sure you can store a lot of data in a relational database, but when I say large, I mean really large; a billion or more records. I know we need this because I keep seeing people build it.

He goes on to outline the main features of the new pattern that he sees:

Distributed
The data has to be distributed across multiple machines.
Joinless
No joins, and no referential integrity, at least at the data store level.
De-Normalized
No one said this explicily, but I presume there is a lot of de-normalization going on if you are avoiding joins.
Transcationless
No transactions

Things that inspire envy of computer languages I don’t use

Tuesday, July 24th, 2007

Ruby, Python, Perl, PHP, JSP, etc. For web development, the languages themselves have certain strengths, but they also, eventually, acquire software projects that make them famous. Ruby, of course, has Rails, and through that, all the software of 37 Signals, and also Twitter. PHP, in the early days, was known for projects such as Phorum. Python is known for Zope and the Universal Feed Parser.

I’ve worked with Ruby a little and PHP a lot but I’ve never worked with Python. If I ever learn it, it will be so I can use Venus. Venus uses the Universal Feed Parser to pull in a variety of feeds, and it has a template engine that allows the input to be output in any format: HTML, RSS, Atom, etc.

Sam Ruby explains the role that the Universal Feed Parser plays:

It handles multiple feed formats, date formats, and ill formed feeds. Just one concrete example to illustrate the point: the author name can be obtained from one of eight different places in your feed; and the Universal Feed Parser even handles cases where people simply put names in place of email addresses or tack on names as comments after an email address.

It partially cleans the HTML. It uses SGMLLIB to clean up the tokens, then it removes unsafe constructs (like plaintext), and resolves relative URIs.

What is Open Source? Apache versus the Free Software Foundation

Tuesday, July 24th, 2007

The Apache license is more open than the GPL. Richard Stallman claims that version 3 of of the GPL is now compatible with the Apache license. Same Ruby points out that this is a one-way street in terms of compatibility; the GPL can use Apache code but not vice versa.

In the comments, Ruby explains:

In order to preserve the “universal-donor-ness” of the code that we produce, and in order to prevent license surprises, the Apache Software Foundation will not distribute code which has either a direct dependency on GPL licensed code, or will only meaningfully operate when GPL code is installed. None of this precludes, for example, end users from combining code from the ASF with a GPL licensed JDBC driver. Nor is this policy specific to the GPL: it applies to any license which contains more restrictive terms than the Apache License.

“Consider the karma implications of cursing the driver”

Tuesday, July 24th, 2007

Matt Mullenweg has been critical of the PHP core team for abandoning PHP 4. Sam Ruby calls him out and says with open source projects there is no “Us” versus “Them” since you can freely join “Them” whenever you want. Matt replies:

What I think is missing is an understanding of what made PHP 4 such a killer update to 3, where 5 didn’t compel as many people. I also think there is a deeper discussion around language usability from a casual web coder’s point of view. As this comment say there can be a decreasing marginal utility. Every language doesn’t have to do everything. That’s what I was hoping to get people talking about, and it worked.

And Sam replies:

Those that contribute to PHP apparently feel the most pain concerning support of multiple versions. Yes, you can argue that they brought this upon themselves; but it is worth noting that at this point you are along for the ride. When I’m in similar circumstances, I tend to consider the karma implications of cursing the driver.

Read the whole thing, it’s worth it.

Usability is a single piece of an experience puzzle

Monday, July 23rd, 2007

A very nice point by Robert Hoekman:

We hold up usability as laudable because, sadly, most companies still have serious trouble putting their pants on correctly when it comes to usability. They need the gold stars.

Anyone in the interaction design or usability profession worth his salt knows that usability is a single piece of a very large “experience puzzle”. You need a strong value proposition to get users in the first place. You need a compelling product or service. You need good customer service when things go wrong. You need marketing prowess. You need something that makes you different, and better, than everyone else in your space.

For a product or service to be great, you need all these things. But you also need a usable touchpoint. A strong value proposition gets people interested in your product, but once you have their attention, a high level of usability helps motivate people to keep using it. A low level of usability deters people from using your product.

A story about hierarchy in the military

Saturday, July 21st, 2007

Chip Ransler (of Second Road) gave me the book Boyd: The Fighter Pilot Who Changed The Art Of War to read. I have not yet had time to read it all the way through, but I’ve enjoyed opening it at random and reading various parts of it. Since the American military is one of the largest hierarchical organizations in the world, studying it can remind us of the strengths and weaknesses of hierarchy. This following anecdote, from page 188, brings across one of the worst aspects of hierarchical organizations:

A story is told in the Pentagon of a colonel waiting in the outer office of a four-star general. The colonel’s face is twisted in anguish. He looks at his watch and he looks down the hall and he looks over his shoulder at the general’s door. Everything about the colonel shows a man twisted and torn by powerful emotions.

Moments earlier a subordinate had rushed to inform the colonel that his wife called to say their house was on fire. Her call was suddenly cut off, presumably by the fire. The colonel did not know if his wife was safe, if his children were safe, or if his house was burning to the ground. Every ounce of his being as a husband, every iota of his soul as a father, dictated that he drop everything to rush to his family. Yet he stayed. The chance to have a one-on-one meeting with a four-star general, the chance to advance his career, is more important.

Such is the way of life for many in the Pentagon.

This is an extreme case, of course, but it serves as a reminder about the sometimes twisted incentives that hierarchy puts in place. When an organization is hierarchical and big enough to be isolated from outside forces (even when that isolation later turns out to have been a bit of an illusion) then the internal politics of the organization become the main source of reward, validation, threat and competition. The effect can be deadly in for-profit companies. Instead of focusing on competing with outside threats, the managers of such firms focus on competing with their fellow managers. When I think of some of the American giants who’ve struggled through hard times (IBM in the early 90s, General Motors now) I sometimes wonder how it was that the organizations didn’t see the crisis coming which eventually hit them. In all such situations, one of the first things I suspect is too much hierarchy.

A bus that runs on veggie oil – 7,000 miles so far

Friday, July 20th, 2007

The Up And Clean crew stayed over at my house for the weekend. They were a delight to have as guests. (Their name derives from the bicycle group they used to belong to, the Down And Dirty club. ) The newspaper article that describes their adventures misses the most important fact about their travels: that they eventually overcame all mechanical difficulties. They now travel the country without needing fossil fuels (save for start-up).

The newspaper article emphasizes the trouble they had getting their bus out to Portland, Oregon, and then getting back home to Minnesota. But what happened after that article was written is that they fixed the remaining problems with their filtering system. They then drove down to Greensboro, North Carolina, and up to Charlottesville, Virginia, with no mechanical difficulties.

They get about 7 MPG on used kitchen oils. Which is not much less than what diesel would get pulling a big, old bus like that.

It’s worth mentioning that in the year 1892, when Dr. Rudolph Diesel invented the diesel engine, he thought it would run on peanut oil. The problem with peanut oil is that it was expensive, relative to fossil fuel. That has remained the main problem with all vegetable oils: relative to fossil fuels, they are expensive.

But the Up And Clean crew run their bus entirely on waste oil that’s already been used for cooking. As such, they’ve gotten all their oil for free, for their whole entire 7,000 mile trip. Clearly, if millions of people started using bio-diesel, it wouldn’t all be free, but the cost of waste oil will always be less than the cost of unused oil. I suspect waste oil is, in every sense of the word, economical relative to fossil fuels.

If bio-diesel interests you in the slightest, you should read their blog to keep up with their adventures.

Kaizen is an attitude, not a skill level

Wednesday, July 11th, 2007

Actually, the title should be “Kaizen is an attitude, not a skill level?”. The question mark is needed because these are issues I’m still thinking about.

Dr. W. Edwards Deming had a method of increasing the quality of any business process, but he was unable to get a hearing in America till towards the end of his life. After their defeat in World War II, the Japanese were desperate to rebuild their country and they were open to new ideas. And so Deming found an audience in Japan, and he taught the Japanese how to make high quality products. It wasn’t till the 1970s, when Japanese competition was hurting American companies, that American companies finally took an interest in Deming’s ideas.

The production of software and web sites can beneift from Deming’s method, which is neatly summarized as the Deming Cycle. Robert Hoekman has a nice, short page summarizing the Cycle:

The Deming Cycle is a proposal for handling changes. It includes four steps that repeat in a cyclical pattern:

1. Plan a change
2. Do the change
3. Check the results
4. Act on the results

Hoekman also has a page on the Japanese practice of Kaizen, which has made companies like Toyota the best in their industry. The software industry has a lot to learn from the practice of Kaizen.

Kaizen (pronounced “kigh-zen”) is the time-honored practice of continuous, incremental improvement. In the software industry, it’s the practice of actively improving designs, code, processes, and everything else, continuously, now and forever, to create a complete customer experience. The principles of the Kaizen Software Manifesto are:

1. Make continuous improvements in every aspect of the business.
2. Actively pursue a superior, complete customer experience.
3. Continually improve designs, code, and processes.
4. Strive to increase agility (binshou) while reducing costs.
5. Use the Deming Cycle to minimize disruption from change.
6. Prevent errors (poka-yoke), in software and in business.
7. Respect people, leverage expertise, and trust staff.
8. Reward suggestions, improvements, and progress.
9. Always move forward.

This last year, I’ve been working with Bluewall, and they’ve been trying to hire additional programmers and designers. I started off thinking that we could hire relatively inexperienced people and train them on the job. Perhaps this strategy will pay off in the end. However, the last two hires have both been extremely talented people, and it is a relief to work with them. They require very little of my management time, for the most part they manage themselves. This recommendation by Hoekman combines with my own recent experience to change my thinking about who we hire:

Build a kaizen team

Create a team of “change agents” to manage change and make it less interruptive.

One team, in fact, can be dedicated to improving the whole customer experience. Staff from different parts of the organization – marketing, development, management, etc – can all be part of this team. The team should have a clear goal of keeping an eye on the big picture of how customers experience the company and improving it in every way possible.

Of course, a kaizen team is not necessarily made up of highly experienced people. Kaizen is an attitude, not a skill level. So long as people have the right attitude then, given time, they will achieve improvement, which over time will amount to dramatic breakthroughs.

But these are things I’m still thinking about. I sometimes think that a kaizen team must have some experienced members, who can informally act as leaders. Otherwise the team makes improvements, but at a slow pace. Without experienced members, one would have (at least initially) a team of highly motivated individuals who are unsure what to do.

I should add, I have hired one person in the last year who was inexperienced but who has worked out wonderfully. The person is ambitious and dedicated to learning fast. So attitude is more important than skills. All the same, when one can find those rare individuals who have both the right attitude and advanced skills, then, I think, one should always hire such people, to the maximum extent that one’s budget can possibly allow.

MySpace, Facebook, social class, and design aesthetics

Tuesday, July 10th, 2007

danah boyd has a new essay about class dynamics and how they divide the people who use MySpace from the people who use Facebook. Everyone has linked to this essay, including such major media outlets as the BBC. One thing that jumped out at me was her idea that even the design of the site, the look and feel, were reflecting cultural values that arose from class divisions. (In the following excerpt, she uses the word “hegemonic” when referring to culturally middle class people, and “subaltern” when referring to culturally working class people.)

Most teens who exclusively use Facebook are familiar with and have an opinion about MySpace. These teens are very aware of MySpace and they often have a negative opinion about it. They see it as gaudy, immature, and “so middle school.” They prefer the “clean” look of Facebook, noting that it is more mature and that MySpace is “so lame.” What hegemonic teens call gaudy can also be labeled as “glitzy” or “bling” or “fly” (or what my generation would call “phat”) by subaltern teens. Terms like “bling” come out of hip-hop culture where showy, sparkly, brash visual displays are acceptable and valued. The look and feel of MySpace resonates far better with subaltern communities than it does with the upwardly mobile hegemonic teens. This is even clear in the blogosphere where people talk about how gauche MySpace is while commending Facebook on its aesthetics. I’m sure that a visual analyst would be able to explain how classed aesthetics are, but aesthetics are more than simply the “eye of the beholder” – they are culturally narrated and replicated. That “clean” or “modern” look of Facebook is akin to West Elm or Pottery Barn or any poshy Scandinavian design house (that I admit I’m drawn to) while the more flashy look of MySpace resembles the Las Vegas imagery that attracts millions every year. I suspect that lifestyles have aesthetic values and that these are being reproduced on MySpace and Facebook.

I should note here that aesthetics do divide MySpace users. The look and feel that is acceptable amongst average Latino users is quite different from what you see the subculturally-identified outcasts using. Amongst the emo teens, there’s a push for simple black/white/grey backgrounds and simplistic layouts. While I’m using the term “subaltern teens” to lump together non-hegemonic teens, the lifestyle divisions amongst the subalterns are quite visible on MySpace through the aesthetic choices of the backgrounds. The aesthetics issue is also one of the forces that drives some longer-term users away from MySpace.

What is the correct way to handle errors in PHP 4?

Monday, July 9th, 2007

Over at comp.lang.php I asked how best to handle errors in PHP 4:

I’m working in PHP 4. Even if a parameter is mandatory, I nearly always give it a default value of “false”. Then I print an error message if someone who is calling my function forgot the mandatory parameter:

function outputHtmlToShowFile($fileName=false) {
if ($fileName) {
// code goes here
} else {
echo “In outputHtmlToShowAFile() the code expected the first
parameter to be a file name, but instead the value was false”;
}
}

How do others handle default parameter values?

I’ve been assuming that relying on the PHP parser to write my error messages for me is unprofessional. I was wondering if other programmers felt that way. I got mixed reactions from others. (I unfortunately used the phrase “professional PHP programmer”, and every respondant made fun of me for that. I apologize for using the phrase)

Iván Sánchez Ortega wrote:

[Catching ever error this way ] is over-engineered and unneccesary.

If “someone” forgets to pass you a parameter, it is because:

- They haven’t looked at your function definition (they are bad programmers)
- You haven’t specified that they have to pass you a parameter (*you* are a
bad programmer)

So:
- Document your code (use doxygen/phpdoc/whatever)
- Tell other programmers you work with how your code works, and what they
can expect from it.

The “professional” way to go is to write specs on paper, then have everyone
read them, then assume everybody will be following them.

Ben Conley had the most interesting response:

My post got longer and longer as my thoughts came together on this subject. The gist of my claim is that you shouldn’t build something as FRAGILE as a function that breaks if there are argument variations, when you can simply build a more robust function in the first place. The final answer? Pass in a structure rather than require ongoing maintenance of all references to a function so as to avoid an error you never should have gotten in the first place.

There are two options here. You can create your function with a static set of arguments that fails when it is called with missing parameters, then counter with the retort that the dude who called it was a “bad programmer.” This is totally useless when your production sites are throwing unnecessary errors. The second option is to pass in a structure and simply check for various optional arguments.

Any “professional” programmer who relies on the vast repository of *documentation* present in most projects in industry is either an idealistic novice, or EXTREMELY fortunate for the places they’ve worked.

I have fantasies that someday I will collect all the good ideas I’ve heard and combine them into the world’s most amazing framework. I admire the way every method in JQuery always returns the object that it is acting upon, and therefore you can chain method calls together. That is an idea I’d like to see in a PHP framework. I love the way all parameters passed into a method in Ruby are automatically what (in PHP terms) amounts to values in an associative array. I’d love to see something like that in a PHP framework. Conley is suggesting something even better than passing in an associative array (which has the weakness that it is a primative), he’s suggesting that we always pass in an object with a particular structure. (Or perhaps there is a base class that gives certain properties to all classes in the system.)

However, Gosha Bine summed up a thought I’ve been having a lot for the last year:

You do test your software before it goes production, don’t you?

That’s exactly right. All that is needed in a system, in terms of error checking, is tests. If you have tests, you don’t really need error checking. And if you find yourself still needing error checking, it probably means you have not yet written enough tests.

The only corporate policy that creates “safe spaces” at work is genuine respect for the employees

Sunday, July 8th, 2007

Susie Bright was invited to come speak at Blogher. The invitation pleased her, but the subject did not:

This time, however, I was surprised which panel I was asked to join; it was pitched to me as “how to make safer spaces online.”

My first reaction was like a child being asked to put on my seat belt for the 100th time: Ugh. “But I don’t want to be safe online, Mom!”

When I think of all my ambitions for my blog or my writing, I think of being influential, incendiary, funny, poignant— never “safe.”

Susie Bright recounts her own history as a women’s rights activist, and recalls the crippling effect that concerns over creating a safe space could have:

Pretty soon, certain organizations of the feminist left were ground to a halt, because at any moment, someone could pipe up in a meeting: “I feel unsafe when you say that, Mary!”

There was nowhere to turn. Debate had no recourse in the “safe zone,” and the “victim” won, smugly, by suppressive default.

It’s rather amazing that everyone put up with it, and never rejected its childishness. Can you imagine interrupting a legitimate argument to complain that it had to end because it gave you a stomachache?

As the left pissed its faltering assets down a PC drain, the right-wing embraced some of the same coddled language. Is America safe for children? Are video games safe for teenagers? Shouldn’t women stay inside and be safe instead of being subjected to god knows what in the brazen streets?

Of course, this wasn’t anything new — it’s centuries-old protectionism – but the pseudo-feminist sheen gave it new legs.

That centuries old protectionism has never been a friend of women’s rights. It arises from the kind of paternalism that argues that women are weak and need to be protected, and the “protection” tends to involve a loss of freedom. But a confluence of factors allowed arguments about safety to make headway in the courts:

The next group to pile onto the Safe-T Garbage Detail were the corporate litigators. This was a huge leap. You had institutions that were truly guilty – are truly guilty – of staggering sexism and discrimination. They would freeze out and exploit their female workers without a second thought. Get some more coffee while you’re up, dear!

When a few women tried to mount a legal campaign against the worst offenders, it turned out that one of the few things they could nail these fuckers to the wall for, was for cultivating an “unsafe” atmosphere.

To a large extent, Bright sees the issue of safety as a distraction from the underlying class issues:

Here’s a tip: Wanna stop the cycle of “safety panics” at your workplace? Give each person who works some privacy and dignity.

Then look at the pay scales of everyone in the company, and give all the secretaries, assistants, and janitorial staff a gigantic raise. Watch how suddenly, all the “unsafe” feelings disappear as if by magic!

I think she sums up the situation fairly well. I don’t think more pay equals more safety, but I do think both reflect a crucial underlying set of values. The organization that respects its workers and pays them well is going to have less harrassement than the organization that disrespects its workers and pays them low wages.

Not all harrassement comes from the leadership. In fact, studies show that the majority of sexual harrassement happens between workers who are nominally peers. However, how much harrassement will be tolerated is certainly indicated from the attitudes of those at the top. The leadership of any organization signals, through its policies and its pay scales, how much respect it has for the people working in that organization. Lower ranking staff are at all times aware of how much real respect the leadership has for the workers. And those who wish to harrass will be concious that they can get away with more when they are in an organization that has no respect for its workers.

Heather, at her blog The Needle’s Bewitching Eye, writes of her own experience with sexual harrassement:

However, by the time I left the job, not only had I realized I wasn’t even helping the company, but I had also become a victim of gender harassment myself many times over. I worked in one of the two organizations which was supposed to SET THE EXAMPLE for the rest of the company (the other being the Equal Employment Opportunity/Affirmative Action, or EEO/AA group); I had a B.A. and an M.S. in criminal justice; and I dealt with severe violations all day, every day; but I couldn’t even manage to protect myself from victimization because I worked in a dramatically male-dominated field.

In fact, I had reported my own situation to the EEO/AA group no less than five times — and WON the investigation every time. The problem, though, remained because, as the only female employee in my group, I was the only one complaining about gender harassment, and so it was rather a simple solution to just ignore me. I actually was told often, “Nobody else has a problem,” and after I heard it enough times, it did start to sound an awful lot like, “You are crazy.” Even the EEO/AA investigator (who was a male, by the way, and a very decent one, too) couldn’t help much with that, since he couldn’t be in my shoes all the time. I had to deal with reality, and I had to deal with it alone. It was as natural to my male bosses and coworkers to treat me as a second class citizen as it was for them to urinate while standing. It would never have occurred to them to analyze their own actions, and even when someone pointed out to them exactly how they were treating me differently from everyone else, they still had difficulty seeing it for themselves. More importantly, they refused to change their behavior. Or maybe more accurately, they didn’t think they SHOULD change their behavior because I was ONLY a woman and therefore not worth showing that much respect.

Heather’s experience points to how difficult it is to stop harrassement in an organization that has ingrained contempt for women. The law is a blunt instrument, it will often fail to reform an organization that does not want to reform.

What Susie Bright reminds of us is how a company can use old fashioned paternalism to create an illusion of safety – for instance, put a filter on web browsers so no one can look at porn. Such a policy doesn’t protect employees from sexual harrassement at work, but it does give the company something to point to if they are ever brought to court. They can say “See how much we care about our workers? We won’t let anyone look at dirty pictures.” Such paternalism as this takes for granted that women are weak and need to be protected. It’s questionable whether this form of protection is ever necessary in a firm with a genuine respect for all of its workers. To put this the other way round, I’ve never worked at a firm that filtered out porn, and there was never a need for such a filter because at the places I’ve worked the whole culture of the business has communicated that professional, respectful behavior is expected from everyone at all times.

Listening is the most important skill a designer possesses

Sunday, July 8th, 2007

Robert Hoekman is the author of Designing the Obvious, which all web application designers should read.

In a recent post he talks about the right way to listen to feedback from one’s users:

I have also long maintained that once you have a product available, you should then plug in and start listening to your audience. In doing this, however, I’ve said you should pay attention to the overwhelming trends – the requests that bubble up to the top over and over again – and not the idiosynracies of individual or small niches of users.

He then quotes a statistic from the Opera web browser development team that shows that a feature that users had frequently requested, and which has been implemented, is never used.

He concludes:

Clearly, even paying attention to trends can be risky. I’ve seen this myself in a couple of situations. It seems that a large number of people can all have the same wrong idea….

Our job as designers is to interpret and define problems, and to create solutions. Very often this means ignoring everything you hear and paying attention only to what you see. When you pay attention to what people actually do instead of what they say they do, you can devise solutions that exceed their expectations.

Instead of building exactly what they ask for, figure out why they’re asking for it. Then find a solution that solves the real problem.

I have occassionally heard designers respond to criticism with the words “I did exactly what you asked me to do” This response, it seems to me, can arise for only two reasons:

1.) The organization for which the designer works has no real respect for design. The designer is not empowered to do actual design work. Instead, the designer is told to follow orders or be fired.

2.) The designer does not understand the actual work of design. The designer needs to spend more time listening to the client/boss so they can figure out the why of a request, rather than the what.

There is no easy fix for #1, which is an epidemic sapping potential economic value out of millions of businesses worldwide. However, for #2, all that is needed is greater design education.

Version 5 of HTML is coming soon

Sunday, July 8th, 2007

I am struggling to accept what Anne van Kesteren announces as the future of the web:

People are slowly starting to realize what HTML5 means and start arguing about individual things:

* No SGML
* No DOCTYPE
* No formal schema
* No versioning
* Defined error handling

It’s hard to grasp that all you ever thought was right — is wrong.

Why am I strugling to accept this? I guess because learning all this stuff was hard and now, having learned it, it is tough to let go. As she says, it is tough to accept that all you ever thought is now wrong.

On the bright side, HTML 5 will have some new tags. Kesteren has been documenting them as part of the draft proposal:

section – represents a generic document or application section. It can be used together with h1-h6 to indicate the document structure.

article – represents an independent piece of content of a document, such as a blog entry or newspaper article.

aside – represents a piece of content that is only slightly related to the rest of the page.

header – represents the header of a section.

footer – represents a footer for a section and can contain information about the author, copyright information, et cetera.

nav – represents a section of the document intended for navigation.

The input element’s type attribute now has the following new values:

* datetime
* datetime-local
* date
* month
* week
* time
* number
* range
* email
* url

While using Google to look up some of Kesteren’s old posts, I stumbled across an older discussion of HTML5, XHTML, and how best to serve these files on the web:

Sam Ruby wrote that insisting on a valid XHTML web page was too hard for people who wanted to create SVG images (that’s Scalable Vector Graphics) as part of their pages. This made no sense to me because Ruby has SVG images on his page and I know he is very smart and can surely work out any problems with validity that he might run into (even making sure his page is valid XML). But then, in the comments, he explained what he wanted and it all made sense:

The world in which I would like to live is one where my daughter could view one of the ever-growing number of SVG images that are hosted on wikipedia, and could select-copy-paste one onto her MySpace template. I would have no problem with the requirement that the SVG image itself be locally well formed, but the requirement that the enclosing page must also be well formed and served with a non-forgiving and not-universally supported MIME type is a non-starter.

Oh, yeah, now I get it. MySpace is a disaster and there are lots of websites out there that are just as bad, yet a JPEG or GIF image will still show up correctly on any of those sites. Ruby wants a world in which SVG images are as portable as JPEG or GIF. That means they have to be allowed to work on invalid pages.

On that same page, in the comments, Ruby raises the question of why the WHATWG weblog is running WordPress, which serves XHTML. Since the WHATWG exists to tell the world about HTML 5, shouldn’t its blog run HTML 5? Lachlan Hunt then explained:

Regarding the WHATWG’s WordPress blog installation and the problems with it, I have attempted to get it to output HTML5 instead of XHTML, but the major problem is that there’s XHTML empty element syntax, string-based processing and other nasty surprises littered throughout the code, that it’s just just as simple as writing a new template for it.

It’s such a fundamental flaw in the way WordPress and many other CMSs have been built. The best option is to write a CMS from scratch that uses real XML tools on the back end and serialises as HTML to output; but the amount of time and effort that would take to set up compared with the one-click installation of Word Press is just too much.

I just posted this to the wp-hackers mailist, and Alex Günsche replied:

It is true that there are XHTML snippets hardcoded in the WP core. But it would be a matter of a couple hours to find and replace that code. (This would also be required on each upgrade.) Then you would need timeto create the template, which can also range from a couple hours whentaking and adapting a simple existing theme, up to a week and more whencreating a new and sophisticated theme.

WordPress is not MVC, which is, without a doubt, its greatest flaw.

Social aggression is made visible on MySpace

Sunday, July 8th, 2007

In their book “Aggression, Antisocial Behavior, and Violence Among Girls”, the researchers Putallaz and Bierman argue that females avoid physical aggression but instead use social aggression as their outlet for rage. Deborah Giorgi-Guarnieri summarizes the argument as “boys are good at physical aggression and girls prefer social aggression. Social aggression means, ‘acts intended to inflict damage on a victim’s social relationships or social status,’ (p 15) such as gossip.”

Ten years ago, when a lot of this gossip was still verbal, and offline, it was difficult for outsiders to see these kinds of attacks. Gossip, after all, could be delivered to specific audiences, and anyone outside of that audience might only hear a garbled version of the attack. If you were inclined to think of the aggressor as kind, and if the gossip was especially vicious, then you were free to believe that the aggressor never really said the things that 3rd parties might later tell you that she did indeed say.

MySpace, and other online social networking sites, helps make the gossip visible. This, for instance, was recently posted by a woman that I know, and it is about another woman that I know:

A Message to Older Women: This has been a long time coming…

Dear Older Women (in the +30 range),

DON’T HATE.

Stop reminding me that I’m younger than you, I can SEE the difference and I’m quite pleased with the view.

One day I’ll be as old as you and I know that I certainly won’t be as (if at all) bitter- There are plenty of other women who are not that way who are your age and are mature about it. You may be older, but grow the fuck up and be proud your dents, wrinkles, and knowledge. Stop being so fucking vain. Don’t blame the young ones for your inadequacies in life or your inadequacies in your relationships.

Thank you.

Love,

26 year old, unsagging, virgin uterus & stomach, and well rested.

(The “virgin uterus” bit is potentially confusing – it is meant to say “I have not had a baby”, not that she is a virgin.)

There is a certain irony to a post so full of venom starting off with the words “Don’t Hate”.

The advantage, I think, to posting this on MySpace, is that the poster gets to potentially shame her target in front of a much larger audience than if the communication was done verbally.

A lot of articles have focused on how MySpace is changing relations among teenagers. Yet, with little effort, I could find a dozen such incidents occurring in my adult social network.