When I build websites, I often get a set of free business cards from VistaPrint. I'll pass these around to people so they'll remember to try my new site.
VistaPrint will send you 250 cards on good quality paper for free. You only have to pay shipping - which is under $6. It's cheaper and easier than printing them yourself.
The problem is that VistaPrint offers 42 fairly mediocre designs for the free cards. I prefer simple cards, often with a white background.
Here are the 6 templates I currently like best. I'm not saying these are great designs, but they do the job just fine, and they're basically free.
If you click on these, it'll take you to vista print. The page number under each card is the page the specific template is on in the VistaPrint "Select Your Design" form. Fill in your info (I often leave fields blank, and just put the URL in the main name location) and get some free cards.
UPDATE: The New York Times covers VistaPrint - it's an impressive business model:
A printing company that has strung together 28 profitable quarters by selling — and giving away — business cards. The free cards, of which VistaPrint has distributed 2.5 billion, carry the company’s marketing message on the back.
The article describes how VistaPrint uses software to batch orders together and reduce costs by 50%. Knowing how well they measure and optimize online conversion, it's not surprising that the business is based around software optimization of a business process.
Labels: marketing
Having owned several stocks during the dot com era, I regularly get notices about security litigation. Sometimes I bother to fill them in. And, even more rarely, do I actually receive a check!
Here's my share of the distribution from a settlement against AOL / Time Warner.
Some stats: I get $180.69 from a theoretical distribution of: $2.39B. About 750,000 claims were filed. I think the laywers got most of the money, and Time Warner paid the SEC about $300M, from whence the checks have been drawn.
The wages of evil baby!
Labels: randomness
You know how a lot of radio stations have a slogan like: "More Music, Less Talk"? What if there was an FM station that was "All Music, No Talk"?
There is, and during the summer, it just plays songs. All the time. One after another. No announcing of titles, no station ids, no PSAs, no emergency broadcast system, and of course, no ads. There's nobody there, so there's NO talk at all.
It's a good station, and if you live in Mt. View, CA or Los Altos, parts of Palo Alto, Sunnyvale and Cupertino, you might be able to listen to it: 87.9FM - KSFH. It's run by Saint Francis High School. I think it has a transmitter made of a Pringle's can and an old umbrella, however.
Anyways, as I listen to it, I think how easy it is for well-intentioned socialists like the people at Craigslist to destroy the classifieds business, simply by doing (most) everything for free. Google uses this to their advantage as well.
A radio station has limited reach (like 5 miles in this case), but on the Internet, you can disintermediate world-wide.
Labels: randomness
A Google Miss. The second in their history (Remember Q4 2005?).
I can't say I'm surprised at the miss, because Google eliminated a lot of advertiser spend this quarter with their ad quality improvements. In short, they kicked a lot of advertisers out of AdWords.
By focusing on the worst of the arbitrage, and made-for-adsense type sites, they took a hit. These were the sites that would basically consist of all ads, and so when a user clicked away from a Google ad, they'd go to another site, full of ads. Not the best experience. By eliminating those types of advertisers from the system, they cost themselves money in the name of "better" ads.
I'm sure they planned it - and I'm guessing they look at it as a kind of "weeding the garden". It's hard work, and it cost them this quarter, but they believe they'll have higher quality results, and happier users in the long run...
So you want to build a facebook app? The easiest thing to do is find someone else's code and modify it for your purposes. Especially since the facebook API documentation isn't really that good yet.
Unfortunately, Facebook Apps aren't automatically open, like say HTML or Javascript pages are. So you can't just look at the code of a working application. That's too bad. It would help a lot.
As it stands, the Facebook docs have a dearth of sample code for the Facebook API.
However, in the process of writing my first Facebook App, I spent a lot of time Googling (try looking for 'facebook.php' and other common include files on google.com/codesearch), reading forums, the facebook developer wiki and blogs.
So here's an omnibus post on where to find example code for Facebook
apps, and also a bunch of good links to posts that explain how to
write a Facebook app.
After you've looked thru Facebook "Hello World", you should download their simple, but instructive, Tutorial application called footprints. It's in PHP, and it comes as part of the client library that you need to use in PHP.
The biggest app out there which has released it's sample code is NewsCloud. It's open-source, and worth perusing, though it'd be a big job to try and get running.
In a application where you need to push data to facebook, for updating fb:ref handles, you may want to run your update code from a cron job. You still need to get a facebook api client, which means you have to login. You use your own infinite session key and user id in your code to do this. Here's a page on the facebook wiki which has some sample code for getting your infinite session key and using it in a cron job.
Here's a blog post on updating profiles with a code example using profile_setFBML.
Sample code in PHP connecting facebook to a social network "pledge" system
People Aggregator meta social network, with code in PHP
Code (PHP) from Facebook, which has a FQL call in it.
For those doing push updates with <fb:ref />, here's a re-written Facebook Rest Client class that uses curl_multi to parellize the refreshing of calls from fb:ref
A Perl / CGI example Facebook app - with an example of how to integrate login to a separate into a Facebook app
WWW::Facebook::API is good for Perl programmers, but also useful to just read through the code and docs and get an idea how they adapted the API for Perl.
A few bloggers have created posts which do a good job explaining how facebook apps work from a programming point of view. These are useful to read as you get started.
Here's a sample of their blogging about the architecture:
Facebook user's data in a generic fashion. The real advantage of this approach is that with just the UID of a Facebook user, I can load related data in a Facebook page or on the user's profile without having to do any processing on my end. For example, this --{% for friend in friends %} <fb:profile-pic uid="{{ friend }}" /> <fb:userlink uid="{{ friend }}"> <fb:name uid="{{ friend }}" useyou="false" /> </fb:userlink> {% endfor %}is an example in Django template syntax using FBML that would produce a list of friends with pictures.
Here are more tips and tricks to understanding the facebook platform from the devurandom guys. Some example code in Python in this post.
Excerpt:
Notice there is a "Callback URL" and a "Canvas Page URL". The callback URL is the base URL on the developer's server (washingtonpost.com in our case); the canvas page URL is the base URL on Facebook's server. When you install our app on Facebook, you are redirected to the canvas page URL, which in turn fetches content from the callback. You can have any number of callback pages extending off the base. If you went to apps.facebook.com/thecompass/foo/, then that page would fetch content from specials.washingtonpost.com/politicompass/foo/.Now you can't go directly to specials.washingtonpost.com/politicompass/ because without the POST data Facebook submits to the callback URL, the application won't work. If you hit our server directly without coming through Facebook, we redirect to the Facebook URL for our app. In fact, every time Facebook hits our callback URL there is a little setup that has to be done for each request
Sample FBML code and description of application architecture.
How to make a good social app so it fits in Facebook
Gotchas when using the platform. Part I. Part II.
Sample Hint on updating users' profiles:
To do a more periodic update, you can just iterate over all your users, get their uids, and call profile_setFBML() on each. Remember, from above, you don't need to call set_user for each, just use your own session_key.
- Spend time on your icons and screenshots - This is the first interaction your potential users will have with your app, so it had better be impressive, especially if you have competitor apps already out in the wild. There are three pieces to worry about: an application icon (16 x 16 pixels), an application logo (75 x 75 pixels) and a screenshot of any size you choose (which will be resized to the width of your About page). Make sure you have all of these ready to go before taking your app live.
Let me know if you find other examples and sample code, and I'll add it to this post.
Did you know that Aaron Wall, the successful SEO blogger, makes from $800 - $1000 a day from AdSense? He also rakes in several hundred a day from selling his SEO Book. He's pretty darned successful.
You might think his success is due to one of the following reasons:
You might think that those were the reasons he's so successful, but you'd be sadly mistaken.
The REAL reason is far more arcane, obscure and mystical: letterology.
It's all due to the sequence of letters in his name. Specifically, the harmonious balance of 'doubles' - two letter repeats. Look carefully at his full name:
See the aa, tt and ll in each of his first, middle and last name? Do you know how rare that "perfect sequence" of double letters is? It occurs in fewer than 1 in 12,480,961 full names. Notice the symmetry around the double t's in 'Matthew' - 7 letters on each side. If you ran an FFT frequency analysis on the letters in his name, you'd see a perfect Kondratieff wave! Can you believe it!?
I'm also having an Israeli letterology expert examine Aaron's domain name portfolio, since there's a certain je ne sais quoi to 'seobook.com'. Something with the o's, I think.
Labels: randomness
Marc Andreessen's blog is pure goodness. His post on hiring / firing and HR for startups just rules. As do almost all of his posts. In 1 month, he's already written enough good stuff to make a best-selling book.
I don't understand why his domain name is "pmarca.com" What's the p for?
I recently saw him walking around in Palo Alto. He's bald as a ping-pong ball, but still looks pretty young. I think he still likes to eat at The Creamery.
Every day I log into about 10 different accounts to check reports, pay bills, etc.
A good login form should allow the user to do all the data entry on the keyboard. The user should be able to tab 2 times and press return.
Today I counted 4 login forms that break tab order. Azoogle is an example of a broken login form. Banks and credit cards often do odd things as well.
Example:
In the example above I use the "tabindex" property to ensure a reasonable tab order. I also like to see the "Need help" or "Lost Password" links or "Remember Me?" checkbox after the submit button.
I'm not saying I'm the expert on usability, but login forms that don't work this way are annoying. Over the course of the year, they probably cost me about 3 minutes of lost productivity due to unnecessary mousing - or about 1/2 the time it took write this blog post...
Labels: randomness