Tuesday Jan 12, 2010

Top 2009 Openomics Blog Posts

This time of year has this cute tradition of the past year in review, the best-of moments from the previous year that is ending, etc. Let me be no exception with this 2009 Top Openomics Blog Posts roll-up. Data comes from Google Analytics.

1. Sun Calendar Sync for Apple iCal
2. Gigaspaces curbs latency outliers with Java Real Time
3. Performance monitoring using hardware counters : Releasing HAR 2.0
4. Roller tips and tricks: image rollover using CSS
5. JIRA single sign-on with OpenSSO, free, now
6. Sun Calendar Sync for Apple iCal : Releasing icalds 2.1
7. Perforce runs best on ZFS
8. Getting serious about web analytics - Part 2
9. Solaris 10 05/09 is out!
10. iSync support for Sony Clié TH55
Top 10 blog posts with most pageviews in 2009

Wednesday Jan 21, 2009

FeedBurner accounts are moving to Google

As a follow-up to my posts on Web Analytics (cf Part 1 and Part 2), here is a quick update on FeedBurner. As a reminder, FeedBurner enables a blogger to track his off-site traffic, i.e. his subscribers. FeedBurner gives you a feed URL that replaces the blogging site's default RSS feed and on which it performs extra monitoring and analytics --it basically answers the question of how many subscribers a blog has.

Since the acquisition of FeedBurner by Google in 2007,  users were expecting / hoping a closer integration of FeedBurner with Google's family of products targeted at publishers and advertizers --Google Analytics to start with. Nothing happened in 2008 but things have now started to move. Since the Christmas break, the http://feedburner.google.com/  URL is up-n-running and one can start moving his FeedBurner account & feed to a Google account. Which I did earlier this week.

The migration was very smooth. You simply log into http://www.feedburner.com/, follow a few links to get the migration started and you eventually receive an email notification when it completes. It took about 5 to 10 minutes for my 2 feeds --the entries and comments of Openomics. Google offered me to update my feeds using the feeds2.feedburner.com domain --was feeds.feedburner.com-- which I did not do, but it all works fine still --subscriptions are being redirected from the old to the new domain.

Figure 1 - New FeedBurner Stats Dashboard

So, good job Google! The only noticeable difference, as shown in Figure 1 above, is that the FeedBurner Stats Dashboard --the plot of subscribers & reach over time-- moved from being histogram-based to a solid-line graph --to align with the graphical standards of Google Analytics, I am guessing.

Monday Nov 10, 2008

Getting serious about web analytics - Part 2

Continued from Part 1.

As a convenience to the readers, besides the generic Atom feed, I have added, to the sidebar on your right, subscribe buttons for popular online feed readers. Surely everyone has a different opinion on what the most popular ones are, so I simply started from the ones provided on our CEO's blog --Jonathan must have an online-marketing specialist working out these details for him-- and added a couple I had heard of. My apologies in advance in your own favorite is not on there, but drop me a note and I will add it!

To add such button, many of these sites provide you with an online tool that generates the HTML code for you to insert, based on some preferences (e.g. button size), such as with Google. You should be able to find these pages by following some kind of Tools link at the bottom of the homepages or googling on the "subscribe button for xxx" or "subscribe badge for xxx" keywords.

Off-Site Buzz

There is a third kind of audience to a blog's content, besides on-site traffic and subscribers. It is the off-site viewing of the content as picked up by social bookmarking sites like del.icio.us, Digg, etc. I do not know at this point whether it is possible, and how, to track the many off-site audiences in a centralized and/or automated way. What I can do though is to provide courtesy bookmark buttons directly in the blog posts and apply the onClick trick to them so I can count how many times visitors have bookmarked them and thus have some idea about the off-site buzz of individual posts.

