Debugging like Elon Musk

Every time I think I’m doing pretty good with my projects, I take look over and see what Elon Musk is doing. Then I instantly feel like I’m wasting my life. That guy does such huge things and he does them so quickly it is mind boggling. What is his secret? Can I be like that?

The answers is yes, if you use “First Principles” reasoning. I have found that when you apply first principles to debugging software that you will get to better solutions. So what is first principles? Here’s Elon explaining the how and what of it:

So here’s the take away:

Continue reading

Problem Discovery: Finding pain points to help others

As a programmer I’m usually up to my ears in problems. Problem discovery is something I recently came upon as a technique to help build a business. Basically you find a problem that people have, then build something to address the problem.

But of course its not that simple, how do you even start with something like this? I’d like to share with you a recent experiment I did where I attempted to do some problem discovery on a pain point I was experiencing: Finding a master mind.

Continue reading

Kindle hack: Make PDFs work for you

Here’s a really useful kindle hack I bumbled my way into the other day. I love reading on my kindle for a lot of different reasons, but one of the killer features is the ability to highlight and make notes. This allows you to mark sections that are important to you, add a note if you need to, and then later review just the notes (and jump to the relevant sections if necessary).

This works great for kindle book, but I also like to read PDF’s. When you read a PDF on a kindle though, it doesn’t let you do the highlighting because it tries to keep the formatting of the PDF.

The secret is to convert the PDF into a format that kindle understands. This allows you to then markup the “PDF” with highlights and notes. But, how do you do this?

One way is to install some software and then manually convert the PDF…. but that is no good. Another alternative is to send your PDF to a 3rd party service and have them convert the document for you…. and that’s equally bad.

The best solution is to email the PDF to your kindle! A lot of people know about this, its the easiest and fastest way to get non-Amazon books onto your kindle. What a lot of people don’t know is that if you put the word convert in the subject line, Amazon will automatically turn the PDF into a kindle format and then send it to your kindle. From there, you can read the PDF like a normal kindle book, making highlights and notes where ever you need to. This is a great little kindle hack that makes your life better!

To do this, all you need is you “mail to kindle” address (visit your Amazon.com kindle settings page to get this address). Then find a PDF you want to turn into a kindle document. Send an email your mail to kindle address like this:

To: your_special_address@kindle.com

Subject: convert

Be sure to attach your PDF. If everything works like it should (assuming you PDF doesn’t have any password protections or really odd formatting) then Amazon should deliver a copy of the PDF in kindle format your kindle within a few minutes. If there’s any problems with the conversion, you’ll probably get an email from Amazon letting you know what happened.

This little kindle hack is perfect for taking notes on a document that was “recommended reading” in a class. If the document is only available in PDF format, grab a copy and send it with the “convert” subject line and boom! You’ve got a kindle version you can take notes on (and look up words with, which is my favorite kindle feature!)

Hiring Hacks: Make a schedule

“Goals without deadlines are just dreams”

Time is a resource. The interesting thing about time is that we all have the same amount, 24 hours each day. The thing that separates effective people (you know, the ones we all secretly grumble at) from everyone else is how they use that time.

Making a schedule of how you are going to spend your time is one of the best ways to make sure you get lots of things done. I have discovered a few tips and hacks on how to make the most of a schedule.

  • Plan out your schedule on one day (and plan several days)
  • Make no task shorted than 15 minutes
  • Make no task longer than 1 hour (unless it is an interview or something in-person)
  • Batch like tasks together

Plan out your schedule

If you try to decide what to do right before you do it… you are not going to get much done. You would do much better to try and make your schedule the night before, when you are not focused on the “OMG, I gotta get something done NOW NOW NOW” frame of mind.

Along the same lines I have found that if I go ahead and plan out a week’s worth of time I tend to get more done: It allows me to objectively look at my tasks (such as writing a blog post) and figure out where and when would be the best time to do it.

There is also a certain peace of mind that comes from having things mapped out. On any given day you know what you should be working on, so you can just go do it. No energy is wasted on trying to make a decision, the decision has already been made. All you have to do is… do it.

Length of tasks

