This is a list of my writing in software and related topics.
See here for my writing about the Intelligence Explosion.
"Documents in the cloud: Dynamic, Privacy-customized views," Cloudbook, 2012.
"Flexible, Dynamic Redaction", MasterDataManagement.com, 2012.
"People Who Live in Glass Houses Should Put Up Some Shades," InfoSecurity, 2011.
"IBM Optim Data Redaction: Reconciling Openness with Privacy," IBM White Paper, 2010-11.
The White Paper for the product which I launched in IBM.
"Clojure: Challenge your Java Assumptions," JavaWorld, May 2009.
The article is aimed at senior Java developers, encouraging them to learn more about this exciting language. A dialect of Lisp, Clojure runs on the JVM with excellent integration with Java, and provides new, improved solutions for the biggest challenge to programming languages today: concurrency.
"Mining for Meaning: Discovering Business Realities in Mainframe Metadata," Mainframe Executive, Sep./Oct. 2008.
To expose siloed mainframe functionality now locked up in siloed systems, it is essential to understand its business value. Automated classification technologies help make this happen.
Architecture is as much about the organization as about technology. This article explains how to divide responsibilities in Service Oriented Integration to let each team do what they do best.
As a consultant for a leading provider of Java-.NET interoperability software, I wrote a white paper evangelizing the company's IBM WebSphere Portal product, showing how it functions as a user-facing on-ramp to SOA.
Exciting news has been coming out about JRuby: Sun hired the two lead developers a beta for Java 6 with built-in scripting API. Sun also announced plans to support dynamic languages on the JVM-level, and the JRuby team announced support for Rails.
The article explain Ruby on Rails to Java developers, comparing it to Java web frameworks. It presents an example based on JavaSpaces, which leverages Java from within the Rails application. Even those Java developers who do not adopt Rails will benefit from the design principles built into the framework, as well as the rapidly emerging concept of non-Java languages integrated with Java and the JVM.
Dynamic languages are rapidly gaining in popularity. Ruby in particular has attracted attention, with a big boost from the Ruby on Rails Web framework. In this article, I introduce Java programmers to Ruby, focusing on the similarities, differences, and connectivity between the two languages, and describing the value of JRuby on the Java-platform. The article got some buzz on the net, including from Frank Sommers at Artima.
A business-focused overview of the value that semantics bring to Service Oriented Architectures.
EAI gives O(n) complexity for connecting n applications on the network, but there remains an O(n2) complexity for integrating the message formats that the applications use as input and output. With an ontology-based approach, however, this too can be reduced to O(n).
Web Services lookup with UDDI requires client and server to agree on the exact syntax of the interaction. Using the principles of ontology, providers can publish and clients can discover Services based on the desired functionality rather than the syntactic details.
I've found that once new Jini developers learn about the exciting distributed architecture, they often get bogged down by the challenge of simply configuring their system for development. They encounter a yet greater challenge in moving from the development configuration to deployment. Even experienced developers can get confused by the variety of components involved.
In the article, I review a number of solutions and explain the advantages of various solutions such as ease of development,ease of migration from development to deployment, low memory and CPU burden, portability, compatibility with RMI Activation, security, and enterprise-class web-app features.
If you're a software development manager with experience leading the development of a three-tier distributed application for the World Wide Web, perhaps you're about to move on to spearhead the construction of a WAP-site. This article has reuse as its theme: I explain when you can reuse skillsets, infrastructure, and software components from the WWW site, and when you're better off developing new skills, buying new infrastructure, or building new software.
The Sun Java Developer Connection reprinted the article, which was linked from the JDC front page for a while.
Sometimes you implement the Singleton Design Pattern, but mysteriously find that more than one object of the class is instantiated. This article explains how that can happen and how to avoid it.
Separating layers of abstraction by packaging a body of one layer in an envelope of another layer is one of the fundamental design principles in data transfer. This principle holds for XML just as for any data transfer format, but implementing a system that observes layer separation can be difficult. This article describes how to do it.
Garbage collecting distributed leases requires mechanisms such as keep-alives, heartbeats, leases, and Are-You-There/I-Hear-You protocols. Interestingly, the keep-alive mechanism built into TCP/IP sockets is not really practical; for this reason and the JDK didn't allow access to Socket Option Keep-Alive until the recent release of JDK 1.3. I explain the problems with SO_KEEPALIVE and how to implement your own garbage collection mechanism for distributed resources.
I describe and review a toolkit for allowing distributed applications to share objects, and more generally discuss the challenges of managing distributed objects. The JSDT was an official product from Sun, although it never made it to the status of a Java extension. It implemented some interesting ideas for distributing objects. I had fun submitting suggestions on improvement and corresponding with the creator, and some of my suggestions (like one on failure detection), actually made it into the toolkit.
Jini and JavaSpaces, also from Sun, which offer with leasing, fully distributed architectures and an emphasis on a dynamic transfer of behavior (classloading) have taken the lead in providing this sort of functionality for distributed objects.