<?xml version="1.0" encoding="UTF-8"?>
<!-- name="generator" content="blojsom v3.2" -->
<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    <channel>
        <title>Storm Alert</title>
        <link>http://storm.alert.sk/blog</link>
        <description>Radovan Semančík&#39;s Weblog</description>
        <language>en</language>
        <image>
            <url>http://storm.alert.sk/favicon.png</url>
            <title>Storm Alert</title>
            <link>http://storm.alert.sk/blog</link>
        </image>
        <docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<generator>blojsom v3.2</generator>
		<managingEditor>Radovan Semančík</managingEditor>
		<webMaster>Radovan Semančík</webMaster>
		<pubDate>Tue, 10 Jan 2012 12:08:08 +0100</pubDate>

                        <item>
            <title>Open Source Identity Management Systems</title>
            <link>http://storm.alert.sk/blog/2012/01/10/Open-Source-Identity-Management-Systems</link>
            <description>I have compiled &lt;a href=&quot;http://www.nlight.eu/documents/open-source-idm/&quot;&gt;a list and an evaluation&lt;/a&gt; of open source identity management systems. This document will be continually updated as the systems evolve.
</description>
            <guid>http://storm.alert.sk/blog/2012/01/10/Open-Source-Identity-Management-Systems</guid>
			<pubDate>Tue, 10 Jan 2012 12:08:08 +0100</pubDate>
            <category>/identity/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/identity/2012/01/10/Open-Source-Identity-Management-Systems</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2012/01/10/Open-Source-Identity-Management-Systems?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Sapienter resistere</title>
            <link>http://storm.alert.sk/blog/2011/12/09/Sapienter-resistere</link>
            <description>&lt;img class=&quot;blogPic&quot; src=&quot;http://storm.alert.sk/gfx/sirius/_igp1714-web-small.jpg&quot;/&gt;
R.I.P.
</description>
            <guid>http://storm.alert.sk/blog/2011/12/09/Sapienter-resistere</guid>
			<pubDate>Fri, 9 Dec 2011 23:32:59 +0100</pubDate>
            <category>/identity/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/identity/2011/12/09/Sapienter-resistere</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2011/12/09/Sapienter-resistere?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Interview</title>
            <link>http://storm.alert.sk/blog/2011/12/01/Interview</link>
            <description>There&#39;s an &lt;a href=&quot;http://www.mayeronline.it/www/archives/midpoint_a_new_open_source_user_provisioning_system/&quot;&gt;interview with me&lt;/a&gt; regarding &lt;a href=&quot;http://evolveum.com/midpoint.php&quot;&gt;midPoint&lt;/a&gt; at &lt;a href=&quot;http://www.mayeronline.it/www/&quot;&gt;Luca Mayer&#39;s blog&lt;/a&gt;.
</description>
            <guid>http://storm.alert.sk/blog/2011/12/01/Interview</guid>
			<pubDate>Thu, 1 Dec 2011 10:59:22 +0100</pubDate>
            <category>/identity/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/identity/2011/12/01/Interview</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2011/12/01/Interview?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>MidPoint</title>
            <link>http://storm.alert.sk/blog/2011/10/24/MidPoint</link>
            <description>&lt;a href=&quot;https://wiki.evolveum.com/display/midPoint/Home&quot;&gt;&lt;img class=&quot;blogPic&quot; src=&quot;http://storm.alert.sk/gfx/logo/midpoint_logo_white_300.png&quot;/&gt;&lt;/a&gt;
&lt;p&gt;
It is time to publicly announce a project that I was working on recently. It is an open-source identity management system named &lt;a href=&quot;https://wiki.evolveum.com/display/midPoint/Home&quot;&gt;midPoint&lt;/a&gt;. It is based on the OpenIDM version 1 code developed by the our part of the team. MidPoint aims to be a usable, pragmatic IDM product. We have based it on many years of experience deploying other IDM products. We have learned from what worked and what have been failing during real deployments. The bad thing is that too many things failed - and that&#39;s something we want to improve with midPoint.
&lt;/p&gt;
&lt;p&gt;
MidPoint is a user provisioning tool. It can do basic provisioning as well as provisioning driven be expressions. It is using Identity Connector Framework (ICF) to connect to other systems. It has a live synchronization capability (similar to Sun ActiveSync) and other synchronization methods are under development. There is a basic RBAC support that is continually improving. Lot of time and effort was invested into diagnostics and support for deployment such as good error reporting and logging. We know where are the pain points of IDM deployments and we are working hard to improve what we can.
&lt;/p&gt;
&lt;p&gt;
MidPoint &lt;a href=&quot;https://wiki.evolveum.com/display/midPoint/Release+1.9&quot;&gt;version 1.9&lt;/a&gt; was released few days ago. It is a third version developed under the &lt;a href=&quot;http://www.evolveum.com/&quot;&gt;Evolveum&lt;/a&gt; brand name. This version is worth checking out as a preview of the final product that is planned as version 2.0 for early next year.
&lt;/p&gt;
</description>
            <guid>http://storm.alert.sk/blog/2011/10/24/MidPoint</guid>
			<pubDate>Mon, 24 Oct 2011 09:58:13 +0200</pubDate>
            <category>/identity/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/identity/2011/10/24/MidPoint</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2011/10/24/MidPoint?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Temperaments</title>
            <link>http://storm.alert.sk/blog/2011/07/08/Temperaments</link>
            <description>&lt;img src=&quot;http://storm.alert.sk/gfx/clipart/krkavec-bojnice-2-out.jpg&quot; alt=&quot;&quot; class=&quot;blogPic&quot;/&gt;