I feel that on your calendar no task should be less than 15 minutes. If it takes you less than 15 minutes to do something, then that’s fine. Use the remaining time to do some filing, clean up your desk, etc. Trying to cram 10 1 minutes tasks onto a 10 minute block on your calendar is a waste of time. Seriously. At that point it is just busy work because you are spending more time entering the tasks than you are actually doing them.

On the other side of the coin, I would not make a task longer than an hour. Sitting for too long can cause you to get distracted. I like to break up long tasks into multiple entries on my calendar, either over several days, or with some other unrelated task in between. By putting this constraint on my tasks I find I’m more productive and effective with my time. A quick pro-tip: If you have a multi-hour task, try to put a block of time for physical activity in between session. Getting outside and getting the blood flowing is a very effective way to keep mentally alert and to keep the creative juices flowing.

Batch similar tasks together

When you are in the zone you are unstoppable. So why break up your streak by doing wildly different tasks? Context switching can be very expensive, but if you can stay in the same frame of mind as you switch tasks you will find you can get more done.

For example, imagine that you need to update your resume, clean your office, write a blog post, and make some phone calls. If you schedule the blog and the resume back to back, you will probably get more done faster because they are both writing tasks. If instead you decided to do the phone calls in between the writing tasks… well there’s no telling when you will get around to finishing the 2nd task. Phone calls seem to take forever!

Personally, I like to try and schedule phone calls and interviews in the afternoon. I find I’m more creative in the mornings and more social in the afternoons. By scheduling my day around these “facts” I find I get more done (and usually faster).

Wrapping it up

Make a schedule. Make it several days in advance. Make it around your strengths. Follow the schedule. Make it happen!

Mosh, tmux, and twitter: Keeping up on the go

I’m a big fan of twitter and I wanted to share some tips to help everyone get the most out of it. Here’s some of the hacks I’m doing that make using twitter faster and more effective for me.

Here’s the TL;DR version for the impatient:

  • Use a text based client
  • Run the client on a remote machine (or IN THE CLOUD)
  • Use tmux to get the most out of your session
  • Use mosh to have a seamless connection
  • Use twitter lists to get a laser focus on important topics/people

(Follow me on twitter for more stuff like this! @nloadholtes)

Text is where its at

With only 140 chars (and occasionally some pictures), twitter is all about text. So, why not use twitter in a place where text is king: the command line!

There are several command-line twitter clients out there. I’ve been using rainbowstream for a few months, and recently started trying out krill. They each have their pluses and minuses, so I encourage everyone to try them both out and see which one appeals to you more.

Rainbowstream is nice to look at because of its adjustable themes. But… I’ve noticed it tends to “hangup” on the stream and I have to re-switch back to my stream to ensure it updates. Krill is relatively new to me, so far it seems really stable, but doesn’t look as nice as rainbowstream. Krill also has the ability to follow RSS and other formats which sounds awesome. Currently I’m running both side-by-side in a split tmux panel. More on that in a minute!

Run the client on another machine

Every time you close your laptop, you lose your network connection. Wouldn’t it be cool if you didn’t lose your place in the stream? Tweets will come in while you are away, but scrolling backwards will be time consuming.

So, run the command line clients on another machine! Cloud based machines are dirt cheap these days, and they are a snap to set up. If you have one running already, adding these clients takes up almost no resources.

Or… if you are like me and you have a RaspberryPI laying around… you can use that! I set mine up at home and configured my router to route incoming requests to it so I can easily access it no matter where I go. Its always on (thank you battery backups!), so it keeps track of the conversations going on while I’m asleep/commuting/out-and-about. Using ssh keeps it secure and an snap to log into.

The big guy keeps an eye on it for me

The big guy keeps an eye on it for me

And since the command line clients are so lightweight, I can run lots of stuff (like an IRC bouncer/client, a bitcoin miner, etc.) on it with no problem.

Right now you’re probably saying “But hey, you still need to log into that machine every time you open you laptop!” Well…

Use mosh to connect, and tmux to manage!

