Archive for July, 2005

Hey Foxy!

July 29, 2005

For developers contemplating switching to Firefox, be aware that there’s much more recommend the browser than awesome standards compliance. With the addition of a couple of extensions, you can turn it into the developer’s wet dream (or equivalent—if there is one*—for the ladies). Here’s my quick list:

  • Web Developer: there’s so much to see and do that it’s hard to know where to begin. This toolbar allows you to disable all sorts of web functionality to see how your app looks in barebones format. It’s got a form population feature that’s tremendously helpful when testing interfaces. There’s some great features that help you visually see different elements of the page that you’d normally have to go down to source to view. The clincher, for me, are the CSS features. The option entitled “View Style Information” shows the complete cascade when you hover over an element and the exact set of styles being applied when you click on the element. The “Edit CSS” option is an absolulte godsend when doing any sort of complex CSS, which is what I’m great at. It opens up a sidebar with the external stylesheet. You can then edit the styles and it dynamically displays the results in the page. No reloading, no save-and-refreshing. You can then save the stylesheet or revert back to the unaltered one. If this feature sounds impressive, it’s even better when you see it in action.
  • Venkman: this is an extension that adds a full-featured Javascript debugger to Firefox. Yeah, I know you can use Microsoft’s debugger for Javascript but I’ve never gotten it to work to my satisfaction. From what I have seen of it, Microsoft’s version lacks a lot of neat stuff in Venkman. I love how you can debug all Javascript, even the stuff that the browser is using internally. There’s even syntax coloring and profiling, though I’m not sure how useful that really is. If you’ve ever used VisualStudio’s debugger, then you’ll be right at home in Venkman and you’ll understand its utility.
  • DOM Inspector: Venkman has a DOM inspector side to it, but it’s overkill for most DOM inspection needs. You can do searches for a particular ID and then see the node from all sorts of different angles. I use it a lot when I didn’t have the foresight to start up Venkman but I need to see the state of a Javascript object or all the CSS being applied to a particular element.

There are tons of other great extensions out there, but this triumvirate is downright indispensable to the web applications developer.

* The female orgasm is always trumpeted as the best and most powerful but I don’t think any lady has ever had one in her sleep.

[UPDATE (8/2/2005): Did I really discuss “nocturnal emissions” in the context of recommending Firefox? Weird.]

On the Phone

July 28, 2005

Today I spent an hour listening in on phone calls in our call center. Every developer is supposed to spend one hour a week doing that or answering customer emails that come in. Since I’m pretty unfamiliar with every product we offer except for the ones I’ve worked on, I’m not really comfortable answering the emails right now. I think this is a great idea since it keeps us developers in regular contact with the front lines. At my previous job, I saw many of my co-workers develop cynical attitudes towards the people who paid their salaries. I worked for many years on the front lines, and I think that that experience is invaluable when designing applications for the layman.

The experience was very illuminating. I got to hear a few common problems and I got a sense of how diverse our product line really is. I left very impressed with the difficulty of the job—I always knew that it wasn’t for me but now I can articulate exactly why. Further, I was floored by the respect and kindness shown to me because I worked in development. At my previous job, the Web team was not generally respected—we largely brought that on ourselves—and I developed low departmental esteem because of that. I’ve always thought that software development was terribly important and fascinating so it was nice to see others sharing that view.

What’s extra impressive about this whole exercise is that there’s an internal survey to be completed afterward that I’m told is read by executive management. It sums up your experience and solicits any feedback or suggestions you might have. That survey forces you to think about what you’ve experienced. I don’t know if my comments will have any effect, but I like the fact that they’re collected and that the front-line duty isn’t just some corporate lip service to quality.

[UPDATE (8/2/2005): One of my recommendations on the survey was applauded by the VP of Development and will be included in the features of a future release of a product. Neato!]

[NOTE: The views expressed on this website/weblog are mine alone and do not necessarily reflect the views of Go Daddy Software, Inc.]

Unleash the Fun

July 28, 2005

At my last job, we used VisualStudio.NET deployment projects to reasonable effect. There were problems with installing and uninstalling web applications via MSIs, but it worked fairly well. I was never really satisfied with it, but I couldn’t find any alternative that seemed better.

Yesterday, my co-workers showed me the copy project feature of VS.NET and I thought to myself, “Wha? That’s all it takes?!!” You just specify the destination and it copies all the relevant project files to there.

Today, a co-worker showed me a VisualStudio.NET add-in called Unleash It that makes VS.NET copy project feature look positively ancient. It adds a lot of the niceties that the VS.NET feature lacks: profiles, FTP, command-line, ZIP file creation, among others. It’s free. Deployment now takes seconds, limited largely by your network (I’ve already mentioned how great ours is).

