Category Archives: blog

Disqus and Twitter integration to get even more improvements

You’d imagine Twitter integration in Disqus couldn’t get any better, however speaking with Daniel Ha at Disqus I hear even more improvements are on the way.

If you haven’t seen how Disqus integrates with Twitter (and incidentally what Disqus integration looks like with blogs.sun.com, or any other Apache Roller Weblogger based blog system) have a look at this blog entry which has generated a few traditional comments, but quite a few tweets, and see how Disqus displays them all as part of that conversation too:

http://blogs.sun.com/eclectic/entry/reasons_projects_and_programmes_fail

You’ll need to scroll down to the bottom of the page, but as you can see Disqus has captured a lot of the tweets and retweets about the article, which I think is pretty cool. Disqus also does the same for Facebook and a host of other social networking platforms as well.

Talking to Daniel he said that tweet and social networking metrics and “count” was on the way as well as other advancements, so I am firmly looking forward to those when they arrive.

The great thing about Disqus is that it is firmly becoming a conversation catcher and conversation engine, which is really what I want, to capture disparate conversations about what I write in an aggregate manner.

If you are interested in integrating Disqus with your Sun blog or any other Apache Roller Weblogger based blog, I have a tutorial and overview over here, along with the code and code examples you need to use:

https://horkan.com/2008/09/09/disqus-integration-bsc-roller-weblogger

Web analytics used here at the eclectic blog

Thought you might be interested in the the web analytics used on this blog; in total there are five pieces of technology collecting data and then used for performing web analysis here. They are:

  1. SiteCatalyst / Omniture – http://www.omniture.com/ – Sun standard, embedded in blogs.sun.com (and monitors all Sun websites), produces the page hits total
  2. SiteMeter – http://www.sitemeter.com/ – you can access my results yourself by simply clicking on the SiteMeter logo on this page and here’s the link: http://www.sitemeter.com/stats.asp?site=s38horkan
  3. StatCounter http://www.statcounter.com/
  4. Google Analytics http://www.google.com/analytics/
  5. ClustrMaps – http://www2.clustrmaps.com/ – simple location counter displayed as a informative graphic here’s the link to my hit counter: http://www2.clustrmaps.com/counter/maps.php?url=http://blogs.sun.com/eclectic/

Why use more than one? Frankly web analytics is more than a shaky area, none of them ever seem to catch all hits just as I’d like, nor measure them in a similar fashion, so I use differing web analytic software to ‘triangulate’ the best view possible (for instance one will count some spiders traffic as hits, whilst another won’t, frankly I want to know the difference between humans and the web crawlers, etc.). Furthermore some have functionality which the others don’t and some produce quick to see ‘snapshots’ whilst others produce detailed ‘drill-downs’.

For instance Sun’s web analytics is the same as the corporate one, so it’s enterprise grade and highly flexible, sadly this means it’s extremely large scale and quite hard to manipulate because the amount of configuration you have to do is just horrendous (but it can give you the most detail).

So SiteCatalyst / Omniture is too much hassle to produce quick updates and ClustrMaps is really eye candy for users, therefore I only really use SiteMeter for quick updates without logging in, and StatCounter and Google Analytics for more detailed, but quickly available, reports on what constitutes readers favourite articles and pages.

For 2 to 5 above you’ll need to sign up for online accounts and add the tracking code yourself, this isn’t too hard, it just takes a little time.

For 1 it’s already there on all the Sun websites and blogs, however you need to request access to the corporate Omniture / SiteCatalyst web analytics system to get access if you are a Sun blogger, then you have to learn how to use it, then you need to use something else as well (see problems I describe above, because you might prefer a quick info ‘fix’).

Most of all this is about personal preference, and what works for you; for about two years after starting blogging I was a data demon, wanting to understand and interpret the stats, and now, well I’m a little more relaxed.

Is syndication and responses a measure of blogging success?

Given that today marks the 5th year of http://blogs.sun.com (or just “bsc” to us Sun bloggers), and that it was this month two years ago that I published my first blog article (entitled “And finally“, an opinion piece on Gartner’s top ten predictions from 2007), I thought it would be nice to explore what “success” was in terms of blogging.

The most obvious indicator is large and regular readership, but I can’t imagine that that is all there is to it. The next most obvious criteria might be opinion setting, but measuring this seems troublesome and unscientific at that moment (until at least further semantic web infrastructure is in place to better relate meme flow across the Internet, although saying that Autonomy have an excellent visual analysis tool which is an early leading example in this field, the problem with this current non-semantic web model is that you have to generate meta-data by supposition, some of which is irregular at best).

Inward and outbound links are a major contributing factor in the calculation of Google’s “PageRank” algorithm, but I expect this to change significantly in the next few years as two things occur, increasingly effective “Search Engine Optimization” (SEO) techniques which will require modification to Google’s rating criteria, and the rise of the semantic web as increasing amounts of meta-data is included with unstructured data across the Internet, driving up implicit relationships between information.

And that leaves me with syndication and pieces written in response to your articles. Frankly I’m not sure that you can qualify syndication as a measure of success of your blog, but I do think it’s a good indicator of how far your message is being spread. I’m still uncomfortable with this, as I would prefer something more Empirical, however I think it may be about the best ‘soft’ indicator we have at the moment.

So using syndication of, and responses to, my articles, as a potential leading indicator, I correlated the following list. Historically I would have used Technorati to generate this information, but Technorati is suffering from some real issues lately, it’s page layout has become befuddled, and worst of all it’s not capturing (even remotely) the responses to my articles, subsequently I used Google Analytics’ “Referring Sites” breakdown instead (the list below isn’t remotely exhaustive, so if there is anything missing you’d like me to add let me know).

Make Google notice your Blog

Posted this in response to an internal email titled “What makes Google notice a blog?”, it’s pretty universal and applicable to most search engines so I thought I’d share it as a blog article.

Here’s a few suggestions, hope they help. Wayne.

1) You may want to write your blog in a manner which is spider, as well as human, friendly.

Include meta-data and micro-format information, such as tags; don’t forget that key words in headers will increase the ‘value’ of that key word (for many search engines); always make sure that “SCRIPT” HTML segments are followed by “NOSCRIPT” segments (most spiders don’t “do” JavaScript, specifically Google’s; lean web page code that is easy for spiders to ‘consume’.

Re: Tags / Meta-Data / Micro-Formats – I use the Operator plug in / add on for Firefox, this informs the user about semantic data embedded in a viewed web page.

Re: Keyword Analysis – I use the SeoQuake plug in / add on for Firefox, which allows me to do dynamic keyword (and related key word) analysis.

Here’s an article I wrote on Tag format standardization, I recommend that you standardize on a Tag format that is Search engine friendly: ‘Tic, Tag, Toe‘. Don’t over tag nor under tag, but try and match your articles tags with other similar articles, try and join in with the subject matter’s folksonomy if at all possible (i.e. the tags people are using when talking about that subject matter, technorati and delicious are both good examples).

As well as embedding all the tags for all of the articles on the front page (have a look in Operator if you decide to use it or another semantic data ‘explorer’) I also embed tags to major blog directories and social bookmarking sites on the individual page for each entry, here’s an article which demonstrates this: ‘Roller Weblogger blog post tag link code for blogs.sun.com, technorati and del.icio.us‘. I’ve superseded this code now, with a nicer layout and having added more blog directories / social bookmarking sites, you can see the example at the end of the page for any given blog article I’ve written, give me a shout if you’d like the newer code.

2) Google’s PageRank algorithms work on links, inbound, outbound, number, and the PageRank of those inbound and outbound links.

Link to sources, get inbound links from sources / reciprocal links if possible.

Don’t forget to trackback articles that you reference, if the trackback fails try leaving a comment with a link to the article that references it.

3) Make sure you let sites such as Google know you’ve updated your site and that you’d like it re-“spider”ed, indexed and advertised.

This is done by “blog pinging” search engines and blog directories so that they are informed that your site has been updated and to send over there spiders when they get chance (most search engines / blog directories want to do this quite quickly as they want to be first with any potentially newsworthy content that draws traffic).

Personally I wanted a more granular level of control over this than offered with the standard blog ping functionality embedded in roller and so I wrote my own stand alone version: ‘Free XML-RPC blog ping site submitter: “Blog Ping”‘.

4) Other things to consider…

PageRank of your site and individual pages; how well does your article compete with articles of a similar nature.

