Saturday, January 31, 2009

Changing Sex on a Birth Certificate

Interesting post at Feministe regarding a couple of transgender women who are trying to get their Illinois birth certificates changed. It's fairly absurd that Illinois makes such changes contingent on particular surgical regimen. At the same time there are several arguments making the change at all.

The other documents referenced in the post (passport, drivers' licenses, social security cards) are intended to reflect reality as it currently exists, but the birth certificate is a historical document. Contrary to the assertion that Kirk makes in the article the birth certificate doesn't say that she is male. Rather, it says that she was of male sex (not gender) the time of birth; it really doesn't seem possible to argue to the contrary.

What's more interesting is why the plaintiffs see the need to change their birth certificates in the first place? Ms. Kirk is quoted as follows

"It could create significant problems for me in the future," Kirk said Tuesday at a news conference. "A document that says I am male puts me at risk of embarrassment, harassment and possibly even physical violence."
It's hard to evaluate those claims; how would you go about determining whether she faces a substantially increased risk of harassment or physical violence on account of her birth certificate? Even if we take that as a given does it justify altering the historical record?

Additionally I think there's a good, progressive case to be made that these women shouldn't be trying to change their birth certificates. It seems similar, in many respects, to arguments in favor of women going public with their abortion experiences. If women can increase acceptance of abortion by sharing publicly sharing their stories then cannot these women further the cause of transgender rights in a similar fashion? The desire to change their birth certificates runs contrary to the notion that gender is a mutable continuum. I'd even go so far as to say that it plays into the hands of the powers-that-be; if I were the Ministry of Truth what better way to deny the existence of transgender individuals than to go all the way back to the beginning and change their birth certificates?

Ultimately the truth is that they were born male and are now female. To deny that is, in a non-trivial way, to deny the reality of their own lives.

Wednesday, January 21, 2009

On Weeping And Not Weeping

I've been struck by the number of people, both in the blogosphere and in my circle of acquaintences, who have reported being moved to tears by Obama's election and subsequent inauguration. More surprising still is that this extends even to jaded realists, individuals who will never be accused of being overly emotional. I don't get it.

As best as I can tell people find Obama's election especially meaningful because he is a) Black and b) Very Much Better Than Bush. It is certainly laudable that America has elected a Black president, but that doesn't mean that we've suddenly become a colorblind society (which would be worth weeping over). Similarly, while I am relieved to have someone sane in office, being Better Than Bush isn't terribly impressive. Bush was such a malign force that you can do a better job simply by doing nothing at all. So neither his Blackness nor his not-Bush-ness are sufficient to explain the emotional response that he is evoking.

What is it then that people are seeing in the election of Barack Obama? Did they believe, in some deep corner of their being, that the malice and malfeasance of the Bush Administration would continue unchecked in perpetuity? If that were indeed the case then Obama's victory might genuinely be cause for rejoicing. But the fact remains that Bush's reign had to come to an end eventually; Obama isn't a savior, he's just the guy who won the most votes in a contest we all knew was coming.

At some level it seems like people think Obama is going to change the world, perhaps usher in a new era of liberty and justice for all. Forgive me for my skepticism, but I'm not buying that for one minute. He picked Rahm Emmanuel as his Chief of Staff, a man who appears to be best known for cracking heads to get things done, and invited Rev. Douchenozzle to give the invocation at his inauguration. And then there's the constant talking of building bridges and post-partisanship and whatnot. Obama gives every sign of being a pragmatist; a principled pragmatist, perhaps, but a pragmatist nonetheless. Which means that he's going to make political sausage. It might be kinder, gentler sausage, but nothing can hide the fact that its still sausage. In short, why weep when you know full well that Obama won't stand on principle1?

And that, I think, is why I'm not driven to tears. Given a choice between Republicans and Democrats I'll choose the latter, but only because they're the lesser of two evils. The Obama administration will be better, hopefully far better, than the one which came before, but I see no reason at this point to think it will be especially virtuous. It will likely expand the role of government, will push ill-thought-out policies of the Democratic variety, and generally continue to piss me off in various and sundry ways. So no, I will not weep simply because I no longer feel a boot on my neck; it's going to take more than that.


1 Not to pick on Ed specifically; he just happens to be a convenient exemplar.

Thursday, January 15, 2009

Michael Stokes Paulsen: Dissembling or Just Willfully Ignorant?

One can be forgiven if, in discussing Constitutional issues, ey gloss over or misinterpret some fine point of the law. But there's a special place in Hell for people who aren't even trying to get it right. That being the case they've probably set aside a nice lake of fire for Micahel Paulsen on the basis of this morning's article in this WSJ.

Mr. Paulsen is all aflutter that Al Franken came out slightly ahead in the Minnesota recount, so he constructs this elaborate argument that the recount is unconstitutional based on the precedent of Bush v. Gore, calling it "the law of the land". The only problem is that Bush v. Gore isn't binding; one of the most notable aspects of the case is that the Supreme Court went out of its way to say that it set no precedent:

The recount process, in its features here described, is inconsistent with the minimum procedures necessary to protect the fundamental right of each voter in the special instance of a statewide recount under the authority of a single state judicial officer. Our consideration is limited to the present circumstances, for the problem of equal protection in election processes generally presents many complexities.
Look... it's right there in black and white. Not a whole lot of ambiguity to that statement; its not really something you can miss if you're making an effort to get things right.

Which means that Paulsen, being a professor of law and all that, deserves whatever warm spot is reserved for him. Either he cited Bush v. Gore without bothering to try to understand the holding in the case or he knows the scope of the holding and is hoping that no one will call his bluff. And, while I'm at it, the WSJ gets a smack across the face with a flounder for publishing the piece to begin with.

There's also a tremendous amount of point-missing going on regarding this issue, though and the WSJ are by no means the only ones guilty of doing so. The laser-like focus on the recount and the constitutional issues and both parties' respective hordes of evil flying monkeys completely ignores the fact that, no matter how you count, the margin of victory is so small as to amount to stastistical white noise. Any notion that Al Franken (or Norm Coleman) represents the will of the People of Minnesota is just ludicrous; either gentleman, at best, represents ever-so-slightly-more-than-half of the People of Minnesota. So, no matter who wins the recount, ever-so-slightly-less-than-half of the People of Minnesota are going to get screwed.

Overly technical complaints about how some people are possibly being disenfranchised because the canvassing board made their ballots sit at the back of the bus are just so much legal/political circus. The real problem is that we a) have a first-past-the-post system that isn't actually representative and b) can't make up our minds who we like more, Norm Coleman and Al Franken.

