Reblog: Editing Google Docs with Vim by Aaron Karper

My computer is slow you guys. It’s a 4 year old netbook running unbuntu. I got tired of having to wait for google docs to load, so I googled and found this post by Aaron Karper.

The instructions for getting started worked for me, but the html formatting didn’t. So be warned. You may only be able to edit plain text docs. This works fine for my purposes, but your mileage may vary.

P.S. I made a quick little bash script so I don’t have to type a bunch of crap every time I want to edit a doc:

google docs edit --title "$1" --editor vim

It takes the name of the file as a terminal argument.

It’s all based on this thing called googlecl, which allows you to access all kinds of google services from the Linux terminal, not just docs. Here’s their manual:

There’s a comment on the post that says there’s a more active fork of googlecl here, but I didn’t really have a look at it.

Lessons Learned. Sometimes You Just Need To Get It Done.

During the semester I often follow a regular pattern. I get an assignment in one class, it takes a long time, then I need to catch up on some other assignment. I start late on that one, which causes me to start late on another and so on. It snowballs until, well, basically the end of the semester when I’m scrambling to get it all done so I can pass my classes.

The latest assignment in this snowball is one in which I needed to mimick the behavior of the bash shell. For those of you not familiar with bash: have you ever opened up the terminal (in Linux or a Mac) or the command line (in Windows)? It’s usually a black window with nothing but text. The way it works is that you type a command, for example in the linux terminal:

steve@StevesNotebook:/$ echo potatoes are my friends

and then the command is executed.

potatoes are my friends

echo parrots what you just typed, but there’s lots more to it. Anything you can do in graphical user interface can be done by typing commands in the terminal. If you get good at it, you’re going to get things done much faster than if you used a mouse.

Even though the assignment didn’t ask us to make a fully featured terminal, it was still a big project, which I started late. Starting late was mistake number one. Mistake number two was due to my tendency to pursue whatever I’m interested in at the time at the expense of getting things done. I had been learning a bit about compliers and testing so I decided to make my own testing language for this project.

Mistake number two, after realizing writing an entire new language for a class assignment was a stupid thing to do, was to continue testing my code after it was due. The assignment was past due, but I was still taking my sweet time testing every new feature I added to the program.

Writing automated tests for your code sounds like a good idea, and it is. But when you’re past deadline, in school or in industry, you need to do things as quick and dirty as you can. Get it done. Test it manually. Yes the resulting code may not be that great. Yes your program might break for some small percentage of time. Yes it might run more slowly than it ought, but it will be done. If you have time later, you can fix it then.

I’m still learning that perfect is the enemy of done. I’m also still learning that I need the discipline to do tasks in paralell even if one of them is due very soon. Otherwise I’ll keep putting myself in this position.

When You Network, Trim Your Tribe

I’ve been greedily listening through the archives of The Self Publishing Podcast. It’s hosted by 3 people who make their living writing books in a very workperson like way. They write a lot of books, as fast as they can, as good as they can (they believe strongly that writing faster means an improvement in writing quality for a variety of reasons). There’s a bit more to it. In the podcast they spend a lot of time talking about marketing, promotions, product funnels, etc. It’s all great stuff and I can’t recomend this podcast enough.

They’re inspiring in a lot of ways. I believe their general approach to creativity and business can be adapted to any field, including software. But there’s one paticular thing they talk about all the time that is really hitting home for me recently, the idea of trimming your tribe. When your write a book or record a song, or make a movie, some people will like it and others won’t. Even if you have a dedicated fanbase you still can’t please everyone in that fanbase. Some people won’t like your new work even if they liked what you did before. Not to mention that most people outside your fanbase just won’t dig you. This is just how taste works. People like different things. Nothing personal to Justin Timberlake, but I don’t care if he brings the sexy back or not; I’m just not interested. On the other hand, while it was going on, I read Nimona pretty much religously.

This trimming your tribe idea also applies to networking. When you meet people in your industry sometimes you really gel with people and sometimes you don’t. You need focus on the former kind of relationship. You need to find your tribe. Follow up with the person you had a half hour discussion with about software which then tagented to operations management which then tangented into an enthusiastic discussion about World War I. Don’t try to build on relationships with people you have nothing in common with or who just aren’t on the same wavelength that you are. If they hate scripting languages and you are a die hard Rails person, maybe you two should go your separate ways. I don’t mean that you should only seek after people who are just like you. Diversity is good for any tribe and working with people who have different view points is enriching and more productive. This is about chemistry, not seeking after sameness.

