Skip navigation

Last week I dove back into Javascript after being away from it for a while, and I wrote up a “Javascript Refresher Cheat Sheet” on the basis of some of the books and web resources I read.

It’s been inspiring to watch IBM’s Watson kicking butt on Jeopardy, since I am a scientific programmer and understand the difficulty of the problem the Watson team is attempting to solve. However, I can’t help but notice that Watson seems to be having much better luck nailing the buzzer, compared to its human counterparts.

Years ago, a family friend ended up on Jeopardy, and after the experience, she commented that she had underestimated the importance of finessing the buzzer. A Google search for “jeopardy buzzer” turns up quite a few pages, including this very informative page entitled “How to Win on the Buzzer”, by Michael Dupee, a former Jeopardy contestant.

It’s not clear to me how Watson is notified that Alex Trebek has finished reading the clue, but it seems pretty clear to me that no matter how you do it, the computer clearly has an advantage. If, for instance, the computer is simply sent a signal that is wired in to the same system that the off-stage assistant uses to enable the human contestants’ buzzers, then the computer can instantly respond with almost zero latency as soon as it gets the signal. There is no way that a human can compete with that, because the humans that rely on the pin light to notify them of buzzer activation will always be late. Alternatively, those that try to “time” the assistant and guess when he feels Trebek has finished reading the clue will never have the microsecond accuracy that Watson has.

Alternatively, if a direct signal is not sent, but rather Watson is equipped with an audio sensor to process Trebek’s voice as he reads the clue, it’s very easy to write a simple optimization routine that quickly learns when the assistant activates the buzzers. Watson can expend a tiny, minuscule fraction of a single processor to this task, and still be orders of magnitude more accurate at timing than its human competitors.

The point is that if one were to replace Watson with a human being that is every bit as knowledgeable and capable as Watson, the human being would not fare nearly as well in competition, simply because his or her motor response cannot beat that of a specialized robot. So, while Watson’s ability to understand and solve open-ended Jeopardy clues is certainly impressive, the reason he is trouncing the humans seems to have more to do with robotics rather than reasoning.

A few days ago I received an email from “Yelp HQ” informing me that my review of Case Handyman & Remodeling had been flagged, and after review, they decided that my inclusion of the links to the detailed remodeling entries on my blog were “promotional” and violated their terms of service. An excerpt from the email:

