Recently, I selected Spring Roo as my RAD tool of choice.  I use it for quickly churning out ideas into prototypes. It is my Java solution for the functionality that I have admired in Ruby On Rails. However, Spring Roo is still in its infancy. Its is just over a year old and still on its arduos joruney to maturity. One of the inadequacies of Spring Roos that I ran into right off the bat was the inability of Roo to work with an existing database.  In other words, Roo does not currently allow developers to start with a database, reverse engineer the schema into an ORM and build apps on top.  The ability to do this is Roo’s currently most requested feature. It is documented here as a Jira issue.

A couple of workarounds have been suggested to get around this problem. One of the workaorunds that I considered  is using Eclipse to generate entities from table using a JPA project.  However, this approach does not create Roo-specific annotation such as the @RooEntity,@RooToString and @RooJavaBean, all of which will have to be coded by hand. Given the inadequacoes of all the approaches, I came up with a method that has been working for me. I must say, I suggest this method ONLY if you have a few tables (and for non-production work). I can see this method turning into a laborious process if you have many tables; if that is your situation, you are probably better served going the Eclipse JPA project route.

(NOTE:  Ben Alex has indicated that the next version of Spring Roo will address Jira issue “ROO-435″)

Here is the process for creating a Spring Roo project using an existing database (the assumption here is that the reader is familiar with the creation of Spring Roo projects. If not, please take this excellent tutorial by Ben Alex first):

We are going to create a Directory project that allows us to look up people using a Person object.

Step 1: Create a database named “directory”. Create a table named “Person”. Insert a few rows into the Person table. I am using MySQL for the database but any database of your choice can work with this tutorial.

$ mysql -h localhost -u su -p
mysql> create database directory;
mysql> use directory;
mysql> CREATE TABLE Person (person_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,last_name VARCHAR(45) NOT NULL,first_name VARCHAR(45) NOT NULL,date_of_birth DATE NOT NULL,created_date TIMESTAMP NOT NULL,PRIMARY KEY (`person_id`));
mysql> insert into person (last_name, first_name, date_of_birth, created_date) values ('Winnfield','Jules','1967-06-07',NOW());
mysql> insert into person (last_name, first_name, date_of_birth, created_date) values ('Vega','Vincent','1971-04-15',NOW());
mysql> insert into person (last_name, first_name, date_of_birth, created_date) values ('Wallace','Marsellus','1970-01-01',NOW());
mysql> insert into person (last_name, first_name, date_of_birth, created_date) values ('Wolfe','Winston','1960-07-04',NOW());


mysql> select * from Person;
+-----------+-----------+------------+---------------+---------------------+
| person_id | last_name | first_name | date_of_birth | created_date        |
+-----------+-----------+------------+---------------+---------------------+
|         1 | Winnfield | Jules      | 1967-06-07    | 2010-03-19 15:33:31 |
|         2 | Vega      | Vincent    | 1971-04-15    | 2010-03-19 15:35:00 |
|         3 | Wallace   | Marsellus  | 1970-01-01    | 2010-03-19 15:36:52 |
|         4 | Wolfe     | Winston    | 1960-07-04    | 2010-03-19 15:37:19 |
+-----------+-----------+------------+---------------+---------------------+
4 rows in set (0.09 sec)
mysql> select * from Person;
+-----------+-----------+------------+---------------+---------------------+
| person_id | last_name | first_name | date_of_birth | created_date        |
+-----------+-----------+------------+---------------+---------------------+
|         1 | Winnfield | Jules      | 1967-06-07    | 2010-03-19 15:33:31 |
|         2 | Vega      | Vincent    | 1971-04-15    | 2010-03-19 15:35:00 |
|         3 | Wallace   | Marsellus  | 1970-01-01    | 2010-03-19 15:36:52 |
|         4 | Wolfe     | Winston    | 1960-07-04    | 2010-03-19 15:37:19 |
+-----------+-----------+------------+---------------+---------------------+
4 rows in set (0.09 sec)

