Category Archives: Advice

According to the marketing message on there is a small but significant number of times that people simply copy and paste content from you website to email it to someone.  Getting attribution for this content and a link back to the source is what Tynt accomplishes.  With a small snippet of HTML and javascript they inject a footer including a link anytime someone copies text from your site.  It’s a simple but interesting idea that takes just a few minutes to implement but depending on the amount of traffic you get could be significant.

With the additional backlink possible from people who simply copy/paste into a their own blog post it’s possible to get some SEO benefits from it.  And for the people that just copy and paste into their notes or send an email it gives a reference back which may result in some return visitors.

I’m currently testing it out on this site.

If you copy some text and paste it somewhere you’ll see the additional text is automatically included in what gets copied that sends people back to the page it was copied from.

I was unable to find the source of this research study that was apparently done for the Harvard Business Review, but nonetheless I believe it to be true.  The study was looking to find the most important factor in determining a person’s or business’s success and found that above all else – leadership, vision, organization, systems – the key was what they called ‘speed of implementation

Speed of implementation refers to the time between hearing of an idea and the execution of that idea.  The most successful companies are the ones that can hear an idea like a new marketing method, or a product feature and can have that implemented and out quicker than competitors.

There are very few people that I have met with this personality trait.  People that just get things done – quickly.  The vast majority of people go home after work and veg on the couch.  However that gives you an edge.  By developing this one trait, you’ll be vastly more successful than most people.

The question then is how do you become someone that has a fast speed of implementation?

I think there are 3 key aspects to develop your speed of implementation.

  1. removing distractions – turning off or moving the TV, turning off instant messages, emails etc when you’re at the computer.  Give yourself the time to focus and really get deep into just one thing at a time when you need to work.
  2. finding the best tools – Good tools make doing something easier and faster.  If there’s a tool out there that can automate your work, get it.  if there’s something that makes it easier and faster get it.
  3. Have people that can do things for you – When someone tells you a great tax tip and you don’t have an accountant to call to use it then it is worthless.  If you are away from work and hear a great new product idea, or marketing strategy having someone to call immediately to start work on it can be the difference between massive success and the status quo.

There you go, three quick tips to make you think.  Of course if you’re the type of person with a speed of implementation near zero you’ll never do any of these things.

Bash is an incredibly powerful shell, and being proficient with it can make a massive difference in your productivity. Small tips and tricks can sometimes make a big difference in how you work. The shortcuts I’ve listed below deal mostly with what is actually readline functionality and so they may work in many other command line situations and programs. This is not a complete list but just some of my favorites.

Commands for Moving

These are the basics. The real stand outs here are moving around the line by word it can save you plenty of time compared to navigating only with the arrow keys.

  • beginning-of-line (Ctrl-a)
    Move to the start of the current line.
  • end-of-line (Ctrl-e)
    Move to the end of the line.
  • forward-char (Ctrl-f)
    Move forward a character.
  • backward-char (Ctrl-b)
    Move back a character.
  • forward-word (Meta-f)
    Move forward to the end of the next word. Words are composed of alphanumeric characters (letters and digits).
  • backward-word (Meta-b)
    Move back to the start of the current or previous word. Words are composed of alphanumeric characters (letters and digits).
  • clear-screen (Ctrl-l)
    Clear the screen leaving the current line at the top of the screen. With an argument, refresh the current line without clearing the screen.

Commands for Manipulating the History