Sunday, January 11, 2009

The Format of a Flow-Capture Flow File

Awhile ago I had cause to try writing a replacement for FlowScan, a tool that we use at my company to monitor traffic within our datacenters. FlowScan, while very useful, is a little long in the tooth. The problem we were running into is that the application is single-threaded; it would peg one CPU on our processing system but leave the others basically idle. That's not a good place to be in when you're trying to process traffic in real time.

The first big problem I ran into in this experiment was figuring out the format of the files which FlowScan uses as input. FlowScan consumes the files generated by flow-capture, part of the flow-tools package of NetFlow processing utilities. There's not a whole lot in the way of readily-accessible documentation on flow-tools' native file format; the best answer I'd found to date is this post which essentially says "read ftlib.h". Absent any better option I read ftlib.h; the results are presented here that others might benefit.

This analysis is based on flow-tools v 0.66; your mileage may vary with later versions. The bulk of the code for manipulating flow files is housed in two files in the source tree, ./lib/ftlib.h and ./lib/ftio.c. The files created by flow-capture have two parts, a header at the beginning of the file and then a stream of records representing the actual flows. Unsuprisingly, reading a flow file is a two-step process: you first call ftio_init (ftio.c:66) to parses the header information and set up an appropriate ftio structure, then you call ftio_read (ftio.c:851) to read the actual flow records.

So let's start with the header. If you poke around ftio_init you see that all the actual header processing is done via a call to ftiheader_read (ftio.c:2300). The first thing that ftiheader_read does is read an ftheader_gen (ftlib.h:465) called "head_gen" from the beginning of the file. This behavior is invariant; each flow file starts with 4 bytes corresponding to the following structure:

struct ftheader_gen {
  u_int8  magic1;                 /* 0xCF */
  u_int8  magic2;                 /* 0x10 (cisco flow) */
  u_int8  byte_order;             /* 1 for little endian (VAX) */
                                  /* 2 for big endian (Motorolla) */
  u_int8  s_version;              /* flow stream format version 1 or 3 */
};
No magic here. The first two bytes are always the same; they're magic numbers that can be used to verify that you're actually processing a flow file. The next byte tells you the "endian-ness" of the rest of the data in the flow file and the final byte tells you the stream format. As far as I've been able to determine v 0.66 of flow-tools produces v3 streams by default, so everything that follows assumes a v3 stream.

After the first four bytes (which I think of as the "static header") there's a u_int32 referred to as "head_off_d" in the source code. head_off_d contains the offset from the beginning of the file where the flow record information starts. This information can be used to compute the size of the v3 dynamic header (ftio.c:2387):

/* v3 dynamic header size */
len_read = head_off_d - sizeof head_gen - sizeof head_off_d;
len_buf = len_read + sizeof head_gen + sizeof head_off_d;
What this says is that the v3 dynamic header consists of (head_off_d - sizeof head_gen - sizeof head_off_d) bytes starting immediately after head_off_d.

Parsing the dynamic header is pretty straightforward; its essentially a list of fttlv (ftlib.h:395):

struct fttlv {
  u_int16 t, l;         /* type, length */
  char *v;              /* value */
};
Each fttlv consists of a 2-byte integer indicating the type of the record (see ftlib.h:217 for constant definitions), a 2-byte integer indicating the overall length of the record, and then a variable number of bytes containing the actual record data. See ftio.c:2493 for the details of decoding and intepreting each type of record.

The dynamic header is aligned on a 4-byte boundary, so there may be up to 3 bytes of null padding at the end of the dynamic header after all the fttlv structures have been processed.

That concludes the header portion of a flow file. Following the header is the majority of the file, a list of records containing the actual flow data. Parsing these is complicated by a couple of factors:

  • The data may be compressed via zlib.
  • The record size varies based on the type of device which originally exported the flow.

The presence/absence of compression can be determined by consulting the parsed dynamic header. Specifically, bit FT_HEADER_FLAG_COMPRESS of the fttlv of type FT_TLV_HEADER_FLAGS will be set if the flow records are compressed. If so you will need to zlib inflat all of the data following the dynamic header.

The size of a record is calculated via ftio_rec_size (ftio.c:2229). Looking at this function you see that this calculation is based on 4 variables:

  • Stream version (s_version): As noted above I'm assuming v3 streams.
  • Data(?) version (d_version): This is set during parsing of the FT_TLV_EX_VER record in the dynamic header. This value corresponds to the NetFlow version exported by the original exporting device (usually a router).
  • Aggregation method (agg_method): This is set during parsing of the FT_TLV_AGG_METHOD record in the dynamic header.
  • Aggregation version (agg_version): This is set during parsing of the FT_TLV_AGG_VERSION record in the dynamic header. In a well-formed flow file it will always be 2.
You only have to worry about aggregation method if you're dealing with NetFlow v8. If (d_version != 8) then the size of the record is sizeof fts3rec_v<d_version>. If (d_version == 8) then the size of the record is sizeof fts3rec_v8_<agg_method>. Note that these structures also map directly to the underlying sequence of bytes in the file.

Once you've determined the compression status and the format you're dealing with its simply a matter of slurping successive records out of the file.

Thursday, January 08, 2009

So Much For Free Will, Newborn Edition

At this point I feel that, for the most part, I was adequately prepared for the reality of taking care of a newborn. I expected that they cry, they throw up, cause sleep deprivation, etc. My daughter has been no exception in this regard, but she hasn't presented any real unanticipated challenges either.

Prior to her being born I had, of course, been peppered with various testimonials on how having a baby "changes everything", how its "an experience unlike any other", etc. etc. blah blah blah. At the time I considered these to be either truisms or maudlin sentiment. Of course having a baby (or, more actually, conceiving one and then deciding to carry it to term) "changes everything"; you all of the sudden have a virtually unlimited responsibility for another human being. After the fact I (still) think that people are, at least in part, obeying expected social form. At least one mother I met at a party I recently attended was openly aghast that, in response to the inevitable "How are you doing/holding up/etc?" question", I said something along the lines of "She eats, she poops, she crys... about what I expected".

