Business cards for knowledge workers

September 12th, 2012 No comments

I’m obsessed with business cards.

I’ll admit it.

I get excited when I meet someone who took the time to do something interesting with a card. I’ve found myself respecting people or companies more if they have a well-thought-out card. One time I requested a meeting with a person purely based on the quality of his card.

Here are a couple cards I like:

I like cards that are well designed, that are one-of-a-kid and that convey a message. Showing a little character is big. Image consistency between a card and a corresponding website? Key.

On the flip side, I’m sure you’ve all seen stock cards on cheap paper. The most egregious is the Vista print variety. Do I even have to remind you the message dirt-cheap cards convey when a new contact hands you that flimsy card peddling a plug for the card-printer on the back?

OK, with that out of the way, I’m a software developer. I do a mix of freelance and startup work. The types of contacts I want to make are potential business partners, clients. and industry contacts (the types of people you’d meet at PyCon). I think knowledge workers like me should have great business cards. Spend your money and time on it.

Recently, I was actually questioning my affinity for business cards. As of last week I was pretty sure nobody ever used my card. I don’t give my card out too often, and the few people I did give it to were friends and family who already know how to contact me. There were a few times I handed it out to strangers, but I wasn’t sure if I was getting any reaction out of it.

About six months ago, I gave my business card to someone I met in an elevator. We hit it off: he was working at building his startup and wanted to keep in touch. At the time he commented about the card and was pleased to have met. Nothing happened. Today I got a call from him wanting to set up a meeting.

If your deals are worth tens of thousands dollars, spending a couple hundred bucks today on a very focused marketing plan seems like a well worth investment for tomorrow.

As a knowledge worker, we don’t have many sales opportunities. Take the time to make a statement, you never know who you’re talking to.

Categories: Startup Tags:

Satchmo installation

November 14th, 2011 5 comments

Been playing with Satchmo today. One issue I ran into, is I installed the Trunk version of Django, which Satchmo apparently isn’t compatible with; it apparently expects Django 1.3. The easiest way to get started with a very fresh install of Satchmo is to go through the following steps.

Setup and activate virtual environment:

~/projects$ virtualenv test
~/projects$ cd test
~/projects/test$ source bin/activate

Make sure you have PIL installed:

sudo apt-get install python-imaging

Install Satchmo:

~/projects/test$  hg clone
~/projects/test$ cd satchmo
~/projects/test/satchmo$ python install

Install all the other requirements:

~/projects/test/satchmo$ pip install -r scripts/requirements.txt

Setup sample store

/projects/test$ python source/satchmo/scripts/
/projects/test$ cd store
/projects/test/store$ python runserver

Then just shoot your browser to:

Categories: Django, Satchmo Tags:

Web framework focus

September 7th, 2011 6 comments

Over the years I’ve used, read about, and played with lots of different web frameworks. One of the things I’ve concluded is that none of them are perfect. As with the languages they live on top of, each of these frameworks is a tool that fits certain tasks better than others.

One other thing I’ve realized is that the focus of the community effects the type of web sites that are made. In some frameworks there’s a huge emphasis on Ajax integration (such as web2py), then there are others that are more focused with data manipulation and control of flow (such as Django). Now one other interesting thing is that this focus leads to different types of sites being made.

Two mammoth examples that come to mind are Amazon and Google. While they’re not the most perfect examples for these purposes, I bring them up because they both are layered more than the average site we work on. There’s Java or C++ behind doing all the number crunching. Then layers of other languages in between. One thing about sites like these is, although they all have Ajaxy components, not one of those pieces is superfluous. It takes so much work to tie one of these features in that there just won’t be anything extra.

With a site made with Lift, Wicket or Web2Py I think you get the sense that they’re giving away Ajax for free and they feel that they have to make use of it. Rails sites also seem to be heavier on Ajax than the average site. Django sites on the other hand for the most part are lighter on this feature since it’s not as simple as to tie in these pieces.

These are just observations I’ve made and I’m making no judgment call on what the right amount of Ajax is, or the right framework. It’s just interesting to see how tools seem to be effecting what gets produced even though you could essentially produce the same exact sites with all of these tools.

Categories: Django Tags:

Impressive Satchmo Sites

August 29th, 2011 2 comments

I’m starting a project for a client in Satchmo and wanted to show him some sample stores produced with the technology so that he’d feel more comfortable with what it’s capable of. The following are the standouts after going through all the items on this list:

Quick note: while scanning through these sites it became very obvious how important is for a site to have a quick response time. When I clicked some of the links on the stores that I went to the site just wouldn’t respond to my requests. It just feels a lot better when the site is snappy and ready to serve you.
Categories: Django, Satchmo Tags:

Slow connection

August 29th, 2011 No comments

So there was something peculiar with my Linux box at my office. While my network connection is reasonably fast, it would take about ten seconds sometimes for my browser to start getting information from web sites. And almost 100% of the times I tried to load the URL would just not resolve. I did some research and thought that maybe there was something with the DNS setup that might be awry.

Apparently in Ubuntu there’s thing called “Network Manager” that makes decisions about which nameserver to connect to. While I don’t know why this happened, Network Manager did a very bad job of selecting the nameserver to connect which resulted in this issue. I first tried connecting to Google’s nameserver (didn’t realize this was an option) and had pretty great results. I believe the IP is “” Then I did some more research and learned about this FANTASTIC application that tries its very best to choose the best nameserver for your setup. It’s called “namebench” The smartest part of namebench is it actually looks at your browser history (if available) to get the quickest nameserver for your actual usage. After running that tool, it recommended three nameservers to connect to. So after getting the results, I did the following:
$ sudo emacs /etc/resolv.conf