It’s obvious when you think about it. Where would you be happiest working? Wouldn’t with be people who you get and who get you? Doesn’t a team work best when all its members share a similar vision and similar goals?


I love The Pomodoro Technique. It’s so simple. You pick some task you have to do, set a timer for 25 minutes and go. For those 25 minutes, don’t do anything else. Just do the task. No facebook, no videos, no nothin’. Then take a 5 minute break and do it again. when you take your fourth break, make it 20 minutes. Lather, rinse, repeat. There’s more to it: getting better at avoiding distractions, time estimation, etc. I really should get around to reading the book sometime.

How to learn Ruby while sitting on the toilet.

This post is only for those of you with an android phone. If that’s you, go install the Ruboto irb app on your phone. Open up Ruboto and type the following:

print "chunky bacon"


Hit “go” and you should see this:

>> chunky baconnil


Don’t worry about that ‘nil’ thing at the end. It’s just the value that print returns. If that annoys you you can add a space:

print "chunky bacon "

Now you need a Ruby tutorial. I heartily recommend Why’s Poignant Guide To Ruby. It’s full of fun, silliness, it’s a great read, and you’ll be learning before you know it.

The Basecamp Books

I’ve just bought and read what many people might think of as the 37signals or Basecamp Books: Getting Real, REWORK, and REMOTE. They’re all gold. Getting Real is about how to develop a web application without most of the detritus (documents, charts, long time tables, large teams, and other crap) that can surround such efforts. It’s an agile book. Agile and Scrum are (apparently widely adopted) methodologies for software development that I intend to learn more about.

The Basecamp folks (formerly named 37Signals) realized that the principles in Getting Real applied to more than just web development. They expanded and add to their ideas of keeping your products and business small and sensible in REWORK. REMOTE is all about how to successfully run a business in which many or most employees work remotely.

I kept laughing and nodding my head all the way through these books. I have fallen in love with these people. They have inspired me to create my own application and, perhaps, my own business. It will be a personal organization app. Boy do I need help with personal organization, time management, goals, and all that stuff. I’ll keep you posted on my progress.

Why don’t we sleep enough?

We all know we’re supposed to. And now there’s evidence that not sleeping enough causes freaking brain damage. So why don’t we do it? In his book, Rework, Jason Fried encourages us to go to sleep. If you don’t, he claims you get stubborn about working on a problem for too long without a break and you lose your creativity. That seems to match my experience.

Well I’m done. The fact that I may have already irreversibly damaged my brain by years of not sleeping enough really bothers me. From now on if I have to choose between finishing an assignment on time and sleeping for 8 hours, I choose sleep. I should be planning better anyway so I don’t have to make that kind of choice. I’ve been sleeping right for the last few days. Wish me luck and go to sleep early tonight!


GNU Make

Intimidated by the GNU building tool Make? I sure am. I mean I can get buy but I’d like to know it better so I can take advantage of more features. My instructor in one of my classes has made a good introductory pdf tutorial, in the tutorial he also links to the free O’Reilly make book. I’m only making a simple program at the moment so here’s what I wrote for my assignment:

  1 all: My_Program.c
  2     gcc -Wall -g -o My_Program My_Program.c
  4 clean:
  5     rm My_Program
  7 make_run_clean:
  8     gcc -Wall -g -o My_Program My_Program.c
  9     ./My_Program
 10     rm My_Program

I’m positive this is not the most elegant way to do this but here’s how it works. Every one of those words with a colon after it (like all: up there) is a rule that gets executed when you execute the make command with the name of the rule like so:

$ make all


$ make clean

In the case of all it compiles My_Program. clean removes the compiled program (the executable file generated by the compiler). And make_run_clean compiles the program, runs it, and then gets rid of the executable file. This way all I have to do to recompile and run my program is type this in my terminal:

$ make make_run_clean

Otherwise I’d have to do all those steps separately.