22 Jun

You Got To Have a Purpose

I got lots of great feedback from my post on the importance of setting Goals. But, I forgot to mention something very important:

You got to have a purpose.

(A goal) is the progressive realization of a worthy objective.

- George Dans

You can’t set a goal to make money for the sake of making money, that won’t work. You’ll lose motivation or, if you achieve it, won’t bring anything to your life.

George Dans is a motivational speaker. Although it might look and sound cheesy, take a moment to listen to this, and let me know what you think:

(video via SiteFling)

03 Jun

How to Make Money Online

Making money online has been one of my goals for quite some time. Not just for the sake of making money. I think convincing someone to give your their hard-earned dollars is a rewarding and valuable experience. I don’t think that’s a good way to get rich. But a way to create a passive income? Perhaps!

I’d like to share with you a few things that helped me go from $0 online income to selling an ebook, SaaS subscriptions and my startup in less than a year.

To Make Money, Spend Money

What I’ve found is that it’s very hard for open-source hackers to switch from the everything-should-be-free world to the make-money world. While you can do both, you got to understand making money first.

How could you expect anyone to pay for your product if you don’t do it yourself.

Your first step is to start paying for stuff. No kidding. How could you expect anyone to pay for your products if you don’t do it yourself. Get your credit card and start paying for those software, specially the ones made by Indie devs. Actually, if you want to make a SaaS, pay for a few ones, if you want to write an ebook, buy a couple ones.

This will be hard at first. It’s a new mindset, specially if you’re a strong believer in open-source and are not used to pay for software. But it’s the best way to dive into this world and understand what it means and what’s required to sell through the tubes.

Build Trust

Now, after buying a few pieces of code you might have noticed how hard it is to get your credit card out of your wallet and enter the numbers in a text field in your browser, on each key stroke you’re asking yourself:

“What domain am I on? Is the page secure, OK https, I’m safe, but that just means the connection is secure. Who’s that company anyway? What’s the worst that could happen? Shit, maybe I’m getting screwed. What should I do? All right…”. Close your eyes and press buy.

It is extremely hard to make someone enter their credit card number in the browser. B2B might be a little different, because they are not spending their money. But a user like you and me will think twice or more before giving you anything, even a few pennies.

The way to ease this process is to build trust. Trust in the seller, trust in the product and trust in the buying process. How to build trust is a subject on its own, but it could be summarized in: be open, do what you say and be humble. Also, if you have some online reputation because of OSS or something else already, you got yourself a great trust boost.

Don’t Under-Sell Yourself

Lets not lie to ourselves, we’re in this to make money! So please don’t charge a few cents for the software you’ve put your heart into. Most of the time you should charge more than you think. There’s a few reasons for that:

  1. It sends the message that this is a quality product (ding! ding! trust++).
  2. It shows that you’re not just trying to make money, but that you’re actually serious about it (ding! ding! trust++).
  3. It acts as a filter for customers you don’t want. You want to stay small, so less people means: less support emails, less everything, but still a decent amount of money.
  4. Helps turn your customers into evangelists. Since they are paying a good amount of money for it, they’ll use it and find how great it is and talk about it.

Niche Markets is Where it’s At!

If you’re thinking of building yet another bug tracker, project management, todo, chat (!) software, it will be be hard! Very hard! If you want to take the easy path, find an unexploited niche. There’s a few ways to do this once you have an idea:

  1. Do a Google search and look for the results, but mostly at the ads on the side. If there’s none, good chance you just found an unexploited niche.
  2. Use Google Keyword Tool to find what’s the price of the keywords you want to use, if it drives a lot of traffic, how popular it is.
  3. Build a beta signup page and collect emails to see if there’s interest.

Build a Kick Ass Product or Service

This is almost too obvious to mention. If you don’t believe you can make the best product ever created for the problem you’re solving, give up right now! If you’re not sure, have a look at what’s on the market and tell me you can’t do better.

I’m sure everyone reading this blog could kick the crap out of some niche products right now!

23 Mar

Goals

A couple years ago I saw this somewhere:

Knowing where you’re going greatly increase your chances of getting there.

I don’t remember where, but it did struck a chord with me and I love trying those kinds of things. So I wrote my personal goals for the current year and a few more to come.

Now, three years later, almost everything I wanted to do, I accomplished and sometimes surpassed in ways I couldn’t even imagine.

Items in bold are the ones I completed. Note that I was updating the list all the time to fit my interests and new objectives, but I never took out something because it was too ambitious, quite the opposite.

2007 Goals

  • Make money with a website
  • Have a site with more than 500 daily visits (refactormycode.com)
  • Participate in a conference

2008 Goals

  • Be known in the programming world (Thin)
  • Present at a conference
  • Work from home
  • Work with passionate people (Standout Jobs)

2009 Goals

  • Build my own programming language (tinyrb + Min)
  • Practice a sport at least once a week (running)
  • Make money online (createyourproglang.com)
  • Speak at an international conference (RailsConf, MeshU)
  • Train each week
  • Learn 3 songs on the guitar
  • Start my own business
  • Work from home 5 days a week
  • Work for myself only