And then you have to do one more thing to make sure Network Manager doesn’t override your changes the next time the machine starts up.
$ sudo chattr +i /etc/resolv.conf

If you want to edit the file again you need to undo the chattr setting like so:
$ sudo chattr -i /etc/resolv.conf

Categories: Network, Ubuntu Tags:

Backing up your database

June 23rd, 2011 2 comments

Let me start by saying that there are MANY ways to backup databases and this might not be the absolute best way, but it definitely works. I’m backing up my PostgreSQL database that happens to be populated by Django, but you can muck with things as you see fit.

So, one of the decisions I had to make is whether to save a representation of the data or to just dump the database data itself. The first option would be something like this:

python dumpdata --format=yaml

Second option is to talk directly to the database. The benefit of this option is you get everything about the database in its current setup. Let’s say you made some changes to the schema directly within PostgreSQL. If you dumped the data into YAML or JSON you wouldn’t get those changes to the database itself. So it’s probably prefereable to go straight to the DB like so:


What I ended up with is a nightly backup on the database server. Then I pull that data from onto a second server using rsync.


Steps it took:
1. Setup e-mail sending, so that I get cron e-mails.

$ sudo apt-get install mailutils
$ sudo apt-get install exim4-config
$ sudo dpkg-reconfigure exim4-config

Test sending of mail from server

$ echo Test | mail -s Test <YOUR E-MAIL>

E-mail sending log lives here:



2. Setting up cron job on server to stash database schema and data. What I did is ran the cron job as the postgres user so that it would have access to the database.

$ su postgres

$ crontab -e
0 1 * * * pg_dump > "<PATH TO BACKUPS>/$(date +\%Y-%m-%d).psql"


3. Setting up pulling data onto another machine; setup e-mail just as you did on server machine

$ crontab -e
Categories: Django, PostgreSQL, Ubuntu Tags:

Flush cache

March 1st, 2011 No comments

I have yet to take the time to understand why this problem only comes some of the time, but anyways, most of the time a hard refresh of a site takes care of clearing the browser cache of a page. Every once in a while the actual DNS entry to a sites is pointing at the wrong place. In those situations (on a OS X Leopard) do the following:

dscacheutil -flushcache
Categories: Apache Tags:

Give me your sales pitch

April 19th, 2010 No comments

Over the last few years I’ve grown to really like and appreciate high quality coffee and have even discussed it before here. Thanks to posts by 49thparallel and ElysianCoffee I found myself at a coffee convention in Anaheim this weekend; and had a blast. There were lots of opportunities to try great lots of coffee and to see the big faces in the coffee community. The best part was that I got to see all the different things that go into the business of coffee; from roasting, to water purification, to espresso machines, packaging, and much more.

This event was mainly meant for people in the coffee business and as we walked from booth to booth, I was startled by how little I was hounded by the people representing the different businesses. I would go up and engage with their products or paperwork and with few exceptions nobody said a word to me. This is supposed to be an opportunity to make new business. I am very likely a potential customer for your business. These companies have paid lots of money for these booths, flew over these people, put them up in hotels, and not a word.

As I walked around thinking about this, it hit me that clearly business conventions are not the only place where this is an issue. Every single day, each one of us is selling ourself to the world. Whether it be a desk job, an entrepreneur venture, or working to impress members of the other sex. There are lots and lots of sales opportunities. You might be at the gym, a meeting, or a coffee shop. Your goods are with you, don’t forget your pitch.

Categories: Coffee Tags:

What’s in a name

December 17th, 2009 No comments

I’ve run into a couple naming issues this week. Some more serious than others…

First thing that apparently needs to be brought up: do not touch built-in language names. Languages mean things, only when the language exists. If you start overriding names, nothing makes sense. I was working on a script this week that just didn’t work right. Took me a bit of digging to realize that the keywords ‘type’, ‘file’, and ‘os’ were used as variable names. Fun, no. Headache, yes.

The other naming issue is using names that are hard to search for. We have a project where I work that is named ‘go’. Filtering by ‘go’ in my e-mail doesn’t do anything useful. Searching for ‘go’ in our bug system is pretty pointless too. The funniest issue with the word ‘go’ is when it’s discussed in conversation. The name just roles into language and your ear just doesn’t pick up that you‘re talking about a tool.

Oh, and while we’re on this issue, even if a word may make sense in context, please consider how it will be discussed. Talking about delivering and ingesting just doesn’t sound right. Why can’t we all upload and download?

Respect names. They mean things.

Categories: Uncategorized Tags:

Google Style Guide

November 10th, 2009 1 comment

So, I’m reading through Peter Seibel‘s “Coders at Work“, which both Joel Spolsky and Jeff Atwood blogged about. At some point I want to write more about the actual interviews; which are fantastic. But today, I’m just sharing a link of something that I came across in the book. In Seibel’s interview with Brad Fitzpatrick, Brad mentions something about style guides that Google published. Well I found the link to them and passed them around my office and it started some pretty interesting conversations. Anyways, thought it was worth highlighting this link since it’s definitely worth a read through.

The reason I even thought about looking up the link is because there was a discrepancy in the way people were naming Python modules in the project I’m working on, which was making me a bit uncomfortable. I was wondering what the Google folks had to say about it. With Guido, of course, their opinion has some clout in the Python world…

I’m only on the fourth interview and I’ve already been exposed to lots of great material. One thing that I finally did — after years of wanting to take the plunge — is I ordered The Art of Computer Programming books (“volumes”) by Knuth. I *almost* buy these books every single year since 1999, but it just seemed time…if you read the “Coders at Work” book, you’ll see why… One great thing is that they put out a new version of the books in paperback, and they’re MUCH cheaper than previous versions. So that made the decision to finally buy them very easy.

Categories: Programming, Python Tags: