Sunday, January 31, 2010

Here We Go Again, or, XRUMER SEO Professionals Can Bite Me

What is it about SEO "optimization" companies that they think a good way to advertise their services is spam peoples' blogs? Drive-by spamming of Viagra links... that I can understand. It's effectively untraceable. But putting advertisements for your services with a link to your website? That's just foolish.

So... this time the culprit is some outfit called XRUMER SEO Professionals which sells software called XRUMER. They've not even bothering to pretend that they're legit:

Xrumer is the premier automated blackhat link-building tool. Through the use of this tool you will see a significant increase in the number of unique visitors to your site, as well as see your site jump in the search engine result pages. Xrumer has the capability to post to forums, blogs, guestbooks, wikis, and more!!

Look, people... don't spend your money on this. First off, it doesn't work; Google's gotten really good at picking up on these sort of shenanigans... trust me on this one. I work in the online ad biz and it's hard enough to get a decent page rank with legitimate content; spamming a bunch of places with backlinks to your site isn't going to do dick. Real people just don't click-through on that; all you're going to get is a bunch of robots.

Second... I mean, really, look at the purchase instructions:

  1. Give contact information to some dude you've never heard of.
  2. Contact aforementioned dodgy dude via Skype or ICQ.
  3. Ask em how to get em the money.

Botmaster.Net run out of Russia and has all the hallmarks of a fly-by-night outfit. You give these guys your credit card and you deserve what you get.

Thursday, January 21, 2010

Erlang Dabbling

General Observations

I decided to try teaching myself Erlang after reading an article on Slashdot to the effect that functional languages are the new hotness. The idea of a language that parallelizes easily (or, even better, automatically) is compelling; I've certainly found myself wanting to make things multi-thread more often as the number of cores in readily-available systems increases. When you've only one core there's no point in parallelization. With two cores you write your program to hog one, leaving the other available for system tasks. But when you've four or eight cores, as is the case now that dual/dual and dual/quad systems are standard, the ability to use multiple cores simultaneously becomes something more than just a party trick.

So far I'm pretty impressed; Erlang has a lot of features which make it stand out from the crowd. Things which have impressed me so far:

  • Automagic parallelism: Various features/idiosyncrasies of the language allow the Erlang Runtime System (ERTS) to automatically execute operations in parallel.
  • Robust error handling: Yeah, every language claims that it has robust error handling, but it actually seems to be true in Erlang's case. And you don't have to write a lot of extra code to take advantage of it.
  • Integrated support for distributed operation: The ERTS has built-in facilities for spawning processes on multiple nodes and passing messages between them.

All of the above make Erlang a prime candidate when you're writing long-running application code that needs to handle errors gracefully. This isn't surprising given that it was originally developed by Erikson for running telco switches and such. To that end the ERTS has a bunch of operationally useful features such as on-the-fly code replacement, the ability to start and stop processes remotely, and so on. Such things are either difficult or impossible with languages such as Perl or Java.

I would specifically not use Erlang as a replacement for a scripting language. It just isn't adapted to automating system administration tasks in the same way that Perl or bash are. While it's possible to get options off of the command line, execute system commands, parse text, etc. the syntax hasn't been tuned to make these things quick and easy. Erlang is also lacking some other niceties which, while not critical, would definitely be helpful. There's no support for opaque, user-defined types (much less objects or classes), which is a bit of a challenge if you've grown used to having such funtionality available to help structure your code. Nor does it have any sort of metaprogramming support1; if you need a dozen getter/setter pairs you gotta write them all by hand. None of these are deal-breakers by any means, but you should be aware that Erlang is fairly specialized.

The standard toolset is about what you'd expect in a modern programming language. Embedded documentation is available via edoc2, unit testing is available via eunit, there's a pretty good debugger, and so on. The one complaint I have so far is that the stock make package is trés primitive. I highly recommend using GNU Make instead if its available.

A Binary Buffer

