Wednesday, October 31, 2007

Why I Don't Vote, Part Eleventy-Million

I haven't been watching the presidential debates. Up until this morning I didn't know that they'd started including a "lightning round".

Excuse me, what? You've got to be kidding...

But no, its apparently all very real. Do we need any more evidence that the debates have, in a very literal sense, been turned into a game than the fact that they're borrowing ideas from Password?

They don't say anything substantive. If they did say something substantive you'd be a fool to take the statement at face value. And even if they're being sincere there's no guarantee it'll mean anything after election day. Why not just stuff them all in sumo suits and get it over with...

Tuesday, October 30, 2007

A Problem With Anonymous/Confidential Complaints

Eugene Volokh, in his recent post on confidential and anonymous complaints, appears to have overlooked a problem with such systems: it's very difficult for the accused to mount an effective defense against anonymous accusers.

We had (what I consider) a problem of this sort when I was in college. Students would be accused of X by person Y, but because of administration guarantees of confidentiality the identify of the accuser was withheld from the accused. More importantly, because evidence of behavior X was often intimately linked with the accuser's identity, the accused was often not allowed to see the evidence against em. Needless to say this makes it very difficult to challenge the veracity of the evidence (or the accuser).

Disclaimer

For the sarcasm impaired I'd like to go on record as saying that I don't believe what I wrote in my previous post. However, if Mandolin's soliloquy is to be taken at face value, it means that "feminism" no longer means anything. There are no core beliefs which define "feminism"; everything is negotiable.

This is clearly not the case.

I'm going to do the unthinkable and write down a definition of "feminism": Feminism is the belief that every woman has the right to self-determiniation*. It follows from there that some institutions, organizations, persons, creeds, etc. cannot, by definition, be "feminist" because they do not recognize this right. Some of the entites in Mandolin's list certainly fall into this category.


* Thanks to Ani for the succinct wording.

Feminism Is...

Feminism is for religion. Feminism is for non-religion. Feminism is for Discordians.

Feminism is for podiatrists. And goldfish fanciers. And NAMBLA members.

Feminism is for genders. Feminism is for continuums. Feminisim is for people who haven't quite made up their minds.

Feminism is for the oppressed and the unoppressed, the whingey and the merely whiny.

Feminism is for civil rights. Feminism is for might makes right.

Feminism is deferent to reality. Feminism is diffident about reality. Feminism is dogmatic about reality.

Feminism embraces contradiction. Feminism is everything to everyone.

Feminism means nothing.

Coolest... Simulation... Ever

(via Pharyngula) Ey wrote a simulation to evolve watches (clocks actually, but same diff) to counter the whole "watch found on a beach" argument against the theory of evolution. I must salute em, not only for extreme dorkitude in the face of adversity ("honey, it's 2 in the morning, come to bed"), but for writing and then explaining one of the coolest population simulations I've ever ever seen.

I'm especially impressed by how the simulations accurately capture the historical contingency implied by the theory of evolution. Every time ey runs the sim ey gets different results over different periods of time, nicely countering any number of "just so" stories.

I Love A Contradiction, Don't You?

(Via Dispatches) Every once in awhile I run across something which makes my personal Imp of the Perverse positively gleeful. In this case its a post by Timothy Sandefur on the law's treatment of irrational beliefs. But I have to take exception to the following:
But the problem with answers 1 and 3 is the public policy problem of the courts determining what sets of unprovable beliefs are and are not objectively irrational. On one hand, courts have even gone so far as to take judicial notice of the irrationality of certain beliefs. See, e.g., United States v. Downing, 753 F.2d 1224, 1238 n. 18 (3d Cir. 1985) (courts may take judicial notice of the invalidity of phrenology or astrology). But on the other hand, taking a step in this direction threatens important Establishment Clause and Free Exercise rights. That’s why in United States v. Ballard, 322 U.S. 78 (1944), the Court found that it could not inquire into the scientific validity (or lack thereof) of faith healing, in a case involving a mail fraud prosecution. If courts can determine that certain beliefs with regard to ghosts are objectively irrational and untrue, then what about religious beliefs (which are, in fact, objectively irrational and untrue)?
I think that Sandefur is making an unsupportable distinction in calling some beliefs merely "irrational" while elevating others to the status of "religion". In Frazee v. Illinois Department of Employment Security the Supreme Court held that a particular belief needn't be dressed up in the trappings of a recognized religion to qualify as "religious". All that's really required is a person's "sincere belief" coupled with them saying "religion" and "no takebacks".

