March 2006

Monthly Archive

Data, Our Technological Debt

Posted by on 27 Mar 2006 | Tagged as: Software Architecture

Harry Pierson points out in his blog entry, “The SQL Complexity Problem”, the difficulties with relational database operations and maintenance. The relational database has been a great tool for expanding business technology into the information age. With this advancement we have found the limitations of relational databases whether it be the ease of implementation or relation models themselves. The relational database is still essential in day-to-day persistence but is it the best choice for enabling fluid data throughout your organization, consolidating disperate data sets, driving information to distributed enterprise data centers, and other 21st century IT data needs?

My current thought on this is essentially “no“ with a small caveat, there is still a place for relational databases when persisting data for historical record and reporting is a must. The problem I have with relational databases in the data access domain are the hoops which teams must jump through in order to make their “layers” play nice with each other. This includes persisting all data along with any type relations, flags, and reference data. These extraneous pieces of data bloat our databases, create maintenance headaches and inhibit agility in our businesses. What if we no longer made the relational database our gateway to corporate data? What if we allowed our corporate data to associate with other data based upon the context?

There are some great existing technologies out there which may be a precursor to such a revolution. Topic maps is a simple idea about representing data through topics, associations and occurences. Much of this is explained in “An Introduction to Topic Maps” by Kal Ahmed and Graham Moore but I will give a brief overview here. An association is essentially a grouping of topics which are themselves computer representations of a concept. Occurences are informational resources about a topic such as a description or an address to the informational resource. The relations between topics are simple, decoupled and based on context. One of the most interesting concepts to me are the heuristics within the topic maps standard to identify topics which represent the same subject.

I have written before about my issues with our current relational addiction. I like the question Harry posed at the end of his entry, “What other ideas would make persistant data significantly easier to work with?”. If we can answer this question we may find less resource intensive and more cost effective ways of paying off our technological debt as opposed to the language parading and disputing which I think are only distracting us from the real problems occuring today.

The Poetic Sounds of Architectural Design

Posted by on 23 Mar 2006 | Tagged as: Software Architecture

A. Nicklas Malik describes the need for “up front design” in his blog entry “When emergent design doesn't”. I tend to agree with his assessment of the need for some design. We have all had our moments of clarity in which we designed part or all of a system with unusually elegant form and simplicity. When we hit that architectural apex we don‘t wanna come down. Well, then the real world hits you. Not all teams are equal. Not all team members are equal. Not all situations are equal. And even more importantly, not all customers are equal.

This comment about the blog entry asserts that having awareness of the correct design questions is more important than having the possible design solutions. This comment brings me back to the desciptions of patterns and their most important attribute, in my opinion, context. The actual implementations of patterns change over time based on the tools and materials used, but the context remains the same.

A. Nicklas Malik‘s reply to the comment had good information but I believe missed the original point slightly. The commenters point, by my interpretation, is that the questions which lead to the final solution are more important since they drive the implementation details. Yes, we have many ways to “validate a field which contains a formatted number“ as he describes but this seems quite similar to the analogy made, “how do I get in?” while referring to design of an art gallery by the commenter.

I agree that the software development industry is still in it‘s infancy and that patterns will become more apparent through time. There is a great book called “Enterprise Patterns and MDA : Building Better Software with Archetype Patterns and UML” which describes large scale patterns called archetypes. These are models of a well defined business systems. An interesting aspect of these patterns is the optional models and attributes. This allows for some flexibility and creativity when designing a system, or for that matter a building. My art gallery does need a door to enter through, but does it need to have a peep hole? Probably not and that is an optional component of a door possibly. Probably not the best example I can come up with but it‘s what popped into my mind right now (…getting late).

When applying patterns there are many considerations which we determine answers for based upon the situation. I am sure there are many of you who have seen pattern misuse and overload. The right questions, which come with experience, will increase the value of a design more than the pattern itself.

Somewhat Contrary Viewpoints on Dynamic Languages

Posted by on 20 Mar 2006 | Tagged as: General

In “Gosling didn't get the Memo”, Ryan Tomayko wrote about how wrong he believes Gosling was in describing scripting languages as:

“get[ting] their power through specialization: they just generate web pages. But none of them attempt any serious breadth in the application domain and they both have really serious scaling and performance problems.”

On the same day, I find this article on “Ruby vs. Groovy” by Eric Armstrong which seems to have a very pragmatic conclusion about Ruby vs. Java:

“If you need a scripting language, Ruby is a great one.

When it comes to building an application with multiple authors and long term maintainability, I‘d say there‘s a lot of decision-making to do before going with Ruby. If you‘re going agile with a small team that can easily teach each other its favorite idioms, Ruby will probably work. If you adhere to a more structured methodology and have a large, long term project with many lines of code — so you can expect a fair amount of turnover among the people who will be maintaining it — then Ruby probably isn‘t a good fit.”

