Sunday Nov 02, 2008

Wordle: Word Cloud Applet

Wordle is pretty cool Applet (yeaaaah, still new ones are being developed ;-) that creates a word cloud from any RSS feed. I blog at and and most of the content is GlassFish-focused. Here are some wordles generated from my two feeds:

Once a wordle is generated, it can configured for different layout, font and color. Here are some more from "Miles to go" ...

The corresponding tag cloud from the blog is given below:

The generated wordles do not seem to match the tag cloud (which is certainly more authoritative). For example, "NetBeans" is shown with much lesser intensity than "latitude" and "longitude".

Anyway as evident from the wordles and tagcloud, GlassFish stands out very well - just like the product itself :)

And then couple of wordles from ...

Here as well, This wordle is confusing because out of 517 blog entries, I'd guess 70-80% have GlassFish mentioned there. Even then "Mojarra" (JSF implementation from GlassFish community) is highlighted much more than GlassFish. Is that a bug ?

Wordles can be generated from random text or tags as well. You can even see the word count and here is a sample:

But not sure how it generates them cause I've used the word "GlassFish" way more than 13 times just in subject!

Anyway, create your own and have fun!

Check out Alexis's wordles as well.

Technorati: wordle applet glassfish milestogo blogging

Wednesday Aug 27, 2008

Typo on GlassFish v3 - Ruby-on-Rails Blogging Engine

Typo is an open-source Blogging Engine written using Ruby-on-Rails framework. It provides a lean engine that makes blogging easy. It's main attribtues are ease of use, usability, beauty and excellent support of web standards.