These can be lifesavers. Especially if you’re running the same or similar commands over and over. For example Ctrl-o is so much faster than pressing ‘up’ a bunch of times, then pressing ‘up’ the same number of times to get to the next command in the sequence – use Ctrl-o, or maybe even a keyboard macro.

  • accept-line (Newline, Return)
    Accept the line regardless of where the cursor is. If this line is non-empty, add it to the history list according to the state of the HISTCONTROL variable. If the line is a modified history line, then restore the
    history line to its original state.
  • previous-history (Ctrl-p)
    Fetch the previous command from the history list, moving back in the list.
  • next-history (Ctrl-n)
    Fetch the next command from the history list, moving forward in the list.
  • beginning-of-history (Meta-< )
    Move to the first line in the history.
  • end-of-history (Meta->)
    Move to the end of the input history, i.e., the line currently being entered.
  • reverse-search-history (Ctrl-r)
    Search backward starting at the current line and moving `up’ through the history as necessary. This is an incremental search.
  • forward-search-history (Ctrl-s)
    Search forward starting at the current line and moving `down’ through the history as necessary. This is an incremental search.
  • yank-nth-arg (Meta-Ctrl-y)
    Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument n, insert the nth word from the previous command (the words in the previous command begin
    with word 0). A negative argument inserts the nth word from the end of the previous command. Once the argument n is computed, the argument is extracted as if the “!n” history expansion had been specified.
  • yank-last-arg (Meta-., Meta-_)
    Insert the last argument to the previous command (the last word of the previous history entry). With an argument, behave exactly like yank-nth-arg. Successive calls to yank-last-arg move back through the history
    list, inserting the last argument of each line in turn. The history expansion facilities are used to extract the last argument, as if the “!$” history expansion had been specified.
  • shell-expand-line (Meta-Ctrl-e)
    Expand the line as the shell does. This performs alias and history expansion as well as all of the shell word expansions. See HISTORY EXPANSION below for a description of history expansion.
  • history-expand-line (Meta-^)
    Perform history expansion on the current line. See HISTORY EXPANSION below for a description of history expansion.
  • insert-last-argument (Meta-., Meta-_)
    A synonym for yank-last-arg.
  • operate-and-get-next (Ctrl-o)
    Accept the current line for execution and fetch the next line relative to the current line from the history for editing. Any argument is ignored.
  • edit-and-execute-command (Ctrl-xCtrl-e)
    Invoke an editor on the current command line, and execute the result as shell commands. Bash attempts to invoke $VISUAL, $EDITOR, and emacs as the editor, in that order.

Commands for Changing Text

  • delete-char (Ctrl-d)
    Delete the character at point. If point is at the beginning of the line, there are no characters in the line, and the last character typed was not bound to delete-char, then return EOF.
  • quoted-insert (Ctrl-q, Ctrl-v)
    Add the next character typed to the line verbatim. This is how to insert characters like Ctrl-q, for example.
  • tab-insert (Ctrl-v TAB)
    Insert a tab character.
  • transpose-chars (Ctrl-t)
    Drag the character before point forward over the character at point, moving point forward as well. If point is at the end of the line, then this transposes the two characters before point. Negative arguments have no
  • transpose-words (Meta-t)
    Drag the word before point past the word after point, moving point over that word as well. If point is at the end of the line, this transposes the last two words on the line.
  • upcase-word (Meta-u)
    Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move point.
  • downcase-word (Meta-l)
    Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move point.
  • capitalize-word (Meta-c)
    Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move point.

Killing and Yanking

Killing and yanking can be a tremendous time saver over copy/paste with the mouse.

  • kill-line (Ctrl-k)
    Kill the text from point to the end of the line.
  • backward-kill-line (Ctrl-x Backspace)
    Kill backward to the beginning of the line.
  • unix-line-discard (Ctrl-u)
    Kill backward from point to the beginning of the line. The killed text is saved on the kill-ring.
  • kill-word (Meta-d)
    Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as those used by forward-word.
  • backward-kill-word (Meta-Backspace)
    Kill the word behind point. Word boundaries are the same as those used by backward-word.
  • shell-kill-word (Meta-d)
    Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as those used by shell-forward-word.
  • shell-backward-kill-word (Meta-Backspace)
    Kill the word behind point. Word boundaries are the same as those used by shell-backward-word.
  • unix-word-Backspace (Ctrl-w)
    Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring.
  • delete-horizontal-space (Meta-\)
    Delete all spaces and tabs around point.


