Friday, February 1, 2008

OEM - Crossing the Barriers of Adoption

Presenter: Sam Ceccola, North America CTO of Capgemni

We don't want mashup technology going the way of SOA, adoption is dropping
What customers got with SOA didn't live up to what they thought they were getting with SOA
Drucker's Seven Sources of Innovation - ?
Governance and Management - personalize, differentiate, organize, comply
Barriers to crossing the divide - security vs trust, information overload vs the creation of knowledge, the aging workforce, finding the novelty vs marketing to the masses, a successful implementation strategy
Instead of locking a system that you have to be granted access to, instead, grant everyone access to the system but keep careful watch on them, and as soon as someone does something wrong slap the handcuffs on them (government A-Space program to change their security for the analytic community to leverage Web 2.0 technology)
Can this work in the financial industry?
Spectrum of "Unique & Value" to "Commodity & Cost" Where on this pendulum do the financial industries lie?
Demographics of today's workforce is U-shaped, one side is 40+, one side is 30-, and then a little between 30 and 40
If the governance walls are maintained, a companies workforce will lose out on the younger crowd if the new technology is not adopted
How can we combine a company's org chart with the actual social networks contained within it that actually represent how the business gets done

OEM - The Language of Enterpise Mashups

The Language of Enterprise Mashups
Presenter: John Crupi, CTO of JackBe

JackBe, founded in 2003 as an Ajax company, and repositioned the company as an enterprise mashup company
Do mashups enable users to control their own software's functionality? Almost abstracting the actual development into a point and click interface for creating the mashup
Gartner Top 10 Strategic Technology Areas: Mashups at #7
Incoming workforce - grow up on myspace, gmail, facebook, do it yourself, don't like to conform, born after 1977, expect to be paid more, expect to have flexible work schedule, expect to be promoted within a year, expect to have access to state of the art technology
Gen Y - doesn't want a corporate portal, instead they want to customize their entire experience (a la iGoogle of PageFlakes)
Collaboration Example - Nintendo DS with 8 year olds and their networking technology
Demo
Everything in an enterprise is authenticated and authorized with each request, but the key with enterprise mashup is mixing external free data, with proprietary and secure internal data
Product handles the big 4 - RSS, REST, WSDL for Silk, Databases, and web clipping
Two parts of mashup - the data part, and the UI part
Value the fact that the UI of the mashup should be reusable and portable. It shouldn't matter that the mashup is in a portlet, or contained in someone's website, even if it's only internal to a company
Should there exist a standard for mashups such that they are wrapped in a reusable abstract way?
Tomorrow's Data-driven web - integration of data happens at the edge of the server, no longer in the client browser. This data is moved outside of the firewall
Forced Mashup 1.0 - The practice of collaborating on a spreadsheet via email, an outdated and error prone process. There is no governance on the data.
Enterprise Mashup Characteristics - tag/shared/search-able, user-driven, dynamic/ad-hoc, UI (mashlet) accessible. The IT people want to wrap this data with APIs, secure it, drive it from the server,
Web 1.0 Tiers - presentation, business, integration
Web 2.0 Tiers - presentation, mashups, business, integration
Mashups shouldn't care where they are shown
Demo #2 - JackBe Wires - Tibco like GUI for wiring data together to eventually be shown as a mashup, looks interesting

OEM - Understanding the value and applying to business

Presenter - Stefan Andreasen, Founder of Kapow