Anyway... what I wasn't prepared for on any level was the very obvious mental shifts that accompanied her birth. It is true that having a child changes your perspective, but its not because your eyes have suddenly been opened to the ineffable beauty of the parent-child relationship or anything of that nature. Rather, and this is something I observed quite clearly at the time, the newborn is accompanied by a huge, euphoric effect. I could quite literally get high just by holding my daughter.

It seems almost inevitable that there'd have to be some degree of that just to ensure the propagation of the species. Objectively a newborn is a noisy, needy little creature that leaks from every orifice; on an intellectual there's very little that's redeaming about them. So it makes sense that they bypass the intellect entirely with their freaky biochemical kung-fu; babies which fail to do so probably show a decreased survival rate relative to those that do.

The downside about this though, and this is what makes me trepidatious about my own mental well-being, is that the effects of the "baby high" seem to be far broader in scope than is really necessary. There are lots of things that I was concerned about prior to the birth of my daughter but which don't bother me anymore. Intellectually I understand that nothing has changed but I can't muster the accompanying motivation/emotional response.

I find this a little bit distressing. Except that's not accurate. As I sit here and write this I recognize that I should be alarmed, but I'm not. As I said before this isn't the result of some grand re-prioritizing following my daughter's birth. Its more like some part of my brain has been crippled. Again, its probably one of those "survival of the species" things, but in the very least its irritating. And it makes me wonder what other changes I've missed or am somehow blind to.

Anyway, no one told me about this, or of they did they were speaking in code too easy to misconstrue. Be warned then: kids fuck with your head in ways you might not appreciate.

Tuesday, January 06, 2009

Is Google Inadvertently Evil?

I work for a company who's business model depends on showing up on the first page of results for a wide variety of Google searches. You can argue that shows a weakness in the business model, and to an extent I think you'd be correct. All things equal it's a better business if we aren't dependent on Google's goodwill. But that's easier said than done; even the "big guys" like Amazon are dependent on Google for a non-trivial portion of their business. Let's accept as given, then, that pleasing the great Google is a necessity. That being the case a prudcent company will try to figure out what Google wants and give it to them.

Prior to taking my current position I spent most of my IT career in the "boiler room" building servers, doing backups, maintaining the SAN, etc. I supplied the building blocks, but it was someone else's problem to do anything with them. Now I work with public-facing websites, which means that everyone in my group is worried about "search engine optimization". It drives me nuts; it's such a different mindset from what I've done before that I'd argue it doesn't even count as an IT discipline anymore.

First off, "search engine optimization" is a bloody misnomer; nobody cares what Yahoo thinks about their website. It ought rightly to be called "Google optimization" since Google's the only player that really matters. The problem is that no one really knows what Google wants. Google is a giant black box of such complexity that its impossible to study empirically.

This may be the 21st century, but human nature hasn't changed all that much. In the absence of any systematic understanding of how Google search works people have reverted to form; SEO now resembles nothing so much as the IT equivalent of augury. There are arcane treatises to study, wise experts to consult, portents in the blogs, and a great, omnipotent god which must be appeased.

People in my company are afraid to make even small changes for fear of pissing off Google. And making major changes is out of the question unless they're blessed by our SEO expert (who, I might add, has yet to demonstrate that he's any more efficacious than an O'Reilly book). Even worse, there's a lot of Web 2.0/Ajax-y improvements that could be made, but these (if the SEO poobahs are to be believed) make Googlebot cranky. This is the first time I've been on the front lines, but I've no cause to assume that my company is particularly unique in this regard.

This is where the "inadvertently evil" comes into play. Google, darling, you're simply far too powerful and inscrutable. Though I'm fairly certain this wasn't your intention, you've taken the web out of the hands of empiricists and raised a false priesthood in its place. People probably have lots of cool ideas about what they could be doing to make their web sites better but aren't able to put those ideas into production due to concerns about how you'll react.

That, I think, is the heart of the issue; Google's feedback mechanism is nearly non-existent. The webmaster tools are a nice idea, but they really don't provide that much information in practice. I've had websites drop from the top 3 results to page 8 overnight without any changes on my end. In such a situation I'd expect that the webmaster tools might tell me something, but they are silent.

So Google, if you're listening, do me a favor will you? Give me some tools. You needn't reveal the details of your beloved PageRank; knowing how complicated it likely is under the hood I doubt it'd be useful anyway. But give me something, anything, so that when the nattering nabobs of negativity complain that some change will ruin their precious website I can tell them "No, it won't". If I can't do that then the daemons of stasis end up winning and you, of all people, should appreciate that that does no one any good in the long run.