Creating these buttons was fairly similar to creating the subscribe buttons for the online feed readers. With three exceptions. First, some sites (like Yahoo! Buzz) give you Javascript code instead of plain HTML which may not be practical if you intended to add your own Javascript --in my case, I'm instrumenting the outbound link with an onClick action-- so I had to decode the Javascript to locate the image and subscribe URLs, and reconstruct HTML code. Second, I needed very small icons (16x16) because these bookmark buttons would follow each blog post. I used the following trick if a site was not offering such an icon; I grabbed the website's favicon.ico which you typically access at http://hostname/favicon.ico. Third, the bookmark URL typically requires as parameters the permalink and title of the blog post. And they change for every blog post! I use the Roller variables $url.entry($entry.anchor) and $entry.title which you URL-encode through $utils.encode(). Finally, this is the code that I added to the bottom of the entry-footer in my _day Roller template:

           | <a href="http://del.icio.us/post?url=$url.entry($entry.anchor)&amp;title=$utils.encode($entry.title)" onClick="javascript: pageTracker._trackPageview('/social/delicious');" title="post to del.icio.us"><img src="http://static.delicious.com/img/delicious.gif" width=16 height=16 /></a>
           | <a href="http://digg.com/submit?phase=2&amp;url=$url.entry($entry.anchor)&amp;title=$utils.encode($entry.title)" onClick="javascript: pageTracker._trackPageview('/social/digg');" title="Digg it!"><img src="http://digg.com/img/badges/16x16-digg-guy.png" /></a>
           | <a href="http://slashdot.org/bookmark.pl?url=$url.entry($entry.anchor)&amp;title=$utils.encode($entry.title)" onClick="javascript: pageTracker._trackPageview('/social/slashdot');" title="submit to Slashdot"><img src="http://images.slashdot.org/favicon.ico" width=16 height=16 /></a>
           | <a href="http://reddit.com/submit?url=$url.entry($entry.anchor)&amp;title=$utils.encode($entry.title)" onClick="javascript: pageTracker._trackPageview('/social/reddit');" title="submit to reddit"><img src="http://www.reddit.com/static/spreddit5.gif" alt="reddit" /></a>
           | <a href="http://co.mments.com/track?url=$url.entry($entry.anchor)&amp;title=$utils.encode($entry.title)" onClick="javascript: pageTracker._trackPageview('/social/comments');" title="track in co.mments"><img src="http://co.mments.com/images/track.gif" /></a>
           | <a href="http://www.stumbleupon.com/submit?url=$url.entry($entry.anchor)&amp;title=$utils.encode($entry.title)" onClick="javascript: pageTracker._trackPageview('/social/stumbleupon');" title="submit to StumbleUpon"><img src="http://cdn.stumble-upon.com/images/16x16_su_solid.gif" alt="stumbleupon" /></a>
           | <a href="http://www.furl.net/storeIt.jsp?u=$url.entry($entry.anchor)&amp;t=$utils.encode($entry.title)" onClick="javascript: pageTracker._trackPageview('/social/furl');" title="store in Furl"><img src="http://www.furl.net/images/logo-favicon.ico" /></a>
           | <a href="http://ma.gnolia.com/bookmarklet/add?url=$url.entry($entry.anchor)&amp;title=$utils.encode($entry.title)" onClick="javascript: pageTracker._trackPageview('/social/magnolia');" title="add to Ma.gnolia"><img src="http://ma.gnolia.com/favicon.ico" /></a>
           | <a href="http://buzz.yahoo.com/article/pub/$url.entry($entry.anchor)" onClick="javascript: pageTracker._trackPageview('/social/yahoobuzz');" title="vote on Yahoo!Buzz"><img src="http://buzz.yahoo.com/img/badge-logo.png" /></a>
           | <a href="http://www.facebook.com/sharer.php?u=$url.entry($entry.anchor)&amp;t=$utils.encode($entry.title)" onClick="javascript: pageTracker._trackPageview('/social/facebook');" title="share on Facebook"><img src="http://www.facebook.com/favicon.ico" /></a>
           | <a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=$url.entry($entry.anchor)&amp;title=$utils.encode($entry.title)" onClick="javascript: pageTracker._trackPageview('/social/linkedin');" title="share on LinkedIn"><img src="http://www.linkedin.com/favicon.ico" /></a>

Among the off-site buzz the blog, one is of particular interest. It is the references other bloggers make to your blog, giving you visibility/access to their own audience. I use Technorati to track blog citations a.k.a. authority. For it, I had to register on the site and claim Openomics as my blog. Of course, I added a Technorati button to make it visible that this blog was claimed there and give a chance to people to add it as a favorite blog of theirs. Here's a snapshot of how Openomics stands on Technorati today. There is a long way to go to celebrity...