mysql> exit;

Step 2: Create an empty directory named “directory”, cd to it and fire up Roo.

$ mkdir directory
$ cd directory

$ roo
    ____  ____  ____
   / __ \/ __ \/ __ \
  / /_/ / / / / / / /
 / _, _/ /_/ / /_/ /
/_/ |_|\____/\____/    1.0.2.RELEASE [rev 638]

Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER.
roo>

Step 3: Create the Roo project with a top level package of “com.tomchikoore.examples.directory”


roo> project --topLevelPackage com.tomchikoore.examples.directory
Created /Users/tom/Documents/workspace-sts-2.3.1.RELEASE/directory/pom.xml
Created SRC_MAIN_JAVA
Created SRC_MAIN_RESOURCES
Created SRC_TEST_JAVA
Created SRC_TEST_RESOURCES
Created SRC_MAIN_WEBAPP
Created SRC_MAIN_RESOURCES/META-INF/spring
Created SRC_MAIN_RESOURCES/META-INF/spring/applicationContext.xml
Created SRC_MAIN_RESOURCES/META-INF/spring/log4j.properties

Step 4: Install a JPA provider and database. Since I created the Person table in a MySQL database, I am going to specify MYSQL as my database.

roo> persistence setup --provider HIBERNATE --database MYSQL --databaseName directory --userName su
Created SRC_MAIN_RESOURCES/META-INF/persistence.xml
Created SRC_MAIN_RESOURCES/META-INF/spring/database.properties
please enter your database details in src/main/resources/database.properties
Managed SRC_MAIN_RESOURCES/META-INF/spring/applicationContext.xml
Managed ROOT/pom.xml

Step 5: Disable the auto database creation in the persistence.xml file

Roo sets up the persistence settings so that the database is created when the application run. Since your database already exists, turn this setting off by going to this file:

SRC_MAIN_RESOURCES/META-INF/persistence.xml

and comment this line:

<property name="hibernate.hbm2ddl.auto" value="create"/>

So that it looks like this:
<!-- <property name="hibernate.hbm2ddl.auto" value="create"/> -->

Save the file and close.

Step 6: Create the Person entity.  This is the Java object representation of a Person row entry in the database

IMPORTANT: The important thing to understand here is that Roo creates two fields by default, an identifier “id” field and a versioning “version” field.  The problem here is that our Person table has neither of those columns (I purposefully created the Person table without either field, especially the “id” field which I named “person_id” so that I can clearly make this point). In my case, I have a schema that has been in production for years and I do not want to start adding columns to our the table on because they are required by a RAD tool, that will turn out to be a bad decision once the next RAD tools comes along.

Therefore what I want to do is  instruct Roo NOT to create a default “id” and a “version” fields.   Unfortunately, I cannot instruct Roo not to create a “version” field  at this step, I can only do it at a later step. At this step, I can only instruct Roo not to create a default “id” field by instructing it to use a different field for an “id” field. So I am going to go ahead an instruct Roo to create a Person entity WITHOUT the default identifier field named “id” but instead use the “person_id” field as the identifier field:

roo> entity --class ~.model.Person --identifierField person_id --identifierColumn person_id  --table Person
Created SRC_MAIN_JAVA/com/tomchikoore/examples/directory/model
Created SRC_MAIN_JAVA/com/tomchikoore/examples/directory/model/Person.java
Created SRC_MAIN_JAVA/com/tomchikoore/examples/directory/model/Person_Roo_Entity.aj
Created SRC_MAIN_JAVA/com/tomchikoore/examples/directory/model/Person_Roo_ToString.aj
Created SRC_MAIN_JAVA/com/tomchikoore/examples/directory/model/Person_Roo_Configurable.aj

Step 7: Add entity fields