Kapow is a .com survivor
250+ customers across US, Asia, and Europe
Partnerships with Oracle, IBM, BEA, Attachmate, FAST, EMC/Documentum
Products - Kapow Mashup Server 6.2 - 8 years in the making
OpenKapow - free version, but catch is that you have to share everything you do
What is a mashup? Comes much more from the situation in which it was created, than the technology used to create it, we're already doing it! It's just an evolutionary thing, we finally put a name to it, can be management data mining, business reports, price comparison, rss feeds. An application, dashboard, spreadsheet, portlet, widget which is combining multiple data sources to create new insight, business decision, intelligence, and additionally the situation in which the mashhup is created is teh most significant differentiator for being a mashup (self service, adhoc, sharable, collaborative, distributed, automation of manual process, comes from the long talk of business
Systematic Projects for conservative reliability vs opportunistic projects for competitive agility
Systematic Projects for conservative reliability - old way of IT, doesn't give us much these days, this is just :running the machinery"
opportunistic projects for competitive agility - biggest opportunity for ROI, especially from mashups, this is where we "create the value"
Mashup can be presented as: portlet, web application (housing maps), spreadsheet, rss feed, smartphone
Data can come from competitors, pricing, market data, reputation, customers, and suppliers (which is all freely available on the web!)
Kapow - two versions either one that will run inside your firewall, or another that will be released soon
Typical mashup - Google Maps and craigslist data in one view
Business mashup - BP oil rig warning system in Gulf of Mexico, create a warning system using five free web sites to show oil rigs on a map with weather, rig names, water temperature, and send alerts via text messages to a cell phone
Core data vs Intelligence data - breaking up the data layer into two pieces
Core data - private, systematic, structured, subscribed
Intelligence data - public, unstructured, knowledge, often no standard API or feed, and hard to get to (this are kind of like the wild websites)
Only the largest free websites have a public API, most websites don't, so how can we access the data on these websites to mash it up?
#1 obstacle is getting access to this raw data, this is where Kapow's product comes into play
Kapow's Product Family - Portal Content Edition, data collection edition, web 2.0 edition, content migration edition (ETL for the web)
OpenKapow - 3500 users
Transactional mashup - When creating an account in Facebook, if you already have a LinkedIn account, you can provide your LinkedIn credentials to Facebook and they'll suck you information from there
Demo - create an RSS feed of information on a certain stock based on data returned from Google Blog Search. Kapow was primarily a GUI in which you interact with, kind of like a browser in which you specify the area of the screen to capture. Seemed like a lot of manual work just for an RSS feed. Can't TIBCO do this for internal data from the backend? It got impressive when he service enabled the demo, and the data was ultimately fed live into a spreadsheet (from the web)
So how fragile is this manner of "screen scraping?" Since a website author can change their structure and potentially break someone's Kapow mashup. This is apparently the most asked question from customers of Kapow, and the answer is that ...

Open Enterprise 2.0 Mashups - Introduction

Today I'm attending the Open Enterprise 2.0 Mashups Summit on in NYC. I'll be posting a separate blog entry for each presentation. I'll use "OEM" as a prefix for the titles of these posts so I can fit the actual name of the presentation there as well.

SharePoint Site for the summit
http://colabria.sharepointsite.net/emu/default.aspx

John Maloney's Opening Remarks
Intangible assets - the real wealth of individuals, nations, and ecosystems
Value networks are dynamic system views of roles and relationships
Value networks generate true wealth, prosperity and sustainable success
Analysis and modeling is important in planning these networks
These are not just business or IT specific networks, but apply to all areas of life (and science)
First, understand the as is value network, how do you tap that intangible wealth?
These value networks may be treated as ecosystems themselves
smallest type of exchanges are tangible and intangible exchanges
Tangible Exchanges -
Intangible Exchanges -
Business Analysis Methods - process, value network, social network
Value networks look at : what's in the network, what's flowing, what's contained in those exchanges, move from a process mentality to a framework mentality (?)
Goal is to have the intangibles working for you and making wealth
----
Mashups as the spreadsheet analogy, the data comes from somewhere else, we just let the user control how they slice it and dice it

Saturday, January 12, 2008

Why is Blogger so anti-markup?

Please offer me some suggestions for posting XML, HTML, and other markup in my blog posts. As I found out in my previous post, Blogger is really stupid when trying to interpret any markup in the post. My intention is that the markup isn't interpreted by the browser, but instead shown as code to the reader (see the build.xml excerpts below). In Blogger's editor, I pasted the xml, and used the WYSIWYG editor to format it. The results were devastating. Both the xml became mangled, and the resulting html that Blogger generated to adjust the format of the text wasn't correct. I ultimately had to change to the "Edit Html" view and change all the > and < characters to their encoded equivalents (ampersand-lt; and ampersand-gt;).

How do you get around this problem in your blog? I guess I could merely switch over to the "Edit Html" view full time, but then, what good is the WYSIWG editor?

Stay tuned for more on Java code coverage...

Wednesday, January 9, 2008

Enough of Cobertura, introducing Emma - another Java code coverage tool

After fooling around with Cobertura for a couple nights, I got frustrated because I couldn't figure out how to filter out my unit tests being monitored for coverage. Specifically, I had written the Cobertura ant targets to execute my suite of unit tests and monitor the coverage of the code. When reporting the results, in addition to showing the which lines were covered from my application code, the report also showed which lines from the unit tests were covered as well. I tried a multitude of different ways to try and filter out certain patterns of filenames from being reported, but nothing seemed to work. I imagine I'll revisit Cobertura in the future, since I'd really like to get the results fed into a tool like QALab. At the moment, QALab's website doesn't indicate that it supports output from Emma, only Cobertura (but there seem to be new feature requests under development for supporting Emma's format).

