Here’s what worked for me.
- Download and install MinGW.
- Add x:\mingw\bin to your PATH. (Right click My Computer | Advanced tab | Environment Variables | Select ‘Path’ from the ‘System variables’ list | Edit | Append ‘;x:\mingw\bin’ to the end of the string in ‘Variable value’)
- Download and execute the PostgreSQL one-click installer.
- Download and extract psycopg2
- From within the extracted psycopg2 directory, execute the following command:
python setup.py build_ext --compiler=mingw32 build
Your goodies will be in the local build directory.
Posted on June 30th, 2009. One comment... »
I recently got a Lenovo T400 laptop at work. It’s a pretty nice laptop – good build quality, aesthetically pleasing, and not too heavy. My only two complaints are the placement of the FN and CTRL keys (they should be swapped) and the lack of a two button middle click on the touchpad. To solve the former would require a BIOS hack or a hardware mod, but I managed to solve the latter in software. In particular, I uninstalled the supplied UltraNav drivers and tried out the Synaptics driver from my old Dell XPS M1210. Worked like a glove. Fit like a charm.
Posted on April 9th, 2009. 2 comments... »
I was searching north jersey craigslist for some music equipment when I saw the following message:
Zero LOCAL results found. Here are some from NEARBY areas...
Awesome! Craigslist is finally serving up results from nearby locations. This is great news for users who live somewhere in between suburbia and larger metropolitan areas.
Posted on March 7th, 2009. No comments... »
Immediately after installing Google Chrome a few days ago, my firewall started reporting that GoogleUpdate.exe was attempting to connect to the internet — specifically to an-in-f***.google.com on ports 80 and 443. I thought to myself “Fine” and permitted the traffic. However, about 5 minutes later after I had already exited Google Chrome, I got the same alert. I continued getting this alert every few minutes until I got pissed off and uninstalled Chrome entirely. After restarting Windows, GoogleUpdate.exe was still requesting Internet access every few minutes. Next I found an entry in the Startup tab of msconfig, removed it, restarted, no dice. Long story short, it wasn’t until I manually removed all instances of Chrome and GoogleUpdate from the registry and cleared out Documents and Settings\***\Local Settings\Application Data\Google that this madness finally ceased.
Google Chrome: promising browser, ridiculous updater.
Posted on September 4th, 2008. 2 comments... »
Last night (or yesterday morning if you’re in Beijing) Usain Bolt of Jamaica won the Men’s 100m by a landslide, proving himself the fastest man on the planet. Along the way he also proved himself the most arrogant athlete in the 2008 Olympics.
With 20m left to go, Bolt had the lead by a significant margin and decided it was a good time to stop running and start celebrating.