IMPORTANT:  This is the most important step when creating the entity because it involves reverse-engineering the database table schema into entity fields. This is the functionality that is currently lacking in Roo. For this step I am going to use a script that I found in the Spring Roo forums; I have made several enhancements to the script to to make it usable. The script introspects the databse schema and generates Roo entity fild creation commands.

The first step is to run the script to create the Roo entity field creation commands.  In a separate window log back in to MySQL and run the following script:

mysql> select concat('field ',
elt(
field(data_type,'int' ,'varchar','bit' ,'timestamp','datetime', 'date', 'tinyint'),
'number','string' ,'boolean','date','date','date','number'),' --fieldName ',column_name,if (is_nullable='NO',' --notNull ',' '),
if(character_maximum_length is not null,concat(' --sizeMax ',character_maximum_length,' '),''),
elt(
field(data_type,'int' ,'varchar','bit' ,'timestamp','datetime','date', 'tinyint'),
'--type java.lang.Integer','--type java.lang.String' ,'--type java.lang.Boolean','--type java.util.Date','--type java.util.Date','--type java.util.Date','--type java.lang.Integer')
) from information_schema.columns cols where table_name='Person' and table_schema='directory';
+-----------------------------------------------------------------------------------------------+
| field number --fieldName person_id --notNull --type java.lang.Integer                         |
| field string --fieldName last_name --notNull  --sizeMax 45 --type java.lang.String            |
| field string --fieldName first_name --notNull  --sizeMax 45 --type java.lang.String           |
| field date --fieldName date_of_birth --notNull --type java.util.Date                          |
| field date --fieldName created_date --notNull --type java.util.Date                           |
+-----------------------------------------------------------------------------------------------+

5 rows in set (0.02 sec)

The second step is to execute the entity field commands generated by the script in the step above at the Roo comand line (go back to the Roo command window):

IMPORTANT: DO NOT RUN THE FIRST COMMAND. That is because the “person_id” has been specified to be the identifier in Step 6. If you create it here again, you will get duplicate field errors.

roo> field number –fieldName person_id –notNull –type java.lang.Integer

roo> field string –fieldName last_name –notNull –sizeMax 45 –type java.lang.String

roo> field string –fieldName first_name –notNull –sizeMax 45 –type java.lang.String

roo> field date –fieldName date_of_birth –notNull –type java.util.Date

roo> field date –fieldName created_date –notNull –type java.util.Date


Step 8: Perform JUnit Integration test

roo> test integration

Step 9: Create the web tier

roo> controller scaffold ~.web.PersonController

Step 10: Add finders

roo> finder add –finderName findPeopleByLast_nameLike

roo> finder add –finderName findPeopleByFirst_nameLike

Step 11: Remove the default “version” field

In Step 6, I mentoned that Roo creates two default fields for each entrity, the idntifier “id’ field and the versioning “version” field. In step 6 we were able to instruct Roo to use the “person_id” field instead of the default “id” field for the default indentifier.  At this step we are going to instruct Roo not to use the “version” field.  To do this, we have to change the @RooEntity annotation in the Person.java class. In this example, the source for  the Person.java class is located at:

SRC_MAIN_JAVA/com/tomchikoore/examples/directory/model/Person.java

Open this source file and locate the following line (notice the identifier overrides that we set in Step 6):

@RooEntity(identifierField = “person_id”, identifierColumn = “person_id”, finders = { “findPeopleByLast_nameLike”, “findPeopleByFirst_nameLike” })

Add versionField = “”, such that the line looks as follows:

@RooEntity(identifierField = “person_id”, identifierColumn = “person_id”, versionField = “”, finders = { “findPeopleByLast_nameLike”, “findPeopleByFirst_nameLike” })

Save the file and close.

Step 12: Import the project into Eclipse

(I am going to use Eclipse/STS for the sole purpose of being  consistent with the original Spring Roo tutorials so that I don’t throw off novices)

roo> perform eclipse

After this command completes, open up Eclipse or STS and import (File -> Import -> Existing Projects into Workspace) the “directory” project.

