<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-13639021</id><updated>2012-01-28T09:08:08.200-08:00</updated><category term='Service-Oriented'/><category term='guidelines'/><category term='Stratos'/><category term='Macworld'/><category term='vendor lock-in'/><category term='2009'/><category term='Eric Evans'/><category term='Zen'/><category term='enterprise architecture'/><category term='cool features'/><category term='bug'/><category term='Open Standards'/><category term='future computing platform'/><category term='Orderly'/><category term='Sydney'/><category term='SIP'/><category term='intransitive verb'/><category term='Abel Avram'/><category term='Windows'/><category term='Apple'/><category term='loose coupling'/><category term='mobility'/><category term='brokered'/><category term='Spring Roo'/><category term='EJB'/><category term='Nano'/><category term='TCP'/><category term='JAXB'/><category term='reliability'/><category term='portal'/><category term='Mac OS X'/><category term='Kevin Rudd'/><category term='Sun Developer Day'/><category term='synchronous'/><category term='mashup'/><category term='Google Flu Trends'/><category term='SSDL'/><category term='Context Diagram'/><category term='Cloud computing'/><category term='Identity Management'/><category term='service versioning'/><category term='IBM'/><category term='scheme'/><category term='distributed'/><category term='JavaFX Script'/><category term='VMWare'/><category term='uniform interface'/><category term='tipping point'/><category term='SOFEA'/><category term='Distributed Objects'/><category term='Dennis Ritchie'/><category term='flu vaccine'/><category term='definitions'/><category term='Spring Integration'/><category term='NetBeans'/><category term='WSIT'/><category term='SDK'/><category term='OpenSolaris'/><category term='Tomcat'/><category term='pass by value'/><category term='wire protocol'/><category term='Firefox'/><category term='monopoly'/><category term='innovation'/><category term='Eclipse'/><category term='design'/><category term='WSO2 Mashup Server'/><category term='V8'/><category term='SanFrancisco'/><category term='Intel'/><category term='anti-virus'/><category term='evangelism'/><category term='Unix'/><category term='education'/><category term='thesis'/><category term='Microsoft'/><category term='PaaS'/><category term='Domain-Driven Design Quickly'/><category term='LUID'/><category term='vertical schema'/><category term='Daylight Saving Time'/><category term='ECM'/><category term='ESB'/><category term='FST Media'/><category term='music industry'/><category term='messaging'/><category term='Srinath Perera'/><category term='SD Times'/><category term='Warner'/><category term='Resource-Oriented'/><category term='Alfresco'/><category term='UUID'/><category term='Oracle'/><category term='SOA'/><category term='IPSec'/><category term='Gregor Hohpe'/><category term='PDF417'/><category term='WS-BPEL'/><category term='Steve Jobs'/><category term='Node.js'/><category term='Plone'/><category term='peer-to-peer'/><category term='ESC'/><category term='financial services'/><category term='Floyd Marinescu'/><category term='Representation'/><category term='statelessness'/><category term='Ingres'/><category term='Practical SOA for the Solution Architect'/><category term='hoax'/><category term='Process Orchestration'/><category term='services'/><category term='polymorphism'/><category term='DDD'/><category term='JSON'/><category term='Facebook'/><category term='India'/><category term='identifier'/><category term='WS-*'/><category term='Presentation Flow'/><category term='RESTafarian'/><category term='TSA'/><category term='watermark'/><category term='document/literal'/><category term='Y2K'/><category term='GlassFish'/><category term='remote'/><category term='interoperability'/><category term='principles'/><category term='Access Management'/><category term='real-time'/><category term='Jakob Nielsen'/><category term='Jonathan Schwartz'/><category term='Oneiric Ocelot'/><category term='Mark Baker'/><category term='mobile app'/><category term='Google'/><category term='rpc/encoded'/><category term='DFD'/><category term='Open Source'/><category term='databases'/><category term='Object-Oriented'/><category term='Google Chrome'/><category term='JavaDB'/><category term='Joomla'/><category term='LIMA'/><category term='nutshell'/><category term='Linux'/><category term='enterprise integration patterns'/><category term='Sharepoint'/><category term='choreography'/><category term='BPMN'/><category term='Ubuntu'/><category term='Domain Model'/><category term='Aakash'/><category term='Australia Post'/><category term='mediation'/><category term='Viewpoint Flip'/><category term='DNS'/><category term='Metro'/><category term='Object-Oriented thinking'/><category term='document management'/><category term='C'/><category term='pass by reference'/><category term='MQ'/><category term='Content Aggregation'/><category term='Hypermedia constraint'/><category term='JiBX'/><category term='EMS'/><category term='Android Australia User Group'/><category term='Don Gentner'/><category term='Hyperic'/><category term='outsourcing'/><category term='HTTP'/><category term='Openness'/><category term='Australia'/><category term='JavaFX Mobile'/><category term='schools'/><category term='Sri Lanka'/><category term='Yuli Vasiliev'/><category term='Jimmy Nilsson'/><category term='URN'/><category term='AIDS medication'/><category term='BEEP'/><category term='DRM'/><category term='IP'/><category term='HereDo'/><category term='Unified Communications'/><category term='Enterprise Content Management'/><category term='IAM'/><category term='SpringSource'/><category term='review'/><category term='Jersey'/><category term='Servlet 3'/><category term='HatEoAS'/><category term='Domain-Driven Design'/><category term='jQuery'/><category term='Life above the Service Tier'/><category term='hub-and-spokes  REST'/><category term='Sony'/><category term='Resource'/><category term='TopLink'/><category term='Tango'/><category term='local'/><category term='seminar'/><category term='object'/><category term='SOAP/WS-*'/><category term='Telstra'/><category term='federation'/><category term='XML'/><category term='language'/><category term='heavyweight services'/><category term='Developer'/><category term='CRUD'/><category term='cloud'/><category term='Amazon Cloud Drive'/><category term='Representation Composition'/><category term='BPEL'/><category term='Jabber'/><category term='idempotence'/><category term='LDAP'/><category term='batch'/><category term='Drupal'/><category term='android'/><category term='integration'/><category term='CoffeeScript'/><category term='Domain-Driven Design Really Quickly'/><category term='Atlassian'/><category term='data storage'/><category term='Sun Tech Days'/><category term='book review'/><category term='EU'/><category term='Process'/><category term='middleware'/><category term='session state'/><category term='Behaviour'/><category term='Brian Kernighan'/><category term='architecture'/><category term='JavaScript'/><category term='EMI'/><category term='examples'/><category term='DHCP'/><category term='Ubuntu 11.10'/><category term='transitive verb'/><category term='OEM'/><category term='tight coupling'/><category term='entity-relationship diagram'/><category term='State'/><category term='Server-side JavaScript'/><category term='Unity desktop'/><category term='asynchronous'/><category term='workflow'/><category term='endpointware'/><category term='Ken Thompson'/><category term='federated'/><category term='GUID'/><category term='Anti-Mac Interface'/><category term='AJAX'/><category term='procedural thinking'/><category term='directory'/><category term='rebuttal'/><category term='pass-by-value'/><category term='E4X'/><category term='Security'/><category term='RPC'/><category term='SOAP-RPC'/><category term='JavaOne'/><category term='WSO2'/><category term='Amazon Web Services'/><category term='Data Interchange'/><category term='Best Practice'/><category term='WSDL'/><category term='SaaS'/><category term='WSO2 product suite'/><category term='SIMPLE'/><category term='Big Brother'/><category term='procedural'/><category term='Ubuntu 9.04'/><category term='subject'/><category term='Mozilla'/><category term='enterprise'/><category term='browser'/><category term='modelling'/><category term='Grails'/><category term='AMQP'/><category term='EAI'/><category term='Spring'/><category term='Universal'/><category term='SOUI'/><category term='Roy Fielding'/><category term='data centre'/><category term='Data Flow Diagram'/><category term='database'/><category term='TIBCO'/><category term='point-to-point'/><category term='platforms'/><category term='Namespace-Time'/><category term='Internet'/><category term='REST'/><category term='relational'/><category term='Internet banking'/><category term='random'/><category term='Stu Charlton'/><category term='technology stack'/><category term='client-server'/><category term='XMPP'/><category term='Java'/><category term='OO'/><category term='Web 2.0'/><category term='NoSQL'/><category term='English grammar'/><category term='JSON Schema'/><category term='SOAP'/><category term='WSO2Con'/><category term='Redis'/><category term='Sun'/><category term='IaaS'/><category term='Orwell'/><category term='Noun'/><category term='Alexander Galloway'/><category term='San Francisco'/><category term='crisis management'/><category term='2D barcode'/><category term='IE'/><category term='TLS'/><category term='pass-by-reference'/><category term='Enterprise Shared Services'/><category term='Verb'/><category term='Dart'/><category term='Application Download'/><title type='text'>The Wisdom of Ganesh</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default?start-index=101&amp;max-results=100'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>166</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13639021.post-2469573495223063915</id><published>2012-01-28T09:05:00.001-08:00</published><updated>2012-01-28T09:08:08.383-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='SD Times'/><category scheme='http://www.blogger.com/atom/ns#' term='loose coupling'/><title type='text'>Stay Tight on Loose Coupling</title><content type='html'>&lt;div style="text-align: justify;"&gt;My &lt;a href="http://www.sdtimes.com/link/36237"&gt;Guest View&lt;/a&gt; was published on SD Times. This is based on the points covered in the white paper &lt;a href="http://wso2.org/library/whitepapers/2011/10/practical-soa-solution-architect"&gt;Practical SOA for the Solution Architect&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-2469573495223063915?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/2469573495223063915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=2469573495223063915' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2469573495223063915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2469573495223063915'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2012/01/stay-tight-on-loose-coupling.html' title='Stay Tight on Loose Coupling'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-3544785266928398718</id><published>2011-12-12T06:39:00.000-08:00</published><updated>2011-12-17T05:10:42.750-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 product suite'/><category scheme='http://www.blogger.com/atom/ns#' term='cool features'/><category scheme='http://www.blogger.com/atom/ns#' term='innovation'/><title type='text'>Cool Innovations by WSO2</title><content type='html'>&lt;div style="text-align: justify;"&gt;I've long held that the WSO2 suite of middleware products is one of the industry's best-kept secrets. But just what is it that makes these products so special?&lt;br /&gt;&lt;br /&gt;Well, if the mere fact that there exists a functionally comprehensive, 100% Open Source middleware suite isn't remarkable enough, there are plenty of other reasons why IT practitioners should take a good look at WSO2's offerings.&lt;br /&gt;&lt;br /&gt;I have had the opportunity for a few months now to work closely with the company's engineers and play with their products, using them to build (demo) distributed systems, and this is what I have found.&lt;br /&gt;&lt;br /&gt;There is significant innovation here that is really cool. There may be even more that I haven't discovered yet.&lt;br /&gt;&lt;br /&gt;1. OSGi bundles, functionality "features", and the fluid definition of a "product"&lt;br /&gt;&lt;br /&gt;(WSO2 has no rigid products, although their brochures list about 12. The truth is that they have hundreds of capability bundles that can be combined with a common core to create tailored products at will.)&lt;br /&gt;&lt;br /&gt;2. A "Middleware Anywhere" architecture that spans cloud and terrestrial servers&lt;br /&gt;&lt;br /&gt;(When cloud-native features like multi-tenancy and elasticity are baked into the common core of the middleware product suite, there is no need for applications to be written differently for cloud and terrestrial deployments.)&lt;br /&gt;&lt;br /&gt;3. Not just an ESB - the right tool for every job&lt;br /&gt;&lt;br /&gt;(As in my writings on "Practical SOA for the Solution Architect", there are three core technology components required for SOA - the Service Container, the Broker and the Process Coordinator. They do different things and are not mutual substitutes. There are also eight supporting aspects at the technology layer. The ESB, being just the Broker component, cannot do all of these functions. WSO2 has products corresponding to all of them.)&lt;br /&gt;&lt;br /&gt;4. Making a federated ESB an economically viable architecture&lt;br /&gt;&lt;br /&gt;(Economics forces many organisations to deploy their expensive ESB product in a centralised, hub-and-spokes architecture, which leads to a single point of failure and a performance bottleneck. But Brokers are best deployed in a federated manner close to service provider and service consumer endpoints. WSO2's affordable pricing model makes it easy for organisations to do the right thing, architecturally speaking.)&lt;br /&gt;&lt;br /&gt;5. The "Server Role" concept - enabling a logical treatment of SOA topology&lt;br /&gt;&lt;br /&gt;(Architects don't think in terms of products but in terms of functional capability. One would rather earmark an artifact for deployment to a "mainframe proxy" and another to a "customer complaints process node" than to an "ESB" or a "Business Process Server" instance. Tagging both servers and artifacts with a user-defined "Server Role" makes it possible to speak in these convenient abstractions.)&lt;br /&gt;&lt;br /&gt;6. The CAR file as a version snapshot of a working and tested distributed system&lt;br /&gt;&lt;br /&gt;(In distributed systems, upgrading the version of software X can break its interoperability with software Y. That's why version change in distributed systems is such a nightmare involving expensive regression testing and a higher probability of outage after an upgrade. But what if a related set of changes can be tested together, certified as interoperable, labelled as a single version, and deployed to multiple systems through a common mechanism? We've just described the Carbon Archive.)&lt;br /&gt;&lt;br /&gt;7. The CAR file and Carbon Studio as a unifier of diverse developer skillsets&lt;br /&gt;&lt;br /&gt;(Developing distributed systems is challenging from a skills perspective. Writing business logic in Java and exposing it as a web service requires different skills from writing data transformation in XSLT, which is again different from specifying process logic in WS-BPEL. And then there are specialised languages to codify business rules, etc. WSO2 has a single IDE to support all these diverse developer needs - Carbon Studio. It also provides a single package that can hold all these types of artifacts - the Carbon Archive.)&lt;br /&gt;&lt;br /&gt;8. The Admin console and support for configuration over coding&lt;br /&gt;&lt;br /&gt;(Not every artifact needs to be "developed" through code. Every WSO2 server product has an Admin console that looks largely alike, yet tailored to the peculiarities of the artifacts deployed on that server. Following an 80-20 rule, the bulk of the (simple) artifacts that need to be deployed on a server can be created through configuration using the admin console.)&lt;br /&gt;&lt;br /&gt;9. Port offsets and the ability to run multiple servers on the same machine&lt;br /&gt;&lt;br /&gt;(Owing to their common core, all WSO2 server products listen on the same ports - 9763 (HTTP) and 9443 (HTTPS). Obviously, port conflicts will result when attempting to run two servers (or even two instances of the same server product) on a single machine. But with a simple configuration change (a "port offset"), a server can be nudged away from its default port to a non-conflicting one. A port offset of 1 will have a server listening on ports 9764 (HTTP) and 9444 (HTTPS), for example.)&lt;br /&gt;&lt;br /&gt;10. The dark horse - Mashup Server and server-side JavaScript&lt;br /&gt;&lt;br /&gt;(Nodejs has refocused industry attention on server-side JavaScript and the power that brings. But Nodejs has no support for E4X! If you're doing XML manipulation of data from multiple sources, which is what mashups often entail, WSO2's Mashup Server is worth a serious look.)&lt;br /&gt;&lt;br /&gt;11. Carbon Studio - A light-touch IDE for middleware developers&lt;br /&gt;&lt;br /&gt;(The best GUIs are those built on top of non-visual scripting. Every artifact used by the WSO2 development process is text-based, including the build process that relies on Maven. Command-line junkies can coexist peacefully with those who prefer a GUI, because the IDE imposes no additional requirements on developers. It's purely an option, not an obligation. You can even use another IDE like IntelliJ's IDEA with no loss of capability.)&lt;br /&gt;&lt;br /&gt;12. Governance Registry - for control both mundane and subtle&lt;br /&gt;&lt;br /&gt;(Governance or plain management? People often use the former term when they mean the latter. But never mind. Regardless of what you want to do, the WSO2 registry and repository tool is simple, flexible and powerful enough to support you. The registry is embedded inside every server product as well as being a standalone server, so the way one can choose to store and share configuration settings as well as policy files is pleasurably versatile.)&lt;br /&gt;&lt;br /&gt;As these short descriptions hint, there is something unique and innovative about each of the above, and I'm going to write in greater detail about all of them over the next few days. Stay tuned.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-3544785266928398718?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/3544785266928398718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=3544785266928398718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3544785266928398718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3544785266928398718'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/12/cool-innovations-by-wso2.html' title='Cool Innovations by WSO2'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-3456755683986994652</id><published>2011-12-09T02:05:00.000-08:00</published><updated>2011-12-10T03:16:52.006-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IaaS'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='nutshell'/><category scheme='http://www.blogger.com/atom/ns#' term='Cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='SaaS'/><category scheme='http://www.blogger.com/atom/ns#' term='PaaS'/><category scheme='http://www.blogger.com/atom/ns#' term='definitions'/><title type='text'>Nutshell Definitions</title><content type='html'>&lt;div style="text-align: justify;"&gt;When conducting the Practical SOA workshops in different Australian cities last month, I felt the need to explain a few concepts for my audience in very simple and memorable terms. I realised I have already been doing this for myself for a long time. I try and distil a concept into a single word, or at most a short phrase, in order to understand it. This has been very useful to me in evaluating the merits of technologies and comparing them to others. Call these my trade secrets which I'm now sharing with you :-).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;OK, so here are some of my definitions of popular terms, each in a nutshell:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Service-Oriented Architecture (SOA):&lt;/div&gt;&lt;div style="text-align: justify;"&gt;1. In one word, &lt;b&gt;dependencies&lt;/b&gt;. More precisely, the &lt;b&gt;management of dependencies&lt;/b&gt; - making implicit dependencies explicit and eliminating unnecessary dependencies between systems. That's what it's all about.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;2. Alternative definition: &lt;b&gt;Lego-isation of the Enterprise&lt;/b&gt;, i.e., refactoring the various application silos in an enterprise into reusable building blocks based on their core functions.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Middleware:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;That which converts organisational silos into Lego blocks.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Integration:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;This is a tricky one. When you point your browser at a website and the page loads, no one thinks of it as integration. For something to be recognised as "integration", it seems it cannot afford to appear effortless! For this reason, I steer clear of trying to define integration in terms of technology. The best integration is seamless and not seen as such. It's an art that involves dependency management (see the definition of SOA above). Minimalism is a virtue here, and appropriate data design is an unacknowledged part of integration.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Governance, as opposed to plain old Management:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Governance has suddenly become a very fashionable word, and not just in IT. "Corporate governance" is a phrase that is parrotted by commentators when they often mean just management. So what's the difference?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In a nutshell,&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Management is about ensuring adherence to &lt;b&gt;operational parameters&lt;/b&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Governance is about ensuring adherence to &lt;b&gt;policy&lt;/b&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sometimes, an event can be both a Management incident as well as a Governance incident. If an organisation has a policy around risk appetite, for example, and they quantify that as a number, then operational systems can monitor and enforce adherence to that parameter. Breaches of that limit are simultaneously an operational management issue and a governance issue that need to be reported to the appropriate bodies.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Cloud computing as opposed to conventional "terrestrial" computing:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The &lt;b&gt;leasing&lt;/b&gt; of IT capability as opposed to &lt;b&gt;ownership&lt;/b&gt;. "IT capability" is a very loose term, and its nature varies based on the type of cloud (below). Leasing has several benefits as opposed to ownership - no upfront costs, pay-as-you-go scalability that is easy on startup operations, i.e., practically limitless capacity without having to provision it upfront, etc.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Infrastructure as a Service (IaaS):&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Leasing infrastructure (storage, compute power and networking), and owning all applications above it. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Platform as a Service (PaaS):&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Leasing infrastructure as well as some application frameworks and common utilities, and owning all applications above it. The frameworks and utilities make it easier to build the applications above.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div&gt;Software as a Service (SaaS):&lt;/div&gt;&lt;div&gt;Leasing all the application functionality required, and owning nothing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Virtualisation:&lt;/div&gt;&lt;div&gt;Imagine separating your "mind" from your "brain". We assume exactly one mind per brain and vice-versa. But what if you can have multiple minds within a single brain, a kind of benign schizophrenia? Or more eerily, if a mind can span multiple brains and think more powerful thoughts as a result? That's virtualisation - turning a one-to-one relationship between mind and brain into a many-to-many one.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cloud computing as opposed to virtualised servers in "terrestrial" computing:&lt;/div&gt;&lt;div&gt;In virtualisation, you still own the brains. In cloud computing, you lease them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Private cloud:&lt;/div&gt;&lt;div&gt;Leasing brains to yourself to run minds on. This may make sense in certain cases, like with transfer pricing between business units of the same enterprise. But because you haven't rid yourself of the responsibilities of ownership, it may not be as attractive as a public cloud. Nevertheless, it's attractive because sometimes legislation prevents minds from running on strange brains, and you may yourself be testing the concept of mind-brain separation before trusting someone else's brains with the sensitive job of running (and therefore knowing) your minds.&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-3456755683986994652?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/3456755683986994652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=3456755683986994652' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3456755683986994652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3456755683986994652'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/12/nutshell-definitions.html' title='Nutshell Definitions'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6671776673298214670</id><published>2011-12-04T00:25:00.000-08:00</published><updated>2011-12-04T01:04:56.897-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><title type='text'>Building RESTful applications using the WSO2 platform</title><content type='html'>&lt;div style="text-align: justify;"&gt;Someone taking a casual look at the WSO2 middleware platform might be forgiven for thinking this is exclusively about SOAP and WS-*. But there is in fact strong support for building RESTful applications with this platform using the JAX-RS framework library, and Prabath Siriwardena (one of WSO2's experts on Identity Management) &lt;a href="http://blog.facilelogin.com/2011/12/creating-restful-apis-using-wso2.html"&gt;has blogged about the recommended component architecture to achieve this&lt;/a&gt;. There is also a &lt;a href="http://wso2.com/events/workshops/2011-december-palo-alto-restful-apis-workshop/"&gt;WSO2 workshop on this topic&lt;/a&gt; conducted by Asanka Abeysinghe, who has many years of experience on the customer side of the fence and understands both the vendor (technology) and customer perspectives. This workshop is on Dec 8th and should be worth attending for people living close to Palo Alto.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;An interesting sidelight: In &lt;a href="http://wso2.org/library/whitepapers/2011/10/practical-soa-solution-architect"&gt;Practical SOA for the Solution Architect&lt;/a&gt;, I re-introduce the practitioner to SOA principles by talking about three core technology components - the Service Container, the Broker and the Process Coordinator. According to this view of SOA, a service can be exposed through any of these components and a service consumer will be none the wiser as to the nature of its implementation. In other words, the Practical SOA approach does not make any prescriptions about which component should be the consumer-facing one. All of them are equally valid candidates, and the only criterion for choosing one over the other is the nature of the service enablement mechanism (bespoke, brokered or orchestrated).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In Prabath's architecture diagram below, the reader will notice that runtime clients must all consume services through the ESB (the Broker), even though these services are hosted on the App Server (the Service Container). Why can't services be exposed directly from the App Server where they are hosted? &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-wPfCFLcCoiw/Ttsy7MdaPlI/AAAAAAAADO0/wyVrb3dggw4/s1600/RESTful%2BAPI.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 375px;" src="http://4.bp.blogspot.com/-wPfCFLcCoiw/Ttsy7MdaPlI/AAAAAAAADO0/wyVrb3dggw4/s400/RESTful%2BAPI.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5682191347396263506" /&gt;&lt;/a&gt;Prabath explains that using a Broker (ESB) instance as the front-end for services is recommended practice because the ESB can provide security features like authentication and authorisation, as well as throttling capabilities to guard against Denial of Service (DoS) attacks.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;So in the real world, we may often need to front-end Service Containers and Process Coordinators with an instance of the Broker that is dedicated to providing these security and traffic shaping features. This could (and should!) be a different instance of the Broker from those used to mediate access to backend systems. Such an architecture will work well because ESBs are better deployed in a federated topology than in a centralised hub-and-spokes fashion. [The unnatural hub-and-spokes topology for ESB deployment, which the high cost of most commercial ESBs forces on customer organisations, then results in a performance bottleneck and a single point of failure. Fortunately, the more favourable economics of WSO2's Commercial Open Source model makes it feasible for customer organisations to implement a more flexible federated architecture for the ESB.]&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6671776673298214670?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6671776673298214670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6671776673298214670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6671776673298214670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6671776673298214670'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/12/building-restful-applications-using.html' title='Building RESTful applications using the WSO2 platform'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-wPfCFLcCoiw/Ttsy7MdaPlI/AAAAAAAADO0/wyVrb3dggw4/s72-c/RESTful%2BAPI.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-8558138349376885717</id><published>2011-11-29T01:20:00.000-08:00</published><updated>2011-11-29T02:23:00.583-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Amazon Cloud Drive'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2'/><category scheme='http://www.blogger.com/atom/ns#' term='IaaS'/><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><category scheme='http://www.blogger.com/atom/ns#' term='Cloud computing'/><category scheme='http://www.blogger.com/atom/ns#' term='SaaS'/><category scheme='http://www.blogger.com/atom/ns#' term='PaaS'/><title type='text'>PaaS by Lineage</title><content type='html'>&lt;div style="text-align: justify;"&gt;If you've ever wondered about what "Platform as a Service" (PaaS) really means, then you may find this analysis of mine useful.&lt;br /&gt;&lt;br /&gt;The traditional &lt;a href="http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf"&gt;NIST model of Cloud Computing&lt;/a&gt; shows three layers from a consumer's perspective:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-H7-P4movVrA/TtSkwUN7YII/AAAAAAAADOc/xMSbJE0DF7c/s1600/ess-cloud-fig-1-nist-model.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 271px;" src="http://3.bp.blogspot.com/-H7-P4movVrA/TtSkwUN7YII/AAAAAAAADOc/xMSbJE0DF7c/s400/ess-cloud-fig-1-nist-model.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5680346179988840578" /&gt;&lt;/a&gt;Infrastructure as a Service refers to (shared and scalable) infrastructural capabilities such as compute power, storage and networking, as provided by a cloud vendor. The attributes "shared" (or "multi-tenanted") and "scalable" (or "elastic") distinguish cloud solutions from "terrestrial" alternatives. Amazon's EC2 (Elastic Compute Cloud) and S3 (Simple Storage Service) are examples of IaaS.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Software as a Service refers to applications that you don't have to install on your own computers but can consume through your browser. For an individual, Gmail is the best example of SaaS, while companies can relate to SalesForce.com.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;But PaaS has always been a bit of a mystery. What is a "platform", exactly? This is a rather nebulous (pardon the cloudy adjective) area between IaaS and SaaS, and appears to be defined by what the other two are not. The market segment is also still in flux and yet to mature, and there are many players here, each staking out a piece of turf and attempting to define the segment to its own advantage.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I have a high-level, vendor-neutral view of this. [Disclosure: I'm currently working for one of the PaaS vendors, WSO2.]&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;My preferred categorisation of the PaaS landscape is by lineage. In other words, where did the various PaaS offerings &lt;i&gt;evolve&lt;/i&gt; from? I think this is a useful way to look at PaaS because it indicates the traditional strengths of a vendor and therefore where their PaaS offering is likely to be stronger than its competitors. Potential consumers who are looking for a particular emphasis in their PaaS solution will know which vendors are likely to meet their requirements better.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;In short, I think PaaS offerings have evolved from one of three directions.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;IaaS vendors like VMWare (with their vCloud IaaS) have added DevOps capability to their traditional strength and are targeting organisations that want to develop and run generic applications on the cloud. Their version of PaaS is CloudFoundry.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;SaaS vendors like SalesForce.com have made their application more generic and supportive of customisation. Organisations that want to build employee-oriented applications can do so through configuration rather than coding. Their version of PaaS, which is more oriented towards a vertical segment (employee-oriented applications), is called Force.com.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A third direction from which PaaS has evolved is from traditional "terrestrial" middleware (also known as Integration or SOA products). WSO2, which has a full stack of SOA middleware products collectively referred to as Carbon, has added cloud-native features (multi-tenancy, elasticity, etc.) to its suite of products to turn them into yet another version of horizontal PaaS called Stratos. Their DevOps tools have also been upgraded to be able to deploy applications to the cloud just like they do to terrestrial servers.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The diagram below that loosely follows the NIST layering, illustrates my analysis. There may be more versions of PaaS depending on where a vendor has traditionally been based, and I will update this model as more such examples appear.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-ApcfzVsGL-g/TtSsnYMg0GI/AAAAAAAADOo/61LBYS5u0Do/s1600/PaaS%2Bevolution%2Bv0_1.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 331px;" src="http://4.bp.blogspot.com/-ApcfzVsGL-g/TtSsnYMg0GI/AAAAAAAADOo/61LBYS5u0Do/s400/PaaS%2Bevolution%2Bv0_1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5680354822530846818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-8558138349376885717?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/8558138349376885717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=8558138349376885717' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/8558138349376885717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/8558138349376885717'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/11/paas-by-lineage.html' title='PaaS by Lineage'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-H7-P4movVrA/TtSkwUN7YII/AAAAAAAADOc/xMSbJE0DF7c/s72-c/ess-cloud-fig-1-nist-model.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-3377252842808165898</id><published>2011-11-25T05:22:00.000-08:00</published><updated>2011-11-26T04:46:55.268-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2'/><category scheme='http://www.blogger.com/atom/ns#' term='Practical SOA for the Solution Architect'/><title type='text'>Glamorous Tech and Workhorse Tech</title><content type='html'>&lt;div style="text-align: justify;"&gt;IT people are biased towards the new, the cool and the "sexy". Perhaps Node.js and Cloud Computing fall into this category.  Glamorous technology is very attractive, because it promises to be "the next big thing", but it's usually not usable today. Like Benjamin Franklin's proverbial new-born baby, it's full of potential, but does nothing for us in the here and now.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;Contrast this with "workhorse technology", which is mature and relatively boring, and used to build working real-world systems that make or save money today. Not many people get excited about workhorse technology, but the majority of them work with it anyway, because it pays the bills.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I want to talk about one particular category of workhorse technology that I'm discovering can be quite glamorous as well. I have gradually become more familiar with this over the last few months of working with WSO2, writing the "Practical SOA for the Solution Architect" &lt;a href="http://wso2.org/library/whitepapers/2011/10/practical-soa-solution-architect"&gt;white paper&lt;/a&gt;, conducting &lt;a href="http://wso2.org/premium/webinars/practical-soa-for-the-solution-architect"&gt;a webinar&lt;/a&gt; and then hitting the road to conduct workshops in three Australian cities. I've realised that the combination of a lightweight SOA methodology in combination with a lightweight SOA product suite can be a very effective workhorse technology that is usable today and saves real dollars. In addition, it's actually pretty cool because of how quickly and easily it can help practitioners integrate diverse and distributed systems into an end-to-end business solution.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In a nutshell, in the white paper, webinar and workshops, I evangelise the message that SOA is not an esoteric and complex black art but simple commonsense that can be readily applied. I talk about the technology layer of SOA, of course, but also cover the equally important data layer that is often neglected and that contributes to the "tight coupling" that plagues so many solution designs and prevents them from realising the benefits of SOA. I talk about three core technology components to use (the Service Container, the Broker and the Process Coordinator) and when to use them, the inefficiencies that result from using the wrong tool for the job, and the dangers of treating the Broker as a singleton, centralised component and deploying it in a hub-and-spokes architecture rather than a federated one. I also cover four simple Data layer principles (make implicit dependencies explicit, remove unnecessary dependencies, loosely couple internal domain data with externally-visible message data, and settle on an intermediate granularity for domain data model(s) rather than a single overarching Canonical Data Model for the entire enterprise).&lt;br /&gt;&lt;br /&gt;To drive home these concepts, we work through the real-world example of a well-known banking process, i.e., opening an account. Using the lightweight Practical SOA methodology, participants are encouraged to try their hand at producing an outline solution design to a described requirement in about 15 minutes, using a few standard Lego-style components from the SOA technology layer. Then we demonstrate how that solution design can actually be implemented, substituting each of the conceptual Lego blocks with an actual platform product that hosts the corresponding logic, and get the entire system to work.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Here's a view of the conceptual building blocks that form the outline solution design, once the lightweight SOA methodology is applied to the business problem:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-hiB_7KNZytU/Ts-aGCW5X2I/AAAAAAAADOE/KQNBZcG5OhU/s1600/Banking%2Bsolution%2B-%2Bconceptual.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 283px;" src="http://3.bp.blogspot.com/-hiB_7KNZytU/Ts-aGCW5X2I/AAAAAAAADOE/KQNBZcG5OhU/s400/Banking%2Bsolution%2B-%2Bconceptual.png" alt="" id="BLOGGER_PHOTO_ID_5678927083640282978" border="0" /&gt;&lt;/a&gt;In the next step, the conceptual components are replaced by actual WSO2 SOA products that perform each of those functions, and the physical version of the above diagram looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-yFQfaqMXY4k/Ts-ZTdhNC8I/AAAAAAAADN0/aJvWgQEQye4/s1600/Banking%2Bsolution%2B-%2Bphysical.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 144px;" src="http://4.bp.blogspot.com/-yFQfaqMXY4k/Ts-ZTdhNC8I/AAAAAAAADN0/aJvWgQEQye4/s400/Banking%2Bsolution%2B-%2Bphysical.png" alt="" id="BLOGGER_PHOTO_ID_5678926214757944258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The Customer Master Database, the Mainframe and the Card System are all mock objects. A Data Services Server exposes the Customer Master as a set of CRUD services. A Broker (ESB) component exposes the mainframe as a set of Account services, and a second Broker exposes the Card System as a set of Card Services. Since the mainframe can usually only be accessed over IBM MQ in real-life, we simulate that through a JMS connection over ActiveMQ. A Process Coordinator (Business Process Server) coordinates all these services into a BPEL process that performs the account opening business function.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;It was gratifying to see that participants at all the workshops we conducted were visibly impressed by this demonstration. In the space of 45 minutes, we had moved from a problem, through a conceptual solution design, to a working implementation. And since we had their active participation through the design exercise, they had an emotional investment in the solution and were able to appreciate it all the more. [To be fair, the demo was developed earlier over 6 person-days of effort, and in the workshop, we stepped quickly through the development by copying code that was written earlier.]&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Traditional SOA vendors and the big-name analysts have done the industry a disservice by complicating SOA and scaring off practitioners. In our workshops, we've shown that SOA is just commonsense and relies on just a few simple principles that practitioners can readily apply. Once they know the right tools to use in the solution, it's a simple matter to gather those required components and hook them together to create the end-to-end solution.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;This is obviously workhorse technology, because it's mature enough to solve bread-and-butter business problems today. But the lightweight methodology and product suite also make it glamorous.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I hope this attracts more practitioners towards the practice of lightweight SOA and the use of simple and cost-effective products like the &lt;a href="http://wso2.com/products/"&gt;WSO2 product suite&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-3377252842808165898?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/3377252842808165898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=3377252842808165898' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3377252842808165898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3377252842808165898'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/11/glamorous-tech-and-workhorse-tech.html' title='Glamorous Tech and Workhorse Tech'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-hiB_7KNZytU/Ts-aGCW5X2I/AAAAAAAADOE/KQNBZcG5OhU/s72-c/Banking%2Bsolution%2B-%2Bconceptual.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-7451192559567562957</id><published>2011-11-18T20:09:00.000-08:00</published><updated>2011-11-18T20:24:12.669-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Enterprise Shared Services'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2'/><category scheme='http://www.blogger.com/atom/ns#' term='SaaS'/><category scheme='http://www.blogger.com/atom/ns#' term='PaaS'/><category scheme='http://www.blogger.com/atom/ns#' term='Stratos'/><title type='text'>Enterprise Shared Services and the Cloud</title><content type='html'>&lt;div style="text-align: justify;"&gt;I've worked in the area of Enterprise Shared Services (or Enterprise Utilities) for many years, so when InfoQ approached me asking if I would be interested in writing an article on cloud computing, this was one of the angles I thought of. Of course, I'm also working with WSO2 at present, and WSO2 has a distinct type of PaaS (Platform as a Service) offering called &lt;a href="http://wso2.com/cloud/stratos/"&gt;Stratos&lt;/a&gt;. &lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);" class="" style="display: block;" id="formatbar_CreateLink" title="Link"&gt;&lt;img src="http://www.blogger.com/img/blank.gif" alt="Link" class="gl_link" border="0" /&gt;&lt;/span&gt;&lt;/span&gt;PaaS usually either evolves up from IaaS (Infrastructure as a Service) with the addition of support for DevOps (the development-operations continuum) or evolves down from SaaS (Software as a Service) with the addition of customisation support for the software application. Stratos is unique because it has evolved "sideways" from enterprise middleware with the addition of cloud-native features. The &lt;a href="http://wso2.com/products/platforms/"&gt;12 SOA products of WSO2&lt;/a&gt; are all available as cloud-native middleware on the Stratos PaaS.&lt;br /&gt;&lt;br /&gt;In any case, since InfoQ wanted vendor-neutral content, I couldn't write about Stratos (which I &lt;span style="font-style: italic;"&gt;will &lt;/span&gt;write about in some context because I find it fascinating). So I fell back to my old favourite - Enterprise Shared Services.&lt;br /&gt;&lt;br /&gt;The long and short of it is that when we factor in Enterprise Shared Services, the old monikers of SaaS and PaaS are no longer enough. We have to deal with "vertical" and "horizontal" variants of these, and the distinction is important because in an organisational context, they have unique characteristics around how they are requisitioned, evaluated for feasibility, funded and charged back.&lt;br /&gt;&lt;br /&gt;I'll let you read about it &lt;a href="http://www.infoq.com/articles/shared-services-cloud"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-7451192559567562957?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/7451192559567562957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=7451192559567562957' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/7451192559567562957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/7451192559567562957'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/11/enterprise-shared-services-and-cloud.html' title='Enterprise Shared Services and the Cloud'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-5018441639290138374</id><published>2011-10-28T16:59:00.000-07:00</published><updated>2011-11-04T18:38:49.040-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='databases'/><category scheme='http://www.blogger.com/atom/ns#' term='data storage'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2'/><category scheme='http://www.blogger.com/atom/ns#' term='Srinath Perera'/><category scheme='http://www.blogger.com/atom/ns#' term='NoSQL'/><title type='text'>A Good Primer on NoSQL</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;NoSQL databases are all the rage, but the array of choices before us is bewildering. I must confess I'm still confused about the features and differences between &lt;a href="http://en.wikipedia.org/wiki/BigTable"&gt;BigTable&lt;/a&gt;, &lt;a href="http://code.google.com/appengine/docs/python/datastore/overview.html"&gt;GAE DataStore&lt;/a&gt;, &lt;a href="http://www.springsource.org/spring-gemfire"&gt;GemFire&lt;/a&gt;, &lt;a href="http://aws.amazon.com/simpledb/"&gt;SimpleDB&lt;/a&gt;, &lt;a href="http://communities.vmware.com/community/vmtn/appplatform/vfabric_sqlfire"&gt;SQLFire&lt;/a&gt;, &lt;a href="http://couchdb.apache.org/"&gt;CouchDB&lt;/a&gt;, &lt;a href="http://www.mongodb.org/"&gt;MongoDB&lt;/a&gt;, &lt;a href="http://bit.ly/9GjQ8k"&gt;RavenDB&lt;/a&gt;, &lt;a href="http://redis.io/"&gt;Redis&lt;/a&gt;, &lt;a href="http://cassandra.apache.org/"&gt;Cassandra&lt;/a&gt;, &lt;a href="http://basho.com/products/riak-overview/"&gt;Riak&lt;/a&gt;, &lt;a href="http://hbase.apache.org/"&gt;HBase&lt;/a&gt;, &lt;a href="http://neo4j.org/"&gt;Neo4j&lt;/a&gt; and so many other names that I have only recently begun to hear about. I'm sure many others would be in the same situation.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I was therefore happy to see that my colleague at &lt;a href="http://wso2.com/"&gt;WSO2&lt;/a&gt;, &lt;a href="http://wso2.com/about/team/srinath-perera/"&gt;Dr Srinath Perera&lt;/a&gt;, has analysed the NoSQL landscape in depth, zeroed in on the characteristics of NoSQL databases that are relevant, and summarised this for our common understanding in &lt;a href="http://www.infoq.com/articles/perera-data-storage-haystack"&gt;an InfoQ article&lt;/a&gt; that provides a simple overview of the choices that designers and developers have today, choices that go beyond the traditional relational databases that we're familiar with.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I've often wondered about why NoSQL should be so popular in the first place. Srinath explains:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;blockquote&gt;A few years ago, most systems were small and relational databases could handle [their requirements] without any trouble. Therefore, the storage choices for architects and programmers were simple. However, the size and scale of these systems have grown significantly over the last few years. High tech companies like Amazon and Google faced the challenge of scale  before others. They soon observed that relational databases could  not scale to handle those use cases.&lt;/blockquote&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In other words, this demanding new requirements wave has probably not hit most of us yet, but with the jump in the number of connected devices (smartphones, tablets and the coming "&lt;a href="http://en.wikipedia.org/wiki/Internet_of_Things"&gt;Internet of Things&lt;/a&gt;"), applications dealing with huge volumes of data are probably not going to be as rare as in the past. And when we say "huge", we're not even talking Gigabytes anymore. It's Terabytes and larger. As we learnt from Godzilla, size does matter. And drastic situations call for drastic measures, hence the NoSQL revolution.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Srinath refers to &lt;a href="http://en.wikipedia.org/wiki/CAP_theorem"&gt;Eric Brewer's CAP theorem&lt;/a&gt;, which states that a distributed system can only have two of the three properties - Consistency, Availability, and Partition Tolerance. The NoSQL databases aim to break through the limitations imposed on traditional relational databases by loosening the fundamental principles on which these have been based, dropping one or more constraints as appropriate, to obtain a desired behaviour.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Depending on the constraints dropped, the resulting solution falls into one of several new categories:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;Local memory&lt;/li&gt;&lt;li&gt;Distributed cache&lt;/li&gt;&lt;li&gt;Column Family Storage&lt;/li&gt;&lt;li&gt;Document storage&lt;/li&gt;&lt;li&gt;Name-value pairs&lt;/li&gt;&lt;li&gt;Graph DB&lt;/li&gt;&lt;li&gt;Service Registry&lt;/li&gt;&lt;li&gt;Tuple Space&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;...in addition to the traditional filesystems, relational databases and message queues that are familiar to IT practitioners today.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify; "&gt;Perhaps the most important contribution of Srinath's article is his distilling of the four primary characteristics that are important &lt;i&gt;from a usage point of view&lt;/i&gt; - data structure, the level of scalability required, the nature of data retrieval and the level of consistency required. He then puts these characteristics together in various combinations to show which of the above-listed categories of data store would be the most appropriate solution to use.&lt;/div&gt;&lt;div style="text-align: justify; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify; "&gt;He's certainly succeeded in demystifying NoSQL for me, although I suspect I'll need to go back and read the article a few times till I've fully internalised the concepts in it. This is an overview article that I'd recommend to anyone trying to make sense of NoSQL and wanting to decide on the appropriate product category that would be right for their needs.&lt;/div&gt;&lt;div style="text-align: justify; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify; "&gt;I can see the demand for a follow-up article from Srinath drilling down into each of these data storage categories and providing recommendations about actual &lt;i&gt;products&lt;/i&gt; (e.g., Cassandra, Redis, CouchDB, etc.) While the sands shift more rapidly in the product space, it's also a more practically urgent decision for a developer or architect to make. So while such an article might need to be updated quite frequently, the advice in it would be more practical than this one, which provides the necessary initial understanding of the NoSQL landscape.&lt;/div&gt;&lt;div style="text-align: justify; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-5018441639290138374?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/5018441639290138374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=5018441639290138374' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/5018441639290138374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/5018441639290138374'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/10/good-primer-on-nosql.html' title='A Good Primer on NoSQL'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-7670306201335147045</id><published>2011-10-19T03:08:00.001-07:00</published><updated>2011-10-19T04:52:49.478-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mozilla'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Strange Creature on the Mozilla Firefox Download Page</title><content type='html'>&lt;div style="text-align: justify;"&gt;I've never seen this creature before (circled in red). Do you know who or what it is? It looks friendly enough, but it also reminds me of the &lt;a href="http://en.wikipedia.org/wiki/Morlock"&gt;Morlocks&lt;/a&gt; in H.G. Wells's &lt;a href="http://en.wikipedia.org/wiki/The_Time_Machine"&gt;The Time Machine&lt;/a&gt; (shudder).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-KHwmks2vgLw/Tp6iC11xvOI/AAAAAAAADJY/Ob1oViqaT_o/s1600/firefox-screenshot.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 308px;" src="http://1.bp.blogspot.com/-KHwmks2vgLw/Tp6iC11xvOI/AAAAAAAADJY/Ob1oViqaT_o/s400/firefox-screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5665143550974737634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-7670306201335147045?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/7670306201335147045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=7670306201335147045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/7670306201335147045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/7670306201335147045'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/10/strange-creature-on-mozilla-firefox.html' title='Strange Creature on the Mozilla Firefox Download Page'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-KHwmks2vgLw/Tp6iC11xvOI/AAAAAAAADJY/Ob1oViqaT_o/s72-c/firefox-screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-4721037558587488747</id><published>2011-10-18T16:31:00.000-07:00</published><updated>2011-10-18T16:40:30.969-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hypermedia constraint'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='HatEoAS'/><title type='text'>I Hate HatEoAS</title><content type='html'>&lt;div style="text-align: justify;"&gt;For something that's supposed to be THE defining characteristic of REST, it could have done with better naming.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I would have been happy with the term HatEoAS if it had stood for "Hypermedia as the &lt;i&gt;Envelope&lt;/i&gt; of Application State" rather than "Hypermedia as the &lt;i&gt;Engine&lt;/i&gt; of Application State".&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;An Engine actively &lt;i&gt;drives&lt;/i&gt; things. E.g., A process engine is well named, because it drives a process.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A constraint doesn't drive anything. It &lt;i&gt;constrains&lt;/i&gt;. It provides an &lt;i&gt;envelope&lt;/i&gt; around the range of possibilities.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;And so they really should have called this an envelope rather than an engine of application state.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;There, I've said it. Because the expansion of HatEoAS has been driving &lt;i&gt;me&lt;/i&gt; up the wall.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify; "&gt;Fortunately, it's being referred to as "Hypermedia Constraint" now, which is both more elegant and more accurate.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-4721037558587488747?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/4721037558587488747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=4721037558587488747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4721037558587488747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4721037558587488747'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/10/i-hate-hateoas.html' title='I Hate HatEoAS'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-602676189097837020</id><published>2011-10-16T09:29:00.000-07:00</published><updated>2011-10-16T10:17:59.126-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oneiric Ocelot'/><category scheme='http://www.blogger.com/atom/ns#' term='Unity desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu 11.10'/><title type='text'>Oneiric Ocelot Not Quite the Stuff of Dreams</title><content type='html'>&lt;div style="text-align: justify;"&gt;One of the nicest things about Linux distributions like Ubuntu is that you don't have to spend the night standing in a queue just to get the latest version of an operating system on the day of its release.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-uoXSdW_FqY4/TpsIMzQBVuI/AAAAAAAADJE/jeeUw2AIpfM/s1600/apple-store-queue.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/-uoXSdW_FqY4/TpsIMzQBVuI/AAAAAAAADJE/jeeUw2AIpfM/s400/apple-store-queue.jpg" alt="" id="BLOGGER_PHOTO_ID_5664129972357388002" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Unlike some other (closed) systems where supply is deliberately constrained&lt;br /&gt;to create an impression of even greater demand, Ubuntu is upfront and&lt;br /&gt;relaxed about new versions.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I sat down at my Linux desktop yesterday and was pleasantly surprised to see a popup informing me that the next version of Ubuntu Linux (version 11.10 a.k.a. "Oneiric Ocelot") was now available and would I like to upgrade?&lt;br /&gt;&lt;br /&gt;With a smile of anticipation, I clicked Yes, and the upgrade began. My ADSL link showed a steady bandwidth of around 400 kBps throughout. An uneventful hour and a half later, I rebooted into Oneiric Ocelot. That was the kind of experience I've got used to with Ubuntu over so many online upgrades.&lt;br /&gt;&lt;br /&gt;Most of the time, upgrades to Ubuntu are boringly anticlimactic. That's a good thing, by the way, because users hate surprises, and there are really very few nice surprises possible on an upgrade.&lt;br /&gt;&lt;br /&gt;The dictionary says "oneiric" means "pertaining to dreams", but there was something almost nightmarish with this upgrade that was even worse than the upgrade to 11.04 ("Natty Narwhal").&lt;br /&gt;&lt;br /&gt;Someone at Canonical has taken it into their head that a completely re-imagined user interface would be a good thing. The same someone has also arrogantly assumed that there's no need to give users a choice when changing a fundamental aspect of the user interface that they will use all the time.&lt;br /&gt;&lt;br /&gt;My unpleasant surprise after both upgrades was the horror they call the Unity Desktop. I tried to be fair to them. I believe I gave Unity an hour of my time both times. In the end, I gave up. I just hated it. Sorry Canonical, I recognise you're trying, but Unity really doesn't work for me. From the number of similar comments I read on the web, I'm hardly alone.&lt;br /&gt;&lt;br /&gt;What was far worse than installing Unity by default (without asking me if I wanted it) was not providing me a quick way to get back to the default Gnome desktop of earlier versions. I was actually forced to download the Gnome desktop, then re-login to select it as my default desktop.&lt;br /&gt;&lt;br /&gt;1. Why didn't I have the choice to say no to Unity at the time of the upgrade?&lt;br /&gt;2. Why wasn't it a straightforward option to return to the "classic" desktop?&lt;br /&gt;&lt;br /&gt;For a distribution that is supposed to be the friendliest desktop Linux, this is very poor showing indeed.&lt;br /&gt;&lt;br /&gt;My other major whinges are that the "Show desktop" button on the taskbar has disappeared, as has the "System" menu on the menu bar. I now have to minimise every window manually, and have no way to set several preferences. Cosmetically as well, the taskbar at the bottom and the menu bar at the top now sport a ghastly dark grey colour, and the desktop theme that I used to use has disappeared from the list of options. Since I've forgotten what it was called, I don't think I can get it back.&lt;br /&gt;&lt;br /&gt;This upgrade experience has been anything but oneiric. I feel like I've been mauled by an ocelot.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-602676189097837020?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/602676189097837020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=602676189097837020' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/602676189097837020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/602676189097837020'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/10/oneiric-ocelot-not-quite-stuff-of.html' title='Oneiric Ocelot Not Quite the Stuff of Dreams'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-uoXSdW_FqY4/TpsIMzQBVuI/AAAAAAAADJE/jeeUw2AIpfM/s72-c/apple-store-queue.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6163864234828478901</id><published>2011-10-14T05:06:00.000-07:00</published><updated>2011-10-16T00:30:51.282-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2'/><category scheme='http://www.blogger.com/atom/ns#' term='Practical SOA for the Solution Architect'/><title type='text'>Practical SOA for the Solution Architect</title><content type='html'>&lt;div style="text-align: justify;"&gt;This is a story that has had a fairly long history, so stay with me till the end.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I've worked as an architect in the shared services space for almost a decade now, at some of Australia's biggest, richest and technologically diverse financial services organisations. During that time, I first heard about Service-Oriented Architecture (SOA), learnt what it was about, bought into its philosophy and attempted to implement it at work.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;And while I have seen a few successful examples of SOA projects (mostly individual services, truth be told), by and large, I did not see SOA having an impact at all at these large and reputed organisations. Many hundreds of thousands of dollars were spent on acquiring SOA tools from vendors as reputed as IBM and TIBCO, and many millions more were spent on integration projects using these tools, but somehow, the results failed to live up to the SOA promise. [I guess organisations need a terrorising CEO like Amazon's Jeff Bezos to achieve the benefits of SOA. Read &lt;a href="http://news.ycombinator.com/item?id=3101876"&gt;the fascinating story&lt;/a&gt; of how an online bookstore built a platform that it now rents out to others.]&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;For a while, I lost faith. Influenced by a few cynical colleagues, I too began to think SOA was marketing hype and nothing more. But then, as I continued to work in the shared services domain and had the opportunity to review more solution designs, I had an epiphany. Most of the designs I was seeing used SOA products (usually an ESB) or were implemented as Web Services, yet I could see they were still tightly-coupled at the level of the application design, i.e., the data. Also, it was very common for solution designers to use the wrong tool for the job, simply because it was the one they were most familiar with. They even seemed to lack a conceptual ability to tell which tool would be right for a given requirement.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;With that epiphany, I revisited my understanding of SOA. I realised that solution architects needed to be educated to produce SOA-compliant &lt;i&gt;application designs&lt;/i&gt;, otherwise all the investment made by their organisations in SOA tool suites would be a waste. Worse still, SOA itself would be unfairly blamed for the waste of resources, when it in fact remains the best hope to &lt;i&gt;reduce&lt;/i&gt; waste, improve business agility and reduce operational risk.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I've been tossing this idea around in my head for at least a couple of years now, the idea that a lightweight method is required to get solution architects up to speed with the required concepts quickly. Unfortunately, most solution architects would bristle if it was suggested to them that they don't really understand SOA. "Can't you see we're using an ESB?" would be the defensive response. That the response is a &lt;i&gt;non sequitur&lt;/i&gt; would be lost on them. One can use an ESB and still come up with a design that is not SOA-compliant. &lt;i&gt;&lt;b&gt;How can we educate solution architects when they don't know what they don't know?&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Fortuitously, I had a chat about this in August this year with Sanjiva Weerawarana, the CEO of the innovative Open Source middleware company, &lt;a href="http://wso2.com/"&gt;WSO2&lt;/a&gt;. Our needs meshed perfectly. WSO2 has &lt;a href="http://wso2.com/products/"&gt;a full suite of middleware products&lt;/a&gt; based on SOA concepts and Web Service standards. They are compact and not bloated, fairly straightforward to install and use, fully Open Source under the Apache Software Licence, and for which WSO2 offers a very attractively priced support model as well as other professional services. For such an innovative range of value-for-money products, the level of awareness in the customer community has been surprisingly low. Sanjiva has been trying to raise the level of awareness in the industry about his company's products for some time now. For too long WSO2's pitch had been aimed at developers (techies talking to techies), but for a real breakthrough, they needed to target decision-makers and decision-influencers. They were looking for a way to reach the solution architect with a compelling message.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;And here I was, trying to educate the same solution architect about SOA using a new, lightweight approach. So Sanjiva and I came to an understanding. I would do a paid consulting assignment with WSO2 for a few months and turn out a few white papers to present their offerings to an audience that was higher up the corporate food chain than the developers. In return (in addition to helping me pay the bills), they would provide me a vehicle to popularise some of my ideas on SOA, especially the lightweight methodology I came to call "Practical SOA". I guess this approach is the good cop to Jeff Bezos's bad cop :-).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The first of those white papers ("Practical SOA for the Solution Architect") has now been completed and &lt;a href="http://wso2.org/library/whitepapers/2011/10/practical-soa-solution-architect"&gt;is available on WSO2's website&lt;/a&gt;. &lt;i style="font-weight: bold; "&gt;It's my audacious hope that a Solution Architect can read it in half an hour and be immediately effective on their project thanks to a simpler and more powerful mental model of SOA. &lt;/i&gt;A short summary of the paper is available for you to skim through, but I would encourage you to download the full paper (a free registration is required), since it has much more detailed descriptions, extensive explanations for the final conclusions and a couple of industry examples to drive home the concepts. So please have a read and, if you like it, recommend it to all your architect- and designer-type friends. (At my own request, my name doesn't appear on this document because I don't want to dilute the appeal of the method by causing it to look like a mere individual's opinion. WSO2's cachet is better than mine!)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A second white paper that is currently in the works will describe the full suite of WSO2's products and how they map to the framework established in the first. Stay tuned for that too. The first white paper will equip you with concepts. The second will equip you with know-how about a comprehensive set of reasonably-priced tools. Together, they should provide a customer organisation with excellent value for money and the long sought-for return on their investment in SOA.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6163864234828478901?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6163864234828478901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6163864234828478901' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6163864234828478901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6163864234828478901'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/10/practical-soa-for-solution-architect.html' title='Practical SOA for the Solution Architect'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-2168111146571915657</id><published>2011-10-13T05:05:00.000-07:00</published><updated>2011-10-25T18:54:48.984-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='Brian Kernighan'/><category scheme='http://www.blogger.com/atom/ns#' term='Steve Jobs'/><category scheme='http://www.blogger.com/atom/ns#' term='Unix'/><category scheme='http://www.blogger.com/atom/ns#' term='Ken Thompson'/><category scheme='http://www.blogger.com/atom/ns#' term='Dennis Ritchie'/><title type='text'>Steve Jobs and Dennis Ritchie</title><content type='html'>&lt;div style="text-align: justify;"&gt;This hasn't been a great week to be a computer pioneer. &lt;a href="http://en.wikipedia.org/wiki/Dennis_Ritchie"&gt;Dennis Ritchie&lt;/a&gt; has now followed &lt;a href="http://en.wikipedia.org/wiki/Steve_Jobs"&gt;Steve Jobs&lt;/a&gt; off the stage and into that great big computer industry in the sky. Two giants in a single week.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-JtWY1pgYtg4/TpbpeZ0jrYI/AAAAAAAADI4/l-LmE7ZSjR0/s1600/steve-jobs.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-JtWY1pgYtg4/TpbpeZ0jrYI/AAAAAAAADI4/l-LmE7ZSjR0/s400/steve-jobs.jpg" alt="" id="BLOGGER_PHOTO_ID_5662970290001653122" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Steve Jobs&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-twoKroRsv5Q/TpbpeFAvMCI/AAAAAAAADIo/ASllbSP4uYY/s1600/dennis-ritchie.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 355px; height: 342px;" src="http://4.bp.blogspot.com/-twoKroRsv5Q/TpbpeFAvMCI/AAAAAAAADIo/ASllbSP4uYY/s400/dennis-ritchie.jpg" alt="" id="BLOGGER_PHOTO_ID_5662970284415594530" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Dennis Ritchie&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;I guess, unlike most people, I have been touched by Ritchie much more than by Jobs. I have never owned a Mac or an iPhone, and regretted buying an iPod as soon as I realised there was no way to bypass the iTunes straitjacket. iPod generation 4 worked with the gtkPod application on my Ubuntu desktop, but generation 5 corrected that shocking oversight, and the Apple empire, with a sigh of relief, regained its pristine purity, shutting out the great unwashed once more. That ended my dalliance with Jobs and his closed system. I don't fancy handcuffs even when they're &lt;i&gt;haute mode&lt;/i&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I feel sorry about the death of Steve Jobs the human being. I have no sympathy for the worldview that he represented, of closed systems, slimy lawyers and patent lawsuits.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Dennis Ritchie, of course, was the polar opposite of Jobs. Those who have read Asimov's science fiction trilogy &lt;a href="http://en.wikipedia.org/wiki/Foundation_series"&gt;Foundation&lt;/a&gt; may remember that there were &lt;i&gt;two&lt;/i&gt; Foundations, a well-known one at the periphery of the Galactic empire, and the other, a secret one, located "at the opposite end of the galaxy". Many characters in the novel tried searching for the Second Foundation along the opposite edge of the galaxy where they thought it would be, but its actual location was right at the centre of the empire! The term "opposite" was meant in a sociological sense, not a physical one.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;And in true Foundation-esque fashion, Ritchie's contribution to mankind, while in a sense the opposite of Jobs's, was not a rival closed system but an open one. Along with &lt;a href="http://en.wikipedia.org/wiki/Ken_Thompson"&gt;Ken Thompson&lt;/a&gt;, he wrote the most open operating system of its time, -- Unix.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-2flqQ-DxZSk/TpbpdwNU3CI/AAAAAAAADIg/a-J2WD9BpkM/s1600/ken-thompson.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 333px;" src="http://4.bp.blogspot.com/-2flqQ-DxZSk/TpbpdwNU3CI/AAAAAAAADIg/a-J2WD9BpkM/s400/ken-thompson.jpeg" alt="" id="BLOGGER_PHOTO_ID_5662970278831250466" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Ken Thompson&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;The popular web article "&lt;a href="http://www.muq.org/%7Ecynbe/rants/lastdino.htm"&gt;The Last Dinosaur and The Tarpits of Doom&lt;/a&gt;" has a matchless passage describing the world at the time of Unix's birth.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;p style="font-family: 'Times New Roman'; font-size: medium; "&gt;&lt;/p&gt;&lt;span class="Apple-style-span"&gt;&lt;blockquote&gt;&lt;p&gt;&lt;i&gt;In 1970, primitive proprietary operating systems bestrode the landscape like mighty dinosaurs: Prime's PrimeOS, DEC's RSTS, RT-11, etc. (with VAX/VMS soon to come), IBM's innumerable offerings, CDC's Scope and of course dominating the scientific workstation market, Apollo's Domain.&lt;/i&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Who would then have dared to predict the fall of such giants?&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;What force could topple such entrenched operating systems, backed by massive industry investment, hacker culture and customer loyalty?&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Today, of course, we all know the answer:&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;In 1975 Bell Labs released Unix.&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Unix had no support from its creator, AT&amp;amp;T: Buy the magtape and don't call us. (AT&amp;amp;T was legally barred from entering the operating system market.)&lt;/i&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Unix had no support from any existing vendor: None had the slightest interest in backing, supporting or developing an alternative to its proprietary operating systems offerings.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Unix had zero customer base: Nobody had ever heard of it, nobody was requesting it.&lt;/i&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Unix had zero marketing: Nobody had any reason to spend money building mindshare for it.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;i&gt;A one-sided competition?&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Decidedly: Unix wiped all workstation competition off the map in less than fifteen years.&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;On April 12, 1989, HP bought up Apollo at a fire-sale price, putting out of its misery the last remaining proprietary operating system vendor in the workstation world, and the workstation proprietary OS era was over: Unix was left alone in the workstation market.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;In fifteen years, a [magnetic] tape and an idea had effectively destroyed all opposition: Every workstation vendor was either supporting Unix or out of business.&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;Let me add one more point to that. At the heart of &lt;a href="http://en.wikipedia.org/wiki/Darwin_%28operating_system%29"&gt;Apple's operating systems&lt;/a&gt; is a version of Unix (BSD Unix). Steve Jobs's business empire took a freely available operating system, layered a user-friendly graphical interface over it, and without a word of thanks, proceeded to build a proprietary edifice that was as closed as its enabling technology was open.&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; font-size: medium; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So thank you, Dennis Ritchie, for giving us today's Mac.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ritchie was an inventor second to none. People today forget one of the main reasons Unix is considered "open". Before Unix, an operating system was written for a specific processor chip, in the assembly language corresponding to that chip. One of the key factors that made Unix open was the fact that it could be ported to any chip at all. More than 90% of an operating system's logic is in fact independent of the underlying hardware architecture. Less than 10% is specific to the chip. That's why only very low-level code in Unix is written in assembly language. That's the only part that needs to be re-written when porting Unix to a different processor architecture.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once the operating system was liberated from its ties to hardware, any hardware manufacturer could port Unix to their computers. That's the openness that destroyed the proprietary dinosaurs and created the world we see today. We have Thompson's and Ritchie's genius to thank for that. In the next generation, Linux proceeded to wipe out proprietary &lt;i&gt;Unix&lt;/i&gt; variants to take over the server room.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today, Google's Android has Linux at its core. So now Ritchie's invention has taken over the server, a significant part of the desktop (through the Mac) and an increasingly dominant part of the smartphone and tablet markets (through Android and Apple's iOS). Not bad for a simple and open operating system!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now we know that 90% of Unix is written in a higher-level language, and therein hangs another tale. At the time Thompson and Ritchie wrote Unix, there was no suitable high-level language to write an operating system in. It had to have the higher-level constructs of most modern, structured, procedural programming languages. Yet it also had to provide sufficient control over low-level constructs like memory addresses and file structures. This was a challenge that may have stumped other people and caused them to compromise in some way. Not Ritchie. Necessity for him was the mother of invention - the invention of the C programming language. Together with &lt;a href="http://en.wikipedia.org/wiki/Brian_Kernighan"&gt;Brian Kernighan&lt;/a&gt;, Dennis Ritchie created the first C compiler, and it is astonishing that the language has hardly had to change since their version to the present day. The standardised version of their language, ANSI C, is largely the same as their original one, with just minor changes. Now that's vision for you.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-mOqPmHXkyxo/TpbpdxPHeaI/AAAAAAAADIU/vHZUX7D9KlA/s1600/brian_kernighan.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 372px;" src="http://3.bp.blogspot.com/-mOqPmHXkyxo/TpbpdxPHeaI/AAAAAAAADIU/vHZUX7D9KlA/s400/brian_kernighan.jpg" alt="" id="BLOGGER_PHOTO_ID_5662970279107197346" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Brian Kernighan&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;C inspired C++, Java, JavaScript, Perl, C# and a whole bunch of other languages. Any language with curly braces and semicolons owes an intellectual debt to Ritchie and Kernighan.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The laptop that I'm composing this on runs Ubuntu Linux, another variant of Unix. Most of Linux is written in C. I'm probably not fully aware of the extent to which I owe Ritchie a debt of gratitude, as the one common factor in the creation of both Unix and C. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By the way, if you think Unix has an ugly user interface because of its command line, there are two rebuttals to that argument. The trivial one is that modern Unix variants like Linux have very sophisticated and friendly user interfaces indeed. The deeper rebuttal is that there is beauty and power in the Unix command line that MacOS has eagerly embraced as an offering to the "power user".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;User Interface experts Don Gentner and Jakob Nielsen write in their classic paper &lt;a href="http://www.useit.com/papers/anti-mac.html"&gt;The Anti-Mac Interface&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;i&gt;The see-and-point principle states that users interact with the computer by pointing at the objects they can see on the screen. It's as if we have thrown away a million years of evolution, lost our facility with expressive language, and been reduced to pointing at objects in the immediate environment. Mouse buttons and modifier keys give us a vocabulary equivalent to a few different grunts. We have lost all the power of language, and can no longer talk about objects that are not immediately visible (all files more than one week old), objects that don't exist yet (future messages from my boss), or unknown objects (any guides to restaurants in Boston).&lt;/i&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;Like they said. As an advocate of the power of the Unix command line, I rest my case.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Unix is such a unique phenomenon in the world of computing that noted academic Prof Martin Vermeer believes it should be treated &lt;a href="http://www.linuxtoday.com/news_story.php3?ltsn=1998-12-24-003-05-OP"&gt;as a basic element of literacy&lt;/a&gt;, alongside the three Rs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;And so a tumultuous week has gone by, and the computer industry mourns its two luminaries. Among computer pioneers, Steve Jobs was the shiny user interface, slick and popular. Ritchie was the kernel, unseen and unknown to the masses, yet the workhorse that made everything else possible, including the user interface. He may be less &lt;i&gt;widely&lt;/i&gt; mourned, but no less mourned.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;And I like to think Ritchie rushed after Jobs to make sure the Pearly Gates stayed open to all!&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-2168111146571915657?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/2168111146571915657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=2168111146571915657' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2168111146571915657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2168111146571915657'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/10/steve-jobs-and-dennis-ritchie.html' title='Steve Jobs and Dennis Ritchie'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-JtWY1pgYtg4/TpbpeZ0jrYI/AAAAAAAADI4/l-LmE7ZSjR0/s72-c/steve-jobs.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-4193814203177478448</id><published>2011-10-12T01:47:00.000-07:00</published><updated>2011-10-12T03:28:34.833-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='CoffeeScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Dart'/><title type='text'>Google's Aimless Darting</title><content type='html'>&lt;div style="text-align: justify;"&gt;Search Engine vendors should be in the clarification business, not the muddying business. All the more frustrating to read the news about &lt;a href="http://en.wikipedia.org/wiki/Dart_(programming_language)"&gt;Dart&lt;/a&gt;, Google's new web programming language to replace JavaScript.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;My only reaction is - WHY???&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Yes, JavaScript is not exactly a perfect language. It has warts, huge ones. That's been known for a long time. Is that sufficient reason to throw the whole language overboard and try and popularise a new one? Especially after &lt;a href="http://jashkenas.github.com/coffee-script/"&gt;CoffeeScript&lt;/a&gt; has already done the job? &lt;a href="http://shop.oreilly.com/product/9780596517748.do"&gt;JavaScript has good parts&lt;/a&gt; as well as bad, and I'm not talking about just its technical aspects. Its ubiquity is a major strength. Replacing it is an exercise with very doubtful prospects. I don't think even Google can pull it off.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;CoffeeScript has taken the right approach, in my opinion. CoffeeScript is JavaScript with lead shielding over the reactor core. And that was all that was required. CoffeeScript on the server side uses Nodejs to run scripts anyway, so one can write server-side code in CoffeeScript and run it with "coffee" instead of with "node", and the ugliness and danger of JavaScript can be neatly sidestepped. Even on the client side, a single line such as&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;script type="text/JavaScript" src="coffeescript.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;will allow you to write the rest of your client-side code in CoffeeScript, because coffeescript.js is a minimised library that will let your browser interpret CoffeeScript natively. Your application code will look like this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;script type="text/CoffeeScript"&amp;gt;&lt;br /&gt;# CoffeeScript code&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;What is Dart going to do for us beyond that, functionality-wise? Technically, Dart won't even &lt;i&gt;replace&lt;/i&gt; JavaScript, because it will compile to JavaScript. Does that sound familiar? Because that's just what CoffeeScript does as well! Was it so hard for Google to get behind CoffeeScript? Some &lt;a href="http://en.wikipedia.org/wiki/Not_Invented_Here"&gt;NIH&lt;/a&gt; at work, I think.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Now the frustrating thing is that Dart will waste at least some developer mindshare and bandwidth when the world should have been just getting on with the job - using CoffeeScript plus jQuery on the client side, CoffeeScript plus Nodejs on the server side.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;What a waste!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-4193814203177478448?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/4193814203177478448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=4193814203177478448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4193814203177478448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4193814203177478448'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/10/googles-aimless-darting.html' title='Google&apos;s Aimless Darting'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-3423923640191223074</id><published>2011-10-10T16:37:00.000-07:00</published><updated>2011-10-10T16:44:00.259-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life above the Service Tier'/><category scheme='http://www.blogger.com/atom/ns#' term='SOFEA'/><title type='text'>Life above the Service Tier (Change of Links)</title><content type='html'>&lt;div style="text-align: justify;"&gt;Google Groups no longer allows file uploads. Worse, they went back on a commitment to keep the files that were already uploaded accessible. Now all the files I uploaded to the "wisdomofganesh" group have to find alternate homes (if I still have a local copy, that is), and I have to update all the links from my blog. Totally uncool of Google. I'm very annoyed.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Anyway, since the following docs seem to be the most frequently accessed, here are the new links:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;1. &lt;a href="http://dm457j.mesfichiers.org/en/Life+above+the+Service+Tier+v1_1.pdf"&gt;Life above the Service Tier (white paper)&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;2. &lt;a href="http://4t2n5x.mesfichiers.org/en/Life%20above%20the%20Service%20Tier%20Preso%20v1_0.pdf"&gt;Life above the Service Tier (presentation)&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;3. &lt;a href="http://2q5xiu.1fichier.com/en/"&gt;SOFEA in a SOA Ecosystem (diagram)&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-3423923640191223074?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/3423923640191223074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=3423923640191223074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3423923640191223074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3423923640191223074'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/10/life-above-service-tier-change-of-links.html' title='Life above the Service Tier (Change of Links)'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6646526551431249951</id><published>2011-10-10T05:07:00.000-07:00</published><updated>2011-10-14T08:52:05.824-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Amazon Cloud Drive'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon Web Services'/><title type='text'>Amazon Cloud Drive Tech Talk - Sydney, 10-10-2011</title><content type='html'>&lt;div style="text-align: justify;"&gt;I attended the Amazon Cloud Drive Tech Talk today in Sydney. This was held on the 39th floor of the Citigroup building at 2 Park Street in the CBD. The views from the window are awesome, by the way.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-p6yq4XfjMrI/TpLhxfd5ObI/AAAAAAAADHQ/j9Kxb9cZFnY/s1600/Park%2BStreet-1.jpg"&gt;&lt;img style="text-align: justify;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 400px; height: 300px; " src="http://3.bp.blogspot.com/-p6yq4XfjMrI/TpLhxfd5ObI/AAAAAAAADHQ/j9Kxb9cZFnY/s400/Park%2BStreet-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5661835921934858674" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;That's Park Street stretching away towards King's Cross&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-gzef0gPZGks/TpLhxFp5-mI/AAAAAAAADHI/mBw0reRLnWM/s1600/Park%2BStreet-2.jpg"&gt;&lt;img style="text-align: justify;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 300px; height: 400px; " src="http://2.bp.blogspot.com/-gzef0gPZGks/TpLhxFp5-mI/AAAAAAAADHI/mBw0reRLnWM/s400/Park%2BStreet-2.jpg" alt="" id="BLOGGER_PHOTO_ID_5661835915005917794" border="0" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Those red slugs are the new Metro double-buses&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;I reached the venue just after 1800, when registration was scheduled to begin. There were eats, bottles of beer and canned carbonated drinks in the room, but none suitable for a vegetarian teetotaller trying to lose a few calories, so I drank a glass of water instead and waited for the proceedings to begin.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The event kicked off promptly at 1830. John Scott of the Android Australia User Group made a short speech introducing Piragash Velummylum of Amazon, who had flown in from the US.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/--GXe8WkDAuM/TpLhxHY68HI/AAAAAAAADHA/Di4TBhPFDvA/s1600/John%2BScott%2Bintro.jpg"&gt;&lt;img style="text-align: justify;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 300px; height: 400px; " src="http://3.bp.blogspot.com/--GXe8WkDAuM/TpLhxHY68HI/AAAAAAAADHA/Di4TBhPFDvA/s400/John%2BScott%2Bintro.jpg" alt="" id="BLOGGER_PHOTO_ID_5661835915471548530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Then Piragash took the stage and spoke. I must say the Amazon Cloud Drive turned out to be more Amazon &lt;i&gt;Recruitment&lt;/i&gt; Drive than anything else! Piragash and a colleague Brad (who spoke for half a minute) made no secret of the fact that they were in town to recruit developers for their Seattle office. The tech talk was like a campus recruitment talk - just enough data to pique the interest of developers wanting to work on cool technology.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-WiZb-rQJdbA/TpLhwz9wVVI/AAAAAAAADG4/jVXvZpRAVbM/s1600/Piragash%2BVelummylum%2Bspeech.jpg"&gt;&lt;img style="text-align: justify;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 300px; height: 400px; " src="http://4.bp.blogspot.com/-WiZb-rQJdbA/TpLhwz9wVVI/AAAAAAAADG4/jVXvZpRAVbM/s400/Piragash%2BVelummylum%2Bspeech.jpg" alt="" id="BLOGGER_PHOTO_ID_5661835910257333586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The unofficial motto of the Amazon Cloud Drive service is "anything digital, securely stored, accessible anywhere". Piragash spoke a bit about Amazon CEO Jeff Bezos, who he projected to be a likeable nerd who listens to everybody and does the right thing. [Piragash must have a weird sense of humour. Just read &lt;a href="http://news.ycombinator.com/item?id=3101876"&gt;this piece&lt;/a&gt; and the comments that follow. I wouldn't want to work for Jeff Bezos in a hundred years.]&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Amazon Cloud Drive is meant to address three customer pain points:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;Multiple music downloads&lt;/li&gt;&lt;li&gt;Moving files from one store to another&lt;/li&gt;&lt;li&gt;Data loss&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;He said something about Amazon MP3, which seems to be similar to Apple's iTunes (Piragash sidestepped a question from the audience on a comparison with iTunes, saying they had a policy not to talk about competitors, but mentioned that the Amazon version allowed upload of customer content). I think the story might have begun with Amazon MP3 which catered to music files. Then Amazon Cloud Drive came along which was more general-purpose and catered to videos and other kinds of files as well. That's what I gathered.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;He emphasised a few times that Amazon Cloud Drive is for customer content, not purchased content (also called studio content or catalog content). It's like DropBox, I guess. It's said to be free, but there was no mention about storage limits. Unlike DropBox, they don't do de-duplication of files (yet), and certainly not across users. They would need to sort out licensing before they did that sort of thing, and he made a statement to the effect that Amazon is DMCA-compliant.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;They obviously leverage off their other technologies, i.e., AWS (Amazon Web Services). They currently use S3 (Scalable Storage Solution), not EC2 (Elastic Cloud Computing), but they may use that in future if required.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Amazon Cloud Drive has three layers. Storage is provided by S3. They've defined a hierarchical file system on top of that (which has long been a demand of S3 users). Finally, they have metadata on top that defines relationships and queries, making the file system much more useful.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;These are some of the operations supported at each of those levels:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;S3: Upload, download&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Filesystem: Copy, move, delete, list, recycle, restore, create&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Metadata: Select, get, put, delete (Aha, REST! But Select seems to have replaced Post. Puzzling.)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Piragash also talked about some of their technical challenges.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Scaling was the major one (and continues to be a major focus of research and innovation). The principles Amazon follows to ensure scalability are:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;1. "Don't get in the way", i.e., let AWS and Akamai do the job they know best, don't interpose Amazon Cloud Drive between those systems and the user. Rather, allow Amazon Cloud Drive to be proxied by CDNs (Content Delivery Networks) like Akamai.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;2. "Be flexible", i.e., be forward-thinking and don't prevent services like allowing a zipped set of files to be downloaded.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Security is another major concern. Content is meant to be private and personal. As part of their PaaS offering, Amazon provides an Identity and Access Management (IAM) system, and Amazon Cloud Drive uses IAM and AWS to control the generation of time-bound tokens. Delegated S3 access has an extra security token in the URL that expires after a certain period, so people can't pass content URLs around and have them accessible indefinitely to anyone who gets the URL. Can customers share their content with others, or is this purely private? Piragash's response: "Stay tuned".&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Then Piragash briefly talked about the Kindle Fire, due for release in about a month. Incidentally, Kindle for iPad is said to use HTML5 throughout and to look like a native app.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;There's also a new business called Amazon Fresh, currently only rolled out to the Seattle area. Order your groceries online at midnight, and have them delivered to your door by 6 am!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;There was a little talk about version synchronisation strategies and rules for conflict resolution. They support multiple schemes for different domains. Sometimes they use automated algorithms, and at other times they let the customer resolve conflicts.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Asked about an API for Cloud Drive, Piragash would only say, "Stay tuned".&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;He mentioned that it was important to weed out "phantom requirements" and to concentrate on solving the customer's real problems.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A member of the audience remarked that Australia really needed an edge server located here to reduce latency. Piragash merely smiled acknowledgement. Someone else asked about the number of servers used by Amazon, but Piragash could not talk about that.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;That was the end of the talk, and Piragash invited people to stay and talk to him and his colleagues. He called for CVs and said they'd be in Sydney the whole week, recruiting people to be based out of Seattle.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;So if you like rain throughout the year and don't mind sharing a city with Microsoft, do apply to Amazon for a job.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;[What was even more interesting than the technology talk was &lt;a href="http://golfcharliepapa.blogspot.com/2011/10/etymology-of-name.html"&gt;a nugget of cultural trivia&lt;/a&gt; that I've written about on my &lt;i&gt;other&lt;/i&gt; blog.]&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6646526551431249951?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6646526551431249951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6646526551431249951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6646526551431249951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6646526551431249951'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/10/amazon-cloud-drive-tech-talk-sydney-10.html' title='Amazon Cloud Drive Tech Talk - Sydney, 10-10-2011'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-p6yq4XfjMrI/TpLhxfd5ObI/AAAAAAAADHQ/j9Kxb9cZFnY/s72-c/Park%2BStreet-1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-8438381036118764231</id><published>2011-10-06T00:55:00.000-07:00</published><updated>2011-10-06T04:25:11.763-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='India'/><category scheme='http://www.blogger.com/atom/ns#' term='Nano'/><category scheme='http://www.blogger.com/atom/ns#' term='Aakash'/><category scheme='http://www.blogger.com/atom/ns#' term='AIDS medication'/><title type='text'>Aakash - The Sky's the Limit</title><content type='html'>&lt;div style="text-align: justify;"&gt;Android tablet prices went down even further with the announcement of the Indian-made tablet "&lt;a href="http://en.wikipedia.org/wiki/Aakash_tablet"&gt;Aakash&lt;/a&gt;" (Sanskrit for "sky", pronounced "aakaash"). The price to students (admittedly with a government subsidy) is projected to be $35. Even without the subsidy, the retail price should still be a groundbreaking $60. The aim is to bridge the "digital divide" and allow less affluent sections of society to participate in the digital economy.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I like free markets, but given the tendency for cartels to form in most market segments (negating the freedom that &lt;a href="http://golfcharliepapa.blogspot.com/search?q=my+economic+philosophy"&gt;true liquidity&lt;/a&gt; would deliver) and the distortions of patent law that entrench the power of large corporations, I also think governments need to step in from time to time to ensure equity. Untrammelled capitalism isn't going to bridge the digital divide. There has to be a &lt;i&gt;deus ex machina&lt;/i&gt; that kicks in at critical junctures.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Stepping back a bit to take a historical view, the primary difference between the 19th and 20th centuries was not in scientific knowledge or even technological invention (because many 20th century inventions were known even in the 19th), but in the &lt;i&gt;mass production&lt;/i&gt; and &lt;i&gt;mass consumption&lt;/i&gt; of such technology. In analogous fashion, I can see the potential for India to become a technology "enabler" for the world's poorer half (or two-thirds), democratising technology usage across a geographical span rather than a historical one.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I remember the dire warnings a decade ago about an AIDS epidemic that was poised to devastate Africa, and the utterly shameful behaviour of the big Western pharma companies in refusing to lower the prices of AIDS medication to save millions of lives. They tried to use patent law to block any attempt by other parties to provide cheaper medication. If the intellectual wherewithal had been entirely lacking in the Third World, they may well have got away with it. But Indian pharma companies were &lt;a href="http://www.avert.org/generic.htm"&gt;able to produce&lt;/a&gt; AIDS medication, and more importantly, produce it at a much lower price point that African countries could afford, and the Third World as a whole managed to vote their way around the IP laws that the US (and other Western countries) have forced all others to sign. A humanitarian disaster was averted that would have dwarfed the Holocaust, and India had a large (though also largely unsung) role to play in averting it.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;More recently, Tata Motors established a radically lower price point for cars ($3000). The &lt;a href="http://en.wikipedia.org/wiki/Tata_Nano"&gt;Nano&lt;/a&gt; is a revolutionary breakthrough, and it isn't a toy either. If a car can survive on Indian roads, it will positively thrive anywhere else ;-). The Nano is going through &lt;a href="http://www.team-bhp.com/forum/technical-stuff/83533-tata-nano-list-all-issues.html"&gt;a few teething problems&lt;/a&gt; right now, but I have a sense that in a decade or two, it will be one of the world's iconic car brands, perhaps the most ubiquitous. The Nano could change the image of car ownership as an indication of wealth.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;And now, with Aakash, India is once again bringing technology within the reach of ordinary people, &lt;i&gt;at Third World prices&lt;/i&gt;. The term "reasonably priced" means something very different in Western countries. Even middle class people in Third World countries cannot afford these "reasonably priced" products. In Marxist terminology, as long as the "means of production" were concentrated in Western hands, there wasn't much the rest of the world could do about it. They either paid those prices (exorbitant by their standards) or simply did without. Now they have a choice. Incongruous as it may seem, India is swooping in in shining armour to save the day.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I do have some reservations, though. Indian ingenuity has never been in doubt. What's in doubt is India's institutional ability to follow through, to execute, to deliver. India has always been a muddle-through country rather than a reliably-achieve country. Even the Nano is a case in point. The &lt;a href="http://www.southasiatimes.com.au/news/mamta-kills-nano-all-set-for-pull-out-from-singur/"&gt;political shenanigans&lt;/a&gt; that preceded its launch very nearly canned the project. If I was someone big in the Indian government, I would not look at this as just a private sector enterprise that is none of the government's business. I would see it as a national enterprise where India has a chance to put its stamp on the world and change it for the better, and I would provide Tata Motors with all the support needed to manufacture and sell the Nano in volume, worldwide.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;[I'm not going to argue about whether an invention that serves to consume more fossil fuels is going to change the world for the better. The environmentalists don't seem to have an easy answer to the developmental issue of stagnation-versus-pollution either.]&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Again on the topic of the Indian character, I remember my student days at IIT Madras when a new Siemens mainframe computer was delivered to the institute. This was in the mid-eighties. The box was too big to go up the stairs of the computer centre. Many students and professors watched as the workmen, mostly uneducated, rigged up a makeshift pulley and with the help of ropes, winched the box up the side of the building, and others leaned over the parapet wall on the first floor and hauled it in. Mission accomplished with a minimum of technology (and no insurance!)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Watching this, one of my professors who had done his PhD in the US and worked there for a while, remarked wisely, "We Indians are great at improvisation. The danger is that we will be satisfied with our ability to improvise, and fail to develop real systems."&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I see no evidence that India has improved significantly on the systems front. Flashes of Indian brilliance, like the Nano and the Aakash, will remain just flashes in the pan unless the country learns to be more disciplined about delivery. Virtually every developed country emphasises delivery discipline. Only when India masters &lt;i&gt;that&lt;/i&gt; can the world look forward to a steady stream of dirt-cheap high technology that will change billions, not just millions, of lives.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-8438381036118764231?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/8438381036118764231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=8438381036118764231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/8438381036118764231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/8438381036118764231'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/10/aakash-skys-limit.html' title='Aakash - The Sky&apos;s the Limit'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-9208207847062044317</id><published>2011-10-05T04:48:00.000-07:00</published><updated>2011-10-08T06:57:12.568-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android Australia User Group'/><category scheme='http://www.blogger.com/atom/ns#' term='outsourcing'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Developer'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='Australia'/><title type='text'>Meeting of Android Australia User Group - Sydney 05/10/2011</title><content type='html'>&lt;div style="text-align: justify;"&gt;I attended my first meeting of the &lt;a href="http://www.meetup.com/sydandroid/"&gt;Android Australia User Group - Sydney&lt;/a&gt; this evening.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The organiser, John Scott, started with some general announcements, which should be of interest to many.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;- There is an &lt;a href="http://www.meetup.com/sydandroid/events/33985682/"&gt;Amazon Cloud Drive Developer Tech Talk&lt;/a&gt; in Sydney on Monday October 10, 2011.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;- &lt;a href="http://www.google.com/events/developerday/2011/sydney/"&gt;Google Developer Day&lt;/a&gt; will be on November 8, 2011 in Sydney.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Those interested should register for these events. They're both free, as far as I know.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;John then kicked off the first talk of the evening, which was a brief overview of Motorola's IDE for Android application development - &lt;a href="http://developer.motorola.com/docstools/motodevstudio/"&gt;MOTODEV Studio&lt;/a&gt;. According to John, this IDE is better than the Google Android plugin for Eclipse, which seems to be the &lt;i&gt;de facto&lt;/i&gt; IDE for Android, because it has a few extra features like the generation of boilerplate code to make the developer's life easier, and also graphical tools to manage SQLite databases. I found a couple of other discussions on MOTODEV Studio vs Eclipse &lt;a href="http://community.developer.motorola.com/t5/MOTODEV-Studio-for-Android/Existing-Eclipse-installation-vs-MOTODEV/td-p/4410"&gt;here&lt;/a&gt; and &lt;a href="http://community.developer.motorola.com/t5/MOTODEV-Studio-for-Android/MOTODEV-versus-vanilla-Eclipse/td-p/13708"&gt;here&lt;/a&gt;, but they seem somewhat dated.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The second talk was by Gianpaolo De Biase, a developer with AppCast. Gianpaolo talked about some real-life applications that his company has built (one of which is &lt;a href="https://market.android.com/details?id=com.appcast.jsw&amp;amp;hl=en"&gt;JustStartWalking&lt;/a&gt;, an app for an initiative of the same name from the Chiropractors' Association of Australia). He also discussed two important architectural decisions that his company made when developing these products.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;1. When dealing with local databases, Gianpaolo recommends using an Object-Relational Mapping (ORM) tool rather than the raw SQLite API provided by Google. The tool he used is &lt;a href="http://ormlite.com/"&gt;OrmLite&lt;/a&gt;, which is Open Source like Hibernate but more lightweight and adequate for the simpler data structures needed for local storage on mobile devices.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;2. When making REST calls to remote servers, he recommends using the &lt;a href="http://www.springsource.org/spring-android"&gt;Spring Android&lt;/a&gt; module with its REST Template in preference to raw HttpClient. He did encounter some bugs with Spring Android in the areas of cookie management and SSL certificates, but believes the product is rapidly maturing.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;As a side benefit of both OrmLite and Spring Android being annotation-based, Gianpaolo was able to have a single set of domain objects. Each object had two sets of annotations applied, one for persistence and one for interfacing with REST services. [I'm a bit suspicious of the latter annotation, since it looks like the design combines domain objects and message documents into a common entity, a form of tight coupling I've long warned against.]&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;After a short break, we had our third talk of the evening by James Zaki, a freelance developer with goCatch. This was a high-level description of the &lt;a href="http://www.gocatchapp.com.au/"&gt;goCatch app&lt;/a&gt;, which brings together cab drivers and prospective passengers. There was general satisfaction expressed around the room in favour of this cartel-breaking app, since the taxi companies and CabCharge engage in significant &lt;a href="http://en.wikipedia.org/wiki/Rent-seeking"&gt;rent-seeking behaviour&lt;/a&gt; at the expense of both drivers and passengers. goCatch allows the two to bypass the middlemen. I had some reservations about one of the aspects of the goCatch design as described by James, i.e., its statefulness, which led to problems of synchronisation of state held on devices with that on the server. Perhaps a suitable set of messages based on idempotence could solve the problem. I didn't have time to discuss this offline with James.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Our fourth and final talk of the evening was by Darren Younger, CTO of &lt;a href="http://www.ipscape.com.au/"&gt;IPScape&lt;/a&gt;, in whose offices the meeting was held. IPScape is a provider of cloud-based contact centre solutions catering to both voice and web. One of their interesting applications allows mobile device users to make phone calls not through the device's native telephony capabilities, but through the IPScape app. The server then initiates regular (teleconference-style) phone contact with both the caller and the receiver. The advantage of this is that the server can record the call. Many financial service providers are required by law to record all customer conversations, and it is easier for them to use this app rather than approach the telcos for a voice recording service. A developer API may be coming in a few months.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I also met another attendee, Nanik Tolaram, an amateur Android enthusiast with his own &lt;a href="http://www.ozandroid.info/"&gt;Android-related website&lt;/a&gt;. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I picked up a few useful tidbits of information over the course of the evening.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Samsung sent a couple of people to the meeting. They seem keen to understand the size and strength of the Android developer community. Samsung wants to carve out a unique niche even within the Android ecosystem and they have their own app store separate from the generic Android one.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;DroidDraw is a testing tool for Android User Interfaces.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Google has a cloud-to-device API.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://developer.android.com/index.html"&gt;developer.android.com&lt;/a&gt; is Google's portal for Android developers.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Balsamiq is a commercial tool to mock up UIs, including mobile UIs. &lt;a href="http://pencil.evolus.vn/en-US/Home.aspx"&gt;Pencil&lt;/a&gt; seems to be a good Open Source equivalent, and &lt;a href="http://lumzy.com/index.cfm"&gt;Lumzy&lt;/a&gt; is a free one.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Two of the presenters talked about their negative experiences with outsourcing. Although the outsourcing countries were as varied as Israel, India and Singapore, there seem to be some common problems caused by distance as well as the seeming cultural inability of some developers to look beyond the literal specification and to understand the higher abstraction that an application is trying to implement. Errors in the documentation of some specs led to literal implementation of those features even though they patently made no sense. Outsourcing sites like Freelancer.com seem very cost-effective, but the elapsed time to obtain a working solution negates those benefits. Examples: $200 and 4.5 months to develop an app, $800 and 9 months to develop another. The moral of the story seems to be to hire good local developers so communication problems are reduced and results are achieved quickly.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The Android Australia User Group is a good place for developers to hang out. The organisations that some of the speakers represented are looking for developers, and this may be a good way to get introduced.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-9208207847062044317?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/9208207847062044317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=9208207847062044317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/9208207847062044317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/9208207847062044317'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/10/meeting-of-android-australia-user-group.html' title='Meeting of Android Australia User Group - Sydney 05/10/2011'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-302698307347516784</id><published>2011-10-01T09:05:00.000-07:00</published><updated>2011-10-01T09:13:25.503-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Daylight Saving Time'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Daylight Saving Time - Ubuntu Passes the Test</title><content type='html'>&lt;div style="text-align: justify;"&gt;60 seconds after 0159 on October 2nd is when New South Wales, Australia mysteriously loses an hour to Daylight Saving Time and the time becomes 0300.&lt;br /&gt;&lt;br /&gt;I was awake to record what our computers did. My wife's Windows 7 machine showed 0300 all right. I would have been surprised if it hadn't. Microsoft needs to show some degree of competence for all that market share!&lt;br /&gt;&lt;br /&gt;What was personally gratifying to me was that my Ubuntu Linux machines also neatly skipped the hour and showed 0300.&lt;br /&gt;&lt;br /&gt;I'm going to bed now with a smile.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-302698307347516784?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/302698307347516784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=302698307347516784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/302698307347516784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/302698307347516784'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/10/daylight-saving-time-ubuntu-passes-test.html' title='Daylight Saving Time - Ubuntu Passes the Test'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6556238577856369681</id><published>2011-09-30T06:19:00.000-07:00</published><updated>2011-09-30T07:15:50.710-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><title type='text'>Facebook's Secret Sauce</title><content type='html'>&lt;div style="text-align: justify;"&gt;I would say there have been Three Ages of the Internet.&lt;br /&gt;&lt;br /&gt;The first was the Internet era proper, where only the US government and universities (and maybe a few other organisations) had it. There was email of course, and really cool stuff like Archie and Gopher (whatever they were) that you could access on text-based terminals.&lt;br /&gt;&lt;br /&gt;Then there was the Web, which was nice and graphical and coincidentally came out at roughly the same time as the extremely popular Windows 95. The Web through Windows made the Internet something for regular folks, not just geeks. There was surfing and search, pleasurable as well as useful. The Web soon gobbled up email too (webmail changed the user-facing protocol from SMTP and POP to HTTP). And blogs became a way for the little guy to communicate his own views to the world instead of just consuming the output of established media. That was the first step towards mass participation.&lt;br /&gt;&lt;br /&gt;Then there came Facebook. More than Picasa and on par with Skype, Facebook has suddenly made the Internet a must-have for everyone. I'm betting Facebook and Skype have driven Internet usage to new highs, both in terms of bandwidth consumed and in terms of market penetration. And along the way, Facebook has sucked the oxygen out of blogs. Ask me. I should know.&lt;br /&gt;&lt;br /&gt;That deserves the title of 'third generation Internet'.&lt;br /&gt;&lt;br /&gt;Skype's appeal is easily understood. It's the videophone of science fiction that the Telco monopolies never gave us. (Thanks, guys.) But what is it with Facebook? If it's just a place where friends hang out and exchange news and funny stories, would it really have become all that big?&lt;br /&gt;&lt;br /&gt;I've been thinking a lot about this, because I'm a latecomer to Facebook, having resisted it for a while. Now I find I'm thinking of it as 'Wastehook', an addictive way to spend time that I later regret. What made Facebook so addictive to a person who resisted it so much to start with?&lt;br /&gt;&lt;br /&gt;Yes, it's cool that we can keep tabs on all the people we've ever known. But there's more to it than that.&lt;br /&gt;&lt;br /&gt;I think the one thing of absolute genius that Facebook has pioneered is the 'friends of friends' concept. 'Friends of friends' gives you visibility just beyond the horizon of your circle of contacts. You get to know of people who are somewhat interesting because of the friends you share. Sometimes, they turn out to be people you know too! Bonus points for the thrill in such cases.&lt;br /&gt;&lt;br /&gt;'Friends of friends' are people our friends like and trust, and since we like and trust our friends, their friends are people we're already favourably disposed towards. We don't mind reading the things they say. Sometimes, they say witty and wise things. Facebook is a lot more interesting because of these people. It's not just our boring and predictable friends. It's these people, unknown but not quite irrelevant, who bring a bit of variety to the experience. It's somewhat interesting when a friend puts up photos of themselves, but a lot more interesting to read what their friends have to say about it, even if we don't know many of them. We can join in the conversation and politely add to what they're saying, and nobody minds. A nice polite party with decent people we could be friends with. That's Facebook.&lt;br /&gt;&lt;br /&gt;'Friends of friends' prevents Facebook from becoming a stale backwater, a stagnant pond, an eddy in a stream. It's not quite the wide blue ocean, though. It's just a safe little harbour. 'Friends of friends' expands our circle just enough to make Facebook an interesting place to hang out, but not so much that it becomes overwhelming or irrelevant.&lt;br /&gt;&lt;br /&gt;I'd say that's Facebook's secret sauce.&lt;br /&gt;&lt;br /&gt;[What about Google+? Well, Google+ pioneeered categories of friends, but Facebook quickly neutralised that advantage. &lt;a href="http://shastrix.blogspot.com/"&gt;An authoritative source&lt;/a&gt; informs me that Google+ has a rough equivalent to 'friends of friends' based on followers and following, so the effect could be similar. But my prize for pioneering the next generation of the Internet goes to Facebook in any case, not Google+.]&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6556238577856369681?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6556238577856369681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6556238577856369681' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6556238577856369681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6556238577856369681'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/09/facebooks-secret-sauce.html' title='Facebook&apos;s Secret Sauce'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-1706472130801628937</id><published>2011-09-23T09:18:00.000-07:00</published><updated>2011-10-18T20:39:39.143-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='client-server'/><category scheme='http://www.blogger.com/atom/ns#' term='statelessness'/><category scheme='http://www.blogger.com/atom/ns#' term='session state'/><category scheme='http://www.blogger.com/atom/ns#' term='Redis'/><title type='text'>Does Redis Undermine a Key REST Tenet?</title><content type='html'>&lt;div style="text-align: justify;"&gt;While I have always admired the elegance of REST's resource model and its standardised verbs and status codes, there are two things about the RESTful style that I think are drawbacks when building complex applications. One is its client/server model rather than a peer-to-peer model, which I think would have been more generic and useful, especially when unsolicited notifications need to be supported. The second, which is what I want to talk about now, is the insistence on statelessness (or alternatively forcing anything stateful to be either managed by the client or modelled as a resource). This is an acceptable approach for &lt;i&gt;application domain-specific&lt;/i&gt; elements, but there is also a &lt;i&gt;domain-neutral&lt;/i&gt; class of session-stateful elements that are useful for providing Qualities of Service (such as a sliding window of message sequence numbers for reliability, or session keys for security). These are common requirements that any application may require. This kind of session state is fundamentally different from domain-specific state, e.g., a shopping cart in an e-commerce application which would not be relevant to any other type of application.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The lack of support for this &lt;i&gt;application domain-neutral subset &lt;/i&gt;of session state within the RESTful style of design costs us the ability to provide Qualities of Service in a uniform way (which the much-disdained WS-* is able to do using standards like WS-SecureConversation/WS-Security and WS-ReliableMessaging). [Many will point out that RESTful applications can use SSL for security, but the SSL protocol is not itself RESTful, and it breaks the cacheability and routability of REST operations.] So Qualities of Service end up becoming an application responsibility in RESTful applications, which has always struck me as a bit of a cop-out on the part of the protocol.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;REST has standardised many other aspects of interaction and turned them into a uniform protocol that interacting systems can use. I would like to see QoS-related session management also similarly standardised and "pulled into the protocol", even if that protocol is not HTTP but something else (WebSockets?).&lt;br /&gt;&lt;br /&gt;I have often wondered exactly why statefulness is considered "evil". There are two reasons, as far as I can tell - scalability and failure recovery. Session state occupies memory, so holding session state for multiple clients impacts the scalability of a server. Also, holding session state within a server makes it less easy for clients to switch to another if the one holding its session objects goes down. We'll need to have session-aware &lt;span style="font-style: italic;"&gt;clusters &lt;/span&gt;rather than stateless &lt;span style="font-style: italic;"&gt;farms &lt;/span&gt;of servers to provide failover, which again doesn't scale linearly.&lt;br /&gt;&lt;br /&gt;Two considerations make these arguments weaker.&lt;br /&gt;&lt;br /&gt;The first is that we are not talking about application-specific session state like shopping carts and the like. We're talking about relatively tiny data elements that are domain-neutral and dedicated to providing Qualities of Service, such as sliding windows of sequence numbers for reliability, and security tokens for message encryption. These aren't huge, perhaps a few hundred bytes at most.&lt;br /&gt;&lt;br /&gt;The second is that the advent of NoSQL databases has given us a way to delegate the storage of session state. It's now becoming recommended best practice to store session state in a NoSQL database like &lt;a href="http://redis.io/"&gt;Redis&lt;/a&gt; rather than in memory. Delegating session storage is an alternative to session-aware clusters, since the servers can now be a simpler stateless farm and access the NoSQL database for shared session state. What's impressive about Redis in particular is that the complexity of its GET and SET operations is claimed to be of Order(1), i.e., constant time. This means that (in theory at least) one can increase the number of servers using a Redis datastore indefinitely with no impact on performance.&lt;br /&gt;&lt;br /&gt;Now, a horizontally scalable farm of servers can share a Redis datastore and use it to hold the individual sliding windows of message sequence numbers for a number of clients, and also their security tokens. Scalability is no longer a problem, because the data elements are small and the storage/retrieval operations are of constant-time complexity. Failover is also not a problem since the servers themselves are stateless and switchable at run-time.&lt;br /&gt;&lt;br /&gt;It would be good if a standard and application domain-agnostic mechanism could be evolved to provide security and reliability to REST-based interactions, using Redis-style scalable session storage. This may be the long-awaited successor to REST, which &lt;a href="http://www.ics.uci.edu/~rohit/ARRESTED-ICSE.pdf"&gt;Rohit Khare's ARRESTED style&lt;/a&gt; attempted to do (but which has no practical implementation to date).&lt;br /&gt;&lt;br /&gt;That will then leave client/server as my only bugbear with the RESTful style. We'll need another extension to handle that.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-1706472130801628937?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/1706472130801628937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=1706472130801628937' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/1706472130801628937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/1706472130801628937'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/09/does-redis-undermine-key-rest-tenet.html' title='Does Redis Undermine a Key REST Tenet?'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-5239975172977109069</id><published>2011-09-21T20:06:00.000-07:00</published><updated>2011-09-23T20:50:01.932-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='TLS'/><category scheme='http://www.blogger.com/atom/ns#' term='E4X'/><category scheme='http://www.blogger.com/atom/ns#' term='CoffeeScript'/><category scheme='http://www.blogger.com/atom/ns#' term='BEEP'/><category scheme='http://www.blogger.com/atom/ns#' term='Node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>The Return of JavaScript - My Thoughts Crystallise</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I &lt;a href="http://wisdomofganesh.blogspot.com/2011/05/return-of-javascript.html"&gt;wrote&lt;/a&gt; some months ago that JavaScript was back. I've been watching developments in that space with close interest, and a few glimmerings of "the right way forward" have begun to suggest themselves to me.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The first aspect pertains to the language itself. The JavaScript Renaissance has brought with it a desire to do things right the second time around. JavaScript doyen Douglas Crockford &lt;a href="http://yuilibrary.com/theater/douglas-crockford/"&gt;has lectured extensively&lt;/a&gt; (and even written &lt;a href="http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742"&gt;a book&lt;/a&gt;) on the need to use only "the good parts" of JavaScript and avoid the bad ones. It's excellent advice, but to a new generation of JavaScript programmers, I suspect it may not be enough to post warning signs around bad features. We need a way to make it physically impossible to use JavaScript's "bad parts".&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Enter &lt;a href="http://jashkenas.github.com/coffee-script/"&gt;CoffeeScript&lt;/a&gt;. While I haven't played with it too much, I like what I see here. [Update 24/09/2011 - I *have* played with it for a few hours now, and I really like!] There has been &lt;a href="http://www.andrewluetgers.com/2011/09/07/coffeescript-fanboyism-rampant/"&gt;some skepticism&lt;/a&gt; about CoffeeScript from a section of the JavaScript old guard, but that's to be expected. The best answer to such skepticism is from ThoughtWorks's latest &lt;a href="http://www.thoughtworks.com/radar"&gt;Technology Radar&lt;/a&gt; document, which is well worth a read in itself.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;First, even if it seems a trifle off-topic, read what Thoughtworks thinks about &lt;a href="http://code.google.com/webtoolkit/"&gt;GWT&lt;/a&gt;, which is a way to write visual components in Java and have JavaScript-based widgets automatically generated for a web application that runs within a browser:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;blockquote&gt;&lt;i&gt;GWT is a reasonable implementation of a poor architectural choice. GWT attempts to hide many of the details of the web as a platform by creating desktop metaphors in Java and generating JavaScript code to implement them. First, in many ways, JavaScript is more powerful and expressive than Java, so we suspect that the generation is going in the wrong direction. Secondly, it is impossible to hide a complex abstraction difference like that from event-driven desktop to stateless-web without leaky abstraction headaches eventually popping up. Third, it suffers from the same shortcomings of many elaborate frameworks, where building simple, aligned applications is quick and easy, building more sophisticated but not supported functionality is possible but difficult, and building the level of sophistication required by any non-trivial application becomes either impossible or so difficult it isn’t reasonable.&lt;/i&gt;&lt;/blockquote&gt;Now read what Thoughtworks says about CoffeeScript:&lt;/div&gt;&lt;blockquote&gt;&lt;div style="text-align: justify;"&gt;&lt;i&gt;Some readers may be confused by our advocacy of Coffeescript given our general dislike for GWT, because on the surface they seem similar: tools that generate JavaScript. However, it is the level of abstraction that differs. GWT has an elaborate component model, which tries to hide details about the underlying language (JavaScript) and platform (the web). Coffeescript tries to make it easier to write proper JavaScript, avoiding pathological but default “features” of JavaScript, and does not build a layer that tries to insulate you from the platform.&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;I think they've nailed it. I have been ambivalent about GWT for a while, but couldn't quite put my finger on why (i.e., it's a "reasonable implementation of a poor architectural choice"). They've also very cogently argued why CoffeeScript doesn't fall into that category.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;So my first takeway from the JavaScript Renaissance is that today's developers should code in CoffeeScript and not in JavaScript itself. If Java and Scala are two languages that compile to Java bytecode and run on the JVM, then think of JavaScript and CoffeeScript as two languages that "compile to JavaScript" and run within a JavaScript engine. The runtime behaviour is unchanged, but you use the language that works better for you as a developer.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;CoffeeScript is JavaScript with the sharp edges removed. I'm sold. [There is an issue with E4X, which I'll cover when I talk about Nodejs, but it applies equally to CoffeeScript. In short, there's no support for E4X, and I want it!]&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Beyond the choice of language, the direction is not so straightforwardly clear. It's tempting to say that the future of JavaScript on the client is CoffeeScript plus &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;, and the future of JavaScript on the server is CoffeeScript plus &lt;a href="http://nodejs.org/"&gt;Nodejs&lt;/a&gt;. But there are some issues.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;To paraphrase Thoughtworks's critique of GWT, jQuery is an elegant way of working with a horrible object model (the DOM). I don't know if there is any way to replace the DOM with a better client-side abstraction, but until then, the best of client-side goodness will remain somewhat unsatisfactory.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Nodejs is the server-side angel in white from all accounts, but I've heard some valid grumbling about Node as well. The Spanish outfit &lt;a href="http://www.aspl.es/portal/"&gt;ASPL&lt;/a&gt; has a &lt;a href="http://en.wikipedia.org/wiki/BEEP"&gt;BEEP&lt;/a&gt; implementation called &lt;a href="http://www.aspl.es/jsVortex/"&gt;jsVortex&lt;/a&gt;. This JavaScript-based server pre-dates Nodejs, and ASPL was reportedly keen to explore Node as the underlying platform for the next version of jsVortex. However, they quickly realised that Node had no support for TLS at its core. This is not the same as supporting HTTPS, because HTTPS support obviously exists in Node. Think of TLS as HTTPS-like capability for &lt;i&gt;any&lt;/i&gt; protocol, and since BEEP is a framework to create protocols à la carte, and since security is a ubiquitous and pretty strong requirement for most protocols, the lack of TLS support within Node is a serious deficiency for them and for anyone who wants BEEP on the Nodejs platform.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;[Most people might go "BEEP who?", but in my opinion, this is a technology that was sadly delayed by over a decade, perhaps because of personality politics caused by creator Marshall Rose's less-than-smooth interactions with powerful members of standards bodies, who then blocked BEEP from becoming a standard until very recently. If we'd had BEEP 15 years ago, I suspect SOAP and WS-* would have looked very different, and perhaps REST would have looked different too. That's how powerful it is, and I still think it will change our lives one day.]&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Well, so there's a piece of work to be done to enable TLS within the core of Nodejs, but that's not all.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;WSO2's &lt;a href="http://wso2.com/products/mashup-server/"&gt;Mashup Server&lt;/a&gt; was another under-appreciated piece of server-side JavaScript from many years ago, and one of its best features was its support for E4X. It's understandable why WSO2 would be keen on E4X, because their enterprise middleware suite is based on SOAP/XML, and a JSON-only approach would hinder interoperability between Mashup Server and the rest of their product suite. Like everyone else in the server-side JavaScript space, WSO2 is looking at Nodejs as a possible underlying platform for the next generation of Mashup Server, but the leading lights of Node are reportedly not keen on supporting E4X at all. I wonder what the problem is. Surely supporting XML (through E4X) in Node wouldn't come at the cost of supporting JSON! At least the CoffeeScript guys have an excuse for not supporting E4X (not that I'm letting them off the hook for that reason!) because not all browsers support E4X and they don't want to be browser-specific. But Nodejs? I think the throat to choke is &lt;a href="http://code.google.com/p/v8/"&gt;V8&lt;/a&gt;. If V8 supports E4X, then so will Node, and then there'll be pressure on CoffeeScript to support it too, since both Mozilla and V8 do. &lt;a href="http://code.google.com/p/v8/wiki/Contributing"&gt;I asked them for this&lt;/a&gt; 3 years ago, but no dice. Ahem, Google...?&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Then there are the various flavours of web frameworks for Nodejs (&lt;a href="http://documentcloud.github.com/backbone/"&gt;Backbone&lt;/a&gt;, &lt;a href="http://expressjs.com/"&gt;Express&lt;/a&gt;, &lt;a href="http://geddyjs.org/"&gt;Geddy&lt;/a&gt;, etc.), but where is SpringFramework.js? Where is the &lt;a href="http://grails.org/"&gt;Grails&lt;/a&gt;, &lt;a href="http://www.springsource.org/roo"&gt;Roo&lt;/a&gt; or &lt;a href="http://www.playframework.org/"&gt;PlayFramework&lt;/a&gt; equivalent? I certainly hope server-side JavaScript revs up to an equivalent level of maturity as server-side Java double quick. [Server-side Java meandered a fair bit and had many mis-steps along its journey, so server-side JavaScript could get there far faster by learning from Java's mistakes.] Judging by the level of activity in the Nodejs ecosystem, we need not fret on this account. It's just a matter of time before the current effervescence and flux give way to a stable yet rich multi-layered platform.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;So that's my current view in a nutshell:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;* Use CoffeeScript and not raw JavaScript from now on&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;* jQuery is great on the client side, but will no one rid me of this turbulent DOM?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;* Nodejs is The One on the server side, but lacks some critical features (e.g., TLS and E4X). I don't know if they know about broken TLS, but they don't seem to think E4X even belongs in the to-do list, which is a pity if true. I'd like to be proved wrong.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;* We need better server-side frameworks, and these are already on the way. We just need to wait till the dust settles to pick a winner.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I'll post updates as my view evolves.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-5239975172977109069?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/5239975172977109069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=5239975172977109069' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/5239975172977109069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/5239975172977109069'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/09/return-of-javascript-my-thoughts.html' title='The Return of JavaScript - My Thoughts Crystallise'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-2057043970931904740</id><published>2011-09-20T23:28:00.000-07:00</published><updated>2011-09-20T23:30:40.238-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zen'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='tight coupling'/><category scheme='http://www.blogger.com/atom/ns#' term='loose coupling'/><title type='text'>The Zen of Tight Coupling and Loose Coupling</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;After my talk on SOA at WSO2Con 2011, I was inspired to create this fun, Zen-style &lt;a href="http://tnx2ya.mesfichiers.org/en/"&gt;instructive presentation&lt;/a&gt; on what really constitutes tight and loose coupling.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Enjoy!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-2057043970931904740?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/2057043970931904740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=2057043970931904740' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2057043970931904740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2057043970931904740'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/09/zen-of-tight-coupling-and-loose.html' title='The Zen of Tight Coupling and Loose Coupling'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6012754355341198198</id><published>2011-09-18T06:54:00.000-07:00</published><updated>2011-09-18T07:14:32.104-07:00</updated><title type='text'>A Geek's Dream Address in Colombo, Sri Lanka</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;With apologies to Freddy of My Fair Lady:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div style="text-align: justify;"&gt;&lt;span&gt;&lt;i&gt;I have often walked down this street before;&lt;br /&gt;But the pavement always stayed beneath my feet before.&lt;br /&gt;All at once am I several stories high.&lt;br /&gt;Knowing I'm on the street where you live. &lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span&gt;&lt;i&gt;[...]&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span&gt;&lt;i&gt;People stop and stare. They don't bother me.&lt;br /&gt;For there's nowhere else on earth that I would rather be.&lt;br /&gt;Let the time go by, I won't care if I&lt;br /&gt;Can be here on the street where you live.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;This road was very close to the Cinnamon Lakeside Hotel where I stayed when I was in Colombo to attend WSO2Con 2011:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://3.bp.blogspot.com/-1W-byCvfJTs/TnX4jSjOOvI/AAAAAAAADEI/146ezhdS_BI/s1600/P1020475.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-1W-byCvfJTs/TnX4jSjOOvI/AAAAAAAADEI/146ezhdS_BI/s400/P1020475.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5653698192392207090" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;That's the address I'd like to have if I ever relocate to Colombo :-&lt;/i&gt;)&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6012754355341198198?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6012754355341198198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6012754355341198198' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6012754355341198198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6012754355341198198'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/09/geeks-dream-address-in-colombo-sri.html' title='A Geek&apos;s Dream Address in Colombo, Sri Lanka'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-1W-byCvfJTs/TnX4jSjOOvI/AAAAAAAADEI/146ezhdS_BI/s72-c/P1020475.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6388841754872066197</id><published>2011-09-18T01:03:00.000-07:00</published><updated>2011-09-18T14:55:10.744-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Sri Lanka'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2Con'/><title type='text'>Back from WSO2Con 2011</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I'm back home in Sydney after a very enjoyable week in Colombo attending &lt;a href="http://wso2.com/"&gt;WSO2&lt;/a&gt;'s 3-day &lt;a href="http://wso2.com/events/wso2con-2011-colombo/"&gt;conference&lt;/a&gt; as well as the pre-conference and post-conference tutorial sessions flanking it.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-NZlchSFKPQg/TnXWSan4yGI/AAAAAAAADCg/yC85jVEnoHw/s1600/P1020215.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="http://1.bp.blogspot.com/-NZlchSFKPQg/TnXWSan4yGI/AAAAAAAADCg/yC85jVEnoHw/s400/P1020215.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5653660519106136162" /&gt;&lt;/a&gt;&lt;br /&gt;Over the next few days, I'll be posting a detailed trip report with my impressions of the highlights of the conference. In this post, I want to record my overall impressions.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I was highly impressed by a few things.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;One, I could not but be impressed by the rapid rise to prominence of a visionary software company. The "Open Source middleware" niche has only one serious player with &lt;a href="http://wso2.com/products/"&gt;a complete range of offerings&lt;/a&gt;. That's WSO2, a five year old company. This relative newcomer is giving established players like IBM, TIBCO and Oracle a good run for their money. I have no doubt that middleware prices will come down in a few years from their current extortionate levels to something much more reasonable, and the credit will go in large measure to WSO2's disruptive impact on the market.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Two, I also had to marvel at the achievements of a &lt;i&gt;country&lt;/i&gt;. I spoke to a few Indian delegates at the conference, and we all agreed that in spite of the huge number of Indian IT professionals and some very large Indian IT companies, no one in India has achieved (or even attempted) what a relatively small Sri Lankan company (WSO2) has pulled off. In hindsight, it shouldn't have been too hard. Take some software products from the Apache stable, enhance them to make them usable by corporate customers, release the lot again under an Apache licence, and charge customers for just support and professional services. It takes some vision of course, but a lot more courage and conviction, and WSO2's CEO Sanjiva Weerawarana has that in spades. It has been his determination that Sri Lanka should be a leading Open Source nation, not just in terms of usage but in terms of contribution, that has led to the success of WSO2. Today, I'm told Sri Lanka ranks third in the world in terms of Open Source contribution, behind the US and Germany. It would be good if Indian companies and professionals took inspiration from their smaller neighbour and started contributing to the world through Open Source.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I was also very glad to see the number of Sri Lankans (not just WSO2 employees but also others from Universities and the like) using Ubuntu Linux on their laptops. I felt right at home after a long time of appearing like a curiosity. Indian and Australian professionals, on the other hand, seem to have sold their souls to Microsoft (or else to Apple). Any argument that Linux is "not there yet" is just an excuse. These people have been using Linux exclusively and are none the worse for the experience. They also have a bit more cash left in their pockets as a result of their choice :-).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Three, I was very impressed with the way the conference was organised. Everything went like clockwork. Events started and ended (largely) on time with very few overruns. Sri Lanka follows Indian Standard Time, but fortunately, the other connotations of the term have not been infectious ;-). &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;There were distinguished speakers from around the world, giving the conference an international flavour. This was not just a Sri Lankan affair.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-u0FRdLK9nYc/TnXcOXnVcQI/AAAAAAAADDY/jOodATXn0tU/s1600/P1020231.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="http://2.bp.blogspot.com/-u0FRdLK9nYc/TnXcOXnVcQI/AAAAAAAADDY/jOodATXn0tU/s400/P1020231.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5653667046648803586" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;IBM Fellow C Mohan giving the main keynote speech of the conference&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-uaNdsWYIPok/TnXc_fG-VMI/AAAAAAAADDg/aY78qs7PW9M/s1600/P1020393.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-uaNdsWYIPok/TnXc_fG-VMI/AAAAAAAADDg/aY78qs7PW9M/s400/P1020393.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5653667890474144962" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Gregor Hohpe, author of Enterprise Integration Patterns, giving another keynote speech on the final day of the conference&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-s_BKaGZJpAM/TnXi0iwjgSI/AAAAAAAADD4/vliPA2MzJ6M/s1600/P1020343.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-s_BKaGZJpAM/TnXi0iwjgSI/AAAAAAAADD4/vliPA2MzJ6M/s400/P1020343.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5653674299545059618" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;eBay's Distinguished Architect Sastry Malladi gave a talk and participated in a "fireside chat" to talk about, among other topics, eBay's use of WSO2's ESB to process a billion transactions a day&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-pB9j3wSA_1A/TnXeMx-IeQI/AAAAAAAADDo/XXAMVySU0g8/s1600/P1020408.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-pB9j3wSA_1A/TnXeMx-IeQI/AAAAAAAADDo/XXAMVySU0g8/s400/P1020408.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5653669218387261698" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;David Schumm of the Institute of Architecture of Application Systems (IAAS), Stuttgart, talking about BPM research at his institute based on WSO2 Business Process Server and similar products&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-VLzKEy4JMlE/TnXe39ulgWI/AAAAAAAADDw/CEmz0BMirdk/s1600/P1020350.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-VLzKEy4JMlE/TnXe39ulgWI/AAAAAAAADDw/CEmz0BMirdk/s400/P1020350.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5653669960277655906" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Dmitry Lukyanov, Head of Integration Solutions, Alfa Bank, Ukraine, talking about his bank's positive experience with the WSO2 middleware suite&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-cgOzNN2SpOs/TnXy5Drhw_I/AAAAAAAADEA/IcFnNdA78R0/s1600/P1020281.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="http://1.bp.blogspot.com/-cgOzNN2SpOs/TnXy5Drhw_I/AAAAAAAADEA/IcFnNdA78R0/s400/P1020281.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5653691969287865330" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Cognizant's Principal Architect Dipanjan Sengupta's presentation demonstrating the interoperability between IBM's WebSphere Service Registry &amp;amp; Repository (WSRR) and WSO2's Governance Registry, was very well receive&lt;/i&gt;d&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Catering was top-class, though some of the Western delegates found the food excessively spicy. (I had no complaints, except that I have probably put on some weight ;-). The hotel accommodation and local transport were great and there were no snafus of any kind. It was testimony to the conscientiousness and attention to detail that the people involved displayed.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Four, I realised that the conference was a showcase not just for WSO2's technology but also for Sri Lankan culture. Every evening, after the main technical events were over, there was some cultural program or the other that was fascinating. Day One had an elephant ride (with people able to feed the elephant by hand before the rides got started). &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-HiGhJtyiTRc/TnXXEeb0ZMI/AAAAAAAADCo/Eh6KxLbh_1k/s1600/P1020290.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="http://1.bp.blogspot.com/-HiGhJtyiTRc/TnXXEeb0ZMI/AAAAAAAADCo/Eh6KxLbh_1k/s400/P1020290.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5653661379122717890" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;There was also a very interesting talk and slideshow by a conservationist on "human-elephant conflict" and possible solutions, with very moving and often tragic stories about individual elephants. Then there was a set of folk dances that I can hardly do justice to with mere words or even pictures. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-eZ75I3tl7Ww/TnXYIEjSj1I/AAAAAAAADCw/vh2MXqMVnlQ/s1600/P1020300.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="http://2.bp.blogspot.com/-eZ75I3tl7Ww/TnXYIEjSj1I/AAAAAAAADCw/vh2MXqMVnlQ/s400/P1020300.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5653662540405837650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-e-cyFWR_fqY/TnXYIXaaBtI/AAAAAAAADC4/85UB6NSrIfc/s1600/P1020301.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="http://3.bp.blogspot.com/-e-cyFWR_fqY/TnXYIXaaBtI/AAAAAAAADC4/85UB6NSrIfc/s400/P1020301.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5653662545468851922" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Day Two's cultural event was a Jam Session, where WSO2's employees enthralled the crowd with their musical talent. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://1.bp.blogspot.com/-xFN6u4tO5Rg/TnXZw6v27pI/AAAAAAAADDA/Dm31br3eG18/s1600/P1020368.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-xFN6u4tO5Rg/TnXZw6v27pI/AAAAAAAADDA/Dm31br3eG18/s400/P1020368.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5653664341660462738" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;That, and the musical talents of CTO Paul Fremantle and VP (Business Development &amp;amp; Product Design) Jonathan Marsh, made me think one needs to have musical ability as well as software competency in order to work at WSO2! &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://1.bp.blogspot.com/-loo7YExMDcQ/TnXaJABhYxI/AAAAAAAADDI/3ou9aXunU50/s1600/P1020388.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-loo7YExMDcQ/TnXaJABhYxI/AAAAAAAADDI/3ou9aXunU50/s400/P1020388.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5653664755393585938" /&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Fremantle and Marsh present a musical mashup (In India, it would be called a Jugalbandi&lt;/i&gt;)&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;On Day Three, a well-known local group "Bathiya and Santhush" (rather like Shaan or Hariharan in India) performed and the whole crowd danced to their music. The lyrics were in Sinhala, but the beat had universal appeal.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://3.bp.blogspot.com/-M5Kg52-g4is/TnXarY3qYGI/AAAAAAAADDQ/diklaP0H7cY/s1600/P1020437.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-M5Kg52-g4is/TnXarY3qYGI/AAAAAAAADDQ/diklaP0H7cY/s400/P1020437.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5653665346178670690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;That was WSO2Con at a glance, and I'm sure next year's event will be even bigger and better. Those who missed this year's experience should try not to miss the next!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;(Disclosure: I am in advanced negotiations with WSO2 to join them in a suitable role reporting to the CTO. While this obviously makes me an interested party, I promise not to make any statements or representations about the company and its products that I do not sincerely believe in. My decision to consider a position with WSO2 is itself driven by my conviction that (1) their product suite is fit for purpose and very good value for money, (2) the company operates in accordance with the ideals of Open Source - there is no proprietary version of any of their products, and (3) there is a good cultural fit because I like the people and the company culture (they never use the word "resource" for people) and found myself getting along very well with people across the organisation. Regardless of my relationship with the company, I'm determined to remain a voice that readers of this blog can trust, because I'm acutely conscious that my independent stance on technology matters has always been my biggest source of credibility as a commentator.)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6388841754872066197?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6388841754872066197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6388841754872066197' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6388841754872066197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6388841754872066197'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/09/back-from-wso2con-2011.html' title='Back from WSO2Con 2011'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-NZlchSFKPQg/TnXWSan4yGI/AAAAAAAADCg/yC85jVEnoHw/s72-c/P1020215.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6143209684644699918</id><published>2011-09-15T17:46:00.000-07:00</published><updated>2011-09-17T22:19:04.809-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gregor Hohpe'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise integration patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2Con'/><title type='text'>Gregor Hohpe's Talk at WSO2Con 2011 on Enterprise Integration Patterns</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I had the pleasure of attending Gregor Hohpe's keynote speech on the third and final day of WSO2Con in Colombo. (The conference was a hugely successful affair, by the way, judging by the quality of the talks and the fact that the attendance far exceeded expectations.)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Gregor's talk was a reference to his famous book "&lt;a href="http://www.eaipatterns.com/"&gt;Enterprise Integration Patterns&lt;/a&gt;", and was titled "Enterprise Integration Patterns - Past, Present and Future". (For all his achievements and fame, Gregor is an endearingly unassuming man, as I found when I spoke to him person-to-person. He's also a very humorous speaker, and kept the audience in titters during his keynote.)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;When he came to the Future part of the talk, one of the many gems he let slip was his insight that his famous book was really about Messaging Patterns, in which case it would be the first of four volumes (the other three devoted to Conversations, Processes and Events). He specifically called for two things from the audience and the community in general - some ideas on notation for these more complex patterns, and for exerting guilt-inducing pressure on him so he would actually write the books!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I have been interested in the Distributed Computing area for a long time (I would in fact have called these "Distributed Computing Patterns", because they are not specific to enterprise contexts, and the purpose of the interactions isn't always integration).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;In any case, this is how I see the four volumes of the book that Gregor described, and how they would relate to each other. I would like to mail him on these ideas and I'm sure I'll have an interesting conversation.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-iu3PCtSj8gM/TnKeoDKBYeI/AAAAAAAAC3I/sC-Llk5kEg0/s1600/Enterprise%2BIntegration%2BPatterns%2Bv1_0.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 283px;" src="http://2.bp.blogspot.com/-iu3PCtSj8gM/TnKeoDKBYeI/AAAAAAAAC3I/sC-Llk5kEg0/s400/Enterprise%2BIntegration%2BPatterns%2Bv1_0.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5652754893182689762" /&gt;&lt;/a&gt;"Messaging" is really the most generic description of a class of distributed computing systems. It also takes a top-down, system-wide focus (a "God" view). One can think of specific subsets of these generic interactions, and one can also shift focus from the overall system to a particular node. So, as we add a statefulness aspect to messaging, we begin to enable conversations. And as the purpose of the conversations becomes coordination (one participant controlling the others), we have (process) orchestration. Somewhere along the way, we can explicitly consider multi-way messaging, i.e., between multiple peers.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;When we shift focus to a single node, we have an event-driven system because incoming messages at any node are "events". And when we take a set of event-driven nodes and consider them in aggregate, we have a choreographed system, where each node is ignorant of the existence of other nodes and only responds to events, and the system as a whole "works" because of these inter-related events. The design of a choreographed system is really the design of appropriate events, since the previous step (event-driven systems) has already designed the behaviour of the individual nodes.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;So that's my simple view of the Distributed Computing universe. I also have a more complex diagram that I created a few years ago to explain how the various facets of distributed computing are related.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-m5F-X8dDApA/TnV9NqzlvrI/AAAAAAAADCE/lTdZqy5SafE/s1600/The%2BUniverse%2Bof%2BDistributed%2BComputing.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 284px;" src="http://3.bp.blogspot.com/-m5F-X8dDApA/TnV9NqzlvrI/AAAAAAAADCE/lTdZqy5SafE/s400/The%2BUniverse%2Bof%2BDistributed%2BComputing.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5653562581015969458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6143209684644699918?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6143209684644699918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6143209684644699918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6143209684644699918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6143209684644699918'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/09/gregor-hohpes-talk-at-wso2con-2011-on.html' title='Gregor Hohpe&apos;s Talk at WSO2Con 2011 on Enterprise Integration Patterns'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-iu3PCtSj8gM/TnKeoDKBYeI/AAAAAAAAC3I/sC-Llk5kEg0/s72-c/Enterprise%2BIntegration%2BPatterns%2Bv1_0.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-7706616231286719878</id><published>2011-08-30T02:56:00.000-07:00</published><updated>2011-08-30T13:10:06.168-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2Con'/><title type='text'>Preparing for WSO2Con 2011</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Well, it looks like I'm going to be attending &lt;a href="http://wso2.com/"&gt;WSO2&lt;/a&gt;'s annual technical conference &lt;a href="http://wso2.com/events/wso2con-2011-colombo/"&gt;WSO2Con&lt;/a&gt; in Colombo this September (12th-16th). It'll be good to hear speakers from around the world speak about SOA-related topics and the &lt;a href="http://wso2.com/products/"&gt;WSO2 product suite&lt;/a&gt; in particular. I believe the latter is one of the SOA industry's best-kept secrets. Here is a comprehensive suite of middleware products that is completely Open Source, and for which commercial support is available at very reasonable rates. I'm surprised more organisations aren't using it. Perhaps the awareness wave is just breaking and we'll see a surge in adoption in the next couple of years. Let's see.&lt;br /&gt;&lt;br /&gt;I'm also slated to conduct an introductory tutorial on SOA on the first day of the conference, and I'm excited about that. Over the last few years, I've been developing a few ideas on "Practical SOA for Solution Architects" that I'd like to present, and I'm eager to get feedback on that approach.&lt;br /&gt;&lt;br /&gt;What I've seen to my disappointment over the past several years is that in spite of extensive coverage of SOA in the IT industry, the actual payoff from the application of SOA is embarrassingly low. In fact, I hear from sources in large IT shops that have rolled out multi-million dollar SOA initiatives that the cost of building services today is &lt;span style="font-style: italic;"&gt;higher&lt;/span&gt; than in the past when older EAI techniques were used.&lt;br /&gt;&lt;br /&gt;I've been puzzled at this, and have discussed it at length with colleagues and peers. It looks like three different factors are at work.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Cynicism&lt;/span&gt;: There is a view among many IT professionals that SOA is yet another buzzword that has come and gone, and it's no longer relevant to the industry. So they don't even bother to learn what it's about.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;The theory-practice gap&lt;/span&gt;: Lots of IT folk have been exposed to core SOA concepts ("Loose coupling"), but they don't seem to be able to apply it in real-world solution designs. SOA remains in the realm of theory, which is a pity, because it can be a real money-saver.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Products as surrogates for principles&lt;/span&gt;: Organisations have collectively spent a packet on SOA products from IBM, TIBCO, Oracle and the like, but the actual solution designs being produced in-house for business projects are as tightly-coupled as ever, suggesting that IT practitioners seem to think the use of SOA products is an adequate substitute for Service-Oriented application design.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;I have come to the conclusion that what's required is a new approach to &lt;span style="font-style: italic;"&gt;educating&lt;/span&gt; people about SOA. It has to be less theoretical and more focused on real-world situations. And it has to be lightweight, because people are busy and don't have the attention span required for a heavyweight methodology. Above all, it has to be sound, because we don't want to spread incorrect practices in the name of simplicity.&lt;br /&gt;&lt;br /&gt;I'm preparing a whitepaper on this, and it will probably be released through WSO2, since a lot of the encouragement for it has come from &lt;a href="http://en.wikipedia.org/wiki/Sanjiva_Weerawarana"&gt;Sanjiva Weerawarana&lt;/a&gt;, WSO2's CEO. It's only fitting that WSO2 get the credit for bringing this educational tool to a wider audience.&lt;br /&gt;&lt;br /&gt;I'll also be posting my slides from the conference on this blog when I'm done. I'm sure they'll also be available from the WSO2Con conference website.&lt;br /&gt;&lt;br /&gt;Stay tuned.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-7706616231286719878?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/7706616231286719878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=7706616231286719878' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/7706616231286719878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/7706616231286719878'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/08/preparing-for-wso2con-2011.html' title='Preparing for WSO2Con 2011'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6119878833986845120</id><published>2011-07-31T08:20:00.001-07:00</published><updated>2011-07-31T08:29:29.913-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IAM'/><category scheme='http://www.blogger.com/atom/ns#' term='Access Management'/><category scheme='http://www.blogger.com/atom/ns#' term='LIMA'/><category scheme='http://www.blogger.com/atom/ns#' term='Identity Management'/><title type='text'>Identity Management on a Shoestring - The LIMA Approach</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Umesh Rajbhandari and I have documented the design of an Identity and Access Management (IAM) system that we successfully built for a large Australian corporation. We call our unique architectural approach "LIMA" (Lightweight/Low-cost/Loosely-coupled Identity Management Architecture).&lt;br /&gt;&lt;br /&gt;The document describing LIMA is &lt;a href="http://e8rqk8.mesfichiers.org/en/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6119878833986845120?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6119878833986845120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6119878833986845120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6119878833986845120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6119878833986845120'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/07/identity-management-on-shoestring-lima.html' title='Identity Management on a Shoestring - The LIMA Approach'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6907008606736875847</id><published>2011-05-23T23:29:00.001-07:00</published><updated>2011-05-23T23:42:03.524-07:00</updated><title type='text'>Practical SOA Building Blocks</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;I'll make this short. This post is not a theoretical discussion of what SOA is. This is a practical guide to the core physical components required to build a "traditional" SOA-based ecosystem.&lt;br /&gt;&lt;br /&gt;I believe there are three basic components required - a Service Container, a Broker and a Process Engine.&lt;br /&gt;&lt;br /&gt;A Service Container is used when implementing business logic to expose as a service.&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-i6MjN6-pGIM/TdtQqX6WMqI/AAAAAAAAByQ/eEwlCQ-lkOE/s1600/service-container.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 200px;" src="http://1.bp.blogspot.com/-i6MjN6-pGIM/TdtQqX6WMqI/AAAAAAAAByQ/eEwlCQ-lkOE/s400/service-container.png" alt="" id="BLOGGER_PHOTO_ID_5610166449723552418" border="0" /&gt;&lt;/a&gt;A Broker is used to connect to legacy business logic through mediation, routing or transformation.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-MAEsI81CdS0/TdtQql4rcXI/AAAAAAAAByY/VngiK2oYFqU/s1600/broker.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 201px;" src="http://3.bp.blogspot.com/-MAEsI81CdS0/TdtQql4rcXI/AAAAAAAAByY/VngiK2oYFqU/s400/broker.png" alt="" id="BLOGGER_PHOTO_ID_5610166453474652530" border="0" /&gt;&lt;/a&gt;A Process Engine is used to coordinate two or more services into a process and expose that as a composite service.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-GnsbgzdVIHU/TdtSQl6IvgI/AAAAAAAAByo/tHePskOwGC0/s1600/process-engine.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 200px;" src="http://4.bp.blogspot.com/-GnsbgzdVIHU/TdtSQl6IvgI/AAAAAAAAByo/tHePskOwGC0/s400/process-engine.png" alt="" id="BLOGGER_PHOTO_ID_5610168205827423746" border="0" /&gt;&lt;/a&gt;We put these together in different combinations to build out the specific business processes we need. Needless to say, what we run on these components should be reusable, so their interfaces need to be generic, yet extensible. Good data design is required for this.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6907008606736875847?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6907008606736875847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6907008606736875847' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6907008606736875847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6907008606736875847'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/05/practical-soa-building-blocks.html' title='Practical SOA Building Blocks'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-i6MjN6-pGIM/TdtQqX6WMqI/AAAAAAAAByQ/eEwlCQ-lkOE/s72-c/service-container.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-2139622816838336245</id><published>2011-05-18T07:30:00.000-07:00</published><updated>2011-05-18T08:49:16.757-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Node.js'/><title type='text'>The Return of JavaScript</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Hardly had I begun to play with &lt;a href="http://nodejs.org/"&gt;Node.js &lt;/a&gt;when a friend pointed me to &lt;a href="http://news.cnet.com/8301-30685_3-20063563-264.html"&gt;this news item&lt;/a&gt; about JavaScript being used &lt;a href="http://bellard.org/jslinux/tech.html"&gt;to run Linux&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Déjà vu all over again.&lt;br /&gt;&lt;br /&gt;Some months ago, after the perceptible pall that descended on Java with the Oracle takeover of Sun, a group of tech enthusiast friends of mine opined that the time was ripe for a new technology. Java was now legacy. It would continue to grow and influence, of course, but its glory days were over. Java had been a shooting star under Sun. Under Oracle, it was now a cash cow. The next paradigm shift would therefore have to come from a new technology altogether. Much as we might pride ourselves as technology futurists, we only struggled to pierce the veil. We spoke about Android, cloud computing, NVIDIA processors and Web 3.0, but none of us imagined that the revolution would come from an established and very familiar technology.&lt;br /&gt;&lt;br /&gt;JavaScript is as old as the web, and born close on the heels of Java, which explains its confusingly similar name. (Well-meaning managers at leading technology companies were known to discourage programmers from writing JavaScript because they heard that the corporate firewalls were configured to block Java applets. Microsoft evangelist Stephen Jeffries even ruined a perfectly credible sales pitch for Microsoft technology in 1999 by claiming to have written "some Java scripts", which were inferior to his company's offerings, of course.)&lt;br /&gt;&lt;br /&gt;Naming confusion aside, not many will remember that in the early days of the web (circa 1995), Netscape not only had a browser (the legendary Navigator), but also a web server, a directory server, a certificate server and many other components of a web-based ecosystem. JavaScript was a Netscape invention, and the Netscape web server could run Java servlets as well as JavaScript code.  There was an attribute that could be used with the "script" tag in HTML, which was "runAt = 'server' ". JavaScript running on the server - imagine that!&lt;br /&gt;&lt;br /&gt;But that initial innovation died out shortly after. JavaScript became a purely client-side phenomenon. Other languages, notably Java and PHP (and ASP in the Microsoft world) took over the server side.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The next time I heard of JavaScript running on the server side, it was in the context of WSO2's highly innovative &lt;a href="http://wso2.com/products/mashup-server/"&gt;Mashup Server&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;Server-side JavaScript was still a rare phenomenon, and had the faint aroma of a toy system to boot. After all, serious software was written in Java. JavaScript was at best useful to demonstrate clever ideas. It wasn't production strength.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now along comes Node.js with its innovative thesis about how to do I/O right. Ryan Dahl &lt;a href="http://blip.tv/jsconfeu/ryan-dahl-node-js-2918890"&gt;explains the philosophy&lt;/a&gt; in a way that appears obvious in hindsight. When you see the numbers he puts up comparing the CPU cycles for different levels of I/O, it becomes extremely clear that it's criminally wasteful of computing resources to wait on disk and network I/O.&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:sans-serif;font-size:85%;"  &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style=";font-family:sans-serif;font-size:85%;"  &gt;L1 cache: 3 cycles&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:sans-serif;font-size:85%;"  &gt;L2 cache: 14 cycles&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:sans-serif;font-size:85%;"  &gt;RAM: 250 cycles&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:sans-serif;font-size:85%;"  &gt;Disk: 41,000,000 cycles&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:sans-serif;font-size:85%;"  &gt;Network: 240,000,000 cycles&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Node.js boasts a single event loop which, combined with its absolute &lt;span style="font-style: italic;"&gt;refusal&lt;/span&gt; to block on any external I/O operation, allows it to scale up to ridiculous levels of concurrency. Add to that the simplicity, flexibility and familiarity of the JavaScript language, and the runaway popularity of Node.js becomes understandable. I'm personally blown away.&lt;br /&gt;&lt;br /&gt;Even Ryan Dahl, its inventor, struggles to explain what Node.js &lt;span style="font-style: italic;"&gt;is&lt;/span&gt; (beyond the obvious fact that it's a bunch of libraries on top of Google's V8 JavaScript virtual machine). That's because Node.js is nothing less than a new platform for innovation. It's clay in the hands of a new generation of developers, and fascinating new products (Node.js modules and frameworks) are emerging.&lt;br /&gt;&lt;br /&gt;I think one of these will be a rich GUI library to rival the offerings from Adobe. It will be possible to build extremely flexible and lightweight client apps with rich user interfaces very soon. Web forms will soon seem clunky, because we can soon have web applications without web forms.&lt;br /&gt;&lt;br /&gt;Another phenomenon that Node.js will enable is peer-to-peer systems. I believe we've outgrown the synchronous request-response behaviour of the traditional web. Something new and big is coming soon.&lt;br /&gt;&lt;br /&gt;So move over, Java. Here comes JavaScript.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-2139622816838336245?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/2139622816838336245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=2139622816838336245' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2139622816838336245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2139622816838336245'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/05/return-of-javascript.html' title='The Return of JavaScript'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-8895938042314382097</id><published>2011-05-03T06:56:00.000-07:00</published><updated>2011-05-03T07:06:38.816-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Server-side JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='V8'/><title type='text'>The Magic of Node.js</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;A while ago, Google came out with a high-performance JavaScript engine called &lt;a href="http://bit.ly/17rYTb"&gt;V8&lt;/a&gt;. This is what powers the Chrome browser.&lt;br /&gt;&lt;br /&gt;Now along comes an Open Source project called &lt;a href="http://nodejs.org/"&gt;Node.js&lt;/a&gt; (or simply Node) that wraps V8 with networking capabilities, enabling some very cool JavaScript-based servers (HTTP or TCP) to be written with just a few lines of code. Servers written for Node are non-blocking and multi-tasking without having to be multi-threaded (the demo below explains more), which also makes them very fast and scalable. This is server-side JavaScript at its best.&lt;br /&gt;&lt;br /&gt;This &lt;a href="http://bit.ly/eDdYBL"&gt;hour-long demo&lt;/a&gt; is worth watching. I haven't been so amazed since I saw &lt;a href="http://wisdomofganesh.blogspot.com/2009/06/javaone-2009-day-five-05062009.html"&gt;Scott Davis demonstrate Groovy &lt;/a&gt;at JavaOne 2009.&lt;br /&gt;&lt;br /&gt;The only downside (not to me, though ;-) is that Node currently only works on Unix-like systems (Linux, Mac) and not yet on Windows. You also have to compile from source (no binaries yet), which is not a big deal because you only have to type "./configure". "make" and "sudo make install" one after the other in the main directory once you've unzipped the tar.gz file using "tar zxvf node-VERSION.tar.gz".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://refcards.com/"&gt;Refcards&lt;/a&gt; has a &lt;a href="http://refcardz.dzone.com/refcardz/nodejs-building-scalability"&gt;reference card for Node.js&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There are some great possibilities here, such as when you combine this with &lt;a href="http://bit.ly/hdPcJ7"&gt;E4X&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-8895938042314382097?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/8895938042314382097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=8895938042314382097' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/8895938042314382097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/8895938042314382097'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2011/05/magic-of-nodejs.html' title='The Magic of Node.js'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-9223159029232444455</id><published>2010-10-19T04:10:00.000-07:00</published><updated>2010-10-19T04:28:24.938-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Telstra'/><category scheme='http://www.blogger.com/atom/ns#' term='Australia Post'/><category scheme='http://www.blogger.com/atom/ns#' term='monopoly'/><title type='text'>How Disruptive Innovations Can Upset Monopolies</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Monopolies give me heartburn, and what warms my heart is the prospect of monopolies being overthrown.&lt;br /&gt;&lt;br /&gt;Two Australian examples of the latter were in the news recently.&lt;br /&gt;&lt;br /&gt;Monopolist Telstra is &lt;a href="http://www.couriermail.com.au/business/telstra-under-pressure-over-sliding-revenues-and-broadband-uncertainty/story-e6freqmx-1225932082814"&gt;feeling the heat&lt;/a&gt; from mobile phones. The exodus of customers giving up their fixed lines is turning into a stampede. In a few years, landlines will seem an anachronism. Apparently, there is higher demand for speed and data that is "difficult to monetise". Translation: It's impossible to charge monopoly rents on commodities. Hasta la vista, Telstra.&lt;br /&gt;&lt;br /&gt;Australia Post is &lt;a href="http://www.theaustralian.com.au/business/email-slashes-post-revenue-as-profit-plunges-65pc/story-e6frg8zx-1225939385500"&gt;being squeezed&lt;/a&gt; by email. It's amazing that a 4.2 percent fall in postal volume can result in a 65 percent fall in profit. Of course, there were other costs as well, but this is dramatic. With more and more communications going electronic, it's hard to see how Australia Post is going to stay relevant. There'll be electronic media, and there'll be courier services, with nothing left over for the postal monopoly. We live in a post-&lt;span style="font-style: italic;"&gt;post&lt;/span&gt; world.&lt;br /&gt;&lt;br /&gt;The takeaway for me is that monopolies may stifle innovation up to a point, but a wave of innovation of a higher order will eventually overthrow them.&lt;br /&gt;&lt;br /&gt;My cup of joy runneth over.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-9223159029232444455?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/9223159029232444455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=9223159029232444455' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/9223159029232444455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/9223159029232444455'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/10/how-disruptive-innovations-can-upset.html' title='How Disruptive Innovations Can Upset Monopolies'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6811916651538415793</id><published>2010-08-02T02:48:00.000-07:00</published><updated>2010-08-02T03:00:16.129-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile app'/><category scheme='http://www.blogger.com/atom/ns#' term='HereDo'/><title type='text'>HereDo - An Idea for a Mobile App</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;I don't know if this has been thought of before, but it's an app I would appreciate.&lt;br /&gt;&lt;br /&gt;I enter a list of tasks into my mobile device, along with a hint as to where I need to do them (e.g., I need to buy a bicycle pump the next time I pass by the cycle shop near my iridologist's clinic). When I next go to my iridologist, my GPS-smart device gives me a friendly reminder to buy the pump.&lt;br /&gt;&lt;br /&gt;Places need not be exclusive. "Outside" could be a place that includes all places outside. My device can then show me a list of all the things I can do when I step outside the house.&lt;br /&gt;&lt;br /&gt;Urgency and radius may also be parameters. When I step outside, I would appreciate being reminded to do the urgent things first. If I'm driving past a friend's suburb, I would appreciate a reminder to pick up that DVD he'd promised to lend me, if it's not too much of a detour.&lt;br /&gt;&lt;br /&gt;I think of HereDo as a short form for "What can I &lt;span style="font-style: italic;"&gt;do&lt;/span&gt; now that I'm &lt;span style="font-style: italic;"&gt;here&lt;/span&gt;?"&lt;br /&gt;&lt;br /&gt;The number of times I've cursed myself thinking, "I was there just this morning! I  should have done XYZ when I was there!" means this will be a very useful app.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6811916651538415793?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6811916651538415793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6811916651538415793' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6811916651538415793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6811916651538415793'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/08/heredo-idea-for-mobile-app.html' title='HereDo - An Idea for a Mobile App'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6692194438623333464</id><published>2010-06-30T03:05:00.001-07:00</published><updated>2010-06-30T14:01:36.173-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='idempotence'/><category scheme='http://www.blogger.com/atom/ns#' term='watermark'/><category scheme='http://www.blogger.com/atom/ns#' term='UUID'/><title type='text'>The Case for Watermarked UUIDs</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;&lt;blockquote&gt;&lt;/blockquote&gt;UUIDs are my latest toy&lt;/span&gt; &lt;span style="font-style: italic;"&gt;&lt;br /&gt;They fill my little world with joy&lt;/span&gt; &lt;/blockquote&gt;&lt;/div&gt;Forgive me for waxing lyrical. The more I play with UUIDs, the more wonderful uses I find for them.&lt;br /&gt;&lt;br /&gt;Take one-time tokens used for idempotence, for instance.&lt;br /&gt;&lt;br /&gt;Joe Gregorio's &lt;a href="http://bitworking.org/news/201/RESTify-DayTrader#uniqueness"&gt;nugget&lt;/a&gt; on how to use UUIDs with hashes to prevent spoofing got me thinking. What if the hash could be hidden in the UUID itself? UUIDs are so roomy and spacious, they can tuck a lot of things inside without losing their core property of universal uniqueness.&lt;br /&gt;&lt;br /&gt;But first, a summary of Joe's piece for those too impatient to go over and read it.&lt;br /&gt;&lt;br /&gt;Idempotence is (or should be!) a basic concept that all IT folk are familiar with. Performing an idempotent operation more than once has exactly the same effect as doing it once. The way this is commonly implemented is through the use of one-time tokens. [If you do a 'View Source' on your bank's transaction confirmation page (the one that asks "Are you sure?"), you may see a hidden form variable with a large random value. That's the one-time token the bank uses to ensure that you don't end up posting a transaction twice even if you hit the submit button twice. It's a wonderful way to ensure a measure of reliability over an unreliable Internet.]&lt;br /&gt;&lt;br /&gt;Joe Gregorio suggests the use of UUIDs as one-time tokens for RESTful idempotent services, but also raises a potential problem with the use of raw UUIDs. Anyone can spoof a token by just generating a UUID. For a server to be able to recognise that a UUID is a genuine one-time token that it itself had handed out earlier, it would normally be expected to store the token somewhere so it can verify it when it's presented later on. But such a naive design would open the server up to a "resource exhaustion attack". A malicious user (or bot) can swamp the server with millions of requests for one-time tokens, and the server's database will rapidly fill up with useless UUIDs that are never going to be used.&lt;br /&gt;&lt;br /&gt;To address this, Joe suggests a hash. If the generated UUID is combined with a secret string that only the server knows, and this combination is hashed, then the combination of UUID and hash will let the server validate its genuineness, because no one else can generate a valid hash for a random UUID without knowing the server's secret string. In Joe's model, the one-time token is not the raw UUID, but a combination of the UUID and a hash. With this design, the server doesn't have to store a one-time token when it's handed out, only when it's actually used to perform a transaction. The number of such UUIDs can be controlled, because spoofed UUIDs can be filtered out through a mere computational check.&lt;br /&gt;&lt;br /&gt;I think this solution is elegant and ingenious, but I believe it can be made even more "clean".&lt;br /&gt;&lt;br /&gt;A UUID looks like this:&lt;br /&gt;&lt;br /&gt;e5b0eb4c-aeb9-411c-bf3f-cdd207096d3e&lt;br /&gt;&lt;br /&gt;It consists of 5 groups of hex characters separated by hyphens, and the regular expression for it is&lt;br /&gt;&lt;br /&gt;[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}&lt;br /&gt;&lt;br /&gt;What I want to do is replace the last set of 12 hex characters with another one representing a hash (or at least part of a hash). Then, while the UUID will still look like a UUID (and indeed, will &lt;span style="font-style: italic;"&gt;be&lt;/span&gt; a valid UUID), it is in effect "watermarked" by the server and can be verified by computation alone.&lt;br /&gt;&lt;br /&gt;What do we lose?&lt;br /&gt;&lt;br /&gt;Mathematically, we lose a great deal of uniqueness. We're now dealing with just 20 hex characters instead of 32 (It's not 24, because the 4 hyphens don't count). 20 characters are still a lot, and we actually get something back through the 12-character hash, because this is calculated not just on the 20-character UUID prefix but on the combination of the prefix and the server's secret string. So it's an independent 12-character hex string, and while it may be a more sparse range than its length may suggest, it's still something. So I don't believe we lose too much from a uniqueness perspective. UUIDs are so huge you can trim them and still not encounter conflicts.&lt;br /&gt;&lt;br /&gt;Is there a danger that some random UUID out there may accidentally be computed as a valid watermarked UUID because its last 12 characters miraculously match the hash? Well, the probability of this is 1 in 16 raised to the power 12, which is about 1 in 3 quadrillion. I'd take my chances.&lt;br /&gt;&lt;br /&gt;Architecturally, it would seem that we have introduced meaning into what should have been a meaningless identifier, and that would then open the door to implicit dependencies (tight coupling) and consequent brittleness. However, on closer inspection, there is no way an external system can seek to build any dependency on the structure of a watermarked UUID, because without a knowledge of the server's secret string, the hash cannot be externally calculated. The UUID remains necessarily opaque to all external parties. The implicit dependency of one part of the UUID on another would seem to be a limitation too, but this is by design! The "limitation" serves to exclude spoofed UUIDs.&lt;br /&gt;&lt;br /&gt;And so, I believe there is no real downside to the use of watermarked UUIDs. On the contrary, they retain the visual elegance of plain UUIDs and furthermore simplify the design of idempotent services by encapsulating the entire token-validation function within the service with no leakage through to the interface.&lt;br /&gt;&lt;br /&gt;I've written a couple of classes in Java that should help developers get started (no warranties, of course). The base class is called &lt;a href="http://groups.google.com.au/group/wisdomofganesh/web/TokenWatermarker.java?hl=en"&gt;TokenWatermarker&lt;/a&gt;, and it performs the basic hashing and string concatenating logic on any token string. It can watermark &lt;a href="http://wisdomofganesh.blogspot.com/2010/06/case-for-locally-unique-ids-luids.html"&gt;LUIDs&lt;/a&gt;, for example. It also performs verification of previously watermarked tokens, of course. Then there's the &lt;a href="http://groups.google.com.au/group/wisdomofganesh/web/UUIDWatermarker.java?hl=en"&gt;UUIDWatermarker&lt;/a&gt; class that extends TokenWatermarker and provides the same capability for UUIDs.&lt;br /&gt;&lt;br /&gt;Running the compiled classes using "java TokenWatermarker" or "java UUIDWatermarker" will print out a sample output that will show you how these classes work.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6692194438623333464?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6692194438623333464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6692194438623333464' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6692194438623333464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6692194438623333464'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/06/case-for-watermarked-uuids.html' title='The Case for Watermarked UUIDs'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-5894645849500110856</id><published>2010-06-25T05:16:00.000-07:00</published><updated>2010-06-27T05:15:51.613-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='identifier'/><category scheme='http://www.blogger.com/atom/ns#' term='LUID'/><category scheme='http://www.blogger.com/atom/ns#' term='Resource'/><category scheme='http://www.blogger.com/atom/ns#' term='UUID'/><title type='text'>The Case for Locally Unique IDs (LUIDs)</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;It should be no surprise to regular readers of this blog that I am in love with UUIDs. As I have said before, they are an inexhaustible source of identifiers that are meaningless (not a pejorative term!) and whose generation can be distributed/federated without danger of duplication. As a result, they are an extremely powerful means of providing a uniform and federated identity scheme.&lt;br /&gt;&lt;br /&gt;As a SOA-indoctrinated IT practitioner, I am loathe to expose domain-specific entity identifiers to the larger world because such leakage leads to tight coupling and brittle integration. Yet identifiers of "resources" must often be exposed. How do we do this? Even "best practice" guidelines fail to adequately admonish designers against exposing domain-specific identifiers. [e.g., Subbu Allamaraju's otherwise excellent &lt;a href="http://www.amazon.com/RESTful-Web-Services-Cookbook-Scalability/dp/0596801688"&gt;RESTful Web Services Cookbook&lt;/a&gt; talks about "opaque" URIs in recipe 4.2 but ends up recommending the use of internal entity identifiers in recipe 3.10 :-(.]&lt;br /&gt;&lt;br /&gt;My point is simple. If the 'employee' table in my application's database looks like this&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;+------+--------------+---------------+-------------+&lt;br /&gt;| id   | first_name   | last_name     | dob         |&lt;br /&gt;+------+--------------+---------------+-------------+&lt;br /&gt;| 1122 | John         | Doe           | 12-Jan-1960 |&lt;br /&gt;+------+--------------+---------------+-------------+&lt;br /&gt;| 3476 | Jane         | Doe           | 08-Sep-1964 |&lt;br /&gt;+------+--------------+---------------+-------------+&lt;br /&gt;| 6529 | Joe          | Bloggs        | 15-Jun-1970 |&lt;br /&gt;+------+--------------+---------------+-------------+&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I do not want to be exposing resources that look like these&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/employees/1122&lt;br /&gt;/employees/3476&lt;br /&gt;/employees/6529&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I don't want to expose my application's local primary keys to the entire world. They may be "meaningless" but they're still coupled to my domain's internal data structures. I need something else.&lt;br /&gt;&lt;br /&gt;My standard solution so far has been the magnificent UUID. I add a candidate key column to my table, like so&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;+------+--------------+---------------+-------------+--------------------------------------+&lt;br /&gt;| id   | first_name   | last_name     | dob         | UUID                                 |&lt;br /&gt;+------+--------------+---------------+-------------+--------------------------------------+&lt;br /&gt;| 1122 | John         | Doe           | 12-Jan-1960 | 4885c205-8248-4e5b-9c45-4d042e7cc992 |&lt;br /&gt;+------+--------------+---------------+-------------+--------------------------------------+&lt;br /&gt;| 3476 | Jane         | Doe           | 08-Sep-1964 | cdbf87dd-93cb-4c53-9c5d-718c596b0a00 |&lt;br /&gt;+------+--------------+---------------+-------------+--------------------------------------+&lt;br /&gt;| 6529 | Joe          | Bloggs        | 15-Jun-1970 | 73feb1bf-e687-4d58-9750-5bf98ca7b9fa |&lt;br /&gt;+------+--------------+---------------+-------------+--------------------------------------+&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;or I maintain a separate mapping table, like so&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;+------+--------------------------------------+&lt;br /&gt;| id   | UUID                                 |&lt;br /&gt;+------+--------------------------------------+&lt;br /&gt;| 1122 | 4885c205-8248-4e5b-9c45-4d042e7cc992 |&lt;br /&gt;+------+--------------------------------------+&lt;br /&gt;| 3476 | cdbf87dd-93cb-4c53-9c5d-718c596b0a00 |&lt;br /&gt;+------+--------------------------------------+&lt;br /&gt;| 6529 | 73feb1bf-e687-4d58-9750-5bf98ca7b9fa |&lt;br /&gt;+------+--------------------------------------+&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and I expose my resources like so&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/employees/4885c205-8248-4e5b-9c45-4d042e7cc992&lt;br /&gt;/employees/cdbf87dd-93cb-4c53-9c5d-718c596b0a00&lt;br /&gt;/employees/73feb1bf-e687-4d58-9750-5bf98ca7b9fa&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I've still got unique identifiers, they're guaranteed not to conflict with anything else in time and space, and more importantly, &lt;span style="font-style: italic;"&gt;my domain-specific identifiers remain hidden&lt;/span&gt;. I can now even change my entire domain model, &lt;span style="font-style: italic;"&gt;including identifiers&lt;/span&gt;, and still preserve my external contracts. That's SOA.&lt;br /&gt;&lt;br /&gt;But the sad fact of the matter is that many legacy systems and packaged software do not readily support UUID datatypes or even char(36) columns for various reasons. I have recently heard of a far-sighted software vendor that has provided for a "Public ID" field in their database tables for this precise reason, i.e., to allow an externally visible identifier to be specified for their entities. But alas, the column is defined to be varchar(20), much too small to hold a UUID.&lt;br /&gt;&lt;br /&gt;It occurred to me that there is nothing sacrosanct about a 128-bit UUID (expressed as a 36-character string). It's just that the larger a random number gets, the more remote the probability of conflict with another such random number. 128 bits is a nice, safe length. But smaller lengths also have the same property, only with a lower degree of confidence.&lt;br /&gt;&lt;br /&gt;The constraints of vendor packages like the one I described above led me to postulate the concept of the LUID (Locally Unique ID). This is just a string that is smaller than 32 hex digits (a UUID has 32 hex digits and 4 hyphens in-between). I call this a Locally Unique ID because the smaller it gets, the lower the confidence with which we can claim it to be universally unique. But we may still be able to rely on its uniqueness within a local system. If I'm only holding details of a few thousand employees (or even a few million customers) in my database, an LUID may still be expected to provide unique identifiers with a reasonable degree of confidence.&lt;br /&gt;&lt;br /&gt;That vendor package definitely cannot hold a UUID such as "2607881a-fec1-4e5d-a7fc-f87527c93e2d" in its "Public ID" field, but a 20-character substring such as "4e5da7fcf87527c93e2d" is definitely possible.&lt;br /&gt;&lt;br /&gt;Accordingly, I've written a Java class called LUID with static methods&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;String randomLUID( int _length ) and&lt;br /&gt;String getLUID( String _uuidString, int _length )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The first generates a random hex string of the desired length (without hyphens). The second chops a regular UUID down to a hex string of the required length, again without hyphens.&lt;br /&gt;&lt;br /&gt;You can download the class from &lt;a href="http://groups.google.com.au/group/wisdomofganesh/web/LUID.java?hl=en"&gt;here&lt;/a&gt;. Just running the compiled class with "java LUID" will result in some test output which should illustrate how it works. Feel free to incorporate it into your own projects, but be warned that there is no warranty ;-).&lt;br /&gt;&lt;br /&gt;Of course, there is a limit to how small an LUID can become before it loses its utility, but I'm not going to draw an arbitrary line in the sand over this. The class above represents mechanism, not policy. Application designers need to think about what makes sense in their context. An LUID of the appropriate length can enable them to implement SOA Best Practice by decoupling externally visible resource identifiers from internal entity identifiers (another example of the difference between Pat Helland's &lt;a href="http://msdn.microsoft.com/en-us/library/ms954587.aspx"&gt;Data on the Outside and Data on the Inside&lt;/a&gt;) when a standard UUID cannot be used.&lt;br /&gt;&lt;br /&gt;Bottomline: If you can use a standard UUID, do so. If you can't, consider using an LUID of the kind I've described. But always hide the specifics of your application domain (which include entity identifiers) when exposing interfaces to the outside. That's non-negotiable if you want to be SOA-compliant.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update 27/06/2010:&lt;/span&gt;&lt;br /&gt;I should perhaps make it clear what my proposal is really about, because judging from a reader comment, I think I may have created the impression that all I want is for entity identifiers to be "meaningless" in order to be opaque. That's actually not what I mean.&lt;br /&gt;&lt;br /&gt;To be blunt, I believe that any entity/resource that is to be uniquely identified &lt;span style="font-style: italic;"&gt;from the outside&lt;/span&gt; needs _two_ identifiers (i.e., two candidate keys). One of them is the "natural" primary key of the entity within the domain application. The other is a new and independent identifier that is required to support the exposure of this entity through a service interface (whether SOAP or REST). There should be no way to derive this new key from the old one. The two keys should be independently unique, and the only way to derive one from the other should be through column-to-column mapping, either within the same table or through a separate mapping table as I showed above.&lt;br /&gt;&lt;br /&gt;To repeat what I wrote in the comments section in reply to this reader:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;There was a content management system that generated (meaningless) IDs  for all documents stored in it, and returned the document ID to a client  application that requested storage, as part of a URI. At one stage, it  became necessary to move some of the documents (grouped by a certain  logical category) to another instance of the CMS, and all the document  IDs obviously changed when reloaded onto the other instance. The client  application unfortunately had references to the old IDs. Even if we had  managed to switch the host name through some smart content-based routing  (there was enough metadata to know which set of documents was being  referred to), the actual document ids were all mixed up.&lt;br /&gt;&lt;br /&gt;If we  had instead maintained two sets of IDs and _mapped_ the automatically  generated internal ID of each document to a special externally-visible  ID and returned the latter to the client, we could have simply changed  the mapping table when moving documents to the new CMS instance and the  clients would have been insulated from the change. As it turned out, the  operations team had to sweat a lot to update references on the calling  system's databases also.&lt;/blockquote&gt;I hope it's clear now.&lt;br /&gt;&lt;br /&gt;1. Entity only seen within the domain =&gt; single primary key is sufficient&lt;br /&gt;2. Entity visible outside the domain =&gt; two candidate keys are required, as well as a mapping (not an automated translation) between the two.&lt;br /&gt;3. UUID feasible for the new candidate key =&gt; use a UUID&lt;br /&gt;4. UUID not possible for some reason =&gt; use a Locally Unique ID or LUID of appropriate length (code included)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-5894645849500110856?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/5894645849500110856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=5894645849500110856' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/5894645849500110856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/5894645849500110856'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/06/case-for-locally-unique-ids-luids.html' title='The Case for Locally Unique IDs (LUIDs)'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-101574525180671287</id><published>2010-06-18T04:23:00.000-07:00</published><updated>2010-06-18T06:44:00.213-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servlet 3'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Annotations and the Servlet 3 Specification</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Now I'm seriously beginning to wonder about the authors of the &lt;a href="http://jcp.org/en/jsr/detail?id=315"&gt;Java Servlet 3 specification&lt;/a&gt;. This time, it's not their architectural wisdom (&lt;a href="http://wisdomofganesh.blogspot.com/2010/06/rest-and-servlet-3-specification.html"&gt;or the lack of it&lt;/a&gt;) regarding session state. It's about something even more basic to the Java language - the nature of annotations.&lt;br /&gt;&lt;br /&gt;Chapter 8 deals with annotations that developers may use to mark their classes. Anything about the following strike you as crazy?&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Classes annotated with @WebServlet class (sic) MUST extend the javax.servlet.http.HttpServlet class.&lt;br /&gt;[...]&lt;br /&gt;Classes annotated with @WebFilter MUST implement javax.servlet.Filter.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;If we must extend a base class anyway, I wonder what the annotation is for. Just to avoid putting a few lines of config code into the web.xml file?&lt;br /&gt;&lt;br /&gt;I would have thought an annotation like @WebServlet would be capable of turning &lt;span style="font-style: italic;"&gt;any POJO&lt;/span&gt; into a servlet class, not just subclasses of HttpServlet! And we could have annotations like @GetMethod, @PostMethod, @PutMethod and @DeleteMethod to annotate any arbitrary methods in the class. We shouldn't have to rely on overriding the doGet(), doPost(), doPut() and doDelete() methods.&lt;br /&gt;&lt;br /&gt;The same applies with @WebFilter. It could be used to annotate any arbitrary class, and @FilterMethod could then annotate any arbitrary method in the class.&lt;br /&gt;&lt;br /&gt;Look at the way JSR 311 and Spring REST work.&lt;br /&gt;&lt;br /&gt;I'm disappointed in the Servlet spec committee. If you're going to use annotations, then use them smartly.&lt;br /&gt;&lt;br /&gt;It wouldn't be out of place here to comment on the horrific class hierarchy of the Servlet spec. It certainly shows the era from which it began, an era where interfaces were underappreciated and inheritance hierarchies featured classes themselves. Naming conventions hadn't matured yet, either.&lt;br /&gt;&lt;br /&gt;E.g., my application's concrete class "MyServlet" must either extend abstract class "GenericServlet", which in turn partially implements interface "Servlet", or implement "Servlet" directly. This by itself isn't so bad, but go ahead a bit.&lt;br /&gt;&lt;br /&gt;My application's concrete class "MyHttpServlet" must only extend abstract class "HttpServlet" which extends abstract class "GenericServlet", which in turn partially implements interface "Servlet". There is no interface to implement.&lt;br /&gt;&lt;br /&gt;And why GenericServlet should also implement ServletConfig is something I don't understand. There's a HAS-A relationship between a servlet and its configuration. It's not an IS-A relationship.&lt;br /&gt;&lt;br /&gt;HttpServlet should have been an &lt;span style="font-style: italic;"&gt;interface&lt;/span&gt; extending Servlet.&lt;br /&gt;&lt;br /&gt;The abstract class GenericServlet (that partially implements the Servlet interface) should have been called AbstractServlet instead, and there could have been a concrete convenience class called SimpleServlet or BasicServlet that extended AbstractServlet and provided a default implementation that subclasses could override.&lt;br /&gt;&lt;br /&gt;Similarly, there should have been an abstract class called AbstractHttpServlet that  partially implemented the HttpServlet &lt;span style="font-style: italic;"&gt;interface&lt;/span&gt; and only provided a concrete service() method, dispatching requests to doXXX() methods that remained unimplemented. There could have been a concrete convenience class called SimpleHttpServlet or BasicHttpServlet that extended the AbstractHttpServlet class and provided a default implementation that subclasses could override.&lt;br /&gt;&lt;br /&gt;My application's concrete classes should have had the option to implement one of the interfaces directly or to extend one of the abstract or convenience classes.&lt;br /&gt;&lt;br /&gt;Oh well, too late now.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-101574525180671287?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/101574525180671287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=101574525180671287' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/101574525180671287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/101574525180671287'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/06/annotations-and-servlet-3-specification.html' title='Annotations and the Servlet 3 Specification'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-4866065534622378785</id><published>2010-06-17T02:48:00.000-07:00</published><updated>2010-06-17T03:04:40.335-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Servlet 3'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='statelessness'/><title type='text'>REST and the Servlet 3 Specification</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;I've been going through the &lt;a href="http://jcp.org/en/jsr/detail?id=315"&gt;Java Servlet 3 specification&lt;/a&gt;, and I just came across this gem at the start of the chapter on Sessions:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The Hypertext Transfer Protocol (HTTP) is by design a stateless protocol. To build effective Web applications, it is imperative that requests from a particular client be associated with each other. [...] This specification defines a simple HttpSession interface that allows a servlet container to use any of several approaches to track a user’s session [...]&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I don't think the spec authors have been adequately exposed  to the REST philosophy, or they wouldn't be talking so casually about how "imperative" sessions are to build "effective" Web applications. A few years ago, I would have read this without batting an eyelid. Now, I had to keep myself from falling off my chair in shock. One would think spec writers of advanced technology would know a bit better. At the very least, they could have written something like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The Hypertext Transfer Protocol (HTTP) is by design a stateless protocol, and it is strongly recommended that Web applications be built in a stateless manner to be effective, with all state management delegated to the persistence tier. If, for legacy or other reasons, it is unavoidable to maintain in-memory state in a web application, the servlet specification defines a simple HttpSession interface that provides a relatively painless way to manage it. Application developers should however be aware of the severe scalability and recoverability issues that will accompany the use of this feature.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;There! Now I feel much better.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-4866065534622378785?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/4866065534622378785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=4866065534622378785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4866065534622378785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4866065534622378785'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/06/rest-and-servlet-3-specification.html' title='REST and the Servlet 3 Specification'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-2724010924245856006</id><published>2010-06-12T16:25:00.000-07:00</published><updated>2010-06-27T07:42:05.235-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='service versioning'/><title type='text'>Does REST Need Versioning?</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;In my ongoing conversations with JJ Dubray, he has often made the point that "REST couples identity and access together in a terrible way". When pressed to explain, he &lt;a href="http://wisdomofganesh.blogspot.com/2010/06/real-and-imagined-limitations-of-rest.html?showComment=1276231948963#c2164694512976996625"&gt;provided the following example&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Assume that there is a Resource identified by "/customers/1234". Updating the state of this customer requires a PUT. JJ asks how REST can handle a change to the business logic implied by the PUT.&lt;br /&gt;&lt;br /&gt;Since we cannot say&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   PUTv2 /customers/1234&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;implying a change to the logic of PUT, he believes we have no option but to say&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   PUT /customers/v2/1234&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;but this is different from the identity of the customer, which remains at&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   /customers/1234&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Hence REST "couples identity with access".&lt;br /&gt;&lt;br /&gt;Well, I disagree. First of all, it's a mistake to think there are only two places where the version of business logic can be exposed - the Verb and the Resource. The data submitted is an implicit third, which I'll come to in a moment. But this example only makes me question the whole basis for versioning.&lt;br /&gt;&lt;br /&gt;Does REST need versioning? For that matter, does any service need versioning? What is versioning in the context of SOA?&lt;br /&gt;&lt;br /&gt;I would say service versioning is a mechanism that allows us to simultaneously maintain two or more sets of business logic &lt;span style="font-style: italic;"&gt;in a consumer-visible way&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Why does it have to be consumer-visible as opposed to just &lt;span style="font-style: italic;"&gt;consumer-specific&lt;/span&gt;? After all, if the service implementation can distinguish between two classes of consumer, it can apply two different business rules to them in a completely opaque manner. The consumer doesn't even have to know that two (or more) different sets of business rules are being weighed and applied under the covers.&lt;br /&gt;&lt;br /&gt;Let's ask the more interesting question: Why do we need to maintain two or more sets of business logic simultaneously? The interesting (and circular) answer is often that business logic happens to be consumer-visible, hence a new version of business logic also needs to be distinguished from the old in a consumer-visible way. This is often stated as the need to support &lt;span style="font-style: italic;"&gt;legacy consumers&lt;/span&gt;, i.e., consumers dependent in some way upon the previous version of business logic. But why do we have to support legacy consumers? Because existing contracts break when services are silently upgraded.&lt;br /&gt;&lt;br /&gt;This argument leads to an interesting train of thought. Perhaps the answer lies in the opposite direction to what JJ believes, i.e., not versioning of services but abstraction of detail. Are our service contracts too specific and therefore too brittle? Service versioning is perhaps a "smell" that says we are going about SOA all wrong. Let us see.&lt;br /&gt;&lt;br /&gt;I want to take up a more real-world example than the customer access example that JJ talked about. After all, that's more of a "data service" than a business service. Let's look at a real "business service".&lt;br /&gt;&lt;br /&gt;Let's take the case of the insurance industry where a customer asks for a quote for an insurance product. The client-side application has to submit a set of data to the service and get a quote (a dollar value for the premium) in return.&lt;br /&gt;&lt;br /&gt;In REST, here's how it could work.&lt;br /&gt;&lt;br /&gt;Request:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   POST    /quotes&lt;br /&gt;   &amp;lt;insurable-details&amp;gt;&lt;br /&gt;   ...&lt;br /&gt;   &amp;lt;/insurable-details&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Response:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   201 Created&lt;br /&gt;   Location: /quotes/06fb633b-fec4-4fb6-ae32-f298b8f499c1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The client is referred to the location of the newly-created quote Resource, which is at /quotes/06fb633b-fec4-4fb6-ae32-f298b8f499c1. When the client does a GET on this URI, the quote details are transferred.&lt;br /&gt;&lt;br /&gt;So far, so good. Now let's say the business logic  changes. Premiums are now calculated using very different logic. The first question is, can this new business logic be applied to all customers, or do we need to keep track of "old" customers and keep applying the old business logic to them? If we can "upgrade" all customers to the new business logic, there is, of course, no problem at all. The interface remains the same. The client application POSTs data to the same URI, and they are redirected in the same way to the location of the newly-created quote Resource. The business logic applied is all new, but customers don't see the change in their interface (only in the dollar values they are quoted!)&lt;br /&gt;&lt;br /&gt;However, if we do need to maintain two sets of business logic, it could be for three reasons. One, the data that the client app needs to submit has changed, so the change is unavoidably visible to the customer and has to be communicated as a new and distinct contract. Two, there is another business reason to tell two types of customers apart, perhaps to reward longstanding customers with better rates, and this  difference between customers is not obvious from the data they submit. Third, the client app somehow "knows" the behaviour of the old version and is dependent on it. In this case, we need a new version just to keep legacy clients from breaking.&lt;br /&gt;&lt;br /&gt;We can readily see that the third reason is an artificial case for versioning. It's in fact a case to break implicit dependencies  that have crept in.&lt;br /&gt;&lt;br /&gt;In contrast, the first and second reasons provide their own resolution. If the type of data submitted by the client changes, that is itself a way to distinguish new clients from old ones and apply different business logic to them. In other words, we only need to tell newer customers about the change in the data they need to POST. Older customers don't need to do a thing. Also, if we can somehow &lt;span style="font-style: italic;"&gt;derive&lt;/span&gt; that the customer is an existing one, even if this is not explicit in the data submitted, we can still apply different business logic transparently.&lt;br /&gt;&lt;br /&gt;JJ may consider this a messy and unstructured approach to versioning. Business stakeholders may have the opposite view. It's less disruptive. The less clients are exposed to the way services are implemented, the better.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Service versions are not really an interface detail. They're an implementation detail that often &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;leaks into the interface&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That means version numbers are a problem, not a solution.&lt;br /&gt;&lt;br /&gt;None of these arguments may satisfy someone like JJ. In that case, if service versioning is absolutely essential, there is a simple way to include it, after all. Include the version number in the message body  accompanying a POST or PUT request. In fact, message bodies are allowed even for GET and DELETE requests (anything except a TRACE), so versioning of any type of service is possible. REST does not enforce versioning, (that would be a bad thing considering that versions are often a smell), but doesn't impede it either.&lt;br /&gt;&lt;br /&gt;With this approach, neither Verbs (e.g., POST) nor URIs (e.g., /quotes) are affected by versions and the "terrible" coupling of identity and access is avoided.&lt;br /&gt;&lt;br /&gt;It seems to me that the problem is not with REST, it's with looking at REST through WS-* eyes.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-2724010924245856006?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/2724010924245856006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=2724010924245856006' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2724010924245856006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2724010924245856006'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/06/does-rest-need-versioning.html' title='Does REST Need Versioning?'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-3906508559288586466</id><published>2010-06-11T02:49:00.000-07:00</published><updated>2010-06-27T07:45:17.572-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='Distributed Objects'/><title type='text'>Is REST Another Variant of Distributed Objects?</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;In my discussions with JJ on REST, he's often made the observation that REST is nothing but Distributed Objects and is therefore a bad style. But is it really?&lt;br /&gt;&lt;br /&gt;I have two different arguments why I believe it isn't.&lt;br /&gt;&lt;br /&gt;1. Let me first talk about my experience as a migrant from India to Australia many years ago. Working in Indian companies had acclimatised me to a rather direct management style. If my manager ever wanted me to do something, he or she would say so in so many words, "Do this!"&lt;br /&gt;&lt;br /&gt;When I arrived in Australia and began working, I was struck by the very different style of Australian managers. I would hear things like, "You may want to do this," or "You may like to do this." It took me a while to realise that they were essentially saying the same thing, only less directly. Let me coin a term for this style, because I'm going to use it to explain a concept with Distributed Objects. Let me call this a &lt;span style="font-style: italic;"&gt;polite command&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Let's now turn to methods that set an object's attributes. We may see &lt;span style="font-style: italic;"&gt;setter methods&lt;/span&gt; like these:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; widget.setSomeAttribute( someValue );&lt;br /&gt; widget.setAnotherAttribute( anotherValue );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now consider another style of doing the same thing.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; widget.updateSelf( widgetDTO );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;where widgetDTO is a structure that holds the new values of someAttribute and anotherAttribute.&lt;br /&gt;&lt;br /&gt;Let's call the direct setter methods &lt;span style="font-style: italic;"&gt;commands&lt;/span&gt;. "Remoting" these commands leads to a tightly-coupled, RPC mechanism. This is the Distributed Objects style. I would be the first to agree with JJ that this is a bad approach.&lt;br /&gt;&lt;br /&gt;But the second style is a &lt;span style="font-style: italic;"&gt;polite command.&lt;/span&gt; It's requesting the object to update itself based on values held in a Data Transfer Object (i.e., a &lt;span style="font-style: italic;"&gt;representation&lt;/span&gt;). Now this is a style that can be remoted without problems, because it's not really RPC.&lt;br /&gt;&lt;br /&gt;The REST style of updating resources follows the latter model.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;PUT   /widgets/1234&lt;br /&gt;&amp;lt;attributes&amp;gt;&lt;br /&gt;&amp;lt;some-attribute&amp;gt;some value&amp;lt;/some-attribute&amp;gt;&lt;br /&gt;&amp;lt;another-attribute&amp;gt;another value&amp;lt;/another-attribute&amp;gt;&lt;br /&gt;&amp;lt;/attributes&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In other words, this is a polite command. It can be safely remoted. It's not Distributed Objects.&lt;br /&gt;&lt;br /&gt;2. JJ &lt;a href="http://www.ebpml.org/blog/214.htm"&gt;laughs at&lt;/a&gt; the approach of annotating object methods to turn them into REST resources, the way JAX-RS does. This is another reason why he considers REST to be Distributed Objects. The annotations seem to be doing nothing more than remoting object methods. Therefore, REST = Distributed Objects and consequently a horrible way to design systems.&lt;br /&gt;&lt;br /&gt;Not so fast.&lt;br /&gt;&lt;br /&gt;Let's not forget the concept of Service Objects, which are not really Domain Objects.&lt;br /&gt;&lt;br /&gt;Let's look at a simplistic domain model for a banking system. The major Domain Object in this model is an Account. An Account object has the following methods:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class Account()&lt;br /&gt;{&lt;br /&gt;  public double getBalance() {...};&lt;br /&gt;  public void credit( double amount ) {...};&lt;br /&gt;  public void debit( double amount ) {...};&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The Domain Model is internally-focused. Nothing here understands the concept of a &lt;span style="font-style: italic;"&gt;transfer&lt;/span&gt;. Indeed, a transfer cannot be elegantly modelled using domain objects.&lt;br /&gt;&lt;br /&gt;That's because a transfer is an aspect of a Service. Service verbs are really free-standing verbs. They don't belong to classes the way domain methods do. The methods getBalance(), credit() and debit() don't make any sense by themselves. It always has to be account.getBalance(), account.credit() and account.debit().&lt;br /&gt;&lt;br /&gt;In contrast, transfer() can be a free-standing verb. In fact, it seems downright clumsy to push transfer() into a class, because it really doesn't belong inside any class. It's just that languages like Java are &lt;a href="http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html"&gt;unyieldingly object-oriented&lt;/a&gt; and don't tolerate free-standing verbs. So in practice, designers create an awkwardly-named class like AccountService and stick transfer() inside it, like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class AccountService()&lt;br /&gt;{&lt;br /&gt;   public void transfer( Account fromAccount, Account toAccount, double amount )&lt;br /&gt;   throws InsufficientFundsException&lt;br /&gt;   {&lt;br /&gt;       if ( fromAccount.getBalance() &gt;= amount )&lt;br /&gt;       {&lt;br /&gt;           fromAccount.debit( amount );&lt;br /&gt;           toAccount.credit( amount );&lt;br /&gt;       }&lt;br /&gt;       else&lt;br /&gt;       {&lt;br /&gt;           throw new InsufficientFundsException();&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;[If J2EE designers feel a sense of &lt;span style="font-style: italic;"&gt;d&amp;eacute;j&amp;agrave; vu&lt;/span&gt; on seeing this, it's the old Session Façade pattern all over again, with Stateless Session Beans acting as a service façade for domain objects represented by Entity Beans. Stateless Session Beans were not part of the Domain Model at all. They were an explicit service layer that lent itself to being remoted through (what else?) a Remote Interface.]&lt;br /&gt;&lt;br /&gt;Now, if we tried to remote a method like credit() or debit(), it would be a classic case of RPC (RMI, strictly speaking) and therefore Distributed Objects hell.&lt;br /&gt;&lt;br /&gt;But a "method" like transfer() readily lends itself to being remoted! That's because an instance of AccountService isn't a Domain Object but a Service Object.&lt;br /&gt;&lt;br /&gt;If designers took care to annotate only the methods of Service Objects and avoided doing so with methods of Domain Objects, then they neatly avoid being trapped into the Distributed Objects paradigm.&lt;br /&gt;&lt;br /&gt;All that leads to a certain insight. And that is that although REST is an architectural style, it isn't prescriptive enough. We need to tell designers what types of domain objects can be modelled as resources and what cannot.&lt;br /&gt;&lt;br /&gt;With a nod to the term &lt;span style="font-style: italic;"&gt;polite command&lt;/span&gt;, perhaps it's not enough for systems to be RESTful. They should also be RESPECTful :-).&lt;br /&gt;&lt;br /&gt;I realise I have blogged extensively on this over 2 years ago, &lt;a href="http://wisdomofganesh.blogspot.com/2008/01/resource-service-and-object-orientation.html"&gt;here&lt;/a&gt; and &lt;a href="http://wisdomofganesh.blogspot.com/2008/01/service-orientation-and-object.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-3906508559288586466?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/3906508559288586466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=3906508559288586466' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3906508559288586466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3906508559288586466'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/06/is-rest-another-variant-of-distributed.html' title='Is REST Another Variant of Distributed Objects?'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6949435088068708325</id><published>2010-06-09T17:10:00.000-07:00</published><updated>2010-06-09T20:02:27.561-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='examples'/><title type='text'>The Real and Imagined Limitations of REST</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;One of the things that struck me about my discussion with JJ Dubray on &lt;a href="http://wisdomofganesh.blogspot.com/2010/06/wanted-esc-not-esb.html"&gt;a previous blog posting&lt;/a&gt; was how closely we agreed on fundamental architectural principles (decoupling of interface from implementation, avoiding a hub-and-spokes architecture, etc.), yet how diametrically opposed our views were on REST.&lt;br /&gt;&lt;br /&gt;For example, I think REST does a great job of decoupling interface from implementation. JJ feels the exact opposite. Why?&lt;br /&gt;&lt;br /&gt;Analysing the problem more closely, I guess the common &lt;span style="font-style: italic;"&gt;examples&lt;/span&gt; of RESTful interface design are partly to blame.&lt;br /&gt;&lt;br /&gt;1. A URI like&lt;br /&gt;&lt;br /&gt;http://myapp.mycompany.com/customers/1234&lt;br /&gt;&lt;br /&gt;where 1234 is the actual id of the customer in my database, would be a horrible example of tight coupling, in my opinion. I believe URIs should be opaque and meaningless. I think designers should take care to create a mapping layer that decouples their implementation data model from their externally exposed service data model.&lt;br /&gt;&lt;br /&gt;For example, I would prefer this to be exposed:&lt;br /&gt;&lt;br /&gt;http://myapp.mycompany.com/customers/&lt;span style="font-size:100%;"&gt;cb77380-7425-11df-93f2-0800200c9a66&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There should be a mapping within the service implementation that relates the opaque identifier "&lt;span style="font-size:100%;"&gt;cb77380-7425-11df-93f2-0800200c9a66&lt;/span&gt;" to the customer's id within the domain data model, i.e., 1234. That would be true decoupling.&lt;br /&gt;&lt;br /&gt;Mind you, the earlier example of tight coupling is not a limitation of REST, merely bad application design.&lt;br /&gt;&lt;br /&gt;[Incidentally, I think UUIDs have given the world a wonderful gift in the form of an inexhaustible, federated, opaque identification scheme for resource representations. Decoupling &lt;span style="font-style: italic;"&gt;identity&lt;/span&gt; is a key part of decoupling domain data models (&lt;a href="http://msdn.microsoft.com/en-us/library/ms954587.aspx"&gt;Pat Helland's&lt;/a&gt; Data on the Inside) from service data models (Data on the Outside).]&lt;br /&gt;&lt;br /&gt;2. Another bad example is the use of "meaningful" URIs. Even though the following two URIs may seem obviously related, client applications must &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; make any assumptions about their relationship:&lt;br /&gt;&lt;br /&gt;http://myapp.mycompany.com/customers&lt;br /&gt;http://myapp.mycompany.com/customers/1234&lt;br /&gt;&lt;br /&gt;In other words, a client application must not assume that it can derive the resource representation for the set of customers by merely stripping off the last token "/1234" from the URI of an individual customer.&lt;br /&gt;&lt;br /&gt;And this is not a limitation of REST either. The HatEoAS (Hypermedia as the Engine of Application State) principle says that client applications must only rely on fully-formed URIs provided by the service to perform further manipulations of resources. In other words, URIs are to be treated as opaque and client applications must not attempt to reverse-engineer them by making assumptions about their structure.&lt;br /&gt;&lt;br /&gt;Examples like these are bad from the perspective of architects who understand the evils of tight coupling, and the ones who produce these examples understand it too, but these naive examples have the benefit of being easy to understand.&lt;br /&gt;&lt;br /&gt;A RESTful system would work perfectly well with URIs that looked like these:&lt;br /&gt;&lt;br /&gt;http://myapp.mycompany.com/&lt;span style="font-size:100%;"&gt;51bb2db7-b51c-4fd9-b235-2b310a644a84&lt;br /&gt;http://myapp.mycompany.com/&lt;/span&gt;&lt;span style="font-size:100%;"&gt;a7ac1f23-6bc7-44be-af9b-4b68fd31879f&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;http://myapp.mycompany.com/&lt;/span&gt;&lt;span style="font-size:100%;"&gt;208657ef-1e86-47ba-9c5f-3f177c018293&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;The first is a URI for a customer, the second is a URI for a bank account and the third is a URI for an insurance policy. How about that? This would be architecturally clean, but most REST newbies would go, "Huh? Weird!" and turn away with a shudder.&lt;br /&gt;&lt;br /&gt;Sometimes, the desire for understandability of a design by humans introduces semantic coupling that is anti-SOA. I guess there's a trade-off that we need to be aware of, but it's not a limitation of REST itself. It's an application designer's choice.&lt;br /&gt;&lt;br /&gt;3. In another context, JJ has expressed his opinion that SOA is about asynchronous peer-to-peer interaction, and I completely agree. Where I think he has misunderstood REST is in its &lt;span style="font-style: italic;"&gt;superficial&lt;/span&gt; characteristic of synchronous request-response. There are several well-known design patterns for asynchronous interaction using REST, so in practice, this is not a limitation at all. The HTTP status code of "202 Accepted" is meant for precisely this condition - "I've received your message but have not yet acted on it". At one stroke, it's also a model for reliable message delivery. Combine a POST with a one-time token to ensure idempotence, then keep (blindly) trying until you get a 202 Accepted response. Voila! Reliable message delivery.&lt;br /&gt;&lt;br /&gt;I find I am able to look beyond the superficial characteristics of REST that seem like showstoppers to JJ. I can see simple workarounds and Best Practice guidelines that can make a RESTful application fully compliant with SOA principles. JJ stops at the characteristics as given and concludes that REST is horribly antithetical to SOA.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6949435088068708325?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6949435088068708325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6949435088068708325' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6949435088068708325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6949435088068708325'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/06/real-and-imagined-limitations-of-rest.html' title='The Real and Imagined Limitations of REST'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-657978506338926331</id><published>2010-06-09T16:10:00.001-07:00</published><updated>2010-06-09T18:28:40.173-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='interoperability'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>The Need for SOA in the Real World</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;To those who think SOA is just hype, this should be a sobering piece of news from the real world:&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.theaustralian.com.au/australian-it/anz-bank-hits-a-wall-on-financial-software-rollout/story-e6frgakx-1225867925619"&gt;ANZ Bank hits a wall on financial software rollout&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Sources have told The Australian that the bank is having second thoughts about going ahead with installing a Teradata solution made up of enterprise data-warehousing and database software into a predominantly Oracle-run house.&lt;br /&gt;[...]&lt;br /&gt;"It just doesn't marry well with the rest of the organisation as it's an Oracle house," one source said.&lt;br /&gt;&lt;/blockquote&gt;Anyone see the problem here?&lt;br /&gt;&lt;br /&gt;Why should the brand of software being introduced have anything to do with a decision to implement? We in IT tend to treat this sort of argument as perfectly reasonable. Of course software from one vendor won't play nicely with software from another! We've internalised the obscenity of the situation. That's what makes this more horror than farce. We don't see the lack of interoperability between vendors as a problem, &lt;span style="font-style: italic;"&gt;merely as a constraint&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Well, SOA thinking would have challenged this right off the bat. The brand of existing software and new software just doesn't matter. What matters is business functionality. As long as it's all wrapped up in contract-based services, they should play well together.&lt;br /&gt;&lt;br /&gt;But we obviously don't live in that world. We live in a world where a strange kind of &lt;a href="http://en.wikipedia.org/wiki/Stockholm_syndrome"&gt;Stockholm Syndrome&lt;/a&gt; grips customers, preventing them from asserting their rights and causing them to acquiesce in a patently unfair seller's market. The "pragmatic" decisions that then follow create vendor lock-in and much higher outflows in the long run. So much for pragmatism.&lt;br /&gt;&lt;br /&gt;What this news item tells me is that not only is the software vendor world not SOA-friendly, the business user community doesn't think in SOA terms either.&lt;br /&gt;&lt;br /&gt;More's the pity.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-657978506338926331?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/657978506338926331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=657978506338926331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/657978506338926331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/657978506338926331'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/06/need-for-soa-in-real-world.html' title='The Need for SOA in the Real World'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-1916764558812142791</id><published>2010-06-03T18:53:00.000-07:00</published><updated>2010-06-03T21:45:56.555-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='uniform interface'/><title type='text'>SOAP, REST and the "Uniform Interface"</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;When REST folk compare their approach with SOAP-based Web Services (which they often mistakenly call "SOA", not realising that REST is an equally valid way to do SOA), they often refer to a "uniform interface" that REST provides that SOAP does not.&lt;br /&gt;&lt;br /&gt;The response of the SOAP crowd (when there is one), is "What's a uniform interface?" (They'd be surprised to hear that they have one too, which is the topic of this post.)&lt;br /&gt;&lt;br /&gt;The uniform interface refers to a standard way to do something regardless of what the specific activity is.&lt;br /&gt;&lt;br /&gt;As an example, if I asked what the SOAP interface would be like for a service, and I refuse to say what the actual business function is, the SOAP people would have to stop after describing the service at a very high level. There's a SOAP message with a header and a body, and what goes into them depends entirely on what I want to do. The general semantics of a SOAP message are "Process this". That's actually too general to be useful. Any further detail they could give me would depend on what I tell them about the actual operation I'm trying to perform.&lt;br /&gt;&lt;br /&gt;In contrast, the REST guys can actually tell me much more about what my service is going to look like based only on the rough contours of my business function.&lt;br /&gt;&lt;br /&gt;They can tell me that what I operate on is a resource that will look like this:&lt;br /&gt;&lt;br /&gt;"http://domain/resource"&lt;br /&gt;&lt;br /&gt;They can tell me that I will be using one of four verbs (GET, POST, PUT or DELETE).&lt;br /&gt;&lt;br /&gt;They can tell me that my response status codes will be one of some 50-odd pre-defined status codes.&lt;br /&gt;&lt;br /&gt;Plus they can give me other general tips that will apply, such as a GET operation will have no side-effects, a deferred processing request will return a "202 Accepted" status when successful, a POST request will be to a resource collection, and its response status code will be "201 Created" when successful, and the URI of the newly created resource will be found in a response header called "Location:", etc., etc.&lt;br /&gt;&lt;br /&gt;That's actually quite a bit of information considering I haven't said anything yet about the business function I'm trying to implement.&lt;br /&gt;&lt;br /&gt;That's what is called a "uniform interface". It's a structured framework within which application designers have to work. Far from being restrictive and limiting, these constraints actually make things easier for the designer because they provide standard patterns that can be reused in similar situations and deliver predictable results.&lt;br /&gt;&lt;br /&gt;So far, so good. What the REST side doesn't understand is that SOAP-based Web Services offer a uniform interface too. Obviously not for the application itself, but for &lt;span style="font-style: italic;"&gt;qualities of service&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Ask a SOAP service designer how they plan to implement reliable messaging, and they can show you very detailed WS-ReliableExchange headers that are virtually the same regardless of the business service. Ask them about security (encryption and signing/authentication) and they can show you the detailed WS-Security/SecureConversation/Trust headers required, and these too are standard and unchanging.&lt;br /&gt;&lt;br /&gt;Security and Reliability are "Qualities of Services". SOAP-based Web Services have standardised these, and are also on track to standardising Transactions through WS-AtomicTransaction and WS-BusinessActivity (the latter deals with real-world transactions that require compensating actions to "roll back"). [Some may argue that these have in fact been standardised, but there isn't yet a WS-I Basic &lt;span style="font-style: italic;"&gt;XXX&lt;/span&gt; Profile for these, like there is for Security and Reliability, which means there is no benchmark yet for interoperability in these areas.]&lt;br /&gt;&lt;br /&gt;This isn't something to be sneezed at, because a uniform interface leads to improved interoperability, which in turn reduces the cost of integration. From my own experience in IT, I know that integration cost forms a very high proportion of the cost of most projects. Indeed, Project Tango proved the interoperability of Java and .NET-based Web Services &lt;span style="font-style: italic;"&gt;using declarative statements in policy files to have these QoS headers automatically generated&lt;/span&gt;. Now that's cool.&lt;br /&gt;&lt;br /&gt;REST promises to reduce integration cost and thereby overall cost, mainly though the mechanism of the "uniform interface". However, REST does not have a standard model for Security or Reliability, let alone Transactions or Process Coordination. SSL is a rigid security mechanism that is adequate for most, but not all situations. And while it's true that Reliability is probably better implemented through patterns like Idempotence than through the TCP-like model followed by WS-ReliableExchange, it requires an application designer to consciously build it. Transactions and Process Coordination are also missing from the REST lineup.&lt;br /&gt;&lt;br /&gt;That's the challenge. Both SOAP and REST have standardised a part of the service interface, but not all of it. REST has standardised the interface of the application's core logic. SOAP has standardised the interface for Qualities of Service. What we need is a model that provides us with both.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-1916764558812142791?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/1916764558812142791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=1916764558812142791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/1916764558812142791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/1916764558812142791'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/06/soap-rest-and-uniform-interface.html' title='SOAP, REST and the &quot;Uniform Interface&quot;'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-8752801567898210707</id><published>2010-06-02T20:31:00.000-07:00</published><updated>2010-06-02T20:51:43.314-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring Integration'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='ESC'/><title type='text'>Spring Integration - Enabling the Enterprise Service Cloud</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Inversion of Control is a great concept, and the &lt;a href="http://en.wikipedia.org/wiki/Spring_Framework"&gt;Spring framework&lt;/a&gt; excels at it.&lt;br /&gt;&lt;br /&gt;Little did I think that Spring could also effect an Inversion of Architecture! I just recently blogged about the need for organisations to move from a hub-and-spokes ESB (Enterprise Service Bus) to its architectural opposite, a federated ESC (Enterprise Service Cloud).&lt;br /&gt;&lt;br /&gt;In the hub-and-spokes model, you run an application (a Service) on the ESB. To 'invert' that architecture and make it federated, you need to embed an ESB into your application! &lt;a href="http://www.springsource.org/spring-integration"&gt;Spring Integration&lt;/a&gt; allows us to do just that.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://static.springsource.org/spring-integration/reference/htmlsingle/spring-integration-reference.html"&gt;This manual&lt;/a&gt; provides a number of examples that explain how the tiny, deconstructed pieces of ESB functionality can be injected into an application as required.&lt;br /&gt;&lt;br /&gt;That neatly solves the problem of having to deploy multiple heavyweight ESB servers at every endpoint to front-end each application, which would have been the only way to get federation with that heavyweight approach, - a clearly unacceptable solution even if one ignores licence costs.&lt;br /&gt;&lt;br /&gt;I used to think that a federated ESB was the answer and that JBI (Java Business Integration) provided the most flexibility to deploy tailored endpoints. (JBI allows one to plug in specific ESB modules into a common "backplane", but Spring Integration goes a step further and uses the application itself as the backplane.)&lt;br /&gt;&lt;br /&gt;The future seems to be here already.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-8752801567898210707?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/8752801567898210707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=8752801567898210707' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/8752801567898210707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/8752801567898210707'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/06/spring-integration-enabling-enterprise.html' title='Spring Integration - Enabling the Enterprise Service Cloud'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-2543419134446246460</id><published>2010-06-02T14:09:00.000-07:00</published><updated>2010-06-22T05:33:40.239-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='federated'/><category scheme='http://www.blogger.com/atom/ns#' term='hub-and-spokes  REST'/><category scheme='http://www.blogger.com/atom/ns#' term='EAI'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='ESC'/><title type='text'>Wanted: An ESC, not an ESB</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Here's my fundamental beef with an ESB: It follows a hub-and-spokes model that is more suited to an EAI initiative of the 1990s. In the year 2010, we should be doing SOA, not EAI.&lt;br /&gt;&lt;br /&gt;SOA is &lt;span style="font-style: italic;"&gt;federated&lt;/span&gt; where EAI is &lt;span style="font-style: italic;"&gt;brokered&lt;/span&gt;. It's the architectural antithesis of EAI. The smarts are pushed out from the middle to the endpoints until there's no "middle" anymore. I &lt;a href="http://wisdomofganesh.blogspot.com/2010/05/federated-is-not-point-to-point.html"&gt;wrote about&lt;/a&gt; the difference between "federated" and bad old "point-to-point" before. Federated is a &lt;span style="font-style: italic;"&gt;standardised smartening&lt;/span&gt; of the endpoints.&lt;br /&gt;&lt;br /&gt;It doesn't matter whether we do SOAP or REST. Either way, it's SOA, and it's inherently federated.&lt;br /&gt;&lt;br /&gt;Both SOAP's Web Service Endpoints and REST's Resources are represented by URIs. URIs offer a "flat" address space. They're completely opaque. DNS can hide where the services physically sit, so any node can talk to any other without the need for an intermediary.&lt;br /&gt;&lt;br /&gt;Look at a SOAP message. Look at the headers - WS-Addressing, WS-Security, WS-ReliableExchange. They're all end-to-end protocols. The SOAP engines at the endpoints negotiate and handshake every Quality of Service they need without depending on anything in between.&lt;br /&gt;&lt;br /&gt;WS-ReliableExchange uses endpoint-based logic such as acknowledgements, timeouts and retries to provide a measure of reliability even with unreliable transports, much like TCP provides connection-oriented communications over a plain packet routing protocol like IP. There is no need for a "guaranteed delivery" transport like a message queue.&lt;br /&gt;&lt;br /&gt;WS-Trust does key exchange, WS-SecureConversation sets up a session key and WS-Security encrypts messages, all in an end-to-end fashion. There is no need for a secure transport.&lt;br /&gt;&lt;br /&gt;Any node that talks SOAP and WS-* and conforms to the WS-I Basic Profile (and Basic Security Profile and Basic Reliability Profile) can participate. That's federation.&lt;br /&gt;&lt;br /&gt;This isn't an academic discussion. The main drawbacks of a hub-and-spokes model are Availability and Scalability. The ESB is a single point of failure and a performance bottleneck. The normal "solution" is to beef up the ESB by providing for redundancy and "High Availability", but this costs a fair bit and only postpones the inevitable. That's why I said this isn't an academic discussion. There are serious dollars involved. Organisations would do well to think about the implications of an ESB approach and take early steps to avoid the inevitable costs that lie along that path. The correct solution would be to do away with the ESB altogether and embrace the inherently federated model of SOAP (or REST).&lt;br /&gt;&lt;br /&gt;Otherwise, we're forcing inherently federated protocols into a hub-and-spokes model, - a needless throwback to an earlier era , - and inviting problems that need to be "solved" at great expense.&lt;br /&gt;&lt;br /&gt;In the year 2010, when clouds are all the rage, we should recognise that what SOAP and REST give us are "service clouds".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;So that's my buzzword for today - ESC (Enterprise Service Cloud)!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The ESB is dead, long live the ESC!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-2543419134446246460?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/2543419134446246460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=2543419134446246460' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2543419134446246460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2543419134446246460'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/06/wanted-esc-not-esb.html' title='Wanted: An ESC, not an ESB'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-4824914916068427106</id><published>2010-05-31T17:29:00.001-07:00</published><updated>2010-05-31T17:47:18.400-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='point-to-point'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='mediation'/><category scheme='http://www.blogger.com/atom/ns#' term='federation'/><title type='text'>Mediation Doesn't Require Something "In The Middle"</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;I &lt;a href="http://wisdomofganesh.blogspot.com/2010/05/federated-is-not-point-to-point.html"&gt;blogged earlier&lt;/a&gt; about the subtle difference between federation and point-to-point connectivity, but didn't spell out how systems suffering from point-to-point connectivity ("the Dark Ages") could be effectively federated to bring them into the Modern Age without having to interpose a broker between them ("the Middle Ages").&lt;br /&gt;&lt;br /&gt;Here's the problem - a point-to-point connection between two systems.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_WlHQzt6LF1U/TARUe4FJYCI/AAAAAAAABis/SWMgE4EMFP4/s1600/mediation-p2p.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://3.bp.blogspot.com/_WlHQzt6LF1U/TARUe4FJYCI/AAAAAAAABis/SWMgE4EMFP4/s320/mediation-p2p.png" alt="" id="BLOGGER_PHOTO_ID_5477595936216145954" border="0" /&gt;&lt;/a&gt;Here's the obvious solution - a broker that mediates all communication between the two systems. This is the ESB model, of course.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_WlHQzt6LF1U/TARUelW03YI/AAAAAAAABik/Fvgiyb6mtm4/s1600/mediation-broker.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_WlHQzt6LF1U/TARUelW03YI/AAAAAAAABik/Fvgiyb6mtm4/s320/mediation-broker.png" alt="" id="BLOGGER_PHOTO_ID_5477595931190025602" border="0" /&gt;&lt;/a&gt;Is there another decoupling model for a federated system that can (by definition) have no centralised broker?&lt;br /&gt;&lt;br /&gt;Consider an application that has the following hyperlink:&lt;br /&gt;&lt;br /&gt;http://192.168.2.15/policy-page.html&lt;br /&gt;&lt;br /&gt;Now look at this one:&lt;br /&gt;&lt;br /&gt;http://intranet.mycompany.com/policy-page.html&lt;br /&gt;&lt;br /&gt;If we assume that both links are in fact referring to the same page, what's the difference between them? Yes, we know that in the second case, a DNS lookup is required to resolve the domain name to an IP address before the page can be accessed, but the actual HTTP call to GET the page is exactly the same (it uses the IP address) and the end result of the call is also the same. The HTTP GET seems to be point-to-point in both cases with no intermediaries.&lt;br /&gt;&lt;br /&gt;So what's the real difference?&lt;br /&gt;&lt;br /&gt;The first is truly an example of a point-to-point link. How do we know? Test it to see how brittle it is. If the intranet is now hosted on a different server with IP address 192.168.2.16, the link breaks immediately.&lt;br /&gt;&lt;br /&gt;However, in the second example, if we change the server hosting the intranet but also update the relevant DNS entry so that "intranet.mycompany.com" points to "192.168.2.16" instead of "192.168.2.15", then the link continues to work and the application that embeds it is none the wiser. This is no longer a tight, point-to-point connection. It has been effectively intermediated by the introduction of a DNS lookup before the actual call is made.&lt;br /&gt;&lt;br /&gt;This is what lookup-mediation looks like.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_WlHQzt6LF1U/TARUecoeXAI/AAAAAAAABic/CJ3FzSnE0sA/s1600/mediation-lookup.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_WlHQzt6LF1U/TARUecoeXAI/AAAAAAAABic/CJ3FzSnE0sA/s320/mediation-lookup.png" alt="" id="BLOGGER_PHOTO_ID_5477595928848129026" border="0" /&gt;&lt;/a&gt;As we can see, we don't need to physically interpose a component between two systems to break the point-to-point link between them. We can use a lookup mechanism to achieve the same result.&lt;br /&gt;&lt;br /&gt;Incidentally, web-style interaction with domain names in URIs instead of IP addresses is inherently loosely-coupled and therefore the REST style of integration that follows this approach is not an example of point-to-point connectivity. Any node can make HTTP calls to any other, yet nodes are not tightly coupled to each other. This is a practical example of federation.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-4824914916068427106?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/4824914916068427106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=4824914916068427106' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4824914916068427106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4824914916068427106'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/05/mediation-doesnt-require-something-in.html' title='Mediation Doesn&apos;t Require Something &quot;In The Middle&quot;'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_WlHQzt6LF1U/TARUe4FJYCI/AAAAAAAABis/SWMgE4EMFP4/s72-c/mediation-p2p.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6553728604547732039</id><published>2010-05-31T08:22:00.000-07:00</published><updated>2010-05-31T13:58:27.911-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='point-to-point'/><category scheme='http://www.blogger.com/atom/ns#' term='brokered'/><category scheme='http://www.blogger.com/atom/ns#' term='federated'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><title type='text'>"Federated" is not "Point-to-Point"</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;One of the interesting topics in the "to ESB or not to ESB" discussion is the value of avoiding point-to-point interactions between systems. Somewhere along the way, I suspect that mainstream IT has been indoctrinated with the message that point-to-point connections between systems are bad, and in "four legs good, two legs bad" fashion, has begun to parrot the phrase dumbly without understanding what it means.&lt;br /&gt;&lt;br /&gt;I realise that most of the goodwill towards centralised brokers comes from that mindless Orwellian mantra. If someone (like me) argues for a federated ecosystem that does not require a component "in the middle" and where any node can talk to any other, the common assumption is that I'm advocating bad old point-to-point connectivity. A lot of the arguments against point-to-point connectivity then get trotted out.&lt;br /&gt;&lt;br /&gt;That's not what I'm advocating, and it's very difficult to get people to understand the subtle but important difference between point-to-point connectivity and a federated system. A system that relies on point-to-point connectivity is in the Dark Ages. A system that uses a centralised broker to break those point-to-point connections has progressed to the Middle Ages. But to evolve to the Modern Age, we need to get rid of the centralised broker and move to a federated model, and this does NOT mean a backward step to the point-to-point model, even though communication once again occurs directly between endpoints! How is that possible?&lt;br /&gt;&lt;br /&gt;The answer lies in a &lt;span style="font-style: italic;"&gt;standardised smartening&lt;/span&gt; of the endpoints.&lt;br /&gt;&lt;br /&gt;Perhaps an analogy would help.&lt;br /&gt;&lt;br /&gt;I'm at work, and I find I need to talk to another person in my organisation to understand some specialised information about Application X. I've never met this person before. What do I do?&lt;br /&gt;&lt;br /&gt;I'm not totally lost. There is a common protocol governing what I need to do. I look up the (rough) spelling of this person's name on the company intranet. I see a few names there, and I select the one that I think I need. A page comes up, listing the person's name, job title, department, email address and phone number.&lt;br /&gt;&lt;br /&gt;Next I need to decide if the information I need requires an email exchange or a simple phone call. Note that phone and email have given me two communication options - one synchronous and one asynchronous. Even the synchronous option has an asynchronous fallback called voicemail.&lt;br /&gt;&lt;br /&gt;Lo and behold! I already have a phone and a laptop on my desk. I look around and see that every employee does. Every employee has the basic capability to make phone calls and send emails to every other employee.&lt;br /&gt;&lt;br /&gt;Let's say I decide to pick up the phone and call the person. I know the mechanics of the protocol. I pick up the handset and punch in numbers corresponding to what I see on the person's intranet page. When the person picks it up, I know the etiquette I'm expected to follow.&lt;br /&gt;&lt;br /&gt;"Hi, I'm so-and-so. Is this a good time to talk? Thank you. I work in such-and-such an area and I'm currently looking at such-and-such an issue. I find I need to understand a bit about how Application X works, and I'm told you're the best person to talk to."&lt;br /&gt;&lt;br /&gt;If it's a simple question, I may just ask it then and there. If the issue is going to require some discussion, I may request a meeting and then send a meeting invite through email after checking the person's calendar to see when they're likely to be free.&lt;br /&gt;&lt;br /&gt;If no one picks up the phone, I leave a voicemail with roughly the same information, but also my contact details so the person can get back to me.&lt;br /&gt;&lt;br /&gt;What a lot of smarts that took! Yet it's something we take for granted. We call it "business training". We don't expect that a primary school student placed in our position would be able to do all that, yet all of us do it unconsciously. There's a lot of smarts at the endpoints in this model, and no one argues for doing away with it.&lt;br /&gt;&lt;br /&gt;Oh, and all communication is in English, of course (I'm in Australia :-). No matter what language I speak at home, I'm expected to speak English when I talk to someone at work. And so are they. It's not considered an unacceptable condition.&lt;br /&gt;&lt;br /&gt;Now consider a very different situation. There's no corporate intranet. I have no means of looking up a person. Not everyone has phone and email. Some only have a phone number. Some only have email. Others have neither and I will need to walk across to their desks to talk to them face to face.  And I have no way of knowing this up front. If someone isn't available when I try to talk to them, I have no means of leaving a message for them. I have a phone, but I have no idea if they will be able to call me. Oh, and I don't speak English, and neither do they. We speak completely different languages. And no one taught either of us how to use a phone or email or the etiquette of a business conversation! And if by chance I manage to surmount these challenges and discover a way to talk to a certain person, I need to carry that information around with me all the time. I need to do this for the dozen or so people I talk to regularly.  Everyone has to do this for all their contacts, - carry individualised communication information around with them. If one of my contacts has their phone number changed, there's no standard way for them to let me know. I simply can't talk to them anymore until I discover their new phone number. This is the work environment from hell (even if the people are the nicest). &lt;span style="font-style: italic;"&gt;This is a point-to-point world.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let's call this the Dark Ages. How could we solve these seemingly intractable communication problems?&lt;br /&gt;&lt;br /&gt;Here's the solution! Appoint a liaison officer. If I need to talk to anyone in the organisation, rather than keep in my head the idiosyncrasies of the mode of communication I need to employ with that person, I simply approach the liaison officer with my request, spoken or written out in my own mothertongue. I'm guaranteed a response in two business days. The liaison officer takes care of talking to the other person in the mode of communication best suited to them, with suitable translation to their language. All my communication goes through the liaison officer, and I don't have to know anything about the person I'm dealing with at the other end, - where they're located, whether they use a phone, email or carrier pigeon, what language they speak, - nothing at all! Isn't this progress? Of course it is. We've progressed from the Dark Ages to the Middle Ages. &lt;span style="font-style: italic;"&gt;This is a brokered world.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We know this is not the Modern Age because we know what the Modern Age looks like. We live in it - the world of the Standard Operating Environment (SOE) with phones and laptops on every desk, the corporate intranet, the English-only work environment, assumed business training on the part of everyone in the game, etc., etc. In this world, anyone can call anyone at will and do business instantaneously, in an almost effortless manner, with no liaison officers required to mediate our conversations. &lt;span style="font-style: italic;"&gt;This is a federated world.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;However, here's a crucial issue. If we look back at the work environment that we have called the Middle Ages, and ask ourselves how things could be made better, we're unlikely to get an answer that remotely resembles the Modern Age. &lt;span style="font-style: italic;"&gt;We can't get here from there.&lt;/span&gt; We're much more likely to be told of problems that still exist in the Middle Ages and of incremental patches required to make them work better. &lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;For example, the liaison officer falls ill once in a while and can't come to work. On those days, work comes to a standstill because people can't communicate anymore. It's an Availability issue.&lt;br /&gt;&lt;br /&gt;Some days, there are twenty people huddled around the poor harried liaison officer, all talking at the same time and insisting that their work is very urgent. Everyone is delayed and everyone is unhappy. That's a Scalability problem.&lt;br /&gt;&lt;br /&gt;The Middle Ages solution is simple and obvious, of course. Instead of a single liaison officer, institute a Liaison Office staffed with more than one officer. This will provide both redundancy for greater availability as well as scalability. Of course, there will be problems with this model as well. We never seem to have sufficient budget to hire as many officers as we need, so some problems of Availability and Scalability will always remain.  Also, if the particular liaison officer I spoke to yesterday is on leave, I need to explain the context of my requirement to another officer in painstaking detail all over again. The Liaison Office really needs to be made more "stateful". So we need to have elaborate procedures for officers to document their interactions with people and do proper handovers before going on leave. The Liaison Office becomes more and more complex and acquires a bureaucracy of its own. But nothing can be done about it because this is "best practice", isn't it?&lt;br /&gt;&lt;br /&gt;This is indeed where we are today in the SOA world. Smack in the Middle Ages with a great big honking ESB in the middle that we need to beef up with High Availability at great cost. But to many SOA practitioners (and indeed, to the mass of regular IT folk out there), this is Best Practice. This is the only way.&lt;br /&gt;&lt;br /&gt;It seems too hard to imbue all endpoints with the smarts to function in a federated fashion. At the very least, we need to equip every node with a metaphorical phone and email to make it physically possible for any node to call another. Well, the model of endpoint-based SOAP messaging is meant to do just that, with WS-* headers used to provide end-to-end Qualities of Service and with absolutely no need for any intermediary. But that's still just the plumbing. How do we provide business training and teach common business etiquette? In other words, how do we standardise the "application protocol"? Well, that's been done as well, using a model entirely independent of SOAP. It's called REST. REST is simultaneously low in technological sophistication (all we need is a web server and a database) and high in conceptual sophistication (we need to learn to think in a certain way). We have to understand these federated models if we're going to have any hope of progressing from the Middle Ages to the Modern Age.&lt;br /&gt;&lt;br /&gt;And that's where we are today. I know that "inherent interoperability" is possible and far superior to having explicit "integration" projects, yet in my day-to-day discussions with colleagues on the way forward, I find that any suggestion that we do away with the ESB in favour of smart endpoints is often greeted with dismay, because many people don't really understand the word "federated". Oh no, we don't want to go back to the Dark Ages and their point-to-point connections!&lt;br /&gt;&lt;br /&gt;I hope the 'point' is made.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6553728604547732039?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6553728604547732039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6553728604547732039' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6553728604547732039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6553728604547732039'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/05/federated-is-not-point-to-point.html' title='&quot;Federated&quot; is not &quot;Point-to-Point&quot;'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6395362653417998559</id><published>2010-05-26T07:02:00.000-07:00</published><updated>2010-05-26T08:00:42.544-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='heavyweight services'/><title type='text'>Heavyweight Services Have Let IT Practitioners Down</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Call it coincidence, but I had two meetings in the same day when different IT folk complained that a services approach was too cumbersome for them and argued for their applications to be able to connect directly to the databases of other applications to perform queries, joins, etc.&lt;br /&gt;&lt;br /&gt;My involuntary shudder at this suggestion betrayed my SOA leanings, of course. I don't think these people realised how much future pain they would expose the organisation to by building implicit dependencies ("tight coupling") between their independent applications. But I could also empathise with their frustration.&lt;br /&gt;&lt;br /&gt;The first generation of services in organisations has been well-meaning in intent, but expensive in practical terms. People ranted to me about the sheer effort overheads involved in trying to access data from elsewhere - setting up queues and queue clients, formalising XML messages to drop onto queues and pick from queues, parsing and generating XML, etc., etc., - all to do something that was essentially a SQL select or a join across two tables (theirs and another app's).  I also heard a fair bit about the performance overheads of calling services to do simple things - operations that take seconds to do because they involve 2 or more separate service calls. "Decoupling at what cost?" was the refrain.&lt;br /&gt;&lt;br /&gt;I'm forced to the realisation that our collective enthusiasm for SOA, while entirely correct and justified, has not provided a uniformly satisfactory solution to everyday IT practitioners. Bluntly put, we've let down the average developer by making their job unnecessarily harder, to the extent that even experienced designers who know the benefits of loose coupling are beginning to argue for a return to the Bad Old Ways.&lt;br /&gt;&lt;br /&gt;A reader's comment on my previous post has made me think that "Data Services", especially of the RESTian CRUD variety, could be the answer. We still have a service interface that decouples applications from each other and their gory data structures and implementation details, but now we can set them up with minimal effort and call them with minimal overhead. Data Services could be the SOA SQL (That's a pretty apt pun, actually, if you pronounce SQL as "sequel").&lt;br /&gt;&lt;br /&gt;More and more, I'm leaning to the view that most technical problems within an enterprise can be solved with "a web server, a database and some brains". This is a rich topic for a future post or even a whitepaper, but the unsurprising insight is that the third ingredient is probably the one in short supply at most IT shops ;-). (No insult intended, just that designers and architects tend not to step back and look for solutions from first principles, but rely on precedent and product-based approaches.)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6395362653417998559?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6395362653417998559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6395362653417998559' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6395362653417998559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6395362653417998559'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/05/heavyweight-services-have-let-it.html' title='Heavyweight Services Have Let IT Practitioners Down'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-8482552381017949506</id><published>2010-05-25T01:38:00.000-07:00</published><updated>2010-05-25T02:26:29.643-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='services'/><category scheme='http://www.blogger.com/atom/ns#' term='ESB'/><title type='text'>Want Reusability? Sell Off Your ESB and Hire a Data Architect</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;I'm not being facetious. I'm sometimes subjected to entirely earnest arguments about how services must be implemented within an ESB (Enterprise Service Bus) and not at various endpoints,  - in the interests of reusability! Apparently it's OK to host non-reusable services at arbitrary endpoints, but reusable ones need to be wrapped up in centralised wrapping paper and hosted on the magic box in the middle.&lt;br /&gt;&lt;br /&gt;The words hogwash, baloney and fiddlesticks come to mind.&lt;br /&gt;&lt;br /&gt;I've always been a fan of scalable, federated "endpointware", because I believe that services naturally form a "flat" address namespace that enables them to be hosted in a location-transparent manner, so centralising them within a physical component achieves nothing more than provide the organisation with a nice little performance bottleneck and a single point of failure. Oh, and a fat revenue stream for the vendor who can then address those limitations with an expensive HA (High-Availability) option. When was the last time the Internet was down for maintenance while someone upgraded the central server?&lt;br /&gt;&lt;br /&gt;I'm not entirely joking when I suggest that organisations can achieve service reusability more effectively by selling their ESB (to a more gullible one) and using the money to hire a good data architect. After all, IT budgets are always tight and there are usually headcount restrictions, so some sort of swap seems the most feasible way to acquire these skills :-).&lt;br /&gt;&lt;br /&gt;I believe most organisations have very poor data modelling skills &lt;span style="font-style: italic;"&gt;in XML&lt;/span&gt;. Most organisations probably have data modellers who are skilled in relational database technology and can draw a mean ERD (Entity-Relationship Diagram). But I haven't seen too much evidence that any thought is given to XML Schemas as enterprise-reusable resources.&lt;br /&gt;&lt;br /&gt;Banking experts! In what way is a savings account similar to a loan account? In what way is it different?&lt;br /&gt;&lt;br /&gt;Insurance gurus! In what way is a workers compensation claim similar to a home &amp;amp; contents claim? In what way is it different?&lt;br /&gt;&lt;br /&gt;A good data architect should be able to state these similarities and differences - in terms of an XML schema!&lt;br /&gt;&lt;br /&gt;A good data architect would be able to define base types for common, abstract concepts and  derived subtypes for each specialised variant. This would automatically guide the design of the service interface by constraining the elements and even the structure of message documents. Then regardless of whether the services are hosted on a single node or distributed across multiple disparate nodes and implementation technologies, the organisation will achieve service reuse. Over time, fewer versions of services will need to be maintained (another common bane), because variants have been catered for through insightful data modelling.&lt;br /&gt;&lt;br /&gt;I'm not sure this point is appreciated enough. IT professionals are human beings, after all, and tend to understand tangible products better than abstract concepts. That's why most of them believe in magic product-based solutions rather than intellectual and conceptual disciplines. But the architects within IT must rise higher, and make their voices heard.&lt;br /&gt;&lt;br /&gt;The alternative is a bunch of non-reusable, non-scalable non-services.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-8482552381017949506?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/8482552381017949506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=8482552381017949506' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/8482552381017949506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/8482552381017949506'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/05/want-reusability-sell-off-your-esb-and.html' title='Want Reusability? Sell Off Your ESB and Hire a Data Architect'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-86329999024778544</id><published>2010-04-19T16:12:00.000-07:00</published><updated>2010-05-14T06:10:22.401-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='principles'/><category scheme='http://www.blogger.com/atom/ns#' term='guidelines'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>Architectural Requirements for a Line-of-Business Product</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;I was recently asked for my views as an architect on what factors to consider when procuring a line-of-business product for an organisation. Keeping in mind that business SMEs (Subject Matter Experts) were likely to be covering the functional aspects of the product quite adequately, I came up with this list:&lt;br /&gt;&lt;br /&gt;1. Coarse-grained  business functions (e.g., underwriting, claims and reinsurance in the insurance industry) should be modular with well-defined service-based interfaces. There should be no &lt;span style="font-style: italic;"&gt;implicit dependencies&lt;/span&gt; between modules (e.g., no shared tables or other knowledge of another module's internals). This will make it easier for a module to be swapped out for a better one from another source, if required. [Obviously, product vendors will fight to prevent this from happening, but the customer organisation must skew their evaluation rules in such a way that the vendor is forced to see a competitive negative as a positive.]&lt;br /&gt;&lt;br /&gt;2. Data models of the interfaces (&lt;span style="font-style: italic;"&gt;not&lt;/span&gt; the internal domain models) should conform to standards as far as possible (If a data model exists for that industry domain, that's to be preferred). The IP relating to the external data model (the universal metadata model governing the data transfer objects/XML documents) should be revealed to the customer in any case, and guaranteed to be stable across product versions, with a well-defined version strategy for service enhancements. The internal data model can remain the vendor's IP. In fact, the more opaque that is, the better. It will prevent unwitting dependencies from being built by applications external to this one. If a compact and standard vocabulary is established, it will make it much easier for other applications to integrate with this one by "learning" to speak the same language.&lt;br /&gt;&lt;br /&gt;3. Technology platform dependencies should be minimal – commodity infrastructure is  preferred (e.g., Intel, Linux, plain Java-based web servers). The product should offer choices, not constraints. Ideally, it should be able to run on any platform from mainframes to Intel-based systems, and the customer organisation should choose the most commoditised platform that will suit its needs. If the product is Java-based, it should not require an EJB container. The Spring framework  is preferred. Database dependencies should be minimised (wherever possible) through an appropriate ORM layer. Again, the customer organisation should be free to choose the most commoditised database that meets their requirements.&lt;br /&gt;&lt;br /&gt;4. Services support should include both SOAP and REST in order to support the widest variety of external service consumers (and producers).  SOAP services should be true contract-first services and not automated remoting of object  methods. REST services should exhibit support for enterprise  requirements through simple patterns for security (SSL), reliability/idempotence, asynchronous processing with callback  options, horizontal scalability through statelessness, etc.&lt;br /&gt;&lt;br /&gt;5. Technical skills  requirements should be as basic as possible (e.g., commonly available skills like Java, XML, HTML, JavaScript, etc.). There should be minimal requirement for specialised skills. Very importantly, the product should not require vendor consultancy on an ongoing basis to make modifications to extend the product's use. Extensibility of the design and flexibility of the service interface are key enablers here.&lt;br /&gt;&lt;br /&gt;I'm sure there are other good requirements, but these should provide reasonable guidance, I think. Working through my thought process, I guess these were my guiding principles:&lt;br /&gt;&lt;br /&gt;1. Ensure high cohesion and low coupling between functional units, keep interfaces as small as possible (this includes the shared vocabulary).&lt;br /&gt;2. Be conservative in what you produce, be liberal in what you accept.&lt;br /&gt;3. Aim for simplicity (but beware of expediency masquerading as simplicity).&lt;br /&gt;4. Seek to use commodity building blocks as far as possible - try to source technology from competitive markets rather than from "market leaders".&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-86329999024778544?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/86329999024778544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=86329999024778544' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/86329999024778544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/86329999024778544'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/04/architectural-requirements-for-line-of.html' title='Architectural Requirements for a Line-of-Business Product'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-368915820561054511</id><published>2010-03-16T05:14:00.000-07:00</published><updated>2010-04-24T03:21:50.250-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='idempotence'/><category scheme='http://www.blogger.com/atom/ns#' term='reliability'/><title type='text'>Idempotence - Reliability that Works</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;In many cases of messaging where uncertainty is undesirable (e.g., a timeout on a critical transaction request), the usual solution sought is "reliable message delivery". Apart from its &lt;a href="http://en.wikipedia.org/wiki/Two_Generals%27_Problem"&gt;theoretical impossibility&lt;/a&gt;, "reliable messaging" is expensive. One needs "strong queuing" products, which cost a lot of money.&lt;br /&gt;&lt;br /&gt;I've been a fan of a far simpler approach - idempotence. We're really not after reliable message delivery in most cases. We'd often be happy to settle for certainty, i.e., we don't mind whether a requested operation succeeded, failed (or indeed, timed out before it could be attempted), as long as we &lt;span style="font-style: italic;"&gt;know&lt;/span&gt; what happened. What we don't want is to be stuck,  not knowing what happened and afraid to retry the operation for fear of unwitting duplication.&lt;br /&gt;&lt;br /&gt;Idempotence is, of course, the property that attempting something more than once has exactly the same effect as attempting it once. Idempotent operations can be blindly retried in a situation of uncertainty, because one is guaranteed that the operation will never be duplicated.&lt;br /&gt;&lt;br /&gt;The trick is to identify every transaction request with a unique identifier. Provided the receiver of the message is set up to check the identifier against previously-used ones, duplication of transactions can be avoided even if requests are sent multiple times. This is extremely powerful because it allows a requesting application to simply retry the request message in situations of uncertainty until a definite response is eventually received. There is no danger of the request being acted upon more than once.&lt;br /&gt;&lt;br /&gt;Reliability is then reduced to an endpoint-based protocol. It does not require any special capabilities on the part of the transport. In fact, the transport can afford to be quite unreliable. Idempotence allows reliable messaging solutions to be built (and quite cheaply at that) on top of unreliable components!&lt;br /&gt;&lt;br /&gt;Here's a one-page &lt;a href="http://groups.google.com.au/group/wisdomofganesh/web/Uncertainty%20and%20Idempotence%20v0_4.pdf?hl=en"&gt;document&lt;/a&gt; that illustrates the concept.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_WlHQzt6LF1U/S594DuHboTI/AAAAAAAABiM/MiQXC9GQVAg/s1600-h/Uncertainty+and+Idempotence+v0_4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 226px;" src="http://3.bp.blogspot.com/_WlHQzt6LF1U/S594DuHboTI/AAAAAAAABiM/MiQXC9GQVAg/s320/Uncertainty+and+Idempotence+v0_4.png" alt="" id="BLOGGER_PHOTO_ID_5449206079455732018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hopefully this should make it very clear that we don't need strong queuing or "reliable message delivery" to eliminate uncertainty. A plain web server, a database and a system of one-time tokens (UUIDs?) can solve the problem.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-368915820561054511?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/368915820561054511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=368915820561054511' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/368915820561054511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/368915820561054511'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2010/03/idempotence-reliability-that-works.html' title='Idempotence - Reliability that Works'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_WlHQzt6LF1U/S594DuHboTI/AAAAAAAABiM/MiQXC9GQVAg/s72-c/Uncertainty+and+Idempotence+v0_4.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-3168519007868394782</id><published>2009-12-22T20:13:00.000-08:00</published><updated>2009-12-23T00:13:05.017-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSON Schema'/><category scheme='http://www.blogger.com/atom/ns#' term='JSON'/><category scheme='http://www.blogger.com/atom/ns#' term='Orderly'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>The Coming Overthrow of XML - Orderly Makes Further Strides</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;My feeling that XML is due to be dethroned grows stronger &lt;a href="http://wisdomofganesh.blogspot.com/2009/10/json-schema-becomes-more-orderly.html"&gt;by the month&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A quick recap of recent history:&lt;br /&gt;&lt;br /&gt;First, &lt;a href="http://en.wikipedia.org/wiki/JSON"&gt;JSON&lt;/a&gt; offered a simpler data structure than the angle bracketed format of Unicode XML. But that still lacked rigour around data definition, so even though XML suffered the confusion of having at least three competing schema definition languages (XML Schema, RelaxNG and Schematron), the world did have a way to specify data types, formats and constraints with XML that JSON could not match.&lt;br /&gt;&lt;br /&gt;Then, thanks to Kris Zyp, &lt;a href="http://json-schema.org/"&gt;JSON Schema&lt;/a&gt; appeared on the scene and plugged the rigour gap. JSON Schema parsers now exist for a number of languages including Java. One of the design decisions of JSON Schema was for a schema document itself to be valid JSON, much as XML Schema is itself valid XML. Unfortunately, this meant that brevity wasn't JSON Schema's strong point because the JSON way of expressing properties is necessarily long-winded.&lt;br /&gt;&lt;br /&gt;The third shoe has dropped now (never mind the grotesque image that conjures up of the wearer). &lt;a href="http://orderly-json.org/"&gt;Orderly&lt;/a&gt; is a new schema language developed by Lloyd Hilaiel that is far more compact than JSON Schema and yet round-trips to JSON Schema quite effectively. [There's &lt;a href="http://orderly-json.org/tryit"&gt;a really cool Ajax-y screen&lt;/a&gt; that converts back and forth between Orderly and JSON Schema before your eyes, so you can tweak either code to see how it looks in the other representation.]&lt;br /&gt;&lt;br /&gt;Bottomline: SOA architects can recommend the use of the simpler JSON data format instead of XML without having to worry about the lack of rigour in data definition.  Data architects, designers and developers can use Orderly to design schemas without bothering about JSON Schema's cumbersome syntax. JSON parsers can work with the equivalent JSON Schema to validate a piece of JSON data without the need to understand two different syntaxes.&lt;br /&gt;&lt;br /&gt;A great solution, and it's all come together quite nicely in time for Christmas. Thanks to Lloyd  (and Kris before him) for a wonderful Christmas present to all SOA practitioners, and ultimately, everyone wrestling with XML in any capacity.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-3168519007868394782?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/3168519007868394782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=3168519007868394782' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3168519007868394782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3168519007868394782'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/12/coming-overthrow-of-xml-orderly-makes.html' title='The Coming Overthrow of XML - Orderly Makes Further Strides'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-4788215536879941314</id><published>2009-12-22T12:37:00.000-08:00</published><updated>2009-12-22T12:55:51.119-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Openness'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Standards'/><title type='text'>The Meaning of Open - By Google</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;A friend sent me &lt;a href="http://googleblog.blogspot.com/2009/12/meaning-of-open.html"&gt;this link&lt;/a&gt; to a piece written by Jonathan Rosenberg of Google on the meaning of the term "open". This is old hat to those of us who have already seen the light, of course ;-). [Rosenberg's calisthenics when he then tries to justify the closed bits of the Google ecosystem are quite amusing.] But to people who have not given much thought to openness and tend to follow the herd on technology (the bigger the brand name, the better), this open letter may hold many eye-opening insights (all puns intended).&lt;br /&gt;&lt;br /&gt;I would perhaps have said what Rosenberg did in half the length, but brevity isn't a necessary quality of openness, so I'll forgive him :-). The main danger of the unnecessary length is it may just cause some of the audience to stop reading before the end, when Rosenberg delivers his most inspired paragraph:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Open will win. It will win on the Internet and will then cascade across many walks of life: The future of government is transparency. The future of commerce is information symmetry. The future of culture is freedom. The future of science and medicine is collaboration. The future of entertainment is participation. Each of these futures depends on an open Internet.&lt;br /&gt;&lt;/blockquote&gt;Amen to that. In fact, that's worth repeating in a more structured form:&lt;br /&gt;&lt;br /&gt;The future of government is transparency.&lt;br /&gt;The future of commerce is information symmetry.&lt;br /&gt;The future of culture is freedom.&lt;br /&gt;The future of science and medicine is collaboration.&lt;br /&gt;The future of entertainment is participation.&lt;br /&gt;&lt;br /&gt;I would like to analyse these in greater detail and add to/modify the list, because I'm sure this is incomplete.&lt;br /&gt;&lt;br /&gt;For now, this is a document that is worth circulating to our brand name-dazzled colleagues. After all, Google is one of the biggest brands out there, so if Google is endorsing openness, there must be something in it ;-).&lt;br /&gt;&lt;br /&gt;Now if only IBM would come out with an Open&lt;sup&gt;TM&lt;/sup&gt; line of products, we would be willing to write a cheque...&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-4788215536879941314?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/4788215536879941314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=4788215536879941314' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4788215536879941314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4788215536879941314'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/12/meaning-of-open-by-google.html' title='The Meaning of Open - By Google'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-6267814150480057828</id><published>2009-12-11T02:51:00.000-08:00</published><updated>2009-12-11T06:46:27.449-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Is Canonical Trying to Purge Ubuntu of the L-word?</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I don't think much of revisionist history, and biting the hand that feeds isn't an endearing trait.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Visiting &lt;a href="http://www.ubuntu.com/"&gt;the Ubuntu site&lt;/a&gt; today after a while, I was unpleasantly surprised that I couldn't see the word "Linux" anywhere. After trawling the site exhaustively, I did find two or three references, and I leave it as an exercise for the reader to find more. Warning: You'll have to search really hard.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Under "&lt;a href="http://www.ubuntu.com/products/whatisubuntu"&gt;What is Ubuntu?&lt;/a&gt;", the site says, "Ubuntu is a community developed operating system that is perfect for laptops, desktops and servers".&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;What's up, guys? Does it hurt a lot to use the phrase "based on Linux" somewhere in that sentence?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.canonical.com/"&gt;Canonical&lt;/a&gt; and Ubuntu, great as their contributions have been, would be nowhere without Linux, especially the &lt;a href="http://www.debian.org/"&gt;Debian&lt;/a&gt; distribution. So why not acknowledge that debt? Why try to pass Ubuntu off to newbies as a completely original operating system with no ties to Linux? &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;On the &lt;a href="http://www.ubuntu.com/products/whatisubuntu"&gt;same page&lt;/a&gt;, right at the bottom, there's a section titled "What does Ubuntu mean?" and it goes on to explain, "Ubuntu is an African word meaning 'Humanity to others', or 'I am what I am because of who we all are'."&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;How apt. Dear Canonical, why not show some Ubuntu (humanity to others) and acknowledge that you are who you are because of what Linux is?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-6267814150480057828?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/6267814150480057828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=6267814150480057828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6267814150480057828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/6267814150480057828'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/12/is-canonical-trying-to-purge-ubuntu-of.html' title='Is Canonical Trying to Purge Ubuntu of the L-word?'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-2038577051846365356</id><published>2009-12-03T19:08:00.000-08:00</published><updated>2009-12-23T23:38:50.408-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSON Schema'/><category scheme='http://www.blogger.com/atom/ns#' term='E4X'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Mashup Server'/><category scheme='http://www.blogger.com/atom/ns#' term='SOAP/WS-*'/><title type='text'>Advice To Organisations Embarking On SOA Today</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;I have been involved with SOA in various roles over the last two to three years, and my thinking has evolved a fair bit over this period. If I was asked to advise an organisation embarking on a major &lt;a href="http://en.wikipedia.org/wiki/Service-oriented_architecture"&gt;SOA&lt;/a&gt; initiative today, I would probably say this to them:&lt;br /&gt;&lt;br /&gt;1. The End Goal: Remember that SOA is not about integration but about &lt;span style="font-style: italic;"&gt;inherent interoperability&lt;/span&gt;. Think health, not medication. SOA is about raising the capability of your systems such that they can easily and inexpensively integrate with others, not about introducing a new, slick technology that will connect your systems together more easily. Simplifying the components of your enterprise and making them easy to understand and connect to will give you SOA. So keep simplicity at the back of your mind all the time, and don't confuse it with expediency, which is the path of least resistance. Simplification could take some effort.&lt;br /&gt;&lt;br /&gt;2. Domain Models: Don't waste too much time searching for "the" canonical data model. Most off-the-shelf ones are too high-level and abstract to be useful. And building your own comprehensive dictionary is wasteful and time-consuming. Instead, identify logical owners of different elements of data and let them own the data dictionary for those elements. All services exposed out of these logical domains should use these definitions and it is the responsibility of service consumers from other domains to understand them. Processes that combine services crossing such domains should perform their own mapping between similar data elements. It's necessarily messy and plenty of out-of-band communication will be required at design time. After all, even similarly-named elements may suffer from subtle interpretation errors, so manual discussion and clarification will always be part of a service or process design.&lt;br /&gt;&lt;br /&gt;This is not as bad as it sounds because only a subset of data elements managed by a domain is exposed through its service interface, and it's only these that may need translation to the context of their consumers. Don't look to do away with this manual effort through a single canonical data model. That's a wild goose chase, so don't even start.&lt;br /&gt;&lt;br /&gt;3. Infrastructure and Connectivity: Try and avoid using message queues unless you're looking at low latency situations like a trading floor, or if there's simply no other way to interface to a legacy system. The queuing paradigm introduces various coordination issues into application design, and implementing message queues requires establishing more complex patterns to solve these gratuitous problems. [I have a larger, philosophical argument about the need to innovate an application protocol on top of an asynchronous, peer-to-peer transport, but let's not confuse the current set of recommendations with that idea.]&lt;br /&gt;&lt;br /&gt;In today's world, HTTP-based communication patterns backed up by databases will often do the trick more simply than expensive message queues. Look beyond the apparent need for reliable message delivery. Often, an idempotent operation will suffice to meet the real requirement, and this is quite a standard pattern to implement. Often, queues are used in synchronous (blocking) patterns anyway (to avoid the coordination problems I talked about), so nothing is being gained in an architectural sense by the use of queues. And even asynchronous communications, where required,  can be implemented in standard ways over HTTP, so HTTP is quite a universal protocol to use as the logical infrastructural element for your SOA.&lt;br /&gt;&lt;br /&gt;ESBs, Service Directories and other "governance" components are often only required to manage the complexity that they themselves introduce. It's amazing what you can achieve with a farm of simple web servers and a database, and still keep things simple and understandable.&lt;br /&gt;&lt;br /&gt;4. Service Enablement: Try and avoid the entire SOAP/WS-* stack of technologies if you can. There is a significant complexity overhead associated with this set of technologies, and you will need an expensive toolset to (partially) simplify its use. Look seriously at &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt; instead. Even though REST advocates don't make the case strongly enough (and sometimes see SOA as an antithetical philosophy), REST is in fact a valid way to do SOA and can usually help to deliver solutions at much lower cost and complexity. The hard part about doing REST is finding good people who can &lt;span style="font-style: italic;"&gt;think &lt;/span&gt;that way. REST is subtly different from the SOAP/WS-* approach, even though they may just look like different kinds of plumbing to move XML documents around (and I confess that's the way I initially sell REST to corporate skeptics brought up on a diet of vendor-provided Web Services propaganda).&lt;br /&gt;&lt;br /&gt;5. Data Contract: Consider alternatives to XML for the data contract. Though this sounds like heresy, XML is heavyweight and cumbersome, and XML manipulation tools in high-level languages (with the possible exception of &lt;a href="http://en.wikipedia.org/wiki/ECMAScript_for_XML"&gt;E4X&lt;/a&gt; in JavaScript) are clumsy to use and suffer major impedance mismatches. You will spend more time wrestling with XML than on the service itself. Although many in the web world will immediately recommend &lt;a href="http://en.wikipedia.org/wiki/JSON"&gt;JSON&lt;/a&gt;, raw JSON is not sufficient to ensure data integrity, because it has hitherto lacked a strong schema definition capability. Maintain a watching brief on the &lt;a href="http://json-schema.org/"&gt;JSON Schema&lt;/a&gt; proposal, &lt;a href="http://json-schema.org/internet-drafts/draft-zyp-json-schema-00.txt"&gt;submitted&lt;/a&gt;&lt;a href="http://json-schema.org/internet-drafts/draft-zyp-json-schema-00.txt"&gt; for approva&lt;/a&gt;&lt;a href="http://json-schema.org/internet-drafts/draft-zyp-json-schema-00.txt"&gt;l&lt;/a&gt; as an IETF standard. Already, there are JSON Schema libraries in many high-level languages such as Java. It should be possible to define data contracts with as much rigour as with XML, but at a much lower level of complexity. A newer and more compact JSON Schema representation called &lt;a href="http://orderly-json.org/"&gt;Orderly&lt;/a&gt; is also maturing, which makes this approach simple as well as &lt;a href="http://orderly-json.org/tryit"&gt;easy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So instead of going down the XML rabbit-hole, start with JSON anyway, and incorporate JSON Schema/Orderly as it matures. You will find this works especially well in combination with REST. A quick Proof-of-Concept may convince the skeptics in your organisation (although the opposite result may also occur, with many going away convinced by the speed of this approach that it's either simplistic or too good to be true!)&lt;br /&gt;&lt;br /&gt;6. Web Service Implementation: If you're trapped by circumstances into an XML-and-SOAP/WS-* approach, look at the &lt;a href="http://wso2.com/products/"&gt;WSO2 suite&lt;/a&gt; of commercially-supported Open Source products. Especially look at the &lt;a href="http://wso2.com/products/mashup-server/"&gt;WSO2 Mashup Server&lt;/a&gt;. Don't be fooled by the name. It's more than just a mashup server. It's a service orchestration engine that (curiously) uses server-side JavaScript as its programming language. The major advantage of JavaScript is the ability to use the E4X library to perform extremely straightforward XML manipulation. Once you use E4X, you will never go back to JAXB or any other XML-processing library. WSO2 Mashup Server allows SOAP or REST services to be consumed, combined and orchestrated, and in turn exposes SOAP or REST services. It's a good way to hedge your bets if you're only half-convinced about REST. The WSO2 suite is also much less expensive than its proprietary rivals, although the real expense is in the heavyweight approach that it unfortunately shares with them.&lt;br /&gt;&lt;br /&gt;7. The Paradox: SOA is really all about simplicity, but it's hard to find SOA architects who seek to simplify systems. Conventional SOA practice seems to be about making integration complex through heavyweight approaches,  then introducing tools to manage that complexity, tools that require specialist skills to use properly. If done the conventional way as most SOA consultants seem to agree, your SOA initiative will only leave you with additional complexity to manage.&lt;br /&gt;&lt;br /&gt;Of course, if you're politically inclined, you will bask in the prestige of a hefty budget and a large team, and can declare victory anyway on the basis of the number of services and processes you have delivered. But if you want to be really successful at delivering SOA (i.e., making your business more agile and able to operate on a sustainably lower cost basis) while keeping your burn rate low along that journey, you would do well to look at boring, unimpressive and even anticlimactic approaches and technologies such as the ones I've listed above. Give the big vendors a wide berth. You don't need to buy technology (beyond the web servers and databases you already have). You certainly don't need to buy &lt;span style="font-style: italic;"&gt;complex &lt;/span&gt;technology, which is what the vendors all want to sell you.&lt;br /&gt;&lt;br /&gt;And don't let the lack of grandeur in this approach worry you. Complexity impresses the novice, but results are what ultimately impress all.&lt;br /&gt;&lt;br /&gt;Postscript: Vendor REST is coming. Beware.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-2038577051846365356?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/2038577051846365356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=2038577051846365356' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2038577051846365356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2038577051846365356'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/12/advice-to-organisations-embarking-on.html' title='Advice To Organisations Embarking On SOA Today'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-8934140909058381307</id><published>2009-11-16T05:46:00.000-08:00</published><updated>2009-11-16T20:16:39.330-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Spring Roo'/><category scheme='http://www.blogger.com/atom/ns#' term='Domain-Driven Design'/><title type='text'>Spring Roo Makes a Quiet Debut</title><content type='html'>&lt;div style="text-align: justify;"&gt;This has always been the Holy Grail (pun definitely intended!): To design an application using just object-orientation as the paradigm, and to have persistence, a service interface and a sensible user interface all generated for you automatically. In other words, just define the core behaviour of the application's objects, and you have a working web application with non-visual service interfaces to boot. This is the Domain-Driven Design dream (DDDD?)&lt;br /&gt;&lt;br /&gt;Spring Roo has been talked about for a while, but Grails beat it to market. However, it's better late than never for the product from the SpringSource stables, and Release Candidate 3 is &lt;a href="http://www.springsource.org/roo"&gt;now available&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For a teaser on what Roo can do, see &lt;a href="http://www.youtube.com/watch?v=Gb1Z0lfl52I&amp;amp;feature=player_embedded"&gt;this video&lt;/a&gt;. It's a third-party video based on RC2 (and you'll see some syntax differences when you start to play with RC3), but the spirit is the same.&lt;br /&gt;&lt;br /&gt;Exciting stuff!&lt;br /&gt;&lt;br /&gt;Update 17/11/2009: I sent the video link to a friend and colleague for his feedback. He 's a senior architect and based on his experience, he believes Roo needs to provide an Eclipse-based graphical interface rather than (in addition to?) a command-line interface. With that, he believes it's a winner.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-8934140909058381307?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/8934140909058381307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=8934140909058381307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/8934140909058381307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/8934140909058381307'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/11/spring-roo-makes-quiet-debut.html' title='Spring Roo Makes a Quiet Debut'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-7152987441863355743</id><published>2009-11-11T16:08:00.000-08:00</published><updated>2009-11-11T17:49:55.882-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SIP'/><category scheme='http://www.blogger.com/atom/ns#' term='Jabber'/><category scheme='http://www.blogger.com/atom/ns#' term='SIMPLE'/><category scheme='http://www.blogger.com/atom/ns#' term='Unified Communications'/><category scheme='http://www.blogger.com/atom/ns#' term='XMPP'/><title type='text'>Cisco Buys Jabber - What Does It Mean?</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.eweek.com/c/a/Messaging-and-Collaboration/How-Jabber-Fits-into-Ciscos-Unified-Communications-Plan/"&gt;Cisco has bought Jabber&lt;/a&gt; (another of those purchases of Open Source companies that make no sense to me - what are they really buying when the IP is public?)&lt;br /&gt;&lt;br /&gt;What it does indicate to me is that the Presence and Instant Messaging protocol pioneered by Jabber (&lt;a href="http://xmpp.org/"&gt;XMPP&lt;/a&gt;) is now becoming a more widely adopted standard. &lt;a href="http://code.google.com/apis/talk/open_communications.html"&gt;GoogleTalk&lt;/a&gt; and &lt;a href="http://blogs.zdnet.com/Greenfield/?p=210"&gt;Avaya&lt;/a&gt; have been using XMPP for a while now, and Cisco has just joined the bandwagon.&lt;br /&gt;&lt;br /&gt;My idea of a Unified Communications architecture is something that leverages &lt;a href="http://en.wikipedia.org/wiki/Session_Initiation_Protocol"&gt;SIP&lt;/a&gt;/&lt;a href="http://en.wikipedia.org/wiki/SIMPLE"&gt;SIMPLE&lt;/a&gt;, XMPP, HTTP and the open email protocols, rather than a vendor-proprietary stack. Microsoft and IBM have interesting stories in the UC space, but I would argue that this would be precisely the wrong time for an organisation to go with a proprietary suite of products. There's no such thing as a free pair of handcuffs.&lt;br /&gt;&lt;br /&gt;I had drawn up &lt;a href="http://groups.google.com/group/wisdomofganesh/web/UC%20Functional%20Components%20and%20Interfaces%20v0_2.pdf?hl=en"&gt;this architecture diagram&lt;/a&gt; on UC some time ago but didn't publicise it because it seemed a bit theoretical at the time. But now it seems to be more relevant with the strengthening of XMPP and SIP/SIMPLE.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-7152987441863355743?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/7152987441863355743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=7152987441863355743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/7152987441863355743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/7152987441863355743'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/11/cisco-buys-jabber-what-does-it-mean.html' title='Cisco Buys Jabber - What Does It Mean?'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-4567908199603334615</id><published>2009-11-05T00:07:00.000-08:00</published><updated>2009-11-05T03:59:31.580-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seminar'/><category scheme='http://www.blogger.com/atom/ns#' term='financial services'/><category scheme='http://www.blogger.com/atom/ns#' term='FST Media'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet banking'/><title type='text'>FST Media Annual Technology and Innovation Seminar Day One (05/11/2009)</title><content type='html'>&lt;div style="text-align: justify;"&gt;I attended FST Media's &lt;a href="http://www.fst.net.au/Agenda.aspx?con=14"&gt;4th annual seminar&lt;/a&gt; on technology and innovation themed "The Future of Banking and Financial Services" at the Hilton in Sydney.&lt;br /&gt;&lt;br /&gt;Some quick impressions:&lt;br /&gt;&lt;br /&gt;Don Koch, CEO of ING Direct, delivered the opening keynote and spoke about what customers will want next (answer: who knows?). (Incidentally, every single talk was billed as a "keynote", which leads one to question if FST Media knows what a keynote really is.)  He made a number of points but none stuck in my head as anything  particularly insightful.&lt;br /&gt;&lt;br /&gt;Rocky Scopelliti, General Manager, Financial Services, Industry Development, Telstra Enterprise &amp;amp; Government, spoke next about Gen Y and made some interesting points. Essentially, he was reporting on research by noted Australian sociologist &lt;a href="http://www.google.com.au/search?hl=en&amp;amp;safe=off&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla:en-GB:official&amp;amp;hs=igI&amp;amp;ei=QYrySrqIGY6usgPK9dUd&amp;amp;sa=X&amp;amp;oi=spell&amp;amp;resnum=0&amp;amp;ct=result&amp;amp;cd=1&amp;amp;ved=0CAgQBSgA&amp;amp;q=hugh+mackay+gen+y&amp;amp;spell=1"&gt;Hugh Mackay&lt;/a&gt;. Although Gen Y-ers have a reputation for being difficult to please and notoriously non-loyal, the research suggests that Gen Y-ers are in fact influenced by their parents, the Baby Boomers, who in turn grew up influenced by two opposing forces - on the one hand, abundant and growing prosperity that promised a better tomorrow, and on the other, by the threat of the Cold War and the possibility that there may be no tomorrow. The unique solution to this was the demand for instant gratification - enjoy life like there's no tomorrow. So Gen Y is not really demanding and disloyal; they're just keeping their options open for as long as possible.&lt;br /&gt;&lt;br /&gt;I forget whether Koch or Scopelliti made this point, but it was interesting that nowadays, all you need to establish a person's identity is their date of birth and mobile phone number. People tend not to change their mobile numbers, even if they switch providers. More on this later.&lt;br /&gt;&lt;br /&gt;David Boyle, CIO, International Financial Services, Commonwealth Bank next spoke about cloud computing at CBA. The interesting aspect of his talk was his call for fellow customers to get together with him and his team to define some basic standards for cloud computing, because he's afraid of the same thing that I am, i.e., that some vendor-proprietary technology will become the de facto standard for cloud computing which will make it unnecessarily pricey.&lt;br /&gt;&lt;br /&gt;There were a few eminently forgettable panel discussions (with the only exception being the one on which Dhiren Kulkarni, joint CIO of St George Bank, was being needlessly competitive and obnoxious towards his fellow panelists. He earned a rejoinder at one stage from Pravir Vohra, CTO of ICICI Bank, which was roundly applauded.)&lt;br /&gt;&lt;br /&gt;The next talk was billed as an "International Keynote" and was delivered by the aforementioned Pravir Vohra, who provided a few interesting insights into the growth of ICICI Bank. It's been almost 15 years since I left India, and I didn't know ICICI Bank had become the second largest Indian Bank. I guess it would still be a distant second to State Bank of India, though. SBI has more branches than some banks have customers :-).&lt;br /&gt;&lt;br /&gt;Vohra would be the envy of CTOs everywhere, because he says he has 25% of the technology budget to play with. I.e., he's free to invest in various technologies and initiatives. If they work out, he "transfer prices" the benefits to the business units that he can serve with it. I have always felt that a similar system is required for Enterprise Utilities. Neither the "first project pays" model nor a Big Bang enterprise rollout in a single financial year is the right one. We need an accounting treatment for Utilities akin to R&amp;amp;D, with carryovers possible across financial years.&lt;br /&gt;&lt;br /&gt;I was very pleased to hear that ICICI Bank only uses &lt;a href="http://www.openoffice.org/"&gt;OpenOffice&lt;/a&gt;, not Microsoft Office. Vohra estimates that this choice saves his bank more than $15 million a year, even more than the projected savings from cloud computing! Who said the Third World lags behind the First? Sometimes they lead the way.&lt;br /&gt;&lt;br /&gt;One thing Vohra said that didn't seem quite right was his contrast of consumer behaviour in India with that in Australia - he said Indians change their mobile numbers every six months! Apart from the fact that the Indians I know haven't changed their mobile numbers in quite a while, it seems very counter-intuitive behaviour. Why would anyone make life more difficult for themselves in this manner?&lt;br /&gt;&lt;br /&gt;The three sessions after lunch and before tea were uniformly missable.&lt;br /&gt;&lt;br /&gt;David Cartwright, Group Managing Director, Operations, Technology and Shared Services, ANZ  was probably the best of the lot. He spoke about ANZ Bank's "Journey to a Super-Regional Bank". An interesting aspect was the emphasis ANZ Bank places on its new corporate headquarters in Melbourne that has a 6 star green rating. It resembles a skyscraper on its side and is deliberately designed to have a huge floor area on a limited number of floors so as to maximise interaction between people. Another interesting technology they have is "telepresence", which is very high quality videoconferencing, which gives the impression that remote participants are actually in the room on the opposite side of the table.&lt;br /&gt;&lt;br /&gt;The aforementioned Dhiren Kulkarni spoke next, and repeatedly parrotted his boss Gail Kelly's favourite phrase "delighting the customer" &lt;span style="font-style: italic;"&gt;ad nauseam&lt;/span&gt;. You don't get more patronising, defensive, competitive and humourless than this bloke. Not very good PR for Westpac-St George to trot him out at industry seminars.&lt;br /&gt;&lt;br /&gt;Rounding out the boring lot was Darren Covington, Vice President, Asia Pacific Japan, Enterprise Software Applications, Hewlett Packard. He spoke about churn and the desirability of retaining customers because it's far cheaper than acquiring new ones (a well-worn concept), but added no new insights. My cynical reaction was that with the Australian banking sector being as oligopolistic as it is, a customer who walks out the door is readily replaced by another bank's customer who walks in. There are only four banks in the game, so where will customers go anyway? It's not so much churn as a nice merry-go-round.&lt;br /&gt;&lt;br /&gt;After tea, we had Randy Fennel, General Manager, Engineering and Sustainability, Technology, Westpac, talking about sustainability, which again was a bit ho-hum.&lt;br /&gt;&lt;br /&gt;The last session of the day was by far the best. Phil Hopper, founder of &lt;a href="https://www.igrin.com.au/default.aspx"&gt;iGrin&lt;/a&gt; spoke about peer-to-peer lending. This is an extremely interesting concept that I hadn't heard of before. There have been players like Zopa, LendingClub, etc., who have all fallen on hard times now, both because of the Global Financial Crisis and because of some increased regulatory requirements.&lt;br /&gt;&lt;br /&gt;Peer-to-peer lending exploits the big spread enjoyed by the large institutional lenders. Banks borrow from individuals at 5% (the deposit interest rate) and offer personal loans to individuals at anywhere over 12%, sometimes going up to 18% in the case of some credit cards. This means that there is a spread of at least 7% here to be exploited if individuals lend direct to each other. A P2P lending marketplace can take 2%, leaving 5% to be split between lender and borrower, with both consequently better off than by going through banks. Hopper described P2P lending as "eBay for money".&lt;br /&gt;&lt;br /&gt;He also spoke about Australia currently operating on a model of negative credit data only, which makes it hard to assess the creditworthiness of most people. But there is apparently some privacy-related legislation due shortly that will remove impediments to acquiring (positive) credit data.&lt;br /&gt;&lt;br /&gt;Other points were the subtle differences between microfinance, lending to the underbanked, and prime lending. Hopper pointed out that by ceding a degree of control to customers, P2P lending agencies allowed innovation to happen, such as "blenders" (arbitrage players who use their superior credit rating to borrow at lower rates and lend to others at a slightly higher rate), and people who run Self-managed Super Funds who invest (lend) from the fund into the P2P market and then borrow the money right back. Some of this sounds dodgy to me (and to the Tax Office, I'm sure), but it certainly is innovative.&lt;br /&gt;&lt;br /&gt;In spite of the temporary problems faced by P2P players including iGrin, Hopper sees a good future for the concept. There are niches (after the Online Auction itself) that can be independently filled by various players, such as Identity Verification, Credit Assessment, Fulfillment/Settlement (both contracts and statements) and Collections. A bill likely to be passed by parliament soon (the Private Properties Securities Bill) will also allow people to securitise their own assets like their property, enabling lending to become more "secured". Once a secondary market develops, it will be possible for the P2P segment to expand from its personal lending base (with a typical term between 12 months and 5 years) into the mortgage market (with terms of upto 30 years). This is because although the typical small lender would not be willing to enter into 30-year loans, the emergence of a secondary market will make this possible, since debt obligations like these can themselves be traded. Wholesale funds are another step along the development of P2P lending.&lt;br /&gt;&lt;br /&gt;All in all, a most fascinating concept, and Phil Hopper did an excellent job of presenting it. It seemed a little too slick, though. As moderator and host Michael Pascoe asked him, I wonder if this is a case of amateurs attempting to take on the professionals. To a more pointed question, Hopper defended the eventual viability of the "amateur" P2P market even against the eventual entry of the "professionals", and Pascoe insightfully remarked that he would rather have had Hopper express a desire to be bought out by a bank.&lt;br /&gt;&lt;br /&gt;That was the end of the first day.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-4567908199603334615?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/4567908199603334615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=4567908199603334615' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4567908199603334615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4567908199603334615'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/11/fst-media-annual-technology-and.html' title='FST Media Annual Technology and Innovation Seminar Day One (05/11/2009)'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-3789714827083273169</id><published>2009-10-09T06:16:00.000-07:00</published><updated>2009-10-09T06:22:54.447-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet banking'/><title type='text'>Rare Home Truths about Windows</title><content type='html'>&lt;div style="text-align: justify;"&gt;I never expected to actually read &lt;a href="http://www.itnews.com.au/News/157767,nsw-police-dont-use-windows-for-internet-banking.aspx"&gt;such news&lt;/a&gt;. A senior police officer spoke to members of parliament and candidly told them that they should use Linux if they expect secure Internet banking.&lt;br /&gt;&lt;br /&gt;I guess the truth always comes out in the end. Microsoft has lies, hush money and non-tech savvy users on its side, but as Lincoln said, you can't fool all the people all the time.&lt;br /&gt;&lt;br /&gt;Of course, I could also tell that we still have a long way to go.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The collection of MPs listening to van der Graaf were very enthusiastic about his suggestion but didn't understand what he meant and asked for clarification.&lt;br /&gt;&lt;br /&gt;"You may need to explain further for us," said one MP, while another responded, "yes, we need to understand that".&lt;br /&gt;&lt;/blockquote&gt;On the brighter side, knowledge comes from asking questions and finding out more. When lay users find out more about Ubuntu Linux, I doubt if many will stay with Windows. The success of Firefox proves that people are not wedded to Microsoft's products.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-3789714827083273169?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/3789714827083273169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=3789714827083273169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3789714827083273169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3789714827083273169'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/10/rare-home-truths-about-windows.html' title='Rare Home Truths about Windows'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-956401032270704860</id><published>2009-10-06T15:13:00.000-07:00</published><updated>2009-12-22T20:42:19.068-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSON Schema'/><category scheme='http://www.blogger.com/atom/ns#' term='JSON'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Orderly'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>JSON Schema becomes more Orderly</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;I have been convinced for a while that just like REST will gradually displace its more heavyweight SOAP/WS-* equivalent, JSON will slowly displace the mighty XML in its various strongholds (today Web Services, tomorrow the world :-). But to do that, JSON first needs to incorporate some rigour into its definition, using an equivalent to XML Schema, Relax NG or Schematron.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.json-schema.org/"&gt;JSON Schema&lt;/a&gt; proposal seemed to fit the bill quite nicely, but I was always vaguely uneasy that it was so verbose. There was probably no escape from that, since one of the requirements was that JSON Schema should itself be valid JSON (otherwise two parsers  would be needed to consume a snippet of schema-compliant JSON).&lt;br /&gt;&lt;br /&gt;Now along comes another schema syntax for JSON called &lt;a href="http://trickyco.de/2009/10/02/orderly-jsonschema"&gt;Orderly&lt;/a&gt;, which has the twin advantages of being succinct and being able to round-trip to JSON Schema. The syntax has already &lt;a href="http://trickyco.de/2009/10/06/forwarding-orderly-json-v0"&gt;been revised&lt;/a&gt; with &lt;a href="http://groups.google.com/group/json-schema/browse_thread/thread/e259869510420842/bde8c8d3b3f957b6"&gt;inputs from commenters&lt;/a&gt;, and is looking much better in its second version.&lt;br /&gt;&lt;br /&gt;Orderly's main advantage is its human-readability and -composability. Its simplicity (with no loss of rigour) will give JSON (and JSON Schema) the impetus they need to challenge XML. If Orderly catches fire, I believe it will accelerate the adoption of JSON for serious service-oriented work.&lt;br /&gt;&lt;br /&gt;It's overdue.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-956401032270704860?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/956401032270704860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=956401032270704860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/956401032270704860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/956401032270704860'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/10/json-schema-becomes-more-orderly.html' title='JSON Schema becomes more Orderly'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-868437982889401882</id><published>2009-09-22T04:05:00.001-07:00</published><updated>2009-09-22T04:28:53.581-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='CRUD'/><category scheme='http://www.blogger.com/atom/ns#' term='polymorphism'/><title type='text'>REST is Polymorphic CRUD</title><content type='html'>&lt;div style="text-align: justify;"&gt;I've been trying to evangelise REST a bit lately and have had mixed success. There is cautious interest. But there are also huge conceptual hurdles to be overcome. Pete Lacey said it best about enterprise IT folk when it comes to REST: &lt;a href="http://72.249.21.88/nonintersecting/2006/11/29/they-cant-hear-you/"&gt;They Can't Hear You&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One architect looked at the definition of a service interface I proposed and thought it a bit "bland". Perhaps it just needed a big WSDL file, lots of XML and SOAP faults!&lt;br /&gt;&lt;br /&gt;Another common reaction to REST when it's presented is that "it's just CRUD", with the implication that it's just too fine-grained to be used to create good business services. I've been struggling to explain that just because REST uses four HTTP verbs that correspond roughly to CRUD operations, it doesn't necessarily mean that REST is a CRUD approach to manage data at a very low and detailed level. The resources on which the verbs operate can be arbitrarily coarse-grained. But what has eluded me so far is a succinct term that can drive the point home.&lt;br /&gt;&lt;br /&gt;I think I've finally found it - "Polymorphic CRUD".&lt;br /&gt;&lt;br /&gt;IT folk in the enterprise understand both polymorphism and CRUD, so the combined term should make sense. I want to drive home the point that a verb itself is neither coarse- nor fine-grained, it's how each resource interprets it. Fine-grained resources will interpret the REST verbs as CRUD operations. But more coarse-grained resources can interpret the verbs as any arbitrary business operation.&lt;br /&gt;&lt;br /&gt;Accompanied by the appropriate payload, POSTing to the resource "/applications" is nothing but submitting an application. There's no need for a specific "submitApplication" method.&lt;br /&gt;&lt;br /&gt;I've also realised that one can clear a process inbox by DELETEing a "/pending" resource, with a standard WebDAV status code in response (207 Multi-Status), indicating that different items encountered different status codes during the batch process.&lt;br /&gt;&lt;br /&gt;It's the way the verb is interpreted by each resource that gives it its meaning in that context. Therefore the REST approach is to manipulate business objects of arbitrary size and complexity through polymorphic CRUD operations.&lt;br /&gt;&lt;br /&gt;I hope that gets people to go "Aha!"&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-868437982889401882?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/868437982889401882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=868437982889401882' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/868437982889401882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/868437982889401882'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/09/rest-is-polymorphic-crud.html' title='REST is Polymorphic CRUD'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-3533871315284803646</id><published>2009-09-14T21:04:00.000-07:00</published><updated>2009-09-14T21:11:21.139-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>The Answer to Complexity</title><content type='html'>&lt;div style="text-align: justify;"&gt;This sounds trite, but long arguments with colleagues in IT have convinced me that this is anything but obvious and therefore needs to be explicitly stated.&lt;br /&gt;&lt;br /&gt;Guys, the answer to complexity is not better tooling.&lt;br /&gt;&lt;br /&gt;It's simplicity.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-3533871315284803646?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/3533871315284803646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=3533871315284803646' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3533871315284803646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3533871315284803646'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/09/answer-to-complexity.html' title='The Answer to Complexity'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-4684659910884329035</id><published>2009-08-11T07:08:00.000-07:00</published><updated>2009-08-11T07:17:45.024-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology stack'/><category scheme='http://www.blogger.com/atom/ns#' term='platforms'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Standards'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise architecture'/><title type='text'>An Enterprise Technology Stack for Business Agility and Sustainably Low Cost</title><content type='html'>&lt;div style="text-align: justify;"&gt;I have been musing about this for a few years now, but some recent discussions with colleagues caused my thinking to finally crystallise. I realise that the two enterprise IT objectives of delivering business agility and sustainably low cost are both realisable through a  fairly simple, though disciplined, architectural approach. There is no real trade-off between flexibility and cost-effectiveness, although hard choices need to be made and problematic technologies need to be fearlessly called out.&lt;br /&gt;&lt;br /&gt;I've attempted to build this logic out into an argument in &lt;a href="http://groups.google.com.au/group/wisdomofganesh/web/Enterprise%20Platforms%20v0_1.pdf?hl=en"&gt;this presentation&lt;/a&gt;. I'm sure there will be many who will object vigorously to various aspects of this argument, but I'm confident that this logic will appear obvious in hindsight within a decade.&lt;br /&gt;&lt;br /&gt;For those who don't have the patience to go through the entire presentation, the final technology stack is illustrated below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_WlHQzt6LF1U/SoF89LFxNmI/AAAAAAAAARs/aZWicmIxJ0Y/s1600-h/Enterprise_Technology_Platform_Stack.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_WlHQzt6LF1U/SoF89LFxNmI/AAAAAAAAARs/aZWicmIxJ0Y/s320/Enterprise_Technology_Platform_Stack.png" alt="" id="BLOGGER_PHOTO_ID_5368709621193193058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-4684659910884329035?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/4684659910884329035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=4684659910884329035' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4684659910884329035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4684659910884329035'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/08/enterprise-technology-stack-for.html' title='An Enterprise Technology Stack for Business Agility and Sustainably Low Cost'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_WlHQzt6LF1U/SoF89LFxNmI/AAAAAAAAARs/aZWicmIxJ0Y/s72-c/Enterprise_Technology_Platform_Stack.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-3612785206825789853</id><published>2009-07-22T05:30:00.000-07:00</published><updated>2009-07-22T07:07:02.051-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='URN'/><category scheme='http://www.blogger.com/atom/ns#' term='HTTP'/><category scheme='http://www.blogger.com/atom/ns#' term='modelling'/><category scheme='http://www.blogger.com/atom/ns#' term='scheme'/><category scheme='http://www.blogger.com/atom/ns#' term='Resource'/><category scheme='http://www.blogger.com/atom/ns#' term='UUID'/><title type='text'>Modelling Resources from First Principles</title><content type='html'>&lt;div style="text-align: justify;"&gt;I've been providing architectural advice to a group of colleagues who are building a set of services. Without going into too much detail, they need to uniquely identify some entities. Clients of the services use these identifiers as references when they return to make related queries on these entities. They've proposed using &lt;a href="http://en.wikipedia.org/wiki/Universally_Unique_Identifier"&gt;UUIDs&lt;/a&gt; as the unique identifiers, and while I liked the idea, I thought it was too simplistic. There was more to the requirement than just unique identifiers.&lt;br /&gt;&lt;br /&gt;They're actually dealing with two types of entities - widgets (say) and requests for widgets. These are different because a request can pertain to a set of widgets, so it may be necessary to model them distinctly. The service interfaces dealing with requests and widgets may need to be distinct as well.&lt;br /&gt;&lt;br /&gt;Mind you, these services are not going to be REST services. But having been exposed to the RESTian way of thinking, I immediately thought of resource representations for the two types of entities. Rather than plain old UUIDs, I thought there should be a degree of structure around them (but not so much detail as to make the scheme brittle and inflexible).&lt;br /&gt;&lt;br /&gt;Something like these, in other words:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;http://www.mycompany.com/widgets/4f138ff2-362f-4e35-8f9e-173290fe86d7&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;http://www.mycompany.com/widget-requests/eabf5bdb-9800-4af5-9ad7-32c3b95fc48a&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;However, this suggestion proved to be a surprisingly hard sell. The cross-examination was withering.&lt;br /&gt;&lt;br /&gt;Why all the extra information?&lt;br /&gt;Why http://?&lt;br /&gt;Why www.mycompany.com?&lt;br /&gt;&lt;br /&gt;Why not a simpler scheme like these examples show:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;widget:4f138ff2-362f-4e35-8f9e-173290fe86d7&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;widget-request:eabf5bdb-9800-4af5-9ad7-32c3b95fc48a&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;I found I had to retrace my steps and work through my reasoning from first principles. In the process, I learnt a great deal about naming.&lt;br /&gt;&lt;br /&gt;My initial response was to point my colleagues to points 7 and 8 of "&lt;a href="http://www.prescod.net/rest/mistakes/"&gt;Common REST Mistakes&lt;/a&gt;", where we are admonished not to try and invent our own proprietary object identifiers, and not to try for "protocol independence" (i.e., avoid HTTP URIs). But this wasn't too convincing.&lt;br /&gt;&lt;br /&gt;I made a bit of progress by getting agreement on the following:&lt;br /&gt;&lt;br /&gt;1. It probably made sense to distinguish between widget identifiers and widget-request identifiers, so some sort of prefix to distinguish between them was necessary. UUIDs alone were probably not enough.&lt;br /&gt;2. It also probably made sense to specify the "domain" within which these resources were being identified, so the "mycompany" string probably belonged somewhere as well.&lt;br /&gt;&lt;br /&gt;But then, why not just these:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;mycompany:widget:4f138ff2-362f-4e35-8f9e-173290fe86d7&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;mycompany:widget-request:eabf5bdb-9800-4af5-9ad7-32c3b95fc48a&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Frankly, I hated this. My point was that such a format, even though "simple", would have to be &lt;span style="font-style: italic;"&gt;explained&lt;/span&gt; to anyone looking at it. The structure wasn't immediately obvious. Worse, it was ambiguous and could be extended by later designers in ways that violated the original designers' intent. To this, the counterargument was that the knowledge of the format was only required on the server side. To the client, the whole name was just going to be an opaque string, - a reference ID.&lt;br /&gt;&lt;br /&gt;I wrestled with this objection for a while. Then I proposed a guiding principle that given a choice between two naming conventions, a universally understood one was preferable to one that we made up ourselves, provided it wasn't unnecessarily complex.&lt;br /&gt;&lt;br /&gt;My research led me to the definition of a &lt;a href="http://en.wikipedia.org/wiki/Uniform_Resource_Name"&gt;URN (Universal Resource Name)&lt;/a&gt;. What I learnt from this was that in order to name something, we first need to specify a "scheme" that then defines what the rest of the name denotes according to the predefined format for that scheme. The name of the scheme is followed by a colon, then the rest of the name is something that can only be interpreted according to the rules specified by that scheme.&lt;br /&gt;&lt;br /&gt;In other words, a standard name (URN) looks like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;scheme name&amp;gt;:&amp;lt;some scheme-specific format&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;A common example is&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;"http://www.mycompany.com/widgets/4f138ff2-362f-4e35-8f9e-173290fe86d7"&lt;/span&gt;&lt;/span&gt; (Heh!)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;It's important to point out that "http" in the string above does not refer to the HTTP protocol!&lt;/span&gt; It's the name of a "scheme". What does this mean?&lt;br /&gt;&lt;br /&gt;Well, in the URN "file:///home/ganesh", the string "file" is not a protocol, because more than one protocol may be used to get to the file.&lt;br /&gt;&lt;br /&gt;Similarly, in the URN "mailto:ganesh@mycompany.com", the string "mailto" is not a protocol. SMTP is the actual mail protocol.&lt;br /&gt;&lt;br /&gt;[For those familiar with XML namespaces, when we say "xmlns=&lt;a id="A1453" name="A1453"&gt;'http://www.example.com/schema'", the URN being referred to here is not necessarily a web page that one can point a browser at. It just needs to be a unique string.]&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;So we're not necessarily modelling our resources as web resources. All that the "http" scheme defines is that after the colon (":"), there is a scheme-specific structure that specifies a few things.&lt;br /&gt;&lt;br /&gt;There are two slashes, then there's a dot-separated domain name, then a slash, then a "resource path" which is itself slash-separated. So that's what a URN conforming to the "http" scheme looks like:&lt;br /&gt;&lt;br /&gt;"http" (the name of the scheme)&lt;br /&gt;":" (the colon separating the name of the scheme from the scheme specific structure. This is from the basic definition of a URN)&lt;br /&gt;"//" (the "http" scheme just specifies this, OK?)&lt;br /&gt;"www.mycompany.com" (this is the dot-separated domain name)&lt;br /&gt;"/" (this is the first slash that signifies that the domain name is terminated)&lt;br /&gt;"widgets/4f138ff2-362f-4e35-8f9e-173290fe86d7" (all of this is the "resource path" , and internal slashes are possible, as we can see)&lt;br /&gt;&lt;br /&gt;So now going back to our guiding principle (using a well-understood format is preferable to rolling our own) as well as the two points on which there was agreement (i.e., that we may need to qualify the resource's UUID with the type of resource as well as the organisational domain), it looks like the "http" scheme of the URN naming standard fits the bill. This is a well-understood way to include both a domain and a resource path to provide some structure around an already unique ID.&lt;br /&gt;&lt;br /&gt;I concede that the "www" prefix of the domain could confuse. All we really need to identify the domain is "mycompany.com".&lt;br /&gt;&lt;br /&gt;And so, a unique, standards-based and minimal way to name resources in this business domain would be&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;http://mycompany.com/widgets/4f138ff2-362f-4e35-8f9e-173290fe86d7&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;http://mycompany.com/widget-requests/eabf5bdb-9800-4af5-9ad7-32c3b95fc48a&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-3612785206825789853?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/3612785206825789853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=3612785206825789853' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3612785206825789853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3612785206825789853'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/07/modelling-resources-from-first.html' title='Modelling Resources from First Principles'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-959220178375956588</id><published>2009-06-23T02:06:00.000-07:00</published><updated>2009-06-23T17:08:38.895-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vendor lock-in'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Standards'/><title type='text'>What's Wrong With Vendor Lock-In?</title><content type='html'>&lt;div style="text-align: justify;"&gt;A colleague asked me this question today, and I'm really glad it came out in the open, because it's so much easier to deal with ideas when they're plainly stated.&lt;br /&gt;&lt;br /&gt;I believe there are at least two strong reasons to actively avoid vendor lock-in.&lt;br /&gt;&lt;br /&gt;The first reason, paradoxically, lies in the very justification for agreeing to be locked in - "ease of integration". If an organisation already has a product from a certain vendor and is looking for another product that needs to integrate with this one, then conventional thinking is to go back to the same vendor and buy their offering rather than a competitor's. After all, they're far more likely to be "well integrated". There are typically so many problems integrating products from different vendors that it doesn't seem worth the effort. The best-of-breed approach leads to integration problems, so customer organisations often throw in the towel and go for an "integrated stack" of products from one company.&lt;br /&gt;&lt;br /&gt;This approach is antithetical to SOA thinking, however. What they're really saying here is that they don't mind &lt;span style="font-style: italic;"&gt;implicit contracts&lt;/span&gt; between systems as long as they work. But implicit contracts are a form of tight coupling, and as we know, tight coupling is brittle.  Upgrade one product and you'll very likely need to upgrade the other as well. In production systems, we have seen product upgrades delayed &lt;span style="font-style: italic;"&gt;for years &lt;/span&gt;because the implicit dependencies between "well-integrated" components could cause some of them to break on an upgrade, which is unacceptable in mission-critical systems. As a result, many useful features of later versions are forfeited. That's one of the unseen, downstream costs of the tight coupling that comes from vendor lock-in.&lt;br /&gt;&lt;br /&gt;SOA shows us the solution. For &lt;span style="font-style: italic;"&gt;robust &lt;/span&gt;integration between systems, we need loose coupling between them, which seems a bit paradoxical. Shouldn't tight coupling be more robust? Hard experience has taught us otherwise. But what is loose coupling? It's a hard concept to visualise, so let's define it in terms of tight coupling, which is easier to understand. In practical terms,  loose coupling between two systems can be thought of as tight coupling to a mutually agreed, rigid contract rather than to each other. Such contracts are very often nothing more than open standards.&lt;br /&gt;&lt;br /&gt;Even though people generally nod their heads when asked about their preference for open standards, the contradiction between that stated preference and their practical choices in favour of "integrated stacks" is hard to understand. If pressed, they might say that creating contracts external to both systems and insisting on adherence to them seems like a waste of time. Why not something that just works "out of the box"? The answer is that this is not an either-or choice. A browser and a web server work together "out of the box", but they do so not because they come from the same company but because they both adhere to the same rigid contract, which is the set of IETF and W3C standards (HTTP, HTML, CSS and JavaScript).&lt;br /&gt;&lt;br /&gt;The key is to hold vendors' feet to the fire on adherence to open standards. This isn't that hard. With Open Source products available in the market to keep vendors honest, customers have only themselves to blame if they let themselves get locked in.&lt;br /&gt;&lt;br /&gt;The second reason why vendor lock-in is a bad idea is because it often implies &lt;span style="font-style: italic;"&gt;vendor lock-out&lt;/span&gt;. Very often, customers are held hostage to the politics of vendor competition. Once you start buying into a particular vendor's stack, it will become increasingly hard to look elsewhere. Any third-party component you procure will be less likely to play well with the ones you already have, causing you more integration headaches. My favourite example from just a few years ago is Oracle Portal Server, which claimed to support authentication against LDAP. It turned out later that it wasn't just any LDAP server but just Oracle's own OID. This meant that the corporate directory server which happened to be IBM Tivoli LDAP couldn't be used. The data in it had to be painfully replicated to OID to allow Oracle Portal Server to work.&lt;br /&gt;&lt;br /&gt;My solution to incipient vendor lock-in would be to aggressively seek standard interfaces even between products from the same company. I remember asking an IBM rep why they weren't enabling SMTP, IMAP and vCalendar as the mail protocols between Notes client and server. The rep sneered at me as if I was mad. Why would you use these protocols, he wanted to know, when Notes client and server are so "tightly integrated"? Others on my side of the fence agreed with him. Well, the answer came back to bite the company many years later, when they wanted to migrate to Outlook on the client side.   Their "tight integration" had resulted in vendor lock-out, preventing them from connecting to Notes server using Outlook (which standard protocols would have allowed) and they were stuck with Notes client indefinitely. By that time, there were too many other dependencies that had been allowed to work their way in, so enabling open protocols at that stage was no longer an option. That was a great outcome for IBM, of course, but to this day, there are people in the customer organisation who don't see that what happened to them was a direct consequence of their neglect of open interfaces in favour of closed, "tight" integration.&lt;br /&gt;&lt;br /&gt;Ultimately, vendor lock-in has implications of cost, time and effort, which basically boils down to cost, cost and cost.&lt;br /&gt;&lt;br /&gt;As users of technology, we simply cannot afford it.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-959220178375956588?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/959220178375956588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=959220178375956588' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/959220178375956588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/959220178375956588'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/06/whats-wrong-with-vendor-lock-in.html' title='What&apos;s Wrong With Vendor Lock-In?'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-3721796285834326139</id><published>2009-06-22T17:37:00.000-07:00</published><updated>2009-06-23T00:28:26.067-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anti-virus'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Microsoft May Lose Some Fair-Weather Friends</title><content type='html'>&lt;div style="text-align: justify;"&gt;I read the news of the release of Microsoft Security Essentials with some amusement.&lt;br /&gt;&lt;br /&gt;One reason for my amusement is the notion that an operating system should require a separate product to ensure its security instead of having security built into its design.&lt;br /&gt;&lt;br /&gt;The other reason is the anticipation of the impact this will have on that group of parasites in the Windows ecosystem. I'm talking about the makers of anti-virus software.&lt;br /&gt;&lt;br /&gt;For a long time now, these companies have been less-than-honest players in the industry, revelling in the fact that the inherent vulnerabilities in Windows have given them a steady income stream and acting like they have the best interests of the customer at heart, when in fact they have always fought true advances in computer security that would have put them out of business.&lt;br /&gt;&lt;br /&gt;The FUD from these players against Linux has been astounding.  A common refrain is that "Linux is only secure because no one uses it. When its profile rises, hackers and malware writers will turn their attention to it." Really? How come IIS used to attract a disproportionate share of web server attacks in spite of Open Source Apache having twice its market share at the time? Surely it's badly-designed systems that invite attack.&lt;br /&gt;&lt;br /&gt;These folk even try and sell anti-virus software for Linux! This would certainly fool people who don't realise that Linux itself is the best anti-virus software you can install on your computer. I haven't been hit by malware since 1997, when I first installed Slackware Linux on my PC.&lt;br /&gt;&lt;br /&gt;So what will Microsoft's announcement of free anti-virus protection do to the likes of McAfee and Symantec? While users will probably be going, "It's about time," I can imagine a very different reaction at these companies.&lt;br /&gt;&lt;br /&gt;I'm not shedding any tears, though.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-3721796285834326139?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/3721796285834326139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=3721796285834326139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3721796285834326139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/3721796285834326139'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/06/microsoft-may-lose-some-fair-weather.html' title='Microsoft May Lose Some Fair-Weather Friends'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-2923773007300973424</id><published>2009-06-08T04:48:00.000-07:00</published><updated>2009-06-09T10:02:42.743-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaOne'/><category scheme='http://www.blogger.com/atom/ns#' term='SanFrancisco'/><title type='text'>JavaOne 2009 Day Five (05/06/2009)</title><content type='html'>&lt;div style="text-align: justify;"&gt;The final day of JavaOne 2009 began with a General Session titled "James Gosling's Toy Show". This featured the creator of Java playing host to a long line of people representing organisations that were using Java technology in highly innovative and useful ways. Many of them got Duke's Choice awards.&lt;br /&gt;&lt;br /&gt;First up was Ari Zilka (CEO, Terracotta) who was given the award for a tool that makes distributed JVMs appear like one, thereby providing a new and different model of clustering and scalability. Terracotta also allows new servers and JVMs to be added on the fly to scale running Java applications.&lt;br /&gt;&lt;br /&gt;Brendan Humphreys ("Chief Code Poet", Atlassian) received the award for Atlassian's tool Clover. [Brendan is from Atlassian's Sydney office, and I've met him there on occasion when Atlassian hosts the Sydney Java User Group meetings.] Clover is about making testing easier by identifying which tests apply to which part of an application. When changing part of an application, Clover helps to run only the tests that apply to that part of the code.&lt;br /&gt;&lt;br /&gt;Ian Utting, Poul Henriksen and Darin McCall of BlueJ were recognised (though not with a Duke's Choice award) for their work on Greenfoot, a teaching tool for children. Most of their young users are in India and China, but it's not clear how many there are, because they only interact with the Greenfoot team through their teachers.&lt;br /&gt;&lt;br /&gt;Mark Gerhard (CEO of Jagex) was called up to talk about RuneScape. [Mark Gerhard received the Duke's Choice Award on Day 2, as diligent readers of this blog would remember.] This time, the focus was not on the game itself, but on the infrastructure it took to run it. According to Gerhard, Jagex runs the world's second-biggest online forum. There is no firewall in front of the RuneScape servers (!), so they get the full brunt of their user load. The servers haven't been rebooted in years. Jagex had to buid their own toolchain, because a toolchain needs to understand how to package an application for streaming, which off-the-shelf equivalents don't know to do. Jagex runs commodity servers (about 20?) and their support team has just 3 people. Considering that their user base numbers 175 million (10 million of whom are active at any time), this is a stupendous ratio. Of course, Jagex has about 400 other staff, mainly the game developers. Jagex builds their libraries and frameworks in-house, and they maintain feature parity with their commercial competitor, Maya. I found it curious that Gerhard was cagey when asked which version of Java they used. Why would that need to be a secret? All he would say was that we could guess the version from the fact that their servers hadn't been rebooted in 5 years.&lt;br /&gt;&lt;br /&gt;By way of vision, Gerhard said that OpenGL would be standard on cell phones in a year, and Jagex's philosophy is that "There's no place a game shouldn't be".&lt;br /&gt;&lt;br /&gt;The next people on stage were two researchers from Sun itelf, - Simon Ritter and Angela Caicedo. [Caicedo had been at the Sydney Developer Day only a couple of weeks earlier.] Ritter demonstrated a cool modification of the Wii remote control, especially its infra-red camera. The remote talks Bluetooth to a controller. I didn't grasp the details of how the system was built, although I heard the terms Wii RemoteJ and JavaFX being mentioned. Ritter held a screen in front of him, and a playing card was projected onto it. Nothing hi-tech there. When he rotated the screen by 90 degrees, the projected image rotated as well, which was interesting. But what brought applause was when he flipped the screen around, and the projected image switched to the back of the card! He also showed how a new card could be projected onto the screen by just shaking the screen a bit (shades of the iPod Shuffle there).&lt;br /&gt;&lt;br /&gt;Caicedo demonstrated a cool technology that she thought might be useful to people like herself who had young children with a fondness for writing on walls. With a special glove that had a embedded infra-red chip, she could "draw" on a screen with her finger, because a projector would trace out whatever she was drawing based on a detection of the position of her finger at any given time. The application was a regular paint application, allowing the user to select colours from a toolbar and even mix them on a palette.&lt;br /&gt;&lt;br /&gt;Tor Norbye (Principal Researcher, Sun) then gave the audience a sneak preview of the JavaFX authoring tool that has not yet been released. Very neat animations can be designed. It's possible to drag an image to various positions and map them to points in time. Then the tool interpolates all positions between them and shows an animation that creates an effect of smooth motion, bouncing images, etc. There are several controls available, like buttons and sliders, and it's possible to visually map between the actions of controls and behaviours of objects. It reminded me of the BeanBox that came with Java 1.1, which showed how JavaBeans could be designed to map events and controls. The lists of events and actions appear in dropdowns through introspection.&lt;br /&gt;&lt;br /&gt;There's no edit-compile cycle, which speeds up development. Norbye showed how the same animation could be repurposed to different devices and form factors. There's a master-slave relationship between the main screen and the screens for various devices, such that any change made to the main screen is reflected in the device-specific screens, but any specific overrides made on a device-specific screen remain restricted to that screen alone.&lt;br /&gt;&lt;br /&gt;Fritjof Boger-Engelhardtsen of Telenor gave us a demo on a technology I don't pretend to understand. In the mobile world, the SIM card platform is very interesting to operators. The next generation of SIM cards will be TCP/IP connected nodes, with motion sensors, WiFi, etc., embedded within the card. It will be a JavaCard 3 platform. It's possible to use one's own SIM card to authenticate to the network. FB-E gave us a demo of a SunSpot sensor device connected to a mobile phone and being able to control the phone's menu by moving the SunSpot. The phone network itself is oblivious to this manipulation. More details are available at http://playsim.dev.java.net.&lt;br /&gt;&lt;br /&gt;Brad Miller (Associate Professor, Worcester Polytechnic Institute Robotics Research Center) and Derek White (Sun Labs) showed some videos of the work done by High School students. Given a kit of parts, the students have to put together robots to participate in the "US First", an annual robotics competition. A large part of the code has been ported across from C/C++ to Java, and the project is always on the lookout for volunteer programmers. Interested people can go to www.usfirst.org. WPI got a Duke's Choice award for this.&lt;br /&gt;&lt;br /&gt;Sven Reimers (System Engineer and Software Architect, ND Satcom) received a Duke's Choice award for the use of Java in analysing the input of satellites.&lt;br /&gt;&lt;br /&gt;Christopher Boone (President and CEO, Visuvi, Inc) showed off the Visuvi visual search enine. Upload an image and the software analyses it on a variety of aspects and can provide deep insights. Simple examples are uploading images of paintings and finding  who the painter was. More useful and complex uses are in the area of cancer diagnosis. Visuvi improves the quality and reduces the cost of diagnosis of prostate cancer. The concordance rate (probablity of agreement) between pathologists is only about 60%, and the software is expected to achieve much better results. The Visuvi software performs colour analysis, feature detection and derives spatial relationships. There's some relationship to Moscow State University that I didn't quite get. At any rate, Visuvi is busy scanning in 400 images a second (at 3000 megapixels and 10 MB each)!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_WlHQzt6LF1U/Si6VWV7zL4I/AAAAAAAAARY/aEjWn53TRC4/s1600-h/Visuvi+Prostate+Cancer+diagnosis+-+1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 210px;" src="http://1.bp.blogspot.com/_WlHQzt6LF1U/Si6VWV7zL4I/AAAAAAAAARY/aEjWn53TRC4/s320/Visuvi+Prostate+Cancer+diagnosis+-+1.jpg" alt="" id="BLOGGER_PHOTO_ID_5345374018812981122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sam Birney and Van Mikkel-Henkel spoke about Mifos, a web application for institutions that deal in providing microfinance to poor communities. Microfinance is inspired by the work done by Mohammed Yunus of Grameen Bank. This is an Open Source application meant to reduce the barriers to operation of cash-strapped NGOs. The challenge is to scale. Once again, volunteers are wanted: http://www.mifos.org/developer/ , and not just for development but also for translation into many relatively unknown languages. Mifos won a Duke's Choice Award.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_WlHQzt6LF1U/Si6VWZebxNI/AAAAAAAAARQ/ffTZDk0xT84/s1600-h/Mifos+Microfinance+Web+App+-+1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 212px;" src="http://1.bp.blogspot.com/_WlHQzt6LF1U/Si6VWZebxNI/AAAAAAAAARQ/ffTZDk0xT84/s320/Mifos+Microfinance+Web+App+-+1.jpg" alt="" id="BLOGGER_PHOTO_ID_5345374019763553490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Manuel Tijerino (CEO, Check1TWO) told of how many of his musician friends were struggling to find work at diners. So he created a JavaFX based application that allows artistes to upload their work to the Check1TWO site, and it's automatically available on any Check1TWO "jukebox" at any bar or disco. Regular jukeboxes are normally tied up in studio contracts, so the Check1TWO jukeboxes provide a means for struggling artistes to reach over the heads of the studios and connect directly with their potential audiences.&lt;br /&gt;&lt;br /&gt;Zoltan Szabo and Balazs Lajer (students at the University of Pannonia, Hungary) showed off their project that won the first prize at RICOH's student competition. Theirs is a Java application that runs on a printer/scanner and is capable of scoring answer sheets.&lt;br /&gt;&lt;br /&gt;Marciel Hernandez (Senior Engineer, Volkswagen Electronics Research Lab and Stanford University) and Greg Follella (Distinguished Engineer, Sun) talked about Project Bixby. This is about automating the testing of high-speed vehicles through "drive-by-wire". The core of the system is Java RTS (Run-time System). The primary focus is improving safety. Stanford University is building the control algorithms. It should be possible to control the car when unexpected things happen, which especially happens on dirt racetracks. There's no need to put a test driver at risk. Project Bixby leads to next-generation systems that are faster, such as more advanced ABS (Anti-lock Braking System) and newer stability control systems).&lt;br /&gt;&lt;br /&gt;Finally, there was a video clip of the LincVolt car, which turns a classic Lincoln Continental into a green car like the Prius, but with some differences. The Prius has parallel electrical and petrol engines. The LincVolt has batteries driving the wheels all the time, with the petrol engine only serving to top up the battery pack when it starts to run down. What's the connection with Java? The control systems and visual dashboard are all Java.&lt;br /&gt;&lt;br /&gt;This concluded the General Session.&lt;br /&gt;&lt;br /&gt;I then attended a session titled "Real-World Processes with WS-BPEL" by Murali Pottlapelli and Ron Ten-Hove. The thrust of the whole session was that WS-BPEL as a standard was incomplete and that real-world applications need more capabilities than WS-BPEL 2.0 delivers. A secondary theme of the session was that an extension called BPEL-SE developed for OpenESB is able to address the weaknesses of WS-BPEL.&lt;br /&gt;&lt;br /&gt;[My cynical take on this is that every vendor uses the excuse of an anaemic spec to push their own proprietary extensions. If there is consensus that WS-BPEL 2.0 doesn't cut the mustard, why don't the vendors sit down together and produce (say) a WS-BPEL 3.0 spec that addresses the areas missing in 2.0? I'm not holding my breath.]&lt;br /&gt;&lt;br /&gt;The structure was fairly innovative. Ten-Hove would talk about the failings of the standard and Pottlapelli would then describe the solution implemented in BPEL-SE. [The session would have been far better if Pottlapelli had been able to communicate more effectively. I'm forced to the painful realisation that many Indians, while being technically competent, fail to impress because their communication skills are lacking.]&lt;br /&gt;&lt;br /&gt;These are the shortcomings of WS-BPEL 2.0 that are addressed by BPEL-SE:&lt;br /&gt;&lt;br /&gt;- Correlation is hard to use, with multiple artifacts to define and edit. BPEL-SE provides a correlation wizard that hides much of this complexity.&lt;br /&gt;- Reliability is not defined in the context of long-running business processes susceptible to crashes, maintenance downtime, etc. BPEL-SE defines a state machine where the state of an instance's execution is persisted and can be recovered on restart without duplication.&lt;br /&gt;- High Availability is not defined. BPEL-SE on GlassFish ESB can be configured to take advantage of the GlassFish cluster, where instances migrate to available nodes.&lt;br /&gt;- Scalability is an inherent limitation when dealing with long-running processes that hold state even when idle. BPEL-SE defines "dehydrate" and "hydrate" operations to persist and restore state. As the dehydrate/hydrate operation is expensive, two thresholds are defined (the first to dehydrate variables alone, and the next to dehydrate entire instances).&lt;br /&gt;- Retry is clumsy in WS-BPEL, because the &amp;lt;invoke&amp;gt; operation doesn't support retries. Building retry logic into the code obscures the real business logic. BPEL-SE features a configurable number of retries and a configurable delay between retries. It also supports numerous actions on error.&lt;br /&gt;- Throttling is difficult to achieve in WS-BPEL, which makes the system vulnerable to denial of service attacks and bugs that result in runaway processes. BPEL-SE can limit the number of accesses to a "partnerlink" service node, even across processes. This helps to achieve required SLAs.&lt;br /&gt;- Protocol headers are ignored in WS-BPEL by design, as it is meant to be protocol-agnostic. However, many applications place business information in protocol headers such as HTP and JMS. BPEL-SE provides access to protocol-specific headers as an extension to &amp;lt;from&amp;gt; and &amp;lt;to&amp;gt; elements. Protocols such as HTTP, SOAP, JMS (strictly speaking, this isn't a protocol but an API) and file headers.&lt;br /&gt;- Attachments are non-standard in WS-BPEL, with some partners handling document routing inline and some as an attachment. BPEL-SE adds the extensions "inlined" and "attachment" to the &amp;lt;copy&amp;gt; element.&lt;br /&gt;- BPEL extensions fail because it relies on XPath, and XPath 1.0 has a limitation in that false is interpreted as true (boolVar is a non-empty node). BPEL-SE uses JXPath, and is enhanced to be schema-aware. False is not interpreted as true, and integers do not end in ".0".&lt;br /&gt;- XPath limitations hamper WS-BPEL, because XPath has a limited type system, it is impossible to set a unique id on the payload, it's a challenge to extract expensive items in a purchase order document if it spans multiple activities, etc. Any kind of iteration across an XML structure is difficult, and this is partly due to the limitations of XPath and partly due to those of BPEL. With BPEL-SE, Java calls can be embedded in any XPath expression, with syntax adapted from Xalan. It also supports embedded JavaScript (Rhino with E4X), which makes XML parsing much easier.&lt;br /&gt;- Fault handling is problematic in WS-BPEL because standard faults have no error messages, which makes them hard to debug. Standard and non-standard faults can be hard to distinguish. This complicates fault handlers, requiring multiple catches for standard faults. The WSDL 1.1 fault model has been carried too far. BPEL-SE fault handler extensions propagate errors and faults not defined in WSDL as system faults. Associated errors are wrapped in the fault message. Standard faults are associated with a fault message and failure details like activity name are carried along. BPEL-SE catches all standard and system faults.&lt;br /&gt;&lt;br /&gt;I asked the presenters if they were making the case that BPEL-SE had addressed all the limitations of WS-BPEL or if they felt there were some shortcomings that still remained. Ten-Hove's answer was that subprocesses were a lacuna that hadn't yet been addressed.&lt;br /&gt;&lt;br /&gt;My next session was "Cleaning with Ajax: Building Great Apps that Users Will Love" by Clint Oram of SugarCRM. I regret to say that this session was short on subject matter and ended in just half an hour. The talk seemed to be more a sales pitch for SugarCRM than a discussion of Ajax principles. Even the few design principles that were discussed were fairly commonsensical and did not add much insight.&lt;br /&gt;&lt;br /&gt;For what it is worth, let me relate the points that sort of made sense.&lt;br /&gt;&lt;br /&gt;Quite often, designers are asked to "make the UI Ajax". This doesn't say what is really expected. Fewer page refreshes? Cool drag-and-drop? Animation?&lt;br /&gt;&lt;br /&gt;There are also some downsides of Ajax:&lt;br /&gt;- Users get lost (browser back and forward buttons and bookmarks are broken, the user doesn't always see what has changed on the page, and screen elements sometimes keep resizing constantly, irritating the user)&lt;br /&gt;- There are connection issues (it can be slow, the data can't be viewed offline, and applications often break in IE6)&lt;br /&gt;- There are developer headaches (mysterious server errors (500), inconsistent error handling, PHP errors break Ajax responses)&lt;br /&gt;&lt;br /&gt;Some design questions need to be asked before embarking on an Ajax application:&lt;br /&gt;- Does the user really want to see the info?&lt;br /&gt;- Will loading this info be heavy on the server?&lt;br /&gt;- Does the info change rapidly?&lt;br /&gt;- Is there too much info?&lt;br /&gt;&lt;br /&gt;The "lessons learned", according to Oram, are:&lt;br /&gt;&lt;br /&gt;- Use a library like YUI, Dojo or Prototype instead of working with raw JavaScript.&lt;br /&gt;- Handle your errors, use progress bars to indicate what is happening, don't let the application seem like it's working when there has been an error.&lt;br /&gt;- Ajax is a hammer, and not every problem is a nail.&lt;br /&gt;- Load what you need, when you need it.&lt;br /&gt;&lt;br /&gt;As one can see, there was nothing particularly insightful in this talk, and it was a waste of half-an-hour.&lt;br /&gt;&lt;br /&gt;One interesting piece of information from this session was that IBM WebSphere sMash (previously Project Zero) is a PHP runtime that runs on the JVM and provides full access to Java libraries.&lt;br /&gt;&lt;br /&gt;SugarCRM 5.5 Beta is out now, and adds a REST API to the existing SOAP service API.&lt;br /&gt;&lt;br /&gt;I'm not a fan of SugarCRM. The company's "Open Source" strategy is basically to provide crippleware as an Open Source download, and to sell three commercial versions that do the really useful stuff. I don't know how many people are still fooled by that strategy.&lt;br /&gt;&lt;br /&gt;The next session I attended was quite possibly the best one I have attended over these five days. It was called "Resource-Oriented Architecture and REST" by Scott Davis (DavisWorld Consulting, Inc).&lt;br /&gt;&lt;br /&gt;Unfortunately, the talk was so engrossing that I forgot to take notes in many places, so I cannot do full justice to it here :-(. Plus, Davis whizzed through examples so fast I didn't have time to transcribe them fully, and lost crucial pieces of code.&lt;br /&gt;&lt;br /&gt;Davis is the author of the columns "Mastering Grails" and "Practically Groovy" on IBM Developerworks. He's also a fan of David Weinberger's book "Small Pieces Loosely Joined", which describes the architecture of the web. Although ten years old, the book is still relevant today. [David Weinberger is also the author of The Cluetrain Manifesto.]&lt;br /&gt;&lt;br /&gt;I knew Groovy was quite powerful and cool, but in Davis's hands it was pure magic. In a couple of unassuming lines, he was addressing URLs on the web and extracting information that would have taken tens of lines with SOAP-based Web Services. I must have transcribed them incorrectly, because I can't get them to work on my computer. I'll post those examples when I manage to get them working.&lt;br /&gt;&lt;br /&gt;A really neat example was when he found a website that provided rhyming words to any word entered on a form. He defined a "metaclass" method on the String class to enable it to provide rhymes by invoking the website. Then a simple statement like "print 'java'.rhyme()" resulted in "lava".&lt;br /&gt;&lt;br /&gt;As Davis said, REST is the SQL of the Web.&lt;br /&gt;&lt;br /&gt;Davis then talked about syndication with the examples of RSS and Atom. Three things draw one in (chronology (newest first), syndication (the data comes to you) and permalinks (which allow you to "pass it on")). He also mentioned the Rome API and called it the Hibernate of syndication.&lt;br /&gt;&lt;br /&gt;What's the difference between RSS and Atom? I hadn't heard it put this way before. Davis called RSS "GETful" and Atom "RESTful".&lt;br /&gt;&lt;br /&gt;He then did a live grab of a Twitter feed and identified the person in the room who had sent it.&lt;br /&gt;&lt;br /&gt;In sum, this session was more a magic show than a talk. It made me determined to learn Groovy and how to use it with RESTful services.&lt;br /&gt;&lt;br /&gt;The last session I attended at JavaOne 2009 was "Building Enterprise Java Technology-based Web Apps with Google Open Source Technology" by Dhanji Prasanna of Google.&lt;br /&gt;&lt;br /&gt;Prasanna covered Google Guice, GWT (pronounced "gwit") and Web Driver, and provided a sneak preview of SiteBricks.&lt;br /&gt;&lt;br /&gt;I'm somewhat familiar with GWT but none of the others, so my descriptions below may make no sense. It's a verbatim transcription of what Prasanna talked about.&lt;br /&gt;&lt;br /&gt;Guice helps with testing and testability. Its advantages are:&lt;br /&gt;- Simple, idiomatic AOP&lt;br /&gt;- Modularity&lt;br /&gt;- Separation of Concerns&lt;br /&gt;- Reduction of state-aware code&lt;br /&gt;- Reduction of boilerplate code&lt;br /&gt;&lt;br /&gt;It enables applications to horizontally scale. Important precepts are:&lt;br /&gt;&lt;br /&gt;- Type safety, leading to the ability to reason about programs&lt;br /&gt;- Good citizenship (modules behave well)&lt;br /&gt;- Focus on core competency&lt;br /&gt;- Modularity&lt;br /&gt;&lt;br /&gt;GWT is a Java-to-JavaScript compiler. It supports a hosted mode and a compiled mode. Core Java libraries are emulated. It's also typesafe.&lt;br /&gt;&lt;br /&gt;The iGoogle page is an example of what look like "portlet windows", but which are independent modules that are "good citizens".&lt;br /&gt;&lt;br /&gt;Unfortunately, social sites like OpenSocial and Google Wave have different contracts, so modules may not be portable across them.&lt;br /&gt;&lt;br /&gt;Google Gin is Guice for GWT. It runs as Guice in hosted mode and compiles directly to JavaScript. There is no additional overhead of reflection.&lt;br /&gt;&lt;br /&gt;Types are Java's natural currency. Guice and GWT catch errors early, facilitate broad refactorings, prevent unsafe API usage and reason better about programs. They're essential to projects with upwards of ten developers, because these features are impossible with raw JavaScript.&lt;br /&gt;&lt;br /&gt;Web Driver is an alternative to the Selenium acceptance testing tool, and apparently the codebases are now merging. Web Driver has a simpler blocking API that is pure Java. It uses a browser plugin instead of JavaScript, features fast DOM interaction and a flexible API and supports native keyboard and mouse emulation. Web Driver supports clustering.&lt;br /&gt;&lt;br /&gt;Then Prasanna provided a preview of SiteBricks, which is a RESTful web framework. The focus is on HTTP and lessons have been learned from JAX-RS. There are statically typed templates with rigorous error checking. It's concise and uses type infererence algorithms. It's also fast and raises compilation errors if anything is wrong.&lt;br /&gt;&lt;br /&gt;SiteBricks modules are Guice servlet modules. One can ship any module as a widget library. Any page is injectable. It supports the standard web scopes (request, session) and also a "conversation" scope.&lt;br /&gt;&lt;br /&gt;SiteBricks has planned Comet ("reverse Ajax") support. The preview release is available on Google Code Blog.&lt;br /&gt;&lt;br /&gt;That concludes my notes on JavaOne 2009. Admittedly, a lot of this has been mindless regurgitation in the interests of reporting. If these make sense to readers (even if they make no sense to me), well and good.&lt;br /&gt;&lt;br /&gt;In the days to come, I'll ruminate on what I've learned and post my thoughts.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-2923773007300973424?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/2923773007300973424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=2923773007300973424' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2923773007300973424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/2923773007300973424'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/06/javaone-2009-day-five-05062009.html' title='JavaOne 2009 Day Five (05/06/2009)'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_WlHQzt6LF1U/Si6VWV7zL4I/AAAAAAAAARY/aEjWn53TRC4/s72-c/Visuvi+Prostate+Cancer+diagnosis+-+1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-4114719511247464392</id><published>2009-06-04T23:47:00.000-07:00</published><updated>2009-06-05T02:16:56.321-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='San Francisco'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaOne'/><title type='text'>JavaOne 2009 Day Four (04/06/2009)</title><content type='html'>&lt;div style="text-align: justify;"&gt;The third day of JavaOne proper (the fourth day if including CommunityOne on Monday) started with a General Session on interoperability hosted by (of all companies) Microsoft. It shouldn't be too surprising, actually, because Sun and Microsoft buried the hatchet about 5 years ago and started to work on interoperability. Time will tell if that was an unholy alliance or not.&lt;br /&gt;&lt;br /&gt;Dan'l Lewin (Corporate VP, Strategy and Emerging Business Development, Microsoft) took the stage for some opening remarks. What he said resonated quite well, i.e., that users expect things to just work. Data belongs to users and should move freely across systems. The key themes are interoperability, customer choice and collaboration.&lt;br /&gt;&lt;br /&gt;Lewin pointed to TCP/IP as the quintessential standard. Antennae and wall plugs may change from country to country, but TCP/IP is the universal standard for connectivity, which is why the Internet just works. [I could add many other standards to this list, which would also have "just worked" but for Microsoft!]&lt;br /&gt;&lt;br /&gt;Lewin added that the significant partners that Microsoft is working with in the Java world are Sun, the Eclipse Foundation and the Apache Software Foundation. The key areas where Sun and Microsoft work together are:&lt;br /&gt;&lt;br /&gt;- Identity Management, Web SSO and Security Services&lt;br /&gt;- Centralised Systems Management&lt;br /&gt;- Sun/Microsoft Interoperability Center&lt;br /&gt;- Desktop and System Virtualisation&lt;br /&gt;- Java, Windows, .NET&lt;br /&gt;&lt;br /&gt;Identity Management interoperability has progressed a great deal with the near-universal adoption of SAML. On virtualisation, where host and guest systems are involved, Lewin put it very well when he said Sun and Microsoft control each other's environment "in a respectful way."&lt;br /&gt;&lt;br /&gt;A website on his slide pack was www.interoperabilitybridges.com .&lt;br /&gt;&lt;br /&gt;Steven Martin (Senior Director, Developer Platform Productivity Management, Microsoft) took over from Lewin and started off with "we come in peace and want to talk about interoperability".&lt;br /&gt;&lt;br /&gt;He introduced Project Stonehenge, a project under Apache, with code available under the Apache Licence. This uses IBM's stock trading application to demonstrate component-level interoperability between the Microsoft and Sun stacks.&lt;br /&gt;&lt;br /&gt;Greg Leake of Microsoft and Harold Carr of Sun then provided a live demo of this interoperability.&lt;br /&gt;&lt;br /&gt;The stock trading application has four tiers, - the UI, a business logic tier, a further business logic tier housing the order processing service, and the database tier. The reason for splitting the business logic tier into two was to demonstrate not just UI tier to business logic tier connectivity but also service-to-service interop. The Microsoft stack was built on .NET 3.5, with ASP.NET as the UI technology and WCF the services platform. The Sun stack was based on JSP for the UI and the Metro stack for services, running on Glassfish. Both stacks pointed back to a SQLServer database.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_WlHQzt6LF1U/SijeASPoWXI/AAAAAAAAAPo/JDxastyafSE/s1600-h/Microsoft-Sun-2b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 213px;" src="http://4.bp.blogspot.com/_WlHQzt6LF1U/SijeASPoWXI/AAAAAAAAAPo/JDxastyafSE/s320/Microsoft-Sun-2b.jpg" alt="" id="BLOGGER_PHOTO_ID_5343765054353856882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The first phase of the demo showed the .NET stack running alone, with Visual Studio breakpoints to show the progress of a transaction through the various tiers. Then the ASP.NET tier was reconfigured to talk to the Metro business logic layer, and the control remained with the Java stack thereafter. In the third phase of the demo, the Metro business service layer called the order processing service in the .NET stack. The application worked identically in all three cases, effectively demonstrating bidirectional service interoperability between .NET and Metro Web Services.&lt;br /&gt;&lt;br /&gt;Martin also mentioned a useful principle for interoperability, "Assume that all applications are blended, and that all client requests are non-native". This is analogous, I guess, to that other principle, "Be conservative in what you send, and liberal in what you accept".&lt;br /&gt;&lt;br /&gt;He also referred to "the power of choice with the freedom to change your mind", which I thought was a neat summarisation of user benefits.&lt;br /&gt;&lt;br /&gt;Aisling MacRunnels (Senior VP, Software Marketing, Sun) joined Steven Martin on stage to talk about the Sun-Microsoft collaboration, which isn't just limited to getting the JRE to run on Windows. Microsoft also cooperates with Sun to get other "Sun products" like MySQL, VirtualBox and OpenOffice to work on the Microsoft platform. The last item must be particularly galling to the monopoly. Microsoft is also working to get Sharepoint authentication happening against OpenSSO using SAML2. Likewise, WebDAV is being supported in Sun's Storage Cloud. In other words, when both parties support open standards, their interoperability improves.&lt;br /&gt;&lt;br /&gt;I think it speaks more of the quality and tightness of a standard than of vendor cooperation when systems work together. &lt;span style="font-style: italic;"&gt;Sun and Microsoft shouldn't need to talk to each other or have a cozy relationship.&lt;/span&gt; Their systems need to just work together in the first place.&lt;br /&gt;&lt;br /&gt;The next session I attended was "Metro Web Services Security Usage Scenarios" by Harold Carr and Jiandong Guo of Sun. Carr is Metro Architect and Guo is Metro Security Architect, so we pretty much had the very brains of the project talking to us.&lt;br /&gt;&lt;br /&gt;There wasn't very much in the lecture that was specific to Metro. Most of the security usage patterns were general PKI knowledge, but I must say the diagrams that illustrated the logic flow in each pattern were top class. I have seen many documents on PKI, but these are some of the best. My only quibble with them is they tend to use the same terms "encrypt/decrypt" in two separate contexts - "encrypt/decrypt" and "sign/verify".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_WlHQzt6LF1U/Sijeh4jBPzI/AAAAAAAAAPw/R4ZHAJF1Zgo/s1600-h/Metro-Security-3b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 214px;" src="http://3.bp.blogspot.com/_WlHQzt6LF1U/Sijeh4jBPzI/AAAAAAAAAPw/R4ZHAJF1Zgo/s320/Metro-Security-3b.jpg" alt="" id="BLOGGER_PHOTO_ID_5343765631571410738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_WlHQzt6LF1U/Sijeh4zc5rI/AAAAAAAAAP4/4aCHMjb_frk/s1600-h/Metro-Security-4b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 212px;" src="http://2.bp.blogspot.com/_WlHQzt6LF1U/Sijeh4zc5rI/AAAAAAAAAP4/4aCHMjb_frk/s320/Metro-Security-4b.jpg" alt="" id="BLOGGER_PHOTO_ID_5343765631640331954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_WlHQzt6LF1U/SijeiP5RAVI/AAAAAAAAAQA/d--4x6dx64A/s1600-h/Metro-Security-5b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 212px;" src="http://4.bp.blogspot.com/_WlHQzt6LF1U/SijeiP5RAVI/AAAAAAAAAQA/d--4x6dx64A/s320/Metro-Security-5b.jpg" alt="" id="BLOGGER_PHOTO_ID_5343765637838733650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_WlHQzt6LF1U/SijeiKk488I/AAAAAAAAAQI/BANp67L_fMo/s1600-h/Metro-Security-6b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 214px;" src="http://3.bp.blogspot.com/_WlHQzt6LF1U/SijeiKk488I/AAAAAAAAAQI/BANp67L_fMo/s320/Metro-Security-6b.jpg" alt="" id="BLOGGER_PHOTO_ID_5343765636411093954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_WlHQzt6LF1U/SijeiZw3qzI/AAAAAAAAAQQ/XwwsJSeJUkg/s1600-h/Metro-Security-10b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 214px;" src="http://3.bp.blogspot.com/_WlHQzt6LF1U/SijeiZw3qzI/AAAAAAAAAQQ/XwwsJSeJUkg/s320/Metro-Security-10b.jpg" alt="" id="BLOGGER_PHOTO_ID_5343765640487873330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_WlHQzt6LF1U/SijeyxPe14I/AAAAAAAAAQY/HbUgnKwo8cs/s1600-h/Metro-Security-11b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 212px;" src="http://4.bp.blogspot.com/_WlHQzt6LF1U/SijeyxPe14I/AAAAAAAAAQY/HbUgnKwo8cs/s320/Metro-Security-11b.jpg" alt="" id="BLOGGER_PHOTO_ID_5343765921668192130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Some of the interesting points they made were:&lt;br /&gt;&lt;br /&gt;- The list of security profiles bundled with Metro will be refactored soon. Some will be dropped and new ones will be added.&lt;br /&gt;- SSL performance is still better than WS-Security, even with optimisations such as derived keys and WS-SecureConversation. [WS-Security uses a fresh ephemeral key for every message, while WS-SecureConversation caches and reuses the same ephemeral key for the whole session.]&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_WlHQzt6LF1U/Sijey2ShrBI/AAAAAAAAAQg/alvuGHb7o18/s1600-h/Metro-Security-13b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 213px;" src="http://3.bp.blogspot.com/_WlHQzt6LF1U/Sijey2ShrBI/AAAAAAAAAQg/alvuGHb7o18/s320/Metro-Security-13b.jpg" alt="" id="BLOGGER_PHOTO_ID_5343765923023137810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- Metro 2.0 is due in September 2009.&lt;br /&gt;&lt;br /&gt;I then attended a session called "Pragmatic Identity 2.0: Simple, Open Identity Services using REST" by Pat Patterson and Ron Ten-Hove of Sun. Ten-Hove is also known for his work on Integration and JBI. He was the spec lead for JSR 208.&lt;br /&gt;&lt;br /&gt;[As part of their demo, I realised that NetBeans has at least a couple of useful features I didn't know about earlier. There's an option to "create entity classes from tables" (using JPA, I presume), and another one to "create RESTful web services from entity classes".]&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_WlHQzt6LF1U/SijfwLE3TvI/AAAAAAAAAQw/6zJc2tJVeHY/s1600-h/REST+Security+-+3b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 213px;" src="http://2.bp.blogspot.com/_WlHQzt6LF1U/SijfwLE3TvI/AAAAAAAAAQw/6zJc2tJVeHY/s320/REST+Security+-+3b.jpg" alt="" id="BLOGGER_PHOTO_ID_5343766976575000306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_WlHQzt6LF1U/Sijfv8F4nNI/AAAAAAAAAQo/IA2068k7m7g/s1600-h/REST+Security+-+4b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 213px;" src="http://2.bp.blogspot.com/_WlHQzt6LF1U/Sijfv8F4nNI/AAAAAAAAAQo/IA2068k7m7g/s320/REST+Security+-+4b.jpg" alt="" id="BLOGGER_PHOTO_ID_5343766972552748242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's a bit difficult to describe the demo that Patterson gave. On the surface, it was a standard application that implemented user-based access control. One user saw more functions than another. The trick was in making it RESTful. Nothing had to be explicitly coded for, which was the cool part. The accesses were intercepted and authenticated/authorised without the business application being aware of it. As I said, it's hard to describe without the accompanying code.&lt;br /&gt;&lt;br /&gt;The next session was on "The Web on OSGi: Here's How" by Don Brown of Atlassian. Brown is a very polished and articulate speaker and he kept his audience chuckling.&lt;br /&gt;&lt;br /&gt;OSGi is something that has fascinated me for a while but I haven't got my head around it completely yet. At a high level, OSGi is a framework to allow applications to be composed dynamically from components and services that may appear and disappear at run-time. Dependencies are reduced or eliminated by having each component "bundle" use its own classloader, so version incompatibilities can be avoided. Different bundles within the same application can use different versions of libraries without conflicts, because they don't share classloaders.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_WlHQzt6LF1U/SijgJ0lMoMI/AAAAAAAAARI/NvjoupdwlJA/s1600-h/OSGi+-+2b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 213px;" src="http://2.bp.blogspot.com/_WlHQzt6LF1U/SijgJ0lMoMI/AAAAAAAAARI/NvjoupdwlJA/s320/OSGi+-+2b.jpg" alt="" id="BLOGGER_PHOTO_ID_5343767417213198530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OSGi is cool but complex. As Brown repeatedly pointed out, while it can solve many integration and dependency problems, it is not trivial to learn. Those who want to use OSGi must be prepared to learn many fundamental concepts, especially around the classloader. Also, components may appear and disappear at will in a dynamic manner. How must the application behave when a dependency is suddenly exposed?&lt;br /&gt;&lt;br /&gt;There are 3 basic architectures that one can follow with OSGi:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_WlHQzt6LF1U/SijgJo4srEI/AAAAAAAAARA/11TXy6ZvALM/s1600-h/OSGi+-+3b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 211px;" src="http://1.bp.blogspot.com/_WlHQzt6LF1U/SijgJo4srEI/AAAAAAAAARA/11TXy6ZvALM/s320/OSGi+-+3b.jpg" alt="" id="BLOGGER_PHOTO_ID_5343767414073764930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1. OSGi Server&lt;br /&gt;Examples: Spring DM Server, Apache Felix, Equinox&lt;br /&gt;Advantages: Fewer deployment hassles, consistent OSGi environment&lt;br /&gt;Disadvantages: Can't use any existing JEE server&lt;br /&gt;&lt;br /&gt;2.Embedded OSGi server via bridge (OSGi container runs within a JEE container using a servlet bridge)&lt;br /&gt;Examples: Equinox servlet bridge&lt;br /&gt;Advantages: Can use JEE server, application is still OSGi&lt;br /&gt;Disadvantages: (I didn't have time to note this down)&lt;br /&gt;&lt;br /&gt;3. Embedded OSGi via plugin&lt;br /&gt;Example: Atlassian plugin&lt;br /&gt;Advantages: Can use JEE server, easier migration, fewer library hassles&lt;br /&gt;Disadvantages: More complicated, susceptible to deployment&lt;br /&gt;&lt;br /&gt;I learnt a number of new terms and names of software products in this session.&lt;br /&gt;- Spring DM (Dynamic Modules)&lt;br /&gt;- Peaberry using Guice&lt;br /&gt;- Declarative Services (part of the OSGi specification)&lt;br /&gt;- iPOJO&lt;br /&gt;- BND and Spring Bundlor are tools used to create bundles&lt;br /&gt;- Felix OSGi is embedded as part of Atlassian's existing plugin framework.&lt;br /&gt;- Spring DM is used to manage services.&lt;br /&gt;- Automatic bundle transformation is a cool feature that Brown mentioned but did not describe.&lt;br /&gt;&lt;br /&gt;There are three types of plugins:&lt;br /&gt;Simple - no OSGi&lt;br /&gt;Moderate - OSGi via a plugin descriptor&lt;br /&gt;Complex - OSGi via Spring XML directly&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_WlHQzt6LF1U/SijgJkmbW-I/AAAAAAAAAQ4/2jyYLQsuWm8/s1600-h/OSGi+-+5b.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 213px;" src="http://4.bp.blogspot.com/_WlHQzt6LF1U/SijgJkmbW-I/AAAAAAAAAQ4/2jyYLQsuWm8/s320/OSGi+-+5b.jpg" alt="" id="BLOGGER_PHOTO_ID_5343767412923390946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Brown gave us a demo using JForum and showed that even if a legacy application isn't sophisticated enough to know about new features, modules with such features can be incorporated into it.&lt;br /&gt;&lt;br /&gt;I had been under the impression that OSGi was only used by rich client applications on the desktop. This session showed me that it's perhaps even more useful for web applications on the server side.&lt;br /&gt;&lt;br /&gt;My last session of the day was a hands-on lab (Bring Your Own Laptop) called "Java Technology Strikes Back on the Client: Easier Development and Deployment", conducted by Joey Shen and a number of others who cruised around and lent a helping hand whenever one got stuck. It looks like Linux support for JavaFX has just landed (Nigel Eke, if you're reading this, you were right after all), and a very quiet landing it has been, too. But it's still only for NetBeans 6.5.1, not NetBeans 6.7 beta. At any rate, I was more interested in just checking to see if it worked. It turned out that there were a couple of syntax errors in the sample app which had to be corrected before the application could run. I was very keen to try the drag-and-drop feature with which one could pull an applet out of the browser window and install it as a desktop icon (Java Web Start application). Unfortunately, this feature requires a workaround in all X11 systems (Unix systems using the X Window System), because the window manager intercepts drag commands and applies it to the window as a whole. There was a workaround described for applets but none for a JavaFX application. As time was up, I had to leave without being able to see drag-and-drop in action. Never mind, I'm sure samples and documentation will only become more widely available as time goes on, and Sun will undoubtedly make JavaFX even easier to use in future.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-4114719511247464392?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/4114719511247464392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=4114719511247464392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4114719511247464392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/4114719511247464392'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/06/javaone-2009-day-four-04062009.html' title='JavaOne 2009 Day Four (04/06/2009)'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_WlHQzt6LF1U/SijeASPoWXI/AAAAAAAAAPo/JDxastyafSE/s72-c/Microsoft-Sun-2b.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-834253906503990887</id><published>2009-06-03T23:17:00.000-07:00</published><updated>2009-06-03T23:30:14.056-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='San Francisco'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaOne'/><title type='text'>JavaOne 2009 Day Three (03/06/2009)</title><content type='html'>&lt;div style="text-align: justify;"&gt;The second day of JavaOne proper (the third day if including CommunityOne) started with a General Session on mobility conducted by Sony Ericsson.&lt;br /&gt;&lt;br /&gt;The main host was Christopher David (Head of Developer and Partner Engagement). At about the same time he started his talk, Erik Hellman (Senior Java Developer) got started on a challenge - to develop a mobile application by the end of the session that would display all Tweets originating within a certain radius of the Moscone Center that contained the word 'Java'.&lt;br /&gt;&lt;br /&gt;Rikko Sakaguchi (Corporate VP, Head of Creation and Development) and Patrik Olsson (VP, Head of Software Creation and Development) joined David on stage, and between the three of them, kept the Sony Ericsson story going.&lt;br /&gt;&lt;br /&gt;One of the demos they attempted failed (controlling a Playstation 3 with a mobile phone), but then it isn't a demo if it doesn't fail.&lt;br /&gt;&lt;br /&gt;One of the points made was about the difference between a mobile application and a traditional web application. A traditional web application has its UI on the client device, with business logic and data on a server across the network. A mobile application has the UI, parts of business logic and parts of data and platform access on the device, and the remaining data and business logic across the network. I don't quite buy this distinction. I don't necessarily see a difference between traditional distributed applications and mobile applications. So the device form factor is a bit different and the network is wireless, but that's hardly a paradigm shift. Application architectures like SOFEA are meant to unify all such environments.&lt;br /&gt;&lt;br /&gt;The history of Sony Ericsson's technology journey is somewhat familiar. In 2005, they switched from C/C++ to Java. Java became an integral part of the Sony Ericsson platform rather than an add-on. In 2007, they created a unique API on top of the base Java platform. In 2009, the focus is on reducing fragmentation of platforms. The bulk of the APIs are standard, while a few (especially at the top of the stack) are proprietary to SE.&lt;br /&gt;&lt;br /&gt;As expected from a company that boasts 200 million customers worldwide and 200 million downloads a year, SE has a marketplace called PlayNow Arena. SE  has been selling ringtones, games, music, wallpapers, themes, movies and lately, applications. I'm frankly surprised that it's taken them so long to get to selling applications.&lt;br /&gt;&lt;br /&gt;Since time-to-market is important, SE promises software developers a turnaround time of 30 days from submission to appearance in the virtual marketplace, with assistance provided throughout the process.&lt;br /&gt;&lt;br /&gt;And yes, Erik Hellman had completed his application with 10 minutes to spare by the time the session ended.&lt;br /&gt;&lt;br /&gt;The next session I attended was something completely new to me. This was called "Taking a SIP of Java Technology: Building voice mashups with SIP servlets" by RJ Auburn of Voxeo Corp. The Session Initiation Protocol (SIP) is mainly used in telephony, but can apparently be used to bootstrap any other interaction between systems. SIP has more handshaking than HTTP, with many more exception cases, so it's a more chatty protocol than HTTP. It's also implemented on top of UDP rather than TCP, so SIP itself needs to do much more exception handling than HTTP.&lt;br /&gt;&lt;br /&gt;RFC 3261 that describes SIP is reportedly a rather dry document to read. Auburn recommended The Hitchhiker's Guide to SIP, and also some Open Source info at www.voip-info.org and some industry sites (www.sipforum.org and www.sipfoundry.org).&lt;br /&gt;&lt;br /&gt;There seem to be two main ways to develop applications with SIP. One uses XML, the other uses programming APIs. The XML approach is a 90% solution, while the API approach provides more options but is more complex.&lt;br /&gt;&lt;br /&gt;There are two sister specifications in the XML approach - VoiceXML and CCXML (Call Control XML). VoiceXML supports speech and touchtone, a form-filling model called the FIA, but very limited call control. CCXML, in contrast, manages things like call switching, teleconferencing, etc. The two work in a complementary fashion, with CCXML defining the overall "flow logic", and VoiceXML defining the parameters of a particular "message" (for want of better terms).&lt;br /&gt;&lt;br /&gt;The Java API is based on the SIP Servlet API (www.sipservlet.com). JSR 116 was SIP Servlet 1.0, and JSR 289 is SIP Servlet 1.1 (just released). JSR 309 (the Java Media Server API) is based on the CCXML model, but is still in draft.&lt;br /&gt;&lt;br /&gt;SIP is complex, so Voxeo has a simpler API called Tropo, available in a number of scripting languages. This is not Open Source, but is free for developers, and the hosting costs about 3 cents a minute. There are also traditional software licensing models available.&lt;br /&gt;&lt;br /&gt;There are some phone-enabled games available, and Vooices is a good example.&lt;br /&gt;&lt;br /&gt;More information is available on tropo.com and www.voxeo.com/free.&lt;br /&gt;&lt;br /&gt;The next session I attended was "What's New in Groovy 1.6?" by Guillaume Laforge himself. The talk was based on an InfoQ article written by him earlier.&lt;br /&gt;&lt;br /&gt;In brief, the improvements in Groovy 1.6 are:&lt;br /&gt;&lt;br /&gt;- Performance - the compiler is 3x to 5x faster than 1.5, and the runtime is between 150% to 460% faster.&lt;br /&gt;- Syntax changes - multiple assignment (the ability to set more than one variable in a statement), optional return statements&lt;br /&gt;- Ability to use Java 5 annotations&lt;br /&gt;- Ability to specify dependencies&lt;br /&gt;- Swing support (griffon.codehaus.org)&lt;br /&gt;- JSR 223 (scripting engine) support is built-in and can invoke scripting in any language&lt;br /&gt;- OSGi readiness&lt;br /&gt;&lt;br /&gt;My next session was on providing REST security. The topic was called "Designing and Building Security into REST Applications" by Paul Bryan, Sean Brydon and Aravindan Ranganathan of Sun. The bulk of the talk focused on OpenSSO and its REST-like interface. But as the presenters confessed, the OpenSSO "REST" API is just a facade over a SOAP API. In OpenSSO 2.0, they visualise a truer RESTian API.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_WlHQzt6LF1U/SidnbpCQR4I/AAAAAAAAAPg/hPld1Wkrd24/s1600-h/OpenSSO+REST+API+-+1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 212px;" src="http://4.bp.blogspot.com/_WlHQzt6LF1U/SidnbpCQR4I/AAAAAAAAAPg/hPld1Wkrd24/s320/OpenSSO+REST+API+-+1.JPG" alt="" id="BLOGGER_PHOTO_ID_5343353207467820930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The other term I had never heard of before was the OAuth protocol. Apparently, OAuth is a style of authentication just like HTTP's Basic Authentication and Digest Authentication.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_WlHQzt6LF1U/SidnbvLK9HI/AAAAAAAAAPY/pjc0POTYoFs/s1600-h/OpenSSO+OAuth+Architecture+-+1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 212px;" src="http://2.bp.blogspot.com/_WlHQzt6LF1U/SidnbvLK9HI/AAAAAAAAAPY/pjc0POTYoFs/s320/OpenSSO+OAuth+Architecture+-+1.JPG" alt="" id="BLOGGER_PHOTO_ID_5343353209115833458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The last session that I attended today was on "Coding REST and SOAP together" by Martin Grebac and Jakub Podlesak of Sun. Although the topic was entirely serious, it felt like cheating at a certain level.&lt;br /&gt;&lt;br /&gt;The premise is that we implement SOAP and REST on top of POJOs using annotations defined by JAX-WS and JAX-RS, respectively. So can't we just add both sets of annotations to the same POJO and enable SOAP and REST simultaneously?&lt;br /&gt;&lt;br /&gt;I can see one very obvious problem with this approach. REST forces one to think Service-Oriented because the verbs refer to what the service consumer does to resources. It's what I've earlier called the Viewpoint Flip, and I believe it's an essential part of Service-Oriented thinking. But SOAP doesn't enforce any such viewpoint. It's possible to have an RMI flavour to the JAX-WS SOAP methods. So there's no substitute for proper design.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-834253906503990887?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/834253906503990887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=834253906503990887' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/834253906503990887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/834253906503990887'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/06/javaone-2009-day-three-03062009.html' title='JavaOne 2009 Day Three (03/06/2009)'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_WlHQzt6LF1U/SidnbpCQR4I/AAAAAAAAAPg/hPld1Wkrd24/s72-c/OpenSSO+REST+API+-+1.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13639021.post-7837430611261580815</id><published>2009-06-03T01:41:00.000-07:00</published><updated>2009-06-05T08:31:28.579-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='San Francisco'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaOne'/><title type='text'>JavaOne 2009 Day Two (02/06/2009)</title><content type='html'>&lt;div style="text-align: justify;"&gt;The first day of JavaOne proper (or the second day if you include CommunityOne on Monday) started with a two hour General Session.&lt;br /&gt;&lt;br /&gt;A brief documentary showing the parallels between a 14 year old boy named Justin and 14 year old Java set the tone for the session. Each year from 1996, a different facet of Java has come to the fore. And in 2009, just as Java turned 14, the 14 year old boy was introduced as a gamer and Java developer. Sun is appealing to a new generation of developers now, and the emphasis on JavaFX reflects a generational shift in more ways than one.&lt;br /&gt;&lt;br /&gt;Jonathan Schwartz, Sun's CEO, came up on stage next, and was the MC for almost the rest of the session. I have always been impressed by Schwartz for the direction he has given Sun as CEO, and I was impressed by his poise, confidence and easy manner as he conducted the proceedings. He did goof up a bit, though. He announced the release of Java 7 as of today, but it turned out later that it was just a milestone release. The final release of Java 7 isn't due till early 2010.&lt;br /&gt;&lt;br /&gt;The theme for the morning was the power of a simple idea - to wit, "Write Once, Run Anywhere (WORA)".&lt;br /&gt;&lt;br /&gt;An impressive array of customers and business partners trooped up to join Schwartz one after the other, all testifying to the wonderful goodies that Java technology had delivered to their organisations.&lt;br /&gt;&lt;br /&gt;First up was James Baresse (VP Architecture, Platforms and Systems, eBay). eBay uses the integrated Java stack to run their business - the application framework, content management, batch systems and SOA.&lt;br /&gt;&lt;br /&gt;Next in the witness box was Alan Brenner (Senior VP for the BlackBerry platform at RIM). For those who don't know already, the BlackBerry is a Java phone. RIM uses Java end-to-end - the core apps, the development platform, the works. Brenner showed off a third party app called Zavnee that integrates with the BlackBerry's email and phonebook APIs as well as community sites to provide a more insightful address book. According to Brenner, the open APIs of BlackBerry allow ISVs to build applications that integrate tightly with the device.&lt;br /&gt;&lt;br /&gt;Don Eklund (Executive VP of Advanced Technologies at Sony Pictures Home Entertainment) came up to crow about the victory of Blu-Ray over its competition, or so it seemed to me. I'm not a great fan of Sony, which represents evil media. Eklund sang the praises of Java's openness. I couldn't help mentally completing his statement. Every company loves it when its building blocks are open and free, and when their own products are closed and proprietary. How about opening up the Blu-Ray format to everyone, Sony?&lt;br /&gt;&lt;br /&gt;Lowell McAdam (President and CEO, Verizon Wireless) spoke about Verizon's Open Development Initiative last year that dealt with hardware, and their Open Development for Applications this year that deals with software. Verizon is opening up its APIs to enable third party developers to exploit functions such as presence, location, friends and family, etc.&lt;br /&gt;&lt;br /&gt;Diane Bryant (Executive VP and CIO at Intel) talked about the collaboration between Intel and Sun to deliver high Java performance on the Intel platforms (Atom, Core and Xeon). They claim to have achieved an 8x raw performance improvement since 2006.&lt;br /&gt;&lt;br /&gt;The final partner to come up on stage was Paul Ciciore (Chief Technologist at the Chicago Board Options Exchange). The CBOE is the world's largest options exchange, but it's a relatively new company. The Java-based implementation was conceived in 1998 and launched in 2001. From 5000 transactions per second in 2001, CBOE has grown to 300,000 transactions per second in 2009. They're also driving latency down lower and lower.&lt;br /&gt;&lt;br /&gt;The next phase of the General Session talked about what I would characterise as an attempt by Sun to shift gears and start to provide the technology tools for applications that deal with media content in addition to those for the traditional enterprise applications that have been its mainstay so far. It's a risky gambit for Sun, and I'm not very optimistic about their chances of success. As an example, if Adobe trivially reengineers Flex to generate JVM bytecode, it's bye-bye, JavaFX.&lt;br /&gt;&lt;br /&gt;There were some nifty demos of JavaFX applications, including one that ran on an HDTV set. There was another demo by Sun's Director of Engineering for the JavaFX platform, Nandini Ramani (wrongly pronounced (what else?) Ramaani). She showed off a nifty development environment for JavaFX that allowed content to be edited and targeted simultaneously for different devices. There's no compile-build cycle for JavaFX, this being a scripting language.&lt;br /&gt;&lt;br /&gt;James Gosling, the inventor of Java, then came up on stage. This is one person I put in the same category as Bob Metcalfe, the inventor of Ethernet. Both are technology geniuses who have an astonishing blind spot about Open Source. [Metcalfe once famously referred to it as "Open Sores".] Gosling made a snide remark about how the Linux platform doesn't let developers build applications for it unless they're willing to make it a labour of love. His self-styled mission is to help developers convert a labour of love into a day job that puts food on the table. That's all very well, but someone should tell him that Open Source works very well as it is, thank you very much. It's a benign pyramid scheme, where a new generation of programmers comes along to build the next layer of an open platform on top of the last. The commoditisation continues up the stack. Too bad for people wanting to make money along the way. But that's not a problem for Open Source, nor is it a problem for the world. It's only in Gosling's (and Metcalfe's) world that a failure to monetise something equates to failure, period.&lt;br /&gt;&lt;br /&gt;Gosling presented the Duke's Choice award to Mark Gerhard (CEO of Jagex, maker of the popular RuneScape game). About 20% of Jagex's users are paying customers. RuneScape will be available on the Java Store that I wrote about earlier. The Java Store provides tools to "ingest" and "distribute" applications, and Sun is still working on a suitable cash register implementation to enable effective commercialisation. Suggestions from the community are welcome...&lt;br /&gt;&lt;br /&gt;Randy Bryant (Dean of Computer Science at Carnegie Mellon University) received another Duke's Choice award from Gosling on behalf of Randy Pausch, the inventor of the Alice Project. Alice, like MIT's Scratch, is a means of teaching computer programming to kids. Alice 3 goes a step further by introducing kids to Java programming, which Scratch doesn't do. [I'm planning to introduce Alice to my twelve year old.]&lt;br /&gt;&lt;br /&gt;Somewhere along the way, Scott McNealy, Sun's chairman and former CEO, came up on stage. I have previously referred to McNealy as a dinosaur, and I must say that he literally looked and sounded old. Gone was the youthful "puckish humour" that magazines used to refer to. He seemed resigned to an imminent retirement. Reading between the lines, though he made some condescending remarks to Jonathan Schwartz about the wonderful way he had led the company even though he was a relative newcomer, I sensed some resentment and disapproval. I guess it's an open secret that Schwartz preferred an IBM takeover of Sun, and McNealy won out with the Oracle deal. I wonder how long Schwartz will last with Oracle CEO Larry Ellison as his boss. Open sourcing Java was the best thing Schwartz has done for the world, and must have turned Ellison's dreams of monetisation to ashes.&lt;br /&gt;&lt;br /&gt;The piece de resistance of the morning's session was then the surprise introduction of Ellison himself.&lt;br /&gt;&lt;br /&gt;Ellison said many nice things about Java (e.g., "Except for the database, everything at Oracle is Java-based"). Again, I was tempted to complete his sentence that "Java was attractive to us because it was open" with the clincher "and because it has allowed us to close everything we build above it". I hope the emerging Open Source enterprise stack eats Oracle's lunch in the coming recession.&lt;br /&gt;&lt;br /&gt;Ellison said a few things that I found very significant. He wanted to see OpenOffice being redeveloped using JavaFX. He's now in a position to drive that initiative through investment, and something tells me he'll do it. It's more than just his traditional hatred of Microsoft. There's probably a big support subscription-based revenue stream that will come from the corporate market when OpenOffice supplants MS-Office.&lt;br /&gt;&lt;br /&gt;Ellison also pledged not to make changes to the Java model but to "expand investment" in it, a commitment that drew relieved applause from the mostly geek audience. I guess there's indirect benefit to Oracle from Java's success, largely from its ability to prevent competitors from succeeding with their proprietary equivalents.&lt;br /&gt;&lt;br /&gt;In another very significant statement, Ellison also hinted that Sun and Oracle would jointly introduce a mobile device to compete with devices running Google's Android. I think JavaFX is the weapon that Oracle-Sun are betting on.&lt;br /&gt;&lt;br /&gt;Someone (I forget whether it was Gosling or someone else) also made a snide remark about Ajax that made me prick up my ears. I have previously wondered on this blog why people even bother with RIA tools like Flash, Silverlight and JavaFX when Ajax/DHTML is getting to be so much more capable. I realise now that I've been looking at it from the viewpoint of the community at large. From the viewpoint of Sun (and now Oracle), there is a silent and desperate struggle for survival going on. If Ajax succeeds, it will further reduce the relevance of these vendors. JavaFX is critically important to Sun. It's irrelevant to the world.&lt;br /&gt;&lt;br /&gt;The second session I attended was "Deploying Java Technology to the Masses: How Sun deploys the JavaFX runtime" by Thomas Ng from Sun.&lt;br /&gt;&lt;br /&gt;My major grouse against JavaFX is that it still isn't available for the Linux platform. Nigel Eke commented on my earlier blog post that Sun was going to announce Linux support for JavaFX at JavaOne, but it hasn't happened yet.&lt;br /&gt;&lt;br /&gt;Very briefly, Ng's talk covered the following points - the deployment mechanism is JNLP, pioneered by Java Web Start almost a decade ago. There's a tool called the JavaFX Packager that is bundled with the JavaFX SDK. This helps to automate the creation of JNLP files, which is otherwise an error-prone undertaking. In future, the same tool will be used to create JNLP-based launchers for applets and Java Web Start applications, but as of today, that's still on the wishlist.&lt;br /&gt;&lt;br /&gt;A potentially very useful feature (albeit a potential security headache) is the ability of the JavaFX runtime to permit cross-domain XML traffic. This removes the crippling constraint that prevents current-generation browser applications from reaching back to any servers but their own to make service calls.&lt;br /&gt;&lt;br /&gt;A future version of JNLP will also remove the current requirement for an absolute "codebase" URI in the jnlp tag. This relaxation will make applications more readily portable between servers.&lt;br /&gt;&lt;br /&gt;The next session was another General Technical Session hosted by Robert Brewin (Distinguished Engineer, VP and CTO for Application Platform Software at Sun). It was called "Intelligent Design: The Pervasive Java Platform".&lt;br /&gt;&lt;br /&gt;[My "Press/Analyst" badge entitled me to special seating at the front of the hall, but since the perk didn't come with a table for my laptop, I declined the honour and chose to sit in the bleachers with a mortal friend.]&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_WlHQzt6LF1U/SiY3ueVGUMI/AAAAAAAAAPA/UnVYOr5Qybg/s1600-h/Press-Analyst+special+seating+-+1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 212px;" src="http://4.bp.blogspot.com/_WlHQzt6LF1U/SiY3ueVGUMI/AAAAAAAAAPA/UnVYOr5Qybg/s320/Press-Analyst+special+seating+-+1.jpg" alt="" id="BLOGGER_PHOTO_ID_5343019279476740290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Items in brief:&lt;br /&gt;&lt;br /&gt;Project Kenai allows developers to collaborate, share and engage. It seems to be a richer version of CVS or Subversion as a repository, because it has some of the characteristics of a social networking site. It will soon include continuous integration capabilities through its incorporation of the Hudson continuous build tool.&lt;br /&gt;&lt;br /&gt;JDK 7 (prematurely announced by Jonathan Schwartz) will feature 3 things when it debuts - a modular platform, a multilingual VM and productivity enhancements for developers.&lt;br /&gt;&lt;br /&gt;A new dependency information file format for classes means that "the classpath is dead", a statement that drew cheers. This diagram shows the new packages in Java 7, and their dependencies.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_WlHQzt6LF1U/SiY35NgVyWI/AAAAAAAAAPI/tZPf5U2V6HE/s1600-h/Modular+Java+-+1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 212px;" src="http://2.bp.blogspot.com/_WlHQzt6LF1U/SiY35NgVyWI/AAAAAAAAAPI/tZPf5U2V6HE/s320/Modular+Java+-+1.jpg" alt="" id="BLOGGER_PHOTO_ID_5343019463939049826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It will also make it easier to create deployment packages for various target platforms (such as .deb files for Ubuntu Linux).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_WlHQzt6LF1U/SiY4AQ_y0SI/AAAAAAAAAPQ/pswK6zQ8uSk/s1600-h/Java+dependencies+-+1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 213px;" src="http://4.bp.blogspot.com/_WlHQzt6LF1U/SiY4AQ_y0SI/AAAAAAAAAPQ/pswK6zQ8uSk/s320/Java+dependencies+-+1.jpg" alt="" id="BLOGGER_PHOTO_ID_5343019585135366434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There is a project called the "Da Vinci Machine" to enable the Java VM to be a true multi-language VM. For the first time in a decade, there will be new bytecode that will effectively upgrade the JVM architecture.&lt;br /&gt;&lt;br /&gt;Then there's the cheekily-named Project Coin, which deals with small change(s) to Java.&lt;br /&gt;&lt;br /&gt;Many minutes were wasted on a description of JEE 6. I have never understood the rationale for some of the components of JEE, and why Sun insists on throwing good money after bad. There's JSF 2.0 and EJB 3.1. The EJB cancer has reached Java's lymph nodes and is now threatening to infect healthy web server tissue through "Lite EJB", which can be bundled inside .war files and does not require .ear files or a heavyweight container. Why, why, why??? I thought Spring framework chemotherapy had forced EJB into remission, but this seems much more virulent than I thought.&lt;br /&gt;&lt;br /&gt;Bean validation (JSR 303) seems to be a way to ensure consistent data validation across tiers (through JSF in the presentation tier and JPA in the persistence tier). I can't help thinking this is just the Java version of XForms. XForms carries an XML document payload that is defined through a schema that can then be used to validate this instance data in any tier.&lt;br /&gt;&lt;br /&gt;There's a lot of emphasis on the Glassfish server that I just can't understand. Again, it's probably critical for Sun to own an application server that isn't just Tomcat+Spring. It just isn't that relevant to the rest of the world. Glassfish has ambitions of being scalable, "from embedded to carrier-grade".&lt;br /&gt;&lt;br /&gt;One corollary of a more modular Java that I deduced and that Sun acknowledged is that in the future, there will be just one Java. No more ME, SE and EE variants.&lt;br /&gt;&lt;br /&gt;I next attended a rather boring and depressing session that was optimistically called "Tips and Tricks for Ajax Push and Comet Apps". This was conducted by Jean-François Arcand of Sun and Ted Goddard of ICEsoft Technologies. It was depressing because at the end of the day, there seems to be no satisfactory method to implement server push that will scale well and work on all browsers. The lecture was a tour of various unsatisfactory compromises. The three standard techniques (Polling, Ajax push (long polling) and HTTP Streaming) all have their drawbacks. I personally like HTTP Streaming with its chunked response (multiple as-and-when partial responses to a single request). However, this doesn't seem to work very well in practice because of the lack of a client-side API for reading such an input stream, and the tendency for proxies to cache responses instead of passing them on, incomplete though they may be.&lt;br /&gt;&lt;br /&gt;My conclusion is that push is impossible with HTTP. We need to implement AMQP over TCP for true bidirectional messaging. It will take time, but it will happen within a decade. And then these problems (and their kludgy solutions) will seem laughable in retrospect.&lt;br /&gt;&lt;br /&gt;The last session that I attended was "Spring Framework 3.0: New and Notable" by Rod Johnson himself. The hall was huge but absolutely packed.&lt;br /&gt;&lt;br /&gt;Points in brief:&lt;br /&gt;&lt;br /&gt;Spring 3.0 will use Java 5+. Anyone wishing to use Java 1.4 must remain with Spring 2.5. Three cheers for courage. Backward-compatibility is a two-edged sword, and I'm glad Spring has made the leap (no pun intended).&lt;br /&gt;&lt;br /&gt;There is a new expression language (EL) that allows developers to navigate bean properties, invoke methods and allow construction of value objects. It also allows us to parameterise annotated code:&lt;br /&gt;&lt;br /&gt;@Value("#{systemProperties.favoriteColor}")&lt;br /&gt;private String favoriteColor;&lt;br /&gt;&lt;br /&gt;where the term within "#{}" is in the EL.&lt;br /&gt;&lt;br /&gt;There is an elegant implementation of REST based on Spring MVC (and what was unsaid was that it was not based on JAX-RS). The Spring MVC ViewResolver is a natural point to implement the various resource representations that REST provides a common interface to.&lt;br /&gt;&lt;br /&gt;There are several MVC enhancements. @RequestHeader provides access to HTTP request headers. @CookieValue provides access to cookies. It's also possible to have application-specific annotations.&lt;br /&gt;&lt;br /&gt;There is a new Java configuration mechanism. Annotations can now be placed in dedicated "configuration classes" rather than in POJOs themselves. In other words, these are XML files all over again, but in Java 5 syntax rather than using angle brackets. I like this, because I was uneasy about annotations. One of the major benefits of externalising configuration is the ability to decouple wiring from the application's own components and make it possible to substitute implementations without recompiling code. Annotations in code are a step backwards, from this viewpoint. Annotations in dedicated configuration classes are three-quarters of a step forward again. We still need a recompile, but only of the config classes.&lt;br /&gt;&lt;br /&gt;Rod Johnson pointed out that previous versions of Spring had a rather ad hoc approach to the web side of an application, but that Spring 3.0 now features a consistent stack of components. The base is Spring MVC. Above this layer are Spring Web Flow, Spring Blaze DS (for Flex) and Spring JavaScript. At the top layer is Spring Faces (ugh!). Spring Blaze DS will make it very easy to build Flex apps with Spring. The diagram made no mention of Spring Portlet MVC, which is perhaps just as well. [The portlet specification is another monstrosity that continues to give organisations grief. As an "integration" technology, it belongs more in the problem space than in the solution space.]&lt;br /&gt;&lt;br /&gt;The Spring Java config mechanism is type-safe and does not depend on string names. It therefore has more robust bean-to-bean dependencies. It allows inheritance of configuration. And it allows object creation using arbitrary method calls.&lt;br /&gt;&lt;br /&gt;Johnson also introduced Spring Roo, the Domain-Driven Design tool and Ben Alex's brainchild. There is a major functional overlap between Roo and Grails, which Johnson did point out, but his logical flowchart to decide which one to use was a bit contrived, in my opinion. Roo and Grails are competitors, and the fact that they are uncomfortable co-components in the Spring portfolio does not make them part of a seamless product line with an implied "horses for courses" decision-making logic. To put it bluntly, if Roo had appeared a couple of years earlier, Grails would probably have been stillborn. The delay in Roo's release gave Grails its break, and now they're competing for developer mindshare. Well, may the best framework win.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13639021-7837430611261580815?l=wisdomofganesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wisdomofganesh.blogspot.com/feeds/7837430611261580815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13639021&amp;postID=7837430611261580815' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/7837430611261580815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13639021/posts/default/7837430611261580815'/><link rel='alternate' type='text/html' href='http://wisdomofganesh.blogspot.com/2009/06/javaone-2009-day-two-02062009.html' title='JavaOne 2009 Day Two (02/06/2009)'/><author><name>Ganesh Prasad</name><uri>http://www.blogger.com/profile/00179696156998026173</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_WlHQzt6LF1U/SiY3ueVGUMI