[NOTE: The views expressed on this website/weblog are mine alone and do not necessarily reflect the views of Go Daddy Software, Inc.]

Don’t Blink

July 26, 2005

Wow, someone made an ASP.NET control to reproduce the <blink> tag. I want to hate it, but I just can’t. {via}

Review of Freakonomics

July 25, 2005

There’s several books that have made their way through the blogging world with surprising alacrity. The Tipping Point, Blink, Collapse, and Everything Bad is Good for You have all had their 15 minutes of memedom as they wend from blog to blog. Freakonomics, by Steven Levitt and Stephen Dubner, has endured longer than the others. I resisted reading Freakonomics just as I resisted reading the other books because the myriad reviews disclosed most of their contents through patchwork. Just as I could tell you that a liger is bred for its skills in magic even though I’ve never seen Napoleon Dynamite, I could give a rough accounting of Freakonomics et al. even though I’d never read them. Reading Freakonomics was like déjà vu in that sense. It also confirmed my suspicions that all of these books are probably not worth reading given the effusive praise and uncritical plaudits heaped on them by the average blogger.

It was an extremely easy read. I covered 190 of the pages in about four hours this Friday night. I don’t know if it was the lack of footnotes (I usually read each one as I come across them), the newspaper style, or the simple subject matter but I hardly ever can get through a book that quickly. The remaining 17 pages took another two hours since my wife saw some of its provocative conclusions and kept asking about them. The only other times I’ve zoomed through books as quickly have been children’s books—the first (and only) Harry Potter book took me a day or two—and popcorn fiction. In the end, I think its breezy style was mostly to account for the speed—this would be the perfect book to listen to.

If you haven’t picked up on it yet, I was not impressed by this book. I will admit that I was predisposed to not like this book. First, the hype surrounding it is a big turn-off for me. Hype is one of those things that typically ends in a let down. Most of the population does not share my set of values and my philosophic perspective. When something gets universally lauded, that usually means that it appeals to Christians, conservatives, altruists, and laymen—everything I’m not. Further, I didn’t particularly care for the content that I had already encountered by reading blogs. The analysis seemed glib and facile. Now that doesn’t necessarily mean anything since the average blogger is very glib and facile, so I tried to discard that particular prejudice before I started reading. It turns out that the analysis is glib and facile, but I wanted to read and be surprised.

The book starts out with its strongest cases. The first chapter about teachers cheating and sumo wrestlers throwing matches is an excellent use of data to tease out conclusions. The patterns they found are indicative of cheating since their statistical probability is considerably less than reasonable. They take the reader step by step through the thinking behind the analysis and it is a lesson in how to look for anomalies in data. If the book had continued along these lines, it would have been an amazing resource and would have heralded the beneficial power of statistics. I was really inspired and wished that I had a data set to so analyze; I wouldn’t know what to do but it just made me want to dive into SPSS.

After this great start, the book starts to unravel quickly. I blame the economist’s reliance on incentive as the cause of this slide. Incentives are powerful, to be sure, but they’re not sufficient to explain such complex phenomena as the real estate market and drug dealing. The authors found that real estate agents keep their homes on the market about 10 days longer than their clients. They suggest that this is because the agents want a quick sale to get their commissions but they want the best deal when they’re selling their own homes. While some agents may have exactly that motivation, I find it hard to believe that all do. While focusing on the agent is easy, I think that the real driver of the real estate transaction is the client. Most clients, I suspect, aren’t patient when it comes to selling their houses. They’ve got another house to close on and they can’t afford to carry two mortgages while they eke out another couple thousand dollars on the sales price. They may reject the first offer to cross their bow, but the next one that comes closest to their desired sales price is going to mighty tempting. If there’s any sort of lag between offers, the temptation grows greater with each bid. Agents, on the other hand, are much more experienced with waiting and bidding trends. When selling their own homes, it makes sense that they’d take advantage of their experience and it makes sense that that patience would pay off. I think that’s a more plausible explanation of the pattern than the sinister motivations that the authors posit.

They then survey the terms used in the listings in order to show which words are correlated with the final sales price. They found that certain words were correlated positively and others negatively. Leaving aside their methods (and I have to leave them aside since there’s nothing describing them in the text or the endnotes), they suggest that those words negatively correlated represent words that the agent employs to “subtly encourag[e] a buyer to bid low.” What? Was that in the data? I can just picture the reader of this book firing his real estate agent because she used the term “great neighborhood” in his house’s listing. Levitt and Dubner argue that specificity in description is what positively correlates but how do you specifically describe a great neighborhood, a fact which might be a very real selling point? The authors forget (or don’t consider) that listings are necessarily terse and usually incorporate fuzzier selling points in addition to the specifics.