Step 13: Run web aplication

Deploy the application war and go to http://localhost:8080/directory

When you click on “List all People”, you should see the following:

"List all People" results

"List all People" results

Thats it!!

This evening, as part of the University of Colorado Denver Alumni Association Board of Directors, I had the opportunity to take a sneak peek at the new University of Colorado Denver (UCD) Business School building located at 1475 Lawrence Street in Downtown Denver.  As a proud MBA graduate of the UCD Business School, I had been looking forward to the tour of the new building for weeks and I was not disappointed. Dean Sueann Ambron, the Dean of the College of Business gave us an enthusiastic and detailed tour of the building.

The new UCD Business School building is a 98,570-square-foot $24.1 million building located in downtown Denver at northwest corner of 15th and Lawrence.  By locating the Business School in the heart of downtown, the University of Colorado has finally firmly established its ties to the business community and economic center of the city of Denver. If you are familiar with this area you will realize that that UCD has created an “education corridor” on Lawrence Street between Speer Blvd. and 15th Street. This corridor is being billed as “the gateway to higher education in downtown Denver”.

Dean Ambron Showing Plans

Dean Ambron Showing Plans

Today, Business School students attend classes in six venues scattered all over the Auraria campus and downtown.  When I attended UCD, I attended classes in the North Classroom Building, the Science Building, the King Center (the first laptop friendly building on campus), the 14th Street building and the Bard center building on the 16th Street Mall. I am very happy that future Business School students will take all their classes in one place – the new building will consolidate all the six or seven different venues into one.  Judging by what will be available in the new building, students will not need to leave the building much. There will be atriums, fountains, patios with mountains views, roof top gardens, to name but a few amenities. The building will be LEED certified (not sure to what level), energy efficient and environmentally friendly – a sign that UCD is willing to practice what it is preaching to next generation leaders.

Outside fountain and courtyard to be converted into a two story atrium

Outside fountain and courtyard to be converted into a two story atrium

I was pleased to learn that the new location will house the Bard Center for Entrepreneurship, a business incubator and venture capital fund offices. The Business School is fully committed to putting all the structures in place to support entrepreneurship – a commitment to serve the local economy. Of note is the Bioscience Entrepreneurship program that is being offered at the Bard Center for Entrepreneurship in partnership with the Anschutz Medical Campus, the Colorado Bioscience Park Aurora, the Technology transfer Office and the Colorado Bioscience Association companies. I hope that the Business School will launch programs in other areas that support some of the economic goals of the state, such as clean technology.

Make Your Mark Wall. If you look closely you'll see Mayor Hickenlooper's "Every Great B-School Creates a Great City" mark.

Make Your Mark Wall. If you look closely you'll see Mayor Hickenlooper's "Every Great B-School Creates a Great City" mark. That is where I took the title of this post.

My Mark, "The future belongs to those who prepare"

My Mark, "The future belongs to those who prepare"

Overall, I must say that I am very encouraged by what the Business School has done.  The location of the new building shows the University of Colorado’s commitment to the business community and the economy of the city of Denver and the state of Colorado.   The simple power of agglomeration, in this case, cannot be understated; the fact that the Business School is now closer to the business community is going to result in the graduation of students who meet the needs of the local market.


Here is a little nugget of information about Dean Ambron that I learned while writing this blog post;  Dean Sueann Ambron coined the term “MULTIMEDIA”, she literally invented the word and the concepts of multimedia (hard to believe that at one point in my lifetime both the word  and concept of “multimedia” did not exist) and back in the day she was called “the mother of multimedia”; here is a Wired Magazine article on Dean Ambron from 1994 – Mother of Multimedia.



DISCLAIMER: The title of this blog post “Every Great B-School Creates a Great City” was taken from the “mark” Mayor Hickenlooper made on the Mark You Wall wall in the new Business School building.

February 2nd, 2010 | Tags:

I will be speaking at the Rockies Venture Club dinner meeting on February 9, 2010 at the Denver Athletic Club. The title of the event is “Filtrbox – A Case Study from Start-up to Exit”.

It will be “be a fascinating look at how you go from startup, through funding, to building out the sales to investor management to exit – all in two years!”. It’s a review of Life in the Startup Lane. If you are interested in attending, register at the Rockies Venture Club web site here.

PS: For speaking engagement requests, contact me at tom [at] tomchikoore.com

January 7th, 2010 | Tags:

Today we announced that Filtrbox has been acquired by Jive Software.  First, I would like to thank the team that we assembled at Filtrbox – just a bunch of smart guys who simply kick ass.   Next, I would like to thank all the family, friends, investors, supporters and fans of Filtrbox. We are grateful for all the support that we got from everyone.

Today we have a lot of work to do so I will not say much, however, I will be blogging about social business software and social intelligence once the dust settles down.

And yes, this blog will still be called “Life in the startup lane”

You can find more details about the acquisition here

October 1st, 2009 | Tags: , , , , ,

Of late I have been looking at a good number of resumes and interviewing some candidates for Java developer positions.  I must say that I was astounded by the number of candidates who do not know how to design any Java software that does not involve a servlets or  JSPs .  It is clear to me that there is a good number of Java developers out there who are oblivious to the fact that there is a world of Java outside the container.   And these developers are no slouches either. The developers that I interviewed were highly certified Java developers with strong Java fundamentals. 

I am still failing to reconcile the strong fundamentals of the Java developers with their inability to design outside the container.  I view the ability to design outside the container as something every Java developer should be able to do.  During interviews, that should not be a question that should be asked at all. In fact, I never used to ask the question at all until I noticed that each time I asked a candidate a design question, they made the assumption that there should be a container, servlets and JSPs involved.  When I dug a little deeper, I made the observation that there is an unbelievably high number of highly certified Java developers who fall short when asked to design anything that is not hosted in a container.

In my opinion, Java certifications and their emphasis on particular patterns are dumbing down the Java developer.  The world of Java consulting exacerbates the problem because it rewards those who solve problems by rote.  While I have nothing against patterns or consulting, I cannot help but observe that we might be losing a generation (in dev generation years) of Java developers in much the same way we lost a good generation of developers to 4GLs at the end of the last decade. Who is going to develop the complex stuff?  Who is going to innovate? Innovative solutions to complex problems cannot be solved within the constraints of containers.

September 29th, 2009 | Tags: , , ,

As the saying goes, “In Boulder everything revolves around community”.  Thought I should bring to everyone’s attention one of the many good community efforts that  are happening in the Boulder technology community.

For the past nine months, I have been organizing the Boulder CTO Lunch, a monthly “meeting of the minds” lunch of Chief Technology Officers (CTOs) in the Boulder area. The mission of the CTO Lunch is to provide resources and support to local CTOs. 

Boulder is fast becoming a growing technology hub, especially for startup technology companies. Thanks to Techstars, several newly minted startup technology companies are pumped into the community each year. On average, each of these companies has a developer who is thrust into the role of a CTO overnight.   How does one transition from being an energy drink-fueled, all nighter-pulling rockstar coder into a CTO?  There are no schools or ready-made resources to help coders transition to CTO roles.  CTO Lunch attempts to fill in the gap. CTO Lunch harnesses the existing local CTO community to provide a network of resources to support CTOs of companies in the Bouder area.

In addition to helping startup CTOs find their feet, CTO Lunch is a resource for all Boulder CTOs. We have a good mix of startup CTOs, experienced CTOs, serial CTOs and on occasion we have had ex-CTOs who are now CEOs.