So what have I actually been doing with Erlang? Glad you asked. I'm working on a parallel log-processor (of a sort), more details of which I hope to share as soon as I have something worthwhile. Until then why don't I give you a tour of a supporting module which I've already written. Take a look at buffer.erl, which implemented a FIFO buffer for binary data as a stand-alone process.

The first thing you're probably asking is why is such a thing even useful? Well, one of Erlang's idiosyncrasies is that it has "write-once" variables; you can't modify the value of a variable once it's been assigned. This is one of the reasons why the ERTS can automatically execute operations in parallel; the use of write-once variables greatly reduces the occurrence of synchronization issues which prevent parallelization in other languages. One of the downsides of this architecture, however, is that you can't modify data structures in place. Functions which need to change data structures in some fashion usually return modified copies of the original which have been composed in realtime. In most circumstances this isn't that big a deal, but it can make code more complicated/ugly and may force you to violate compartimentalization/information hiding.

One workaround for the above is to do all your copying and state tracking behind the scenes via a separate process. I got the idea from observing how Erlang handles file operations which, on casual observation, appear to violate the write-once rule because they don't ever return a modified file handle. However, if you dig a little you find out that a file handle in Erlang isn't some sort of compound data structure but rather a handle to another process (called a process ID, or PID, in Erlang parlance). The calling process communicates with the file-serving process by sending messages to the associated PID and never need concern itself with how file handling is implemented behind the scenes. I adopted this paradigm in writing the buffer module for just this reason.