I found out about this application from Sang "Passion" Shin's Lab 5543 (part of FREE 20-week course on Ruby-on-Rails started on Jul 15, 2008). But instead of using standard WEBrick/Mongrel deployment, I describe the steps to deploy this application using GlassFish v3 that supports native deployment of Rails applications. 
  1. Typo can be installed as Gem or from Sources. Installing as gem gives the following error:

    JRuby limited openssl loaded. gem install jruby-openssl for full support.
    Building native extensions.  This could take a while...
    /Users/arungupta/tools/rails20/jruby-1.1.3/lib/ruby/1.8/mkmf.rb:7: JRuby does not support native extensions. Check for alternatives. (NotImplementedError)
            from /Users/arungupta/tools/rails20/jruby-1.1.3/lib/ruby/1.8/mkmf.rb:1:in `require'
            from extconf.rb:1
    ERROR:  Error installing typo:
            ERROR: Failed to build gem native extension.

    /Users/arungupta/tools/rails20/jruby-1.1.3/bin/jruby extconf.rb install typo

    Gem files will remain installed in /Users/arungupta/tools/rails20/jruby-1.1.3/lib/ruby/gems/1.8/gems/mysql-2.7 for inspection.
    Results logged to /Users/arungupta/tools/rails20/jruby-1.1.3/lib/ruby/gems/1.8/gems/mysql-2.7/gem_make.out

    This is discussed here. In the meanwhile, download and unzip Typo 5.1.2 as:

    ~/samples/jruby >unzip ~/Downloads/
    Archive:  /Users/arungupta/Downloads/
       creating: typo-5.1.2/
       creating: typo-5.1.2/app/
       creating: typo-5.1.2/app/apis/
       . . .
      inflating: typo-5.1.2/vendor/uuidtools/lib/uuidtools.rb 
      inflating: typo-5.1.2/vendor/uuidtools/rakefile 
      inflating: typo-5.1.2/vendor/uuidtools/README
  2. Create the database:

    ~/samples/jruby >sudo mysqladmin create typo_dev

    Typo 5.1.x works with Rails 2.0.x only and so migrate as shown below:

    ~/samples/jruby/typo-5.1.2 >~/tools/rails20/jruby-1.1.3/bin/jruby -S rake db:migrate
    (in /Users/arungupta/samples/jruby/typo-5.1.2)
    == 1 InitialSchema: migrating =================================================
    -- create_table(:users)
       -> 0.0377s
    -- create_table(:articles)
       -> 0.0189s
    -- add_index(:articles, :permalink)
       -> 0.0094s
    -- create_table(:categories)
       -> 0.0069s

     . . .

    == 69 AddModulesToProfile: migrating ==========================================
    -- add_column(:profiles, :modules, :text)
       -> 0.0072s
    == 69 AddModulesToProfile: migrated (0.0454s) =================================

    == 70 AddUsersToNonAdmins: migrating ==========================================
    == 70 AddUsersToNonAdmins: migrated (0.0488s) =================================

  3. Typo 5.2 (scheduled in 3 days) will work with Rails 2.1.
  4. Download GlassFish (nightly, promoted or build-your-own) and install by unzipping. I tried the nightly of 8/24 as:

    ~/tools/glassfish/v3/8-24 >unzip ~/Downloads/
    Archive:  /Users/arungupta/Downloads/
       creating: glassfish/
       creating: glassfish/docs/
       creating: glassfish/docs/css/
       creating: glassfish/docs/graphics/
    . . .
      inflating: glassfish/lib/templates/login.conf 
      inflating: glassfish/lib/templates/ 
      inflating: glassfish/lib/templates/server.policy
  5. Start GlassFish as:

    ~/tools/glassfish/v3/8-24/glassfish >java -DJRUBY_HOME=/Users/arungupta/tools/rails20/jruby-1.1.3 -jar modules/glassfish-10.0-SNAPSHOT.jar
    Aug 26, 2008 5:56:10 PM com.sun.enterprise.glassfish.bootstrap.ASMain main
    INFO: Launching GlassFish on Apache Felix OSGi platform

    Welcome to Felix.

    Aug 26, 2008 5:56:11 PM HK2Main start
    INFO: contextRootDir = /Users/arungupta/tools/glassfish/v3/8-24/glassfish/modules
    Aug 26, 2008 5:56:11 PM OSGiFactoryImpl initialize

    . . .

    INFO: APIClassLoader = Class Loader for Bundle [GlassFish-Application-Common-Module [66] ]
    Aug 26, 2008 5:56:13 PM CommonClassLoaderManager Skipping creation of CommonClassLoader as there are no libraries available
    INFO: urls = []
    Aug 26, 2008 5:56:13 PM com.sun.enterprise.v3.server.AppServerStartup run
    INFO: Glassfish v3 started in 2176 ms
  6. And deploy Typo as:

    ~/samples/jruby >~/tools/glassfish/v3/8-24/glassfish/bin/asadmin deploy typo-5.1.2

    Command deploy executed successfully.
The application is available at "http://localhost:8080/typo-5.1.2" and some of the screenshots follow:

Also check out Redmine, Substruct and Mephisto on GlassFish v3. There are some performance issues when running Typo on GlassFish and this is tracked at Issue #5662.

If your Rails application does not work on the gem, file bugs here with "jruby" as "subcomponent" (default version is "v3").

Technorati: rubyonrails glassfish v3 jruby ruby typo blogging

Sunday Aug 24, 2008

LOTD #5: Blogging Gold for Sun - Forrester loves it!

A recent report by Forrester Research published a list of 15 companies that really get corporate blogging and produce blogs that are informative, fascinating, and a joy to read even for people who aren’t die-hard fans of the company. Here is what the report says about Sun Microsystems:

Like Adobe, Sun allows their employees to blog. They’ve been doing it for a long time, and their blog portal has over 4,500 bloggers covering over 110,000 posts. Some of their blogs, such as that of Web 2.0 and Web Services Evangelist Arun Gupta, have become quite popular on their own. That’s 110,000 posts of promotional gold for Sun and they know it.

Here are recent statistics of

That's a comment for each post! I'm happy that this blog contibutes it's share.

All previous entries in this series are archived at LOTD.

Technorati: lotd milestogo sun forrester blogging

Monday Feb 18, 2008

Screencast #23: Social Software for GlassFish - Blogging, Tagging & Content Rating

Social Software for GlassFish
Social Software for GlassFish provides an integrated suite of Blogging, Tagging and Content Rating on GlassFish. More details about this suite are available here.

This screencast explains how this integrated suite of software can be easily downloaded using GlassFish Update Center, how different components are seamlessly integrated and can be used.

Enjoy it here!

More screencasts focused on each individual topic are available here.

An offline version (downloadable zip file) of this screencast is available here. A complete list of screencasts is available on GlassFish wiki.

Technorati: screencast web2.0 social glassfish roller slynkr blogging tagging contentrating

Wednesday Dec 20, 2006

Syndication, Aggregation & Protocols

In my previous Web 2.0-related blogs, I talked about What is Web 2.0 ?, What is AJAX ? and AJAX: jMaki Framework. Switching gears, this blog will talk about another technology that enable the principles of Web 2.0, i.e. RSS/Atom.

Lets begin with English meaning of the terms "syndication" and "aggregator" first. 

Syndication means:  "The act of syndicating a news feature by publishing it in multiple newspapers etc simultaneously"

Aggregator means: "An online feed reader, generally used for RSS or Atom feeds to keep track of updates to blogs, news sources, and other websites"

Any content over the web, that changes frequently or at irregular intervals, needs a mechanism to inform it's audience about the updates. RSS and Atom are XML formats designed to generate "syndicated feeds" to publish such frequently updated content. Each feed contain details about the title, a short summary, link to the detailed entry and metadata. This content could be either the entire website or, more interestingly, just a specific section of the website targeted towards an audience. The audience of the content uses "feed aggregator" to fetch the feeds, organize the results, and read the contents. is the standard way to identify syndicated content. The XML format defined by RSS and Atom is really simple leading to it's exponential growth (also 1, 2, 3)  in the recent years.

A detailed history of how RSS evolved over multiple versions, in the past 7 years, is available here. A concise history, with a tabular difference of different RSS versions, is available here. RSS 2.0 is the most feature rich version and stands for "Really Simple Syndication". It defines an XML format to publish frequently updated content of your website. An non technical introduction to RSS explains how RSS feed is generated. For example, an RSS feed to my blog is given below. This feed cannot be directly viewed in the browser (both Firefox 1.5.x+ or IE6) as they both have a default stylesheet that displays it nicely formatted in HTML. The XML data (as shown below) behind the feed can be viewed using "View Source" option on the page. 

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="" media="screen"?>
<rss version="2.0" 
 xmlns:atom="" >
 <title>Miles to go ...</title>
 <atom:link rel="self" type="application/rss+xml" href="$url.feed.entries.rss($model.categoryPath, $model.excerpts)" />
 <description>Arun Gupta&apos;s Weblog</description>
 <copyright>Copyright 2006</copyright>
 <lastBuildDate>Tue, 19 Dec 2006 11:10:03 -0800</lastBuildDate>
 <generator>Apache Roller (incubating) 3.2-dev(20061208101134:ag92114)</generator>
   <guid isPermaLink="true"></guid>
   <title>Running San Francisco Marathon 2007</title>
   <dc:creator>Arun Gupta</dc:creator>
   <pubDate>Tue, 19 Dec 2006 10:34:09 -0800</pubDate>
     <description>As if one marathon was not

During the history of RSS, there were multiple versions (0.90, 0.91, 0.92, 0.93, 1.0, and 2.0) all of which had shortcomings and multiple incompatibilties. To overcome the political (different camps own these versions and claiming to be correct) and technical difficulties, Atom syndication format was published as an IETF "proposed standard" (IETF terminlogy defined by RFC 2026) in RFC 2487.  Like RSS, Atom also defines an XML format to public frequently updated content of your website. For example, an Atom feed to my blog (viewed using "View Source" option) looks like:

<?xml version="1.0" encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="" media="screen"?><feed xmlns="">
   <title type="html">Miles to go ...</title>
   <subtitle type="html">Arun Gupta&apos;s Weblog</subtitle>
   <link rel="self" type="application/atom+xml" href="$url.feed.entries.atom($model.categoryPath, $model.excerpts)" />
   <link rel="alternate" type="text/html" href="" />
   <generator uri="" version="3.2-dev(20061208101134:ag92114)">Apache Roller (incubating)</generator>
       <title type="html">Running San Francisco Marathon 2007</title>
       <author><name>Arun Gupta</name></author>
       <link rel="alternate" type="text/html" href=""/>
       <category term="/Running" label="Running" />
       <category term="marathon" scheme="" />
       <category term="running" scheme="" />
       <content type="html">As if one marathon was not

A comprehensive comparison of Atom 1.0 and RSS 2.0 highlights the differences between two formats. The key difference between the two formats is given below:

  • The biggest complaint about RSS is that the format is "lossy" and does not preserve the type of data. Atom maintains the type and therefore allows wider variety of payloads.
  • RSS 2.0 specification is copyrighted and frozen. Atom 1.0 is published as a "proposed standard" in IETF and is extensible.
  • RSS 2.0 feeds cannot be auto-discovered. Atom feeds can be auto-discovered using IANA-registered MIME type application/atom+xml.
  • RSS 2.0 supports no schema. Atom 1.0 includes RelaxNG schema that allows checking for validity of data.

As evident, Atom has some significant advantages over RSS 2.0 and is now more commonly used. For example (based on Moveable Type) and (based on Roller) both offer Atom 1.0 feeds. Bloglines, the most popular web-based aggregator, supports all the RSS and Atom formats. A known list of Atom 1.0 consumers and  Atom 1.0 Feeds shows the growing adoption of Atom 1.0.

Blogging, news content syndication, podcasting are the most common usage of syndication/aggregation. 

In my next blog, I'll talk about Rome and how it makes it easy to work in Java with most syndication formats.

Technorati: Blogging Syndication Aggregation Feeds RSS Atom Web 2.0 Technology


profile image
Arun Gupta is a technology enthusiast, a passionate runner, author, and a community guy who works for Oracle Corp.

Java EE 7 Samples

Stay Connected


« July 2016