The commentators said he could have finished a whole tenth of a second faster if he wasn’t busy beating his chest.
There’s no doubt Usain Bolt deserves the gold medal for his athletic ability, but he also deserves a bag of manure for his non-existent sportmanship.
Posted on August 17th, 2008. 3 comments... »
This morning I decided to test drive Firefox 3. There was a lot of hype about the release of Firefox 3—that it would greatly improve performance, reduce memory usage, improve usability, enhance your sex life, et c.—so I was excited to test it out.
The following tests were performed on healthy copies of Firefox 3 and Opera 9. This is not a strict benchmark test; your experience may be different.
| Action |
Memory usage (mb) |
Comment |
| Firefox 3 |
Opera 9 |
| Run browser; stare at blank page for a few moments |
31 |
14 |
OK, Firefox 3 has already claimed the equivalent of an instance of Quake 2. This is supremely counter-intuitive, but, much like hiked gas prices, I’m used to it. Opera’s usage is about half that of Firefox’s. |
| Minimize browser; come back 5 minutes later |
35 |
14 |
I did not even touch Firefox and it decides to claim another 4 megabytes of memory. Maybe Mozilla has adopted a boot up strategy a la Windows? OK. |
| Visit plain google.com (not iGoogle) |
53 |
17 |
Firefox claims another 18 mb. Keep in mind the complete source for www.google.com including markup, images, scripts, et c. amounts to just over 8 kb. I understand there is a lot of behind the scenes activity in a browser—caching, management of cookies, uncompressing markup, storing and blitting images, DOM upkeep, script parsing and execution, et c.—but what is Firefox doing that Opera isn’t? |
| Open a new tab |
54 |
17 |
Good! |
| Close google.com tab |
54 |
17 |
Also counter-intuitive, but I’m guessing it’s the phenotype of a performance heuristic: If the user is opening tabs, chances are s/he will open one again, so don’t waste time deallocating if we’re probably going to reallocate. |
| Visit facebook.com (home page, not logged in) |
59 |
24 |
OK. Not bad. |
| Login to Facebook |
71 |
37 |
Facebook has a pretty intensive front end. Lots of JavaScript, XHR, images, styling. 71 mb is better than FF2 probably, but, again, how is it that Opera is doing the same thing with half the memory? |
These tests were performed slowly with plenty of time in between each action. How about a “real life” example?
Practical test: Open browser; rapid fire load Google News, MySpace, and Facebook in their own tabs; as pages are loading, click a news article, tab over & login to MySpace, tab over & login to Facebook; visit someone’s Facebook profile.
Practical results: Firefox 3, 89 mb; Opera 9, 51 mb
(Personal) conclusion: I admire and appreciate the Mozilla dev team’s efforts in reducing Firefox’s memory footprint. But the question still remains: WTF is going on in Firefox that makes it use roughly double the amount of memory that Opera uses? I’d be willing to accept this if there were a palpable performance benefit in Firefox, but it’s not there! In fact, to me, Opera 9 feels more responsive and quicker overall than Firefox except in certain edge cases, e.g., Google Maps, Gmail, or anything with really intensive JavaScript. These cases along with Opera’s lack of a Firebug equivalent are the sole reasons why I haven’t completely switched over to Opera.
Posted on June 19th, 2008. 9 comments... »
If your Verizon FiOS-branded Actiontec MI424-WR’s router config page is saying your login credentials are wrong even though you’re certain they’re right, check what browser you’re using. If it’s Opera, it’s not your fault. The latest firmware as of 16 Jun 2008 on the Actiontec MI424-WR is not compatible with Opera 9.50.
Posted on June 16th, 2008. No comments... »
Earlier today I sent an SMS post which did not go through because my AIM bot was offline. (Thank you, power outages.) What surprised me was that I actually received an error message from AIM short code 246246:
AIM
psiccbot is not avail.
1 login <sn> <pass>
2 status <msg>
3 send <sn> <msg>
h help
I didn’t recall seeing anything like this, so I decided to explore a bit. I replied with an ‘h’ to see if there were any other commands:
AIM -1/2-
Help
Send text msgs to 246246 to use AIM features. Examples:
status: status out shopping for new car
send IM: send jonny1 hi jon, I am back
AIM -2/2-
away: away at Moe's for lunch
avail: avail back at mydesk
add: add nancy123
del: del nancy123
b back to menu
It appears AIM is now allowing users to sign on and manage their accounts entirely over SMS. Niiice! I’m really starting to appreciate AIM.
Posted on June 15th, 2008. One comment... »
Today I ran into the IE6 window.onload issue and subsequently came across Dean Edwards et al’s solution via Google. This solution was posted in 2006, and since then YUI and other JavaScript frameworks have gained popularity, but I still prefer the ad-hoc “non-framework” approach. YUI is a comprehensive framework and technically outstanding in terms of modularity and cross-browser compatibility. It facilitates callbacks and offers lots of configuration options in its high level components. However, it’s not perfect.
For example, I tried using the YUI AutoComplete control in a DIV element that hopped around the DOM tree depending on the state of the application. After moving from its original position, YUI failed to keep track of the control and it became unresponsive. Because the YUI codebase is such a beast, patching was not feasible. I ended up writing my own simple autocomplete control.
Additionally, even with its modular “include only what you need” approach, YUI is heavy. Getting back to the onload issue, if I wanted to use YUI’s onDOMReady method, I’d be pushing roughly 20kb of js to the end user—and that’s minified. By contrast, Edwards’ init.js amounts to around 2kb (with comments and not minified) and does not bloat the DOM with an extra namespace other than init.
However #2, in the version I downloaded, init.js provides no way to add onload events dynamically—you have to edit init.js itself. As a simple upgrade, I introduced an add method to init which allows you to push functions onto a queue which get called in succession in the main init() function. The add method has the following usage:
init.add(fn, context, param1, param2, param3, etc);
where
fn is a function reference
context is the execution context (optional)
paramN are function parameters (optional)
Download the upgraded version of init.js here.
Feedback appreciated!
Posted on June 12th, 2008. No comments... »
And it appears to be a lowercase serif g as opposed to the uppercase sans-ish G we’re used to. Interestingly Google claims it’s purple even though it looks blue to me.
“Hi! I’m little g, big G’s little brother. Ya know, the guy the between the yellow o and the green l?”
I wonder if we’ll see a new lowercase Google logo soon. Maybe the marketing geniuses over there thought the capital G was too intimidating, and that a lowercase g was more appropriate for the company’s purely imaginary “underdog” persona.
Posted on May 30th, 2008. No comments... »