Emma seems to be very similar to Cobertura under the covers. Both tools do analysis and insert some markers into the compiled Java bytecode in order to monitor which lines of code are called during the coverage period. Emma's website has a lot better documentation on getting a new user up and running. With my work, I'm not even concerning myself with the command line Java execution of my code (does anyone even do this anymore besides college students writing simple programs?). Instead I like to jump right to the documentation for integrating these tools with ant, primarily because most of my code already has ant build scripts written, and that's where I'd ultimately like to integrate these tools. Also, some developers may use Emma to monitor coverage of test cases they're executing by hand, specifically QA type test cases from which they're clicking through the application. I'm not worrying about this scenario either, I just want to focus on the unit testing coverage aspect. To get Emma monitoring code coverage of your unit test cases from ant, at a high level you need:

  1. A JUnit suite that will execute all of your unit test cases
  2. An ant taskdef referencing the Emma jar file to load its custom targets
  3. A custom ant target for compiling your test cases
  4. A custom ant target for running your unit test cases while Emma monitors it
The suite is all on you to write, so no need to cover that here. The taskdef for Emma looks like this:


<!-- You'll need to define emma.home as a property pointing to the
directory where you extracted the Emma zip -->
<property name="emma.dir" value="${emma.home}/lib">
<path id="emma.lib">
<pathelement location="${emma.dir}/emma.jar">
<pathelement location="${emma.dir}/emma_ant.jar">
</path>
<taskdef classpathref="emma.lib" resource="emma_ant.properties">


The first couple lines just cleverly define some path stuff so we can reuse the variables elsewhere in our build.xml. The last line here is the interesting part, it tells ant that one of the jar files on the emma.lib path contains a file called emma_ant.properties, which contains information for tasks that can be used from ant. Troubleshooting point: If you later get an error regarding ant not being able to understand the custom emma tasks, then you most likely have a bug/typo in the above code snippet such that the Emma libraries aren't being referenced correctly.

Next we'll define a general on/off property for enabling Emma (if you understand ant, you'll later see that this really isn't necessary, but you'll need to adjust future targets accordingly)


<target name="emma">
<property name="emma.enabled" value="true"></property>
</target>


Next, we'll define the target for compiling our unit tests:


<target name="compiletests">
<javac destdir="web/WEB-INF/classes" source="1.5" target="1.5"
debug="true" deprecation="false" optimize="false" failonerror="true">
<src path="${test.dir}"></src>
<classpath refid="compile.classpath"></classpath>
</javac>
</target>


One thing you'll probably notice from this snippet is that I'm developing a web application. I really haven't variablized my ant script completely at this point, that will come later when I try to replicate the script on a separate machine. Nothing complicated, or even Emma specific, in this snippet, just compile my test cases, located in ${test.dir}

Next, we'll actually execute the unit test suite and monitor their coverage.


<target name="runtests" depends="compiletests">
<emmajava fork="yes" enabled="true" libclasspathref="emma.lib"
classname="junit.textui.TestRunner" taskname="junit" failonerror="true">
<arg value="mongo.AllMongoTests"/>
<classpath refid="compile.classpath">
<filter includes="mongo.*" />
</classpath>
</emmajava>
</target>


This target will run the custom emmajava ant task (loaded from the earlier taskdef statement) which executes my unit test suite (class is mongo.AllMongoTests), run a filter such that only classes under the mongo package are monitored for coverage (otherwise you'll see stuff like how many times you called the junit.framework.TestCase class, and who cares about that?), and finally output the results into a file called coverage.html in the same directory as the build.xml. Well the results don't end up exactly there, instead they end up in a subfolder to wherever build.xml is located called "coverage." Of course, you can customize this by just changing the value of the "outfile" attribute, and absolute paths are supported.

The html output of the tool is very pretty, although not as pretty as Cobertura (but it's just data). In my next post, I'll show an example of the output. Unfortunately, compiling and running ant all the time on your desktop gets a little slow. It's better designed for integrating and building your application.

In my next post I'll review EclEmma, a plugin for Eclipse which allows you to do all this within the context of your IDE with minimal configuration.

Sunday, January 6, 2008

Cobertura - A tool to help you measure your Java unit test code coverage

If you've ever written unit test cases for any program language, you know how important it is to ensure that your test cases execute each line of code. This is called code coverage. The more your unit test cases exercise the logic in your application code, the less likely it is that a bug slips through your unit test cases. On a large code base (common to most applications these days), it's hard to judge how effectively your coverage statistics. There are various tools to help quantitatively measure the coverage of your unit test cases. Such vendor tools that accomplish this are Parasoft's JTest, and Quest's JProbe. But who wants to buy software? I've been trying out this open source code coverage measurement tool called Cobertura. So far I've only been using the ant tasks in combination with HTML reports. The reports it produces are really nice and informative, even allowing you to drill down into each class such that you can view the source and actually see the number of times each line of code was called from your test suite. Alternatively, red highlighting will call those lines with no coverage to your attention. There's also a command line interface if you choose to execute it outside of your build. Check it out here:
http://cobertura.sourceforge.net/
Hopefully I get the initiative to post some examples of how to include it in your ant targets.

Other tools that have my attention at the moment, and could very possibly surface in a future blog post include: