Category Archives: Technology

Adventures with Twitter in Groovy

Have you ever wanted to get a better sense of an event’s commentary on Twitter? For example, a subset of your following may be attending an event in your periphery but making interesting enough comments to warrant a closer look.

Well, I’ve had these thoughts on an increasing basis lately so I thought I’d dive into the Twitter stream a bit to see what I could learn.

Fortunately, I was aware of a gist to query Twitter by @pmonks, and this Groovy script became the foundation for my exploration.

Since I don’t normally program in Groovy, I had to setup Groovy on my MacBook Pro. (To be clear, I went for “get this to work” rather than “accomplish your configuration with all best practices incorporated.” I’m sure there may be better techniques where Groovy setup on MacOS is concerned, and I thank you in advance for any comment-based pointers.)

  1. Visit the Groovy website and understand basic Groovy installation instructions.
  2. Downloaded the binary release (Zip) of Groovy 1.8.6 (i.e. latest available version of the stable branch at the time of this post).
  3. Extracted Zip contents and moved (via Terminal) them under my up-to-date Java distribution:
    prompt$ sudo mv ~/downloads/groovy-1.8.6 /usr/share/java

    (I’ve seen apparent best practice guidance to create a symlink that allows you to access Groovy without referencing the version number, but I’ve skipped that here.)

  4. Edit your .profile file to point your environment to your new Groovy installation. (If you don’t have a .profile file, read and follow this.)
    prompt$ open /Applications/ .profile

    Add (or confirm) the following lines in your .profile file:

    JAVA_HOME=/Library/Java/Home; export JAVA_HOME
    GROOVY_HOME=/usr/share/java/groovy-1.8.6; export GROOVY_HOME
    PATH=$GROOVY_HOME/bin:$PATH; export PATH

    Save your .profile file, exit TextEdit, close all open Terminal windows, exit Terminal and open a new Terminal window to enable .profile changes to take effect.

  5. Confirm that Groovy is ready to act on your script:
    prompt$ groovy -v

    My confirmation looked as follows:
    Groovy Version: 1.8.6 JVM: 1.6.0_31 Vendor: Apple Inc. OS: Mac OS X

For this particular script, queryTwitter.groovy, you need to provide a peer file that will provide to Twitter your username and password. Once that’s ready,

prompt$ groovy queryTwitter.groovy %23interesting_event

The results are ready to be nested within a table element, if you want to produce HTML for display as-is. However, you could also modify the script to render JSON output and pursue alternative visualizations (e.g. rate of tweets over time, geolocation of individuals in the tweetstream, word clouds for the event, influencer status, etc.)–something for D3.js.

D3 (Data-Driven Documents)

Examples of D3-based visualizations

“D3.js is a small, free JavaScript library for manipulating documents based on data.” -

Since I’ve been trying to spread the word with colleagues about this powerful, expressive visualization technology, I thought it might be worth sharing similarly here.

The following tutorials have been helpful in ramping folks up on D3:

D3’s creator, Mike Bostock, has published a white paper on D3 (Stanford Visualization Group) and presented D3 during the most recent W3Conf (browser-based slides).

A couple of spotlights on D3 include one by Flowing Data and another by SVG Magazine.

Flowing Data also posted an application of D3, “How Americans Spend Their Day” (background context).

If this whets your appetite, visit the D3 wiki for a whole lot more goodness (documentation, additional tutorials, example visualizations, etc.).

Update 8/30/2012: Mike Bostock posted his 3/5/2012 D3 workshop given at VIZBI 2012. Also since my original post, I discovered D3 for Mere Mortals and Christophe Viau’s Try D3 Now post.

Adobe Connect bookmarklet

Here is a technique you can apply to your browser to make your Adobe Connect room joining workflow more streamlined.

If you work at Adobe, you use Connect on a regular basis. After a while, and in the face of shortened URLs (and everything else), you start to just think in terms of frequented room names.

If this sounds like you, you can simply your Connect room joining experience as follows:


This code is simply the logic inside a bookmarklet that you can drag and drop into most modern browsers. That is, you can drag the following link into the links bar of your browser: Connect

Then you can click on the bookmark link to receive a dialog as follows:
Adobe Connect bookmarklet dialog

Please note that you may need to replace “” with your Adobe Connect host URL.

(HT @chrisvls)

P.S. While we’re talking about Adobe Connect productivity, I recommend that you visit the Adobe Connect User Community downloads page for additional tools.

The Experience Architecture

In my #AdobeMAX session today, I presented a set of experience architecture principles with my colleague Marcel Boucher as follows:

I’ve gone into greater detail about these principles in a technical white paper that is available from the Adobe Enterprise Developer Center as a PDF download.

During our session, Marcel presented two demonstrations:

  1. The first demonstration featured an overall vision for customer experience in the retail banking domain. If you weren’t able to catch this demo live, you can see it presented here during the FinovateSpring 2011 event.
  2. Marcel’s second demonstration provided more of the how behind the vision in terms of Adobe’s integration across its Web Experience Management (WEM) solution, SiteCatalyst and Test&Target. A video similar to Marcel’s demonstration of this integration is available here.

MAX is always a great event, and the enterprise team at Adobe is looking forward to sharing more with you about Digital Marketing at our upcoming summit in March 2012.

Cloud first, mobile first, social first

The Adobe® Digital Enterprise Platform (ADEP) Experience Server supports WAN clustering (important in high latency situations and given distributed infrastructure), hot cluster join (allowing you to expand infrastructure on the fly), and runs in a very small memory and CPU footprint. This makes the Experience Server suitable for deployment in the cloud, whether actual deployments are done there or on premise.[1]

Explosion of mobile devices

In pursuing interaction patterns, ADEP starts its approach with mobile devices (particularly tablets) and then expands to consider other environments. ADEP can detect over 17,000 devices,[2] enabling content contributors to understand exactly what experience will be delivered to segmented content consumers via device emulation support. ADEP presents the concept of device groups to reduce the complexity and managing the diverse range of never-ending devices and device types.

Direct service of one may indicate subsequent service to others

Today’s customer increasingly leverages social activities to gain validation of their decisions and to share them with others. ADEP supports a range of social capabilities including support for local communities and the ability to glean information from public communities (Facebook, Twitter, etc.) and use that information to tailor the customer experience. Social capabilities in the platform are much like the public social environment: they surround everything we do and are available for use at any time for any purpose.

With ADEP:

  • You build applications for the cloud with on premise in mind,
  • You build applications for mobile with desktop in mind, and
  • You understand that every user is a contributor and has a social graph.

This post wraps up the current series on ADEP architecture principles. Now that we have a shared frame of reference, we’ll return to ADEP Developer Center as a PDF download. Please feel free to provide me with your feedback on that work here. Thanks in advance!

[1] i.e. ADEP Experience Server is “cloud ready”
[2] Adobe’s Customer Experience Solution for Web Experience Management (previously known as CQ5), leverages the WURFL device description repository.