Have pages been bookmarked in del.ici.ous, technorati, etc., i.e. are they being shared.

P.S. This article doesn’t mention quality of written articles, cadence of posts, timeliness of posts to current events, etc., as it focuses purely on the current electronic mechanisms for getting noticed by a search engine like Google and not the related, but extremely important, human and social element that gains you readership.

Apologies to Alec Muffett

I’ve wanted to apologise to Alec Muffett for some time about a blog post I wrote back in January ’08. Called “Links for DD-MM-YYYY Not Likely” it questioned the effectiveness of “Links for” type posts to connect with your readership in a meaningful way; as well as being a response to Alec’s post “A disappointed (occasional) reader…“.

This has become especially ironic as eight months later I followed up with “Setting up del.icio.us blog posting on blogs.sun.com“, a post showing in detail how to configure delicious, the online bookmark system, to post entries to Roller Weblogger (and specifically the implementation powering the Sun blog server). To top it all I’ve become a regular provider of “Links for” posts since then too.

Furthermore I’ve found the “Links for” type post a useful way to communicate in a conversational manner with my readers. It allows me to post short opinion based entries to my blog, giving me a chance to have my say when circumstances wouldn’t or shouldn’t allow a longer blog post, as well as improving the overall cadence of updates, which has suffered when I’ve been time constrained.

I actually gave Alec a call a couple of months ago and apologised in person; I wrote this blog post after being reminded by Carolyn’s comment that I had a responsibility to put things straight online too.

Thanks to Tim Caynes

Thanks to Tim Caynes I have a brand new look and feel on the blog; thankfully this is much more minimalist and I’m hoping easier to navigate for you. …..

Setting up del.icio.us blog posting on blogs.sun.com

Recently I have received a number of emails about del.icio.us blog posting “links for” working with blogs.sun.com (BSC) or rather not as the case may be, as they have all vented frustration about it not working (either well or at all).

Dave Johnson, the man behind Roller Weblogger itself (the platform BSC runs over), suggests alternative approaches to achieving the same result, most notably using a standalone tool described in “delicious.com Blog Posting tool“.

I was similarly frustrated having just configured the delicious blog posting tool (and getting it to work), however I have since found that the issues I faced were due to not reconfiguring my XML-RPC password after the recent upgrade to the external Identity authentication and authorisation security mechanism used to access BSC.

To get it to work again I had to reconfigure both my BSC and del.icio.us accounts.

Setting up your BSC account for del.icio.us blog posting

First off I had to go into the “Your Profile” page in my BSC account.

Then I had to configure a “Web Client API Password”, as in the screen grab below.

Setting up your del.icio.us account for del.icio.us blog posting

After reconfiguring my BSC account I had to change the user name and password combination in the del.icio.us blog posting settings page.

The user name now needs to be set-up as your email address (and not the old style BSC user name, which matched your blog ‘handle’), whilst the password needs to be configured as the same as the “Web Client API Password” above, see the following graphic for more detail.

Another item to note is that “blog_out_id” needs to be set as your BSC ‘handle’, whilst I’ve found “out_cat_id” has little effect (as the posts default to whatever “Category for posts received via clients” is set to in your BSC blog preferences).

Remember to set “Enable weblog client support?” in your BSC blog preferences to get any of this this to work in the first place.

¨C11C

Since reconfiguring the two accounts above it’s been working consistantly and I feel safe enough to blog about it as a way forward.

I originally found out about setting up del.icio.us blog posting from the blog post “Posting from del.icio.us to Roller” from Lars Trieloff’s Collaboration Weblog. This worked fine until the change to access was implemented at BSC, and would presume it’s advice still holds for the majority of cases (outside of BSC).

¨C12C ¨C13C¨C14C

Links for this article:

Integrating Disqus and Roller Weblogger on blogs.sun.com

I’ve recently updated my site to use Disqus the blog comment hosting and conversation site.

Done this for two reasons:

  1. Firstly my usually frustration with any status quo means I want more functionality delivered yesterday, and although I’d started to have a look at the functionality I wanted and how I might add it as a Roller macro / velocity code I didn’t want to spend a huge amount of time coding it out (the functionality I specifically wanted was the separation of comments and trackbacks, as well as comment ‘threads’).
  2. Secondly to gain readership and comments from the sizeable blog comment audience that Disqus have built up (Disqus is estimated to be running on over 30,000+ servers).

I’ve already had a couple of comments from Disqus members, and I’ll have to see how it goes before I start heralding it as an unprecedented success, but I’m very pleased with the results (both aesthetic and functional).

Sadly the Disqus comment import function was initially provided for WordPress and Blogger, but apparently wasn’t fully functional; subsequently an update is due out soon that will hopefully include Roller Weblogger. See this Disqus forum entry, and it’s threads for more info: How do I import comments?

Given this was the case I wanted to make sure my blog supported my new Disqus commenting system, but would still show my old comments if there where any for an entry. Here are a few examples:

The code I developed, which has to be separated into two components (number of comments associated with a blog entry, and comment entry form and comment display), is below, but if you use or copy it please note that you need to replace the Disqus supplied JavaScript for my site with your Disqus comments hosted sites JavaScript code. ¨C18C

Combined Roller Weblogger and Disqus Number of Comments code

For comment numbers I’ve broken it down into displaying “n Comments” for Disqus on it’s own, whilst “x Comments (new, via Disqus) and y Comments (legacy, via Roller)” for comments hosted on both systems.

This replaces the code in the Roller Weblogger “_day” template which displays the number of comments per blog entry.

Don’t forget to replace occurrences of ‘eclectic’, my blog handle, with yours (just one, about the fifth line from the end).

## Number of Comments

<a href="$url.entry($entry.anchor)#disqus_thread">View Comments</a>

#set($commentCount = $entry.commentCount)
#if ($commentCount &gt; 0)
    (new, via <a href="https://web.archive.org/web/20090830081824/http://www.disqus.com/" target="_blank">Disqus</a>) and 
    #if ($commentCount == 1)
        <a href="$url.comments($entry.anchor)">$commentCount Comment</a> (old, via <a href="https://web.archive.org/web/20090830081824/http://rollerweblogger.org/" target="_blank">Roller</a>) 
    #else
        <a href="$url.comments($entry.anchor)">$commentCount Comments</a> (old, via <a href="https://web.archive.org/web/20090830081824/http://rollerweblogger.org/" target="_blank">Roller</a>) 
    #end
#end

<script type="text/javascript">
//<[CDATA[
(function() {
		var links = document.getElementsByTagName('a');
		var query = '?';
		for(var i = 0; i < links.length; i++) {
			if(links[i].href.indexOf('#disqus_thread') >= 0) {
				query += 'url' + i + '=' + encodeURIComponent(links[i].href) + '&';
			}
		}
		document.write('<script type="text/javascript" src="https://web.archive.org/web/20090830081824/http://disqus.com/forums/eclectic/get_num_replies.js' + query + '"></' + 'script>');
	})();
//]]>
</script>

Combined Roller Weblogger and Disqus Comment entry and Comments display code

This basically displays the Disqus commenting system, along with any Disqus hosted comments, however if any ‘legacy’ Roller Weblogger hosted comments are found it displays those too.

It replaces the code in the Roller Weblogger “permalink” template which displays comments themselves (the same changes may need to be made to the “weblog” and “searchresults” templates too).

## Comments

<h2>Comments (new, via <a href="https://web.archive.org/web/20090830081824/http://www.disqus.com/" target="_blank">Disqus</a>)</h2>

<div id="disqus_thread"></div><script type="text/javascript" src="https://web.archive.org/web/20090830081824js_/http://disqus.com/forums/eclectic/embed.js"></script><noscript><a href="https://web.archive.org/web/20090830081824/http://eclectic.disqus.com/?url=ref">View the forum thread.</a></noscript><a href="https://web.archive.org/web/20090830081824/http://disqus.com/" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a>

##showWeblogEntryComments($model.weblogEntry)
##showWeblogEntryCommentForm($model.weblogEntry)

<br></br>

#set($commentCount = $entry.commentCount)
#if ($commentCount &gt; 0)
    <h2>Comments (old, via <a href="https://web.archive.org/web/20090830081824/http://rollerweblogger.org/" target="_blank">Roller</a>)</h2>
    #showWeblogEntryComments($model.weblogEntry)
    <br></br>