&lt;p&gt;
I was a very young student when I came across a book named &lt;i&gt;Programátorské poklesky&lt;/i&gt; (Programmer&#39;s Misdemeanours) by Ivan Kopeček and Jan Kučera. The authors describe in a humorous way what are the results of programming errors. It was probably my very first book about programming that was not a programming language manual. It was a year after our country woke up from the communist era and programming books were difficult to come by. I think the book had influenced me more than I have anticipated or was willing to admit at the time.
&lt;/p&gt;
&lt;p&gt;
One of the parts that I particularly remember was the software &quot;psychology&quot;. Authors observed four temperaments of programs:
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Sanguine&lt;/b&gt; programs provide readable and helpful error messages, have useful help texts, try to recover from errors and try to communicate reasonably in general. Yet, user interaction is maybe the only useful part of such programs.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Choleric&lt;/b&gt; programs does its job well. Such programs do not crash, but the error messages are very dense and cryptic. They do not provide any additional information and there is no help text. It does not try to recover from errors - it expects that the user will know what to do. Experts find these programs easy to use, but all other people hate it.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Melancholic&lt;/b&gt; programs get very sad when they encounter the smallest of problems. The program just crashes, does not provide any message or description. They refuse to communicate about the problem any further and usually does not even provide a way to resolve it.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Phlegmatic&lt;/b&gt; programs ignore any errors. They just carry no matter the cost. No error message, no indication, it just works on. Of course they may provide wrong results from time to time, but they run. That&#39;s the most important thing.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
All of that came to my mind as I was discussing the error handling approach in mainstream programming languages (mostly Java). It usually boils down to handling exceptions.
&lt;/p&gt;
&lt;p&gt;
The original approach in Java was to use &lt;i&gt;checked&lt;/i&gt; exceptions. Programmer has to either catch them or declare them to be thrown. The authors of Java hoped that it will lead to a better error handling. But it looks like there is a glitch: error handling is very difficult to do right. It takes a lot of time and the error handling code may well be a significant part of the system. This leads to &lt;b&gt;sanguine&lt;/b&gt; programs: they provide good information about errors, but they do little else. There is just not enough time and resources to do everything right.
&lt;/p&gt;
&lt;p&gt;
Laziness is one of the three great virtues of the programmer. Therefore programmers soon stared to focus on the &quot;meat&quot; and simplified the exception handling. The easiest way at hand was to ignore all the exceptions. Catch all exceptions and handle them with empty code block. This obviously leads to a &lt;b&gt;phlegmatic&lt;/b&gt; program. It will run no matter what happens. But the results may not be the best.
&lt;/p&gt;
&lt;p&gt;
The current trend is to switch all the exceptions to the &lt;i&gt;runtime&lt;/i&gt; exceptions. These do not enforce checking and handling. The usual outcome is that nobody checks or handles them. Any exception will bubble up through the call stack to the upper layers until is is caught by the framework. That may be an application server that will display a nicely formatted error message that essentially says &quot;something somewhere went wrong&quot; and terminate the request. The user has no idea what went wrong and where or how to recover from the problem. This is a &lt;b&gt;melancholic&lt;/b&gt; program.
&lt;/p&gt;
&lt;p&gt;
Luckily, some programmers display at least the exception type and message to the user. But what will the user do if presented with the message &quot;ConsistencyException: Consistency constraint violated&quot;? It is not really helpful. Most programmers also display or log a complete stack trace. But that won&#39;t help the user a bit. Even members of a core programming team have problems understanding that, user does not stand a chance. That gives us a &lt;b&gt;choleric&lt;/b&gt; program.
&lt;/p&gt;
&lt;p&gt;
Obviously, one size does not fit all. There is no single &lt;i&gt;right way to do it&lt;/i&gt;. If a good error handling is required then a sanguine approach is needed. But there is a cost to pay: either reduced functionality or much more effort to do the &quot;same&quot; thing. Robust system asks for somehow phlegmatic approach while cheap code is best done melancholic. However, the usual approach is choleric code. Errors are reported, but nobody really understands them. &lt;a href=&quot;http://storm.alert.sk/blog/2009/10/16/Caveat-Emptor&quot;&gt;You just can&#39;t always win&lt;/a&gt;.
&lt;/p&gt;
</description>
            <guid>http://storm.alert.sk/blog/2011/07/08/Temperaments</guid>
			<pubDate>Fri, 8 Jul 2011 22:28:40 +0200</pubDate>
            <category>/software/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/software/2011/07/08/Temperaments</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2011/07/08/Temperaments?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Cycles</title>
            <link>http://storm.alert.sk/blog/2011/06/03/Cycles</link>
            <description>&lt;img src=&quot;http://storm.alert.sk/gfx/clipart/_igp2389-out.jpg&quot; alt=&quot;&quot; class=&quot;blogPic&quot;/&gt;
&lt;p&gt;
I&#39;m still quite young and my &quot;professional memory&quot; does not even count two decades. But I just cannot help to see some recurring patterns. Quite a scary patterns.
&lt;/p&gt;
&lt;p&gt;
I was a student when &lt;b&gt;Sun RPC&lt;/b&gt; was the cool thing. It has all that a C programmer needed at that time to create a distributed system. But obviously it was too simple.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;CORBA&lt;/b&gt; was taking the place of the &quot;cool thing&quot; as I was finishing university. It had all that a C++ programmer may wish for to create a distributed system. Interfaces, object-orientation, &quot;interoperable&quot; references, ...  But it was obviously too complicated to use.
&lt;/p&gt;
&lt;p&gt;
XML took over during the dot-com bubble. Or better to say it was &lt;b&gt;XML-RPC&lt;/b&gt; as a mechanism for Internet-scale distributed systems. It has all that PHP programmer would want. It had the &quot;feature&quot; of &lt;a href=&quot;http://tools.ietf.org/html/rfc3093&quot;&gt;seamlessly passing firewalls&lt;/a&gt;. It was the cool thing for the Internet. But obviously, it was too simple.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;SOAP&lt;/b&gt; came shortly after that. The mechanism by which Java and .NET architectures promised to bridge enterprise and the Internet. Originally designed as simple thing to do something with objects. It ended up as a maze of WS-WhatEver specifications that are far from being simple and actually have nothing to do with objects. This is obviously too complex to use.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;RESTful&lt;/b&gt; religion is the current trend with JSON as its holy prophet, worshiped by the scripting crowd. It is based on an idealistic and internally inconsistent principles of Web Architecture with a loud promise of simplicity. But obviously, this is too simple to be practical.
&lt;/p&gt;
&lt;p&gt;
Now we see JSON schema, namespaces, security and actually all the things that we have already seen in SOAP/WS-* and CORBA. I expect we will see a formal RESTful interface defintions soon. Will this be too complex to use, again?
&lt;/p&gt;
&lt;p&gt;
What we see are cycles. Each new generation of engineers is re-inventing what the previous generation has invented, making all the mistakes all over again. Can this eventually converge? How long are the customers going to tolerate this? And what we &lt;b&gt;really&lt;/b&gt; know about distributed systems?
&lt;/p&gt;
&lt;p&gt;
Sorry guys. I just refuse to participate in this insanity.
&lt;/p&gt;
</description>
            <guid>http://storm.alert.sk/blog/2011/06/03/Cycles</guid>
			<pubDate>Fri, 3 Jun 2011 23:21:44 +0200</pubDate>
            <category>/software/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/software/2011/06/03/Cycles</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2011/06/03/Cycles?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Why SOA Fails?</title>
            <link>http://storm.alert.sk/blog/2011/04/26/Why-SOA-Fails</link>
            <description>&lt;img class=&quot;blogPic&quot; src=&quot;http://storm.alert.sk/gfx/clipart/_igp6714-out.jpg&quot;/&gt;
&lt;p&gt;
Service Oriented Architecture is not a bad idea. Quite the contrary. What is bad about it is its way of implementation and an unbelievable hype.
&lt;/p&gt;
&lt;p&gt;
Usual SOA implementation starts with purchase of an &quot;infrastructure&quot;, which is usually some combination of ESB and process manager (usually BPEL-based). The next step is an attempt to connect existing services to ESB and &quot;orchestrate&quot; them using BPEL. While attempting to connect the very first real service it becomes quite clear that this is much harder that one would expect from product datasheets. Existing services - even though they are based on &quot;web services&quot; - are not quite ready for SOA. They need to be tweaked, schemas need to be modified to conform to the requirements of the ESB, new headers need to be added and so on. This usually result in wrapping existing services with yet another service layer to connect them to &quot;SOA&quot;. But the ridiculous part just begins here. Now the services needs to be &quot;orchestrated&quot;, e.g. the result of one service needs to be passed as an input to another service. But they have incompatible data formats. Now the deployment usually takes two different courses. First is an attempt to abuse BPEL to transform data formats. The result is unreadable, complex and unmaintainable &quot;integration&quot; mess expressed in BPEL. Second usual course is to create a special &quot;conversion&quot; service that just transforms data formats. This results in explosion of services: for each pair of cooperating services that is a new &quot;adaption&quot; service. Complex and unmaintainable integration mess again. Even if this task miraculously succeeds, there is another major problem ahead. The original services were neither independent nor idempotent, they usually have lot of (undocumented) side effects. Therefore they just cannot be freely reused and recombined into business processes. So the next necessary step is to re-engineer all the services (while maintaining backwards compatibility, of course). This is very costly and slow process, but until it is done the benefits of SOA are more than questionable.
&lt;/p&gt;
&lt;p&gt;
What is the real benefit of such &quot;SOA&quot; deployment? I can&#39;t think of any. The mess is still there. It may seem that it is just in one place and therefore is easier to maintain. But that&#39;s just an illusion. There are service wrappers an transformation services that are usually not in one &quot;place&quot;. And even if it is, it is so difficult to navigate that any real benefit of centralization is lost.
&lt;/p&gt;
&lt;p&gt;
What are the downsides of such &quot;SOA&quot; deployment? First of all there is an investment to purchase SOA &quot;infrastructure&quot; and to set it up. Secondly, there is an investment to convert existing non-SOA integration mess to a SOA integration mess. Thirdly, the &quot;infrastructure&quot; is yet another moving part that can fail. It becomes a business-critical piece and needs additional (substantial) cost to set up high availability and resilience. It also takes a lot of energy and attention that could be invested in much better way, it disrupts usual business and builds a false of hope of better future. And I haven&#39;t even mentioned &quot;advanced&quot; problems such as synchronicity and consistency. Clearly and plainly, such SOA deployment is a waste of time. Waste of huge amount of time.
&lt;/p&gt;
&lt;p&gt;
How to make it better? Just remember what SOA is: &lt;b&gt;Service&lt;/b&gt;-Oriented Architecture. The focus should be on services not the infrastructure. The better way of SOA deployment is to start from there. Try to assess what services are already there, how well they are defined, whether they can be reused and whether they actually need to be reused at all. Every experienced developer knows that reusability does not come for free. It is actually quite costly quality. Therefore focus on services that need to be reused and re-engineer them to be reusable. This is best done as part of natural system upgrades and replacements. Try to gradually develop a common data model for your business so there will be less requirements to convert data from one service dialect to another. Some services may need more than one &quot;upgrade&quot; to get into a reusable form. This is not a fast process, so the number of services in SOA will grow very slowly. At the beginning of such SOA initiative the easiest way of &quot;orchestrating&quot; the services is to use any way that you are familiar with, e.g. a simple Java web application. Just make sure you can modify the orchestration code quite easily, as many adjustments will be needed as the things slowly settle down. Having an internal employee or a very flexible partner to do that job would be probably a good choice. As the number of services will be initially low and ability to reuse them will be quite limited, such &quot;orchestration&quot; code will be acceptably maintainable even if some things are hardcoded. This may be a good solution for first few years. Once the number of services grows then it is a good time to think about ESB and BPEL (or alternative technologies that most likely will be available in the future). At that time there will already be a considerable number of services therefore the cost of infrastructure could be easily justified. This service-oriented process to SOA deployment will be less expensive, less disruptive and will continually bring benefits proportional to investments.
&lt;/p&gt;
&lt;p&gt;
Service-Oriented Architecture is nothing new. It is just an ordinary architecture. The architect works with systems instead of components. The architect works with services instead of component interfaces. Apart from that, it is still just an software architecture. Vast majority of principles and experiences applicable to intra-system architecture are reusable also for extra-system SOA. And that is probably the most important part of Service-Oriented &lt;b&gt;Architecture&lt;/b&gt;.
&lt;/p&gt;
</description>
            <guid>http://storm.alert.sk/blog/2011/04/26/Why-SOA-Fails</guid>
			<pubDate>Tue, 26 Apr 2011 17:15:25 +0200</pubDate>
            <category>/software/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/software/2011/04/26/Why-SOA-Fails</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2011/04/26/Why-SOA-Fails?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>The Big Picture</title>
            <link>http://storm.alert.sk/blog/2011/04/19/The-Big-Picture</link>
            <description>&lt;p&gt;
I&#39;m frequently exploring and evaluating new products. It is part of my job. The information overload is huge and it is important to know where &lt;b&gt;not&lt;/b&gt; to look, how to quickly rule out products that are not worth looking at. I&#39;m also reviewing architectures and design, consulting, commenting, advising and maintaining architectures. During the years I&#39;ve noticed that it is quite easy to roughly evaluate a system by just looking at few places.
&lt;/p&gt;
&lt;p&gt;
The first place to look is a web page section called &lt;i&gt;Architecture&lt;/i&gt; or &lt;i&gt;System Overview&lt;/i&gt;. If there is no such page or document, you can be pretty sure that the system is using a popular and well-established &lt;a href=&quot;http://www.laputan.org/mud/&quot;&gt;big ball of mud&lt;/a&gt; architectural pattern. Looking anywhere else is just a waste of time. The option you have is to &lt;i&gt;try&lt;/i&gt; the system for yourself or look at the sources. But that&#39;s very time-consuming and usually the result is not worth the effort. Scratch such system.
&lt;/p&gt;
&lt;p&gt;
If you have found the architectural description, it is usually not worth start reading yet. Just skip ahead and look at the first figure in the document. It usually looks like the &quot;diagram&quot; below. What does this creative depiction tells about the system? Well, it is a three-layer system. Or at least that&#39;s what the architect meant. There is a bunch of stuff in the middle layer, but the picture does not provide any information about the structure inside. Dependencies are not shown so system maintainability is unknown. Interfaces are not even hinted, so there is probably no interface at all or there is a jungle of competing and redundant interfaces. The system structure may not be set yet. Or maybe the architect does not understand the system to draw a better picture. Or maybe the team is afraid to show the structure to the public. None of that is a good sign. The arguments that &quot;we don&#39;t want to clutter the picture with too much details&quot; is usually just an excuse. Reading through the text is mostly a waste of time as it will most likely be just a marketing-oriented nonsense (MON). If there is no better figure anywhere nearby the best strategy is to ... run away.
&lt;/p&gt;
&lt;img src=&quot;http://storm.alert.sk/gfx/figures/arch-picture-1.png&quot; alt=&quot;&quot; class=&quot;blogFigure&quot;/&gt;
&lt;p&gt;
If there is a picture similar to the following one, you are almost there. The system is a good candidate for further exploration. Such picture gives a reasonable level of details and indicates that the architect has quite a clear idea about the system structure. It is not just the form itself, it is the content of the diagram that you should focus on. Look at the figure below. You can see that there is a Repository component. Two data stores below indicates that the component is supposed to act as an abstraction for various data storage mechanisms. Although it is not shown in the picture, you can pretty much expect an interface on top of the Repository component (and other components as well). Similarly with Integration component. You can also see that similar approach is used for two subsystems (Repository and Integration) unified by a common Model component. User interface is placed on top of Model, which clearly isolates it from the low-level details. The most important dependencies are shown in the diagram which provides some hints about maintainability of such architecture. You can get quite a good idea how such system works by just looking at the diagram.
&lt;/p&gt;
&lt;img src=&quot;http://storm.alert.sk/gfx/figures/arch-picture-2.png&quot; alt=&quot;&quot; class=&quot;blogFigure&quot;/&gt;
&lt;p&gt;
Now it is the right time to read through the text and other documents. Look especially for explanation of motives, not just the structure. For example, look for an explanation of reasons that the Repository and Integration components are not unified into a single component. That gives confidence that the team actually though over several alternatives before committing to current architecture. Look for links to papers, books and other sources. That gives a hint that the team spent some time &quot;in the library&quot; instead of trying to save time by blindly re-inventing things in the laboratory. Especially look for buzzwords. If find a buzzword used without a deeper explanation of motives it is a serious warning sign that the architecture may be buzzword-driven and therefore not sound. Look also at hints that the architecture was done &lt;i&gt;all the way down&lt;/i&gt;. That means that the architect thought about deployment and usage of the system. Presence of an deployment diagram or a typical usage scenario is a good sign that this happened.
&lt;/p&gt;
&lt;p&gt;
It is a curious thing how much can be learned from a single picture. The picture is really worth a thousand words.
&lt;/p&gt;
</description>
            <guid>http://storm.alert.sk/blog/2011/04/19/The-Big-Picture</guid>
			<pubDate>Tue, 19 Apr 2011 11:11:35 +0200</pubDate>
            <category>/software/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/software/2011/04/19/The-Big-Picture</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2011/04/19/The-Big-Picture?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Hub and Spoke Myth</title>
            <link>http://storm.alert.sk/blog/2011/04/13/Hub-and-Spoke-Myth</link>
            <description>&lt;p&gt;
This diagram can be found in almost any marketing document dealing with integration problems. It illustrates a concept that is known as &lt;i&gt;hub and spoke&lt;/i&gt;. The difficult O(n&lt;sup&gt;2&lt;/sup&gt;) problem of &lt;i&gt;full mesh&lt;/i&gt; is reduced to a simpler O(n) problem by introducing a central hub. That&#39;s what the marketing guys say (although they don&#39;t usually use the O() notation).
&lt;/p&gt;
&lt;img src=&quot;http://storm.alert.sk/gfx/figures/hub-spoke.png&quot; alt=&quot;&quot; class=&quot;blogFigure&quot;/&gt;
&lt;p&gt;
What the marketing guys don&#39;t say is that this approach usually does not work. The most hubs are just simple message routers. This does not simplify anything. The hub just passes the message from sender to receiver. Oh yes, the hub may use abstract addresses instead of concrete ones, but that&#39;s &lt;a href=&quot;http://www.faqs.org/rfcs/rfc1925.html&quot;&gt;yet another indirection&lt;/a&gt; thing that can be easily done without hub. Oh yes, the hub may do some basic protocol adaptation, but a well-chosen data representation library will do essentially the same thing. That won&#39;t justify the cost of the hub. And what&#39;s really the cost? Except for pretty big pile of money to pay there is an impact on systemic qualities. The hub is inherently a single point of failure. The hub introduces latencies. Hub can cause additional problems as it is yet another moving part in the system. And the communication with the hub is making the code more difficult to understand (just have a look at JMS).
&lt;/p&gt;
&lt;p&gt;
This is a typical anti-pattern for many SOA-motivated deployments. Enterprise Service Bus (ESB) is usually the first component that gets deployed in SOA initiative. But it initially brings no substantial benefit, as there are no services to put on the bus. And if there are services, they are not independent and definitely not idempotent. Such services just cannot be efficiently reused in any other way that it was before the hub came into a play. In fact, the ESB should be among the &lt;i&gt;last&lt;/i&gt; components that get deployed in SOA initiative, not the first. SOA is about the &lt;i&gt;services&lt;/i&gt;, not about the bus.
&lt;/p&gt;
&lt;p&gt;
Yet, there are few cases when the hub-and-spoke approach works:
&lt;ul&gt;
  &lt;li&gt;Asynchronous system: The hub is used to break the timing dependencies of the communicating systems. Such as in well-designed systems based on Messaging-Oriented Middleware, sending system does not need to wait for receiver to process the message. But such system needs to be designed for asynchronous operation, which is usually much more difficult to do than simple synchronous system. Also, the hub needs to be up all the time.&lt;/li&gt;
  &lt;li&gt;Visibility: The hub is used to audit messages passing among the systems. But the hub needs to understand the protocol quite deeply to be of any real use.&lt;/li&gt;
  &lt;li&gt;Common data model: Used to merge data from disparate data sources, converting each of them to and from a common format. The hub forms a &quot;common denominator&quot; communication interface. But, the interface needs to be designed very carefully, as it needs to satisfy the requirements of many communicating parties. Maintenance of such an interface may be in itself a much more difficult problem than the original &lt;i&gt;full mesh&lt;/i&gt; thing.&lt;/li&gt;
&lt;/ul&gt;
Yet, most of these are very difficult to do right. And if done wrong, they may bring much more pain than benefits. Handle with care. The hub is a dragon egg and the spikes are venomous snakes.
&lt;/p&gt;
</description>
            <guid>http://storm.alert.sk/blog/2011/04/13/Hub-and-Spoke-Myth</guid>
			<pubDate>Wed, 13 Apr 2011 23:26:04 +0200</pubDate>
            <category>/software/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/software/2011/04/13/Hub-and-Spoke-Myth</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2011/04/13/Hub-and-Spoke-Myth?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>OpenIDM Design Summit 2011</title>
            <link>http://storm.alert.sk/blog/2011/01/16/OpenIDM-Design-Summit-2011</link>
            <description>&lt;img class=&quot;blogPic&quot; src=&quot;http://storm.alert.sk/gfx/logo/ForgeRock-226x60.png&quot;/&gt;
&lt;p&gt;
The &lt;a href=&quot;http://forgerock.com/openidm.html&quot;&gt;OpenIDM&lt;/a&gt; project is getting up to speed pretty fast. We have done a lot of work recently, but there is even more work to do. Although OpenIDM is led by &lt;a href=&quot;forgerock.com&quot;&gt;ForgeRock&lt;/a&gt; it is an open-source project as it should be. The project is open to the community from the very beginning, but now it is a time to encourage broader community to participate.
&lt;/p&gt;
&lt;p&gt;
The &lt;a href=&quot;http://summit.openidm.forgerock.org/&quot;&gt;OpenIDM Design Summit 2011&lt;/a&gt; is a place for a design discussions, place to ask questions and get answers. It a place to participate. I will be glad to see all of you in Oslo in few weeks (January 26-27).
&lt;/p&gt;
</description>
            <guid>http://storm.alert.sk/blog/2011/01/16/OpenIDM-Design-Summit-2011</guid>
			<pubDate>Sun, 16 Jan 2011 12:37:49 +0100</pubDate>
            <category>/identity/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/identity/2011/01/16/OpenIDM-Design-Summit-2011</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2011/01/16/OpenIDM-Design-Summit-2011?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>The Misery of Distributed Systems</title>
            <link>http://storm.alert.sk/blog/2011/01/12/The-Misery-of-Distributed-Systems</link>
            <description>&lt;img class=&quot;blogPic&quot; src=&quot;http://storm.alert.sk/gfx/clipart/_igp4606-out.jpg&quot;/&gt;
&lt;p&gt;
The more I learn about distributed systems, the more I start to think that nobody has any idea how to make them well. It is unbelievable how little we know about distributed systems design and development. And how many failures do we still need to suffer to learn at least something?
&lt;/p&gt;
&lt;p&gt;
As far back as I remember, there was Sun RPC, CORBA, DCOM, RMI, ... And now there are Web Services and REST. This is at least 20 years of development, yet all of that approaches seems to manifest the same fallacy: they try to hide the network from the developer. I will use Java JAX-WS as an example, but this is in no way specific to Java. The JAX-WS provides a runtime for a web service and generates a web service client. Both are designed to use local Java calls, efficiently hiding the network boundary. It goes a great deal for a programmer to feel comfortable. For example it hides the network exceptions from the programmer (by making them &lt;i&gt;runtime&lt;/i&gt; exceptions). This may seem like a good approach, but it is a bad think in the very principle.
&lt;/p&gt;
&lt;p&gt;
Most people would be surprised how applicable is the theory of relativity to a design of software systems. And most developers would be really surprised how slow the light is. The light will travel only approx. 300km in one millisecond. If the system needs a response under 1 millisecond, it just cannot communicate with anything that is more distant than 150km. Add a TCP three-way handshake and you are pretty much down to a size of a city. Assuming Einstein was right there is nothing, absolutely nothing, that could be done about this. No amount of technology or money can speed it up.
&lt;/p&gt;
&lt;p&gt;
One millisecond is unbelievably long time for a computer system. Even a cheap computer can execute more than a million instructions in 1 millisecond. Local memory access is a bit slower, but even with that slow-down the local call is incomparably faster than a call over a fast network. Faster by several orders of magnitude. How could anyone hope to hide such a difference?
&lt;/p&gt;
&lt;p&gt;
Reliability is another problem. While local call cannot (reasonably) fail, network call can and often does. Hiding the errors from the engineer does a disservice. It usually means that the network problems are ignored or handled at the top-level of an application. It means that any serious error in network communication means a sudden death of the application. Applications that are written a little bit better still manifest serious usability problems in presence of network failures. I can see that well enough on my iPhone.
&lt;/p&gt;
&lt;p&gt;
Network is a significant boundary. A boundary that just cannot be swept under the carpet of a software development framework. Anyone trying to do that will most likely fail. Fail miserably.
&lt;/p&gt;
</description>
            <guid>http://storm.alert.sk/blog/2011/01/12/The-Misery-of-Distributed-Systems</guid>
			<pubDate>Wed, 12 Jan 2011 23:16:39 +0100</pubDate>
            <category>/software/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/software/2011/01/12/The-Misery-of-Distributed-Systems</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2011/01/12/The-Misery-of-Distributed-Systems?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Giant Leap</title>
            <link>http://storm.alert.sk/blog/2010/10/27/Giant-Leap</link>
            <description>&lt;img class=&quot;blogPic&quot; src=&quot;http://storm.alert.sk/gfx/clipart/p7280314-out.jpg&quot;/&gt;
&lt;p&gt;
A giant leap have happened today, even that it may look like a small step from the outside. &lt;a href=&quot;http://forgerock.com/openidm.html&quot;&gt;OpenIDM&lt;/a&gt; Snapshot 1.5 was &lt;a href=&quot;http://forgerock.com/press2010-10-27.html&quot;&gt;released today&lt;/a&gt;. OpenIDM is an open-source provisioning system. The source code was fully available from the very beginning, but this is the first real release of the product, although it is only considered a snapshot, a preview release. I&#39;m very proud to have a chance to participate on that.
&lt;/p&gt;
&lt;p&gt;
OpenIDM does not do much if seen from the outside. It does very basic provisioning and few other minor things. The real goodness is under the hood. OpenIDM is based on component architecture. It is in fact just a bunch of components that can be combined in multiple ways. The components can be modified, inserted or replaced with custom solutions. OpenIDM is based on ESB/JBI principles, therefore the components may take a various forms, including Java, BPEL, XSLT and others. Yes, BPEL is a native part of OpenIDM from the very beginning rather than being some kind of afterthought. The inter-component interfaces are defined using WSDL, so the implementation language does not matter that much. And it is &quot;contract-first&quot; WSDL, manually written and carefully designed. It is not generated by some kind of tool that &lt;i&gt;almost&lt;/i&gt; works. OpenIDM takes the architecture seriously. Take a &lt;a href=&quot;https://wikis.forgerock.org/confluence/display/openidm/OpenIDM+Architecture&quot;&gt;look yourself&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
OpenIDM has &lt;a href=&quot;https://identityconnectors.dev.java.net/&quot;&gt;Identity Connector Framework&lt;/a&gt; as a workhorse. So even though OpenIDM is a new thing, there is already a decent set of connectors that can be used with it. The tooling is provided by Netbeans SOA plugins now. There&#39;s composite application editor, graphical BPEL editor and debugger. And much more than that - a complete environment that a serious developer would expect. And honestly - IDM projects are heavily customized, good development tools are really critical in IDM field.
&lt;/p&gt;
&lt;p&gt;
I believe that OpenIDM is starting a new generation of IDM systems. That&#39;s definitely one of the project goals. We have made a first leap today. I would like to thank a lot everybody that was a part of it. And I&#39;m already looking forward to the next steps. It will happen ... soon!
&lt;/p&gt;
&lt;p class=&quot;notabene&quot;&gt;
These are just my personal opinions as an engineer. It is not an official statement of ForgeRock, nLight or any other entity except myself.
&lt;/p&gt;
</description>
            <guid>http://storm.alert.sk/blog/2010/10/27/Giant-Leap</guid>
			<pubDate>Wed, 27 Oct 2010 22:02:41 +0200</pubDate>
            <category>/identity/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/identity/2010/10/27/Giant-Leap</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2010/10/27/Giant-Leap?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Facedown</title>
            <link>http://storm.alert.sk/blog/2010/09/24/Facedown</link>
            <description>&lt;img class=&quot;blogPic&quot; src=&quot;http://storm.alert.sk/gfx/clipart/_igp7455-out.jpg&quot;/&gt;
&lt;p&gt;
During last few days Facebook went &lt;a href=&quot;http://www.centernetworks.com/facebook-down&quot;&gt;down&lt;/a&gt; and up and &lt;a href=&quot;http://www.centernetworks.com/day-2-facebook-down&quot;&gt;down&lt;/a&gt; and up again. It was not nice, but it was also not unexpected.
&lt;/p&gt;
&lt;p&gt;
It was not nice because I suddenly haven&#39;t had a place where I could post my usual sarcastic remark (Twitter and all the rest just don&#39;t matter any more). That was painful.
&lt;/p&gt;
&lt;p&gt;
It was not unexpected because Facebook is still just a technology (even though it sometimes looks like magic). Technology fails.
&lt;/p&gt;
&lt;p&gt;
Facebook changed the communication paradigm. Except for private(*) point-to-point communication there are options for semi-private &quot;multicast&quot; status updates, groups, events, etc. I believe that the communication paradigm that Facebook popularized is a good one. However, Facebook failure disrupted communication of too many people at the same time. That failure is a good demonstration that Facebook architeture is wrong. Totally wrong. Because it is centralized, both from technological and from organizational point of view.
&lt;/p&gt;
&lt;p&gt;
Centralization means that one party has a control all over the place. They can see everything, change anything, even rewrite history (that actually almost happened with terms of service and privacy settings). Think nineteen eighty-four.
&lt;/p&gt;
&lt;p&gt;
Centralization means single point of failure. Good engineers know that this should be avoided, especially in Internet scale systems.
&lt;/p&gt;
&lt;p&gt;
Centralization has an economic impact as well. Who will pay for all these boxes (and electricity, cooling, space, staff, ...) that are needed to handle a communication of more than a billion people?
&lt;/p&gt;
&lt;p&gt;
The future of Facebook in its current form is more than questionable. Yet very few people can see it. I would &lt;b&gt;not&lt;/b&gt; recommend to buy Facebook shares.
&lt;/p&gt;
&lt;p class=&quot;notabene&quot;&gt;
*) If a communication that must be shared with a strange multi-national corporation can be considered &lt;i&gt;private&lt;/i&gt;.
&lt;/p&gt;
</description>
            <guid>http://storm.alert.sk/blog/2010/09/24/Facedown</guid>
			<pubDate>Fri, 24 Sep 2010 10:21:33 +0200</pubDate>
            <category>/software/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/software/2010/09/24/Facedown</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2010/09/24/Facedown?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Role Explosion</title>
            <link>http://storm.alert.sk/blog/2010/09/21/Role-Explosion</link>
            <description>&lt;img class=&quot;blogPic&quot; src=&quot;http://storm.alert.sk/gfx/clipart/flame-havrani-2-out.jpg&quot;/&gt;