CTO Lunch is in the form of an informal roundtable idea exchange that is held once every month at The Bunker (Techstars Headquarters).  A guest CTO is invited every month to share their thoughts or expertise on certain topics. During the hour-long event,  CTOs discuss and exchange ideas with their peers.  The topics of discussion have become deeper over the last several months and usually reflect the technology issues of the day and challenges that face CTOs on a daily basis in the pursuit of keeping their companies technologically competitive. Peer interaction does not end with the monthly event; to keep the communications lines open among CTOs, there is a Google Group (“Boulder CTOs”) on which CTOs can discuss topics and exchange ideas at any time.

To be part of the Boulder CTO Lunch, send me an email at [tom][at][filtrbox][dot][com].  Boulder CTO Lunch is also part of the “Winter In the Bunker” events. Go to http://winterinthebunker.com/ to find out more information.

September 10th, 2009 | Tags: , ,

A couple of weeks ago I purchased an email-only mobile device called a Peek and I have been loving it ever since.  At a time when smartphones and PDAs are getting as much functionality crammed into  them, the guys at Peek have gone the opposite direction by creating a device which only does one thing and one thing only – EMAIL. No browser, no AppStore, no games, no cameras, no GPSes, compasses….just emails. To go even further in the opposite direction,there are  no contracts and no hidden fees. Instead, you  get a flat monthly rate, nationwide wireless coverage and unlimited email. Imagine a Blackberry or iPhone (an iPhone with ACTUAL nationwide wireless coverage) that only sends emails  and thats the Peek.

 

Here is how the Peek works: After you purchase a Peek, you simply enter 4 things –  First name, Last Name, Email address and Email Password.  The email address can be any e-mail address. For example, I used my [tom][at][tomchikoore.com] email address and Peek auto resolved my server. No entering IMAP and POP servers and ports  and authentication methods, none of that – just an email address and Peek figures out the rest. From the information that I gleaned from their tech blog (which I think is the most transparent tech operations blog of the tech operations blog that I know of), Peek is running EC2 instances that act as proxies to my email account. The EC2 instances perform some interval polling on my mail server and deliver any emails to my Peek. The Peek has nationwide wireless coverage and I think that is because they are working with nationwide providers.  I was able to prove this nationwide coverage while vacationing in the Black Hills of South Dakota during the Labor Day weekend; my Peek received messages while my iPhone had a several hiccups.

 

In addition to the simplicity of usage, I really love the Peek pricing and service plans.  I currently own the Peek Classic which I purchased for $19.95 with a $19.95 service plan (the service plan starts from $14.95).  With the Peek Classic, I can setup up to 2 email accounts and I can send and receive an unlimited number of emails.  For those who want a little more oomph, there is a Peek Pronto that costs $59.95, and supports up to 5 email accounts, instant email, unlimited email and unlimited texting (all for the same service costs that starts from $14.95). In addition to the 5 email accounts, the big difference between the Classic and the Pronto is the instant email (which I assume is simply higher polling frequency to your mail server) and support for text messages.  The physical device is the same for both the Classic and the Pronto.  It features a scroll wheel like a Blackberry and a QWERTY keyboard.

 

I am not sure how well Peeks have been  selling (since last year when the Peek debuted) but from a business strategy point of view, I think the guys at Peek are onto something for the following reasons:

 

1. Single Purpose Device

There is a good segment of the consumer market that simply wants mobile email and are not interested in anything else other than that.  Moreover, I do see a lot of potential for Peek usage by businesses, especially small businesses.   First, all the small businesses that have always wanted Blackberries but could not afford them, the Peek is a very low cost alternative. Second, I see applications for Peeks in small businesses that are characterized by  one way messaging to mobile field employees (for example:  the dispatch of instructions home contractors).  

2. Price

The low cost of the Peek devices and  service plan has the potential to bring mobile email to the masses.  Small businesses that wish to streamline field communications without huge hits to their budgets provide the biggest potential market for Peeks.

3. Simplicy