Granted I'm not a constitutional scholar, but it seems to me that a belief in ghosts, when accompanied by the appropriate legal incantations, can easily fit into the "religion" category. Ditto astrology, but probably not phrenology since the latter doesn't make any sort of supernatural claims. Kinda feel the void looking back, don't ya?

A Good Defense of Originalism

I tend to be somewhat skeptical whenever people start talking about "originalism", especially when the originalism in question seems to dovetail nicely with the policy positions of the person defending said method of constitutional interpretation. But Randy Barnett has put together a cogent defense of what he refers to as "original public meaning originalism". I especially liked the following:

Notice that, while "justice" is the ultimate normative justification for originalism, the intermediate steps are crucial. If a written constitution is valuable for the reasons identified--to define and police the principal-agent relationship--then one cannot simply dispense with it in pursuit of greater justice. More precisely, agent-judges cannot on their own authorize agent-legislatures to exceed their proper powers as defined by the written Constitution in pursuit of greater "justice" than that document provides.
People give me crap on a regular basis for being overly-focused on process; this is exactly the kind of response I would provide if I were a little more articulate.

The one, minor critique I would levy against Randy's defense is that he doesn't really address how one goes about determining the Constitution's original public meaning. He does get close to the issue in the final paragraph; it sounds like something he's saving for another post.

Thursday, October 25, 2007

More On The Definition Of "Hate Crime"

I wanted to respond to something that David Neiwert wrote about hate crimes. You might call it quibbling, but as I've written about before the distinction has substantial ramifications for how we prosecute hate crimes. David says:

  1. "A hate crime hasn't occurred simply when a person of one race commits a crime against someone of another. This, of course, occurs all the time."
  2. "It's only a hate crime when the victim is intentionally selected specifically because of their ethnic, religious, or sexual identity."
  3. "Hate crimes are message crimes: They are intended to harm not just the immediate victim, but all people of that same class within the community. Their message is also irrevocable: they are "get out of town, nigger/Jew/queer" crimes."
David's construction leads to a situation where a particular crime can be both a hate crime and not a hate crime at the same time.

Suppose that a white man beats a black man due to racial animus, but provides no external markers indicating his motivation. This situation meets the definition of "hate crime" given in (2), but (3) requires the delivery of a message of racial animus to the targeted community. Per (1), racial animus can't be inferred merely by the fact of white-on-black crime, so there must be external signs indicating the perpetrator's motivation. Such signs are absent in this case, so this situation is not a hate crime as defined by (3).

The contradiction here arises from an undue focus on the perpetrator's internal mental status. If bias crimes are really crimes of intimidation directed as a particular group then the perpetrator's motivation is secondary to that group's perceptions of the incident. If a representative member or members of the targeted group believes that a crime was bias motivated then that meets the "message delivery" criteria which David outlined above. Conversely, if the targeted group does not perceive bias motivation, then it's difficult to argue that a particular incident is a hate crime, regardless of the perpetrator's intentions. Of course, in the case of perceived bias motivation, evidence contradicting that interpretation should certainly serve as a mitigating factor.

Tuesday, October 23, 2007

The Right To National Identity

(via Alas, A Blog) No Snow Here writes:

Earlier this week, I saw a commercial on TV. Several shots of people saying things like “I am American,” “I am Korean,” and “I am Indian.” When I heard the words, “I am Israeli,” I shouted some expletives at the screen. WTF!? And I shouted some more expletives when I learned that apparently the “right” to a nationality is Youth For Human Rights International’s 15th human right (just not for Palestinians, who have no rights, human or otherwise). First, Israelis and Americans have no “right” to a national identity. Israelis and Americans have a national identity that exists on the backs and dead bodies of indigenous people, so I don’t even want to hear that bullsh#@. Second, most people in this world have a national identity that was entirely invented and forced upon them by colonizers. Who drew those lines on the map? Who constructed and named those countries? Uh huh.
Two thoughts:
  1. Saying that Americans have no right to a national identity is sort of like threatening to take away someone's birthday; like it or not its still going to be there when you get done.
  2. Be careful what you wish for; the "right to national identity" lives just next door to the "right to self determination". Criticize the former and you might end up killing off the latter, and then where would the Palestinians be?

Monday, October 22, 2007