Commentary on the source, by line number, follows for those of you who care:

  • 1 - 33: Embedded documentation for the module as a whole. See the edoc documentation for details.
  • 35: Declare the module. This creates the buffer namespace and probably does a bunch more behind the scenes.
  • 39: Including the eunit header enables unit testing functionality.
  • 43 - 47: The export declaration which functions are accessible outside of the lexical scope of the module. The number after each slash qualifies the function name with an arity; there may be multiple definitions of a function, each with a different arity.
  • 49 - 71: Additional error checking code which will be compiled if the value debug is set at compile time.
  • 74 - 83: The clear function empties the buffer. Here you see the first occurence of an Erlang-ism, "BufferPid ! clear", which means "Send a message consisting of the atom3 clear to the process specified by BufferPid".
  • 85 - 107: The definition for the dequeue function. There are a couple interesting things happening here. On line 101 a message is sent to the buffer process containing a tuple4 which will tell the buffer process to dequeue data and send it to the appropriate PID (self() returns the calling process' PID and is frequently used to provide a "return address" when communicating with other processes). This is followed by a receive clause on lines 102 - 107 which causes the function to either wait for one of two messages (presumably from the buffer process) or timeout after 1000 ms with an error.
  • 109 - 136: More function definitions. There's another interesting Erlang-ism on line 130, the <<>> operator, One of Erlang's minor strengths is that has a special syntax for composing/decomposing binary data. I've found this feature extremely useful for parsing binary files.
  • 138 - 145: The init function primes the main processing loop (implemented, appropriately enough, as a function called loop) with an empty binary string representing an empty buffer.
  • 147 - 164: The loop function is where all the action takes place. We enter the function at the top with the value Data, which represents the current contents of the buffer. The function then waits for a message generated by one of the buffer functions (enqueue, dequeue, etc.) and responds appropriately. Note that the last step for everything but the stop message is a tail recursive call; this is how event loops are implemented in Erlang.
  • 166 - 170: new creates the buffer process via a call to spawn_opt, returning the PID of the spawned process. The link option causes process linking, another cool Erlang feature which creates a bi-directional relationship between two processes for the purpose of error handling. If the process on one end of a link terminates the process on the other end is automatically sent a special signal to that effect. The buffer process doesn't trap the signal and so will automatically terminate when the calling process terminates.
  • 172 - 263: A bunch of unit tests. Including the eunit.hrl header file makes macros such as ?assert available and works some magic behind the scenes (via parse_transform) so that functions ending in _test() are understood to be unit tests.

The Virtue of Erlang

If I'm counting correctly buffer.erl, excluding the unit tests, consists of 81 lines of code. Stop and consider that in light of what the module actually does. It spawns a subprocess for managing the buffer, provides a message-based interface for communicating with it, and has fairly robust error handling to boot. That's pretty fricking efficient.

And that, I think, is the primary virtue of Erlang: It's a very high level language which insulates the programmer from a lot of unnecessary tedium5. I've found that, even when writing fairly complex code, I'm more likely to get it right the first time around. I attribute that to the fact that most operations are fairly abstract; you spend a lot of time doing things like pattern matching or recursing through lists. There's generally no need to worry about the gory details of data structures, pointers, IPC, etc.; the ERTS does that all for you. So, while I wouldn't recommend that people switch to Erlang wholesale, they should at least give it it's day in court.

1 There's Smerl, but its not part of the standard distribution and doesn't give the impression that it's actively being maintained.
2 Though I had to patch edoc_lib.erl to get it to work reliably on my Windows laptop. Why am I using a Windows laptop? 'Cause that's what happens to be available.
3 Atoms are a fundamental data type, equivalent to symbols in Ruby. They stand for themselves and nothing else.
4 Another fundamental data type used to encapsulate an ordered, fixed number of items.
5 Though that can be a double-edged sword at times. If you do need to get under the hood for some reason it can be difficult-to-impossible to do so.

Tuesday, January 19, 2010

Online Sexual Harassment and Strained Analogies

Via Pandagon I came across a fairly interesting discussion about online sexual harassment at The Adventures of Tobasco da Gama. To be frank, I'm generally skeptical about online sexual harassment (and related issues); the "online" context is sufficiently different from the real world that you can't just import definitions unmodified. But I also think it's important to be able to justify that stance and give people their day in court, so I'd like to look at what's being said and see if it stands up to scrutiny.

Tobasco's (if I may presume the familiarity) argument seems best encapsulated in the following passage:

The incident didn’t involve two male players, it involved a male player harassing a female player. We don’t have a full chat log, but there’s no reason to think that the female player did anything to provoke the harassment other than committing the oh-so-grave crime of being a woman on the internet. In this context, the harassers behaviour is clearly equivalent to real-life catcalling, in that the whole point is to make the target feel vulnerable and powerless. And such harassment must also be understood as an attack on an entire group of people, not just the specific target, since the target is singled out solely as a member of the group under attack, rather than for any individual characteristics.

My response is that the harasser's behavior is not equivalent to cat-calling due to the fact that the incident takes place online.

Cat-calling, in and of itself, is obnoxious regardless of the context in which it takes place. It's unwanted, and usually insulting/degrading, attention that serves no constructive purpose. The first place where Tabasco's analogy breaks down, however, is that in the real world you can't /ignore1 people; you have to listen to what they are saying regardless of whether you want to or not. The fact that the target of the harassment, and any observers, can effectively silence the harasser at will without disrupting communication with anyone else makes online occurrences of this sort of situation substantively different from real world occurrences.

This is why I think Amanda's analysis, quoted by Tabasco, isn't really applicable in this case. Online the target has the ability to muzzle the offender at will with little or not cost to their interaction with other people. Moreover, the reaction of the target of the abuse isn't scripted in the online world in the same way that it is in real life. The option of totally ignoring the perpetrator, and thus robbing them of most of their leverage, is much more feasible online.

But that's not even the biggest difference in my mind. In the real world cat-calling is pernicious because, apart from what is actually said, it carries an implicit threat of escalation. The perpetrator conveys the message to the target that "yes, right now I'm limiting myself to verbal harassment, but later on I might decide to come over and grope you, or follow you back to your apartment and rape you". Cat-calling, when it takes place online, doesn't have the implied threat of future violence to back it up.

And that, I think, is the key differentiator between the real world and the online one, at least when it comes to harassment. What makes various types of harassment effective in the real world is that they are backed up by credible, usually implicit threats of retribution/escalation if the target doesn't change eir behavior to conform with the requirements of the perpetrator. In the online world, by contrast, the perpetrator typically cannot escalate beyond name calling2; they don't have a credible threat of force to accompany their harassment.

They're not just "less scary", as Amanda says in the Pandagon post; I'd argue that they're not scary at all. They've no power and, once muted, can only make their presence known visually (if at all). This effectively reduces them to, at most, a nuisance.

1 "/ignore" is the World-of-Warcraft mechanism for filtering out all messages from a particular player; I presume that a similar mechanism exists in the context of Playstation Home.
2 Disregarding, for this discussion, threats/harassment which leak over into the real world in some significant fashion. There was no hint of that sort of thing in Tobasco's post.

Monday, January 18, 2010

Obligatory Castigation of Ed Schultz

I had no idea who Ed Schultz even was until I read Ed Brayton's post on him this morning. But it seems that, since Mr. Schultz is a liberal who has gone and done something stupid, it is now mandatory for all progressives to decry his actions. Alright, fine... I decry, rebuke, reject, eschew, and otherwise condemn his behavior.

Though honestly, the entire thing is silly; you just shouldn't expect loud, public protestations of dismay when some D-list celebrity says something stupid.

Saturday, January 16, 2010

Empyrean Dispatches

Occasionally various aetheric messengers convey, by means of vibration of the Intertubes, that modestly important people are reading this humble blog. I suppose that's heartening, but what I'd really like is for these demi-gods to make their presence known and even, perhaps, deign to engage in conversation.

Thursday, January 14, 2010

What Should We Fix and What Should We Leave Alone?

There's a though-provoking article over at Crooked Timber about the potential for mitigating the effects of Down's Syndrome and the accompanying discourse. Go, read it, come back.

Done? Good. So, Bérubé says

So yes, some things should be cured, and their cure would be an unambiguous species-wide good. Tay-Sachs disease, for example. Alzheimer’s. Perhaps Parkinson’s and Huntington’s, too. But Down syndrome and deafness aren’t anything like these.

It seems like his "cure/mitigate" and "don't cure/mitigate" buckets are pretty arbitrary. For example, both Down's syndrome and Alzheimer's deprive a person of their mental faculties and thus their autonomy1. Deafness, on the other hand, leaves cognition intact; as Bérubé himself points out there are lots of situations where deafness is either irrelevant or an inconvenience. Frankly, and this is going to piss off a lot of people I'm sure, deafness is a lot more like cleft-palate than Down's. So, if we categorize diseases/syndrome/<insert your noun here> on the basis of the effect they have to the person, and regardless of whether or not we decide its appropriate to "fix" them, Alzheimer's and Down's should go in the same bucket.

What I'm getting at here is that it would help if Mr. Bérubé were more explicit in describing how he groups conditions together. It's pretty clear that he has some taxonomic principles in mind which guide not only which conditions are similar but also which, on a normative basis, should be remediated. His principles, however, are far from self-evident.

1 Recognizing that there's also a distinction between the two: Down's syndrome prevents the faculties from being developed whereas Alzheimer's degrades existing faculties. I don't see that distinction as being particularly relevant to the fix/don't fix debate, but I'm certainly willing to argue the point.

Yeah, Ken Ham's An Idiot, But...

PZ rightly takes Ken Ham to task for being a bleeding idiot. But for all of Ken's hemorrhaging cretinism there's a kernel of truth to what he says. One of atheism's weak points is the lack of strong justification for the continuation of the species.

PZ has the following to say on the subject:

Yes, it is a meaningless universe; the universe doesn't care about us, doesn't love us, and is mindless and indifferent. That's simple reality. What we human beings do is wrest meaning for ourselves from a pitiless, uncaring background, and I think that's wonderful, grand and glorious — it's the process of finding purpose that is our accomplishment, not the imposition of an inhuman goal by a cosmic tyrant.

Which is a noble enough sentiment, and appears to me to answer "Why bother?" with the very pragmatic "Well, we're here, might as well make the best of it.". But there are two items, one minor and one major, that I'd like to take up in response.

The minor item is PZ's use of the phrase "finding purpose", which I feel is not really accurate. "Finding" implies that the purpose already exists; since atheists posit no pre-existing purpose it's more appropriate to substitute "creating" for "finding". I see this as more than mere semantic nitpickery; the phrase "creating purpose" exposes the heart of the process in unambiguous language. Essentially we're all finding something (arbitrarily) worthwhile to do while we're waiting to die.

That was the minor point, now on to the major one. Those of us who are already here might as well try to be comfortable, but if life is essentially purposeless what argument is there for having children? If there's no purpose in life then (as I've pointed out before) the continuation of the human race is neither a logical nor a moral necessity. It seems to follow from there that people choose to have children for one of three reasons:

  1. They believe that life is an absolute (as opposed to a contingent) good and thus it is rational to have children.
  2. They do it out of self-interest.
  3. They do it out of altruism e.g. for the good of someone else/the community.

