Charity Auctions on Social Networks

Did this paper provide an early proof for the Groupon model?

Conitzer and Sandholm introduced the idea of using auctions to allow individuals to offer to match the contribution of others. We explore this idea in a social network setting, where individuals care about the contribution of their neighbors, and are allowed to specify contributions that are conditional on the contribution of their neighbors.

We show that if the social network is strongly connected, the mechanism always has an equilibrium that raises the maximum total contribution.

Posted in Aside, Marketplaces | Tagged , , | Comments Off on Charity Auctions on Social Networks

Thick, Uncongested and Safe

Successful marketplaces require three key elements. “They must be thick, uncongested, and safe,”…

Having sufficient “thickness” means there are enough participants in the market to make it thrive. “Congestion” is what can happen when markets get too thick too fast: there are heaps of potential players, but not enough time for transactions to be made, accepted, or rejected effectively. “Safety” refers to an environment in which all parties feel secure enough to make decisions based on their best interests, rather than attempts to game a flawed system.

Al Roth’s three requirements for a marketplace, as described in Working Knowledge. Al’s Market Design blog is well worth subscribing to for any aspiring marketpreneur.

Posted in Aside, Marketplaces | Tagged , | Comments Off on Thick, Uncongested and Safe

Open Source Motivations

Alex King has published a great post today about Open Source Motivations.

One comment stood out for me:

Unless the WordPress community at large starts to better recognize and reward the developers that create the tools that they use and rely on, the developers won’t/can’t continue to provide as they have.

I think the community wants to reward developers. The donations Alex receives are proof. The problem is the lack of a structured mechanism for such rewards, which means non-technical members of the community feel powerless, leading to the rudeness Alex mentions.

As demonstrated by the massive drop in donations Alex experienced when WordPress.org changed how it presented plugins, an avenue for rewards can make all the difference. That’s why a friend and I are building one on the Prospress Marketplace Platform.

Posted in WordPress | Tagged , , | Comments Off on Open Source Motivations

Canon – It Works!

The slogan for Canon’s camera range is Delighting you Always. Of course this isn’t always possible, it’s aspirational. And Canon do make delightful cameras.

Let’s compare this to their slogan for printers in Thailand – It Works! Yep, that’s it. The current state of the printer industry is such that a working printer is the highest aspiration. Perhaps the next Canon slogan could be Printers are Sent From Hell To Make Us Miserable.

There is a huge opportunity here for a startup to make a printer that does more than just work.

Posted in Adness | Comments Off on Canon – It Works!

My Git Workflow

A longtime Subversion user recently asked me for tips on switching to Git. A sort of “top 5 commands I need to know to get going”. Having only recently mastered this beast, I gave a few more than 5 commands as I wanted to share its true power.

It’s taken me an embarrassingly long time to become comfortable with Git, but now that I have, I love it. I say that at the outset because when learning Git, you often feel like you’re wrestling with it. I want to assure you it is worth the trouble. If you ever find yourself loosing faith, take solace in a quote from this Git vs. Mercurial post:

Git is for monstrous geeks … who like to wrestle with their tools before settling into using them.

You’re not alone. I’d say it’s more like a wild stallion though – hard to tame, but rides like nothing else once you have it under your control.

Creating a Repository

Firstly, I’d suggest signing up to GitHub and creating a repo. GitHub are pretty good at giving newbies the commands and explanation for the stage you’re at. For example, when you create a new repo, GitHub will tell you exactly what to do next.

In line with the instructions given by GitHub, this my workflow for creating new repositories.

Create a repo from the current directory:

git init

Add all my files to the local repository & commit them (as Git is distributed, you add/commit locally then push to a remote repo as needed):

git add .
git commit -am 'Initial commit'

This commits all changes to the current branch of the local repo. The m flag adds the commit message specified, in this case “Initial Commit”.

Add the remote GitHub repo and send files to it:

git remote add origin git@github.com:your-username/new-repo-name.git
git push origin master

The first line adds a remote repo named “origin”, the standard remote name. The second says send the changes I’ve committed locally on branch master to the remote master branch of the repo named origin.

Viewing & Committing Changes

Now a few days later, I will have made changes to my files. I’m still accustomed to centralised version control though so I don’t commit every 10 minutes like I can with Git. As a result, I have a few days worth of changes to add.

Firstly, I’ll see what files have changed since my last commit, good for people with 6 second memories like myself.

git status

Then I’ll look at specific changes in the files the status command told me had changes.

git diff filename.php
git diff another-file.php

I’ve been a bad code monkey and added a few different features and bug fixes without committing the changes. I can still make atomic commits now though.

git add filename.php
git commit -m 'Fixing bug with example feature.'
git add another-file.php
git commit -m 'Adding another widget to foobar.'

Then I’ll send my changes to GitHub.

git push origin master

