How I Built PandoRdio

PandoRdio is a Google Chrome Extension that adds a song to your Rdio collection after you “thumbs up” a song in Pandora.

Easy, Right?

While the extension is actually a very simple Chrome Extension, there were a few things I had to put in place to get it to work. There were a couple roadblocks:

  • Pandora offers no API
  • The Rdio API has a same origin policy

No Pandora API

Pandora doesn’t offer an API. All I needed to know was when someone “thumbs ups” a song, and what the artist and track are. Because there’s no API, I decided to just use a Google Chrome content script and listen to the click event on the various “thumbs up” buttons scattered across www.pandora.com.

Rdio’s Same Origin Policy

Rdio’s API (http://api.rdio.com/1/) has a same origin policy. So I created a proxy in Node.js. This “proxy” does a little more than merely proxy requests to the Rdio API, though.

I have it hosted on Heroku, where it’s also serving as the public landing page for PandoRdio. You authorize PandoRdio’s access to your Rdio account through here, and a cookie is set to handle the OAuth requests to the Rdio API.

Rdio JavaScript Library

Now that I had a working proxy up, I just needed a small JavaScript library that used it and provided the handful of API methods I needed to use. It’s available on GitHub and provides the following API methods:

  • search
  • addToCollection
  • setAvailableOffline
  • getPlaylists
  • createPlaylist
  • addToPlaylist

All Together Now

Here’s all the apps involved:

Credits

Almost all of the Node.js code is based off monsur’s rdio-node.

The Google Chrome Extension

So, now I had all the ingredients necessary to write the extension that would add a song to my Rdio collection when I “thumbs up”ed a song in Pandora. The result is the PandoRdio extension available in the Google Chrome Webstore.

Flickr Original Images Atom Feed

The Problem

I want my desktop wallpaper to rotate through my Flickr Favorites. I need the original (or large-sized) images, and I want the images to automatically download to my Dropbox.

The Solution

Node.js + IFTTT

Flickr’s RSS and Atom feeds don’t offer the original image size in the feeds. I wrote a Node.js app that uses the Flickr API to expose an Atom feed with larger image sizes.

IFTTT has a channel for RSS/Atom feeds and a channel for Dropbox. This is the recipe I needed:

ifttt recipe

IFTTT downloads the images (within 15 minutes after favoriting) to my Dropbox:

finder

Usage

I’m sharing this in case anyone else wants a free solution. To use it, just use this IFTTT recipe. You’ll have to edit the feed url. Change the id portion to your Flickr Id. You can find your Flickr Id using idGettr.

For example, my Flickr Id is 11946169@N00, so the url I use is http://flickr.donnierayjones.com/favorites/11946169@N00.atom

I also expose the originals of your own uploaded images. The feed URL for this (assuming Flickr Id 11946169@N00) is http://flickr.donnierayjones.com/photos/11946169@N00.atom.

The Open Web

This is what I love about the Web. I don’t have to pay for an app in an App Store. I can just fork a couple of repositories on Github, write a quick Node.js app, and deploy to Heroku for free.

Coderbility: Syntax Highlighting for Readability (and Instapaper)

I’ve created Coderbility, a simple Google Chrome extension that adds syntax highlighting to Readability and Instapaper. It relies on highlightjs and is actually very little JavaScript & CSS. Here’s a screenshot:

screenshot

I use Readability as my “read it later” service, and I use Instapaper’s Text Bookmarklet if I just want to read an article now. If you use Readability’s Read Now bookmarklet, it adds it to your Reading List, which isn’t what I usually want.

I also rely on Google Chrome’s search engines to activate my bookmarklets. If I can use a bookmarklet rather than a Chrome Extension, I will.

The Code

I said that this extension is very little code, and it is. Here’s the JavaScript:

$('pre:not(:has(code)), pre code').each(function(i, e) {
  hljs.highlightBlock(e);
});

And the CSS:

pre, code {
  background: transparent !important;
}

I was originally just using dotjs and dotcss to do this, but it’s not as easy to share across platforms (I’m on a Mac and on Windows).

Installation

You can download Coderbility from the Chrome Web Store or you can fork it on Github.

Issues

I’ve noticed that it doesn’t work well with some code snippets, and I haven’t bothered to find out why. I’ll try to look into these as I have time.

Responsive Twitter: A Google Chrome Extension

screenshot

Twitter for Mac Drawbacks

I never liked Twitter for Mac. I tend to stay in the browser - it’s safe there. I like Sparrow, but I still use gmail.com. I like Reeder, but I keep going back to Google Reader and readability.com. In fact, I think the only app I stick with that’s not running in the browser is the one I’m writing this post in: iTerm2.

That’s all I need: a browser and a command line.

However, there were some things I liked about Twitter for Mac, my favorite of which was the simplicity. I don’t need all the extra stuff Twitter’s pushing, I just want my timeline and to occasionally send a tweet.

Keyboard Shortcuts

Twitter for Mac does have some of the shortcut keys that are available on the website, but it doesn’t have the enter key for expanding a tweet. The enter key on Twitter for Mac does various things depending on what you’re focused on. I like the twitter.com web app’s behavior better.

Optimize My Screen Real Estate

I also didn’t like how Twitter for Mac keeps a sidebar on the left. Sure, it’s pretty small, but it’s several pixels being used that I don’t need. You can open the timeline without the sidebar (Window > Open in New Window) but there’s no way to make it the default view.

It’s not on Windows

The biggest problem with Twitter for Mac is that it is for Mac (only). I use Windows for 8 hours a day at work.

Responsive Twitter

I had been running some simple stylesheet hacks via the Stylish extension on Google Chrome. With these I was able to fix the only issue I had with twitter.com: the layout. I wrote up a few media queries in a stylesheet that let me resize the window down. I was running this for several months but it had some drawbacks:

  • No syncing of stylish options across Google Chrome. I.e. I would add a style at home but would have to add it on my work machine too.
  • No easy way to launch twitter.com in a narrow window.
  • No easy way to share styles.

The Google Chrome Extension

So, I wrote a simple Google Chrome Extension. Responsive Twitter adds the same media queries I was using with Stylish, plus some. Since it’s an extension, I can also run JavaScript. And I can hook into some of the features specific to Google Chrome. Here’s a few things I could add by using a Chrome Extension:

  • Disable jQuery animations
  • Open links in the timeline in the background
  • Launch twitter in a separate, chrome-less window
  • Easy sharing with others
  • Sync between all of my computers (via Google Chrome Sync)

Quick Notes on Developing a Chrome Extension

I learned a bit about how Chrome Extensions work while writing this extension. One thing that’s a little hard to grasp is how content scripts and background scripts can communicate with each other and how much control (or lack thereof) you have over the page that’s loaded.

The hardest feature to add was disabling jQuery animations. Well, actually, when you learn how it’s really easy.

With a Google Chrome Extension, you can’t get direct access to the page’s scripts or variables. You basically get access to the DOM, and that’s it. So to disable jQuery animations you can’t just run the following in a content script:

$.fx.off = true;

$, or jQuery, is defined on twitter.com and you can’t get access to it. However, we can execute JavaScript by setting the browser location in our content script!

document.location = 'javascript:$.fx.off=true;';

Well, that was easy!

Future Developments

I hope to do some more work on the extension in the future:

  • Open links in the timeline with keyboard shortcut o - update 2012-04-05: done!
  • Better implementation of screen position/size storage - update 2012-04-15: done!
  • Better implementation of opening links in the background - update 2012-05-02: done!

Make Twitter Responsive

You can install my Responsive Twitter Chrome Extension, or fork/clone the repository on GitHub.

The Kindle: Physical vs. Digital

I read so much more on my Kindle!

Liars - that’s what I thought. Either they were lying, or were tricked into thinking they’ve read more. Well, I’ve had mine for just about a month now, and I feel the same way. So either I’m lying, have been tricked, or I really am reading more now that I have a Kindle.

Hesitation

I was hesitant to get a Kindle for two main reasons:

  1. I like physical books. I like quickly scanning how many pages a chapter will be. I like the immediate feedback of how much I’ve read, and how much more I have to read. And yea, I like the smell of a new book.

  2. There was no way I could read a software book on the Kindle. There’s too many diagrams, charts, code examples, etc. to read on a tiny six inch screen.

Fiction and the Lending Library

So, why did I get a Kindle?

My wife got me addicted to The Hunger Games series, and it got to where we were both reading the last book in the series, Mockingjay.

We usually read at the same time - just before going to sleep. So I thought about buying an additional copy, but then I noticed this thing on Amazon called the Kindle Owners Lending Library. It’s only available for Kindle owners. I.e. you can’t get books on your Kindle for iPhone or Kindle for Mac.

Mockingjay was available for free in the Lending Library. I had some Amazon gift cards, so without much thinking, I decided I needed a Kindle.

So I bought one. And I finished Mockingjay the same day I got the Kindle.

I Read More Now

The Hunger Games books are good. So good they’re making a movie out of’em. So maybe that’s why I read the last one so quickly onthe Kindle. It’s not that the Kindle is magical or anything, right?

But then I noticed something else. I discovered that you can send blog posts to your Kindle.

My Old Workflow

Before I had a Kindle, I had three methods for keeping up with posts I wanted to read later.

  1. Google Reader - I used the star feature to keep up with blog posts that I wanted to read later.
  2. Twitter - I would favorite a tweet that linked to a post that I might want to read later.
  3. Chrome Bookmarks - Any other posts I came across on the internet I would bookmark to Google Chrome’s Bookmark Bar.

So, I’d have three different places to check when I had time to do some reading.

My New Workflow - Readability

Now it’s much easier.

Readability is practically integrated into every piece of software. Now whether I’m in Google Reader, Twitter, Tweetbot (iPhone), or Google Chrome, I can send the blog to my reading list on Readability.

And with Readability, I can send longer posts to my Kindle very easily. Now, every night just before I go to sleep, I can pick up my Kindle and read a post or two. It’s awesome.

Physical to Digital

So, the Kindle’s great for fiction and can be great for long blog posts. But what about those software books that include diagrams, charts, and code examples?

I purchased Clean Code for my Kindle and I’m about half way through with it right now. However, I’ve been reading it mostly on Kindle for Mac. Of the 11 chapters I’ve read, I’ve read only about 2 or 3 on my Kindle. I was always opposed to reading on my MacBook, but that was when I would try to read books in .pdf format. The .mobi format works extremely well:

Where Digital Wins

  1. The Dictionary. Double click (or touch) a word in any book and you get a quick definition of the word. Also, Wikipedia is nicely integrated:

  2. Highlights & Notes. I was always hesitant to write or mark in any book that I’ve purchased. It hurts its resale value and highlights are only temporarily valuable (at least to me). Once I’ve grokked something I’ve highlighted, I’d like to be able to remove that highlight and continue on to others. With the Kindle, I can do that.

  3. Universal Access. I can access my books on:

    • My Kindle
    • My MacBook Air
    • My PC at Work
    • My iPhone

Pricing

The major drawback to Kindle books is that they have a $0 resale value.

However, I’ve found Kindle books to be (for the most part) dramatically cheaper than their physical counterparts. I can get two Kindle books for the price of one hardback. I think this makes up for the lack of a resale value.

Conclusion

I’m still uncertain of how I will like the Kindle (and the idea of digital books in general). I’ll have to try a few more books before I’m certain that I now prefer digital over physical.

I think there’s still a place for hardback books in my library. Reference and catalog books, like GoF’s Design Patterns and Fowler’s PoEAA are still valuable to have in an easy / quick reach. However, there’s also a lot to be said about a digital book that is searchable.

So for now I’m defaulting to Kindle editions. I’m selling all of my paperbacks and getting Kindle versions. Hopefully I won’t regret it.

Budgeting With Google Docs

Budgeting is Hard

While in college I used Mint to manage my finances and budget. Budgeting for myself was hard; budgeting for two people is (exponentially?) harder. After marrying, my wife and I continued to use Mint. After several months we she decided to try Dave Ramsey’s “cash only envelope system”. After the first paycheck of using cash we were amazed at how well we managed our money.

Cash is Physical

When you’re handing over several $20 bills rather than swiping a card, well, your handing over several $20 bills. It makes each transaction a little harder on you. It’s a mental transaction, as well as a physical one. It makes you ask, “do I really need this?”, or, even better, “do I have enough cash for this?”

I think using cash is similar to the way that writing something by hand (rather than merely reading or typing) helps you to understand and remember something. Using cash takes a little longer and it is more of a physical exchange - you hand over cash and you get an item. When using a debit card, you keep your card (hopefully), and perhaps imagine that number in your bank account shrinking.

Cash Puts You in Control

Using cash also means you have to budget your money ahead of time. When we were using Mint, we had budgets created and it was nice that Mint automatically categorizes transactions for you. However throughout the period between paychecks we would always go over in one area and under in one area. Using the cash method, we budget for each category and each category gets an envelope for cash. When the envelope is empty, that means we’ll have to wait until next paycheck to buy something in that category. Mint does provide “real time” budget amounts, but sometimes debits don’t post on the same day or don’t show the correct amount until posted. And it’s just not as obvious as an empty envelope.

Exceptions

It’s worth noting that we don’t actually use cash for everything. We use debit/credit where we find it to be an inconvenience to use cash, or where we don’t typically spend beyond our means. For example, I pay all of our bills online with a credit card (easy rewards points) and then immediately pay it off with a transfer from our checking account. We pay for gas with debit/credit for the convenience. All of these expenses tend to be fixed every month or at least somewhat predictable.

Mint’s Replacement

I use Google’s online applications for several things. I’ve already written how I use Google Calendar for bill reminders. I use Gmail (who doesn’t?) and I use Google Reader to keep up with my favorite blogs. I use Google Tasks for things like grocery lists and books to read. Google Chrome is essentially my OS and I always have Gmail, Reader, and Calendar as pinned tabs.

I was a fan of Mint, and I used it a couple of months after switching to cash, but it just seemed like the wrong tool for the job. I had used Google Docs Spreadsheets for us to keep up with other financial information (medical school loans are complicated.) So I put together a spreadsheet to manage our budget based on a bi-weekly pay period. Here’s the result after months of manipulation and improvement (note: amounts may be edited for obvious reasons).

With this spreadsheet, we can easily budget months in advance just by scrolling to the right and budgeting for the desired pay period.

Along the very top is the (bi-weekly) date of the paycheck. Under each date are three columns. The first column are money values for various things, some are static (e.g. Income) and some are dynamically calculated (e.g. Total Expenses, Remaining).

Calculations

Most of the spreadsheet uses basic calculations. The Total Expenses row is pretty obvious, just sum everything below it.

Similarly, the Remaining row is just the difference between the Income and the Total Expenses.

Something I got tired of quickly was determining what expenses we needed to withdraw cash for. Typically we’ll withdraw however much cash we need (based on the budget) on payday. I began developing an app in Ruby on Rails (I don’t know that I really needed an app or was just wanting to learn something new), but I finally realized I was just trying to build an application that a spreadsheet should be able to solve. All I needed was something that could calculate a sum based on a conditional value (the condition here was whether or not the expense needed a cash withdrawal).

I quickly found out that there’s a SUMIF() function baked into Google Docs:

So that’s when I created an additional column for each pay period to denote whether or not we needed cash for the expense. I use an appropriate cash symbol ($) to distinguish those expenses that are cash items. Using the SUMIF() function I can get the total amount I need to withdraw when I go to the bank on payday. One more thing automated!

Handling Various Bill Cycles

My wife’s in medical school and so we have a good dose of loans every year. What we do is place these loans into a checking account and then equally divide the total across a 12 month period to cover costs. The amount we use each month typically covers almost all of our recurring bills. You may have noticed we don’t have any specific bills (e.g. electric, AT&T, etc) in the budget above. That’s because we don’t typically use my paycheck to pay bills; we usually use loan money to cover those. However, sometimes the loan money is not enough to cover all the costs of the bills, so we do have a generic “Bills” expense that we use to cover these overages.

I created a separate spreadsheet for monthly bills. They group well together with the loan money because the bills occur once a month, and we use an allotment of our loan money once a month. I thought about trying to integrate everything into one budget spreadsheet, but because our incomes vary by date and occurrence (i.e. I’m paid every two weeks and use our loan money on the 10th of every month) I felt it was best to keep them separate for the sake of simplicity. Here’s our bills spreadsheet:

This spreadsheet is very much similar to our budget spreadsheet, only much simpler. Because all are non-cash expenses (we pay them all with a credit card to earn rewards points, and then pay off the amount immediately from our checking), we have no need to distinguish between cash and non-cash items. Any time the Remaining amount becomes negative, that means our budget (from my paycheck) needs to compensate the difference. This spreadsheet has an added bonus of us being able to keep track of any abnormal billing changes.

Manage your money - don’t let it manage you

Some may argue that Mint is better because it will automatically categorize your money and provide amazing charting tools to analyze spending trends. You can save a lot of time by using Mint. I can’t argue that Mint doesn’t have some neat tools and charting, but I don’t think that it helps with budgeting. The fact that we have to manually budget and keep track of expenses with a spreadsheet helps us better understand how we’re spending our money.

We tell our money what it can do, not the other way around.

My Favorite Chrome Extensions

I recently switched to Google Chrome (from Mozilla Firefox) as my primary browser. I still use Firefox when I need to do heavy-lifting web development. Firebug and other addons are simply not (and may never be) available for Chrome.

Here’s all the extensions I’m using. Note: I’m not using any web development related extension for Chrome; there are good ones out there, but as I mentioned, I use Firefox when debugging web apps.

  • AdBlock It seems like I’ve used this extension ever since I started using Firefox. For those who don’t know, it’ll block all those annoying ads littered across the internets.
  • Better Gmail While this extension does a lot, I only use a subset of its features:
    • Hide ads (AdBlock hides these ads, but Better Gmail will hide the entire ad column, which allows for more space for your actual email)
    • Hide invite friends field (who actually invites folks nowadays?)
    • Hide web search button (I already have 10 other ways to search google)
    • Add attachment icons (gives a hint as to the attachment file type)
  • Embedly This extension is just amazing. It makes the #NewTwitter even Newer. It ads information to the side panel for almost all types of content. Twitter will automatically do Twitpic, YouTube, etc, but this extensions gets everything. It’s the reason I’m now using twitter.com rather than the Twitter app for Mac.
  • Facebook Photo Zoom Zooms Facebook photos as you hover over them. Saves a lot of time!
  • Fittr Flickr This extension does a lot, but what I use most are the shortcut links for different image sizes, shortened flic.kr links, and quick viewing of image metadata.
  • iReader Sometimes removing ads on a page still doesn’t remove all the noise to make an article readable. That’s what iReader is for.
  • RSS Subscription Extension RSS subscription isn’t baked into Google Chrome, so this extension is a must-have.
  • Type-ahead-find A feature built into Firefox (known as Quick Find) is not available in Google Chrome, but Type-ahead-find is Chrome’s Quick Find equivalent. Without this extension, I would have not been able to switch to Chrome from Firefox.

My Favorite Mac Apps

I’m planning on doing a series of posts of my favorite things:

These posts will mostly be a reminder to myself; I don’t want to forget about my favorite apps. Instead of static posts, I intend to keep them up-to-date. They will help me remember what I need to install when setting up a new system. Though, I can see this not being a problem in the near future (or present day) with everything “auto-remembered” for me: iPhone App Store, Mac App Store, Chrome Sync, Firefox Sync, etc.

Anyways, here are my Mac must-have apps:

  • Alfred - Application Launcher First App I found in the Mac App Store. I had been doing the Quicksilver / Quick Search Box thing, but I liked Alfred’s UI better. And it seemed quicker. I mostly use it for launching apps, though (like its competitors) it does more than just that.
  • Dropbox - File Syncer Dropbox is pretty much a necessity now-a-days when needing to get files synced across computers. I find the 2GB (plus the extra space they give away time-to-time) plenty of room for what I need.
  • Firefox - Browser While I lean heavily on Google Chrome now for my daily browsing, some of the web development addons that aren’t available in Chrome are enough to keep Firefox on my Mac.
  • Flickr Uploadr - … Flicker Uploader? I use Flickr to host my never ending photostream of my kids (or dogs). Flickr Uploadr is the only tool I’ve ever used to upload I think. It’s not been updated much (that I’ve ever noticed) but I don’t think it needs to be. It easy, fast, and works.
  • Google Chrome - Browser For the last several months Chrome has become my primary browser. My main reasons for switching from Firefox were: faster, quicker, speedier, nimbler, and faster. It also didn’t hurt that Google gave me a laptop to test their OS written on top of it.
  • GrabBox - Screenshot uploader This little tool is pretty neat. It automatically uploads screenshots you take on your Mac to a public folder on your Dropbox account. Quickly sharing photos has never been easier. I mostly use it for screenshots that I temporarily want to share, because as soon as you delete the photo from your Dropbox folder, the link becomes a 404.
  • Isolator - Productivity enhancer This guy sits in your menu and let’s you switch into productivity / reading mode with a keybinding or by clicking the icon in the menu. I have dual monitors so I tend to get distracted when reading, so that’s when I start Isolator. It’s quite configurable, too.
  • MacVim - Text Editor I recently decided to give Vim a try, and this is the GUI Vim editor for Mac OS X.
  • MenuPop - Quick Apple Menu Opener Cause sometimes you want to get to the Mac Menu with your keyboard and you don’t want to press Ctrl + Fn + F2 to do it.
  • Picasa - Photo Editor / Manager I hate iPhoto. Picasa fills the gap. I especially like the “I’m Feeling Lucky” option. Gets my photos fixed 80% of the time. The other 20% I can manually fix with its tuning options. All my Flickr photos go through Picasa.
  • Pixelmator - Photo Editor Photoshop is $1000, Pixelmator is $30. Because I’ve recently decided not to pirate any software what-so-ever, I’ve had to ditch Photoshop and pay for my first application. I don’t like paying for software, but I don’t like Gimp, either.
  • Reeder - Google Reader App I’ve tried switching to a prettier Google Reader interface before, but never stuck with one until Reeder came along. I’ve got in on the iPhone too, but  I don’t really do much reading on it anymore. My favorite feature on it is the option to view the post with the “readability” fix. Keyboard shorcuts are somewhat different than the default Google Reader webapp, which is annoying!
  • Remote Desktop Connection - RDP Client At work I’m a PC, so this is app is a must.
  • Sizeup - Window Management I’m using this app in “demo” mode, so that it nags me to purchase it after several uses. I don’t like it enough to pay for it, but I like it enough that the nagging doesn’t annoy me enough to remove it. The Mac lacks any kind of window management, and this app greatly helps in this area.
  • The Unarchiver - Compressed File Decompressor Unzips most file formats, except it seems to have trouble with some encrypted ones (7z, for example).
  • Transmission - Bittorrent Client Every now and then (before my switch to legal software/music only it was every day) I need to use bittorrent. I chose Transmission over uTorrent because it was simpler.
  • Twitter - Twitter Client I really like the new twitter.com, but this app is too cool, and it doesn’t take up much screen space.

Cr-48 Chrome Notebook - First Thoughts

When I got home from work Friday I was surprised with Google’s Cr-48 Chrome Notebook at my doorstep. I had signed up for the pilot program that Google was offering, but I really didn’t expect to be chosen. Needless to say, I was excited.

I’m interested in Chrome OS because my current netbook, a Dell Mini 9, has Mac OS X Snow Leopard installed, but I really only use Google Chrome on it. On a notebook, that’s really all I need these days.

Soon I’ll write an in-depth review, but for now I’m sharing my initial thoughts on the software and hardware that Google gave me.

Hardware

The laptop seems to be pretty well built and sort of resembles a Apple laptop. It’s extremely minimal and the keyboard is very nice to use. The screen resolution is 1280x800 and the trackpad is huge.

Pros:

  • New Tab key instead of Caps Lock
  • Spacious, browser-oriented keyboard
  • OS specific keys instead of F1, F2, etc. keys
  • SD slot included (not yet tested)

Cons:

  • Trackpad is horrible (though this is most likely a software issue?)
  • Right clicking is awkward (it involves clicking the trackpad, which doubles as a button, with two fingers)

Software

Well, it’s Google Chrome.. and that’s pretty much it. But it’s awesome that I can log into the machine with my Google user account, and right when the OS starts, I have all of my extensions and bookmarks. All my settings, synced, no setup required. Google’s been preparing for that seamless integration for a while, and it shows.

Pros:

  • It’s Google Chrome!
  • Switching between Chrome “windows” is very nice and smooth. It’s almost like having Spaces.
  • Like the browser, it can remember the open tabs when you shutdown and will restore them at logon.
  • Ctrl+Alt+/ shows common keyboard shortcuts. Awesome!
  • Gmail chats stay “always on top” at the bottom of the screen.

Cons:

  • The system font is ugly. I’m pretty picky when it comes to fonts… I just wish there were more settings to set the font or at least turn on font smoothing.
  • Runs a little slow at times, but I’m sure that’s due to limited hardware.
  • No support to hide extension icons from the toolbar like you can on the latest version of Chrome for Windows (note: I’m not actually sure what version of Chrome enabled this, but I noticed the option recently).

Learning Vim

I plan on diving into Ruby on my Mac soon and was in need of a good editor. I’ve been wanting to use TextMate, but with a $50 price tag (and my recent vow to only use legal software) I was hesitant to go that route. It’s not that I don’t think it’s worth $50, I just have a very hard time spending money on software when there’s free alternatives.

Vim’s been mentioned several times by developers across all development platforms as their favorite editor. What I like best about it is that it’s free.

So I downloaded MacVim and stumbled upon Vim Recipes which I’ve been reading through for a couple of hours today.

I’m hoping that I’ll stick with it and use it. I think I’ll like it; I already use most of the Vim-inspired bindings that are available in Gmail, Twitter, Google Reader, so I’m already familiar with the basics. What I believe is the biggest problem for me is that Vim bindings are not universally available. Sure, Vim can be installed on any environment. However, it won’t be available on a Windows server that I’ve RDPed into and only has Notepad installed. I’ll have typed 100 jki’s in the text file before I realize what I’m doing.

My brain and fingers currently have Up, Down, Left, Right, Ctrl, Shift, Cmd, Alt combinations (that are universally available) ingrained for manipulating and selecting text. Vim isn’t available in comment boxes in my browser. Microsoft Word doesn’t close when I enter :q. I understand there’s probably plugins that enable all this, but that’s not what I’m looking for; that’s not universal. I don’t want 30 Vim plugins to be installed on every machine I use.

But here goes. In a couple of months I’ll either be a jjjkiHelloWorld master or I will spend $50.

Does anyone have any suggested resources (other than Vim Recipes) for learning Vim?