I'm pretty sure that the above three motivations are comprehensive; all the examples that I can think of appear to reduce down to one of them.

As far as item 1 goes I feel that I'm in safe territory in saying that life is a contingent, rather than arbitrary, good. There are simply far too many examples in the history of humanity of people living short, miserable lives. The long, fruitful, worthwhile life is something that we all strive for but not everyone is guaranteed. The alternative is to argue that the most miserable existence is preferable to no life at all. Conceptually that's a hard assertion to wrestle with; existence and non-existence may very well be non-commensurable. But to the extent that it is answerable my gut says that a life of misery and agony is worse than nothing at all.

W.r.t. items 2 and 3, I assert that such beliefs are simply immoral1 as they make the (as yet nonexistent) person into a tool in the service of others. One cannot be reasonably sure that the child (or, rather, the person they would grow up to be) would consent to such an arrangement, therefore a parent cannot consent to it either.

So what about the case where life is acknowledged as a contingent good but is judged, at least in select circumstances, to be worthwhile on the balance? In that case I'd argue that you cannot wrong a person who doesn't exist; no one can assert the claim that they deserve to be born. Thus the safe (and therefore rationally preferred) choice from a moral standpoint is to decline to procreate, since the imposition of life on another person cannot be universally defended.

1 Even bringing up morality in the context of atheism leads to lots of problems. See here, here, here, and here for various bits that I've written on this issue in the past.