The Peek is very un-geek. It is very simple to setup and very simple to use.  No “Geek Squad” or “Genius” needed here. Take a Peek out of the box, enter your name, your email and password and you are good to go.  The simplicity makes it a very consumer friendly device and eliminates/lowers technical support costs for businesses.

 

I admire the thinking against the thought stream that the guys at Peek are doing and I think that they will be successful.  They have been harvesting a number of awards and thats a good sign.

 

On a personal note, I have developed a bias towards Peek devices because I have come to the conclusion that  the low cost and simplicity of the Peek device render it the perfect device that can be leveraged to mitigate some of the effects of  the ‘technology divide’.  Given that, I have chosen Peek to be the primary technology device for a non-profit project  that I have started  and that I will be announcing in the next couple of weeks.  Simply put – the Peek has a potential to democratize a lot.

July 1st, 2009 | Tags: , , ,

Several weeks ago, at Filtrbox, we shared some of our internal functionality with the public via the Filtrbox Twitter Influence scoring page.  The Filtrbox Twitter Influence scoring page, which has turned out to be a hit among many, allows anyone to check the Twitter influence of any Twitter user. Some of our users have had some good fun with it for the purposes of ego boosting or ego busting. While we appreciate the versatility of purpose of our technology, the purpose of the Filtrbox Twitter Influence scoring page goes beyond a bragging rights tool.  The Filtrbox Twitter Influence scoring page provides a means to gauge the “reach” of mentions on  Twitter by measuring the influence of the “mentioner”  (Twitter is only one of the many conversation venues whose participants’ influence Filtrbox tracks). In this blog post, I would like to impress upon the reader that, going forward, the measurement of “influence” in social media conversation venues, such as Twitter,  should be integrated as part of all “message reach analysis” activity that a company performs.

 

Given the fact that conversation venues, such as Twitter, democratize the notion of “reach”  by providing a venue where anyone can mention anything (including your brand) to an organic audience (original target audience+viral audience), it is imperative that  brand protecting companies,

 

1) Track mentions of the company’s brand (s)

2) Analyze the influence (“reach analysis”) of the people who mention a company’s brand(s)

 

As social media networks become entrenched conversation venues where participants discuss anything under the sun including company brands, “reach analysis” needs to be expanded beyond messages that originate from a company’s marketing department.  This is the first step in acknowledging that there are other messages that are emanating from places other than your marketing department.  Those messages you cannot control. However, you can manage the conversations that the messages produce. In order to manage messages that result in conversations about your brand, regardless of their origin, brand mentions need to be effectively monitored and the message reach effectively analyzed.

 

Consider the following example: Every brand protecting company’s nightmare is seeing the following brand mention (message) on Twitter (or any conversation venue e.g. Facebook, Blog comment, Online newspaper comment)

 

“(put your brand here) sucks!!”

 

The next time people Google your brand; you do not want this to be the first brand mention they see. It well can be, if you do not properly manage the conversation that emanates from this mention. Therefore, before you react to the mention, it is important that you perform a “reach analysis” of the mention (measure the “influence” of the “mentioner”) in order to understand the authority of the person who made the brand mention, the nature of the venue in which it was made and the number of people who potentially saw the mention.  Performing such a reach analysis gives you the ability to assess an appropriate entry into the conversation and gives you a basis for formulating an approach on how to manage the conversation going forward. Products like Filtrbox simplify the “reach analysis” determination through Twitter Influence scoring and FiltrRank scoring.

 

In closing, it is important that ALL companies pay attention to “influence” in social media conversation venues. Think of “influence” as good old “reach analysis”, except the message whose reach needs to be analyzed is not coming solely from your marketing department – its coming from anyone, its coming from everywhere and, in a real-time information environment, its coming fast.

March 31st, 2009 | Tags:

A couple of months ago, I watched an ex-driver of the President mention that as the President’s driver, he had to keep track of all the outlets to the safe houses and hospitals while he was driving the Commander-In-Chief.  I thought to myself, that’s what I do too, except, I have to keep track of all the Wi-Fi hotspots on the Denver-Boulder corridor while riding public transportation in case I need to tend to the servers. However, I have recently discovered a cool little iPhone app, TouchTerm, that has saved the day for me.  I now have complete SSH access to all my servers from my iPhone, no more keeping track of Wi-Fi hotspots.

Having used all sorts of monitoring tools for the servers, there is nothing like direct shell access from anywhere. I recommend this iPhone app to developers who are on the go.  This saves you time from spending time writing monitoring tools that you can access from the iPhone; TouchTerm gives you direct access to the shell.

TouchTerm has the following features:

  • Complete server, connection, and password management.
  • RSA/DSA Key-based authentication and public key distribution via e-mail.
  • Rock-solid SSH implementation based on OpenSSL and OpenSSH.
  • Wi-Fi and EDGE/3G support: access and administer your servers from anywhere.
  • VT100 Terminal Emulation: Use top, screen, emacs, vi — virtually any console application.
  • Landscape mode; Full-screen Mode; Configurable UI transparency, font size and color.
  • A polished, intuitive, iPhone-standard interface.
TouchTerm screen shot

TouchTerm screen shot

This iPhone app has been a real time saver for me. Of all my iPhone apps, this is the most useful iPhone app in my arsenal arsenal right now (more useful than email and even the phone part of the iPhone  :) ).
March 24th, 2009 | Tags:

Several weeks ago, while purchasing a commemorative copy of the Rocky Mountain News, I came to the realization that two distinct stories, symbolic of the shift in media landscape, were playing themselves out on both ends of US-36. In Denver, The Rocky Mountain News, a symbol of traditional mainstream media, was closing down after almost 150 years of publishing. In Boulder, at Filtrbox, a young new media company, we were celebrating the release of the latest version of our service, Filtrbox G2. While the people at the Rocky Mountain News were probably not aware of Filtrbox, I had a keen eye on the daily goings on at The Rocky and I looked at the whole situation at the Rocky as a symbolic passing of the media torch.

 

As a long time resident of the state of Colorado, its was tough buying the last copy of the Rocky. As the CTO of Filtrbox, I lamented the loss of yet another mainstream content source. Contrary to what many may expect, in my opinion, the loss of content source like the Rocky is no cause for celebration at Filtrbox. The reason is that the death of a medium, such the newspaper, is a natural cycle; media have come and gone over the years. However, one thing that has remained constant is the content.  There is no substitute for good content. Whether Mike Littwin’s dispatches from the political stump or Dave Krieger’s Broncos inside scoop or Penny Parker’s celebrity sightings around town are delivered via pony express, the telegraph, the tabloid, the broadsheet, the web or a Filtrbox Daily Briefing, its all all great compelling content that I want to read on a regular basis. Thus, the death of the Rocky was by no means of verdict on content, it is a verdict on the medium in which the content is delivered. 

 

Filtrbox is providing new ways for discovering and delivering content using new media. Instead of a newspaper being delivered to your porch every morning, Filtrbox delivers a daily briefing to your inbox every morning.  In addition, Filtrbox provides various other means of consuming the content. But at the end of the day Filtrbox has to deliver content, quality content. The death of the Rocky results in one less source of content for Filtrbox users.  Content diversity is paramount if our users  are to be be well informed. Many have said, mainstream content will be replaced by blogs. However, that assumption is not reflected in the information consumption patterns that we see on a daily basis. At Filtrbox we interface with a variety of consumers of content and observe that information consumers like diversity.  Just as much as they want the thought stream in the blogosphere, they also want to know what is being said in mainstream media and on micro blogs and other sources. People simply want good content that keeps them well informed.

 

So, to the journalists who were at the the old media companies like the Rocky Mountain News and the Seattle Post Intelligencer, I say, there is still demand for your content; newspaper as a medium to deliver your content may be dying but other means to deliver your content are on the rise. Keep writing great content, the content industry is not dead.