Thursday, August 26, 2010

Backordered

I just wanted to drop a note to the Interwebs that, if you are looking for the Nexus One car holder dock, know that LetsTalk.com (HTC is outsourcing to them to handle the sales) is currently lying about when the backordered items will be available. Here's a little rough history of what "backorder" means to LetsTalk.com:
  • 2010/8/15: Order placed. "In stock on 2010/8/18."
  • 2010/8/18: "In stock on 2010/8/20."
  • 2010/8/20: "In stock on 2010/8/23."
  • 2010/8/23: "In stock on 2010/8/25."
  • 2010/8/25: "In stock on 2010/8/29."
I still haven't cancelled my order because I want this thing, but I thought I would put this out there so that no one else is surprised. Hopefully it becomes available some time before the heat death of the sun.

(The same behavior is holding true for the desktop dock, but I'm not interested in that one.)

Thursday, January 28, 2010

"Unlimited"


Math problem for you: What percentage of Unlimited Megabytes is 73 Megabytes?

Saturday, October 24, 2009

Make money posting to Slashdot

Today I'd like to share a fun way to make some spending money by posting to Slashdot.  I used this technique successfully over the course of two years.  I had a lot of extra time back then, and it's really not worth my time anymore, but maybe someone else will give it a try.

Step 1: Find a good referral program
Back in 2003, I was a happy LunarPages web hosting customer.  They provided a pretty good service for the $7.95/mo fee and while I wouldn't recommend them today (because there are far better tech out there), I definitely felt they were a steal back then.  Soon after signing up, I found out that they offered an affiliate program that anyone could join.  The offer was about $50 per referral.  The referral had to stay a customer for a certain amount of time for it to count, but at $50 each, this was huge to me.  LunarPages still has a referral program, and I understand that the referral amount is even higher today.

The payoff for a referral with LunarPages is great, and their service is very inexpensive.  As an aside, I found it intriguing that LunarPages was willing to pay about half a year's worth of hosting service for a successful referral, showing exactly how important new customers are to their business.  I should have added another modifier to the step heading though: Find a good, relevant referral program.  Slashdot users are exactly the crowd who will be purchasing their own e-mail and web hosting services.  It hit me one day that if I could connect this targeted crowd with the LunarPages product, I could net some good spending money without doing much work.

Step 2: Advertise with impunity
The Slashdot community is very sensitive to advertisement.  If a study was ever conducted, I predict the intersection between Slashdot users and Adblock users is much higher than the general web using public.  With this in mind, I knew I couldn't just spam in the comments.  The solution turned out to be subtle and simple: put the ad in your signature.  For those who don't know, a user's signature is a small piece of text that is added to the bottom of every message you post.  This concept came from e-mail, but forums picked up the idea and Slashdot kept it alive with their commenting system.

Two things are true when you create a signature.  First, no one seems to question the fact that it carries an ad, as long as your post is well received.  Relevance helps here, but I found that humor with a dash of relevance was really the easiest way to grab attention.  Second, not everyone will see it.  This second point means that you will be cutting down on the potential buyers, but because of the way Slashdot works, it also means you're further targeting your message.  Slashdot doesn't show signatures if you're logged out, so only people who cared enough to create an account and login will see it.

Step 3: Be visible
I have a theory about Slashdot that is probably not groundbreaking in web company circles: people don't read very far down the screen.  The graph of x users that scroll y percent down the page is probably a very nice curve that drops off quickly and then slowly approaches zero.  Think 1/x.  I observed the value of getting your comment at the top of the list, and the only way to do that is to post quickly.

The other visibility factor on Slashdot is the comment moderation system.  Each comment can be moderated by a sampling of other users.  As a reader, you can filter out the low rated comments, and by default anything less than 3 points is relegated to a far less visible status.  If a comment reaches a net of 5 positive votes, it will be seen by anyone who reads the comments on a particular story.  So your goal here is: +5 and first post.

It turns out that it's hard to be the first post.  It's somewhat less difficult to score a +5.  Good luck for you, the first couple of posts are usually trolls (the first one often exclaiming their success in being first), so as long as you can be the first +5 post, you'll guarantee that anyone who reads the comments will defeinitely see your post, and your ad.  I discovered a very simple technique.  Slashdot users will rate any relevant Simpsons quote "+5 Funny."  The Simpsons have covered every conceivable topic, so it stands to reason that there is a relevant Simpsons quote for any given Slashdot discussion.  If I ever go back to school for a Master's degree, I would strongly consider creating software that could cough up a relevant Simpsons quote for any given topic as my thesis.  So the technique is to wait for a new Slashdot topic, quickly digest the content, and using my complete knowledge of all of the good Simpsons episodes, post a comment that is mostly based off of a Simpsons quote.  I should go back and measure, but almost every post I made was scored +5, and was high enough that my advertisement was seen by tons of users.

The Results
If you have a real job, my results will sound like peanuts.  I've since grown up, graduated from school, been married, had two kids, et cetera, so this kind of work is no longer appealing to me, but at the time it was a great way to score some extra dollars without appearing to do anything more than what I was already doing (that is, reading Slashdot and working on my ubernerd street cred.)  Caveats out of the way, I managed to be paid just under $600 per year for two years.  I only really tried for about half of both of those years too.

The takeaway?  Marketing is real.  By hacking it myself, I found out how to score a meager return on my time investment.  You need to make sure people can see it, and hooking up the right people is even better.  And dropping a Simpsons quote never hurt.  ;-)

Sunday, September 6, 2009

(In)accessibility

There has been a very positive trend in recent years toward e-government. Federal, state, and local governments have been making it possible to access services and documents on their web sites, which increases the quality and accessibility of their services while reducing their own staffing needs.

This is a welcome improvement and a perfectly natural progression for government services. However, it's still something of a wild west out there, and many governments make misguided decisions when bringing their services to the net. Take, for instance, Prince George's County (PG).

I recently needed to look up the specifics of some laws in PG. I discovered that the county has posted the entire contents of its code online. So far so good. After a few clicks I had navigated to the Subtitle and Subdivision that concerned me. Ah but at this point we find that it really is too good to be true. To read any single section (which actually contains the interesting text) within the Subdivision, you have to download a Word (!) document, which might contain an insultingly small amount of text, since sections themselves are typically short.

I can't fathom the design decision to make each section its own Word document, so I won't try. But what I can say is, besides being completely braindead, the web site is emphatically not accessible. First, in order to read any section of the law, you must have installed a document reader that is compatible with Microsoft Word. Until I upgraded my copy of OpenOffice to the latest, I was unable to even open these files. Second, I'm certain that this odd way of presenting the data causes a lot of problems for screen readers and probably gives the finger to blind people and anyone who uses accessibility software.

Of course, as I did for the StimulusWatch data, I'm immediately curious about the possibilities for scraping this data out of the web site. Spidering it is straightforward, so the interesting work will be in parsing the Word document and putting it into a nicer format. It might also be possible to just create a proxy web site that requests, converts, and displays the relevant sections on the fly. I'll add this to the list of interesting code problems for our POTS group. I think we could make something that would be far more useful, accessible, and less embarassing than the current Prince George's County web site.

Friday, August 7, 2009

Subversion pain

I'm a firm believer in source control. I will not work for a company that refuses to use it. But, not all source control is created the same. At our office, we have been using subversion for some time since it was an easier transition from CVS. That's a shame, since in order to work in a branch as I often do, I've got to do the following contortions:

# work for a while, decide to merge changes in from the trunk
$ svn st -q
# oops, I have local changes and I don't want to commit them yet
$ svn diff > backup-my-changes.patch
# for each changed file
$ svn revert files
# review the logs to determine the last revision I merged from trunk, and the latest revision from trunk
$ svn log -v | less
$ svn merge -r123:456 ~/svn/trunk .
$ svn commit -m "Merge -r123:456 from trunk"
$ patch -p0 < backup-my-changes.patch
$ rm backup-my-changes.patch

On the other hand, I've been getting a lot of exposure to git over the past year or so and the equivalent workflow is something along these lines:

# work for a while, decide to merge changes in from the trunk
$ git rebase master

So you see, not all source control packages are created equally. Branching is so simple and useful in git that I never knew what I was missing until I started using it. My workflow is often:
  • work on experimental changes
  • receive request to work on another task
  • finish task, return to experimental changes
  • repeat
In git this is all taken care of for you by using git-branch and git-rebase as necessary. There's not nearly as much thinking involved as in the subversion workflow.

I don't think I can convince management to let us switch to git though, since it is a more radical change and some developers might not like change. Pity, that.

Thursday, July 30, 2009

Age as Defined by Emacs Release Notes

Emacs is (considering) dropping support for some operating systems that I have actually used! I'm officially getting old.

An excerpt from NEWS.23.1:
** The following platforms will be removed in a future Emacs version:
If you are still using Emacs on one of these platforms, please email
emacs-devel@gnu.org to inform the Emacs developers.

*** Old GNU/Linux systems based on libc version 5.

*** Old FreeBSD, NetBSD, and OpenBSD systems based on the COFF
executable format.

*** Solaris versions 2.6 and below.
Plus some others that I haven't used.

Sunday, July 26, 2009

Contractual record

A self respecting geek father wouldn't be a complete person unless he scrambled to write some Python to help him keep track of the duration and time between contractions. I just worked this manually from the command-line but you could totally turn this into an application with graphs and charts and people would buy it.
import time
timings = []

def start():
timings.append([time.time()])
if len(timings) > 1:
diff = timings[-1][0] - timings[-2][0]
print "Since last: %s (%.2f seconds)" % (howlong(diff), diff)

def stop():
s = timings[-1]
s.append(time.time())
print "Duration: %.2f seconds" % (s[1] - s[0],)

def howlong(t):
v = (t // 60), t - ((t // 60) * 60)
return '%d minutes %.2f seconds' % v