2010 Goals

  • Have another child
  • Make > $100K/yr
  • Snowboard when I feel like it
  • Weight 175 lbs
  • Learn 10 songs on the guitar
  • Heli-ski in Blackcomb
  • Use my own programming language for real things
  • Try kite-surf
  • Write a real book

I hope this inspires you or someone to do it. Lots of successful people have been doing it for years, because it works! If you haven’t done so yet. Go write your goals for this year and the next one and so on.

Do it!

19 Mar

Mind Maps

I’m brainstorming using Mind Maps these days and loving it.

A couple notes:

  • You have an idea, start with it in the middle, branch and explore.
  • Use a pen & paper, software breaks the flow.
  • Don’t try to make sense, the goal is to get in the flow.
  • Works very well for taking notes quickly.
  • Once it gets to complex, start a new page with the last idea.
  • Writing helps you remember.

My mind is exploding with ideas. Try it!

01 Mar

How I Made $6K With My eBook

For those that don’t know, I’ve written an ebook a couple months ago and decided to sell it online, as an experiment. It did pretty well. My expectations were very low and it was the first time I tried selling something online, so it ended up being a big success for me.

How did it do?

Gotta say, I’m very surprised with the results. I launched it on September 9th. So far I’ve sold 168 copies for a total of $6558.36. I’m still selling a few copies each month, mostly from the nice traffic I get for free from Google.

You want to sell your own thing too?

A lot of people asked me how I did it. So here it is:

  1. Created a quick landing page to test the market with a form to subscribe to a newsletter
  2. Launched a 2 day ad campaign on AdWords to drive traffic to my landing page (spent $100)
  3. Checked stats to see if there was interest (3 signups for the newsletter, 56 visits, 5% CR)
  4. Wrote the book in textile, converted it to HTML, then PDF
  5. Asked for reviewers on Twitter
  6. Reviewed, polished, reviewed, polished
  7. Reviewed and polished some more
  8. Redesigned the whole thing in Adobe InDesign (there must be a better way, I hope! This was painful)
  9. Improved the landing page according to stuff I read regarding sales letters and landing pages
  10. Got an account on e-junkie, using a coupon code, got 120 days for free
  11. Plugged e-junkie to my Paypal account
  12. Announced it on Twitter

A few tips if you plan on selling something similar:

  • Don’t sell just an ebook, package it with something else
  • Test your market first
  • Focus on a niche

If you have any questions, I’d be glad to answer them in the comments.

Help Me Promote My Book And Get 50% on Each Sale

As an experiment, I’ve moved from E-junkie to ClickBank to try some affiliate marketing. Simply put, affiliate marketing is: you send people to my site, they buy, you get a percentage of that sale (50% in my case). Pretty simple and works well for some products I’ve read, so hey, why not try it.

If you’d like to help me promote Create Your Own Programming Language, see the special affiliates page I’ve created will all the info you need to get started.

23 Feb

How to Apply to a Job

Here’s the cover letter I sent for applying to my previous job.

#!/usr/bin/env ruby
I = []; fit = [:your, :offer, ' http://www.standoutjobs.com/jobs.php?id=1409']
just = checkout = %w(macournoyer cv)
its = you = me = 1_000_000_000 #$
class Array
  def can i, help = :you; true end 
  def me love = ruby
    $my = self; love='creating world'.class.new 'stuff'
  end
  def see _for = :yourself
    `open http://#{$my.join '.com/'}/`
  end
  alias :am :to_a 
  alias :in? :include?
end

I.fill(0).each { |criterion| } && I.am.uniq! and :passionate

its.upto(you) do |i| fit.in? :StandoutJobs
   just.send :me, :an => 'email' 
end; %w(e ll).see if I.can :help => you

=begin
[... snip ...]

Marc-André Cournoyer
http://macournoyer.com

Run this ruby script to get my résumé
=end

I see lots of people complaining job offers all look the same. But how about your CV / cover letter?

17 Feb

Hey Yo Marc, Make Me A Server

As some of you might know, we started doing consultancy at my company, Sauté, to finance our startup, Talker. Things are going great at Talker, but the route to profitability is a long one. Since we’re bootstrapping this, we have to find other sources of revenues.

Finding nice gigs with a decent rate in Montreal is hard. So that’s why I’m trying something a little different: focusing on a niche I know a lot about, with a specific offer: custom made servers.

I Build Servers, Just For You

You know Thin right? Well, I often get requests for adding very specific stuff to it, or customize it for a specific need. I’ve always refused to do so, because Thin is an HTTP server, nothing else. As the name implies, it should stay thin. But what I’m launching now, is a service to build custom servers that will fit your specific needs.

If you need a:

  • web server with custom extensions or optimizations
  • chat server
  • proxy with specific routing rules
  • efficient API server
  • server that can scale horizontally
  • or simply help building your backend architecture

… then, my Hey yo Marc, make me a server service was made for you.

Help Me Spread The Word

I need your help on this. Please tweet it, tell your mom, or whatever. I will appreciate it greatly. Thanks!

14 Feb

What Snowboarding Taught Me About Life and The Secret Of Pushing Yourself