“I’m writing because your review of Case Remodeling of Austin has been flagged by the community, and after evaluation, our Support team has determined that the review violates our Terms of Service (http://www.yelp.com/static?p=tos). Because personal accounts cannot be used in any promotional manner, the links to your blog that you’ve included in your review are problematic and will need to be removed.”

Naturally, I sent a response:

Hi Miranda,

I’m curious what aspects of the Terms of Service have been violated? I re-read the Terms of Service, and the Content Guidelines, and could not really find anything that pertains to my review. I linked to the detailed remodel information at the end of my review because it is too much content to post in a Yelp review; it includes day-by-day breakdowns, a lot of detailed information about the kinds of dysfunctional communication and interaction I had with Case Handyman &
Remodeling, and many photos.

The “promotional content” part of the Yelp Content Guidelines seem to specifically address people who post links that promote their own businesses and such. I am hardly doing that, but rather am instead providing more information and context for other Yelp users. Again, I simply do not see how this violates the letter or the spirit of the Terms of Service.

Of course, just because Yelp emails you, doesn’t mean that you have the privilege of emailing them back:

From: “Yelp Team”
To: XXXXX@gmail.com
Thanks for emailing Yelp.
Unfortunately, you have reached an email address that is not in use.

And now I offer a fun little challenge: try to find the email address of someone at Yelp that you can write about this. No luck? Yeah. You have to use their web form. Fuck that. If you email me, threatening to remove content that I provided for free for your site, then it’s not really right to make me jump through hoops and fill out CAPTCHAs just to respond to you. In the spirit of making a good-faith effort, I even tried tweeting @Yelp, to no avail.

So, that’s it. That’s my last Yelp review. Others who want to use Case Handyman & Remodeling or deal with Ed Dudley and get screwed, you can thank the nice folks at Yelp HQ for removing my review that could have spared you pain.

You know what the real irony is? The real irony is that the person who flagged my review is probably someone associated with the business itself. Good job, Yelp!

For reference, here is my review in full. You can decide for yourself if it is “promotional” in nature about my blog:

I’m currently using CASE for remodeling about 800 sq ft of my house, including building a brand new roof, kitchen, master bedroom and bath, and deck. Thus far, the construction quality and timeliness of the project have been OK. Our construction manager José and his crew do a pretty good job, but some of the subcontractors have left a bit to be desired. On the plus side, they at least showed up on time and got the work done (for the most part).

The financial side of the project is a completely different story. We were initially led to believe that this would be a fixed-bid contract with potentially a few change orders if they discovered things that needed to be fixed along the way. Well, as it turns out, despite the fact that we demolished half of the house and rebuilt from the ground up, there was still a tremendous amount of unexpected work. We are currently a whopping 30% over the contract amount and at change order #23. (I could have bought myself a very sweet car with the overages that we’ve had.)

During the initial discussion phase of the project, Cliff Zoch (who was the remodeling consultant we worked with) indicated that CASE really preferred to do fixed-bid contracts and pooh-poohed the “industry standard” practice of lowballing the inital contract to earn business and making back profit margins on change orders. Well, based on the progression of our project thus far, that is exactly what is happening to us.

We still have about 3 weeks left on our remodel, and I will update this once it is complete. I am also blogging my remodel at http://pwang.wordpress.com/category/remodel/ and I have a fairly comprehensive overview of our project at http://pwang.wordpress.com/2009/05/01/project-overview/. I have posted many pictures and I detail the joys and travails of our ongoing project, including interactions with various subcontractors.

I finally upgraded to Snow Leopard (OS X 10.6) this past weekend, and the first order of business was to get Python configured the way I wanted.  I had previously been using a very custom install based on the old “Intel Mac Python 2.5″ notes that Robert Kern wrote up for ETS developers/users, and I had resolved to be more intentional and organized about how I managed the installation of Python packages on my new system.

So, I first installed EPD, the Enthought Python Distribution as a base. Then I created a ~/.pydistutils.cfg file with the contents as outlined in the Python docs on Installing Python Packages:

[install]
install-base=$HOME/Library/Python2.6
install-purelib=site-packages
install-platlib=plat-mac
install-scripts=scripts
install-data=data

I then tried to install Mercurial using the one-liner:


$ easy_install mercurial

And I was promptly greeted with the error:


error: install-base or install-platbase supplied, but installation scheme is incomplete

WTF?

Google turned up nothing of substance, save for a link to an old subversion commit of distutils/commands/install.py. Taking this as a sign, I opened up my local copy of the file and a brief code read revealed the source of the problem: I was missing the install-headers option. So, I added the line:

    install-headers=Include

And was greeted by a different error:

install_dir site-packages/
TEST FAILED: site-packages/ does NOT support .pth files
error: bad install directory or PYTHONPATH

You are attempting to install a package to a directory that is not
on PYTHONPATH and which Python does not read ".pth" files from.  The
installation directory you specified (via --install-dir, --prefix, or
the distutils default setting) was:

    site-packages/

and your PYTHONPATH environment variable currently contains:

    '/Users/pwang/Library/Python2.6/site-packages:/Users/pwang/Library/Python2.6/plat-mac:'

Well, this was most disheartening. I was, after all, following the Python docs, which seem to imply that install-purelib would be appended to install-base. The above error message suggests that this was not the case, so I went back to the distutils source, and more code reading and tracing seemed to confirm this. So, I added an explicit $base to all of the config lines in my pydistutils.cfg, with a final result that looked like this:

[install]
install-base=$HOME/Library/Python2.6
install-purelib=$base/site-packages
install-platlib=$base/plat-mac
install-headers=$base/Include
install-scripts=$base/scripts
install-data=$base/data

This, finally, seemed to work. easy_install mercurial worked great, and everything installed into the proper locations. One thing to note was that the $base variable in pydistutils.cfg needs to be lower case.

Hopefully this entry will turn up the next time someone searches for “install-base or install-platbase supplied, but installation scheme is incomplete” and they are spared having to dig through the distutils source.

Below is a detailed description of how I make a brisket on my Big Green Egg, including my dry rub recipe.  My early attempts at this years ago were plagued with difficulties, and the meat didn’t turn out great, but I have finally figured out how to consistently do it well.  The single most important thing about smoking meat with the Big Green Egg is learning how to correctly build the fire.  If your fire isn’t built right, you will have nothing but trouble.  I describe the key aspects of this process later.

But first, let’s start with prepping the brisket itself.

Read More »

Our Bradley Class assignment for this week is to come up with our birth plan, and as part of that, I’ve been doing some research and reading about the eye drops they put on newborns almost as soon as they are born.

The “eye drops” are an antibacterial agent that prevents gonorrhea or chlamydia in the mother from causing and infection and possible blindness in the baby. Hospitals used to use silver nitrate, and now they use Erythromycin.

In my searches, I have found some people questioning the efficacy of Erythromycin in preventing such infections. Whatever the truth is about that, it’s entirely irrelevant in our case because from what I can tell, there is simply no reason to do this procedure on an infant whose mother does not have these STDs.

I found some web pages making the argument that since the vast majority of mothers actually get reasonable pre-natal care that tests for these STDs, and they get treated before they give birth, the entire practice is relatively pointless. Regardless of the financial and legal reasoning behind hospitals’ decisions to maintain this practice, it’s clear to me that it’s just another unnecessary routine that we will explicitly avoid in our birth plan.

Here are some of the resources and links I found:

Newborn Baby Eye Drops Explained

Newborn Procedures (including a section on eye ointments)

Wikipedia entry on Erythromycin

Google Answers thread about Erythromycin

After about two weeks of no activity, I finally got through to Ed and he notified me on Monday that work would resume on Wednesday 11/18 (yesterday). Unfortunately, the railing material didn’t get delivered yesterday, and all that managed to happen was that I met up with Jose in the morning to walk through the punch list of remaining work items.

This morning Primo was at the house around 9am (about the same time our pest control guy showed up) and he started painting the hallway bookshelves. Jose showed up a little while later and was walking him through the punch list as I left for work.

When I got home this evening, I saw that Primo had not only painted the hallway bookshelves, but he had also repaired the final bit of floor tile in the center bathroom and painted all the of the kitchen base trim.

   

The bookshelf paint had dried, so Crystal and I got to work moving the bulk of our paperbacks onto them. As soon as we were done with that, we took advantage of the new empty shelf space in the office bookshelves and put up many of the books that had previously been in overflow stacks.

   

(For the curious ones with sharp eyes, yes – the Discworld novels are in publication/chronological order.)

Also, I’ve uploaded photos of last night’s work on installing our HTD HD-R80 in-ceiling speakers. I haven’t placed the grills back on them because they have small adjustment switches on the front that can independently add or subtract 3 dB to the woofer and tweeter, and I want to hear how they sound with a variety of music before finalizing my switch settings. (Once the grills are installed, they are quite a pain to remove.) Also pictured is my old Aiwa receiver from college that I ordered off of Onsale.com or Ubid.com back in 1998. It gets pretty warm but it works quite well. We’re in the market for something more energy efficient.

       

More photos at http://pictures.electrictao.net/finish2.

Avid readers may have noticed that there has been a prolonged lull in updates… I basically didn’t update anything from the middle of September until now. I apologize for this, with the lame and utterly expected excuse that I’ve been busy. But in any case, your wait is over. (Merry Christmas!)

I have not only uploaded ALL the daily progress photos from the end of September through today, but I have also written detailed blog entries starting from the middle of September until up to Rob & Margaret’s wedding in mid-October. (I still need to do a couple more.) For those keeping count, that’s 13 albums and 19 blog entries, replete with inline photos. On a perfectly beautiful Saturday. Just for you.

Below is a helpful table of the new entries, complete with summary photo.

9/22 – Plumbing trim-out day 2
9/23 – Plumbing trim-out day 3
9/24 – Electrical trim-out, start of kitchen backsplash, and solar tubes!
9/25 – Electrical trim out day 2, backsplash day 2, and more attic demolition
9/26 – Kitchen backsplash day 3, cleanup and prep for flooring
9/28 – Kitchen backsplash day 4 (grout & seal), oven installation
9/30 – Main power turn on (electrical trim out, day 3) and start of hardwood flooring
10/1 – Flooring day 1: master bedroom, kitchen floor hardibacker
(No picture) 10/3 – More work on the upstairs bathroom; dealing with the deck change order
(No picture) 10/4 – Main sink turn on! First dinner in the new kitchen!
10/5 – Flooring day 2 (kitchen floor float), bay window underpinning
10/6 – Flooring day 3 (Guest bedroom floor board finger join), deck skirting
10/7 – Flooring day 4: floating the floor, finger join work in the guest bedroom
10/8 – Flooring day 5: sanding guest bedroom floors, installing kitchen floors
10/9 – End of an Era: removing the plywood barrier between the old house and new construction
10/9 – Flooring day 6 (laundry tile), Trex decking delivery, center bathroom work
10/12 – Flooring complete! (hallway, laundry tile), center bathroom work
10/13 – Installing kitchen and laundry appliances
10/14 – Moving back into the kitchen

Dorothy (whom Danny calls “Dory”) was back today, cleaning more glue off the floors in the hallway and kitchen. Jose’s crew worked on the deck today, cutting down pieces of Trex and screwing them into the joists.

In the morning, I had the pleasure of doing my first load of dishes and my first load of laundry.

   

Later in the day, we started unpacking boxes of kitchen items from the dining room and unpacking them into various cabinets and the pantry. Our friends who were staying with us for the wedding were very helpful in unpacking everything and getting everything moved in.

Photos: http://electrictao.net/gallery/kitchenmovein

It’s all starting to come together. A bit late, but better than never!

I worked from home part of the time this morning, but I took time off work to help Jose’s crew move all the appliances into place and finish out the laundry area.

The first thing we did in the morning was to cut a notch in the metal backsplash for our cooktop. Why did we have to do this? Because the dumb plumbers installed the gas line the wrong way. Rather than installing it upwards from the base cabinet, they ran it through the back wall. There’s a reason why the BlueStar’s gas receptacle points downwards…

   

Next, they worked on installing the dishwasher. Because our previous dishwasher was wired directly into the supply wire, it didn’t have a plug that we could take and reuse on the new one. So, I cut apart a spare computer power cord and Jose wired that to the dishwasher. I also had to get a universal dishwasher supply hose from Home Depot so that it could connect to the hot water line from the supply valve under the sink.

While at Home Depot, I also got a dryer vent duct, and while Jose and his crew worked on installing that, I got to play with the now-functional BlueStar range. Here is range in its final installed configuration, and here is first light, on the center 15k BTU burner:

   

While all this was happening, Trinity kept a patient watch from behind her gate in the dining room:

Before installing the washer, I recalled our very important lesson about that we’ve learned about the plumbers, i.e. that they can’t distinguish hot water supply lines from cold water supply lines, and I asked Jose to make sure that the water coming out of the laundry hot water valve was indeed hot. They opened one of the casements in the bay window, pointed the hose outside, turned on the valve, and after a brief wait, confirmed that it was indeed the hot water.

After installing the laundry appliances, they installed all of the cabinet hardware that Crystal and I bought at Home Depot the other day. The hardware works really well with the style and color of everything.

       

Also, the whole time that this activity was going on in the kitchen, Danny’s sister Dorothy was cleaning up the splotches of wood adhesive that Danny had let behind in various spots on the floor. She showed up in the morning and went to work on the master bedroom. She basically finished that today, and plans to finish the kitchen area tomorrow.

Earlier in the day, Jose and his guys moved the fridge back in and hooked it all up. Later in the evening, Brad, Shaown, and Adrian helped me give it a thorough cleaning, inside and out. Every single shelf was disassembled and handwashed or wiped down with 409 or Windex. You can see the array of shelves drying on the island counter in this photo:

More photos: http://electrictao.net/gallery/kitchenfinish

Follow

Get every new post delivered to your Inbox.