Gmail odds and ends

I’ve added a few things (eight to be exact) to the Getting More Out Of Gmail post that I put up a few days ago. I’m mentioning it here because if you aren’t subscribed to my RSS feed it’s likely that you haven’t seen the additions.

Please Stop Requesting Invites

I’ve been completely inundated with these for the last week or so (we’re talking hundreds). Any new Gmail invites I receive will be given out in the order in which I received requests, but like I just said, I’ve received hundreds and so sending me another would be a futile move. Just trying to save both of us time.

Minor design changes

As you can see, I’ve made a few aesthetic changes to this site. I realize it’s nothing too crazy (never is) — hopefully I can get away with describing the design as “simple and elegant” — always a goal. I’d like to discuss a few things that gave me a headache with you-know-which browser and this layout. I’m sure this is old hat for most web designers, but these are problems that I hadn’t come across before.

We all know that IE/Win doesn’t recognize “dotted” borders, but instead treats them as “dashes.” It is because of this that I have always stayed away from the dots — I want the sight to look the same on all browsers (obviously) and IE/Win would screw this up (as is usually the case). I finally gave in to desire and decided to figure out a way around the problem. The first thing I did was create an image 1 pixel high and 3 pixels across. The first pixel was made black and the other two transparent.

I thought I would just tile this horizontally with CSS to create the dotted line and be done with it. Well, as it turned out, that is all that needed to be done for every browser except IE/Win, which made the line 10 pixels high instead of one (yes, even when “height: 1px;” is used; it’s completely ignored by IE/Win). There is no explanation for this other than to say that IE/Win is broken as usual. After trying eveything I could possibly think of, I started messing around with the padding and noticed that a top padding of 1 pixel solved the problem in IE/Win without affecting any of the other browsers I used for testing. So, the trick on 1 pixel images in IE/Win is to give them a vertical padding of 1 pixel.

The second thing that had me going crazy trying to fix was the fact that in IE/Win any margin I was adding to the right of my menu div was being doubled. Literally. If I wanted a 10 pixel margin, I would specify 10 pixels and every browser would follow my orders, except for IE/Win, which would make it 20 pixels. I’ve come to find out that it is a well-known bug and occurs when you are trying to add a margin to the same side as the float direction of the div. The fix is simple enough: just add “display: inline;” to the div. All browsers (including IE/Win) ignore this here, but for whatever reason it corrects IE’s doubling of the margin.

A more filling appetizer

Mail.appetizer (which I wrote about here) is actually being worked on and a new version is available for download. Yes, I’m surprised too — it’s been nearly five months since the initial release and I know most of us had just assumed that this project was dead.

The newest version includes:

  • Resizable notification window to fit your desktop.
  • Custom font for the message body.
  • Displays sender’s photo signature (from Address Book or .Mac).
  • Counter showing number of outstanding messages.
  • Shows mailbox name (optionally).
  • Notification for every incoming message (no longer limited to the INBOX)

A Short History of Nearly Everything

I put Bill Bryson’s A Short History of Nearly Everything on my Amazon wish list nearly a year ago, but never got a copy of it. A few weeks back I came across the audiobook version and can’t stop listening to it (despite the annoying accent of the reader).

This is a great book for those who simply love to learn. While “nearly everything” might be a little too ambitious a title for a book that doesn’t reach too far beyond the natural sciences, I still think it’s fitting. From the Big-Bang to the present, he looks at how our universe and planet evolved (and are still evolving) and how we came to know and understand our world (or not).

…how we went from there being nothing at all to there being something, and then how a little of that something turned into us, and also what happened in between and since.

The book is incredibly engaging and I can’t recommend it highly enough.

Getting more out of Gmail

UPDATE: Also see Google Hacks (Second Edition) and Hacking Gmail — I was the technical editor on both books.