Tuesday, January 12, 2010

Sarah Palin and Disability Advocacy

Jill has an interesting post up at Feministe regarding Sarah Palin's support for special needs children. I agree with her that it'll be interesting to see if Palin ever says anything substantive on this issue. In particular I'd like to know how she can square advocacy for the needs of the disabled with her general attitude towards government intervention. Specifically, public programs to support such children and their parents are... well... public support, which sounds an awful lot like Socialism to me.

While I'm at it I'd also like to respond to the following:

I do find it troubling, in the aggregate, that so many people believe that having a child with Down syndrome is so impossible, or so undesireable, that 90% of those pregnancies are terminated.

I'm not convinced that the social hardship of raising a child with Down's syndrome is the primary motivating factor behind the trend of aborting fetuses with the condition. Without commenting on the propriety (or lack thereof) of such a belief it's plausible to me that people see giving birth to Down's Syndrome children as something which should be avoided for its own sake.

Monday, January 11, 2010

Bose QuietComfort 15 Headphones

I recently found out that I've lost the upper range of my hearing (lame, but I'll survive) which I attribute, in part, to the fact that I've ridden the bus from Tacoma to Seattle and back everyday for a couple of years. The express busses are pretty noisy to start with and, on top of that, then I end up having to crank my iPod up to nearly full volume in order to hear my music; in retrospect it's easy to see how that might be doing a number on my hearing. So, in order to protect what's left of my hearing, I went out this weekend and bought a set of Boise QuietComfort 15 headphones after reading a review on CNet about noise-cancelling headphones.

Anyhow, I love these things. Right now I'm on the bus listening to Aphex Twin's Selected Ambient Works 85 - 92, which was generally difficult to do in the past because it's a fairly quiet album. But I've got the volume set to somewhat under 50% and can easily appreciate all the subtleties in the music. Fricking awesome... just as I had no idea how much I appreciated my iPod until after I had to go without it for awhile I now expect that having to ride the bus without my headphones is going to make me cranky.

