The Adsense Experiment: On Hold

February 1st, 2010

I’ve put the adsense experiment on hold for a while until a major release I’m working on is resolved. Things will be hectic in my schedule until Feb 11th when this release will happen. The success of the release is dependent on me right now because I started consulting with the company 3 months ago and my portion of the project was scheduled to be done and I would bow out. I finished that portion within 2 months but the company had a shakeup that concluded with 4 main developers and 1 top product designer leaving (all of which had been working at the same place for 7+ years). With them a lot of the “tribal” knowledge was gone and the only dev left is a consultant who has been there for only 3 months (me). Once the release is a success, I will be back blogging about the progress of the adsense experiment.

The Adsense Experiment: Google Adsense and Analytics. How to link adsense to new (multiple) profiles in analytics

January 16th, 2010

This took me quite some time to figure out. All I wanted to do is link my Adsense account to all my Analytics profiles. Now this is easy if it’s the first time you’re linking your accounts. All the google help docs talk about this case and all the help docs say to go to “Getting Started” link. My case was different because I had already set this up for one of my profiles, my linux to macbook blog. I just added adsense to this blog and another blog I started so I wanted to now link those new accounts.

I kept looking for ways to do this but every time I didn’t find a solution I would put this aside and try again later. Well today I found the answer. You can’t do this on the adsense side. Here’s what you need:

      Log into your analytics account.
      You should have a list of accounts (or one account), pick the account with the multiple profiles and click on it
      You should now see a list of profiles (your domains under this account). On this page at the top you should see a link to “Edit Adsense Linking Settings”. Click that link. I’m attaching a screen shot here for clarity:
    Changing Analytics Settings to Link Multiple Profiles to Adsense

    Changing Analytics Settings to Link Multiple Profiles to Adsense

      Follow the wizard to add your new profiles

Hope this helps you avoid the stress I had to go through to figure out such a simple task.

Maybe I Should Change My Name To “The Serge”

January 12th, 2010

Going over some analytics for my Adsense Experiment, I went to the profile of this blog and noticed a visitor came from google to my site using the search term “The Serge”. Running the search myself at http://www.google.com/search?hl=en&source=hp&q=The+Serge I got the following result:

"The Serge" on Google

Maybe I should start having everyone call me “The Serge”. :)

The Adsense Experiment: Days 2 and 3, The Dreaded Weekend

January 12th, 2010

After a fairly early success, traffic took a nose dive over the weekend. Why are weekends so bad for blogs? If you really think about it, when do you usually read blogs? You’re probably reading this while you’re at work right now. Most people read their blogs at work. Another big percentage of users want to be out, with friends and family during the weekends. So it’s no surprise that blogs will have a low traffic number on weekends. Couple that with the fact that the site still doesn’t have any pages indexed, you can see why my traffic dropped to 1 user on sunday (which was probably just me checking site operation).

Traffic has picked up again now that it’s a monday but so far no ad clicks. I need to be more clever about ads but I can work on that at any time. The first thing I will be focusing on is driving traffic. My lesson on pingbacks opened my eyes to the possibility of drawing more traffic in. I will couple that with cleaning up some of the posts (news feeds are not working very well) and maybe write some real content made by myself to drive higher traffic.

The Adsense Experiment: Day 1, 63 Cents Thanks to Wordpress Pingbacks

January 11th, 2010

I didn’t expect there to be any traffic on day one other than myself checking to see how the site looks, changing a few things here and there. I went to check to see if adsense was recording at least the ad impressions, I noticed that I had made 63 cents.

I immediately checked analytics to see what was going on. I looked at the traffic sources and noticed I had 11 visitors that day who came from a referring site. How is that possible? No one knows about the site yet, how did someone have the time to pick it up and link to it already. I used the referring url from analytics to go to the site in question and there I found my answer. Side note: this is exactly why I recommend installing some method of analysing your web traffic. Without it I would not have come to the answer (at least without spending hours looking over apache logs).

Wordpress has this very nice feature called pingback. Basically, when you link to another wordpress blog, a message is sent to that blog’s server and set up as a comment to the blog post. You can see an example of this on my post about Wordpress sidebar being pushed to the bottom. A fellow blogger George Coghill had a similar issue and posted about it on his blog. He was gracious enough to link to my original article on his new blog post which brought up the “pingback” comment in the comments section of my blog post.

Pingbacks are a great tool to promote your blog. First you get to link out to the target blog and that blog also links to you, so both blogs get a boost in google’s tracking of backlinks. You also now get people clicking through and finding your blog which in turn may net you some ad clicks, like it did with my single ad click and generating me 63 cents on day one of the operation.

I will be looking more closely into this feature to see if I can grow my user base and keep this going.

The Adsense Experiment: Day 0, Setting Up The Blog

January 9th, 2010

Setting up everything to be up and running took about 2 hours. This included:

1. Finding and buying a domain:
The most difficult part here is finding a domain that is not registered yet. Since I’m on a linux machine, I just used the linux “whois” command to see if there are any available URLs that I can think of. Luckily this project doesn’t need to have a memorable URL, I’m going to depend more on links and SEO.