There are some powerful completing shortcuts.

  • complete (TAB)
    Attempt to perform completion on the text before point. Bash attempts completion treating the text as a variable (if the text begins with $), username (if the text begins with ~), hostname (if the text begins with
    @), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted.
  • possible-completions (Meta-?)
    List the possible completions of the text before point.
  • insert-completions (Meta-*)
    Insert all completions of the text before point that would have been generated by possible-completions.
  • complete-filename (Meta-/)
    Attempt filename completion on the text before point.
  • possible-filename-completions (Ctrl-x /)
    List the possible completions of the text before point, treating it as a filename.
  • complete-username (Meta-~)
    Attempt completion on the text before point, treating it as a username.
  • possible-username-completions (Ctrl-x ~)
    List the possible completions of the text before point, treating it as a username.
  • complete-variable (Meta-$)
    Attempt completion on the text before point, treating it as a shell variable.
  • possible-variable-completions (Ctrl-x $)
    List the possible completions of the text before point, treating it as a shell variable.
  • complete-hostname (Meta-@)
    Attempt completion on the text before point, treating it as a hostname.
  • possible-hostname-completions (Ctrl-x @)
    List the possible completions of the text before point, treating it as a hostname.
  • complete-command (Meta-!)
    Attempt completion on the text before point, treating it as a command name. Command completion attempts to match the text against aliases, reserved words, shell functions, shell builtins, and finally executable file‐
    names, in that order.
  • possible-command-completions (Ctrl-x !)
    List the possible completions of the text before point, treating it as a command name.
  • dynamiCtrl-complete-history (Meta-TAB)
    Attempt completion on the text before point, comparing the text against lines from the history list for possible completion matches.
  • complete-into-braces (Meta-{)
    Perform filename completion and insert the list of possible completions enclosed within braces so the list is available to the shell (see Brace Expansion above).

Keyboard Macros

These can be useful if you’re running the same few commands over and over. For example, when I’m working in my IDE and then want to run some tests, I can quickly create a macro the first time I run my couple of commands to clean, build, and run the tests. When I want to run that sequence again it’s very quick, and doesn’t require hunting/searching through the history.

  • start-kbd-macro (Ctrl-x ()
    Begin saving the characters typed into the current keyboard macro.
  • end-kbd-macro (Ctrl-x ))
    Stop saving the characters typed into the current keyboard macro and store the definition.
  • call-last-kbd-macro (Ctrl-x e)
    Re-execute the last keyboard macro defined, by making the characters in the macro appear as if typed at the keyboard.


  • prefix-meta (ESC)
    Metafy the next character typed. ESC f is equivalent to Meta-f.
  • undo (Ctrl-_, Ctrl-x Ctrl-u)
    Incremental undo, separately remembered for each line.
  • tilde-expand (Meta-&)
    Perform tilde expansion on the current word.
  • set-mark (Ctrl-@, Meta-)
    Set the mark to the point. If a numeric argument is supplied, the mark is set to that position.
  • exchange-point-and-mark (Ctrl-x Ctrl-x)
    Swap the point with the mark. The current cursor position is set to the saved position, and the old cursor position is saved as the mark.
  • character-search (Ctrl-])
    A character is read and point is moved to the next occurrence of that character. A negative count searches for previous occurrences.
  • character-search-backward (Meta-Ctrl-])
    A character is read and point is moved to the previous occurrence of that character. A negative count searches for subsequent occurrences.
  • insert-comment (Meta-#)
    Without a numeric argument, the value of the readline comment-begin variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at
    the beginning of the line do not match the value of comment-begin, the value is inserted, otherwise the characters in comment-begin are deleted from the beginning of the line. In either case, the line is accepted as
    if a newline had been typed. The default value of comment-begin causes this command to make the current line a shell comment. If a numeric argument causes the comment character to be removed, the line will be exe‐
    cuted by the shell.
  • display-shell-version (Ctrl-x Ctrl-v)
    Display version information about the current instance of bash.

I’ve been watching a lot of Holmes Inspection on HGTV lately. If you’re not familiar with the show Mike Holmes is the general contractor who goes into a home that has some problems – usually bad renovations have left the home structurally unsound, mold problems, overloaded electrical boxes and a full list of instances of things not built to code. Holmes and his team then come in to rebuild the house right.

One of the interesting dynamics that you see on the show is the teacher – apprentice relation between Mike Holmes and his lead contractor Damon. Mike, being the expert, will asses the house first then watch Damon asses the house and quiz him along the way. It’s the tone of those conversations where you can tell there is a trusting relationship between the two of them and you can see over the seasons as Damon has grown more assertive and confident in his skills.

Construction is a lot like programming. A developer has to write code so that it is stable and structured to allow it to stay that way in the future. Rebuilding a house is akin to refactoring a code base – many of the problems are easy to identify, the solutions sometimes require some creativity to solve but generally follow patterns and best practices. Initial assessments rarely reveal the full extent of problems in a house which leads to time and cost overruns which is typical of software development as well.

With these similarities perhaps it makes sense to model programming education after the more established and historically proven teacher-apprentice style used in construction. This would serve to allow beginner and intermediate programmers to continue learning once they enter the job market. Constructive code review from peers is really just a start. Working in an environment where there is a good mix of senior and junior developers and where you are challenged to explain and defend your code and design choices is how to create a truly great development team.

Will the industry naturally move in this direction as it matures or is it doomed as companies are only interested in hiring the cheapest entry level programmers and only giving them time push out code?

Google Adwords LogoLast week I started testing some new concepts on Adwords. A week has passed and I wanted to recap what has happened and some things that I have noticed and learned so far.

First off, the strategy that I’m testing is to use the content network exclusively. As a result some of the standard SEM practices don’t really apply. Click through rates are dramatically lower than on search and it takes some time to get used to 0.1% CTRs. It takes a lot of impressions to get traffic at those levels.

Luckily the inventory of ad space with people using Adsense is monstrous and as a result there is plenty opportunities for placements. So for my limited week of testing I have had about 150,000 impressions on my ads resulting in 80 clicks.

The other thing to note is that there is comparatively nobody running ads on the content network. So the competition is almost non-existent. That makes the price per click very low. The total ad spend for the first week of testing was less than $10.

I have run into a number of problems in my testing that I never expected.

  • It’s not possible to use the Adwords API to build flash ads with the Display Ad Builder :(
  • There seems to be a bug with the Adwords Editor when trying to upload a lot of image ads.
  • It takes a long time for image ads to be approved and start running (none of my image ads have been approved yet)
  • Paying to use the Adwords API works out to be very expensive for the scale I want to use it at.
  • optimizing the price is time consuming since it can take days to see enough results.

With all those problems I’m still optimistic that I can find a way to scale things up more radically.  So far in the past week I have written a number of scripts that have helped me build out the campaigns, ad groups and ads.  It has gotten to the point where I can now upload over 1000 text ads to new campaigns, ad groups and keywords in one evening.

Since so far the testing has been inconclusive I’m going to hold off sharing the scripts I have for this strategy.  If it works out you can count on me recording some videos of the technique and the scripts to help.

Last night I attended an event here in Vancouver sponsored by neverblue ads. It was a chance to meet my affiliate manager in person to get some of his tips for taking things to the next level. I was also able to meet a ton of other affiliates and find out what was working for them and get a real feel for the industry right now.

One interesting thing that I learned that more advanced marketers are doing right now is to use PPC to do the initial testing and track down which keywords and which demographics are really working for a particular offer. Then they take that information and use it to intelligently purchase a media buy which could cost upwards of $10,000. That’s where the big boys are playing and making tens of thousands of dollars every day.

I was surprised to learn from my affiliate manager that of all the people that are actively working as an affiliate for CPA offers about 30% make more than $5000/month. That’s much higher than I expected.

Here’s a tip for you: if you haven’t heard of Signup right now and find out if there are any meetups of people with similar interests in your city. I’ve joined a bunch of groups and met hundreds of local people now that are interested in making money online. Going to events like meetup202 last night with they guys from Neverblue really keeps me motivated and focused on growing my business.

nichemarketingbullseyeYesterday I found a website that got me thinking.

It’s a niche website with a lot of unique content that is heavily SEO optimized. The business model was very simple – they have 4 CPA lead generation offers on each page and the goal is quite apparent: keep people on the site long enough with the content and drive them to one of the CPA offers. I imagine that the site is very successful at making money.

It’s a model that is simple, and a website that is not technically difficult to create.  However when I started to think about how to duplicate this business model for myself I found it to be a mountainous undertaking.

And so I’m going to ask you: If you needed to get 30,000-50,000 words of high quality unique content that would keep people on your website for 10+minutes how would you get it? The two options I could think of are:

  1. Pay someone to research and write the content for you
  2. Buy a website that already has the unique content on it

Both of those options could cost $$$.  Is there another way to get great content fast without spending so much money?  Leave a comment with your thoughts.

By the way…  the interesting  website I found that started this train of thought is  How much do you think a website like that would be making?  How much would it cost to develop?

One of the products that have really caught my attention recently are netbooks. I do most of my development on a MacBook but I occasionally would prefer to work on a Linux machine again. They’re pretty tempting little machines for several reasons:

  • price point – $300 to $400
  • Good disk space – 160Gb is enough for a lot of music or movies
  • peppy processor – the typical Intel Atom processor in these is enough to handle 99% of what I need a computer for
  • amazing battery life – some netbooks are rated for 10+ hours of runtime
  • significantly easier to carry around than a full sized notebook

There’s a lot of competition going on right now in the netbook market especially as we gear up for the back to school season. That makes it the perfect time to consider picking up one of these things.

Here are the best ones out there at the moment that I’m considering getting:

Eee PCASUS Eee PC 1005HA-PU1X-BK 10.1-Inch Black Netbook – 10.5 Hour Battery Life. Eee series by Asus was really what started the netbook market and they’ve managed to maintain their position in the market by continuing to make one of the top netbooks out available. Here’s the specs on this machine:

  • Up to 10.5 Hours of Battery Life and Free Sleeve Case Included
  • Intel Atom N280 Processor 1.66GHz
  • 1GB DDR2 RAM, 1 x SODIMM Slot, 2GB Max; Wi-Fi 802.11 b/g/n
  • 160GB SATA Hard Drive (5400 RPM) and 10GB Free Eee Storage
  • Windows XP Home Operating System, 10.1-inch WSVGA 1024×600 LCD Display
Acer Aspire OneAcer Aspire One AOD250-1580 10.1-Inch Blue Netbook – 8 Hour Battery Life Acer makes pretty solid machines and this one is nice. One of the nice features on this one is the LED screen which looks really good.

  • 1.6GHz Intel Atom N270 Processor
  • 1024MB DDR2 SDRAM Single Channel Memory
  • 160GB SATA Hard Drive (5400RPM)
  • Windows XP Home (SP3), Up to 8 Hours of Battery Life (6-Cell 5200 mAh)
  • 10.1-Inch WSVGA CrystalBrite LED Display, Integrated Intel Graphics Media Accelerator 950
HP miniHP Mini 110-1030NR 10.1-Inch Netbook – 6 Cell Battery HP has made their entry into the netbook market pretty nice and trendy. This one just looks great with the funky design on the lid.

  • Intel Atom Processor N270, Intel Graphics Media Accelerator 950
  • 1 GB DDR2 RAM (1 Dimm) (1 GB Maximum)
  • 160GB (5400RPM) Hard Drive (SATA)
  • Genuine Windows XP Home edition with Service Pack 3, 6 Cell Battery
  • 10.1 inch Diagonal SD LED Anti-glare Widescreen Display (1024×576)

Taking into consideration all these factors I’m really liking the Asus Eee. It’s definitely my top pick. Not just because the specs are good and the battery life is astounding but also because my friends who own that particular one really like it. And at that price it could be an impulse purchase — one that you won’t regret.

PS: When I get mine, I’m deleting Windows XP and putting Ubuntu Netbook Remix on it.

johnchow-photoThe other night I attended a Meetup where John Chow was speaking to a room of about 35 people.  If you’re not familiar with John Chow, he runs a blog – that makes $40,000+/month. This year he’s expecting to make $500,000 just from his blog.  His talk was amazingly inspirational in that it became painfully obvious that the work involved is pretty trivial.  John only works 2 hours a day on the blog.

He walked us through the back-end of his business model which is where he makes 2/3rds of his profit.  It is a system that I’ve had in place for a few of my websites but never really paid much attention to really tweaking it out.  I think that with just a bit of consistent work I could duplicate some of John’s success with my blogs.  Basically John has none of his own products so everything is affiliate and joint venture deals and, surprisingly, 70% of the income is not coming from the blog but from his email list.

His number one goal for his site is to capture the email address of the visitor so that he can keep in contact with them and build a relationship.  Then he just gives out a couple of his recommendations and he makes lots of money.  His number one recommendation for us was to focus on building the list and then then push people through a sales funnel to get some conversions.

John uses and recommended everyone that wants to make money online get an account with the best email auto responder service out there – AWeber.  The truth is that sending lots of email is a very difficult technical problem it’s much better to start with the correct service than try to move over your email list once you have it.  Both John and I agree that AWeber is by far the best email service out there.

Trying to save a couple of bucks early on by collecting emails and sending them yourself is a big mistake.  John used a different email service while he grew his list to 25000 then he discovered that only 70% were getting through the spam filters.  That’s a lot of money he’s missing out on!  So he decided to move the list over to aweber and he ended up losing 80% of his subscribers in the process…  By CANSPAM law you can’t move your email list without opting everyone into the list again.  That was a huge setback for John so he recommends that you start with the best.  It is probably the most cost effective tool you can buy to make money online.

John Chow’s business model is such a simple system but it works because John is consistently posting to his blog and is always getting fresh traffic to grow his list.  It can actually be a lot harder in practice since it’s so easy to try blogging for a week and then give up.  Consistency is key.

In my experience the inconsistency of posting to this site has almost killed it.  And if it wasn’t for a few good posts that got ranked well in Google then almost nobody would be here.  It is actually surprising that you never really know what posts will get good traction so it’s important to keep writing good stuff and keep things keyword targeted as much as possible.  With enough content out there eventually something will stick and you’ll continuously get traffic without much additional work.

John gave us lots of little tips – some of which I have already implemented on my sites.

His site is proof that the concept does work and it really got me stirred up again with ambitions to start writing more content and get my business model ironed out a bit more.

I was just introduced to the concept of Inevitability Thinking and I felt so excited that I just had to write a post about it.  inevitability thinking is a real game changer and perhaps the most important thing that I have ever come across to guarantee success.

You are probably familiar with the concept of goal setting.  Goal setting has been recognized as a key part of achieving the success you want in life.  It basically involves thinking about where you see yourself in the future.  It’s a powerful and important aspect of developing your plan for success because without a destination you’re really just meandering through life.

Earl Nightingale recorded the very first gold spoken word record.  This record was really the beginning of the modern self-help market and in it he impressed the importance of proper goal setting.

An evolution to that idea was made by Robert Biel who found that a majority of people prefer to think in terms of problem solving.  Make a list of the things standing in the way of you reaching your goal and then systematically solve the problems that are in the way of reaching that ultimate goal.

Inevitability thinking operates at the root of both of these.  The real problem that most people have it is the follow through.  All the best intentions in the world won’t ensure that you actually get it done.  You have to ask yourself these two questions:

  1. What condition would force me to make a necessary part of my goal?
  2. What can I do to get that condition in place as soon as possible?

If you’ve taken the time to really establish your long and short term goals and developed those goals fully to understand what your life will be like when you have reached them, and then enumerated all the necessary things that will have to happen. Then the final step is to make sure that they do happen.

For example, imagine you’ve set a personal to get fit and run a marathon.  Then you would have to visualize what specifically you would have to do to reach that goal. How much exercise would you need to do every day, when and where would you do it?  If you’ve developed a plan and know what you can do today to take a step towards your goal then you need to create a condition that would force it to happen.  This might be to find someone to be accountable to for your workouts, higher a coach, form a mastermind group to talk with regularly or put something in the way.  Anything you can do to make avoiding the things you have to do impossible.

It’s perhaps the most important question that somehow was never impressed upon me until now.

What do you think?