The large number of Gmail invites that I’ve given out in the last few days has spawned a lot of dialogue between friends and I on how to do certain things with the service. There are all kinds of neat things popping up for Gmail. Given that I don’t use Gmail for anything more than sending invites, my experience and knowledge with these things is somewhat limited, but that doesn’t mean I don’t have to answer my friends’ (and strangers’) questions, right? I had half a mind to send all inquiries to Fucking Google It, but I digress.  :)

That said, the following is a collection of programs, sites, and information that will allow you to get more out of Gmail.

Easily Move All of Your Contacts to Gmail

I received quite a few questions from friends wondering if they could import their contacts into Gmail. Unfortunately Gmail doesn’t yet offer the option to do this (they will in the future) unless you’re running Mac OS X or *nix (see next section), but I’ve come up with a very simple solution that you can use in the interim.

  1. Send out a single e-mail (preferably one that announces your intention) to all of your contacts from whatever program/site you used before Gmail and make sure you also send it to your Gmail account (or to an account that you forward to Gmail).
  2. After you receive the e-mail through Gmail, open it and choose “Reply to all.”
  3. Write something in the e-mail explaining its purpose and send it off.

Gmail automatically adds to your contact list the names and e-mail addresses of the people you e-mail from Gmail, therefore the e-mail you sent in Step 3 should add all of those people to your contact list.

Import Contacts Directly With Mac OS X (and *nix)

Apparently Gmail already offers the option to import contacts directly, but it seems that this is hidden to all browsers except Camino (v0.7 only) on Mac OS X.

Instructions for how to do this on Mac OS X.

I’ve heard that this method also works for Gecko-based browsers running on *nix (though I’m not sure which versions of which browsers can see the import option).

Helpful/Interesting Sites

  • Gmail Gems — a weblog devoted to Gmail tips and tricks.
  • Gmail for the Troops — a site that looks to give Gmail invites to the troops in Iraq.
  • Gmail 4 Troops - same as above.
  • Gmail Swap — a site where you can trade your invites for almost anything. It should be noted that in the last couple of weeks Google has been tossing out invites left and right and subsequently the ‘value’ of the invites has effectively been reduced to zero (this goes for selling them on eBay as well). After all, it is (or rather will be) a free service.
  • Gmail Machine — a site that gives away Gmail invites (you have to keep refreshing the page and hope that the “magic” number pops up).
  • GmailForums - as the name implies, a forum to discuss all things Gmail.
  • Most Wanted Gmail Features - a site that allows you to vote on which features you’d most like to see in Gmail (including those that we know Google is already working on but hasn’t yet released). If there is a feature you’d like to see that isn’t already on the list of things you can vote for, let him know.

Helpful Programs

  • Gmail API - There are two distinct components here: an open source Gmail API written for the .NET framework, and a proof of concept Windows application built on top of that API that provides basic remote Gmail functions.
  • Mbox & Maildir to Gmail Loader (GML) — allows you to import your mbox or Maildir files into Gmail. The only problem I see with this is that it doesn’t get the timestamp right — messages will be timestamped with the time that they are received by Gmail (there is presently no way around this). If you’re thinking about using this program I would suggest waiting for Google to add this functionality (and it will) so that the timestamps are correct. I don’t plan on making this move any time soon, but if I were, I would definitely wait for Google to offer a solution — the idea of e-mailing 13,000+ e-mails, one every two seconds, does not sound very appealing to me. While this program automates the entire process, the practicality of this method has to break down once you go beyond a certain mailbox size. Also, there is still no way to import your sent messages, which, at least for me, are often as important as those that I’ve received. You can now specify where you want your e-mails sent (i.e., “Inbox” or “Sent Mail”).
  • gExodus - a graphical Gmail import utility written in Python.
  • Import Mail from Mac OS X into Gmail — uses the source from the above program along with some AppleScript to allow you to migrate e-mail from your Mail.app mailboxes to Gmail.
  • Export your Gmail inbox with Python — allows you to export e-mails from your Gmail inbox. Again, this is something that I’d wait for Google to do on their own, but by all accounts it works fine. Like the importers there is still no way to deal with your sent messages.
  • gCount (Mac OS X) — displays the number of unread Gmail messages in the Mac OS X menubar.
  • G-Mailto (Mac OS X) — allows you to associate mailto links with Gmail (instead of a local client).
  • G-Mailto (Windows) — allows you to associate mailto links with Gmail (instead of a local client).
  • Pop Goes the Gmail (Windows) — allows you to retrieve your Gmail e-mail through POP3 clients.
  • GTray (Windows) — an icon in the systray shows the number of unread messages in your Gmail account.
  • GetMail (Windows) — forward your Hotmail e-mail to any address.
  • Transfer files to and from Gmail - a tiny PHP script that allows you to send files to and from Gmail accounts. Very very cool. This is actually something I’ve been talking about with some of my friends for a while now. It’s not going to take too long for more robust and powerful scripts to surface. When Gmail is made available to the public I don’t see why one couldn’t sign up for an unlimited number of accounts; the accounts could be entered into a script similar to this one, and provide, theoretically, unlimited storage.
  • GmailCompose (Firefox/Mozilla) - browser extension that adds a context-menu link for opening a GMail compose window when clicking on mailto links or when selecting a text e-mail address.
  • Gmail Bookmarklets - all of these are for composing messages in Gmail. Some claim that they are browser-specific, but these usually work across the board.

    Bookmarklet One
    Bookmarklet Two
    Bookmarklet Three
  • libgmail - pure Python binding to provide access to the Gmail service.

Wake up

Typical order of things after I crawl out of bed:

  • Check e-mail
  • Check mobile phone for voicemails and SMS messages
  • Check news aggregator (quickly)
  • Check stocks
  • Check referrers
  • Check AdSense
  • Pee
  • Go back to news aggregator and start reading
  • Quickly realize that other, more pertinent things need to be taken care of and news will have to wait

More Gmail

Google keeps giving me Gmail invites (36 in the last 72 hours). I currently have three left — e-mail me if you want one.

Want a Gmail invite?

I’m giving Gmail invitations to the first six real-life friends who e-mail me asking for one (I’m doing it this way so that I don’t get charged with playing favorites  :P). I plan to get a lot of e-mails (much more than I have invites to give), and to be fair, I’ll defer to these unfulfilled requests as I get more invites in the future.

How to create a linkblog in Movable Type

First off, let me apologize for using the word ‘linkblog’ — I’m not a fan of it myself and am only using it because it seems that that is what this sort of thing is being called (and if you got here from Google then I chose the right word   :P).

I’m going to start by going over two solutions that I didn’t choose to implement, but that might be of some use to you, and then I’ll explain the method I came up with, which is easy to setup and use.

The Easiest Method

The first thing that came to mind when I decided that I wanted to do this was to simply create a category in my current Movable Type weblog. To post a new link you would just create a new post in your current weblog and put it into the new category. The code to list the latest links would be very similar to the code you already use to display your weblog entries, except that you’d limit the output to “link” entries through the use of category tags.

This is all well and good and I’d imagine that most people would be fine with this solution, but I had a couple of problems with it. The biggest problem for me was that these tiny, one-line posts would be interlaced with the regular posts (on my end) — I wanted to keep the linkblog completely separate from my normal posts. Just my preference. The other thing that bothered me was the “Post Status” option. For my regular entries I like the default “Post Status” set to “Draft,” but for the linkblog I wanted it set to “Publish” — there is no way to set this variable based on the category of the post. Again, this might not bother you.

The Worst Method