#end

Additional benefits that I’ve picked up by implementing Disqus include:

  • Following commentators.
  • Having my, and my sites, comments followed.
  • Being able to easily ‘reblog’ my comments and make blog entries out of them (looking forward to trying this, although I haven’t yet).

Finally here’s my Disqus profile for you to have a look at: http://www.disqus.com/people/wayne_horkan/

Links for this article:

What do Facebook, del.icio.us, and last.fm, all have in common this month?

Yes, that’s right; they are all suffering from functionality issues due to design flaws introduced in their last look and feel upgrades.

Looks like this is the month for it, because in rapid succession we’ve seen changes at all three of these web2.0 stalwarts.

So how have these changes effected functionality, and what’s the real problem at hand ?

  1. Facebook
    If your a Facebook user then you will have noticed the option to use ‘new’ facebook, which, although keeps the quite fixed layout (and color theme), moves applications onto a seperate ‘page’ (or tab rather, although it behaves as a page).
    The major problem with this is settings between the new and old Facebook layouts don’t appear to be compatible, which points to access control being about the UI and not about the data itself.
  2. del.icio.us
    So del.icio.us have introduced a ‘richer’ look and feel, but appear to have lost some of their elegant simplicity. A shame, because for a service like del.icio.us I’d rather have function over form.
  3. last.fm
    Similar to the issue with del.icio.us, but in this case their is a huge user community hankering for backwards compatibility with the old look and feel, who want a similar ability to the recent Facebook refresh in being able to ‘swap’ between the two UI designs.
    Perhaps this isn’t such a good idea, because like the current Facebook issues, who’s to know what settings and access controls are locked into the UI and not the user data.

Along with the recent problems at Twitter around “outbound SMS messages” it’s turning out to be quite the month…

Microsoft’s very public “Blue Screen of Death” crash out at the Beijing Olympics

First reported by RiverCoolCool on his blog: http://rivercoolcool.spaces.live.com/blog/cns!D6F05428A2B8CB48!1570.entry

Then by Gizmondo: http://gizmodo.com/5035456/blue-screen-of-death-strikes-birds-nest-during-opening-ceremonies-torch-lighting

Now it’s at the Register: http://www.theregister.co.uk/2008/08/13/olympics_blue_screen_death/

But what’s genuinely amusing about this is the comments that are coming up, they range from the obvious to the really quite odd.

There are the standard comments lambasting Microsoft, but I think these should be disregarded; basically because they are boring in the extreme and especially given how interesting some of the other comments are.

Comments at the Register can be found here: http://www.theregister.co.uk/2008/08/13/olympics_blue_screen_death/comments/

The comments seem to be breaking down into a number of camps:

  1. The “Are they genuine?” camp
    There’s the camp that are questioning if the images themselves are real, or if they’ve been “photoshop”ed.
  2. The “Is it a hooky copy of MS Windows?” camp
    Plenty of people seem to be questioning if these are valid versions of Windows. Now this is just disingenuous; by implication (and directly, sadly, such as “it is in China after all”) it is being insinuated that this is what should be expected of China. I think this is pretty base, and hope it receives the contempt it deserves.
  3. The “Is it a Hardware error?” camp
    This group state that it’s a hard ware error that no OS could have responded to. Many add that at least you get this specific H/W error message with Windows.
  4. The “Have Microsoft done this on purpose ?” camp
    Now really this is like coming home to find that the life has turned into Bizarro World. Some of these conspiracy theorists note that one of the blogs in question is “supported” by Microsoft, others suggest that it is a ploy to get people to upgrade and move from XP to Vista.

Frankly what’s so very wrong with the idea that the pictures are genuine, that it is a valid copy of Windows, that there hasn’t been a hardware error, and that, just perhaps, software goes wrong occasionally?

It just takes a little application of Ockham’s Razor to see the truth here.

Follow me on Twitter, you know you want to…

Seeing as I’ve been blogging about Twitter and it’s new lack of support for outbound SMS for Europe, the UK and the rest of the World (well, apart from the US, Canada and India, that is)…

And seeing as it’s generated a ton of page hits…

I thought I’d take this opportunity to invite you all to follow me.

Twitterfollow Wayne on twitter

You never know I might even follow you back.