Friday, January 08, 2010

A Failed Rescue

Having recently finished A Theory of Justice I've turned my attention, on the recommendation of the good folks over at Crooked Timber, to Rescuing Justice & Equality by G. A. Cohen. So far I can't say that I'm impressed.

One of the things that really appeals to be about Rawls is the clarity of his argument. I may find fault with his premises and/or conclusions but have no cause to complain about his method; he states his premises clearly and builds his argument from them in an orderly and (relatively) easy-to-follow fashion. The same can not be said for Mr. Cohen; rather than lay out a direct argument upfront he seems intent on coming at questions obliquely with the intent of shanking them when they're not looking. Consider the following passage from Section 2 of Chapter 1:

I am going to comment negatively on the incentives argument, but my criticism of it will take a particular form. For I shall focus not, directly, on the argument as such, but on the character of certain utterances of it. Accordingly, I shall not raise questions about the validity of the argument, or about the truth of its premises, save insofar as they arise (and they do) within the special focus just described1. (p. 35)

He's setting himself up to try disprove the incentives argument through some clever bit of philosophic judo. For example, he applies the following line of reasoning in his discussion of the justice (or lack thereof) of Nigel Lawson's decision to reduce the top marginal tax rate in Britain from 60% to 40%2:

  1. Good public policies must have a comprehensive justification i.e. any policy P claiming to induce a particular behavior in a subset S of the population must also demonstrate that the response of S to policy P is also justified.
  2. An argument purporting to provide comprehensive justification of policy P must pass the interpersonal test; it must justify the policy when uttered by any member of society to any other member of society.
  3. "[T]he incentives argument does not serve as justification of inequality on the lips of the talented rich, because they cannot answer a demand for justification that naturally arises when they present the argument, namely, why would you work less hard if income tax were put back up to 60 percent?"
  4. QED