The first thing I did after deciding that I was going to create a linkblog was to look for a Movable Type plugin that already did what I looked to do. After being unable to find one, I thought to create another weblog inside my MT installation and then just reference the second weblog from my first (main) weblog. This is not possible in MT! What the hell? Naturally, I immediately went looking for a plugin that would allow me to call other weblogs from my main one. I ran across David Rayne’s MTOtherBlog plugin. A good idea to be sure, but for it to work, one must rebuild their entire weblog. For example, you’d place the MTOtherBlog call in a template where you wanted information from another weblog to be inserted. Then, you’d add a link to your new linkblog. Now, while the change has been made in your linkblog, it won’t show up on your main weblog until you rebuild the template where the MTOtherBlog call resides — you have to manually rebuild all the pages that reference the linkblog (in my case, every page on my site) each time you add a new link!

Enter pingToRebuild.cgi, which automatically rebuilds a Movable Type weblog (i.e., you’d setup your linkblog to run pingToRebuild each time you add a link). While this obviates the annoyance of constant manual rebuilding, the fact remains that you’re still left to rebuild each and every time you add a link. I find this unacceptable. You might not.

My Method

This method lets you keep the links in a separate weblog and doesn’t require you to rebuild each time you add a link. Keep in mind that the following is my specific setup; there are a lot of things you can play around with and add depending on your needs. The basic idea is that each time you add a new link to the linkblog, a text file is written with the new link and loaded into any page you wish through PHP. It’s very simple.

The first thing I did was create another weblog within my current installation of Movable Type. I decided that the link’s title would be set by the MTEntryTitle tag and the URI set by the MTEntryBody tag. You could obviously use any of the other variables as you see fit (e.g., you could add a brief description of each link through the MTEntryExcerpt tag, etc). After realizing which tags would be used and for what purpose, I created a new template and named its “Output File” “bits.txt.” The entire template is shown below:

<ul>
<MTEntries lastn="15">
<li>
<a href="<$MTEntryBody$>"><$MTEntryTitle$></a>
</li>
</MTEntries>
</ul>

That’s it. The new link is wrapped in markup and “bits.txt” is written. As explained above, the title of the post is the title of the link, and the body of the post is the URI itself.

Finally, to pull this file into another template (e.g., your main weblog template), you simply need to add one line of PHP wherever you want the file’s contents to be inserted.

<?php include('absolute/path/to/your/file'); ?>

To make the posting of links faster, I took the obvious step of linking a bookmark in my browser to the “New Entry” page of the linkblog. After I read an article that I want to add to the linkblog, I copy the URI, hit the bookmark button, put whatever title I want into the title field, paste the link into the body field, and press “Publish.” Done.

Bits

I’ve put it off for as long as possible and have finally added a ‘linkblog’ to this site (see “Bits” in the menu). The only reason I didn’t add this sort of thing sooner (especially after seeing most of the people I read do something similar) is because I was never too sure that I wanted to keep up with it. It then dawned on me that I’ve been doing this in a roundabout way for many years: I have a notorious habit of e-mailing links to any of my friends who might find them remotely interesting and have even gone so far as to create 11 different e-mail ‘groups’ to more easily allow me to send the link to those that would find it pertinent. The new ‘linkblog’ will allow me to do the same, but in an easier, faster, and more accessible way (i.e., available to anyone that reads this site, not just the people I e-mail). It will also act as a bookmark repository for myself. I should mention that below the list of “Bits” you can find an RSS feed for the links.

I’m going to do a write-up sometime soon (later today or tomorrow) on how to create a ‘linkblog’ in Movable Type. My solution is really simple and adding a new link is mindless after you get it up and running.

About The Minor Design Changes

I keep flip-flopping on whether I want the menu on the left or the right, so I’m not sure which side it will be on when you read this post. As much as I loved the previous menu (simple, simple, simple), the menu column needed to be widened to accommodate the “Bits” section. The previous menu was on the left and the text was right-aligned, but this posed a problem when I widened the column because the space between the menu text and the left edge of the container became too great and it visually offset the page. I played around with a lot of different layouts, including a horizontal menu (as I’ve used in the past), but I really like the dual-column menu that you see now and I think I’m going to stick with it. To make the columns equal (four links in each), I removed the search link and placed the option below the menu. I’m not sure it will stay there.