Improved Leo to Graphviz Script

After working with the Leo to Graphviz script for a little while I realized that it creates redundant edges if there are cloned nodes. An improved script which eliminates the redundant edges follows:

@color
@language python
@ Create a Graphviz .dot file displaying the hierarchy under a
@ particular node.
@c

import leoGlobals as g

# Create an edge between parent its child, then repeat the process
# for each child.
# parent: Position object for parent node
# accumulator: text string used to build up the result.

def CreateEdge(parent,accumulator):
    for p in parent.children_iter():
        accumulator.append("\""+parent.headString()+"\" -> \""+p.headString()+"\"\n")
        accumulator = CreateEdge(p,accumulator)
    return accumulator

# Uniquifying function stolen from 
# http://mail.python.org/pipermail/python-list/2004-July/269510.html

def uniq(a):
        "Remove duplicate elements from a.  a must be sorted."
        p=0
        for i in xrange(1,len(a)):
            if a[i] != a[p]:
                p=p+1
                a[p]=a[i]
        del a[p+1:]
        return a

#### Execution starts here

# The headline of the node to parse

root_node_headline = "<FILL IN NODE HEADLINE>"

# The headline of the node which will contain the output of the
# script.

output_node_headline = "<FILL IN NODE HEADLINE>"

g.es("Parsing hierarchy to .dot file...")

# Find the root node of the hierarchy to be parsed.

root_node = g.findReference(root_node_headline,g.top().rootPosition())

# Traverse the hierarchy

accumulator = []
for p in root_node.children_iter():
    accumulator = CreateEdge(p,accumulator)

# Sort the accumulator

accumulator.sort()

# Eliminate duplicates

accumulator = uniq(accumulator)

# Join the accumulator

result = "".join(accumulator)

# Prepend Graphviz preamble for a digraph

result = "digraph arts {\n" + result

# Postpend Graphviz postamble for a digraph

result = result + "}"

# Find the output node

output_node = g.findReference(output_node_headline,g.top().rootPosition())

# And write the result to it.

output_node.setBodyStringOrPane(result)

g.es("Done")

The Role of Intent in Defining Racism

Following my previous post on the subject I had a chance to think more about current operational definitions of racism. Having had the chance to chew on the subject for awhile it seems that intent plays a key role in deciding whether a behavior can rightly be classified as racist.

I came at this by way of analogy. Consider the assertion that men are, on average, stronger than women. I would submit that asserting this fact, by itself, isn't sexist, despite postulating an innate difference between two groups. This fact can certainly be used to support arguments about the superiority of one sex over another in relation to various activities. I'll even go so far as to say that supporting the superiority of one sex over the other is not intrinsically sexist, provided you'll grant me a paragraph or two to explain myself.

We regularly note systematic differences among individuals or groups without concern that such distinctions promote one "ism" or the other; differences, and the noting thereof, are value-neutral. If we then go on to say that those differences, innate or otherwise, make some groups less worthy of respect, or use such differences to justify denying some groups full personhood, that's when such behavior descends to the level of "ism".

Consider the following assertion by way of example: African-Americans have darker skin, on average, than persons from Northern climates. Noting that they have dark skin, or inquiring as to why they have, on average, darker skin, are not racist activities. But using the fact that they have dark skin to justify their mistreatment (see, for example, the curse of Ham) is clearly a racist activity.

Mandolin was kind enough to leave the following comment in response to my previous post:

Unfortunately, the concept as postulated has been soundly debunked, leaving only those who are racist still clinging to it.
I disagree, because its possible that persons who hold that theory a) don't know that it has been debunked or b) remain unconvinced by the material that has been put forth in rebuttal. In either case they could still assert the theory without necessarily being racist. If they believe that the theory is false, and choose to assert it anyway in defense of some nefarious agenda, that is clearly racist behavior.

Some of you are undoubtedly accusing me of sophistry and/or pedantry at this point, but I think that making intent an integral part of any definition of racism (or any other "ism") solves a couple nagging problems:

  • Overly broad definitions: Some operational definitions of racism that I've run across make racists out of people like Dr. King. Including intent in the rubric for racism prevents that sort of absurd result.
  • "Off-limits" topics: If certain assertions are inherently racist (or sexist or whatever) then they become socially taboo. It becomes difficult to discuss them, subject them to empirical analysis, etc., despite the fact that such activities serve to suppress isms in the long run.