Further, no one buys a house straight from its listing. If the terms in the listing don’t jibe with what the potential buyer is seeing, then the buyer will pass (and thus never be counted in their data set). But that’s not all: the listing may be perfect and the buyer may still pass (and thus be omitted from the data). In fact, the fuzzy listing may be in an older neighborhood and therefore command a less elastic sales price. Notice that all the specific words they mention as positive correlations are terms that you’d associate with a newer house (or one recently remodeled)—you don’t find “Corian” in a home from the 1950s unless it’s been added in the last ten years. Newer homes don’t exist in older neighborhoods. I don’t if any of the preceding possibilities are at work here. But all of these things represent potential explanations for the data that do not require one to think of real estate agents as bloodsuckers.

Where the pair really go astray is in their chapters on parenting. Their main conclusion is that parents have a negligible effect on children. They admit that bad parenting has a huge effect on children, practically guaranteeing them a ride on the prison express (if they don’t beat the odds). Their point is that, beyond a certain point, all the things parents do to enrich their children’s lives don’t matter. Visiting a museum? No effect. Reading to them each night? Zilch. Stay-at-home mother until of school age? Why bother. These are contrarian, to say the least. But they wouldn’t be making such statements unless they were solidly backed up by data, right? I mean they teased all sorts of interesting conclus
ions out earlier by looking at the data in unique ways, so they would do that here as well, right?

Sorry to burst your bubble, Chester. They rely on test scores. No let’s-look-at-what-real-estate-agents-do-when-selling-their-own-homes or how-do-sumo-wrestlers-compete-when-they’re-at-the-crucial-7-wins-and-7-losses-stage on this one. They used test scores and academic progress combined with an invasive questionnaire to draw their conclusions. Not very rogue, if you ask me. It’s also completely irresponsible. How you can make sweeping generalizations about the power of parenting from academic performance of any sort is beyond me. If you’ll bear with me, I’m going to really delve into this issue because this is where the book totally fails.

I say that his statements are irresponsible because far too many parents don’t put enough thought or effort into parenting as it is. Telling them that parenting doesn’t matter is like giving them a carte blanche to slack even further. Even if so-called “obsessive parenting” didn’t result in higher test scores, that doesn’t mean that it’s not worthwhile to take your children to cultural events, read to them, or otherwise participate in their rearing. Sure, there’s no general agreement as to the effects of various parenting styles and you could find hundreds of books claiming to be the One True Way to effective parenting but that doesn’t mean that the pursuit of perfect parenting isn’t worth it. Some might have bristled at my use of “perfect parenting” but the reality is that you should also strive for perfection in parenting—as in the rest of your life. You’ll make mistakes and missteps, but that doesn’t mean you should adopt the posture of “well, perfection is impossible” while you beat your kids. I am not a perfect parent, but I believe that I should try to be one. That means that I should take mistakes seriously and work to stop them from recurring.

The actions that he lists as not having an impact on test scores reads like a laundry list of the characteristics of a working parent (or single parent). It strikes me as an apology for not staying home with the kids. While it may be possible that the effects are negligible—I sincerely doubt it—it seems like those parenting magazine articles of the same form that make working parents feel better about their decision to not commit fully to raising a child. I don’t know enough about the lifestyles of the authors so I can’t really say that this was some sort of rationalization on their parts, but it wouldn’t surprise me a bit if it were.

The fact of the matter is that performance on a standardized test may not be capable of measuring or indicating the benefits of staying home with your children. Off the top of my head, staying at home could produce better adjusted children that feel more love and trust for their parents. That could make a criminal future more unlikely. Staying at home could also shelter children from the social shock attendant with day care facilities until they are better prepared emotionally to deal with the cliques, taunts, and ostracism that often comes in social situations. That could avert many of the aberrant behaviors that accompany them. Or it may not. What is certainly true is that the authors haven’t proven anything one way or the other. I’m not sure if we even have means to measure and analyze these circumstances adequately.

Reliance on declarations by study participants is another fatal flaw. People lie on questionnaires, even more so when they’re delivered by an actual person from the government. They say what they think they ought to say, they misremember things, and I would suspect that some people actually lie outright. Sure, people who admit to spanking their children probably aren’t lying but how does that establish the study’s accuracy? It doesn’t, but it provides a nice distraction from the issue as the authors move on to the next shocking revelation.

In the end, the authors want to have their cake and eat it too. They repeatedly assert that people who value education have children with higher test scores. (168, 172, 174, 175) However, they also assert that “by the time most people pick up a parenting book, it is far too late.” (175) As mentioned earlier, they sincerely believe that, beyond a certain point, parenting doesn’t matter. But if parents value education, how does that carry over to the child? Is there an education gene? They argue no such thing. The actual causal chain that they never explicitly reveal is that parents who care about their child’s education will impart that sentiment by example. The academic performance of Asian children in America is well-documented and the reason typically given is that their parents want their children to do well in school. That desire is translated into a myriad of behaviors: rules about studying before watching television, allocation of resources to educational support, saving scrupulously for college, and vigilant monitoring of performance—to name a few. But if parents don’t matter, then how can their attitudes affect test scores? And if parents do matter, perhaps they matter all the way down? The authors, unfortunately, don’t bother to delve into these other possibilities.

There’s a number of other bones I could pick with the book, especially about the inane chapter on baby naming that reads like an afterthought. I’ll merely state that the chain they craft to link educated, upper-class naming to uneducated, lower-class naming is completely bogus. People may not get names from celebrities, but they do get them from the people they encounter in real life, the people they read about or see in the media, and the children their children encounter—all of whom have names themselves, fodder from which to draw. The educated upper class don’t associate with the uneducated lower class by and large. They travel in different circles and usually encounter each other indirectly (e.g., the dock worker might know the company president by name but he certainly doesn’t know the president’s kids’ names). How the name choices are transmitted from one to the other doesn’t stand up to scrutiny.

The book has some interesting examples, but it’s wrongheaded by and large. Worst of all, it’s insanely popular right now and the ease of reading it would suggest that it won’t just sit, binding uncracked, on the coffee tables of America. Its insights into the “hidden side of everything” will fit the conspiracy theorist’s mentality very well and may turn otherwise optimistic Americans instead skeptics and cynics. Who knows, the 20th anniversary edition of the book may have a chapter on the book’s unintended consequences. That may be ascribing it too much cultural power, but small things can have big effects.

[UPDATE (8/4/2005): Here is a similar, though much condensed, opinion.]


July 25, 2005

Wow, I thought I’d take this speed test at work since the connection always seems zippier than any other I’ve ever experienced. The results: 11,832 kbps down and 1743 kbps up. Crikey!

[UPDATE: My co-worker pointed out that running a test at 6:40 am isn’t really representative of the company since it’s just me, the security guard, and third-shift call center workers. So I just ran it again: 10,585 kbps down and 1728 kbps up. Still pretty damn impressive!]

[NOTE: The views expressed on this website/weblog are mine alone and do not necessarily reflect the views of Go Daddy Software, Inc.]

Review of The Automatic Millionaire

July 23, 2005

My friend Larry has often said that he doesn’t know how anyone in this day and age can’t be worth a million dollars at retirement. He’s right because it doesn’t take a substantial monthly savings to amass a fortune if you’ve got enough time. There’s really nothing magical or mysterious about it: save a little bit each month and invest it in something—even something relatively conservative—and it’ll turn into something substantial in 30 or 40 years. Of course, that hasn’t stopped many investment book authors from cashing in on common sense. David Bach’s The Automatic Millionaire is a great example of that

(Side note: I’ve become convinced that investment, business, and management books should not be listened to. Most of these type of books rely on a hook or a gimmick that can easily be glossed over when reading, but becomes positively grating after listening to six CDs filled with it. I can’t think of the last book in the genre that I didn’t entertain thoughts of ditching halfway through. “Good to great”, “make it automatic”, “millionaire next door” all call forth repulsion at their thought.)

Bach’s basic message is as helpful as it is obvious: the more effort required to keep up your personal financial plan, the less likely you are to see it through. Bach’s unique insight is, umm, well, I don’t think there is anything particularly unique in the entire book. His advice on investing, saving, paying off debt, and tithing (tithing? You don’t see that phrase used in many books) amounts to “make it automatic.” He spends countless pages describing how to take advantage of direct deposit and automated debits. Apparently, this isn’t common knowledge among people; nor is the fact that you can set up automatic payment plans to mutual funds with little or no initial investment. I wouldn’t have believed that, except that this is a very popular book.

I’ve got a few beefs with this book. First, I am sick of every author and financial planner on Earth recommending asset allocation plans as a panacea. Diversification is good if you’re buying individual stocks and you want to spread your risk across many companies. It’s less tenable when you’re buying mutual funds, which are diversifications in themselves. No mutual fund puts all its assets into just stocks or just one category of stocks. They spread the money across many companies in many sectors and they have sizable holdings of bonds and cash equivalents.