There are a host of problems with the above, not the least of which is Cohen's assertion that the "talented rich" can't proffer a reasonable explaination for their behavior. Basic (I'm talking highschool-level) microeconomics provides a perfectly rational justification for the cited behavior that centers on the diminishing marginal utility of free time3. It's unlikely that the average individual would be able to rattle off this justification at a moment's notice (though given time to reflect ey may very well come up with something similar) but it seems foolish to treat their inability to spout microeconomic theory as grounds for invalidating the argument itself. The closest he comes to tackling this issue is on Pp. 60 - 62 where he has at set of talented rich strawmen justify themselves to the badly off by saying that it just wouldn't be "worth their while" to work more under such conditions. He goes so far as to conceed that such reasoning is convincing when the "power to produce is conceived as fully private property".

As opposed to what, partially public property? On what grounds does the public lay claim to a portion of the talented rich's labor, and what say did the talented rich have in the bargain? I suppose I should stop hounding him about such trifling details... no, on second thought, I'm not. C'mon man, don't hide your light under a bushel. Be proud, shout it from the rooftops: "I support forced labor!". I wanna see that in letters 5 feet high and luminous.

In all seriousness, though, if Cohen takes exception to the notion that one's labor is one's own then it seems like quibbling to talk about the incentives argument. If he departs from Rawls on such a fundamental principle its no wonder that he has an issue with Rawls' conception of justice and equality. Dude should be justifying the appropriation of labor, but fails to even provide a cite to somewhere that does.

Another issue is his persistent use of the word "rich" in this context, which makes me think that he's conflating two related, but distinct, concepts, namely "income" and "wealth". The response of the rich to an income tax, where "rich" is understood to be a synonym for "wealthy", is indeterminate; the rich may have a large income stream or no income at all and, as such, their responses to such a tax will likely vary. Far from being mere nitpicking this distinction has moral ramifications as well. Person A and Person B may have the same income over a period of time but Person A might choose to spend it while Person B chooses to save it. At some point Person B will be "rich" in comparison with Person A but, if you accept that people have free will, is perfectly justified in telling Person A to shove it when ey comes looking for a slice of Person B's pie.

But the biggest problem is that his interpersonal test appears, by definition, to lack a comprehensive justification; he fails to impose the constraint that the response of the listener to the speaker be, in itself, justified. He doesn't define with any precision what it means for an argument to "serve as a justification" when uttered by one party to the other. Given the various statements that he puts in the mouth of his rich strawmen, and the causes he finds to reject them, the ability for an utterance to serve as a justification is intimately tied up with both the speaker's and the listener's assessment of the morality thereof. Basically, does the justification make the speaker appear to be a good and moral person?

Honestly, part of the problem is his patronizing attitude towards the badly off. In their dialogues with the talented rich they are treated as a monolithic entity that responds with one voice and one opinion. Cohen doesn't stop to consider that two members of this class might come to different conclusions regarding any particular justification. Whose opinion are we supposed to consider authoritative in such a situation? Similarly, members of this class have different capacities for reason, different emotional reactions to wealth disparities, and so on. I'll go so far as to posit that the interpersonal test simply cannot be applied meaningfully; assessing how one group of people (or a single representative thereof) might respond to a particular statement is simply an excercise in projection.

Anywho... that's what I've got for Mr. Cohen so far. We'll see if he improves through the remainder of the work.

1 Under the influence of several glasses of wine I characterized this to my wife as "I'm going to come, but not in your mouth as is the typical custom. Rather, I'm going to come on your tits, or maybe, perhaps, your glasses".
2 Pp. 41 - 42
3 Basically, the more you have of anything the less utility an additional unit of that thing has to you; the 24th free hour in a day is less valuable to you that the 23rd free hour. Conversely, as your stock of daily free time shrinks that time which remains has increasing utility; if you only have 4 free hours a day you'll value each hour more than if you have 24 free hours a day. This utility function defines your personal supply curve by which you'll trade free time for a wage. At the same time there is a corresponding demand curve; people will trade money (in the form of a wage) for a claim to some number of hours of your free time. The wage you make and the number of hours you work is determined by the intersection of these two curves. It follows from there at if you make less money per hour by virtue of an increased income tax you'll work less; the utility of some portion of time you would have previously works exceeds the utility achieved by trading it for your new wage and thus it is rational for you to work less.

An Observation

I'm a member of a number of groups on LinkedIn, some tech-oriented and some biz-oriented, and it's quite interesting to observe the qualitative differences in their content, especially with respect to jobs. On the tech side most of the postings under the "Job Discussions" heading are actual, bona-fide jobs i.e. "I need a SQL dev for a 6-month contract". The biz groups, on the other hand, seem to have been going downhill rapidly. For example, I'm a member of the "MBA Highway" group, which used to have a lot of job postings. Now, however, consider some of the gems from a recent digest:

  • Job Search Behavior
  • Resume Zapper Service
  • The Job Search Principles – Rule # 3

Granted, at this point there are still plenty of actual jobs, but it looks like the lists are gradually being taken over by less-than-useful material. Why this should be the case for the biz side but not the tech side? I dunno, you tell me; maybe there are just more desperate biz types out there these days?

Friday, January 01, 2010

A Final Note On Rawls

One final item which has been nagging at me w.r.t. A Theory of Justice is Rawls' take on human psychology. His citizens strike me as fragile and undeveloped creatures; they crave the approval of their peers and seem unable to progress past a certain level of moral development. These inherent limitations seem to wag his theory of morality fairly heavily and he makes a lot of statements in support thereof which don't stand up to close scrutiny.

Let's start with self-respect. It's so critical, in Rawls' opinion, that he marks it the most important primary good1 (Pp. 440 - 446). But self-respect is a product of critical reflection; it's an internal mental state. That makes it significantly different than the other primary goods which Rawls has identified. A government can directly ensure various liberties and a minimum standard of living, but it can't reach into peoples' heads and make them like themselves. I'd argue that Rawls has made a category error in this regard; self-respect it not in government's power to give.

Moreover, he seems to treat self-respect as purely exogenous i.e. we gain self-respect only as a result of the positive regard of others. Specifically:

For while it is true that unless our endeavors are appreciated by our associates it is impossible for us to maintain the conviction that they are worthwhile, it is also true that others tend to value them only if what we do elicits their admiration or pleasure. (p. 441)

There seem to me to be several interpretations of this statement. One is that Rawls may simply have overlooked the existence of solitary pleasures/activities, but this would be a big omission on his part. It seems obvious to me, for example, that I can garden, take pleasure therein, and regard it as a worthwhile activity without requiring anybody's approbation. A more plausible explanation is that Rawls means exactly what he says and believes that self-respect can only be obtained throught the admiration of our peers. This would explain his insistence that its the government's job to ensure that everyone has a sphere of association in which they can be valued and admired. Such a contention arises naturally from Rawls' premises but strikes me as faintly ridiculous. I neither need nor want the government finding friends for me nor doubt that I'm alone in this regard. This suggests to me that his charaterization of self-respect is flawed to some degree.

There's a single thread that wends its way through Rawls' discussions of self-respect, moral development, what he terms the "natural attitudes", and related phenomena. Rawls' citizens are unable to transcend/control certain tendencies which are innate to humanity, though this seems to run counter to various other concepts in which Rawls places great stock.

Rawls' three-stage theory of moral development2 centers on the ability of the individual to form social attachments ("fellow feeling" in his terminology) which gradually increase in scope until they encompass the entire society. But it seems to me that fellow feeling, since it has a major physiological component3, is to a large degree an irrational phenomena. This, in turn, would seem to run afoul of Rawls' characterization of the Kantian interpretation of morality e.g. the pinnacle of moral development is the ability to act as a "free and equal rational being"4.

Consider also his example regarding persons A, B, C5; it's instructive to ask what happens when a fourth person D, whom A does not love, is introduced into the mix. How does A's reaction differ if, say, ey finds out that C plans to treat D unjustly? Presumably Rawls believes that ey will behave in a different, less noble manner, else there'd be no reason to discuss the effects of love in the first place. But such behavior is just a form of egosim; A treats B differently due to A's emotional attachment to B. Justice as fairness seems to require that A treat both B and D equally (in this case at least) without regard for personal bonds of affection.

Essentially it looks like Rawls' citizens' behavior is forever conditioned on emotional bonds; they never get to the point where their behavior is guided purely by abstract moral reasoning (something akin to Kohlberg levels 5/6). Indeed, in discussing the natural attitudes Rawls seems to explicitly dismiss this possibility despite the fact that such considerations may be totally irrational, saying that to eliminate such emotional considerations would do unacceptable violence to the fundamental notion of what it means to be human6.

Perhaps, but I believe this to be a case where Rawls is unwilling to follow his own reasoning to its logical conclusion. As I noted in my previous post Rawls, despite various statements to the contrary, seems to be vested in a particular vision of a just society where everyone has "meaningful work" to do and rubs along with eir fellows in mutual bonhomie. Individuals guided purely by abstract reasoning, though they might be the epitomy of a free and equal rational beings, would be unlikely to form the type of society which Rawls prefers. I tend to agree with Rawls that they'd barely be recognizeable as human, but I don't know that's necessarily a bad thing.

1 I find his reasoning in this regard to be suspect. The other primary goods which he calls out (various liberties and material resources) all enable the pursuit of a particular life plan. Self-respect as described by Rawls doesn't serve an enabling function but rather provides people with their raison d'être; they pursue life plans so that they might gain self-respect. It looks to be Rawls' answer to the question "Why bother?" which he lumps in with other primary goods for lack of a better place to put it.
2 Pp. 490 - 491
4 P. 252
5 P. 487. Briefly, for those playing along at home who don't have a copy: A loves B and thus experiences anger/grief when B comes to harm (either independently or through the actions of C), guilt when having done an injustice to B, joy at being with B, and so on.
6 Pp. 488 - 489

Blog Information Profile for gg00