That's my $0.02 for this morning, carry on.

Friday, October 19, 2007

More Thoughts on Defining Racism

Before I dash off to work this morning I wanted to respond to something that Mandolin at Alas wrote regarding racism:

UPDATE: While I bow to Chris Clarke for being more cogent than I am on this issue, I do have to point out just one last ludicrous comment from a new Pharyngula thread about Watson’s remarks. Writes a commenter called Christian Burnham: “It seems that [another commenter] is now suggesting a genetic basis for the apparent variation in IQ between different groups. That may make him/her completely wrong- but it still doesn’t make him/her a racist.”

Here we have yet another perfect example of how people squirm to make sure that even the most blatant, obvious racism is denied the label. For me, reading that thread, it also becomes an example of how the mostly white, mostly men are inured to anything except the abstract ramifications of what they’re saying. Commenters entreat those who endorse the ev-psych viewpoint to contribute evidence, due to the controversial nature of the topic, while decrying anyone who reacts with anger. They seem to have no real sense that the asshats are talking about real, flesh and blood people, and that what they’re saying has stakes. After all, it doesn’t have stakes — except possibly beneficial ones — for them.

Would it still be "racism" if there was a "genetic basis for the apparent variation in IQ between different groups"?

At heart the idea that IQ varies between different groups is an empirical assertion and, as such, is testable. Though there are (perhaps insurmountable) difficulties is actually testing such a hypothesis it nevertheless is the case that the hypothesis might be true. If that were the case would that make anyone who acknowledged the truth of the statement a racist?

As I've written about before, it seems that the use of the term "racist" has, in the recent past, lost its normative focus. When we say that someone is a racist we do so, presumably, because we want to call out and condemn unacceptable behavior. Mandolin's definition, in the very least, blurs this distinction to an unacceptable degree because it makes someone who asserts a fact morally equivalent to a foaming-at-the-mouth, goose-stepping neo-Nazi.

On reflection I'll actually go further an say that Mandolin is committing a category mistake in eir definition of racism. It makes no sense to call a fact "racist"; "racist" is a predicate which only applies to opinions. It follows from there that someone cannot be called racist simply for asserting a fact.

Put more succinctly, the term "racism" needs to be reserved for irrational beliefs. If the proposition that there was a genetic basis for the variation in IQ between groups turned out to be true then merely repeating the fact would not deserve social sanction.

Wednesday, October 17, 2007

Determining The Limits of Responsibility

I mostly agree with Gavin that Mark Hemingway's recent "New Frosts/Old Frosts" article is full of The Stoopid. Buried under all the crust, however, is a nugget worth pursuing. Quoth Mark:

On the conference call, Dara admitted to me that she and Brian had been talking about having children since before they were married. She further admitted that after they were married she voluntarily left a job at a country club that had good health insurance, because the situation was "unmanageable." From there she took a job at a restaurant with no health insurance, and the couple went on to have a baby anyway, presuming that others would pay for it and certainly long before they knew their daughter would have a heart defect that probably cost the gross national product of Burkina Faso to fix.
This isn't a post about the old Frosts or the new Frosts (or any other Frosts for that matter) per se, so I'm not particularly concerned with whether the quote above accurately represents the reality of the situation. Rather, I'd like to use it as a jumping-off point for a discussion about the boundaries of personal responsibility.

Construed narrowly this is a question about jobs and associated benefits1. Mark says that its Dara's fault that she doesn't have health insurance while Dara says that the job was "unmanageable". This reveals a disagreement over the level of effort/discomfort needed to obtain and maintain insurance.

Construed more broadly this is a question about the level of responsibility a person bears when it comes to taking care of themselves and their dependents. Who's right, and who gets to set the norm for what "right" is in this situation?

Mark seems to think that such questions can be answered by referring to the standard practices of some larger community. To wit:

Are you reading this at your computer at work, in a job that you don't particularly care for or even downright detest because you have a spouse and child that depend on you? You wouldn't be the first or last person to make that choice.
This approach is no doubt favored by many people but, as Mark amply demonstrates, suffers from the following serious flaws:
  • Characterization of the community
  • Membership in the community
  • Applicability of community norms

Characterization of the Community

Mark's statement is really just a variation of argumentum ad populum: he makes a vague claim that some section of society holds a particular norm and then seeks to bolster the respectability of said section by associating it with the reader. If this approach is to have any bearing at all it behooves us to adequately characterize the community from which the convention derives: who are they, exactly, and do they really believe the things that people claim they believe? To do otherwise would run the risk of being led astray by people who are just making shit up.