I thought this was the best explanation of modern scripting language use I have heard so far. Probably since this coincides with my own thoughts on the subject but what am I without an opinion. I am definitely not against scripting languages when they are the best tool for the job but not just for the sake of “less code“ and developer “cool” factor. Maintainability costs are still the dictator of overall software success, in my opinion.

My First Run-In with Ruby

Posted by on 17 Mar 2006 | Tagged as: General

So, I got this idea for a service and decided to create a web site for exposing it. After looking around for a bit at the ISPs who supported Java servlets I decided that none of the ones I could find met my financial and feature goals. But I did find a healthy amount of support for Ruby which I find to be a better choice than PHP or PERL for my own web development style. This is entirely a programming style decision and not a Ruby kicks PHP and PERL ass type of thing.

Since I had some understanding of dynamically typed languages I figured that development with Ruby would be quite simple. I started out my quest for creating a development environment on my laptop at the main Ruby and Ruby on Rails sites. Very soon I got into the tutorial on installing Ruby and Ruby on Rails with Apache. After tracking down a few Apache/Ruby configuration and MySQL database connection issues I was up and running.

Ruby on Rails seems like an easy platform to develop on but I do not see much improvement over Java web application development in it‘s ease of use. I can usually get a new application up and running using Maven 2 and it's web application archetype within minutes. Plus I can add web framework dependencies to my POM (Project Object Model) very similarly to how I would use gem in Ruby. If I use the Maven Jetty 6 plugin with the Maven 2 Eclipse plugin I can get instant reload of my application using my favorite web framework upon saving a file in Eclipse.

Overall my opinion of Ruby is somewhat neutral in terms of it‘s usefulness. I can understand the interest in some of it‘s programming semantics. I had some of the same feelings about Objective-C upon using it in the late 90‘s, but how many jobs ask for Objective-C experience today? On the other hand, the amount of Java APIs and open source libraries that handle most of what I need to do during development of software puts Java far ahead of Ruby, Python, and other languages including C# in my opinion. But, in this case, I will continue to use Ruby on Rails to develop my web site and I don‘t think that I will mind at all.

Mobile Code and AJAX

Posted by on 16 Mar 2006 | Tagged as: Distributed Computing

Mobile code is an essential programming model for the current connected user paradigm which has been deemed “Web 2.0”. There are many examples of mobile code including Java RMI proxies (Jini/JERI smart proxies), browser downloaded JavaScript, Java applets and ActiveX controls. Sometimes mobile code is overlooked in the design of enterprise applications as a medium to increase application usability, scalability, and awareness. For example, the power of Jini is really it‘s ability to locate services from anywhere on the LAN and communicate using a protocol which is defined by the remote service. In fact, services may include all of the functionality inside the downloaded service proxy and therefore eliminate the need to communicate back to the remote service.

In terms of RIA (Rich Internet Applications), the use of XML and/or JSON communication from downloaded Flash and/or JavaScript allows for asynchronous calls to the server for data updates to the UI. This ability to update data without reloading the page becomes an important function of web application usability by giving better user feedback and lower bandwidth overhead. The use of XML as a message format for this communication also enables standard integration into enterprise and consumer services which are usually contacted with REST or SOAP messages. A term has even been developed to describe this type of communication, “Client/SOA”.

My personal bias for web applications with AJAX recently has been using DWR (Direct Web Remoting) to expose POJO (plain old Java object) as JavaScript objects. The reason that I have adopted this approach to my AJAX development is DWR‘s ease of use and the separation of concerns. This separation is orchestrated by allowing web designers to develop the user interface with less concern for their integration with server side development. Here is an example of this separation with DWR:

<html>
<head>
...
<script language="text/javascript" src="/dwr/engine.js">
<script language="text/javascript" src="/dwr/util.js">
<script language="text/javascript" src="/dwr/MyPojo.js">
<script language="text/javascript">
function getFooFromPojo() {
MyPojo.getFoo('setFooValue'); // send callback function name
}
function setFooValue(value) {
DWRUtil.setValue('myDivForFooValue', value); // find DIV by ID to put value into
}
</script>
...
</head>
<body onload="getFooFromPojo();">
...
<div id="myDivForFooValue'>
</div>
...
</body>
</html>

The HTML and JavaScript is quite simple in this example. We have imported the DWR specific JavaScript sources, engine.js and util.js, along with my exposed POJO in MyPojo.js. The MyPojo.js script is generated using some DWR magic which I will show later. The ‘‘getFooFromPojo()‘‘ function calls on the MyPojo Java class method ‘‘getFoo()‘‘. The JavaScript version of the MyPojo ‘‘getFoo()‘‘ method also takes the callback function for the resulting value to be handled by as the last argument. In this case we sent the ‘‘setFooValue‘‘ function as the callback function with the resulting value as a parameter. Inside the callback function we set the text of a DIV with ID ‘‘myDivForFooValue‘‘ to the resulting value.