Next step was to register the domain and I used my GoDaddy account to register it.

Total cost =~ $25 (I used private registration on the URL).

2. Hosting:
Like all good software engineers, I have my own private hosted server somewhere out there in internet land and I just used that server to host my blog.

3. Picking a blogging platform:
This step was again easy for me. I chose to use wordpress because I have already installed, used and even modified the source code on some projects so I have a good working knowledge of the platform. I also like wordpress because it’s so popular you can pretty much find decent themes to modify the look and feel of your blog, and if you need some custom functionality chances are you’ll find an already existing plugin.

4. Some useful plugins:
Wordpress usually comes pre-installed with the Akismet plugin. I highly recommend activating this plugin or else you will soon be bombarded with tons of spam. Other plugins I had to download and install and they are:

  • SI Captcah: Another layer of protection against spam registrations and comments.
  • Feed To Post: Convert RSS and Atom feeds to automatic posts. This is my way of keeping the site refreshed while not writing every single day or even multiple times a day.

5. Track Usage with Analytics:
I highly recommend you have some way of tracking your site usage. The fastest way I do this is by simply registering for a Google Analytics account. It may not have as much detail as other, more advanced analytics software out there but it is extremely fast to set up and does a good job at figuring out trending. You can now link it to your adsense account.

6. Take control of your domain with the search engines (Webmaster Tools):
It’s extremely important to control how your site is indexed with at least the three major search engines. You should register and verify your site with them through their webmaster tools:

7. Adsense:
Finally you can’t make any money without placing ads. Make an adsense account, generate the ads and place them in your blog.

With all the above techniques, I’m not going into details as to how to do them because this is not a tutorial on setting up a blog, hopefully this will turn out to be a tutorial on how to make money off of your blog. There are tons of resources out there who explain how to set each one up, you might want to check those out if you are stuck at any point.

The Adsense Experiment: The Experiment, Rules and Objectives

January 8th, 2010

The Experiment:
The concept of the experiment is very simple and almost everyone out there is trying to do this:

Try and make as much money as possible online putting in as little work/time as possible

Sounds simple enough but goes with the old underpants gnomes model of making money:
1. Start a Blog.
2. ?????
3. Profit

Rules:
The rules are pretty simple.

  • No porn
  • No shady deals
  • No questionable products like diet pills
  • No sleazy SEO techniques like placing a keyword hundreds of times on a page in white font so spiders can see them but users can’t
  • No breaking the rules that are set in adsense like getting a click farm hitting your site and using fraudulent clicks to pump up your numbers

The blog needs to have real content to drive good ROI to the advertisers on the site. It needs to have good keywords mapped in search engines to drive high organic traffic. I’m not going to put effort into SEM at first but I might consider it later on just to learn more about SEM and see how effective it is to drive higher revenue.

Objectives:
Short answer would be to create a blog that can generate the quite popular number of $10,000/month from adsense revenues.

Long answer is to use the years of knowledge from working on online applications, SEO, SEM and other projects to create a revenue generating site.

Worst case scenario is I fail to reach any significant revenue but I get to learn a lot about the latest blogging technologies out there, new SEO techniques (figure out what search engine spiders like and what they dispise) and finally how NOT to make a site which I will use in my future endeavors or apply to help my clients avoid the pitfalls I make.

I see this as a win-win experiment that shouldn’t take too much of my time. Maybe I can get a book deal out of it at the end! now I’m getting way ahead of myself. Time to start the experiment.

The Adsense Experiment: The Problem

January 8th, 2010

I looked at my adsense report today and was surprised to see that I had only made $13 over the course of one full year. That’s with 18k pageviews and only 40 clicks. I followed the commonly accepted rules:
1. Start a blog based on a subject that interests you.
2. Write as often as you can.
3. Write about recent buzzwords and include them in your posts.
4. Place adsense ads.
5. Profit?

OK, so I followed all the rules initially but eventually I slipped on #2 because my day job was taking up most of my time. Even with few updates and posts, my blog still averaged a decent 1200 uniques (unique visitors) a month. The blog was a tech blog mostly about problems I faced day to day and how I fixed them.

So what was the problem?
The blog was extremely useful and efficient but completely devoid of entertainment.
It was extremely useful because even I would search for posts on my blog when I came across the same problem I’ve already fixed and discussed. Another indication of how useful it is comes from analyzing the incoming organic traffic which were usually people searching on google for “how do I fix..” or “using … on …” or jus the error message itself.
It was very efficient because my blog would usually show up in the top three results on the google searches those users made and most of them landed on the page that is an exact match to their query and their answer is right there on the landing page.
It was devoid of any entertainment value because once the users found their answers, most never came back.

Being useful and efficient is not always good. People found what they were looking for and disappeared. Many didn’t stay on the blog for more than the time it took them to read the blog post. This class of user is on a mission to fix a problem. They are not there to browse and click on links. They are not there to make a purchase so even if they click on an advertiser, the ROI is probably horrible (not that you can really base any sort of long term ROI on 40 clicks and $13).