While I can use ssh to connect to the machine, if the network connection goes down I have to re-login which can be a pain, especially if you happen to be on a very flaky internet connection (like at the coffee shop or at my office). That why you should use mosh. Mobile SSH Shell is a very cool project that uses SSH over UDP/IP. Since UDP is designed to work on unreliable networks, this is the perfect solution.

When mosh (on your computer) notices the network connection goes down, it will try and contact the remote host. When the network comes back, it will automatically reconnect, and update the terminal. The end result is that you can drop in and out without really knowing it, yet you never miss anything!

I mentioned earlier that I was also running an IRC bouncer/client. How I’m going that is with tmux which is a “Terminal Multiplexer”. It basically allows one ssh/mosh connection to have multiple terminal windows. tmux is awesome and if you get nothing else from this article you should go learn and use tmux. (If you are familiar with “screen”, tmux is a much much much better alternative. If you’ve never heard of screen… excellent.)

So, how I’m using this whole set up is this way:

  • mosh into my RaspberryPI
  • start up a tmux session
  • make one pane for twitter, another for IRC
  • Never look back. 🙂

From that point on, until one of the machines reboots, my computer will automagically reconnect (via mosh) and show me what’s happening on twitter or IRC. AWESOMENESS!

This is what my setup looks like:

A screenshot of my twitter tmux setup

A screenshot of my twitter tmux setup

Use the lists!

A while ago twitter rolled out a feature called lists. Lists are just ways to subscribe to users but not have them in your normal timeline. The beauty of this is you can now create lists centered on a topic, and fill it with relevant accounts.

For example, I have a list called “funny” that has some accounts that spew out jokes and other humorous quips. I also made a list called 5 which is a very focused list of people who I think are doing important and inspiring things, and these are people I should pay attention to. (The name of the list is from the Jim Rohn quote “You are the average of the 5 people you spend the most time with”.)

I then use the command line clients to watch these lists. Since the lists are focused, the are not as “active” as the normal timeline. This way I can cut back on the distractions and time suck that the normal twitter timeline can become.

On a normal day I check in on the 5 list a couple of times, and occasionally check funny, or one of my other lists. The beauty is now I’ve trained myself that it isn’t necessary to check twitter constantly because a) it won’t “update” as frequently, and b) when it does, I’m more likely to like the content.

Wrapping up

Use a lists to get focused on a topic that is important to you, use a command line client to keep it fast & clean, and host it somewhere other than your machine using mosh and tmux for extra awesomeness.

Here are the links to everything:

Hiring Hacks: Track your activity

When looking for a new job it is very easy to get overwhelmed, yet feel like you are not getting anything done. This combination can lead to a negative feedback cycle which leads to you feeling worse.

To prevent this, every day you should write down the activities that you did. And just as  importantly, you should write down the results. Let’s look at why and how this can help.

What did I do?

There are 24 hours in the day. Each hour is composed of 60 minutes. Every day we all do a countless number of things, some important, but most are mundane. (Think of things like drinking water, looking out a window, etc.)

If you take the time to write down the important things, they will stand out in your mind. The more they stand out to you, the more attention you will pay attention to those tasks. And if the task is important and you are paying more attention to it, you are more likely to do a “better job” with it.

But what’s important? It all depends on what your goal is. If you want to get a new job, then anything that gets you closer to that goal is important. This includes sending out resumes, talking to people, and any kind of reading or practice that you do to help you improve your skills.

Think about it: If it is important to get a job and your track “important” activities such as emailing your resume, you’ll start to notice how many times you’ve sent your resume out.

Why track these things?

It can be hard to make ourselves do something we find un-fun or unpleasant. But one thing that that humans are very good at is playing games. Think of all the hours you’ve spent playing games. Things like Famville, twitter, and traditional video games tend to be lots of fun, that’s why we do them!

If you start tracking how many resumes you’ve sent out, then it will start to look like a game. “Yesterday I sent out 3 resumes and got 1 phone call. I wonder if I sent out 6 resumes if I’d get 2 phone calls?”

Doing important things

Once you start tracking what you did, you will notice that your activities tend to cluster together into certain categories. For me, I’ve noticed it tends to be “entertainment”, “learning”, and “job hunting”.

From those 3 things its pretty clear that one of them is going to be pretty important if I want to get a new job. The other two are important, but if I’m doing them too much, then I’m not going to be moving closer to my goal of getting a new job.

By make a list over several days you too can start to see where you are spending your time. Ask yourself this question: “Am I doing the things that are going to get me closer to my goal?” If the answer is no, then It should be pretty clear what you need to stop doing in order to make the change.

One more thing: tracking what you do helps out if you need to file for unemployment. Typically if the government is going to give you money they want to know what you are going to do to “earn” it. Being able to show details of your day shows that you are serious about getting back into the job market.

Wrapping up… for victory!

Its easy to lose track of time and focus while job hunting. Here’s what you need to do:

  • Every time you do something important, write it down!
  • Every day, look at what you’ve accomplished
  • Every week look back at what you did
  • Decide what was important, and do more of that!
  • Decide what wasn’t important, and do less of that 😉

Using these hacks you can get your brain focused and see the progress you are making, and more importantly get to your goal faster!

How to identify what to measure

My last post about metrics really got me thinking. Most GTD programs don’t really talk about improvements from a dead stop, they are more concerned about changing your process. But altering how you implement your process can have a huge impact.

Here is a suggestion on how to identify what to measure:

  1. What is causing you pain?
  2. What causes the pain to occur?

Step 1 is all about prioritization. Pain is bad. If something is causing you pain, you want to stop it. You need to stop it. So pick the thing/item/problem that is causing you the most pain. This is what you need to improve or fix.

Step 2 is looking at what is causing the pain to occur in the first place. Once you know the factors that are contributing to the pain, you can try to change them. If you are doing the right thing, the factors contribute less, and the pain should go down.

For example: Let us say I want to write more python code. My day job doesn’t involve much python, so I feel like I’m being left behind because all of the cool kids on reddit are talking about the fun they are having writing python code.

The pain: Not being able to write in the language I want to. The cause: Day job doesn’t use python.

Addressing the cause will affect the “pain”. If you get a different job (e.g. one that involves writing python code) then you have solved both problems.

But what if you can’t just switch jobs? Then you try experimenting with writing python code for your own personal use. Try writing it to solve scripting problems on your PC at work. If that makes you feel better, then you are moving in the right direction. If you try writing open source code in python in your after work hours, but it winds up stressing you out, then you are moving in the wrong direction. (Or you’ve identified that there might be a different problem than what you originally though there was!)

By tackling the sources of your pains, and applying small changes there, you can get a measure of where your efforts are going. Sometimes these measures are going to be cold hard numbers, and sometimes they are just going to be “feelings”. But either way, they are indicators of how you should change your processes and habits in order to become more successful.

Rate-my-resume.com is now live

In my last post, I put up a link to a little project I’ve been working on. I finally got around to giving it a proper name. (re)Introducing:

Rate-my-resume.com

Now if you are wondering if your resume is a good match for a particular job posting, you can use my site to find out! At the moment I’m giving the score in terms of 0 (being a total non-match) to 100 (being the absolute perfect match). In this economy, the more your resume reflects the skills listed in a particular job, the more likely your resume will be looked at seriously.

If you run your resume through and it gives you a low score, look at your resume and the job posting and try and figure out what keywords are in the job posting that are not in your resume. Then, assuming you have the necessary experience, put those keywords into your resume! Be sure to add them in a way that makes sense to a person, after all humans (especially HR people) don’t like to read fragments and words peppered into someone’s resume.

Try out the site with your resume and see how you rank!

p.s. Python rocks!

Comma Separated Values

Question: How much does python rock?

Answer: More and more every day.

Today I was writing (for what seems like the millionth time) a little script to read CSV (Comma Separated Values) file. After running into the same issues over and over (picking a delimiter, escaping delimiters, etc.) I decided my sanity is worth the 30 seconds it would take to see if someone else has already written a CSV library. It turns out python has one built in. Since 2.3. D’oh.

import csv

lines = csv.reader(‘myfile.csv’)

That’s all that’s needed to read in a csv file and have it properly handle the delimiters, even when they are inside of escaped text (i.e. something like “$3,000” will be read as $3000 instead of $3 and 000).

Python rocks again.