Membership in the Community

Once a particular community has been adequately characterized it's still necessary to demonstrate community membership. It makes no sense to hold a person accountable to a particular group's norms if the person isn't a member of the group to begin with. The alternative is to say that one group's norms trump another. There might be special circumstances where that's a supportable proposition, but as a general rule that seems to be a non-starter.

Applicability of Community Norms

Finally, since when did "everyone else is doing it" become any kind of moral justification? Folks like Mark are very quick to invoke "everyone", as long as everyone includes them. Find a different "everyone" and, all of a sudden, they start making comparisons to the Roman Empire. Try to judge someone's behavior with reference exclusively to community norms is an enterprise that's doomed from the start.

So that's Mark's position; he doesn't really have a leg to stand on. What about the pro-Dara camp, how do they see things? Sara Robinson, who I generally find to be a thoughtful individual, responds as follows:

Dara Wilkerson left a job with insurance -- we're not clear about whether it was before or after she got pregnant -- because it was "unmanageable." Hemingway argues that this was basically candy-assed of her. It doesn't matter to him what the situation was -- but if she was already pregnant, it may very well matter to us. Because there are a lot of reasons that jobs end before pregnancies do. The need to get off your feet, or get extra rest. A doctor worried about pre-eclampsia, or premature labor. Bosses who won't cooperate with changing physical needs. There are a lot of ways a job at a country club could become genuinely "unmanageable," particularly in the back half of a pregnancy. And even if she wasn't pregnant, you can bet nobody leaves a job with decent insurance unless there's a damned good reason -- and most of the best reasons are not the kind of thing most of us would be willing to share with a nosy parker like Mark Hemingway.
What I find most enlightening about this response is that Sara finds it necessary to defend Dara's decision to leave her job. I want to put that aside for one moment, however, and respond to this particular part of her statement: "you can bet nobody leaves a job with decent insurance unless there's a damned good reason".

With all due respect to Sara, she's just wrong. People are dumb. People are shortsighted. People do things which seem right in the heat of the moment but turn out to be bad decisions in the long run. While I have no idea about the specifics of Dara's case (and neither, by her own admission, neither does Sara) it's easy to imagine someone in a similar situation quitting their job without good reason.

Back to Sara's response: Sara, by insisting that Dara must have had a good reason for leaving her job, legitimizes Mark's criticisms to a large degree. Dara's behavior was acceptable, but only because she had (by definition) a good reason for quitting. It follows from there that, if Dara didn't have a good reason for quitting her job then her behavior was irresponsible. When you look at it this way you find that the "pro" and "anti" camps are actually arguing over a fairly narrow distinction: the antis say "you've an obligation to keep your job regardless of circumstances" while the pros say "you've a duty to keep your job barring exigent circumstances". So, even though I just got through demonstrating that Mark's point of view is full of holes it looks like Sara is, to a large part, buying into it. Which means that her reasoning suffers from the same shortcomings.

There are better ways to look at this problem. An isolated individual is free to quit their job, regardless of circumstances, but should recognize that society's obligation to them is limited. The matter becomes more complicated, however, when that person's decisions will affect their (possibly unborn) dependents. In that case it seems to me that the individual has an obligation to ensure the best possible outcome for their dependents, even if it means enduring present discomfort. The alternative, permitting individuals to reduce their present discomfort at a future cost to the their dependents, appears to be in conflict with the whole notion of guardianship and dependency.

To be more concrete let's consider someone in Dara's situation. If this person has no dependents and was not/did not intend to become pregnant/father a child then I fully support eir right to quit eir job regardless of the consequences. Ey might end up getting screwed on healthcare in the long run, but as ey're the only one affected by eir decision its eir choice one way or the other. If ey have depdents, are pregnant/the father of a child, or intend to become pregnant/father a child, however, from a moral standpoint ey have no choice but to keep eir job. If ey were to do otherwise it would (most likely) jeopordize the long-term well-being of their dependents. I take it as a given (and will explain why at length, if people are interested) that the primary duty of guardianship is to maximize the long-term well-being of your dependents. As such the individual has no choice but to stick with the job.

