$theTitle=wp_title(" - ", false); if($theTitle != "") { ?>
It's a blog.
In: Uncategorized
22 Oct 2011Don’t ask why I was spending my Friday night this way, but I was just reading about Juno, the ISP that I assumed went out of business a decade ago. It turns out that they merged with NetZero (another ISP I forgot all about), and formed United Online. (The interesting thing about their merger is that they were in a ferocious legal battle, and somehow decided that, rather than continuing to sue each other, they were better of merging into one company. That seems like the least likely outcome.) Wikipedia mentioned that United Online also holds a third Internet service — Kmart’s BlueLight ISP. This “WTF” sentence led to me reading a lot about Kmart.
So first things first, Kmart is still in business. I was surprised to learn this. I asked my roommate and he was too. We both just kind of assumed that, like Juno and NetZero, they had gone out of business when their names faded from our memory years ago. It turns out that Kmart has about 1,300 stores in the United States.
I glossed over the company’s history, but it’s interesting to note that the company was started by Sebastian Kresge — then working as a traveling salesman selling to Woolworth’s — in 1897. In 1912 he incorporated S.S. Kresge Corporation. In 1918, the corporation was listed on the NYSE. In 1924, Kresge’s personal net worth was estimated at $325 million. (In 1924 dollars.) It wasn’t until 1977 that S.S. Kresge Corporation was renamed to Kmart.
But back to random facts about Kmart. It turns out that, between 2004 and 2005, Kmart bought Sears. I apparently failed to notice this at any point in the past 6 years. The purchase was a mere $11 billion. The name was changed to Sears Holdings Corporation. (So it’s interesting to note that Kmart bought Sears, but Kmart is now a brand of “Sears Holdings Corporation,” which gives a confusing sense of who bought who.)
It also turns out that Sears Holding Corporation owns a lot more than I was aware of.
For example, Kmart bought Waldenbooks in 1984, and in 1994, Borders and Waldenbooks merged.
The Kmart-OfficeMax lineage hurts my head, but Kmart more or less bought OfficeMax in 1990 before taking it public in 1995 and then selling off its remaining shares.
Also in 1990, Kmart bought Sports Authority. Like with OfficeMax, Sports Authority was spun off from Kmart proper in 1995.
And as for Kmart’s ISP? It, too, has a confusing history. They started it as a dialup ISP in 1999, as a free service supported by in-browser ads. The company was later spun off from Kmart. In 2001, after becoming a paid service, Kmart bought BlueLight back. In 2002, Kmart filed for bankruptcy, and that’s when United Online stepped in to purchase BlueLight. (It seems that Kmart filed for bankruptcy protection in 2002. It emerged from bankruptcy in 2003, and in 2004 it purchased Sears.)
Okay, so maybe I’m a little weird… But I found this moderately fascinating.
In: Uncategorized
21 Oct 2011I think most geeks get a ton of email. I’ve been rather selective in what lists I join (and what mail I just auto-delete at the server level), so I only get perhaps a couple hundred emails a day now.
For various ridiculous reasons, searching a mailbox is hard. Most of my mail clients will do it, but sometimes I really want to do it myself because I want to be more exacting. Lately I’ve been tinkering more and more with using IMAP from the command line. Partially it’s that IMAP is really just a little bit unusual and kind of intriguing. But mostly, it’s just that, from time to time, it’s easier for me to just send some manual IMAP commands if I know what I’m doing. (For example, I have absolutely no idea how to subscribe to a particular folder in any of the mail clients I have available. I could wade through the menus and maybe find it, but it’s easier for me to just use Net::IMAP to subscribe to the folder.)
Like most implementations, Ruby’s Net::IMAP library provides a search method. And, like most implementations, it does a very poor job of documenting what is supported. At the risk of sounding like I’ve lost my mind, I actually found the IMAP RFC (3501) to be the easiest bit of documentation to understand. Below are some examples:
You can chain keys, so the following is a valid search command:
FROM "matt" SUBJECT "bacon"
But what isn’t abundantly clear is that search terms are combined with a logical AND, so the above will only match mail from Matt with “bacon” in the subject line.
This appears to be the way to get a logical OR instead:
(FROM "matt") OR (SUBJECT "bacon")
After spending a while trying to get all possible keys for a text search — e.g., (FROM "foo") OR (SUBJECT "foo") OR (CC "foo")... — I realized that there’s an easier way: the TEXT key, which searches headers and the body. So for my generic search method, the search simply became TEXT "foo".
You may also find some of the other keys interesting, like the ability to search for RECENT or FLAGGED. I don’t intend to provide an exhaustive list here, however.
In: Uncategorized
13 Sep 2011There are a lot of things in politics that I believe but don’t feel too strongly about. But one thing that makes absolutely no sense to me is trying to ban gay marriage. North Carolina has become the latest state to put forth a constitutional amendment banning gay marriage.
So first of all, the concept of amending the constitution to take away a right is unfathomably misguided. Even if gay people were actually some sort of menace to society, the constitution is what gives rights.
But here’s what’s always bugged me. I’m a Christian. I went to Catholic school. But this is one of the reasons I don’t go to church anymore. What the church teaches and does are so wildly incongruous from what the Bible says. True, you can find verses that reference homosexuality being a sin. But alongside them, you’ll find verses that use equally-harsh language against fish “that do not have fins or scales.” No one argues that we should amend the Constitution to ban eating shellfish.
What I took away from the Bible wasn’t a handful of verses. But I can sum it up in a couple.
First, “Love your neighbor as yourself.” Unlike most of the Bible, this is actually a quote from Jesus. (And, in fact, in Mark 12:31, Jesus states that, between this and that there is only one God and Savior, “There is none other commandment greater than these.”) Besides the fact that Jesus appears to make a rather big deal of this point, it seems to me like it’s also one of the over-arching concepts that Jesus tried to get us to understand.
Second, when Jesus happened across an adulterous woman — a sin punishable by death in the Bible — Jesus left us with some more pretty clear guidance: “He that is without sin among you, let him first cast a stone at her.” Elsewhere, there’s further indication that we should leave the castigation and judgment of others to God, and focus on trying to lead righteous lives ourselves.
If I were to attempt to summarize the Bible in a paragraph, I think both of these verses would make their way in. These are perhaps the most well-known verses on the two subjects, but there are countless other times the same concepts are expressed in the Bible. To me, they’re fundamental to what Jesus taught.
So it boggles my mind that someone who read the same book as me could come away and say, “This book is all about how we should amend our constitution to take rights away from gay people.” Maybe the version I read was a misprint?
In: Uncategorized
7 Sep 2011On Aeolus Conductor, we’re using Rails 3. Although I’ve been using Rails for years, some part of Rails 3—namely, Bundler—are still relatively new to me.
The problem I ran into is that we have a :development, :test group defined, but it’s being installed in all environments. This is as described, but inconvenient when you’re trying to ship two separate RPMs—one package for end-users, and a -devel version for developers that depends on the gems in the :development and :test groups.
It turns out that, by design, bundle install will install all gems in all groups, but Rails will only load those in the relevant environments. They have a good reason for doing this, but for certain use cases, this is inconvenient. It's easy enough to skip this: bundle install --without=development test does the trick.
But what trips me up is that it's a "remembered setting," something which is poorly-documented as far as I can tell. (But maybe I'm looking in the wrong places.) The problem is that there's no apparent way to un-remember these flags, which is the subject of #867. Right now, you're left manually editing .bundle/config to remove them. This works, but is really annoying. (#1006 argues that the whole "remembered options" feature is counter-intuitive and should be excised.)
In: Uncategorized
26 Jul 2011Dear Microsoft,
I’ll admit that, as a Mac user who develops software for Linux at an open-source shop, I’m not exactly predisposed to being your biggest fan. But I think you’re mostly okay. You’re like Scott Brown — I wouldn’t vote for you, but I’m surprisingly okay with you.
There’s just one little thing… Outlook Web Access 2003. What happened there?
Did you ever realize that you’d leave people finding this as their best option for searching their email?
$ irb
>> require 'net/imap'
=> true
>> imap = Net::IMAP.new('mail.example.com')
> # snipped...
>> imap.login('user', 'password')
=> #, raw_data="RUBY0003 OK LOGIN completed.\r\n">
>> imap.select('INBOX')
=> #, text=" SELECT completed.">, raw_data="RUBY0004 OK [READ-WRITE] SELECT completed.\r\n">
>> imap.search('SUBJECT "top 25"')
=> [1160, 1161, 2755, 2834, 2857]
>> imap.fetch(1160, "BODY[HEADER]")
...
Yeah. That really wasn’t cool. And the thing is, search is a server capability (that Exchange supports!), so it’s not like it was something that webmail couldn’t support. (In your defense, though, Outlook Web Access 2003, every IMAP mail client I’ve ever tried wants to index gigs and gigs of email in that mailbox before I can use it, so you’re only a part of the problem. The fact that no one has ever made a good email client isn’t your fault.)
In: Uncategorized
14 Jun 2011Some people can’t sleep because they’re excited or anxious about the next day. Other people can’t sleep because they’re sad or glad or guilty or proud, or because the birds outside are addicted to methamphetamines and never quit chirping. But here’s why I can’t sleep tonight:
What do you think would be involved in getting NTP (or a reasonable facsimile thereof) written in JavaScript and using HTTP? And how accurate do you think it would be? Not a lame thing where you take the time from some random webpage and claim that as current time, but an implementation of Marzullo’s algorithm in JavaScript for sourcing time from multiple servers, a means for calculating round-trip latency, a means for tracking clock drift between requests, and something like a little Sinatra app to just serve Time.now.utc.to_f and set no-cache headers? (Actually, time.to_f isn’t terribly precise, though I doubt you’ll be troubled by this in the real world.) How accurate could you get it? I doubt you could rival NTP, but could you get to the millisecond level? Within 10 milliseconds? Surely within 100 milliseconds?
If you’re willing to sacrifice sub-second accuracy in favor of not needing a list of special “time webservers”, HTTP headers indicate the time, and any webserver worth its salt should be synced to NTP. Though it seems many aren’t, so I wouldn’t count on this for anything remotely important. Plus it requires you to be able to parse HTTP headers that many frameworks might not expose.
In: Uncategorized
1 Jun 2011As those of you who read my blog, follow me on Twitter, or are my friend on Facebook surely know, I’m feuding with Verizon FiOS. They randomly decided to start charging me more money, and have been impossible to get ahold of, and absolutely indifferent when I finally got someone on the phone.
Really, I want to start my own ISP. Our motto would be “We’re not out to screw you.” Here are some of the things I’d like to do:
But some of what I want to offer is non-technical, and I think this is even more interesting, if only because no one offers it today:
In: Uncategorized
30 May 2011I jump between a Mac at home and Linux (GNOME) at work, but there are two features (unknown to far too many people!) on both platforms that I can’t live without:
In: Uncategorized
30 May 2011I’ve been a loyal FiOS customer for about a year and a half. I pay $69.99 a month for a 25/15 Mbps pipe. Aside from one absolutely miserable experience trying to speak to someone in billing who was able to update the expiration date on my credit card (it took four people, one of whom literally did not speak English, and about 45 minutes), I’ve been pretty happy. The connection is pretty reliable.
But then they randomly raised my rate from $69.99/month to $79.99/month. No idea why, no explanation given. Worse, if you visit their site, $69.99 is the rate advertised, with no fine print about $79.99/month. They just randomly jacked up my rate to see if they could.
So I just logged into my Verizon account, intent to do something about this. And lo and behold, I found this:
So there are actually two problems here. One is that the $69.99 plan — the one I signed up for and have been paying for all along — randomly jumped in price on me, but is still being sold. It’s not a case of the rate rising to meet inflation or something; it’s a case of them suddenly charging me more money for the same service. Second, this isn’t even accurate. It states that my plan is $74.99/month. It’s actually $79.99/month:
(My history actually goes back much further. In total, I’ve paid Verizon nearly $1,250.)
While scratching my head over this discrepancy and what could be going on, a Live Chat window popped up. Perfect, I thought!
They hung up on me:
So now I’ve gone from being a little confused about why my rate went up to being incensed. They’re overcharging me, and when I asked them about it, they disconnected.
More confusing still, when I went back and selected the 25/25 plan for $69.99, it implied that I was signing up for a one-year contract, when the drop-down on the page indicated I was viewing a month-to-month plan.
So I really like the fast 25 Mbps download speed, but I really can’t understand paying more than $70/month for Internet. RCN and Comcast both send me several offers in the mail, and can greatly undercut the prices Verizon is offering, albeit for slightly slower service. I think Verizon has just lost me as a customer.
In: Uncategorized
29 May 2011Dear software developers:
When your software “does the right thing” with intelligent defaults and a little cleverness to make my life easier, that’s awesome. Job well done! Smart software makes the world a better place.
But there are some applications that let their smarts go to their head, and they become cocky. They force me to do things their way, to use the software its designers used it. If I want to do something different, I’m wrong.
There are lots of examples of applications that get this right. They’ll warn you if you’re doing something stupid, and they try to structure their GUIs to make it hard to do stupid things. But, at the end of the day, if you’re really sure you want to do something it thinks is stupid, it will let you. Because, after all, us humans are the bosses.
But here’s a perfect example of where it all goes wrong: setting up a mail account in a mail client. It prompts you for your name and email, and you click next, expecting to fill in the account details. Instead, it tries to find them for you. This is mildly irksome for me, as the mailserver I was connecting to has a non-obvious hostname, and my ISP blocks outgoing mail 25, so detection of incoming and outgoing mailservers both failed, and it took me about 30 seconds of waiting for this to happen.
But it wasn’t that big of a deal. I plugged in the correct IMAP server hostname, and just left the SMTP server as-is, since I’m not actually going to send any email.
Except, I can’t save. Every time I try, it goes off to validate the servers. It can’t reach the mailserver, so it tells me my information is wrong. There is no “Are you sure you want to save?” prompt. The SMTP server isn’t reachable, so I can’t add an account. I tried manual setup, which sounded promising. It bypassed trying to guess my credentials. But it turns out that it, too, insists on validating your accounts before it will save them.
I can see why this happens. Some developer somewhere thought, “It makes no sense to add a mailserver account unless both the incoming and outgoing accounts work. I’m helping my users!” But in actuality, they’re just getting in my way. Now I have to install some sort of SMTP server on my laptop, just to fake out my mail client so it will have something functional to connect to and allow me to save my account.
By all means, write smart software. Use defaults that work for the majority of people. Warn me if I do something that looks wrong. But don’t make your software refuse to do what the user instructs.