Concluding Remarks

Am I getting too serious about web analytics? On one hand, I am guessing/hoping that, as I learn more, I will settle on a more lightweight analytics infrastructure --running analytics from 3+ sites and tracking down to every single link do seem like an overkill. On the other hand, I cannot imagine blogging without doing a minimum of tracking. Many of us at ISV Engineering blog as an extension to our technology-adoption function at Sun, so we must seek to know how successful we are at conveying the value proposition of Sun technologies and at harnessing the Web to drive technology adoption. That is, in Google Analytics terms, how effective the blog is in the goal conversion of OpenSolaris downloads e.g. I'm lucky I have an onClick action on that link! ;-)

Friday Nov 07, 2008

Getting serious about web analytics - Part 1

I have been quite active on this blog this week although most of my work must have gone unnoticed to you the readers. It's that I have been working on improving the default templates I started from (Metro theme for Apache Roller) and the initial web analytics tool I got going with (Google Analytics). The more I dive into web analytics, the more I realize blogging is going to be a journey for me. I am sharing here today where I'm at on the learning curve  --I wish I had run into this blog entry before!-- through concrete examples as applied to the Openomics blog.

On-site Traffic

I use Google Analytics (GA) as mentionned above. Installation is straightforward, I copy-paste'd the Javascript provided by GA to the bottom of my Weblog and permalink Roller templates, that seemed to capture all of possible (direct) views of Openomics. Readings of the Openomics posts through the ISVe Planet (an aggregation blog for our group at Sun) are not captured though. I experimented with including the GA Javascript inside each blog entry, but it has its own downside (attributing any ISVe Planet view to Openomics), so I didn't pursue down that path.

Once the templates are instrumented, any inbound and internal navigation on the blog's HTML pages is captured. Outbound navigation and navigation to non-HTML pages is not. You can track such clicks by adding an onClick action on these links as explained here. I have instrumented all of the download and subscribe links that you can see in the sidebar on your right with onClick actions. Check it out by yourself by viewing the source code of this page.

It takes about 24 hours for the GA dashboard to start being populated with data. Then it will print plenty of tables and graphs about visitors, traffic sources, content. The report is updated once a day. Here's a snapshot of the Site Usage for Openomics since its launch 2 weeks ago.


Oddly enough, the most valuable traffic to your blog is not captured by a standard web analytics tools like Google Analytics. I am talking about the subscribers, i.e. your regular readers. In the Web 2.0 era, people navigate on the web to find new interesting sources of information but, once found, they typically subscribe to the site's feed and may, from then on, only read your content through the XML-based feed. No HTML page, no Javascript, no GA tracking.

I have started to use FeedBurner to track subscribers. As of today only, so no pretty snapshot for now, the 24-hour rule applies here too. Using FeedBurner means using a syndicated feed on feedburner.com instead of your default on-site feed. That is, after I signed up on FeedBurner and registered Openomics, I was given the feed URL http://feeds.feedburner.com/openomics that I was supposed to copy-n-paste'd in lieu of http://blogs.sun.com/openomics/feed/entries/atom.

Nowhere in my Roller template I could find the above Atom feed though. It is because the standard Roller templates use macros to generate the lists of available feeds, such as #showAtomFeedsList($model.weblog). I replaced this macro inside the sidebar template by the following code:

    <⁞ul class="rFeeds">
    <li><a href="http://feeds.feedburner.com/openomics?format=xml">All</a></li>
    <li><a href="http://feeds.feedburner.com/openomics_comments?format=xml">Comments</a></li>

I had to add the format=xml parameter to skip a fancy landing page at FeedBurner which would have been redundant with the subscribe buttons that I provided, in the sidebar on your right, for the more popular online feed readers. I also had to register the Comments feed for Openomics on FeedBurner to get it in.

The #showAutodiscoveryLinks() macro also prints the default on-site feeds to the blog's HTML pages. I simply deleted it from the headutil template for now.

To be continued...


How open innovation and technology adoption translates to business value, with stories from our developer support work at Oracle's ISV Engineering.



« July 2016