Thinking about all this over lunch made me think of a cool adsense experiment. I will explain the rules, objectives and progression of the experiment in future posts. This will hopefully teach my readers something about how to make money using adsense (or how not to make money, what to avoid when starting an online site). I’m hoping to also learn much more aobut SEO, SEM and new blogging trends.

XML::DifferenceMarkup installation errors on Ubuntu

December 10th, 2009

While evaluating some XML diff tools, we came across XML::Diff, XML::SemanticDiff and XML::DifferenceMarkup. Installing XML::Diff and XML::SemanticDiff was not a problem on Ubuntu using perl’s MCPAN shell:
perl -MCPAN -e shell

Unfortunately those two packages did things differently than we expected, for that reason we could not use any of them. Instead I decided to give XML::DifferenceMarkup a try. At first I tried MCPAN but failed. Next I tried downloading the source and installing it but kept failing on the “perl Makefile.PL” stage with the following error:
enable native perl UTF8
running xml2-config… ok
diffmark headers not found
Try setting LIBS and INC values on the command line,
or get diffmark from
http://www.mangrove.cz/diffmark/

This was weird because I already had libxml2 installed because I thought the installation was not able to find libxml2 headers. I tried setting the LIBS and INC on the command like using:
perl Makefile.PL ‘INC=-I/usr/include/libxml2′ ‘LIBS=-L/usr/local/lib -lxml2 -lz -lpthread -lm’

but nothing worked. The problem was that I was focusing on the wrong part of the error message. I didn’t notice that it required me to install diffmark. When I saw that I followed the URL which gave me an explanation of what diffmark is and a download link. I proceeded to download, untar and read the installation notes:
./configure
make
make install

seems simple enough. Of course nothing ever is that simple. Running ./configure gave me a glimpse into Ubuntu’s base install, it doesn’t have any C++ compilers:
checking for a BSD-compatible install… /usr/bin/install -c
checking whether build environment is sane… yes
checking for gawk… no
checking for mawk… mawk
checking whether make sets $(MAKE)… yes
checking for g++… no
checking for c++… no
checking for gpp… no
checking for aCC… no
checking for CC… no
checking for cxx… no
checking for cc++… no
checking for cl.exe… no
checking for FCC… no
checking for KCC… no
checking for RCC… no
checking for xlC_r… no
checking for xlC… no
checking for C++ compiler default output file name…
configure: error: C++ compiler cannot create executables
See `config.log’ for more details.

So I decided to install one.I picked the first “g++”. Using Synaptic Package Manager I installed g++ (I had problems downloading. I will post a different article to discuss that point). I then went back to configuring diffmark and all was well. Finally I can install… not so fast. Make generated the following error:
merge.cc: In member function ‘bool Merge::is_reserved(xmlNs*) const’:
merge.cc:339: error: ’strcmp’ was not declared in this scope

Not my lucky day. Seems like merge.hh does not have any declarations for strcmp. Openning lib/merge.cc up I saw that the top of the file did have the line:
#include <string>

After some more digging into the code I noticed that some other header files and source files actually use string.h or both. So I decided to change that like to:
#include <string.h>

Running make finally went through. I then ran a “sudo make install” and diffmark was installed. From there installing XML::DifferenceMarkup was pretty much straight forward. Hopefully this module will provide the right functions we need.

Wolfram Alpha API and my PHP Language binding

October 16th, 2009

Ever since I started my own consulting services company, I’ve had quite a few interesting projects come my way. Recently I was contacted over IM by Russell Foltz-Smith to work on the PHP language binding for the Wolfram|Alpha API. In case you’re not familiar with Wolfram|Alpha, it is “an ambitious, long-term project to make all systematic knowledge immediately computable by anyone. Enter your question or calculation and Wolfram|Alpha uses its built-in algorithms and a growing collection of data to compute the answer. Based on a new kind of knowledge-based computing”. They were also voted as one of Time’s 50 best websites of 2009.The whole process in building and delivering the project was fast and simple.

I was given their latest API documentation and only one instruction “Build a PHP wrapper around this”. The very limited instruction was purposefully left as broad as possible because the API developers at Wolfram Alpha did not want to lay down a technical API that went against how different languages solved different problems. A perfect example of this would be if I were to write the Perl wrapper, I wouldn’t want the same OO design and naming/coding conventions as the Java version since the java conventions are very different than the ones the perl community is used to. The API developers also wanted to keep it vague so they can see what type of solutions the different engineers will come up with. The only condition set on the project was that the API was nearing release and this needed to be done quickly. That IM discussion ended around noon and by 8 pm that day I had an initial version tested and ready. The next week we had a quick phone call/code review with the Wolfram Alpha API dev team and after spending a few hours integrating their comments/suggestions, the wrapper was delivered to the team.

The API and the wrapper are now available for download online

A snapshot of the Worlfram Alpha API Language Bindings page

A snapshot of the Worlfram Alpha API Language Bindings page

Please leave your questions, comments and suggestions below.