This will be my second post written from my iPhone. I'm currently in the middle of nowhere in Illinois at Jessi's mom's house. We'll be here until the 30th, which means I'll have some work to do on the trip. On my previous visits here there was always a wifi network available from one of the neighbors who was kindly sharing his sattelite Internet connection with the rest of the town (it's a very small town and they can't get cable or DSL out here). Sadly it turns out that someone had been using up his monthly bandwidth allotmen so that's no longer available to me. Hence me writing this entry from my iPhone.
Fortunately, I came prepared to work without Internet access. I had planned to do some work on the flight over here, so before I left I created a new Parallels virtual machine and installed a copy of Gentoo Linux in it, and set up a lighttpd server with PHP and Python running in FastCGI as well as SQLite and MySQL so I could do both PHP and Django development without having to only guess at whether or not it would actually work (technically this wasn't necessary for Django since it comes with a lightweight development server built-in, and OS X comes with SQLite installed standard, but I figures I might as well).
I also tried setting up Tinyproxy on my iPhone so I could share my iPhone's EDGE connection with my laptop for browsing, but for some reason it doesn't seem to be working even though I had no problem with it at home.
The end result is that, even though I have no real Internet access to speak of, I can still do my work. I can even keep in touch with everyone thanks to my iPhone and meebo, and, if the need were to arise, I could always set up an SSH tunnel through my iPhone and get SFTP access to my webserver (or any other, for that matter) that way. So even way out here where they don't even have DSL, I'm still fully connected. This is one of those times where, even though I spend pretty much all my time working with technology, I'm still completely amazed by it.
Now, I believe, it's time for dinner.
This is, oddly enough, another iPhone post. I know I said I wouldn't really be commenting on it any more, but this is a post that will be useful to other people and isn't relevent only to iPhone owners. Really, this has more to do with email than iPhones.
The story starts out, however, with my iPhone. One annoyance of the iPhone is that it doesn't have any spam filtering capabilities for your email. Whatever shows up in your inbox shows up on your iPhone. This isn't necessarily a problem for everyone, but it is for me because the nature of what I do requires that my email address be easy to find and easy to read. So I get a lot of spam. And I use a client-side spam filter to deal with it (specifically, the one built into Apple's Mail, but that's not so important). As a result, having my iPhone check my mail automatically didn't work so well. Every 15 minutes (the period I had it set to check email) it would ding to alert me that I had mail, only for me to find that it was, almost without exception, spam. So I needed a way to filter my email before it got to my iPhone. There are a couple way that could be done. The most obvious is probably to install something like SpamAssassin (a server-side spam filter) on my email server. But I didn't really want to do that. I've never really liked SpamAssassin, and maintaining it can be a chore.
There is, however, a very reliable and very accurate server-side spam filter available that I actually already used. That would be the spam filtering offered by Google's Gmail. Applying that spam filtering to my regular email was actually very simple and in some ways increased my flexibility in terms of ways to deal with my email. What I did was this:
- On my email server, set my email addresses (josh@dydxtech.com, josh@joshourisman.com, and a couple others that I keep around for legacy support reasons) to forward to my Gmail accounts (one for personal, and one for business).
- Create new, private email accounts on my email server. These are where all of my email is going to end up, but I'm not going to publish the address anywhere or tell them to anyone.
- Set my Gmail accounts to forward to the appropriate private email accounts
- Transfer my archived email from my old accounts to the new private ones
Pretty simple, as long as you have a basic understanding of how email works. Basically email goes to my public email address, is forwarded to Gmail which filters out all the spam very reliably, and is then forwarded to my super-secret, private email account. All mail sent from that account has a from and reply-to address of my private account, so it's difficult (though not impossible) for people to determine the addresses of my private accounts thus cutting nearly to zero the amount of spam that I ever have to deal with. Gmail, of course, isn't perfect, but if some spam gets through all I have to do is log into my Gmail account and mark the offending message as spam there. Similarly if I'm not getting an important email I can log into my Gmail account and check the spam folder there and mark it as not spam if necessary.
So what does all this have to do with carrots? Well, that comes in at the last step: transferring my archived email from my old accounts to my new accounts. This turned out to be the most difficult step, although it didn't have to be. It sounds easy enough: set up both the old account and the new account in your mail client, drag the messages/folders from the old account to the new account. Done. It actually worked exactly like this for my work account. But I've only had that account for a little over a year, so there isn't all that much email in there. My personal account, on the other hand, contains my archived email going all the way back to September 6, 2000 when my Carleton College email account became active (it was from my dad). Sadly all my email from high school and earlier were lost that same day due to me being naïve enough to think that now that I was in college I could trust the IT people to know what they were talking about. They didn't, and I lost several years worth of email because of it. Come to think of it, that's probably why I do what I do all these years later. I also, in the process, found this gem sent on December 30, 2000, it was the very last email I received in the year 2000:
             \     /
              \\   //
               )\-/(
               /o o\
              ( =T= )
              /`---'\
         ____/ /___\ \
    \   /   '''     ```~~"--.,_
 `-._\ /                       `~~"--.,_
------>| Â Â Â Â Go Carrot! Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â `~~"--.,_
 _.-'/ \                            ___,,,---""~~``'
    /   \____,,,,....----""""~~~~````
So anyway, the problem I was getting to. Basically, when trying to copy all that email over (nearly 6000 messages) it wasn't working. I'd try and copy it only to find that I was ending up with some tiny subset (usually less than 500) emails in my new account. So I tried splitting it up into smaller quantities. Same problem. I spent a good chunk of yesterday trying to fix this. This morning I woke up to find only about 200 messages in my account. So I finally put a little extra thought into it and realized what I was doing wrong: I had SSL turned on. All IMAP traffic between my computer and my server was being encrypted. That meant it was going slower that it normally would be. That meant very long copy times, the potential for time-outs, and the potential that my client would decide to synchronize it's folders in the middle of a copy. Seemed like a likely culprit. So I turned off SSL and tried again. The first thing that I noticed was that the transfers were suddently blazingly fast. I had known there would be a speed different, but the actual slowdown you get in email tranfser when using SSL is vastly more significant that I had expected it would. The result? Everything copied over perfectly in one try.
So really there are two lessons in all of this: 1) a good way to filter the spam out of your email before it gets to your iPhone (or other email device that lacks it's own spam filter, or if you just want to filter your spam without having to train filters on multiple computers) is to route your email through Gmail, and 2) if you're going to be moving large amounts of email messages around, especially between accounts, you might want to consider turning of SSL for the duration (keep in mind, however, that this exposes your email to the internet; it would not be impossible, or even all that difficult for someone to snatch the text of those emails if they wanted to).
My first Django project is now live. Sadly it's not a very interesting one, just a re-develop of the dy/dx tech website. It looks exactly the same as before, but it's now powered by Django. This doesn't really offer any advantages at the moment, but it will. For example, pretty much all the data on the site is currently stored in a database which means it will be extremely simple to add, remove, or change any of the services show in the services tab. Not that I really expect that to change any time soon (although you may notice that the services tab is the one part of the website that has changed; I've added a few, and consolidated some redundant ones), but the principle is sound.
More importantly having the site powered by Django will make it much easier for me to add some new features/online services that I've been thinking about for a while. The first one will definitely be a portfolio tab. I've worked on a pretty good number of websites in the year or so since I started this business, and I really should have a portfolio on my website to show off my work. I'd also like to put up a clients tab where I can list my clients and, if I'm lucky, get some testimonials to put up there as well. Then of course there's the WiFi database that I've been talking about for a while, that will have it's own subdomain, but I'll give it its own tab as well. Hopefully now that the whole site is done with Django and I'm a little more familiar with how the framework works development of those things and others will go a little faster.
I've now spent a weekend (and weekday) playing with my iPhone. So far I've discovered nothing to dampen my enthusiasm about it. In fact, I probably like it even more than I did before. Having confirmed that the touchscreen wasn't a significant impediment to typing or dialing the only concerns I had left were the low speed of EDGE for data transmission and the lack of an IM client on it.
Neither of those things are concerns anymore. While EDGE is slow, it's sufficient for the basic needs of email and looking up driving directions with the built-in google maps application (which is completely awesome; a fun test is to center the map on your current location and then just type 'starbucks'—or 'dunkin donuts'—into the search bar and watch all the little red map pins drop out of the sky skewering your local caffeineries of choice).
As for IM, I've always been a huge fan of meebo.com, a web-based, multi-protocol IM app. They've been my favorite Web 2.0 app for as long as Web 2.0 has been around, and their recently released iPhone optimized version doesn't disappoint. Unlike most sites, you don't even need to go to a special address to get to the iPhone version: just type meebo.com into your browser and it automatically detects that you're using an iPhone and shows you the correct interface. You can log into any account for any protocol they support (AIM, MSN, Yahoo!, Gtalk, ICQ, and Jabber) or into your already existing meebo account (unfortunately you can't create a new one from your iPhone) and it takes you to a low-profile, low-bandwidth, IM interface optimized for the iPhone. They didn't try to mimic the way the site works in a traditional setting (exactly like it does on your desktop, complete with a separate window for each conversation), and they didn't try and shoehorn desktop metaphors like tabs in. Instead they simply show you your buddy list. Click on a contact and you get a conversation screen where you can chat as you normally would. The only elements on the screen are their buddy icon, a small icon to take you back to your buddy list, a text box to enter your message, and a send button. If someone else IMs you while you're in the middle of a conversation the number of new messages you have appears in a little bubble over your buddy list icon (just like a dock icon in OS X) and the content of that message briefly appears in a little pop-up. Switching conversations is just a matter of going back to your buddy list and selecting a different person to talk to. It's that simple. And it's been designed specifically with the limitations of the EDGE network in mind so it works just fine even if you don't have access to a WiFi network. It's done incredibly well, and even if Apple adds iChat in later I don't expect I'll stop using meebo (which isn't too surprising seeing as I don't use iChat on my Mac either in favor of Adium; also, I imagine that the reason iChat isn't in there is because AT&T; doesn't want there to be a messaging application in there that doesn't let them charge per message as they usually do when it comes to instant messaging and there's no way I'm going to eat up my text messaging allowance with iChat when meebo's around).
So basically, the iPhone rocks. That's my review. Unless something seriously unexpected happens, I don't expect I'll be commenting any more on the iPhone itself. But you can be sure you'll be hearing about whatever apps I end up using with it, whether they be web apps or actually apps added through hacks (I'll start messing around with iPhone hacks soon, I'm sure).
I'm writing this from my brand new iPhone. I know that I had previously said that I would wait to get one and that I wasn't particularly interested in the first generation one, but it turned out to actually be a fairly practical purchase, surprisingly enough.
It all started because Jessi's birthday is coming up (as is mine) and I knew she wanted an iPhone. We had, up until today, been on a family plan from Verizon, which saved us a fair bit of money over the two individual plans we had before. But because of that it complicated the matter of getting an iPhone for Jessi. So I looked at just about every possible configuration of cell phone plans we could possibly have.
It turns out that T-Mobile is unequivocally the cheapest provider, while Verizon is the most expensive (I didn't bother looking at Sprint, they have nothing that would interest me over the others). AT&T; are in the middle. After comparing the monthly costs of a Verizon family plan, a T-Mobile family plan, an AT&T; non-iPhone family plan, an AT&T; iPhone family plan, an individual iPhone plan and an individual T-Mobile plan, and an individual iPhone plan and an individual Verizon plan I found that there were only a few cases that actually made sense.
Due to the fact that there was still a whole year on our Verizon contract it just didn't make financial sense to switch to another provider to try and save money, so regular family plans on T-Mobile or AT&T; were ruled out. The only way that it made sense to switch wireless providers was if it was going to involve getting Jessi an iPhone (assuming an iPhone is actually worth the extra money, that is). Between the theee options that involved getting an iPhone for Jessi (an iPhone family plan or an iPhone individual plan for Jessi and an individual plan for me from either Verizon or T-Mobile---an iPhone individual plan plus a non-iPhone individual plan from AT&T; would actually be more than the iPhone family plan because if the amount of minutes needed) the cheapest actually turns out to be the iPhone family plan.
So the only remaining issue was the initial cost of two iPhones plus the early termination fee from Verizon. Apple's new price drop on the iPhone pretty well took care of that and the clearance prices on the 4GB model offset the cost of the early termination fee. So I figured that there's no time like the present and ordered two 4GB iPhones.
Making this even more amazing is the fact that I placed the order Yesterday, I got the free shipping that's supposed to take 5-7 business days, and the iPhones arrived TODAY! Way to go Apple.
And yes, I typed this whole entry out on the touchscreen, I'd have to say that the concerns about it not being usable were unfounded. The only problem I'm having with it so far are that it can't quite keep up with my typing which can be annoying and takes me back to the days when I was using a IIgs. Also when it gets too far behind the autocorrection stops working until I stop and let it catch up. But even so, this is by far the best phone I've ever had, and I like it way more than a Blackberry.
Now to turn of the damned keyboard sound...