Now to show the magic. DWR exposes POJO method ‘‘getFoo()‘‘ through an XML descriptor by default named dwr.xml and placed in your [WAR (web application resource)|http://access1.sun.com/techarticles/simple.WAR.html] under the ‘‘WEB-INF/‘‘ folder. An example of the content within this file looks like this:

<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">

<dwr>
<allow>
<create creator="com.acme.example.MyPojo" javascript="MyPojo"/>
</allow>
</dwr>

The basic description of what is contained in this example dwr.xml file is that the class ‘‘com.acme.example.MyPojo‘‘ will be available as a JavaScript object by the name of ‘‘MyPojo‘‘. In this case all of the public functions of MyPojo, besides some of the ‘‘java.lang.Object‘‘ base functions, are available through the JavaScript equivalent object. My class may look something like this:

package com.acme.example;

public class MyPojo {

public String getFoo() {
return FooRepository.firstFoo();
}

}

This simple example may be enhanced to use other JavaScript sources and web services within the same page. This mashup of multiple services (exposed POJOs, web services, JavaScript functions, etc…) will produce an ever expanding realm of user interaction possibilities. An example of this may be an enterprise application which contains data such as customer location. You may create a mashup of this data with Google Maps to display the customer‘s location visually on a page with driving directions.

The examples above are only one of the many examples for mobile code. A large interest of my own is intelligent agents and peer-to-peer systems. There are multiple technologies which fit into this market (Jini, JXTA, SUMO (Suggested Upper Merged Ontology), OAA (Open Agent Architecture), etc…) which are not described in this blog entry. These technologies may enhance the user experience through dynamic service interaction, context awareness, and a suggested language for communication between users and services. It is an exciting time in which innovation is again a part of the technology domain. Mobile code will enable a whole new user experience as we move past web 2.0.

P2P Makes Cents

Posted by on 13 Mar 2006 | Tagged as: Distributed Computing

Robert X. Cringely of “I, Cringely” fame brought up the world of P2P commercial ventures in “Why P2P Is the Future of Media Distribution Even If ISPs Have Yet to Figure That Out”. I am long time fan of P2P with a dash of service-orientation from the stance of JXTA and Jini. The assertions put forth in this article point to our highly substandard bandwidth pipe which will need to be increased for the upcoming Internet media age. It mentions a few companies, two of which, Grid Networks and Peer Impact, base their network client infrastructure around grid technologies much like BitTorrent.

Cringely makes a very good case for the adoption of peer-to-peer client networking for ISPs. This will allow ISPs to maximize their bandwidth usage and resell content directly to their customers for our up and coming Internet media providers. Looks like an interesting cast of vendors out there ready for the opportunity to provide media services to the broadest audience possible. It was not so long ago that I worked for an IPv6 network backbone, Zama Networks, which had aspirations of providing VoIP transport between their data centers around the Pacific Rim. We had a beautiful data center, a rich set of network metrics, and a very advanced IPv6 knowledge base for our customers. If only they had lived long enough to participate in solving the networking issues of today.

A Manifesto from the Edge

Posted by on 09 Mar 2006 | Tagged as: General

Michael Platt has expressed his thoughts on edge architecture with his Edge Manifesto. It seems to be a play on the Agile Manifesto. I have a few comments which I would like to share about the manifesto elements:

  • Community and collaboration are more important than organizations and contracts
    There is a tendency towards providing collaborative tools for the community to drive traffic to a site and thus generating value. I am not sure if it is true that this will outweigh organizations and contracts. I think that contracts provide not only constraints but also define the responsibilities of a relationship. This definition supplies a certain level of trust between parties and increases the extent to which those parties to collaborate. Some information lends itself well to full community participation and other information must be used within trusted relationships.
  • Value and sharing are more important than price and ownership
    This seems to be apparent in the viral marketing which happens over the Internet. If a broad audience finds significant value in a product or service which they hear about through their personal community interfaces, the product or service will most probably deliver value either through product sales or site traffic and advertising.
  • Individual skill and contribution are more important than processes and tools
    This seems to contrast heavily with the first point of community and collaboration importance. Process and tools, whether heavy or light weight, create an atmosphere in which teams can collaborate effectively. The agile manifesto itself encompasses the values of effective collaboration. I value individual skill and contribution but delivery comes through community such as the open source community and their derived tools and process.
  • Relationship and trust are more important than security and laws
    Contracts are a basis for relationships and trust. Even if I have to be authenticated to a site such as Wikipedia to edit wiki pages I have entered into a contract. There is a certain level of trust which has been gained by my registration and authentication tokens which allows for less law to be imposed. I do agree that this statement is true but I believe it goes against the first item again.
  • Flexibility and improvement are more important than plans and schedules
    I entirely agree with this statement. The ability to apply agility through continuous improvement is highly important at all levels of being, personal, team and community. Sometimes plans and schedule drive us too far down paths which are detrimental and we must be able to change direction with the least amount of friction possible.

I want to say that I like the idea of developing a set of values to provide a basis for further exploration. I am interested in seeing the future posts from Michael regarding this edge manifesto.

Asymetric Governance

Posted by on 07 Mar 2006 | Tagged as: Software Architecture

Up until a few days ago, I had not heard much about IT governance with the relentless onslaught of SOA into the enterprise. Most of the articles and papers that I did read which were even remotely tackling the issue of governance with SOA were dealing with existing structures and how to fit SOA into them. From dealing with multiple organizations with heavy bureaucratic governance bodies which control only from the perspective of halting progress to a snails pace, I have been wondering how organizations would apply SOA with it‘s real-time dynamics.

Over the past couple of years I have applied smaller footprint governance within small organizations through consulting work. This is not an easy task and usually the plans that I come in with are only halfway, or less, applied to the organization. The problem most of the time is that I do not have the authority needed to apply governance within these organizations as a consultant. I needed champions within these organizations to carry the torch who understand the promise and headaches of governance within an organization.

And when I talk about governance I definitely do not think that governance can be applied at the micro level. Governance is a carefully crafted set of organizational standards which should be attained by the disparate cogs of the company and those components which are relegated to outsourcing. The governance rules should apply value and quality indicators which are to be measured based on metrics and decisions made at all levels of the company. Of course, this is a very simplistic view of governance and reality is much harsher than the green fields of my imagination sometimes. But I can only delve into these water with a shallow reach since this is a blog after all.

So, when I saw this article from The Architecture Journal issue #6 “Taking Governance to the Edge” by Philip Boxer and Richard Veryard I was pleasantly surprised. I have been reading Richard's blog for quite a while now and always find valuable and inciteful information there . I can not do the article justice and therefore I am just going to leave it for you to read. Enjoy!

And also let me know what you think about any particular parts or all of the article in the comments of the blog entry. Thanks.

Contract and SOA Design

Posted by on 07 Mar 2006 | Tagged as: Software Architecture

Ali Pasha has a nice blog entry on “Policy and Contract-first Design” in which he depicts his reasoning for WSDL first design. I tend to agree with Ali on this one. Most of the work that I have seen so far on web services definitely goes into the contract itself and the WSDL is a part of the physical agreement between end points. I believe that WSDL is not enough but organizations usually identify other artifacts such as SLA, regulatory concerns, PKI, and other contract negotiated concerns outside of the WSDL, as well.

Udi Dahan referenced Ali's post and mentioned his disagreement regarding the definition of a contract. Here is an excerpt from Udi's post:

While in the “real world” a contract does indeed represent an agreement between two or more parties, a service's contract is a more “take-it, or leave-it” kind of deal

I disagree with Udi about the “take it, or leave-it” definition of service contracts. I think what he mentions is more about the significance of a consuming party‘s role in the service contract and not the lack of two or more party‘s participation in the contract. A WSDL is not a full contract and I am sure that many a WSDL has been created with little or no usage of the service. In order for a service to exist there must be at least one interested consumer. If the service creators do not take into account what the consumer‘s interests are in the service than the service may have a short lifespan. The consumer will find another service which meets more of their needs. So, even if the contract is somewhat simplistic in nature, there is still a contract between two or more parties.

Mashups, Collaboration by Design

Posted by on 04 Mar 2006 | Tagged as: Software Architecture

There is a breathtaking graph shown by Phillip Boxer at his blog
Asymetric Design embedded in an article called “Interoperability Landscapes”. It is amazing to see the collaboration being conducted between Amazon, Google, and eBay mashups across the web. There is a distinct difference between this collaboration and the silo of Microsoft-based mashups in the diagram.

The Web 2.0 has been defining itself and gaining market share over the past few years. Using the web as a service platform has been the model for many successful companies. As I think about the role of technologies such as Jini, Ruby, and
SOA, I tend to believe they have less to provide in the overall structure than plain old simplicity. Tim O‘Reilly descibes this well in his article “What is Web 2.0” in which he defines the common elements of the successful Web 2.0 stories.

Is there a new language that can be key in this new simple, collaborative, and asymetric world we are being pulled into. It almost seems like software will need new creativity, process, and ultimately collaboratory nature to meet the needs of the Web 2.0.

Next Page »