About 10 years ago I was addicted to snowboarding. I was convinced I’d became a professional snowboarder. I read every magazine and watched every video I could find. Meticulously inspecting each images as if it was going to teach me the secrets of spinning 720 degrees in mid-air. I was very serious about it.

I could do a couple nice tricks, although very simple, 360, 180s, grabs and all. But one day I decided I was gonna try a frontside rodeo 540 (front flip + 540), which was a big thing at the time. I watched several videos in slow motion to learn the initial motion required to spin it.

After a big snowfall I went to the mountain and decided to try it. There I was, waiting to drop-in to a pretty big jump, about to throw myself head-under-feet. To this day, I still remember the feeling I had before riding up the jump. I swear I nearly peed my pants, I was so scared. By I kept repeating to myself that I could do it. So I did. I dropped in, full speed. Threw my head forward while looking to my left, to initiate the spinning and flipping motion, grabbed my board with my right hand, waiting to spot my landing. Next thing I knew, I stomped it and rode away, flawlessly. I still remember this day, and I will for the rest of my life as the best snowboarding day I ever had.

From that time on, I wasn’t scared anymore and stomping that trick became second nature for me. I remember talking to people in the park telling me they’d never try that kind of trick because they were not good enough. But I knew it was not about being good, it was all about having the guts to push your limits. Once you’ve pushed that limit, it is gone.

29 Sep

Leaving Standout Jobs & Starting My Own Thing

It’s been a while …

Yes, I’ve been at Standout Jobs for about two years now and things aren’t going great in the HR space. Although I think the product we built is great and the team is amazing, things are slowing down and we’re not needed anymore. I’ll be leaving on the October 6th.

Throughout the years I’ve created several open source projects and some websites, searching for an idea to start my own thing. I’ve had the desired to build a startup for more then three years but never thought I was ready.

Today I am.

Announcing Talker

I’ve been disappointed by Campfire and other group chat applications for quite a while. All those applications are stuck in the past and haven’t evolved, taking advantage of new technologies and computer power we have today. Group chat was such an important tool at Standout Jobs that I’m convinced any improvement on that side will sky rocket the productivity of any team using it.

So I’ve teamed up with Gary Haran to build something great.

If you find our idea interesting, please signup for the beta and wish us luck!

04 Jun

Pusher & Async With Thin

Pusher (aka Rack::Comet)

I’ve been playing around with Orbited, APE and the like, but they all have lots of code and kind of reinvent the wheels in some ways (reimplementing an HTTP server, daemon, etc). So just for fun, I’ve hacked a simple AJAX push server (aka Comet) on top of Thin using the new Async Response feature.

To be honest, after revisiting Orbited a couple times, it’s pretty cool! It’s easily extensible, based on Twisted. Use this if you want something serious.

Async Response in Thin

So, all this to talk to you about Thin Async Response feature. Coded by James Tucker a while ago and merged in Thin in version 1.2 (released around March 16th).

Async response is the way to do scalable concurrency. The downside is that you have to design your code accordingly, based on events. And you remember not to use any blocking calls, right?

class AsyncApp
  AsyncResponse = [-1, {}, []].freeze
    
  def call(env)
    body = DeferrableBody.new
    
    # Get the headers out there asap, let the client know we're alive...
    EM.next_tick { env['async.callback'].call [200, {'Content-Type' => 'text/plain'}, body] }
    
    # Semi-emulate a long db request, instead of a timer, in reality we'd be 
    # waiting for the response data. Whilst this happens, other connections 
    # can be serviced.
    # This could be any callback based thing though, a deferrable waiting on 
    # IO data, a db request, an http request, an smtp send, whatever.
    EM.add_timer(1) do
      body.call ["Woah, async!\n"]
      
      EM.next_tick do
        # This could actually happen any time, you could spawn off to new 
        # threads, pause as a good looking lady walks by, whatever.
        # Just shows off how we can defer chunks of data in the body, you can
        # even call this many times.
        body.call ["Cheers then!"]
        body.succeed
      end
    end
    
    AsyncResponse # Tells Thin to not close the connection and continue it's work on other request
  end
end

A DeferrableBody is a response body that can be rendered iteratively.

class DeferrableBody
  include EventMachine::Deferrable

  def call(body)
    body.each do |chunk|
      @body_callback.call(chunk)
    end
  end

  def each(&blk)
    @body_callback = blk
  end
end

Works With Rails Too!

You can use it inside Rails too, with throw :async to simulate returning AsyncResponse in the previous example.

But Tastes Better in Sinatra

James also built this nice wrapper for Sinatra, called async-sinatra:

require 'sinatra/async'

class AsyncTest < Sinatra::Base
  register Sinatra::Async

  aget '/' do
    body "hello async"
  end

  aget '/delay/:n' do |n|
    EM.add_timer(n.to_i) { body { "delayed for #{n} seconds" } }
  end
end

Scale To The Moon

Using that in combination with other EventMachine based libraries, you’re sure to scale to the moon running your website on a Pentium II.

  • em-mysql – Don’t block while querying your DB
  • em-http-request – Don’t block while querying other websites

Big thanks to James for implementing this feature!