Sunday, January 04, 2009

Israel and Palestine: I Give Up

I've recently come to the conclusion that no lay person can possibly have an informed opinion regarding the ongoing conflict between Israel and Palestine. After this latest flare-up I went looking for commentary on the issue, feeling that I should try to be an informed individual and all that. There's lots of commentary to be had, but in trying to evaluate the various sides of the argument I find that I'm completely out of my depth.

On one hand you have people like Salon's Glenn Greenwald and Fauzia of Feministe arguing that Israel's actions are disproportionate and represent collective punishment of the Palestinian people. On the other you've Eugene Volokh asking in rejoinder what, exactly, Israel should be doing. Normally I'd just go find a neutral source to help me sort things out, but in the case of Israel and Palestine there really doesn't seem to be much in the way of neutral sources.

So far the best exegesis I've seen is a paper by Justus Reid Weiner and Avi Bell (via David Bernstein) which analyzes the conflict from the perspective of international law. Messrs. Weiner and Bell look to have a strong case that Israel is behaving appropriate, but really, who am I kidding? I'm in no way qualified to evaluate their arguments; international law is stupidly complicated and IANAL.

In light of that realization here are some questions to ponder:

  • Is it necessary for lay people to have an opinion on the Israel/Palestine issue? Presumably the world governments which are in a position to actually effect change in the Middle East respond best to pressure from their citizenry, in which case we'd like their citizens to have and voice an opinion on the issue. But the corollary to that statement is that the opinion must be at least reasonably well-informed.
  • What do you do when global issues grow so complicated that its impossible for the average citizen to engage them in an informed manner? The Israel/Palestine situation isn't the issue which fits into the category. I think that global economics fits into this category, and perhaps some aspects of human rights as well. In some sense it seems to indicate that deomocracy may very well collapse under the weight of its own complexity.
Not particularly cheery thoughts, but there doesn't seem to be much in the way of solutions to either of those problems.

Saturday, January 03, 2009

Pink: The Most Insidious Colour

In addition to wasting my time in a useless MBA program I also spent part of my sabbatical becoming the proud father of a lovely baby girl. Which, if I understand the Official Rules of the Blogosphere correctly, provides me with license to pontificate ad nauseum on child-rearing. I don't intend to do much of that, given that I don't have real strong opinions on nappies, bottles, or Ferberization. Mostly I'm just overjoyed that people can't play the "You'll understand when you have kids" trump card on me anymore.

So if I'm not going to talk about the merits of babywearing and co-sleeping what am I doing here? Well, today I'd like to talk about the color pink. It looks all cute and cuddly and innocuous sitting there on the color wheel between red and purple, but looks can be deceiving. Pink is an adorable little ninja that will drop you as soon an you turn your back on it.

