Saturday, August 25, 2007
Friday, August 24, 2007
focus
Bridgid and I don't have many conflicts, but one of the things that forces us to compromise is the fact that we both match well-known gender stereotypes when it comes to our work habits and attention spans. This can be amusing and frustrating at the same time.
For those of you who never made it through Psych 101 and don't work for a company that requires lots of diversity training, allow me to summarize: men are incredibly single-minded and perform well on tasks that require deep concentration, long hours, and not talking to anyone; women are excellent multi-taskers who are most productive when they are faced with disparate tasks that exercise social as well as academic skills. This is why you meet so many male programmers and female marketing executives. There are exceptions, but in my experience this stereotype is more accurate than most[1].
In fact, in the case of me and Bridgid, it is incredibly accurate. Bridgid is a biochemist who gives cancer to fish and does experiments on "genes". The fact that she's a geek would lead you to believe that she is an exception to the female stereotype, and in many ways, she is; however, when it comes to multi-tasking and the desire to work on disparate tasks, she is a perfect match. Bridgid can switch contexts almost immediately and not lose a step. Her need for long-term scheduling is limited to her need to set up multi-day experiments in such a way that she can balance her classes with her time in lab.
I am a different animal. I exhibit classic programmer behavior when I'm at work, and it's even more obvious after work, when there are no meetings to distract me. I like to block off hours of time for one project, one feature, or one set of related bugs. I save big-ticket items for days when I work from home so that any communication that I have with other people is routed through email or IM, which allows me to manage it in the same way that I manage my list of tasks. Even when I'm working on a feature that touches code shared by multiple people and requires lots of questions and communication, at some point I will buckle down and write code by myself, with no distractions to knock down the house of cards I am building in my head.
Context switches can kill hours of my day if they are timed right: three consecutive meetings with thirty minutes in between each means that I lose an hour because I can't start anything significant before I'm pulled into the next meeting. The flip side of this is that, once I am working on something, I find it very hard to put it down. I wish that I had Bridgid's ability to let things go when a context switch happens; instead, it takes upwards of an hour for the thoughts surrounding whatever it is I'm working on to leave my brain. Of course, sometimes the delay is caused by thoughts about co-worker frustration or bureaucracy, but I think that is more understandable to the average person. Thinking about Ant's classloading behavior on the way to dinner is not.
The reverse of this behavior is interesting. A large project may require many days of intense concentration and occasional t-shirt re-use on my part, but when I'm done[2], I am suddenly aware of all of the great things that are happening around me. Things to do. Fun to be had. My non-programming intensity is as strong as my programming intensity, but the two cannot coincide. This can be very confusing for Bridgid and other female humans.
I try to temper this conflict by keeping an a personal schedule that extends at least two and usually three weeks in advance, identifying those times when I will be able to work consecutive days on larger problems without forgetting to eat or talk to my girlfriend; the other days become targets for meetings, smaller bugs, and tedious work that will not leave me distracted at the end of the day. This need for order and preservation means that I am constantly scheduling, with the ability to remake two weeks of plans in ten to fifteen minutes. Frequent re-ordering means that no "to do list" software is fast enough or natural enough for me; whether it's Microsoft Outlook or some Web 2.0 app with Atom feeds and rounded corners, I always come back to a plain text file on my desktop. I don't have time for calendar widgets and status markers. When something is re-scheduled, I cut and paste it. When it's done, I delete it. At the end of each day, I open todo.txt one last time, delete the current day's entry, Ctrl-S, Alt-F4, and turn off my monitor.
On that note, Fri PM (8/24) - blog post is complete. It's time for a trip to Fujisan. With my lady.
[1] I'm sure you've already thought of a few co-workers who completely defy these stereotypes. Good for you. I'm telling my story anyway.
[2] Where done means that it works on someone else's machine and I've found most of the edge cases.
Labels: culture, narcissism, programming
apachecon
So I'm going to ApacheCon. Just for a day. I'd like to be there for the whole conference as a presenter and an attendee, but a) ApacheCon hates me, and b) all of the sessions I want to attend are on one day, so it's hard to justify a longer trip.
While I'm attending, I'll be hearing talks from Grandmaster REST and the Simplification Band about how REST is the Silver Bullet and how Web 2.0 is changing the future before it happens; you know, the usual fare. My goals are to get a more in-depth look at some of Zero's competition and to find out what makes programmers the most productive on their REST-oriented projects. Assuming the wireless connection isn't too flaky, I hope to live-blog the event for the benefit of my co-workers.
I also hope that I don't get carjacked while driving through Atlanta.
Labels: apachecon, narcissism, zero
Tuesday, August 21, 2007
beggers
Beg The Question: To beg the question does not mean "to raise the question." This is a common error of usage made by those who mistake the word "question" in the phrase to refer to a literal question.
Sites like this play to my inner-stickler, which means that I find them irresistible. This one in particular reminds me of times during grad school where I'd be sitting in class, waiting for some amateur philosopher to finish his point about some technology-related issue that didn't deserve as long a monologue as he was giving it, when all of a sudden I would be jolted back into reality by said philosopher's repeated misuse of the English language and its more interesting phrases. Like most of the time I spend in airports, time spent listening to proud-yet-inaccurate college philosophers generates an incredibly loud, scornful rage... in my head.
External Dan: (calm, expressionless, silent)
Internal Dan: STOP SAYING BEGS THE QUESTION YOU ARE CLEARLY VERY PROUD OF YOUR LINGUISTIC DISCOVERY WHY COULDN'T YOU TAKE THE TWO MINUTES TO GOOGLE IT AND MAKE SURE YOU DON'T SOUND LIKE A FOOL VNI3POQE48IJEVGI3PDFN9KEQ1FNJD ANGER!!!
Anyway.
They also have cards that you can hand out to people on the street. The cause doesn't give me the same bold self-assurance as the one behind SHHH cards, but if I ever go back to grad school, I'll be sure to print off a sheet or two.
Labels: culture, narcissism
dims
Davanum Srinivas: It's been a wild ride since WS PMC inception in 2003 as the PMC chair. I'd like to step down from this role now.
Dims was one of the people that helped get me up and running in the Apache Web Services community, and it's unfortunate that he can't continue to be one of its official ambassadors forever. He answered my calls for help on a broad range of issues - from ASF rules and regulations to SVN administrivia - and he never gave me any grief for bugging him with stuff that wasn't in his job description. Despite the fact that we were eleven time zones apart, emails to Dims always received an immediate reply, which means he is either an ultra-productive engineering machine or severely overworked; my guess is the former, but WSO2 is still in startup mode, so you never know. Either way, a lot of IBM's open source work has flowed through him on its way to release, and I'd like to thank him for all of his help.
Labels: muse, narcissism
Thursday, August 16, 2007
faces
Each time I re-start my blog or re-design my site, I usually look over my old content and decide to throw it out. Despite my best intentions at the time, I always discover that my past writing is laden with ignorance and sullen tripe about Cindy Lou Girlfriend and the highs and lows she had inflicted upon me. No one wants to read that.
Since graduating from college, I've tried to keep my writing more interesting from the perspective of Future Dan, and I think I've done a decent job (not great, but decent). My last blog was mostly free of the aforementioned tragedies, but I didn't include it in my latest re-design because I was too lazy to refactor those posts whose content did not fit well with the new layout. It was just easier to start over. Fortunately, I saved a few of my favorite posts from that blog, and that brings us to today's post.
I don't want to waste a lot of posts (or even multiple posts) on old material, but I was reading an article the other day that related to an interesting topic that I had previously covered in great detail. The article was about a Carnegie Mellon research project that demonstrated success in patching incomplete or damaged images using a catalog of disparate image fragments found online; this news represents another step in the long journey towards accurate and accessible image search that does not rely on pre-existing metadata or titles[1]. Very cool stuff. It also has potential with regards to today's topic, which is the patterns of the human face and the way the brain processes those patterns.
Here is what I wrote a few years ago on the topic of facial patterns:
I think it would be really interesting if someone created an ontology of the human faces for each generation. It is my belief that there is a finite number of possible faces, and that, unlike snowflakes, we have a lot more look-a-likes than people care to admit. A comprehensive face catalog would tell us exactly how many unique faces are out there. I think that we would all be astonished at how small the number is.Note the last paragraph: the real challenge would be providing a mechanism for efficient lookups. Well, science marches on. Projects like the one at Carnegie Mellon continue to chip away at the seemingly impossible task of finding images based on natural language descriptions or imperfect renderings (such as sketches, or photos of things that are only conceptually similar to what you are looking for). Within a few decades, we may be able to study the American facial spectrum without the manual and tedious processes I imagined when I wrote my original post. My only hope is that it will be used for good[2].
Here's an experiment for you to try: gather a high school yearbook from a friend or family member that you did not go to school with, and look through the senior photos (which are always larger and more detailed). I guarantee that you will recognize numerous people despite the fact that you don't know them. You will find photos of people that look exactly like people you went to school with, met at a bar, etc; furthermore, you will find faces that you've seen on multiple people, in their exact form.
Straight-haired brunette, thin face, pale complexion, wears a little too much makeup, squints too much when she smiles, mouth is thin as a piece of paper. Square-faced, black hair with too much gel, clear blue eyes, chubby nose, has a grin that makes him seem uneasy. I'm telling you, the similarities are there. There are very few people in this country that I have not "met".
This does not mean that people who have popular faces are mundane or unattractive; if you do the yearbook experiment, you will find a lot of gorgeous people that happen to look just like some other gorgeous people you know. My hypotheses are simply that a) a significant percentage of the population has more twins than they could ever imagine, and b) this is the exact opposite of what most people believe.
And that brings me to my social circle. I don't think that I look like a significant number of other people, but then again, there is nothing very remarkable about my appearance. Mike, who agreed with my theory when I related it to him this afternoon, is also an uncommon face. Or not. It's not very likely that my small circle of friends has somehow escaped this phenomenon. This leads me to my final theory: c) even people with a twin in every city don't realize that they have a very common face.
The only time I see exceptions to my theories is when someone happens to look very similar to a current celebrity. I am guessing this is due to the fact that our brains are able to put a name to the famous face and more easily remember it during day-to-day life.
Now, what's really interesting is that the types of faces seem to change from generation to generation. My analysis might be skewed by different fashions, trends, etc., but it seems like facial patterns are limited to two decades or so. What I would like to see is an American face ontology for my generation; the real challenge would be providing a mechanism for efficient lookups. If that were possible, you could categorize any of your friends as, say, a #52, which is both amusing and scary at the same time.
[1] For an example of some really innovative research in this area, check out Retrievr, which allows you to search images on Flickr by drawing sketches or uploading photos with similar content. Make sure you have JavaScript enabled when visiting the site.
[2] A more likely scenario: two days after such a project is announced, there will be a Firefox plugin that lets you stalk people you knew in high school and find out if they're single and miserable.
Labels: culture, narcissism
Tuesday, August 14, 2007
endorsement
RESTdoc is now part of Zero Core! You can read about it here; the latest code is here. Much thanks to Steve Ims for working with me to resolve all the little details and get this into /trunk.
Go banana!
Labels: narcissism, programming, zero
Thursday, August 9, 2007
rolling
My forum post about RESTdoc generated a lot of great ideas, almost all of which have been implemented in my RESTdoc SVN branch. I think the latest UI is pretty slick (considering it was made by a programmer, anyway), and integrating the test forms with the REST tables should help us lower the learning curve for those new to Zero's REST conventions. I've uploaded some screenshots of the latest RESTdoc UI and would appreciate any feedback related to making it prettier or more intuitive.
I have a few more features to complete and IE-related bugs to work around, but I've already opened a feature request in the bug database. I suppose I should also add some documentation to the wiki; it would be tragic irony if people had trouble using a documentation tool because it was poorly documented.
Labels: narcissism, programming, zero
anguish
Pat Mueller: I suppose I must not have gotten around to telling Dan my horror stories of using WSDL in the early, early days of Jazz. The low point was when it once took me two working days to get the code working again, after we made some slight changes to the WSDL.
I'll see your WSDL ruined my week and raise you a WSDL caused me extreme pain that could only be soothed by setting my skin on fire and never reading a WSDL document again. I understand the pain associated with WSDL-oriented tools and code generation, but my experience creating those tools was just as difficult. During the first six months of working on the project would become Muse 2.0, the other IBMers that I was working with started asking for client code generation features; I was working well over sixty hours a week at this point, and as important as code generation is for WS-* programmers, I had other things to worry about, like implementing all 9,087 pages of WS-RF. I finally managed to throw something together one weekend, and while it wasn't pretty, it got the job done (for a while).
Eventually, Muse grew and tooling was added, and we needed more code generation support than my weekend side project could provide. Andrew Eberbach started working on a Muse-oriented version of WSDL2Java[1] that actually had a design behind it and, as a result, was much more flexible for both Muse developers and Muse users. During the creation of WSDL2Java, I found myself spending a lot of time trying to transfer my knowledge on the nuances (nuisances?) of WSDL 1.1 and their affect on Java-based service implementations. When I first started at IBM, I had only a cursory knowledge of WSDL, but after two years, I knew what I was doing and had the scars to show for it; unlike many skills (which seem easy once you have them), reading and writing WSDL documents was something that I never got over, and that made it all the more difficult to encourage new students. By the time Muse 2.0 was released, I could read WSDL documents that were thousands (thousands) of lines long and find obscure syntactical or semantic problems in a minute or two... but it never seemed easy.
Never.
The worst part was, even as Andrew picked up my unwritten, unofficial WSDL knowledge and took ownership of our command line tools, it didn't free me from the tyranny of port types, bindings, and <xsd:any/>. As author of Muse's WS-resource deployment and request-processing engines, I had to read WSDL documents at runtime to determine how SOAP requests and WS-Addressing data should be mapped to WS-resource instances and Java method calls[2]. Keeping the WSDL assumptions consistent between tools and engines was tough when I was the only author, so you can imagine what it was like when it was split between two people, one of whom had not yet come to terms with the unstoppable, day-ruining force that was WSDL 1.1.
I really thought that I had a point when I started this rant, but now that I'm nearing the end of it, I can see that I don't. Pat's comment just triggered a flashback and it was either vent through my blog or sit in the corner with spiders crawling over my skin. Whew. Crisis averted.
[1] I believe the first instance of a tool named WSDL2Java was released as part of Apache Axis, but every web services framework I've ever seen has its own implementation of this concept. Muse was no different.
[2] This requirement was put in place in order to avoid another JAX-RPC mapping file disaster.
Labels: muse, narcissism, programming