Tip: the origin master part can be done automatically by editing your .git/config file in the repo’s directory.

Multiplayer Git

Now, say you follow the steps above. You’ve created a GitHub repo and sent your files to it. Then you get a Pull Request from me. I made a fork of your repo and added some awesome new features, now I’d like you to include them in your version. GitHub would give you handy instructions on what to do with it and they would be something like this.

Create a new branch to put the fork’s changes until you’re sure you want to merge them:

git checkout -b thenbrent/master

The checkout command switches to a different branch. Because the thenbrent/master branch doesn’t exist yet, we use the -b flag to create it. The name thenbrent/master is arbitrary, use anything you like that reminds you of the contents of the branch.

You would now be in the new thenbrent/master branch, ready to safely get a copy of my changes without changing your main branch. There is a big difference here between SVN and Git. Branches are not stored in separate folders. You’ll feel uncomfortable sitting in the same directory about to merge changes. It feels like you’re going to mess up your main branch. Have faith in Git’s mastery of the dark arts and pull the changes.

git pull https://github.com/thenbrent/new-repo-name.git master

The pull command both fetches the changes from my remote repository and merges them with the current branch. Git’s magic should work and merge the changes smoothly. It works 90% of the time, every time. If your merge doesn’t work, Git will give you a cryptic riddle to explain how to fix it. Fortunately, Google & StackOverflow will give you an answer to this riddle.

Now before you merge my changes into your master branch, you should take a look at the changes I made.

git diff thenbrent/master master

If it all looks good? You can switch back to your master branch and merge the changes with your master branch.

git checkout master
git merge thenbrent/master

That’s my workflow, at least the one balancing Git’s power with brain computable simplicity.

Also git log is a beautiful thing and you must add this pastie to your .bash_profile to preserve sanity when working with multiple branches.

For more in-depth info, checkout, Git Magic. It’s by far the most engaging and entertaining Git documentation I’ve found. Almost enjoyable enough to read cover-to-cover… almost.

A useful post on GitHub collaboration and for explaining the bash_profile changes I mentioned above is on the Less Everything blog.

UPDATE: a friend also pointed me to GitBox for Mac, which he said was a great app for getting into Git.

Posted in Blogdex | Tagged , , , , | Comments Off on My Git Workflow

Starting a Business is a Misnomer

When I was 22, fresh out of university, I set out to start a business. I spent a lot of time creating a company brand, thinking about the management structure, writing the marketing plan. The type of stuff you do at uni to get grades, which isn’t the type of stuff that creates value.

I also entered a competition for capital, the requirements of which were pretty extensive. In the end I spent more time fulfilling the competition’s criteria with my 100 page business plan than I did looking into the practicalities of the business. I didn’t get the funding and soon after realised there was a legal roadblock that meant the idea wasn’t viable in the form I’d spent so long planning for anyway.

I vowed after that to never “start a business” again. In fact, I realised this phrase is actually a misnomer. Businesses only exists to support a product or service. To create a business, I first needed to create a product.

Take Two

A bit over a year ago, I had what I thought was a good idea. I started working on the business details and then stopped myself for fear of repeating history.

I went tunnel vision on building the product. I didn’t worry about a company for it, I just wrote code. No business plan. No legal entity. I focused on nothing but code for around 6 months. After that, I was coming close to having something to release, so I spent a day registering a legal entity under a name I liked. Then I got back to writing code.

When I was making excuses for not going out on Friday nights or why I was awake at 3am, I rarely said I was “starting a business”. I said “I’m working on a project”. It didn’t get me as much respect when blowing off social events, but the simple semantic difference was important for me. It kept me focused on what mattered – the project.

From Project to Product

I’ve now released my project into the wild. People are using it and I recently had a great idea of how I could build on it to create revenue. Soon it will be a product, or a service to be precise.

The business essentials have gradually fallen into place along the way. A company and product name and bootstrap marketing strategy have all come from spending late nights thinking about those things. While my productive hours have focused purely on creating the project. I’m getting to a stage where some planning will be very helpful, but I’m glad I didn’t plan at the outset. Too much has changed along the way.

I don’t think I’d actually have made it this far if I planned to make it this far.

The Bonus Prize

The bonus in focusing on the project is flexibility. The current incarnation of my project is broadly inline with the original idea, but the specifics are completely different to how I thought they would take shape. Also, the service I will now build on it is something I’d never have conceived in the beginning. It’s actually solving a problem I only encountered when building the project.

Its been said before, but flexibility is incredibly valuable. The less planning the more flexibility. The more you invest in the idea in a certain form, the less likely you are to let that idea change form. And it must change form.

The moral of the story, don’t start a business at the start. Build a project or product, find customers and then start a business.

Posted in Anecdotal Evidence, Hacker Tales, Navel Gazing | Tagged | Comments Off on Starting a Business is a Misnomer