My wife and I have gone to some pains to try to buy gender-neutral clothing for the wee one. We're not particularly militant; mostly its just a reaction to the fact that clothing for little girls is an aesthetic nightmare. Well... that, and my personal imp of the perverse likes mucking with peoples' expectations. Anyway... it turns out that buying gender-neutral clothing is more difficult that you would expect. 7-11 sells 20-packs of pink Gerber onesies for less that the price of a cup of coffee at Starbucks, but non-suck clothing for small people is hard to find and stupidly expensive. We thought about buying some of the nice looking stuff from Kate Quinn (how cute... they're pandering to my demographic), but figured that she'd appreciate a college education more in the long run.

But I digress. The point is that our daughter spent the first few days of her life in outfits that didn't make me want to gouge my eyes out. Then we ended up back at the hospital on account of a minor case of dehydration, which is when all hell broke loose. My wife and I, we're good liberals (or possibly bad liberals, depending on your point of view), so we're aware of/armed against all manner of mindfuckery. Both of us, the first time we saw our daughter in a pink hospital onesie, went "Holy shit! She looks like a girl!".

For my part I can testify that this was accompanied by all sorts of subtle mental knock-on effects. Which brings me back to my main point: pink is serious shit. I would guess that I'm more immune than most to that sort of thing, but I could feel the pink worming its way into my brain regardless. Which, of course, makes me wonder about how it affects the populace at large?

I'll leave the deconstruction of the "pink effect" to someone more trained than I. The main takeaway here is that there seems to be good reason to avoid the cutesy shit with ruffles and bows as if it were the plague.

The MBA Pact: We Shall Not Speak of What Transpires Here

I dropped off the face of the planet in order to devote more time to my MBA. Turns out I really didn't need to. As I write this I'm meeting with my "group" to put together yet another useless marketing presentation that none of us really care about and that has little bearing on anything I ever anticipate doing. We'll put some shit on a couple of PowerPoint slides and flap our jaws in front of the class and are guarenteed to do just fine1. I don't think the powers that be would let me fail if I asked to; it'd look bad for the program.

From where I sit right now, a year into the program, it looks to me like the entire program is structured to give the appearance of being academically rigorous and useful. The curriculum is full of classes with weighty names, but the actual rigor varies tremendously. For every facially useful and applicable class like accounting or corporate finance there's some fluffy course where we spend most of the time in class talking about Harvard Business Review cases. 95% of the time I don't care about my classmates have to say; if they actually had informed opinions they wouldn't be in an MBA program.

After the fact I went and looked for specific information about how competitive my program is; that's the kind of thing that business schools like to brag about, right? Funny, there's nothing on the program's web site about that. Nothing about number of applications, number of people accepted, average GMAT, etc. If I were the skeptical sort I'd say that this whole thing is one big pay-for-play scam.

It gets better... oh does it get better. We had a class on "International Management"; that sounds great and business-y and globally dynamic, but what did we actually learn? Jack and shit. The prof spent most the class talking about how people in different cultures do things differently (welcome to 1995!). We had to write an essay on "The World is Flat", due on the first day of class, that was worth 50% of our grade in the course. If half of our grade was determined prior to even setting foot in the classroom it sort of undermines the idea that we were actually learning things in class.

There's been other crap like that too. Regular readers of this wankfest know that I'm interested in ethics and metaphysics and all that jazz, so you can imagine that I had a problem with "Ethics for Technology Professionals". The entire class was a boondoggle from start to finish; it might have just as well been called "I like ponies and we should just be nice to everyone". Questions on the final included such gems as

  • I commented (repeatedly) in class that the most important element of ethics is judgment. What prevents managers from making sound moral judgments (accurately distinguishing between what is moral and what is immoral)? What helps managers make sound moral judgments?
  • Social responsibility is an area of concern for every organization. First, discuss your company's activities in this area (or lack thereof) and provide reasons why it is that your company has achieved success and/or failure in their efforts (most companies experience both). Second, using concepts from this course, offer suggestions that would help your company become remarkably more successful in this area.
  • More and more, I hear the phrase "Ethical Leadership." In your opinion, what is Ethical Leadership? Use examples.
I ended up calling bullshit on those on the grounds that they were unnecessarily subjective. The prof acknowledged that they were, but said that the exam wasn't supposed to be just an objective assessment of acquired knowledge.

Yeah, that was fucking annoying.

And don't get me started about the whole "group work" thing. The official line is that we work in groups because that's how the real world works. Anyone with half a brain knows that's complete and utter bullshit. In the real world you don't get thrown into a group with 4 or 5 strangers at random. In a sane company, at least, every group member has specific skills and a designated job to do. More importantly, when someone under-performs you can fire them. On the other hand, when it turns out that one or more of your group members is a dumb as a bag of hammers you have no such recourse. I'm pretty sure that they're big on group work because it a) reduces the number of assignments that professors have to grade and b) keeps the attrition rates down.

So yeah, the entire MBA program has turned out to be a bit of a farce. There's no reward for excellence and no penalty for mediocrity2. And I don't think that's just a problem with the evenings-and-weekends program that I'm doing. I've a friend who just enrolled in the full time program at Yale and she makes it sound like she's going through a drawn out version of what I'm doing.

From where I'm sitting it looks like my MBA is a joke. I'm learning very little, and even less of what I'm learning is immediately applicable. But people are (and will contineu to be) duly impressed because of the mystique which surrounds the letters "M", "B", and "A".


1 One of my teammates said "It's marketing, you don't need any data." just as I was writing that.

2 While we were meeting another teammate made a joke to the effect that regardless of what we put together for this particular assignment we'd still all have MBAs in the end.

Boo

I'm back. Did you miss me?

Blog Information Profile for gg00