In my opinion, spreading your investment money across a bunch of different mutual funds dilutes your holdings. If you only had $100 to invest a month, why would you put it in four different funds: one bond, one aggressive growth, one money market, and one blue chip. That’s exactly the calculus many asset allocation drones preach, but you’re unnecessarily limiting your upside potential. I think it’s better to pick at most two funds and throw everything at them. Personally, I like to put my money in a fund that’s earning a lot and put some more in an S&P 500 index fund. That way, I’ve always got a portion of my money in a fund that’s representative of the market as a whole and consistently providing a decent return over time. Simultaneously, I’ve got the rest of my money working really hard.

Second, he calls the phenomenon of long-term investing “compound interest.” Perhaps this is a niggling point, but compound interest is a term specific to banking. It is the effect of earning interest on interest or, in lending, paying interest on interest. It has nothing whatsoever to do with the stock market or any other form of investment. If I were generous (I’m not), I’d say that Bach was trying to explain the issue in terms that the average person would understand. Instead, I think he may not really understand the difference. In the stock market, you never realize any gains until you sell the security. They are called “paper profits” for a reason. If I buy $10 worth of stock at age 25 and it’s worth $1,000 at age 65, it’s not because of any sort of compounding—it’s because the value of the amount of stock I bought at age 25 has risen over 40 years. This could be because the price has risen, the stock has split, the company has bought back its own stock, or another reason entirely. It’s exactly not like savings.

Finally, I hate how talks about the automatic mortgage payment. He recommends splitting your monthly mortgage payment into biweekly installments. The purpose is to make an extra payment a year, which will save you a bundle over the course of your mortgage repayment. He drones on about this at length, but he can’t easily gloss over the fact that you’re paying an extra payment every year. My mortgage is over $1,200 a month. I can’t imagine paying an additional $600 two months out of the year. I’m not sure most people could swing that either. It strikes me as disingenuous to prattle on about how becoming a millionaire is as simple as foregoing your morning latte (amounting to $50-100 a month since everyone who gets a latte before work works a seven-day week) but not including the extra $100 per month it would cost to make an additional mortgage payment.

Bach’s book does discuss an interesting approach to paying your debts. Basically, you make minimum payments on all your debts and then put half the money you save every month towards one of them. Once you’ve finished that one off, put the half plus the minimum payment of the paid-off debt towards the next debt. And so on and so on. It would be an interesting approach if every other book on the market didn’t already mention it.

Stylistically, the book is boring as hell. It repeats the material endlessly, uses obviously concocted anecdotes to illustrate points (boy do his friends say awfully convenient stuff in oddly similar style to his own), and relies on crutches excessively. The benefit of reading the book instead of listening to it is that you can glaze over the boring parts; there’s really no audio equivalent to skipping a few pages since it’s virtually impossible to know when sections and chapters begin and end.

If you’re looking to get rich or get out of debt, take the money you would have spent for this book and use it towards those ends. Instead, read this excellent—and free—essay on the subject called “Get Rich Slowly”. You’ll be better off because he’s a better writer and the advice is more pertinent.

On the Way to the Forums

July 22, 2005

Vanilla: Vanilla is a brand new open-source forum software that’s stated goal is to “the mold created and followed by just about every other forum on the web.” This jibes with my experience in bulletin boards—I’ve found them pretty much all the same, even down to their interfaces. The only other different forum software I’ve run across is PunBB and that’s not that different.

Sometimes it’s good to follow the pack: conventions make user interfaces easier for users to understand. Most of the time, to my mind at least, it’s great to re-examine the premises of commodity software and see if there’s still some innovation to be had. I’m definitely going to try out Vanilla at my community’s fledgling virtual community.

DictionaryBase and Repeaters

July 22, 2005

I’ve been struggling to databind a custom collection built off DictionaryBase to a Repeater. In my other custom collections that used CollectionBase, I could just cast the Container.DataItem to the underlying type and access the class’s properties. When I tried to do the same thing for my DictionaryBase collection, it kept giving me casting errors.

I tried casting the DataItem to the collection itself and using keys and values. The Web wasn’t particularly helpful. In explaining it to a coworker, who helpfully rubber ducked for me, I realized that I needed to cast the DataItem to a DictionaryEntry and then cast the value of that DictionaryEntry to my underlying type. Duh!

Here’s the syntax, with any confidential bits removed:

Democrats and Businessmen

July 22, 2005

Project FAZR: I remember reading about something like this in Atlas Shrugged. How did that turn out in the book? Oh, who is John Galt?