&lt;p&gt;
Everybody knows RBAC, the Role-Based Access Control. The principle is simple, the theory behind it seems to be sound and it is very popular. The problem is that is does not scale. RBAC is fine for few tens of roles. But as the number of connected systems grow, the number of roles grows as well. Organization with thousand employees can easily end up with few of thousands of roles. The difficult problem of managing thousand employees will be transformed to even more difficult problem of managing few thousands of roles.
&lt;/p&gt;
&lt;p&gt;
The reasons are quite understandable but they are far from being obvious:
&lt;ul&gt;
  &lt;li&gt;Cartesian product: Let&#39;s have roles for bank teller, supervisor and branch director. Let&#39;s operate in London, Berlin and Bratislava. We need a role for &quot;teller in London&quot;, &quot;teller in Berlin&quot;, ... 9 roles total. The number of roles grows very quickly. &lt;/li&gt;
  &lt;li&gt;Atomization: This can be sometimes avoided by decomposing roles to re-usable re-combinable units. Combine them to a &quot;higher-order&quot; roles using role hierarchy. This gives us 6 roles instead of 9. Unless the teller shares part of the access rights with janitor. Then we need &quot;basic branch office access&quot; role, &quot;teller&#39;s IT access&quot; role and a &quot;teller&quot; role that combines these two. Now we have 8 roles. The number of roles still grows quite quickly.&lt;/li&gt;
  &lt;li&gt;Uniqueness: Many employees have one-of-a-kind set of access rights. Any attempt to fit them into the roles will inevitably result in a number of roles that is equal or greater than the number of such employees. This is quite pointless.&lt;/li&gt;
&lt;/ul&gt;
This is known as role explosion. It is fatal for IDM projects. A project that started with good intention to simplify user management will end with a role structure that is much more difficult to maintain then before.
&lt;/p&gt;
&lt;p&gt;
Static RBAC model usually cannot be used to efficiently handle role explosion. There are some solutions, but none of it is a panacea:
&lt;ul&gt;
  &lt;li&gt;ABAC - Attribute-Based Access Control. This seems to be a new buzzword. The principle is that instead of having roles there is a expression that computes access rights. The expression takes user attributes as parameters. It seems to be very flexible. But it is a new concept and has yet to be proven. Also, it replaces formal structure of roles with logic. That smells of programming instead of configuration. ABAC may solve the problem of role management, but does it also solve the generic problem of policy complexity and management?&lt;/li&gt;
  &lt;li&gt;RBAC, but forget about least privilege. Create &quot;bigger&quot; roles than what would the principle of least privilege dictate. Roles that allow much more than they should. This will improve role re-use and keep the number of roles manageable. It is less secure, but may be good for some environments.&lt;/li&gt;
  &lt;li&gt;Spice up roles with some logic. That usually means adding rules to make roles more generic without sacrificing security. E.g. instead of creating &quot;teller in London&quot; create a parametric role &quot;teller&quot; that takes locality from user profile as a parameter and computes the path to the home directory. This is somewhere between ABAC and static RBAC. It has good features from both approaches and seems to be the most popular choice for provisioning systems. But does it really solves the problems? Nobody seems to know for sure.&lt;/li&gt;
 &lt;li&gt;Manage the chaos. Let user&#39;s request access rights, let others to approve it. The obvious problem is how to revoke the unneeded rights. There needs to be yet another process to review and revoke them, usually called attestation. It is a good for CYA strategy, as there is always someone who have approved what he shouldn&#39;t. But is it really secure? The approvals are often done by &quot;I just look at it and if it seems OK I approve&quot;. Especially if someone has to approve hundreds of requests each day.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
Practical enterprise IDM solution will most likely need all of these mechanisms, not just one. And especially a good, experienced team of people using these mechanism. Because every IDM deployment is different and one size does &lt;b&gt;not&lt;/b&gt; fits all.
&lt;/p&gt;
</description>
            <guid>http://storm.alert.sk/blog/2010/09/21/Role-Explosion</guid>
			<pubDate>Tue, 21 Sep 2010 22:06:49 +0200</pubDate>
            <category>/identity/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/identity/2010/09/21/Role-Explosion</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2010/09/21/Role-Explosion?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
                        <item>
            <title>Identity Garbage</title>
            <link>http://storm.alert.sk/blog/2010/08/23/Identity-Garbage</link>
            <description>&lt;img class=&quot;blogPic&quot; src=&quot;http://storm.alert.sk/gfx/clipart/pict0041-out.jpg&quot;/&gt;
&lt;p&gt;
Recent &lt;a href=&quot;http://blog.talkingidentity.com/2010/08/push-vs-pull-in-identity-management.html&quot;&gt;discussions&lt;/a&gt; are about whether push or pull is the right model for future identity management. &lt;a href=&quot;http://blogs.gartner.com/mark-diodati/2010/08/20/consensus-on-the-future-of-standards-based-provisioning-and-spml&quot;&gt;Unpractical standards&lt;/a&gt; are being revived. Everybody discussing the technology, the future, the visions. There is almost no discussion about the most difficult current problem of identity management: data.
&lt;/p&gt;
&lt;p&gt;
There is (at least) one critical problem with implementation of single sign-on, identity federation, provisioning to the cloud and other fancy buzzwords. The problem is user database. It is not that difficult to deliver the information that &lt;i&gt;someone should have access somewhere&lt;/i&gt; using whatever push, pull, standard or proprietary method - as long as you have that information. The reality is that enterprises does not have that information in a usable form. It is almost always distributed in several data stores, usually provided in incompatible formats, it is often inconsistent and sometimes even contradictory. And it is far from complete. Many provisioning cases are solved by non-algorithmic methods, e.g. manager or security officer deciding whether the request &quot;looks valid enough&quot; to be approved. The current situation is best described as &lt;i&gt;semi-organized chaos&lt;/i&gt;.
&lt;/p&gt;
&lt;p&gt;
How could anyone build an automated, Internet-scale, cloud-enabled and standards-based identity management mechanism on top of that? Hardly. Such project will most likely fail. But it will waste a lot of time and money before it fails.
&lt;/p&gt;
&lt;p&gt;
The first step is to consolidate the data. Build a consistent user database, align policies, design business processes that can support 80% of cases with 20% of effort. It is naïve to expect that everything could be automated, therefore prepare for a reasonable amount of exceptions and human interactions from the very beginning. Single sign-on, identity federation, support for the cloud (whether push or pull) and even the standards will not provide any considerable help in that. It is mostly manual work of security staff, business people and engineers that is needed.
&lt;/p&gt;
&lt;p&gt;
What can help is a well-designed and well-deployed provisioning system. In contrary to the popular beliefs the provisioning system is not really about provisioning. Yes, provisioning is a important part of the system, but other aspects are in fact much more important. Provisioning system can take data from several sources, covert them to a common format and merge them. Therefore it can create a unified database. Provisioning system can compare data among several system, correlating them, therefore detecting the inconsistencies. Provisioning system supports workflow and human interaction to clean up the data and supplement missing information. Both during initial migration and (most importantly) during the day-to-day operation. 
&lt;/p&gt;
&lt;p&gt;
Reasonable identity consolidation project including a decent provisioning system is a necessary pre-requisite for any other identity-related activity. It is a shame that engineers forget the &lt;i&gt;Garbage In, Garbage Out&lt;/i&gt; phrase that was popular few decades ago. If the data are bad, any system built on top of such data can only be worse.
&lt;/p&gt;
</description>
            <guid>http://storm.alert.sk/blog/2010/08/23/Identity-Garbage</guid>
			<pubDate>Mon, 23 Aug 2010 23:09:33 +0200</pubDate>
            <category>/identity/</category>
                                        <wfw:comment>http://storm.alert.sk/blojsom/commentapi/storm/identity/2010/08/23/Identity-Garbage</wfw:comment>
            <wfw:commentRss>http://storm.alert.sk/blog/2010/08/23/Identity-Garbage?page=comments&amp;flavor=rss2</wfw:commentRss>
                                </item>
            </channel>
</rss>