Note that I reach a more-or-less identical conclusion to Mark, but I do so without recourse to ill-supported notions of group norms. Rather, I base my entire analysis on a guardian's obligations to eir dependents. This, I believe, makes it easier to both analyze the situation and defend my conclusion. As such I believe such an approach is preferable for dealing with these types of problems.


1 Its unfortunate that health insurance is usually tied to employment, but that's a discussion for a different day.

Monday, October 15, 2007

Life is Light

Further evidence that, while there's no such thing as luck, there's such a thing as fortuitous coincidence: Yesterday, while flying out to a job, I got the urge to work on that Leo/Graphviz script I wrote about earlier. I could have just as easily been working on something else on my laptop, or pulled out my copy of Cat's Cradle and left the laptop alone entirely.

It just so happens, however, that the fact that I was running Linux on a laptop and writing Python code in an unusual editor attracted the notice of one of my seatmates. Aforementioned individual turned out to work for a really cool company that I'd love to work for. We got to talking about Open Source and computer trends and all sorts of geeky things. At the end of the conversation he said I should send him a resume.

Getting a job with the cool company could be a very significant change in my life. All because I was dicking around with Python code. Kundera was right.

Converting a Leo Hierarchy to a Graphviz Digraph

Yesterday I found myself wanting to translate the relationships in a Leo outline into Graphviz digraph. Right now you're probably saying "Why would I want to do that?" (or, more likely, "Wow, what a dork..."), so I'll explain.

Suppose you're using the outlining feature of Leo to organize information about items that have a natural hierarchy. For example, I'm using such a scheme to organize my notes on the lineages of various martial arts families. Now what if you want to present this hierarchy visually? While Leo is a great outline editor its a lousy presentation tool, so you'll want to take the relationships within the Leo outline and translate them into something more suitable.

It turns out to be simple, almost trivial, to do this once you know the appropriate functions to call. In order for this Presented that others might find it useful:

@color
@language python
@ Create a Graphviz .dot file containing a digraph representing
@ the relationships in part of the Leo outline.
@c

import leoGlobals as g

# Headline of the root of the subtree to convert

root_name = "<ROOT HEADLINE>"

# Create edge between parent and child nodes, then repeat the
# process for each child node.
# parent: Position object for parent node
# accumulator: text string used to build up the result.

def CreateEdge(parent,accumulator):
    for p in parent.children_iter():
        accumulator += "\""+parent.headString()+"\" -> \""+p.headString()+"\"\n"
        accumulator = CreateEdge(p,accumulator)
    return accumulator

##### Execution begins here

g.es("Converting hierarchy to digraph...")

# Find the root node

root_to_convert = g.findReference(root_name,g.top().rootPosition())

# Graphviz preamble for a digraph. "accumulator" is used to
# accumulate the result of the conversion process.

accumulator = "digraph D {\n"

# Convert the subtree starting at the named root node

accumulator = CreateEdge(root_to_convert,accumulator)

# Graphviz postamble for a digraph

accumulator += "}"

# Find the output node

output_node = g.findReference("output",g.top().rootPosition())

# And write the result to it.

output_node.setBodyStringOrPane(accumulator)

g.es("Done")

To make this work do the following:

  1. Copy the script into a Leo node.
  2. Change root_name to match the headline of the root node of the subtree you want to convert.
  3. Create a node named "output" to hold the output graph.
  4. Highlight the node containing the script and hit ctrl-E.

Sunday, October 07, 2007

Shameless Scandinavian Design Blogging

I have to congratulate Ikea for successfully co-opting my life. I finally got sick and tired of looking at the clutter in my garage and went to see if they had anything that could remedy the situation. After working with their Gorm system I am now willing to embrace our new, Nordic overlords with open arms.

Gorm has three primary virtues; it's:

  1. cheap
  2. sturdy
  3. just like an Erector set
Its got a bunch of simple parts that you can put together just about however you want. The only downside is that they don't have a lot of special fixtures, but that's OK. The Erector-like nature of the system makes it easy to mod, and you don't worry about screwing up because each piece is so cheap to replace.

Two minor observations:

  • The overall stability of the units is much improved if you anchor them to the wall. I recommend using "U" brackets of some sort to attach them while leaving 3 or 4 inches of space between the wall and the unit. This lets you get behind them to remove bolts in case you want to move shelves around later.
  • Make sure you have a metric, ratcheting socket set. It'll make installation of the bolts holding in the shelves a lot easier.

Blog Information Profile for gg00