I’ll be making slight tweaks for the next couple of days (font sizes/types/colors, column widths, etc.), but I doubt I’ll deviate too much from this layout.

Out of control

SPAM count for the last 24 hours: 1267

As usual, much of the blame can be placed on Microsoft.

Cruel and unusual punishment

My study materials for the patent bar arrived yesterday. Joy. You’d think that for the amount of money paid for these materials I’d get some sort of free ride on the exam; a “golden ticket” that I could just slip to the proctor and then be on my merry way. Apparently that’s not how it works and it’s starting to sink in that I’m actually going to have to study for this damn thing. As I outlined in a previous post, I assumed that the studying was going to be slow and painful. I was wrong. It’s much worse. I slogged through the first two (of 63) modules today and can liken it only to, well, nothing. You’re literally trying to memorize a ~3,000 page manual that is more dense and boring than anything you’ve ever seen. It’s horrible.

Bloglines

After using desktop aggregators for years, I’ve recently moved my subscriptions over to the web-based Bloglines and have no intention of going back to NetNewsWire. I’m always reluctant to use server-side anything; I think this general aversion stems from the fact that I usually don’t feel that I’m in control of web applications (i.e., there are never enough customization and configuration options and everything is centralized on a computer that isn’t mine). That said, I only thought to give Bloglines a chance after seeing some other prominent netheads rave about it. After using it for the past two weeks I have to say that it gets just about everything right; my problems with it are both mild and easily curable. The next few paragraphs outline some of the changes I’d like to see, but even if none of these come to fruition, Bloglines is my aggregator of choice until something better comes along.

The first thing I’d like to see is the number of unread headlines as part of the title of the page (e.g., instead of “Bloglines | My Blogs,” I’d like “Bloglines | 187 unread”). That way, a quick glance to the Bloglines tab in my browser would reveal how far “behind” I was (come to think of it, maybe that’s not a good idea).

I wouldn’t mind an easier way of sorting the subscriptions. As it stands now, it’s easier to export the subs list, import it into a desktop client (e.g., NetNewsWire), sort the subs as I see fit, export them, and then re-import them into Bloglines.

I think a name change would be nice as well. Bloglines implies that it is only for weblogs and not syndication in general. Furthermore, even it were somehow confined to weblogs, I think the name is stupid — what the hell does “bloglines” mean? Perhaps it is a play on “headlines?” Whatever, I don’t like it. *shrug*

Finally, the feature I’d like to see most is for Bloglines to include in my list only the subscriptions that have unread headlines — if there aren’t any unread headlines there is no reason to encumber my list (which requires quite a bit of scrolling as is) with those empty sites.

Sticking with AdSense

I started placing Google’s AdSense ads on my individual archives about a month ago just to get a feel for the amount of money that might be generated. I’m happy to report that I’ve actually made quite a bit off the ads (people actually click on these things, who knew?) and see no real reason to pull them. Not only will this pay for the hosting, but it will leave me with a nice little chunk of change each month.

I’ve debated moving the ads from the bottom of each entry to being inline with the menu on the left, but I hesitate because I feel that that would look a little too “commercial,” though it would surely compel more click-throughs. I’m going to leave them at the bottom of the pages for now, but might move them in the future.

Slideshow Project

After an overwhelming response to my earlier post about the new slideshow I’m using on the photos page, I’ve gone ahead and added some comments and instructions to the code and am now offering it to everyone. Keep in mind that this is just something I whipped up a couple of days ago to display my images after tiring of my previous solution and being unable to find something simple and small that did what I wanted (read: it is both simple and small and is meant to fulfill a niche need of mine). Apparently this sort of thing is something that a lot of other people were looking for as well given the strong response to the earlier post.

Go to the Slideshow project page