Here’s what I’ve been Twittering (or is that Twitting, lol) about.

    No outbound Twitter SMS for Europe, the UK and, frankly, most of the World

    I received the following email this morning, apparently they’ll be no more outbound Twitter SMS for Europe, the UK and most of the rest of the World. The only countries to be keeping the outbound SMS service are Canada, India, and the US. Apparently it’s all down to the charges that our mobile network operators charge us for SMS delivery, which initially Twitter had been subsidising, however they can’t afford to do that any more and have begun to “rein in the cost” by disabling the service. I can’t blame them, however I think it’s a shame that they set a precedent by enabling this functionality, only to take it away.

    Oh, and good luck to them as they “negotiate with mobile operators in Europe, Asia, China, and The Americas” but I can’t see this service coming back any time soon. And I wonder how long it will be before people are trying to find a way round this decision, potentially by spoofing a US, Indian or Canadian address, given that each of the solutions they have suggested have a cost to the user (either to deliver the SMS itself or to contribute to the datalink to the WAP service).

    Changes To Twitter SMS

    Hi,

    I’m sending you this note because you registered a mobile device

    to work with Twitter over our UK number. I wanted to let you

    know that we are making some changes to the way SMS works on

    Twitter. There is some good news and some bad news.

    I’ll start with the bad news. Beginning today, Twitter is no

    longer delivering outbound SMS over our UK number. If you enjoy

    receiving updates from Twitter via +44 762 480 1423, we are

    recommending that you explore some suggested alternatives.

    Note: You will still be able to UPDATE over our UK number.

    Before I go into more detail, here’s a bit of good news: Twitter

    will be introducing several new, local SMS numbers in countries

    throughout Europe in the coming weeks and months. These new

    numbers will make Twittering more accessible for you if you’ve

    been using SMS to send long-distance updates from outside the UK.

    Why are we making these changes?

    Mobile operators in most of the world charge users to send

    updates. When you send one message to Twitter and we send it to

    ten followers, you aren’t charged ten times–that’s because we’ve

    been footing the bill. When we launched our free SMS service to

    the world, we set the clock ticking. As the service grew in

    popularity, so too would the price.

    Our challenge during this window of time was to establish

    relationships with mobile operators around the world such that

    our SMS services could become sustainable from a cost perspective.

    We achieved this goal in Canada, India, and the United States.

    We can provide full incoming and outgoing SMS service without

    passing along operator fees in these countries.

    We took a risk hoping to bring more nations onboard and more

    mobile operators around to our way of thinking but we’ve arrived

    at a point where the responsible thing to do is slow our costs

    and take a different approach. Since you probably don’t live in

    Canada, India, or the US, we recommend receiving your Twitter

    updates via one of the following methods.

    m.twitter.com works on browser-enabled phones

    m.slandr.net works on browser-enabled phones

    TwitterMail.com works on email-enabled phones

    Cellity [http://bit.ly/12bw4R] works on java-enabled phones

    TwitterBerry [http://bit.ly/MFAfJ] works on BlackBerry phones

    Twitterific [http://bit.ly/1WxjwQ] works on iPhones

    Twitter SMS by The Numbers

    It pains us to take this measure. However, we need to avoid

    placing undue burden on our company and our service. Even with a

    limit of 250 messages received per week, it could cost Twitter

    about $1,000 per user, per year to send SMS outside of Canada,

    India, or the US. It makes more sense for us to establish fair

    billing arrangements with mobile operators than it does to pass

    these high fees on to our users.

    Twitter will continue to negotiate with mobile operators in

    Europe, Asia, China, and The Americas to forge relationships

    that benefit all our users. Our goal is to provide full, two-way

    service with Twitter via SMS to every nation in a way that is

    sustainable from a cost perspective. Talks with mobile companies

    around the world continue. In the meantime, more local numbers

    for updating via SMS are on the way. We’ll keep you posted.

    Thank you for your attention,

    Biz Stone, Co-founder

    Twitter, Inc.

    http://twitter.com/biz

    Roller Weblogger improved blogroll display code for use with icons and images

    Here’s some code that improves on the default Roller Weblogger blogroll code to ensure that if you include an image / icon for your blogroll entries it displays the image and the blogroll entry name (good if your using icons).

    Using the default roller macro for displaying your blogroll means that no text is displayed if an image / icon URL is given. The default behaviour leaves rather empty lists of course, so I see this as an improvement.

    So this code is effectively a replacement for “#showBookmarkLinksList($rootFolder false false)”, although it still uses the same CSS notation for lists, so as not to disturb your design.

    It works with specific blogroll folders, so you do need to dictate which one your going to display (in the example below it’s “/My Blog Roll”). However this could be improved further to pick up the current folder name if you were to cycle through the sub folders (but I didn’t need it to do that, so I haven’t).

    
    #set($rootFolder = $model.weblog.getBookmarkFolder("/My Blog Roll"))
    #if ($rootFolder.bookmarks.size() > 0)
    
    <h2>My Blog Roll</h2>
    
    
    
    
      #foreach ($bookmark in $rootFolder.bookmarks)
    • $bookmark.name  $bookmark.name
    • #end
    #end

    Roller Weblogger blog post tag link code for blogs.sun.com, technorati and del.icio.us

    Here’s some code that produces tag links to four popular tag destinations, your blog, blogs.sun.com, technorati and del.icio.us (for your Roller Weblogger based blog, as the code is velocity).

    It also ensures that the links are marked as tags, so that crawlers that look for and index tags and tag data will pick them up (microformat and semantic web focused applications, like the ‘Operator’ plug in for Firefox also pick them up of course).

    I only add it to individual entries, rather than collections, which is what “#if ($model.permalink)” checks for.

    Best to add just before or just after the Comments section in your main Roller template.

    The code also includes some functionality to replace ‘-‘ and ‘+’ with ‘ ‘, so as to make the text fit in the table (this does not affect the tag).

    You can see this functionality here, on my blog, and on Bill Vass’ blog, however you will need to look at an individual blog post to see it.

    If your on bsc you’ll need to replace ‘eclectic’ with your bsc blog name, or if your not on bsc you’ll need to replace “http://blogs.sun.com/eclectic/” with your entire blog URL.

    Here’s the code:

    
    #if ($model.permalink) <!-- BEGIN TAGS: $entry.title -->
    
    <div class="comments-head">Tags</div>
    
    
    
    

    This blog

    Sun Blogs

    Technorati

    Del.icio.us

    #end

    Roller Weblogger language translation with Google using JavaScript and Velocity

    So here’s the latest version of my Google Translation code for Roller Weblogger, as used to host blogs.sun.com (or ‘bsc’ as we in Sun call it).

    It’s much improved over the original and Google versions.

    First off it checks for JavaScript, if there then it uses it to make sure the page hasn’t been translated before as well as get the current URL to translate (Google generates translation glitches if it tries to translate pre-translated pages).

    If not it still generates the language translation by using Velocity / Roller JSP code.

    If your on bsc then $baseURL needs the ‘eclectic’ text replaced with whatever your bsc site is called, otherwise $baseURL needs to be your blog URL.

    If your not on bsc you’ll also need to change $iconURL to where you are hosting the flag images (which I got from FamFamFam), unless of course you leech off mine.

    So far this code is being used on Bill Vass’ blog and Glenn Brunette’s Security Weblog (as well as this one of course).

    Here’s the code for you to have a look at and cut and paste if you’d like to use it. It needs to be embedded in your Roller template code, probably best to put it in the sidebar. You can also use it to translate from other source languages other than English, more on this at the bottom of the page.

    
    
    <div style="margin:0px; padding:1px;"> <!-- BEGIN _MOD_TRANSLATE --> ## Current Language
    #set ($langCur="en") ## Lang Text
    #set ($langText_ar="Arabic")
    #set ($langText_bg="Bulgarian")
    #set ($langText_zh-CN="Chinese (Simplified)")
    #set ($langText_zh-TW="Chinese (Traditional)")
    #set ($langText_hr="Croatian")
    #set ($langText_cs="Czech")
    #set ($langText_da="Danish")
    #set ($langText_nl="Dutch")
    #set ($langText_en="English")
    #set ($langText_fi="Finnish")
    #set ($langText_fr="French")
    #set ($langText_de="German")
    #set ($langText_el="Greek")
    #set ($langText_hi="Hindi")
    #set ($langText_it="Italian")
    #set ($langText_ja="Japanese")
    #set ($langText_ko="Korean")
    #set ($langText_no="Norwegian")
    #set ($langText_pl="Polish")
    #set ($langText_pt="Portuguese")
    #set ($langText_ro="Romanian")
    #set ($langText_ru="Russian")
    #set ($langText_es="Spanish")
    #set ($langText_sv="Swedish") ## Lang Code
    #set ($langCode_ar="ar")
    #set ($langCode_bg="bg")
    #set ($langCode_zh-CN="zh-CN")
    #set ($langCode_zh-TW="zh-TW")
    #set ($langCode_hr="hr")
    #set ($langCode_cs="cs")
    #set ($langCode_da="da")
    #set ($langCode_nl="nl")
    #set ($langCode_en="en")
    #set ($langCode_fi="fi")
    #set ($langCode_fr="fr")
    #set ($langCode_de="de")
    #set ($langCode_el="el")
    #set ($langCode_hi="hi")
    #set ($langCode_it="it")
    #set ($langCode_ja="ja")
    #set ($langCode_ko="ko")
    #set ($langCode_no="no")
    #set ($langCode_pl="pl")
    #set ($langCode_pt="pt")
    #set ($langCode_ro="ro")
    #set ($langCode_ru="ru")
    #set ($langCode_es="es")
    #set ($langCode_sv="sv") ## Other variables
    #set ($tranText01="<a style="padding:0px" title='") #set ($tranText02="' href="%22)%20%20%20%0A#set%20(%24tranServer=%22http://66.102.9.104%22)%20%20%20%0A#set%20(%24tranCommand=%22/translate_c?hl=%22)%20%20%20%0A#set%20(%24tranText03=%22&#038;langpair=%22)%20%20%20%0A#set%20(%24tranText04=%22%7C%22)%20%20%20%0A#set%20(%24tranText05=%22&#038;u=%22)%20%20%20%0A#set%20(%24tranText06=%22"><img decoding="async" alt='") #set ($tranText07="' style="border:0px; padding:0px 8px 8px 0px;" src="/web/20090226230923im_/http://blogs.sun.com/eclectic/entry/%22)%20%20%20#set%20(%24iconURL=%22http://blogs.sun.com/eclectic/resource/%22)%20%20%20#set%20(%24iconTLA=%22.png"></a>" ) ## specific blog entry ? #if ($model.permalink) #set ($baseurl="http://blogs.sun.com/BVass/entry/$utilities.encode($model.weblogEntry.anchor)" ) #else #set ($baseurl="http://blogs.sun.com/BVass/" ) #end <script language="JavaScript"><br/><!--<br/>{ /* Allocate memory */<br/>strLangPage = new String (location.href); /* Catch pages translated externally and re-assign */<br/>if ((strLangPage.indexOf("/translate_c?")!=-1)) { /* Catch pages with the new google tracking code and strip */ if ((strLangPage.indexOf("&usg=")!=-1)) { strLangPage = strLangPage.slice((strLangPage.lastIndexOf("u=") + 2),(strLangPage.lastIndexOf("&usg=") )); } else { strLangPage = strLangPage.slice((strLangPage.lastIndexOf("u=") + 2)); } } document.write("<div style='margin:0px; padding:0px;'>");<br/>document.write("$tranText01$langText_ar$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_ar$tranText05",strLangPage,"$tranText06$langCode_ar$tranText07$iconURL$langCode_ar$iconTLA$tranText08");<br/>document.write("$tranText01$langText_bg$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_bg$tranText05",strLangPage,"$tranText06$langCode_bg$tranText07$iconURL$langCode_bg$iconTLA$tranText08");<br/>document.write("$tranText01$langText_zh-CN$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_zh-CN$tranText05",<br/>strLangPage,<br/>"$tranText06$langCode_zh-CN$tranText07$iconURL$langCode_zh-CN$iconTLA$tranText08");<br/>document.write("$tranText01$langText_zh-TW$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_zh-TW$tranText05",<br/>strLangPage,<br/>"$tranText06$langCode_zh-TW$tranText07$iconURL$langCode_zh-TW$iconTLA$tranText08");<br/>document.write("$tranText01$langText_hr$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_hr$tranText05",strLangPage,"$tranText06$langCode_hr$tranText07$iconURL$langCode_hr$iconTLA$tranText08");<br/>document.write("$tranText01$langText_cs$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_cs$tranText05",strLangPage,"$tranText06$langCode_cs$tranText07$iconURL$langCode_cs$iconTLA$tranText08");<br/>document.write("$tranText01$langText_da$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_da$tranText05",strLangPage,"$tranText06$langCode_da$tranText07$iconURL$langCode_da$iconTLA$tranText08");<br/>document.write("$tranText01$langText_nl$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_nl$tranText05",strLangPage,"$tranText06$langCode_nl$tranText07$iconURL$langCode_nl$iconTLA$tranText08");<br/>document.write("$tranText01$langText_en$tranText02",strLangPage,"$tranText06$langCode_en$tranText07$iconURL$langCode_en$iconTLA$tranText08");<br/>document.write("$tranText01$langText_fi$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_fi$tranText05",strLangPage,"$tranText06$langCode_fi$tranText07$iconURL$langCode_fi$iconTLA$tranText08");<br/>document.write("$tranText01$langText_fr$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_fr$tranText05",strLangPage,"$tranText06$langCode_fr$tranText07$iconURL$langCode_fr$iconTLA$tranText08");<br/>document.write("$tranText01$langText_de$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_de$tranText05",strLangPage,"$tranText06$langCode_de$tranText07$iconURL$langCode_de$iconTLA$tranText08");<br/>document.write("$tranText01$langText_el$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_el$tranText05",strLangPage,"$tranText06$langCode_el$tranText07$iconURL$langCode_el$iconTLA$tranText08");<br/>document.write("$tranText01$langText_hi$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_hi$tranText05",strLangPage,"$tranText06$langCode_hi$tranText07$iconURL$langCode_hi$iconTLA$tranText08");<br/>document.write("$tranText01$langText_it$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_it$tranText05",strLangPage,"$tranText06$langCode_it$tranText07$iconURL$langCode_it$iconTLA$tranText08");<br/>document.write("$tranText01$langText_ja$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_ja$tranText05",strLangPage,"$tranText06$langCode_ja$tranText07$iconURL$langCode_ja$iconTLA$tranText08");<br/>document.write("$tranText01$langText_ko$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_ko$tranText05",strLangPage,"$tranText06$langCode_ko$tranText07$iconURL$langCode_ko$iconTLA$tranText08");<br/>document.write("$tranText01$langText_no$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_no$tranText05",strLangPage,"$tranText06$langCode_no$tranText07$iconURL$langCode_no$iconTLA$tranText08");<br/>document.write("$tranText01$langText_pl$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_pl$tranText05",strLangPage,"$tranText06$langCode_pl$tranText07$iconURL$langCode_pl$iconTLA$tranText08");<br/>document.write("$tranText01$langText_pt$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_pt$tranText05",strLangPage,"$tranText06$langCode_pt$tranText07$iconURL$langCode_pt$iconTLA$tranText08");<br/>document.write("$tranText01$langText_ro$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_ro$tranText05",strLangPage,"$tranText06$langCode_ro$tranText07$iconURL$langCode_ro$iconTLA$tranText08");<br/>document.write("$tranText01$langText_ru$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_ru$tranText05",strLangPage,"$tranText06$langCode_ru$tranText07$iconURL$langCode_ru$iconTLA$tranText08");<br/>document.write("$tranText01$langText_es$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_es$tranText05",strLangPage,"$tranText06$langCode_es$tranText07$iconURL$langCode_es$iconTLA$tranText08");<br/>document.write("$tranText01$langText_sv$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_sv$tranText05",strLangPage,"$tranText06$langCode_sv$tranText07$iconURL$langCode_sv$iconTLA$tranText08");<br/>document.write("</div>"); }<br/>// --><br/></script> <noscript>
    
    <div style="margin:0px; padding:0px;">
    $tranText01$langText_ar$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_ar$tranText05$baseURL$tranText06$langCode_ar$tranText07$iconURL$langCode_ar$iconTLA$tranText08
    $tranText01$langText_bg$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_bg$tranText05$baseURL$tranText06$langCode_bg$tranText07$iconURL$langCode_bg$iconTLA$tranText08
    $tranText01$langText_zh-CN$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_zh-CN$tranText05$baseURL$langCode$tranText06$langCode_zh-CN$tranText07$iconURL$langCode_zh-CN$iconTLA$tranText08
    $tranText01$langText_zh-TW$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_zh-TW$tranText05$baseURL$langCode$tranText06$langCode_zh-TW$tranText07$iconURL$langCode_zh-TW$iconTLA$tranText08
    $tranText01$langText_hr$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_hr$tranText05$baseURL$tranText06$langCode_hr$tranText07$iconURL$langCode_hr$iconTLA$tranText08
    $tranText01$langText_cs$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_cs$tranText05$baseURL$tranText06$langCode_cs$tranText07$iconURL$langCode_cs$iconTLA$tranText08
    $tranText01$langText_da$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_da$tranText05$baseURL$tranText06$langCode_da$tranText07$iconURL$langCode_da$iconTLA$tranText08
    $tranText01$langText_nl$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_nl$tranText05$baseURL$tranText06$langCode_nl$tranText07$iconURL$langCode_nl$iconTLA$tranText08
    $tranText01$langText_en$tranText02$baseURL$langCode$tranText06$langCode_en$tranText07$iconURL$langCode_en$iconTLA$tranText08
    $tranText01$langText_fi$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_fi$tranText05$baseURL$tranText06$langCode_fi$tranText07$iconURL$langCode_fi$iconTLA$tranText08
    $tranText01$langText_fr$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_fr$tranText05$baseURL$tranText06$langCode_fr$tranText07$iconURL$langCode_fr$iconTLA$tranText08
    $tranText01$langText_de$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_de$tranText05$baseURL$tranText06$langCode_de$tranText07$iconURL$langCode_de$iconTLA$tranText08
    $tranText01$langText_el$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_el$tranText05$baseURL$tranText06$langCode_el$tranText07$iconURL$langCode_el$iconTLA$tranText08
    $tranText01$langText_hi$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_hi$tranText05$baseURL$tranText06$langCode_hi$tranText07$iconURL$langCode_hi$iconTLA$tranText08
    $tranText01$langText_it$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_it$tranText05$baseURL$tranText06$langCode_it$tranText07$iconURL$langCode_it$iconTLA$tranText08
    $tranText01$langText_ja$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_ja$tranText05$baseURL$tranText06$langCode_ja$tranText07$iconURL$langCode_ja$iconTLA$tranText08
    $tranText01$langText_ko$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_ko$tranText05$baseURL$tranText06$langCode_ko$tranText07$iconURL$langCode_ko$iconTLA$tranText08
    $tranText01$langText_no$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_no$tranText05$baseURL$tranText06$langCode_no$tranText07$iconURL$langCode_no$iconTLA$tranText08
    $tranText01$langText_pl$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_pl$tranText05$baseURL$tranText06$langCode_pl$tranText07$iconURL$langCode_pl$iconTLA$tranText08
    $tranText01$langText_pt$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_pt$tranText05$baseURL$tranText06$langCode_pt$tranText07$iconURL$langCode_pt$iconTLA$tranText08
    $tranText01$langText_ro$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_ro$tranText05$baseURL$tranText06$langCode_ro$tranText07$iconURL$langCode_ro$iconTLA$tranText08
    $tranText01$langText_ru$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_ru$tranText05$baseURL$tranText06$langCode_ru$tranText07$iconURL$langCode_ru$iconTLA$tranText08
    $tranText01$langText_es$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_es$tranText05$baseURL$tranText06$langCode_es$tranText07$iconURL$langCode_es$iconTLA$tranText08
    $tranText01$langText_sv$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_sv$tranText05$baseURL$tranText06$langCode_sv$tranText07$iconURL$langCode_sv$iconTLA$tranText08
    </div>
    
    </noscript> <!-- END _MOD_TRANSLATE --></div>
    
    

    As I mentioned above it can also be used to translate from other source languages other than English.

    By changing #set ($langCur=”en”) it’ll translate from other source languages. For instance set $langCur to ‘fr’ to use French as a the source language. You’ll also need to transpose the ‘en’ output strings with that of the source language you want to use, because Google doesn’t like trying to translate a page to and from the same language! For instance, still using French as an example:

    
    $tranText01$langText_en$tranText02$baseURL$langCode$tranText06$langCode_en$tranText07$iconURL$langCode_en$iconTLA$tranText08
    needs to become
    $tranText01$langText_fr$tranText02$baseURL$langCode$tranText06$langCode_fr$tranText07$iconURL$langCode_fr$iconTLA$tranText08
    and reciprocally
    $tranText01$langText_fr$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_fr$tranText05$baseURL$tranText06$langCode_fr$tranText07$iconURL$langCode_fr$iconTLA$tranText08
    needs to become
    $tranText01$langText_en$tranText02$tranServer$tranCommand$langCur$tranText03$langCur$tranText04$langCode_en$tranText05$baseURL$tranText06$langCode_en$tranText07$iconURL$langCode_en$iconTLA$tranText08
    

    Remember that there are two versions of this string though, one encapsulated in JavaScript (using ‘document.write’) and the other free standing in the ‘NOSCRIPT’ element, just in case JavaScript isn’t used.

    Congratulations to Plaxo for sending me the most condescending email advert I’ve ever received

    Check this:

    Now supporting the Pound!

    You can now subscribe to Plaxo Premium using your hard earned Great British Pounds. Start your free 30-day trial

    You can now pay for your Plaxo Premium subscription using Her Majesty’s currency.

    Plaxo Premium includes a full set of tools that help you keep your calendar and contacts accessible, organised and safe.

    * Remove duplicates from your calendar and address book* *

    * Sync with your Windows Mobile phone* *

    * Automated backup and recovery of contacts* *

    * Send unlimited Premium eCards* *

    * 24/7 VIP phone and e-mail support

    Once you sign up, your credit card will not be charged for 30 days. You can cancel online at any time during the trial period.

    Plaxo Premium now payable by the perennial Pound! Go on give it a try!

    You know what ? They won’t be getting one of my hard earned ‘Great British Pounds’.

    Imagine an advert saying paying with your ‘Yankee Dollars’ or some such; next it’ll be attempting to remind me that I’m a Subject and not a Citizen, which I don’t need. Or that our unwritten constitution sits in our Law Lords heads.

    If that advert hasn’t been written by a naive ‘Yankee’ marketing noob, then I’d be well shocked.

    Toodle-Pip old bean, etc., anyway else you’d like to stereotype me while your at it ?

    Oh, and Plaxo, get a grip, just ’cause your buy out went through this month doesn’t mean you need to spam the world for cash. Or does it ?

    Although it does seem it appear that you’ve started to share *OUR* address book data that you hold online with your new masters at ComCast. Nice one. Whatever happened to probity ?

    See http://blog.plaxo.com/archives/2008/07/post_1.html#comments for more info.

    Not sure how I feel about Plaxo now, I mean I really enjoy social networking technology, and have used Plaxo for yonks (mainly ’cause of Sean Parker and Doug Clinton).

    But now I’m worried that they are going to exploit my online contact list, and that is just not acceptable.

    I’m going to watch what happens and migrate or shut down my account if I think they are being irresponsible with my contacts.

    And perhaps, in retrospect, you should think about investigating how they are sharing your contact lists as well.

    Oh no, not another redesign…

    A number of reasons drove me to redesign the site, in part due to frustration with the existing one and inspiration to try something different.

    My main frustrations were due to the fact I was posting a wide range of material whose messages I felt were getting mixed up.

    One of the criticism’s people had of my blog was that it jumped around between high (detailed overviews of UK Gov. G2G sysetms) and low brow (going for a walk) too quickly. It had been my original intent to go with this, and that’s why the blog was originally called ‘eclectic’, but I’ve found it’s a little too jarring for people to handle, and I suspect was turning them off. By getting them to choose between different categories I’m hoping that they’ll pick up on that ‘channel’ and become familiar with it before trying the others. I think of this issue as one of signal to noise, however I suppose different readers signal is another’s readers noise.

    Most people who have been through this learning curve move to multiple blogs, but I wanted an aggregated page, plus I had fun overloading some of the Roller macros to allow category specific functionality.

    My frustration is that I’m sick to the gills of Facebook and the ilk, they are all just so much lock in to closed systems. Frankly I want all of these social applications to integrate. Now. For instance rather than have LinkedIn, Namyz, Xing, etc. keeping records of my professional contacts I just want a blended service where all my professional contacts are visible to me in a single data set, even if they are actually separate and multiple data sources (and wherever the data might actually be).

    And I don’t want this applications to be shunting my data around in a haphazard manner, I’d rather just be able to view the information as a unified stream.

    Just because the big three of MySpace, Facebook and Google have said that they will ‘play nice’ they are all, to a man, going to be ring fencing their user populations. They will attempt this with guile initially, then with ‘attractive’ *new* features, and finally with strong arm tactics. Eventually they will lose out, because if it’s not open, how ‘social’ is it really.

    I’d started to feel that what was needed was a non-Facebook Facebook profile page, and once I’d seen Cal Henderson’s ‘iamcal‘ it all started to fall into place. Cal’s page was a real source of inspiration, and I hope that if he sees my current design that he likes it.

    What I’m effectively going for is ‘Radical Transparency‘, mainly as put forward by Clive Thompson’s Wired article “The see through CEO“, and by Chris Anderson’s blog ‘The Long Tail‘ (in fact check out this recent article “You may be on Facebook, but the money’s in the Long Tail“).

    Last week I was coming back from London on the late train from Euston and bumped into Chris Loughran from Deloitte, who was also doing the London to Birmingham trek. I was really pleased when, after showing him the new design, he immediately said ‘Radical Transparency’, because I knew I had ‘hit the nail on the head’ as it was obvious to him what I was trying to achieve.

    You can see what I mean if you have a look at my new front page over at: http://blogs.sun.com/eclectic/

    You should be able to see that I’ve collated recent blog entries, by ‘Category’, over on the left hand side (each of the Categories loads a different look and feel, which I’m hoping won’t be too disturbing for the readers, but will keep the separate nature of the contents in mind).

    The centre is taken over by a tag graph combo, along with stuff I’m doing (including books I’m reading, music, films, all via All Consuming, sms via Twitter, online ‘radio’ via Last.fm, and a photo stream from Flickr).

    Over on the right are some contact details, about the site, upcoming talks and presentations, and other pages accessable via the site.

    The last section is a rss feed of the last blog post of my four favorite blogs, those of Alan Mather, Bill Vass, Mick Farren, and Tim Caynes.

    I hope you like the new design, it appears to be popular, in that I’m converting more hits to page reads and multiple pages too.

    There are a couple of things to complete, such as tidying up some of the code, finish re-implementing the multi-locale aspects of the site (although I doubt I’ll post machine translated blog posts again anytime soon), and finishing off a sitemap.

    Free XML-RPC blog ping site submitter: “Blog Ping”

    Here’s a free, as in beer, Blog Directory and Search Engine Site Submitter I wrote which works by sending out an XML-RPC Blog Ping.

    “In blogging, ping is an XML-RPC-based push mechanism by which a weblog notifies a server that its content has been updated. An XML-RPC signal is sent to one or more “ping servers,” which can then generate a list of blogs that have new material. Many blog authoring tools automatically ping one or more servers each time the blogger creates a new post or updates an old one.”

    – according to the Wikipedia article: ‘Ping (blogging)‘.

    One of the things I have noticed most across the blogosphere and the wider ‘net during my time blogging, and it’s been just less than a year, is the obsession people have with “SEO”, or ‘Search Engine Optimization‘. There are a huge number of blogs dedicated to the subject and who simply go on about the whole SEO thing alone.

    Frankly I feel that if I’m going to be putting effort into blogging then I might as well make it easy for people to find me and I’m sure plenty of other people feel the same way. If using technologies like blog pinging and other techniques like SEO is the norm, then it’s almost as though you are forced into doing the same to compete for readership; a technical ‘arms race’ in the competition for the attention of your readers.

    So I wrote a program to help me notify the largest number of directories and search engines possible, in a simple and convenient way, and you’re welcome to use it as well.

    You can download the Blog Ping application here: Blog Ping v1.0 (BlogPing.Jar)

    You may find that if you click on the link to the file above, and you have Java installed, that it will attempt to run the application from where it is, so it’s probably best to do a ‘Save as…’ and save a local copy.

    Please don’t deep link directly to the file above, instead link to the page you are currently on at: https://horkan.com/2008/04/22/blog-ping-search-submitter-seo

    Here’s what the application looks like in action:

    Blog Ping Application FAQ

    Basically what does this software do ?

    It notifies a variety of Blog Directories and Search Engines that your blog has been updated recently, which is often followed by those Blog Directories and Search Engines checking your site for new content, using a technique called ‘Spidering‘. Once verified by these ‘Web Crawlers’ they list your new content, postings, etc., in their directories and search results.

    The list of Blogs is configurable, as is the the list of Blog Directories and Search Engines Servers (with a maximum of one thousand), and the application has a default list of those Servers, which includes some of the most popular that I have tested the application with successfully.

    Will it improve the quality of my site ?

    C’mon, now you’re just being silly, of course it won’t.

    Will it improve the quality of conversation about my site ?

    Again ‘No’, only you can do that by engaging your audience.

    Will it get you listed on a large number of Search Engines and Blog Directories ?

    Yes.

    Will it generate page hits from people potentially coming to read your site ?

    Yes, but very much dependent on the volume, quality, and cadence, of your blog posts. I’ve tested it against sites with small volumes of blog posts and poor cadence, and I have found that despite being listed in those blog directories, etc., it does not generate page hits.

    Fundamentally you need three things, but you need these anyway to create a blog which gets regular readership, and that is:

    • A good volume of posts
    • Good quality of posts with interesting and engaging content
    • Regular postings, ‘Cadence’

    Will it connect you with people who are genuinely interested in your topic matter ?

    Maybe, maybe not, you’ll just have to see. It’s very dependent on the answer to the question above…

    When should I use this software and how often should I use it ?

    I recommend that you use it when you’ve initially set up a site to make as many Blog Directories and Search Engines aware of your new site as possible. You should probably be aware that a number of them require you to create an account with them, however the default list included in the application aren’t any of these.

    After that I recommend that you only use it after posting a new blog entry and definitely not more than once a day (even with new posts and content).

    What will this software do on my system ?

    It will load up, along with the libraries it is bundled with. It uses the vanilla java swing libraries, as well as the apache xml-rpc project libraries.

    Once loaded up it’ll do nothing until you either:

    • add, modify or delete a blog which you want to notify blog directories about (it’ll save your blogs in a file called “blog.txt” in the same directory as the application is run out of)
    • add, modify, or delete a blog directory / search engine to notify via an xml-rpc pingback (it’ll save your blogs in a file called “ping.txt” in the same directory as the application is run out of)
    • start a blog ping session, where it will cycle through all the blogs you’ve added, and through all the blog directories you’ve added, and send each one an xml-rpc pingback call (it’ll connect to the Internet via the Apache xml-rpc libraries, so you may need to let Java or BlogPing.jar have access through any locally configured firewalls)
    • have a look at the about page, which will load info from a special page from this blog, where I’ll post help and any news or updates about the application

    What do I need to get it to work ?

    An installed copy of the the Sun Java Runtime Environment (JRE). I set the software to be compatible with JRE version 1.5 and above, although I’ve only tested it from JRE 1.6 onwards.

    Whilst writing it I used the Java Development Kit (JDK) version 1.6.0_0.5 (or 1.6.0 update 5, as it’s also known, the latest current version) so the JRE which matches this will definitely work.

    You can get the Sun JRE here: http://java.com/en/download/index.jsp

    Will it work on my system ? I use Windows, Linux, Solaris, etc.

    Yes, it very much should, and because of Java’s platform independence, meaning programs written in the Java language have to run similarly on any supported hardware / operating-system platform via the Java Virtual Machine (Java VM or JVM). It should work on any system for which there is an available JRE.

    For a full list of Operating Systems, System Configurations, and platforms, supported with a JRE (version 1.6) from Sun Microsystems, please see this page: http://java.sun.com/javase/6/webnotes/install/system-configurations.html

    How do I run this software ?

    Easy peasy, once the JRE is installed, two choices, command line or desktop environment.

    If you are using the command line the following command should run it:

    java -jar BlogPing.jar
    

    Otherwise you should be able to simply ‘click’ on it from your desktop environment for it to start up.

    For this to work files of the type “jar” (a ‘Java ARchive’) need to be registered as being associated with Java (notably the Java executable). You may find that the application doesn’t start in this instance and a common cause is that another application, most frequently compression and de-compression software like Rar or Zip (or there windowed versions, like WinRAR or WinZip), have already made this association and thus will be started up instead of Java.

    How do I use this software ?

    I’ve used screen grabs to show how to use the program, you can resize these images using the “Body Image Size” function over in the top of the right hand side bar (options are “Small”, “Medium”, and “Large”, and they should be set on “Medium” when you first come to the page).

    When the program loads this is the first screen, and as it is such a simple program there is not much to it.

    There are four menu items of note: “Exit” (under “File”), “About” (under “Help”), “Add Blogs” and “Add Pings” (both under “Menu”).

    This screen shows the two menu item which you need to use to get the software to ping the servers you want to notify. You need to let the program know which blogs to tell people about and which directories and search engines to notify.

    If you don’t have any blogs configured it will ask you to add one.

    You need four pieces of information for this:

    • The title of your blog.
    • The URL of your blog.
    • The main URL for blog posts, most frequently the same as the URL of your blog.
    • The URL for syndication services on your blogs, either RSS or Atom. If you don’t know it simply add the URL from above.

    If you choose ‘OK’ above it will have saved your blog, and you are free to add more, edit whats already there, or delete some.

    Afterward add, editing and deleting blogs choose ‘OK’ to save them or ‘Cancel’ to ignore all the recently made changes.

    If you don’t have any servers to send blog pings configured it will ask you to add some.

    You can choose to add them individually, or to load the default list.

    Having choosen to load in the default list of servers to ping, you are free to add more, edit whats already there, or delete some.

    Afterward add, editing and deleting servers to ping choose ‘OK’ to save them or ‘Cancel’ to ignore all the recently made changes.

    All servers to be sent blog pings are saved in a text file called “ping.txt” which should be in the same directory, or folder, as the one the ‘BlogPing.jar’ program was started in.

    When adding a blog directory or search engine ping service you need just one piece of information: the URL for XML-RPC blog pings for that site.

    Here the program is working through a processing cycle of blogs and servers to ping. The results are posted in the main notification output area. Once it’s finished going through all of the blogs you call grab the output and copy it into a text file.

    Here’s the about box, it loads a page from this blog, which means I can update the page and make sure news and information about the program is kept up to date.

    Why did I write it ?

    Because I could and because I wanted more flexibility in using blog pinging over and above the default blog ping functionality in my blogs platform (Roller Weblogger, created by Dave Johnson, is used exclusively to host http://blogs.sun.com).

    You may find that you have a similar requirement, even if your using another blogging platform such as WordPress, Movable Type, LiveJournal, or the like.

    Plus I really dislike elitism, especially ‘technology’ elitism based on arbitrary things like what or how much you know, for me experience of having ‘done’ something matters more. Giving this software away and distributing it in the way that I am is an attempt to bring this capability to the non-programming, non-scripting, and much wider, blogging community.

    Shouldn’t you have just contributed to Roller ?

    Probably, in the longterm yes, as this is partially a tactical ‘fix’, done primarily to see if I could do it reasonably easily, of which the answer was definitely ‘yes’.

    I also wanted more control and granularity when notifying Search Engines and Blog Directories of updates to my site, in fact I initially used it to make sure my blog was listed on as many global sites as possible.

    What went into writing it ?

    The Java Development Kit (JDK) 1.6.0 update 0.5 (and of course, as stated above you’ll need a compatible JRE to run it).

    NetBeans version 6.0.1, which you definitely don’t need to run this program, available here: http://download.netbeans.org/netbeans/6.0/final/

    Please note that the latest version of NetBeans (6.1) is currently in RC, or ‘release candidate’, form and that I’ll likely update Blog Ping to have been written in that in the very near future.

    Download Java

    Download Netbeans

    The Apache XML-RPC libraries, version 3.1, also which you don’t need to run this software, available here: http://ws.apache.org/xmlrpc/

    The ProGuard libraries, version 4.2, also which you don’t need to run this software, available here: http://proguard.sourceforge.net/

    Anything else interesting about this software ?

    Yes, my default set of blog ping services, which I’ll post later, and that I obfusticated the code using the latest version of ProGuard after being inspired by this article written by Geertjan on how to obfusticate java code written using NetBeans.

    Possibly that I wrote it whilst listening to Flanders and Swann, notably “Madeira M’Dear”, famous for its syllepsis.

    And maybe that I wrote this blog post listening to New Order, specifically Blue Monday (’95 tweleve inch version), and thanks to Walter Milner I think the Pink Fairies got in there somewhere too.

    What do you want for this software ? Similar Blog Ping clients are on sale around the ‘net from anything between $30 and $100 ?

    Nowt, yadda, zip, nothing, I just wanted to see if I could do it, and found that I could. If you use it, and you like it, please tell people about it, blog about it, add links to this page and this blog (but not the download itself), and leave a comment if you have time.

    I’m especially interested in hearing from anyone who downloads and installs Java and the JRE as a result of wanting to use this software, so please let me know if you have.

    Link to my blog here: http://blogs.sun.com/eclectic/

    Link to the Blog Ping application page here: https://horkan.com/2008/04/22/blog-ping-search-submitter-seo

    And comments here please: https://horkan.com/2008/04/22/blog-ping-search-submitter-seo#comments

    There are also online services like ‘Pingoat’ and ‘King Ping’ which act as ‘Blog Ping aggregators’ for you, you can find them at http://www.pingoat.com and http://www.kping.com respectively. Whats nice about the software here is that you can configure it to use these ‘Blog Ping aggregators’, if they have an XML-RPC interface, which in the case of ‘Pingoat’ and ‘King Ping’ they both do.

    By the way, there are other free Blog Ping software out there, notably Blog Pinger (a Linux command line utility, which as it’s written in Python should run on any OS where you have a compatible Python instance installed) and Submit’em now (a Firefox Add on).

    Go check them out, they might be more to your liking, and diversity is good.

    Will you be maintaining or updating this software ?

    Maybe, it depends on three things: demand (from you guys), use (for me), and time (i.e. what gets priority over this).

    What changes would you make ?

    Probably spend some time learning more about the XML-RPC blog ping call protocol, I’m sure I could generate much higher volumes of Blog Ping successes if I did.

    What license does this software use ?

    This instance uses the Creative Commons License. Copyright 2008, Wayne T. Horkan.

    Why isn’t this software ‘Open Source’ ?

    If there is enough demand for the software, and more importantly changes to the software, then I’ll consider putting the effort into setting it up as Open Source. However, frankly, it’s a very minimal and trifling set of code at the moment.

    Is this software anything to do with Sun Microsystems at all ?

    This is my personal weblog and on it I do not speak for my employer. However the program was written using Sun technologies and I do work at Sun (although I put this software together as a home project and my current role at Sun rarely involves writing code).

    Does that mean that Sun are they responsible for it ?

    No, definitely not, nag me about it, not Sun, and do that in the comments section of this page please.

    Is this a ‘White Hat‘ or ‘Black Hat‘ SEO tool or technique ?

    The tool is implicitly amoral, it’s the user that constructs a moral or immoral pattern of usage.

    Using this software aggressively to send falsified blog postings will likely, and deservedly, get search engines and blog directories to block your site, potentially even de-listing it, so please don’t be irresponsible in using it.

    Have a look at the following Wikipedia article for more information on White Hat versus Black Hat SEO techniques.

    Internationalizing a Roller Weblogger based Blog

    So I’ve been spending time lately providing better international support to the blog.

    In fact check out the variants I’ve put together:

    For the translator I used the Yahoo Babelfish translation service, rather than Google Translate (which I use to produce on demand translations of the site, at the time of posting this it should be at the top of the right hand sidebar), because I didn’t want to become tied in to a single Translation Service Supplier.

    During translation I switched to using “blog” rather than “weblog” for the title, as many of the languages would translate blog but not weblog (possibly a weakness of the translation service).

    I was alluding to the new multi-language pages and the new multi-lingual nature of the blog in the post on St. Patrick’s Day, however I’d only translated some of the posts, not internationalised the site itself, and so it wasn’t really time to go live, but I did want the posts to start being spidered (and the post “Weblog language translator – blog translation on the fly with Roller specific functionality” explains why).

    iron l10n zion – or how I did it…

    There are a number of ways to internationalize a blog running over Roller Weblogger, for instance at the Aquarium, another Sun Blog, they use multiple blogs instances, like the Japanese Aquarium, I didn’t go for this approach as I wanted to keep to a single blog instance (due to maintainability basically).

    I approached the problem by having a language resource file which loads as the session begins based upon the locale determined in the URL.

    At run time this is done dynamically like this:

    1. Decide which locale the user is loading the page from
    2. Load the language specific resource file / pack (from a repository of language resource files, of which there is one resource file / pack per language)
    3. Variables are already allocated and populated with language specific data
    4. Use the above variables throughout the Roller Weblogger template code (HTML mainly) to create the page
    5. Present the page to the user requesting it

    A number of language resource files were needed, all of which I populated with text based named variables (obviously the name of the variable stays the same, just the content per language resource file is different).

    Then I replaced all the specific uses of text across my roller templates with calls to those variables.

    This is a code snippet example of the code which decides which language resource file to load, and yes, before you say it, it’s not aesthetically pleasing, but I’m the only person who’ll be debugging it, so I’ll let myself off on that one. As you can see it checks which locale the page is being called from (based on the URL, but you can’t see that bit), once it finds a positive it loads the language specific resource file (notice I also ensure to load a default at the end if a match can’t be found).

    
    
    
    
      #if ($model.locale == "en")
    
    
    
    
    
          #includeTemplate($model.weblog "_lang_en")
    
    
    
    
    
      #elseif ($model.locale == "zh")
    
    
    
    
    
          #includeTemplate($model.weblog "_lang_zh")
    
    
    
    
    
      #else
    
    
    
    
    
          #includeTemplate($model.weblog "_lang_en")
    
    
    
    
    
      #end
    
    
    
    
    

    And here’s an example of a specific language resource file, in this case this is the start of “_lang_de”, one of the files that would have been loaded based on the logic in the above piece. As you can see it has my (string) variables allocated and populated.

    
    
    
    
      #set ($gtTitle = "Blog Wayne-Horkans: eklektisch")
    
    
    
    
    
      #set ($gtMostPopTags = "Die meisten populären Umbauten")
    
    
    
    
    
      #set ($gtSitePrefs = "Aufstellungsort-Präferenzen")
    
    
    
    
    

    Here’s an example use of the $gtTitle (string) variable from above within the Roller Weblogger template, which Roller builds dynamically at run time, obviously if the page was being

    
      $gtTitle
    
    

    Probably the worst part of this was being adversely effected by Roller timezone and localization sensitivity issues as documented in ROL-1337 “all components involved in weblog rendering need to be locale & timezone sensitive”.

    For instance when generating blog specific URLs in my templates, not all of the Roller Weblogger functions, macros and variables are timezone / localisation safe, and so for a number of them I’ve had to step though the templates modding the code to be timezone and localization safe as I go.

    This meant that I had to bodge parts of the code with temporary ‘fixes’ to make up for the incomplete coverage, but it will do for now.

    A couple of the most obvious issues was one with dates, as “$utils.formatDate” only produces day and month names in English, and another with “$entry.permalink” as it produces a non-locale specific URL

    
    
    
    
      ## Replaced instances of $entry.permalink with $entryLSP (Locale Specific Permalink)
    
    
      #set ($entryLSP = 
    
      "http://blogs.sun.com/eclectic/$model.locale/entry/$utilities.encode($entry.anchor)")
    
    
    
    
    

    I may also have to write alternate macros which are locale specific, including the one that generates a list of recent entries:

    
    
    
    
      #set ($rEntries = $model.weblog.getRecentWeblogEntries($chosenCat, $rEntriesTotal)) 
    
    
    
    
      ## Have to use this as locale settings don't yet effect "getRecentWeblogEntries"
    
    
      #showWeblogEntryLinksList($rEntries)
    
    
    
    
    

    I don’t want to give the impression that non of the Roller Weblogger timezone / locale specfic functionality works. In fact a lot more than I assumed would, did. Including the menu (content) functions and Tag URL functions, and I was very pleased that there was the level of support in Roller that there is for internationalization.

    I’ll be providing more multi-lingual content, specifically the content rich, article like posts I’ve been doing, so far I’ve translated three posts of this ilk: