<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/1.5.1-alpha" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
>

<channel>
	<title>Thoughts of an IT professional</title>
	<link>http://cristi.blogsome.com</link>
	<description>Thoughts of an IT professional</description>
	<pubDate>Wed, 23 Sep 2009 14:13:27 +0000</pubDate>
	<generator>http://wordpress.org/?v=1.5.1-alpha</generator>
	<language>en</language>

		<item>
		<title>Exit</title>
		<link>http://cristi.blogsome.com/2006/09/05/exit/</link>
		<comments>http://cristi.blogsome.com/2006/09/05/exit/#comments</comments>
		<pubDate>Tue, 05 Sep 2006 13:33:34 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Personal</category>
	<category>Development</category>
	<category>IT in SE Europe</category>
	<category>Favorites</category>
		<guid>http://cristi.blogsome.com/2006/09/05/exit/</guid>
		<description><![CDATA[	I have moved my blog to my site.

]]></description>
			<content:encoded><![CDATA[	<p>I have moved my blog to my site.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/09/05/exit/feed/</wfw:commentRss>
	</item>
		<item>
		<title>REST and SOAP</title>
		<link>http://cristi.blogsome.com/2006/08/31/rest-and-soap/</link>
		<comments>http://cristi.blogsome.com/2006/08/31/rest-and-soap/#comments</comments>
		<pubDate>Thu, 31 Aug 2006 21:15:10 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
	<category>Favorites</category>
		<guid>http://cristi.blogsome.com/2006/08/31/rest-and-soap/</guid>
		<description><![CDATA[	I have started reading on REST-type architectures (I recommend this intro in particular). It is an interesting exercise to compare them to SOAP, one of the main differences being the amount of information a client has to know about the remote system it is interacting with. With SOAP the client must know the whole API [...]]]></description>
			<content:encoded><![CDATA[	<p>I have started reading on REST-type architectures (I recommend this <a target="_blank" href="http://www.xfront.com/REST.html">intro</a> in particular). It is an interesting exercise to compare them to SOAP, one of the main differences being the amount of information a client has to know about the remote system it is interacting with. With SOAP the client must know the whole API stack in order to be able to carry out a series of actions while a REST client gets passed the resource for its next actions as it progresses. To go back to the example in the above intro: as the REST client searches the catalog it is given URIs which can be used for carrying out certain actions (viewing an article, adding it to cart, etc&#8230;). A REST client just needs to agree on the semantics of the data (how do you specify the URI for viewing an article or adding it to the shopping cart) with the server and then it just needs to call those URIs when it needs a particular action taken.<br />In contrast, a SOAP client needs to know the whole server API before engaging in a conversation with the server. It needs to know what method to call and what types to use in order to retrieve a product, get product information, add it to shopping cart, etc&#8230; It needs all these before else it doesn&#8217;t know what to do.<br />The REST architecture is very similar to the world wide web: a human being browses a page, sees some links, if they are interesting it follows them, etc&#8230; The SOAP architecture is, to a certain extent, similar to a human being using Microsoft Office: if you do not know the bazillion buttons and dropdowns MS Office comes with you cannot use it. In order to use MS Office you need to know its user guide, similar to having to know the API of a SOAP server in order to use it.<br />I like REST, conceptually for now, because it gives me the same feeling as when I was studying distributed computing in university: you have a node, you specify its relationships with other nodes, you set it up it in the network and before you know a whole web of relations comes alive. In REST you have to think in local terms (to what other nodes am I connected now that I am on this node and what can I do now?), while with SOAP you have to think in global terms (I know the whole application, I have this data, what do I do with it now?). <br />That being said, I am wondering how will REST architecture scale when the number of connections between nodes will increase. Let&#8217;s say that I have the product node and for now I have to other nodes (or URIs in REST-speak) attached to it: ordering the product and viewing it. What if I need to add 15 more actions to this node, will that affect the size of the message I am sending the client and effectively consume a lot of resources? What if these actions are not that different one from another, how will the clients be able to make a decision about where to proceed next?<br />Another point I&#8217;d like to make is the fact that when programming to a REST-architecture you are intimately tied to it. You cannot download the API, put a layer of abstraction on top of it and plug it into your application as you would do in a SOAP scenario. With REST you get a node, you parse it for its relationships to the rest of the application (and you have to make this all the time because the REST server may decide to change the URIs of those relationships) and then you are ready to do something. In SOAP the relationships are expressed in the API, in REST they are discovered every time you process a remote node. You are dependent on the remote server a lot more than in a SOAP scenario. Interacting with REST-servers may result in tight-coupled systems*. <br />One last thing (related to the above) would be the fact the REST is so different from SOAP to the point that a customer wishing to communicate with a REST-based system may have to alter its application entirely (not only the layer it uses for communicating with the rest of the world). REST doesn&#8217;t let people get their feet wet, you are either in it or totally outside of it. This could hamper mass adoption.<br />I am waiting to see how this unfolds. Given the fact that most corporations grok SOAP I would be surprised if this technology will make a beach-head in the enterprise space. But you never know&#8230; I, for one, wouldn&#8217;t mind getting that feeling I got in university again&#8230;</p>
	<p><a target="_self" href="#">Later edit</a>: A REST application is probably best used for distributed computing where various nodes talk to one another. In this scenario the concept of a REST client and a REST server doesn&#8217;t exist, basically the REST client is emerged in the network the REST server(s) are running. You cannot have an external (at least I don&#8217;t think so) REST client, the REST client is similar to a spider that goes from node to node carrying out certain actions at each node and finishes by becoming part of the network. I think it is for this reason that trying to connect an external system to a REST-network fails, because the external system is to intimately tied to the REST network that it finishes by becoming part of it. <br />Comments welcome!!</p>
	<p>* I am not sure about this, please drop a comment if you want to talk about it.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/08/31/rest-and-soap/feed/</wfw:commentRss>
	</item>
		<item>
		<title>The emergence of the managed environment</title>
		<link>http://cristi.blogsome.com/2006/08/30/the-emergence-of-the-managed-environment/</link>
		<comments>http://cristi.blogsome.com/2006/08/30/the-emergence-of-the-managed-environment/#comments</comments>
		<pubDate>Wed, 30 Aug 2006 14:45:01 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
	<category>Favorites</category>
		<guid>http://cristi.blogsome.com/2006/08/30/the-emergence-of-the-managed-environment/</guid>
		<description><![CDATA[	You wouldn&rsquo;t have guessed that this post is about EJBs, right? I wrote a rather critical post about EJBs, but I&rsquo;d like to take a second look at them.I was looking at EJBs from a historical point of view and I realized that the EJBs are probably the first managed environment. Their intention was noble: [...]]]></description>
			<content:encoded><![CDATA[	<p class="MsoNormal">You wouldn&rsquo;t have guessed that this post is about EJBs, right? I wrote a rather critical <a target="_blank" href="http://cristi.blogsome.com/2006/06/06/going-thru-the-ejb-spec">post</a> about EJBs, but I&rsquo;d like to take a second look at them.<br />I was looking at EJBs from a historical point of view and I realized that the EJBs are probably the first managed environment. Their intention was noble: to free the developer of any operational concerns and focus exclusively on the business logic. The developer was not supposed to worry about securing an application, about propagating credentials in a cluster, the environment was supposed to do this. The developer was not supposed to code for concurrency, the environment was going to do this. The developer was not supposed to deal with resource management, the environment would have done this for it. The developer was not supposed to code TX behaviour, but rather declare it and let the environment enforce it and propagate it in a cluster. The developer was not supposed to connect to a DB manually, but rather delegate this to the environment. The aim was really high, the functionality that this managed environment was supposed to implement was not trivial. On top of this, the spec defined this managed environment to be a distributed managed environment. Very high goals&hellip;<br />The result was disappointing: in order to embed your component in this managed environment you had to code to a series of interfaces and design policies which had to become second nature to a developer, in other words the environment was very intrusive. Embedding your component in the environment also came with a very large overhead: for some beans no less than 6-7 files were required in order to be able to turn an ordinary class into an EJB. Working with entity beans was particularly hard on anyone who had to use collections in the early days of EJBs: I remember scanning the log of the application and waiting forever for the app server to load 20 entities. This managed environment also came with some perverse side effects, the most known of which was the vendor lock-in: transporting an application from one app server to another was an undertaking that very few organizations had the resources to carry out. </p>
	<p class="MsoNormal">Now, if we look at it from a &ldquo;historical&rdquo; point of view, the above doesn&rsquo;t seem so bad for a first try. One cool thing about EJBs that resonates well with me is the fact that EJBs promoted the use of interfaces. One very good use of this would have been the abstraction of a business process behind interfaces, unfortunately this didn&rsquo;t take off, most of the implementations were going the other way around, from concrete class to interface, XDoclet-style.<br />The &ldquo;mistakes&rdquo; that this operational environment made would be that it was advertised as &ldquo;enterprise&rdquo; and that it was too inclusive. Trying to address every issue important in enterprise computing on your first shot is prone to failure. The fact that this was done in a &ldquo;democratic&rdquo; fashion with each industry vendor pitching in his customers&rsquo; needs didn&rsquo;t make defining the spec easier.</p>
	<p>Some people look at EJBs as an abject failure. I look at it as the first step on the road to something new, a first step loaded with mistakes as all first steps are. Currently everything is running in a container, in a managed environment if you wish, which you get to define and tinker with if you wish. The lessons learned by working with EJBs provided valuable when the current successful containers were designed. It&rsquo;s an evolution if anything else.</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/08/30/the-emergence-of-the-managed-environment/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Communication thru UML</title>
		<link>http://cristi.blogsome.com/2006/08/29/communication-thru-uml/</link>
		<comments>http://cristi.blogsome.com/2006/08/29/communication-thru-uml/#comments</comments>
		<pubDate>Tue, 29 Aug 2006 18:33:53 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/08/29/communication-thru-uml/</guid>
		<description><![CDATA[	I am reading Martin Fowler&rsquo;s UML Distilled and I am going over his introduction to use cases. So far it looks like use cases are one point where domain experts and developers come together and is the main interaction between them. Basically, the domain experts communicate the behaviour of the system to the system architect [...]]]></description>
			<content:encoded><![CDATA[	<p class="MsoNormal">I am reading Martin Fowler&rsquo;s <strong>UML Distilled</strong> and I am going over his introduction to use cases. So far it looks like use cases are one point where domain experts and developers come together and is the main interaction between them. Basically, the domain experts communicate the behaviour of the system to the system architect which can extract from it an essence which can further be abstracted into collaboration diagrams, class diagrams, etc&hellip; A conceptual domain model is built and supposedly from this domain model you can start drawing collaboration diagrams and the rest. <br /> This doesn&rsquo;t get even close to the complexity of the business logic. It is just so simplistic. One other &ldquo;great&rdquo; way to &ldquo;model&rdquo; a business was to treat nouns as classes and verbs as methods. I don&rsquo;t know why, but to me it sounds like medieval witch-craft. This packaging of information so that it fits inside a developer&rsquo;s head is atrocious. It probably works with <em>someone that has some knowledge of the business</em>, but it doesn&rsquo;t work with someone that is just entering the business. It is simplistic to assume that the ramp-up time for getting into a domain can be obviated by some collaboration diagrams. You have to know what you model, and you have to know it very well before starting to design.</p>
	<p class="MsoNormal">Let&rsquo;s take an architect that spent the last 10 years architecting video games. It probably has its head filled with design patterns, UML diagrams, tricks, frameworks, etc&hellip; that enable it to do his job very well. Suppose that the same person is given the task of designing an application in the insurance industry. After collecting a mountain of use cases will it be able to see points of change in the application he&rsquo;s building, will it be able to abstract the business process that it is implementing so that the application changes easily as the business process changes itself? I&rsquo;d be surprised. That architect will go thru its collection of use cases and come up with a platform independent model and from it design the whole application. And he will probably fail to capture quite a few assumptions that the domain expert takes for granted and create a system that deviates from the original intent. It would have to adapt itself to the domain and then start to make some assumption about it in order to model it better. <!--[if !supportLineBreakNewLine]--><br /> <!--[endif]--></p>
	<p class="MsoNormal">UML can be used as a tool for communication between the business analysts and developers, but we should not expect too much from this tool. I think that the potential for errors and the noise is pretty big for this communication channel. Once things start to get complex these diagrams will not be able to translate efficiently the process described by the domain owners to the system architect. Instead of relying on various meetings with the business analysts, the architect should be able to understand the process, should be able to ask question meaningful to the business owners about the process that it is implementing and then it should start modeling it. It would help a lot if the business analysts would have some sort of a manual that distils the business and that the system architect can read before engaging with them.<br /> I, for one, treat use cases and collaboration diagrams mostly as documentation needed for bringing a developer on board, rather than a way to pull information out of a domain. </p>
	<p> As a final note I would say that the ability to adapt to a new environment is becoming a requirement for a developer. In order to be able for a developer to function efficiently across a wide array of industries that developer should learn how to adapt to a new business environment, and pretty easily. A developer should scratch beyond the surface of a industry in order to make meaningful decisions. </p>
	<p class="MsoNormal">P.S. I&rsquo;ll give an example from my experience.<br /> I was designing an e-commerce application that had to support multiple customers and had to be industry-agnostic. What was the functionality that was most prone to change from one customer to another and which had to be abstracted first? Navigation? Layout? No. It was/is the prices. Every customer has its internal pricing structure (tiered, contract-based, rebates, etc&hellip;) that has to be reflected in the application. I learned it the hard-way, and it is a valuable lesson. When I designed a B2B application the first interface that I wrote was the interface for handling prices because this was one piece of functionality that I knew the customer cared about and that was prone to change. Do you think that this need ever transpired from the various interactions I had with the customers and various use cases I walked thru? No. The prices were the functionality that were the most prone to change and there was nothing out there to tell me that, most customers would assume that their price schema is what everyone is using. It was the interaction with quite a few customers that showed me that what is really prone to change is the pricing module.<br /> P.P.S. In the above application the next thing that had to be abstracted was the interaction with their back-office systems, but it is a lot more obvious that it has to be abstracted.</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/08/29/communication-thru-uml/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Open Source Trademarks</title>
		<link>http://cristi.blogsome.com/2006/08/25/open-source-trademarks/</link>
		<comments>http://cristi.blogsome.com/2006/08/25/open-source-trademarks/#comments</comments>
		<pubDate>Fri, 25 Aug 2006 14:34:04 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
	<category>IT in SE Europe</category>
		<guid>http://cristi.blogsome.com/2006/08/25/open-source-trademarks/</guid>
		<description><![CDATA[	One of the revenue models for open source (OS) companies is the selling of support services and documentation. JBoss is widely known for pioneering the model of making money off support rather than off selling a product. The question that is posed is how do they protect this revenue stream? You can set-up a shop [...]]]></description>
			<content:encoded><![CDATA[	<p>One of the revenue models for open source (OS) companies is the selling of support services and documentation. JBoss is widely known for pioneering the model of making money off support rather than off selling a product. The question that is posed is how do they protect this revenue stream? You can set-up a shop somewhere in Eastern Europe, staff it up with committers to that particular open source project in order to gain credibility, set-up a workforce that masters the product and costs 3 to 4 times less than their Western counterparts and start selling support services. Chances are that you will be able to leap ahead of the original open source company because of the pricing power you yield due to lower costs.<br />So, how do the OS companies protect themselves from this threat? One great protection is thru the use of trademarks. Take a look at <a href="http://www.redhat.com/about/corporate/trademark/" target="_blank">Red Hat</a>, <a href="http://www.mysql.com/company/legal/trademark.html" target="_blank">MySQL</a>, and <a href="http://news.zdnet.com/2100-3513_22-5893015.html" target="_blank">JBoss</a>. Boy, do they protect their brand. MySQL goes as far as to prevent the use of its trademark on documentation. An IT shop selling support services for MySQL (for example) could be taken to court by MySQL because they are using the MySQL trademark&nbsp;(when they are advertising &quot;Buy great MySQL support from us&quot;) without consent from the MySQL group. An IT shop planning to compete with them on support should make sure it flies under the radar and doesn&#8217;t make a significant dent in the original OS company&#8217;s revenues. The moment it gains traction in the market and starts having an effect they should prepare to meet the original OS company&#8217;s legal team. Chances are they will not be able to sell their services in a country/region that takes intellectual property (IP) seriously.<br />Eastern Europe could sell support for OS software to small and medium business in the West mainly because this is a market that is not in the OS companies&#8217; cross-hairs. Western small and medium business could gain from this service (no-cost software and low-cost services) because currently their other alternatives for troubleshooting their Linux desktop are googling their problems or calling tech-savvy cousin Joe.<br />I really like the way these OS companies manouver. You may have the impression that OS is run by a bunch of pony-tailed hippies fed on utopia, the fact is that these guys grok IP and grok it very well. These guys seem pretty well prepared for an environment in which IP is the main expenditure. A lot better than some closed-cource establishments&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/08/25/open-source-trademarks/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Using Google</title>
		<link>http://cristi.blogsome.com/2006/08/25/using-google/</link>
		<comments>http://cristi.blogsome.com/2006/08/25/using-google/#comments</comments>
		<pubDate>Fri, 25 Aug 2006 13:42:35 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/08/25/using-google/</guid>
		<description><![CDATA[	These days I have done something that I have not done for the last year: I searched on Google. Yep, I didn&#8217;t do a search on Google for quite a while. The reasons that kept me away from Google was first the Google desktop which behaves more like a trojan than anything else and then [...]]]></description>
			<content:encoded><![CDATA[	<p>These days I have done something that I have not done for the last year: I searched on Google. Yep, I didn&#8217;t do a search on Google for quite a while. The reasons that kept me away from Google was first the Google desktop which behaves more like a <a href="http://www.theregister.co.uk/2006/02/15/privacy_anonymity/" target="_blank">trojan</a> than anything else and then its relationship with the Chinese government. Its hunger for information didn&#8217;t score many points with me neither: Google is a vacuum cleaner which absorbs every piece of information it can get its hands on. The huge (at the time) mailbox size of GMail reflects, to a certain extent, its hunger for information. Give the users a huge mailbox and load the mail program with features that make the users <strong>reluctant to delete email</strong> (such as tracking conversations) and they will keep most of their data with you&#8230; Its never expiring cookie says the same thing: &quot;We want information and we will whatever is needed to get it&quot;.<br />To go back to Google search, I didn&#8217;t use Google search because I didn&#8217;t have to. The environment in which I was working before didn&#8217;t require me to search the web, most of the information I needed I could access very quickly, either thru information systems or thru people.<br />Well, that changed. I changed jobs and in the new environment I found myself tackling an application server problem. With little documentation and no tech-support I had to go back to Google. I spent 3 hours on Google trying to find some documentation with no results. It&#8217;s not the fact the Google didn&#8217;t help me find what I needed that prompted me to write this post. Is the fact that I grew to view web-search as a last choice for information retrieval. For the last year I have put up a library on del.icio.us where I go if I need to find something. I have subscribed to various feeds which provide me with very good information that I index according to my needs. I have come back to it when I needed to get some research about outsourcing from Western Europe, I didn&#8217;t have to go to Google and start from scratch and sift thru mountains of garbage in order to find what I need. The effort of putting up a small library, of interacting with human beings interested in the same fields as you is a good long-term investment.<br />I am slowly coming to the conclusion that dependence on web-search reflects a poor environment (in my case poor documentation and no tech support). What I needed should have been covered way better by my application server provider, I should not have to go Google and struggle to find a significant keyword that would have provided me with the answer. My application server provider should have found a way to channel all the information that their users have to me. They failed and the only thing I could fall back was searching on Google. (I am wondering how many tech departments out there outsource to Google the indexing their information rather than putting up a decent system that their users can rely on.)<br />Using a search engine may mean, to a certain extent, the assumption of instant gratification: &quot;I don&#8217;t really want to put the effort in acquiring this information, I&#8217;ll just ask Google for it&quot;. Don&#8217;t be surprised if Google will not find it for you. It may also mean a poor environment where your source of information is a search engine that is not an authority in the field you are interested in.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/08/25/using-google/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Some effects of IT outsourcing in Romania</title>
		<link>http://cristi.blogsome.com/2006/08/24/some-effects-of-it-outsourcing-in-romania/</link>
		<comments>http://cristi.blogsome.com/2006/08/24/some-effects-of-it-outsourcing-in-romania/#comments</comments>
		<pubDate>Thu, 24 Aug 2006 17:13:03 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>IT in SE Europe</category>
		<guid>http://cristi.blogsome.com/2006/08/24/some-effects-of-it-outsourcing-in-romania/</guid>
		<description><![CDATA[	I was talking to my cousin in the beautiful(??) country of Romania about developments in the IT industry over there. From what I remember it looks like the wages in the IT industry have shot up significantly, being one of the very few drivers of salary growth over there. From some email I got from [...]]]></description>
			<content:encoded><![CDATA[	<p>I was talking to my cousin in the beautiful(??) country of Romania about developments in the IT industry over there. From what I remember it looks like the wages in the IT industry have shot up significantly, being one of the very few drivers of salary growth over there. From some email I got from a friend in Romania it looks like positions which require 3 to 4 years of experience are going for at least 1000-1500 euros a month. Unfortunately for IT professionals some costs (such as the cost of owning a home) have greatly outpaced salary growth&#8230;<br />One of the effects on the locals will be the slow disappearance of in-house IT departments. Many businesses have in-house IT deparments covering pretty much all the spectrum of an IT operation: Oracle DBAs, JEE specialists, sys-admins, etc&#8230; Obviously, this cannot be supported anymore because of the migration of IT specialists towards better-paying jobs coming from foreign corporations. The local businesses are left with a problem: who will continue to carry out our in-house, incredibly customized and brittle IT operations?<br />In the problem lies the opportunity: an entrepreneur could create an IT company that implements these processes (preferrably using an open-architecture in order to accomodate customers as diverse as possible), have the businesses shed their IT departments (they cannot afford them anyway) and have them outsource their IT operations to its company. Outsourcing in the land of off-shoring seems contrarian, but it is one of the few viable options that a business can use in order to continue to automate its processes (book-keeping, customer relations, etc&#8230;).<br /><a href="http://cristi.blogsome.com/wp-admin/www.ofbiz.org/" target="_blank">Open-source</a> could play a very important role in the implementation of an outsourced environment, please remember that SE Europe is dirt poor. <a target="_blank" href="http://www.ossj.org">Operations Support Systems for Java</a> could answer some questions about an open architecture for creating very diverse and customized implementations of various business processes.<br />Opportunity lays with providing IT services to home-grown businesses as well as to the off-shoring behemoths that are visiting the area.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/08/24/some-effects-of-it-outsourcing-in-romania/feed/</wfw:commentRss>
	</item>
		<item>
		<title>IT in South-Eastern Europe</title>
		<link>http://cristi.blogsome.com/2006/08/24/it-in-se-europe/</link>
		<comments>http://cristi.blogsome.com/2006/08/24/it-in-se-europe/#comments</comments>
		<pubDate>Thu, 24 Aug 2006 17:11:41 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>IT in SE Europe</category>
		<guid>http://cristi.blogsome.com/2006/08/24/it-in-se-europe/</guid>
		<description><![CDATA[	I decided to create this category in order to keep up with the latest developments in that part of the world. I happen to call Romania my home country and I am interested in what happens over there, IT-wise or otherwise.

]]></description>
			<content:encoded><![CDATA[	<p>I decided to create this category in order to keep up with the latest developments in that part of the world. I happen to call Romania my home country and I am interested in what happens over there, IT-wise or otherwise.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/08/24/it-in-se-europe/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Service Data Objects</title>
		<link>http://cristi.blogsome.com/2006/08/20/service-data-objects/</link>
		<comments>http://cristi.blogsome.com/2006/08/20/service-data-objects/#comments</comments>
		<pubDate>Sun, 20 Aug 2006 22:35:15 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/08/20/service-data-objects/</guid>
		<description><![CDATA[	I have been reading the specs for the Service Data Objects (here and  here) a bit puzzled. The scope of the spec is daunting: &quot;You need to know only one API, the SDO API, which lets you work with data from multiple data sources, including relational databases, entity EJB components, XML pages, Web services, [...]]]></description>
			<content:encoded><![CDATA[	<p>I have been reading the specs for the Service Data Objects (<a href="http://dev2dev.bea.com/pub/a/2005/11/sdo.html" target="_blank">here</a> and  <a href="http://www-128.ibm.com/developerworks/java/library/j-sdo/" target="_blank">here</a>) a bit puzzled. The scope of the spec is daunting: &quot;You need to know only one API, the SDO API, which lets you work with data from multiple data sources, including relational databases, entity EJB components, XML pages, Web services, the Java Connector Architecture, JavaServer Pages pages, and more.&quot;&nbsp;One&nbsp;<a target="_blank" href="http://cristi.blogsome.com/wp-admin/images/oneRing.jpeg">API</a>&nbsp;to&nbsp;rule&nbsp;them&nbsp;all. All laughing aside I really do not understand the effort: don&#8217;t we already have JCA, JDO and JPA? Who needs another persistence API? Who needs this persistence API to be platform-agnostic, so that your JEE app can use a .Net app as data repository? <br />  The only interesting thing about it is the disconnected data graph, but I think you could abstract this behavior in JDO or in a DAO.  One thing I find odd about this implementation of a disconnected data graph is the fact that it comes with a locking strategy built in (namely optimistic-locking) when it would have made sense to be able to specify this declaratively or at least provide for ways to plug in your own data layer. If you have 2 sales reps working remotely on the same purchase order you should provide for collision detection&nbsp;or&nbsp;resolution if one tries to override the other&#8217;s order when it re-commits it.<br />What I find the worst in this spec is granularity of access between 2 applications tied together thru SDO. SDO&#8217;s purpose is to abstract the data layer to the level that you can plug in any data source, including another application. This in turn means that an application has access to another application&#8217;s data layer. Access to an external application data layer is a very fine grained access to another application, which is a big no-no. Think just about the amount of coupling that you create between 2 applications, or services if we want to use the buzzword du jour. Access between applications should be coarse-grained, not fine-grained. An application should publish its coarse-grained behavior (which should not be prone to change) not its data layer. A data layer that gets published and used by external applications will evolve with great difficulty because the dependencies involving it are enterprise-wide and&nbsp;not application-wide.<br />SDO appears as the data&nbsp;layer of a client-server application in heteregenous environment, however I am skeptical about how useful or how needed it is. You could say that it is tied to the re-emergence of the rich client, but I am neither sure that this rich client is really needed nor that it needs these capabilities.&nbsp; <br />I don&#8217;t know. The more I read about it, the less I like it. I&#8217;ll be watching it with interest, but I am betting against it. The main reason for  betting against it is that the effort for implementing SDO is huge (implementing the Data Mediator and the Data Graph in a heterogeneous environment is not trivial at all) while the benefits really modest. I would be surprised if it achieves any penetration in the enterprise space.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/08/20/service-data-objects/feed/</wfw:commentRss>
	</item>
		<item>
		<title>C programming is not OOP</title>
		<link>http://cristi.blogsome.com/2006/08/16/c-programming-is-not-oop/</link>
		<comments>http://cristi.blogsome.com/2006/08/16/c-programming-is-not-oop/#comments</comments>
		<pubDate>Wed, 16 Aug 2006 19:37:50 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/08/16/c-programming-is-not-oop/</guid>
		<description><![CDATA[	You are probably familiar to the chorus of C programmers saying &quot;We were doing OOP in C and we were doing a good job of it&quot;, if you are not here is an article about how to program in C using OOP concepts. The article addresses only encapsulation, inheritance and polymorphism are left to better-suited [...]]]></description>
			<content:encoded><![CDATA[	<p>You are probably familiar to the chorus of C programmers saying &quot;We were doing OOP in C and we were doing a good job of it&quot;, if you are not <a href="http://www.accu.org/acornsig/public/articles/oop_c.html" target="_blank">here</a> is an article about how to program in C using OOP concepts. The article addresses only encapsulation, inheritance and polymorphism are left to better-suited languages like Smalltalk.<br />They probably did use some OOP constructs in C. However, what they were doing was a process which could not scale. The object-oriented C that was produced was a twisted mangle of code that had a pretty high entry barrier: it was very complex and, I would assume, poorly documented. I assume that it was poorly documented because it was some sort of a hack which was known only among a small group of luminaries at a time when documentation was not considered crucial to the development process. As I said, this process could not scale, it is obvious. Implementing it across a large developer base would have required error-proof coding practices, it would have required strict enforcementes of these practices, and this would have been very costly. At the end of it the developer would have been turned into a human compiler who would have spent most of its time making sure that is procedural code was also object-oriented. The sheer complexity of this task would have prevented mass adoption and ultimately stop the &quot;object-oriented&quot; C&#8217;s growth: how could you have implemented more exotic uses of OOP if you had to constantly juggle functions passed as pointers, crazy typedefs and so on? Another roadblock to its success would have been the various conflicts that would have emerged between various groups if this object-oriented C was successful. Various OOP frameworks would have emerged each with its vocal set of fans and dissenters.<br />Then Bjarne Stroustrup came along with C++. C++ put the house in order and formalized the language to the extent that development could scale meaningfully. The OOP hack known among 5-10 programmers in a team was suddenly released to the world at large. The workforce could adapt to a standard that was not going to change according to the moods of some gurus. This was a process that could scale and that scaled very well: dozens of thousands of developers used C++ for over a decade developing very complex systems. <br />The group claiming that they were developing in &quot;object-oriented&quot; C suffer from seeing the world thru glasses tinted according to their beliefs. I get the same feeling anytime I hear people abusing the buzzword <em>du jour</em>: &quot;We were doing SOA for years&quot;. Not really, sending messages over a CORBA-talking pipe is not SOA.</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/08/16/c-programming-is-not-oop/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Various uses of RSS</title>
		<link>http://cristi.blogsome.com/2006/08/13/various-uses-of-rss/</link>
		<comments>http://cristi.blogsome.com/2006/08/13/various-uses-of-rss/#comments</comments>
		<pubDate>Sun, 13 Aug 2006 20:31:55 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/08/13/various-uses-of-rss/</guid>
		<description><![CDATA[	RSS, or Really Simple Syndication or Rich Site Summary, is a popular broadcasting protocol. A collection of items is made available to outside parties by packaging a digest of it and releasing it. The outside parties can determine what items have been added to the feed, which ones were updated, etc&#8230; The digest also provides [...]]]></description>
			<content:encoded><![CDATA[	<p>RSS, or Really Simple Syndication or Rich Site Summary, is a popular broadcasting protocol. A collection of items is made available to outside parties by packaging a digest of it and releasing it. The outside parties can determine what items have been added to the feed, which ones were updated, etc&#8230; The digest also provides pointers toward the location of the items. <br />  RSS is pretty popular among the DIY crowd which uses it mostly for keeping in synch with the blogs and sites it follows. Various sites, such as  <a href="http://rojo.com" target="_blank">rojo.com</a>, are using it under the hood for enabling users to keep in touch with their blogs. It is creeping into browsers and since IE 7 will have an RSS reader it is a safe bet that this technology is becoming mainstream. I find it interesting that it is becoming mainstream because this is a mindset change: rather than looking for information on the web you wait for this info to be pushed to you. Anyway, I didn&#8217;t intend to talk about social changes in this entry. </p>
	<p>I am more interested in RSS&#8217;s behavior and the way you could apply to various problems. <br /> One of the first uses would be to use RSS for broadcasting events in a group. Let&#8217;s say that you are a MySpace user and want to send a message to a group of people. MySpace could broadcast the message to your group by using RSS: each group member would have access to the group&#8217;s feed and any member could write to this feed. The result would be that each member could send a message which is guaranteed to be received by the rest of the group as long as the RSS server is up. Setting&nbsp;up this messaging infrastructure in a web application could be as easy as getting an RSS AJAX client and mapping it to the appropriate feed.<br />Let&#8217;s go to some exotic uses of RSS. The fact that RSS is a platform-agnostic broadcasting protocol means that it could be used for managing the interactions between various services in an SOA environment. To go back to the <a href="http://cristi.blogsome.com/2006/07/24/soa-and-aop/" target="_blank">tax example</a>: you have to apply a service (taxation) across a wide array of applications deployed on different platforms in a financial institution. You could have each of these application broadcast events (such as a stock have been traded, a commodity has been bought or sold, etc&#8230;) in an RSS feed and the tax program would listen to all these events and take appropriate action. The messaging infrastructure would be pretty simple to implement on both sides, I assume that there are quite a few clients written for various platforms. <br /> You could use it for pushing deltas in a cluster if guaranteed delivery is not mandatory. A company could consolidate its messaging infrastructure using RSS: the email client would be replaced with an RSS client that is mapped to a specific feed, various groupware software could work off RSS feeds. </p>
	<p>Various client-server interaction could be implemented easily with RSS: I wrote a desktop application that had to connect to a server and get the latest updates for catalogs, accounts, etc&#8230; This could have been done very easily using RSS. The changes in a catalog would have been published in an RSS feed and the client would have just had to connect to this feed and get its updates. Gone is the proprietary protocol which cost me a few nights, instead you get a tried, tested and true RSS client and plug it in your application. <br /> An anti-virus or a patch manager could get a list of the latest virus definitions or patches and their location in an RSS feed and proceed with installation based on the information published in the feed.</p>
	<p>I don&#8217;t want to be misunderstood. I am not suggesting to gut out MOM and replace it with RSS, I&#8217;m suggesting to consider RSS when you need an infrastructure for passing messages with a certain reliability rather than build it in-house. You could have various parts of your application talking to each other literally in seconds. I hold the conviction that code-writing is an error-proce process which has to be minimized as much as possible. In order to do this we have to start thinking in processes, we have to look at various technologies in an open way, realize their potential and use it.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/08/13/various-uses-of-rss/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Working with JSF and ADF</title>
		<link>http://cristi.blogsome.com/2006/08/12/working-with-jsf-and-adf/</link>
		<comments>http://cristi.blogsome.com/2006/08/12/working-with-jsf-and-adf/#comments</comments>
		<pubDate>Sat, 12 Aug 2006 00:34:21 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/08/12/working-with-jsf-and-adf/</guid>
		<description><![CDATA[	I have been working with JSF and ADF for a while and I have to say that I am impressed. The level of abstraction is simply outstanding, I am waiting for an AJAX implementation that could map the relationships described in the web application and generate AJAX components. The navigation is very easy to implement [...]]]></description>
			<content:encoded><![CDATA[	<p>I have been working with JSF and ADF for a while and I have to say that I am impressed. The level of abstraction is simply outstanding, I am waiting for an AJAX implementation that could map the relationships described in the web application and generate AJAX components. The navigation is very easy to implement and understand once implemented. The relationships between components are crystal clear, you don&#8217;t have to go back to the struts-config file for each link or form, but rather you describe the relationships and delegate their implementation to the framework.<br />I am really impressed. I got used to see most of the good frameworks come out of open-source projects so I was surprised when I saw the very good job that Sun did with JSF. I didn&#8217;t expect web development to be abstracted and turned into event-based programming because the environment is so different, but it has been done and done very well.<br />Congratulations to Sun and Oracle for these great frameworks!
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/08/12/working-with-jsf-and-adf/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Spring 2.0 is released</title>
		<link>http://cristi.blogsome.com/2006/08/11/spring-20-is-released/</link>
		<comments>http://cristi.blogsome.com/2006/08/11/spring-20-is-released/#comments</comments>
		<pubDate>Fri, 11 Aug 2006 15:33:41 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/08/11/spring-20-is-released/</guid>
		<description><![CDATA[	Spring 2.0 has been released. Check out this great article about the integration of AspectJ into Spring 2.0 using annotations. The way Spring piggy-backs on various AspectJ services, such as information about an aspect, is simply delicious. I really liked the part about throwing the AspectJ compiler out of the application and still using AspectJ. [...]]]></description>
			<content:encoded><![CDATA[	<p>Spring 2.0 has been released. Check out this great <a href="http://www.infoq.com/articles/Simplifying-Enterprise-Apps" target="_blank">article</a> about the integration of AspectJ into Spring 2.0 using annotations. The way Spring piggy-backs on various AspectJ services, such as information about an aspect, is simply delicious. I really liked the part about throwing the AspectJ compiler out of the application and still using AspectJ. <br />Very good article and very good framework!</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/08/11/spring-20-is-released/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Object Linking and Embedding</title>
		<link>http://cristi.blogsome.com/2006/08/10/object-linking-and-embedding/</link>
		<comments>http://cristi.blogsome.com/2006/08/10/object-linking-and-embedding/#comments</comments>
		<pubDate>Thu, 10 Aug 2006 15:48:07 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
	<category>Favorites</category>
		<guid>http://cristi.blogsome.com/2006/08/10/object-linking-and-embedding/</guid>
		<description><![CDATA[	Anyone remembers this? Before .Net, before ActiveX, before COM there was OLE, the way that various software products could communicate one with another. The idea was that a software product would delegate various tasks to another product which was better equiped for it.I remembered it a few months ago when I went to a head-hunting [...]]]></description>
			<content:encoded><![CDATA[	<p>Anyone remembers this? Before .Net, before ActiveX, before COM there was OLE, the way that various software products could communicate one with another. The idea was that a software product would delegate various tasks to another product which was better equiped for it.<br />I remembered it a few months ago when I went to a head-hunting agency and I watched the secretary punching in my information. She was jumping from Word to Excel, back to Word, back to a different Excel file, etc&#8230; Very, very ineffiecient. I could not help having the feeling that she was actually taking on the role of a software program, that all the repetitive jumping from one file to another could have been analyzed as a business process (it is a business process after all), abstracted and implemented.<br />Back in the days when desktop computing ruled one way to implement this business process would have been by using OLE. You would have basically created a shrinkwrapped product (anyone remembers this one too?) that would have delegated thru OLE various tasks to products that did them best: Word would have taken care of CV editing , Excel would have taken care of managing the client information, Access would have managed the CV repository, etc&#8230; Your product would have concerned itself with the management of the tasks of a head-hunting agency. Your product would basically take different existing software products and put them together in a meaningful way, effectively implementing a business process. This approach would have been better than creating proprietary software for all the parties: the developer would not have had to be concerned with creating a good text editor and the customer would not have had to retrain its staff because they were already familiar with the various pieces that make up the product. If your product was well designed it could have been able to plug different products (let&#8217;s say different word processors) in your business process so that the secretary would continue to use WordPerfect instead of Word if she was proficient in it. Your software product would have been tailored to your customer and its business process.<br />Unfortunately, this type of desktop mashup never occured. More and more proprietary software was churned out at great costs for everybody involved. Small customers continued the mundane practice of copy and paste (in some cases to this day) while big customers shelled out big bucks for `solutions` which were sent to the recycle bin the moment the web revolution took place.<br />Hopefully, the current `mashup` mindset will put an end to developing huge elephants and make developers concentrate on processes rather than on infrastructure. Anyway, it is more fun.</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/08/10/object-linking-and-embedding/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Interacting with users</title>
		<link>http://cristi.blogsome.com/2006/08/01/interacting-with-users/</link>
		<comments>http://cristi.blogsome.com/2006/08/01/interacting-with-users/#comments</comments>
		<pubDate>Tue, 01 Aug 2006 14:34:44 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
	<category>Favorites</category>
		<guid>http://cristi.blogsome.com/2006/08/01/interacting-with-users/</guid>
		<description><![CDATA[	I was thinking about the &quot;Keep It Short and Simple&quot; mantra applied to UI for desktop products and I was wondering how you could build a large desktop application and have your users manage a large array of components very different in functionality one from another. I was thinking mostly about applications such as Netscape [...]]]></description>
			<content:encoded><![CDATA[	<p>I was thinking about the &quot;Keep It Short and Simple&quot; mantra applied to UI for desktop products and I was wondering how you could build a large desktop application and have your users manage a large array of components very different in functionality one from another. I was thinking mostly about applications such as Netscape 7 (anyone using it anymore?) where the user has to choose between a large number of components: stock quotes client, email client, RSS feeds client, AIM and whatever other AOL software is bundled in Netscape.<br />So far the approach for managing large number of components was to basically swamp the user in an ocean of checkboxes, radio buttons, dropdowns, etc&#8230; which they would have to click in order to get to the component that they need. Microsoft Word is the perfect example of it: at an UI work-shop I saw Word with all its menus expanded and the text area was shrunk down to the dimensions of a stamp. This approach obviously doesn&#8217;t scale: there is only so much room on your user&#8217;s computer screen and the user&#8217;s&nbsp; attention span and patience can stretch only so much.<br />A far better approach would be to have the user discover what it needs from what you have to offer and make the management of those components easy for the user. I am thinking that a product should have a component search capability that would let the user search for its components. A component registry with search capabilities would probably solve this. Also, the user could tag various components and search components tags in order to find what it needs. Basically, every known form of collecting and searching for information should be used for letting your user manage the components easily. Whether collecting and querying this information is done locally or remotely is, obviously, particular to the application being developed and its operational environment.<br />The big number of components that your application would have to manage would imply that your application should exhibit a certain degree of plugability: the application&#8217;s components should interact with one another seamlessly and should be set-up very quickly. Various plugability contracts should be set-up: a component should be able to be demo-ed (without a demo a user would not be able to decide quickly if it needs the component or not), installed, un-installed, re-installed, loaded into the application at runtime, discarded/hidden at runtime, etc&#8230;<br />The product would then become a platform on which various plugins are set-up and assembled together, very similar to the Eclipse IDE. This leads me to say the following: one way to see how the interaction between different UI components will be implemented in the future would be to check out Eclipse&#8217;s source code. Eclipse has a certain level of UI plugability and it has the lowest barrier of entry for a developer: it is open-source.<br />Hey, if your UI requirements match Eclipse&#8217;s plug-and-play skeleton you could even use its skeleton for your application (*). The skeleton of the Eclipse IDE would become the free or low-cost infrastructure that you would use for setting up your application.</p>
	<p>P.S. Along with the Web 2.0 buzz some sort of a revival in UI is taking place. It looks like interacting with users is being thought about again. Martin Fowler&#8217;s <a href="http://martinfowler.com/eaaDev/uiArchs.html" target="_blank">GUI Architectures</a> is worth checking out.<br />P.P.S. When writing this I kept thinking about the launch of Google Talk and the spartan user interface it had at the time. I was wondering how would an user of this product find its various services if the interface was kept simple.<br />P3.S. This article is concerned with UI management on desktop applications. I think these UI management requirements apply to web-based products but the implementation would be very different. A web application would be transformed into a portal that is easily to be managed by the user. For example, I would like to go to Yahoo&#8217;s page and have in the upper right corner some stock quotes, next to them press releases or news about those stocks and in the middle of the page general news. When I&#8217;m planning my vacation I would like the middle of the page to be a list of various trip packages rather that the news I usually have. I would like to put up these components and shut them down very easily.</p>
	<p>* As far as I know Eclipse&#8217;s plug-and-play architecture is intrusive, you have to implement various interfaces, etc&#8230; Using Eclipse as a skeleton for building desktop apps would couple your application strongly to Eclipse unless you abstract the interaction between your UI components and create a bridge which will be used for having Eclipse boot-strap your application&#8217;s UI. This way you could use other plugable UI frameworks, such as Firefox, for assembling your application&#8217;s UI. 
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/08/01/interacting-with-users/feed/</wfw:commentRss>
	</item>
		<item>
		<title>IT transformation</title>
		<link>http://cristi.blogsome.com/2006/07/28/it-transformation/</link>
		<comments>http://cristi.blogsome.com/2006/07/28/it-transformation/#comments</comments>
		<pubDate>Fri, 28 Jul 2006 17:23:15 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/07/28/it-transformation/</guid>
		<description><![CDATA[	I&#8217;m not the first person to write about the transformation of IT. It is pretty obvious when you look out there that you have today is not what you had 5 years ago, Microsoft, Oracle, IBM, HP, Apple, IT&#8217;s blue chips have changed dramatically. They are no longer pure tech-players: IBM moved into services, Microsoft [...]]]></description>
			<content:encoded><![CDATA[	<p>I&#8217;m not the first person to write about the transformation of IT. It is pretty obvious when you look out there that you have today is not what you had 5 years ago, Microsoft, Oracle, IBM, HP, Apple, IT&#8217;s blue chips have changed dramatically. They are no longer pure tech-players: IBM moved into services, Microsoft and Apple moved into entertainment, Oracle is moving into HR and retail, etc&#8230; Sun is one of the last pure-tech players and, sadly, has a lot of problems.<br />Commodization of software infrastructure is the common theme of this transformation. Databases, application servers, operating systems, various desktop programs, even <a href="http://opensparc.sunsource.net/nonav/index.html" target="_blank">computer chips design</a> or <a href="http://www.allthingsdistributed.com/2006/07/your_queues_are_ready.html" target="_blank">message-oriented-middleware infrastructure</a> are starting to cost absolutely nothing. Right now you can get a pretty good computer (hardware + OS + applications) for close to 500$. The big IT behemoths have sensed this for a while and are starting to try different other business models, their former businesses turning into money-losing propositions.<br />Today it looks like that you cannot expect anymore to make money handling information (storing, querying, sharing, securing, etc&#8230;) except in very small niches (such as semantic queries, NLP, etc&#8230;). Is what you do with this information that will be valuable. It is the knowledge to actually work with this information rather than handling it that will be valuable.<br />My opinion is that this shift is part of the transition to a <a target="_blank" href="http://en.wikipedia.org/wiki/Knowledge_economy">knowledge based economy</a>, an economy in which the knowledge that you own and that you work with is valuable and not the way you push bits from a hard-disk to the network and viceversa. The applications that Oracle, MS and IBM have are IT infrastructure and in a knowledge economy IT infrastructure doesn&#8217;t add much value because its functionality is simple (or has become/will become simple) and therefore unprofitable. IT infrastructure is becoming a commodity.</p>
	<p>In the words of late Peter Drucker: People tend to concentrate on the word &quot;Technology&quot; when faced with the term &quot;Information Technology&quot;. It is time to concentrate on &quot;Information&quot;.<br />It is time to do something with this information. Handling it has become a piece of cake.</p>
	<p>P.S. A lot of open source usually stands for developing infrastructure software; think about Sendmail, various web-servers, application servers, etc&#8230; So when you see that whole applications are getting open-sourced (think CMS, shopping carts, catalogs, CRM, etc&#8230;) it is a good bet that these applications are actually infrastructure, that they are the building blocks for something bigger and more valuable. It means that while previously you were supposed to work at a very low-level with database tables, triggers and Java code, from now on you may have to work with whole application stacks. Of course, not all development will be like this, someone will have to create these applications. But more and more of the work will consists of integrating these applications in order to create something of value.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/07/28/it-transformation/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Infrastructure, business logic and degrees of expression</title>
		<link>http://cristi.blogsome.com/2006/07/25/infrastructure-business-logic-and-degrees-of-expression/</link>
		<comments>http://cristi.blogsome.com/2006/07/25/infrastructure-business-logic-and-degrees-of-expression/#comments</comments>
		<pubDate>Tue, 25 Jul 2006 18:44:54 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/07/25/infrastructure-business-logic-and-degrees-of-expression/</guid>
		<description><![CDATA[	At one point I wrote a code-generator that was looking up the table description in an Oracle database, take a look at some configuration files and create a DAO for accessing that table. The DB was accessed thru straight JDBC and not thru an ORM framework. We basically had to generate 2 classes that were [...]]]></description>
			<content:encoded><![CDATA[	<p>At one point I wrote a code-generator that was looking up the table description in an Oracle database, take a look at some configuration files and create a DAO for accessing that table. The DB was accessed thru straight JDBC and not thru an ORM framework. We basically had to generate 2 classes that were supposed to be used by their clients: a POJO that was mapping to the table and could have some business logic methods and an access bean that would implement all the CRUD operations and could also have some business logic. <br />The solution was to generate 4 files: 2 files for the POJO and 2 files for the access bean. The POJO would have a super-class that was generated all the time by the tool and contained the getters and setters for the POJO and a sub-class that would be generated only the first time and that would extend the super-class. The sub-class would contain business-logic methods. The same things were generated for the access bean: a super-class that implemented the CRUD operations and get generated all the time and a sub-class that would contain business-logic methods and would be generated only the first time. Again, the sub-class would extend the super-class.<br />I was thinking about it and I came to the conclusion that what I basically did was to separate infrastructure (getters and setters, CRUD operations) from business logic. The infrastructure was implemented in the super-class and the sub-class was concerned only with business logic. The infrastructure could be generated and re-generated from various descriptors while the business logic could not be generated because it was too fine grained for it to be expressed in descriptors. <br />I think this is a good separation of concerns and one that would be beneficial to development if it is thought out carefully. I am not too crazy about code generators and in the above case we used it because we didn&#8217;t have a ORM framework at the time (this was pre-Hibernate and all that), but this separation is important and could be used beyond code-generation. You could use it to determine what components of an application are generic enough so that they can be either generated by a code generator or handled by a framework targeted exclusively at managing that component of the application. The rest of your application would be behavior so fine grained that it cannot be expressed in config files and is better expressed in business logic beans. <br />The difference between infrastructure and business logic is basically a difference in the degree of expression of various components in the application. Infrastructure has a very low degree of expression: it can be described in config files. Business logic, on the other side has a very high degree of expression, it needs to be coded.</p>
	<p>To give an example for the above ideas: let&#8217;s say that you have a client that connects to a web-service. One way to implement this would be to use a code-generator (such as the one supplied with Apache Axis) and generate the stubs that connect to this web-service. Well, it is possible that the web-service would change in the future. In order to adapt to this change easily you could generate the web-service connection classes in a super-class (that would implement the infrastructure) and create a sub-class that would be called from your application (that would implement the business-logic). Changes in the web-service would result in changes in the super-class (which is not used by your application) and would not require big refactoring on your application. <br />Once again, I am not a big fan of code-generation. I was using the above as an example of the benefits of separating infrastructure from business-logic. You could use this separation for implementing generic behavior in a <a target="_blank" href="http://c2.com/cgi/wiki?TemplateMethodPattern">Template</a> for example, but it is important to notice this separation and enforce it.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/07/25/infrastructure-business-logic-and-degrees-of-expression/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Punct</title>
		<link>http://cristi.blogsome.com/2006/07/24/punct/</link>
		<comments>http://cristi.blogsome.com/2006/07/24/punct/#comments</comments>
		<pubDate>Mon, 24 Jul 2006 15:36:46 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Personal</category>
		<guid>http://cristi.blogsome.com/2006/07/24/punct/</guid>
		<description><![CDATA[	Acest posting a fost sters de catre mine. 

]]></description>
			<content:encoded><![CDATA[	<p>Acest posting a fost sters de catre mine.<br /> 
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/07/24/punct/feed/</wfw:commentRss>
	</item>
		<item>
		<title>SOA and AOP</title>
		<link>http://cristi.blogsome.com/2006/07/24/soa-and-aop/</link>
		<comments>http://cristi.blogsome.com/2006/07/24/soa-and-aop/#comments</comments>
		<pubDate>Mon, 24 Jul 2006 02:32:24 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
	<category>Favorites</category>
		<guid>http://cristi.blogsome.com/2006/07/24/soa-and-aop/</guid>
		<description><![CDATA[	A while ago I wrote a post regarding the difference between SOA and CORBA. I saw this assertion on a few bulletin boards a few times and I felt I needed to write about it. Well, if SOA is different from CORBA then what would it be similar to?Let&#8217;s say that you have an enterprise-wide [...]]]></description>
			<content:encoded><![CDATA[	<p>A while ago I wrote a post regarding the difference between SOA and CORBA. I saw this assertion on a few bulletin boards a few times and I felt I needed to write about it. Well, if SOA is different from CORBA then what would it be similar to?<br />Let&#8217;s say that you have an enterprise-wide service. Let&#8217;s say that a financial institution needs to apply taxes to every financial operation it makes. The enterprise-wide service would be the tax program and the actors would be the software programs that trade currencies, stocks, bonds, accrue interest, etc&#8230; Every trade that gets made has to get taxed so your tax service has to interact with all pretty much all the software in the enterprise. <br />  Now suppose that you have this gigantic application that a financial institution uses for making stock trades, buying bonds, applying interest to accounts, etc&#8230; Obviously all the financial operations must be taxed. The easiest way to implement tax across all the financial operations would be thru AOP. You would define a tax cross-cutting concern and bind it to the appropriate methods. <br />The cross-cutting concern would exhibit the same relationship to the application as the SOA service exhibits to the enterprise: they are identical pieces of functionality that apply to very different actors. The cross-cutting concern applies to various methods in an applications, the SOA service applies to various silos in an enterprise information system. From a functional point of view a cross-cutting concern is very much like a service. There is a huge difference in scope between the two concepts, but at the bottom of it they are very similar.</p>
	<p>One more thing. SOA is considered the domain of business analysts, the business analyst driving most of the interactions between different services and applications in an enterprise&nbsp;information system. Given the similarities between SOA and AOP it would seem that AOP would be best effective when the interactions between aspects (or services as they are known in SOA) and methods (or applications as they are known in SOA) are managed by business analysts rather than developers&#8230; <br />  Good food for thought&#8230;</p>
	<p><font color="#ff9900">Later edit:</font> I understand that currently the advices used mostly in AOP are concerned with infrastructure issues (concurrency, security, transactions, etc&#8230;). However, AOP leaves the door open to assembling applications so that you can bind a piece of functionality to another piece of functionality like the above example with taxes. In this case the usual pointcut semantics will probably not suffice (unless you use annotations) because the advices will not be applied to objects which are related by infrastructure issues (such as persistence or concurrency) and are grouped together by namespaces (such as package names), but rather to objects which are related by business-logic issues (such as manipulating funds). This grouping is probably harder to translate into pointcuts.<br />Anyway, I think the interesting development in AOP lies with applying advices because of business-logic affinity rather than because of infrastructure needs.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/07/24/soa-and-aop/feed/</wfw:commentRss>
	</item>
		<item>
		<title>AOP and the division of labor</title>
		<link>http://cristi.blogsome.com/2006/07/17/aop-and-the-division-of-labor/</link>
		<comments>http://cristi.blogsome.com/2006/07/17/aop-and-the-division-of-labor/#comments</comments>
		<pubDate>Mon, 17 Jul 2006 13:45:25 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
	<category>Favorites</category>
		<guid>http://cristi.blogsome.com/2006/07/17/aop-and-the-division-of-labor/</guid>
		<description><![CDATA[	I am looking at AOP as an example of applying the theory of Division of Labor to development. With AOP it is possible to have different types of professionals working on the same project at the same time. In theory a security expert would secure the application or even better a security expert in one [...]]]></description>
			<content:encoded><![CDATA[	<p>I am looking at AOP as an example of applying the theory of <a href="http://en.wikipedia.org/wiki/Division_of_labor" target="_blank">Division of Labor</a> to development. With AOP it is possible to have different types of professionals working on the same project at the same time. <br />In theory a security expert would secure the application or even better a security expert in one domain would secure one part of the application, while a security expert in another domain would secure another part of the application, a transaction expert would trace transaction boundaries within the application, a concurrency engineer would serialize calls to a state repository in order to implement concurrent access, etc&#8230; I say this is possible in theory because managing this interaction takes some good managerial skills and processes, processes with which I am not familiar for the time being. <br />The division of labor is a process that scales very well in diversity and ultimately in complexity. Various tasks are assigned to people trained specifically for them and are executed in an efficient manner. At the end of it the process has managed to put together a product which is quite complex and has received input for people of various backgrounds. This could be very well the solution to managing complex interactions when developing software: dividing them into tasks which can be performed individually by experts and assembling them at the end. Just like when you have a coffee you don&#8217;t have to worry about growing a coffee tree, harvesting the beans and roasting them because someone else did that for you when you are writing an application you should not concern yourself with securing it or implemeting failover thru exception handling because someone else would do this as well. <br />The division of labor pulled the human race out of the Middle Ages and into the industrial age. Hopefully AOP will be able to pull large, complex projects out of the quagmire of pointless meetings, weekly merges, versions, etc&#8230; and into functional, deployed applications.</p>
	<p>P.S. I wrote this post on the most horrible coffee I had in a long time. If it had an effect on the post itself I am sorry.<br />P.P.S. Separation of concerns resembles the division of labor as well.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/07/17/aop-and-the-division-of-labor/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Business-driven APIs</title>
		<link>http://cristi.blogsome.com/2006/07/13/business-driven-apis/</link>
		<comments>http://cristi.blogsome.com/2006/07/13/business-driven-apis/#comments</comments>
		<pubDate>Thu, 13 Jul 2006 19:12:34 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/07/13/business-driven-apis/</guid>
		<description><![CDATA[	A new kind of APIs is emerging: the APIs written by businesses rather than by IT corporations. Some examples would be Operations Support Systems for Java and Transaction Workflow Innovation Standards. Various corporations are collaborating and setting up standards regarding the processes that they have to manage, and I think this is the right way [...]]]></description>
			<content:encoded><![CDATA[	<p>A new kind of APIs is emerging: the APIs written by businesses rather than by IT corporations. Some examples would be <a target="_blank" href="http://www.ossj.org/index.shtml">Operations Support Systems for Java</a> and <a target="_blank" href="http://www.twiststandards.org/">Transaction Workflow Innovation Standards</a>. Various corporations are collaborating and setting up standards regarding the processes that they have to manage, and I think this is the right way to go about it, after all they know what they are talking about, they have decades of experience in their business, they have some ideas about where it is going. They know what interactions are performed between different IT systems in their organization. They are the ones in the best position to determine how their processes should be abstracted.<br />Sun, IBM, BEA, Oracle, etc&#8230; should concern themselves with the plumbing of the IT infrastructure rather than with defining how a business process should occur and interact with other processes. They should avoid business-oriented APIs and delegate this to the businesses that have been running this process. As far as JCP is involved they should be inviting parties outside the IT landscape for supervising business-oriented JSRs and defining the main business rules. <a href="http://jcp.org/en/jsr/detail?id=144" target="_blank">JSR 144</a> is a fine example of this approach: take a look at its expert group and count the organizations which are not involved in IT. <br />As far as the developer is concerned: today your average developer is expected to know a few infrastructure APIs: the Servlet spec, Struts, Spring, maybe EJBs&#8230; I wouldn&#8217;t wonder if in the future a developer working for a telco would be required to know telco-specific, business-driven APIs in order for it to be more productive. In other words the developer would be expected to know the business rules which this API is formalizing. Another step in bridging the gap between a business analyst and a developer.</p>
	<p>P.S. The involvement of businesses in the creation and management of business-oriented JSRs benefits the IT corporations backing JEE a lot. The effort made by a business thru-out this process will translate in some form of a commitment to the JEE platform which would benefit the IT corporations involved and ultimately JEE. The JCP process could (and should) act as a communication channel between big-business and JEE.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/07/13/business-driven-apis/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Manele, anti-manele, Mozart</title>
		<link>http://cristi.blogsome.com/2006/07/10/manele-anti-manele-mozart/</link>
		<comments>http://cristi.blogsome.com/2006/07/10/manele-anti-manele-mozart/#comments</comments>
		<pubDate>Mon, 10 Jul 2006 20:45:32 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Personal</category>
		<guid>http://cristi.blogsome.com/2006/07/10/manele-anti-manele-mozart/</guid>
		<description><![CDATA[	Si aceasta chestia a sarit din blog degeaba.

]]></description>
			<content:encoded><![CDATA[	<p>Si aceasta chestia a sarit din blog degeaba.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/07/10/manele-anti-manele-mozart/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Romgleza</title>
		<link>http://cristi.blogsome.com/2006/06/28/romgleza/</link>
		<comments>http://cristi.blogsome.com/2006/06/28/romgleza/#comments</comments>
		<pubDate>Wed, 28 Jun 2006 21:11:35 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Personal</category>
		<guid>http://cristi.blogsome.com/2006/06/28/romgleza/</guid>
		<description><![CDATA[	Inca o chestie care dispare&#8230;

]]></description>
			<content:encoded><![CDATA[	<p>Inca o chestie care dispare&#8230;
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/06/28/romgleza/feed/</wfw:commentRss>
	</item>
		<item>
		<title>SOA is not CORBA</title>
		<link>http://cristi.blogsome.com/2006/06/26/soa-is-not-corba/</link>
		<comments>http://cristi.blogsome.com/2006/06/26/soa-is-not-corba/#comments</comments>
		<pubDate>Mon, 26 Jun 2006 14:57:22 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/06/26/soa-is-not-corba/</guid>
		<description><![CDATA[	Recently I started perusing literature concerning SOA&nbsp; - Service Oriented Architecture, the latest buzzword in the IT industry. As any other new concept it is pretty vague and in the process of getting defined. I find it very interesting and I read on it heavily.I cannot consider myself an expert in the domain mainly because [...]]]></description>
			<content:encoded><![CDATA[	<p>Recently I started perusing literature concerning SOA&nbsp; - Service Oriented Architecture, the latest buzzword in the IT industry. As any other new concept it is pretty vague and in the process of getting defined. I find it very interesting and I read on it heavily.<br />I cannot consider myself an expert in the domain mainly because the concept is pretty new and it applies to enterprise-wide concerns; in order to get hands-on experience you need to work close to the board-room level. However, I came across a few misconceptions that I think I can straigthen out. One of them is that SOA is the new CORBA, a particular type of CORBA that runs on XML, some CORBA on web-services, in order to connect to .NET systems.<br />Well, this is wrong. SOA is not a new CORBA and these would be a few reasons:<br />1) SOA is about empowering business users. SOA is as business-like as IT gets. CORBA is/was for techies, SOA is for business analysts, policy-makers and domain experts.<br />2) Some technological advances have occured since CORBA was released, one of them is the ESB. CORBA was essentially a point-to-point technology while ESB is all about diffussing information to different partners. CORBA was never taken above simple relationships.<br />3) SOA is partly about managing complex relationships between different actors in an enterprise, CORBA is all about simple relationships (point-to-point relationships).<br />4) SOA is much more in tune with the environment outside the server farm, CORBA is in the server farm. <br />5) SOA is concerned with business evolution, adaptability to a changing environment, efficient resource allocation, CORBA is concerned with implementing a pipe over which messages are streamed.</p>
	<p>CORBA is probably the first communication protocol that noticed the&nbsp; variety of systems that were trying to communicate with each other and presented a solution to this problem. SOA is concerned at its foundation with this problem, but rather than solving it it assumes it is solved and moves on to determine what should happen once the systems do start communicating one with another.</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/06/26/soa-is-not-corba/feed/</wfw:commentRss>
	</item>
		<item>
		<title>JBoss - professional open source</title>
		<link>http://cristi.blogsome.com/2006/06/19/jboss-professional-open-source/</link>
		<comments>http://cristi.blogsome.com/2006/06/19/jboss-professional-open-source/#comments</comments>
		<pubDate>Mon, 19 Jun 2006 16:07:51 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/06/19/jboss-professional-open-source/</guid>
		<description><![CDATA[	JBoss is a very unusual open source project. It is an open source project that behaves more and more like a corporation. It doesn&#8217;t shy away from money, in fact it sold itself to Red Hat for a lot of money, the price tag being somewhere in the vicinity of 400 million dollars.  What [...]]]></description>
			<content:encoded><![CDATA[	<p>JBoss is a very unusual open source project. It is an open source project that behaves more and more like a corporation. It doesn&#8217;t shy away from money, in fact it sold itself to Red Hat for a lot of money, the price tag being somewhere in the vicinity of 400 million dollars. <br /> What makes it look more like a corporation than a traditional open source project is the lack of organic growth. Once it secured the initial VC funding JBoss has gone on a shopping spree. It has purchased Hibernate, Drools, Arjuna and today Rosseta ESB from Aviva. The vertical integration of its stack is also another facet of the corporate mindset that directs JBoss. JBoss, and Red Hat along the way, seems concerned with the creation of an open-source stack that will supposedly provide their customers with a one-time stop for their enterprise computing needs, they only fall short of a database.<br /> Lack of organic growth, vertical integration, VC funding, etc&#8230;, well these are concepts you come across reading Wall Street Journal, not your typical open source online-forum/wiki. JBoss is a corporation (actually, it has been one for a long time) and is very much acting like one, much to the dismay of a large number of developers. This corporate behavior runs counter to what most people think about when thinking about open-source and led to some virulent &ldquo;Boycott JBoss&rdquo; campaings. <br /> However, one thing that I find strange the way JBoss Inc. chooses to grow its business is the fact that they are growing a huge stack and charging for training and services (to a certain degree). JBoss seems to be trying to make money by managing the behemoth that you downloaded free of charge, installed and ran into problems with. <br /> This runs counter to the current development mindset where you develop small pieces of software agnostic of the operational environment, you create contracts for plugging them into the operational environment and then adapt the software to the contracts you have created. The world is moving away from large elephants to small and highly adaptive software. JBoss is moving towards the large elephant. It is probably moving from mom and pop IT shops to Fortune 500 companies. Talk about&nbsp;a corporate mindset&hellip;</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/06/19/jboss-professional-open-source/feed/</wfw:commentRss>
	</item>
		<item>
		<title>DOM vs SAX</title>
		<link>http://cristi.blogsome.com/2006/06/15/dom-vs-sax/</link>
		<comments>http://cristi.blogsome.com/2006/06/15/dom-vs-sax/#comments</comments>
		<pubDate>Thu, 15 Jun 2006 18:49:36 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
	<category>Favorites</category>
		<guid>http://cristi.blogsome.com/2006/06/15/dom-vs-sax/</guid>
		<description><![CDATA[	I was in an interview with another BU when the question popped up: &quot;What are the differences between DOM and SAX XML parsers and when would you use one or the other?&quot;. I started with a brief description of DOM (tree-like representation of an XML document that loads an entire document upfront) and SAX (slim, [...]]]></description>
			<content:encoded><![CDATA[	<p>I was in an interview with another BU when the question popped up: &quot;What are the differences between DOM and SAX XML parsers and when would you use one or the other?&quot;. I started with a brief description of DOM (tree-like representation of an XML document that loads an entire document upfront) and SAX (slim, event-based XML parser). The answer that I gave was that I would choose DOM for XML documents that are complex and prone to change while I would favor SAX for simple documents which are not prone to change (memory was not an issue). The reason that I gave this answer was that trying to keep track of where you are in a complex document while SAX events are firing is pretty complicated and that once you created a SAX event handler that maps onto a document format is pretty hard to change it in order to map it onto a new format. The team interviewing me agreed and passed to another question.<br />Now that I&#8217;m thinking about it, the answer was wrong. The right answer would have been that I would choose an object-to-XML mapper that would translate a XML document into objects and viceversa and that I would delegate all processing and resource management to the OX mapper. The days when we would have to deal with DOM or SAX are over for the most of us, we should be working with what are comfortable with, that is with objects and not DOM Nodes or SAX events.</p>
	<p><font color="#ff9900">Later edit:</font> SAX is a parser really close to the metal begging to have some extension layered on top of it in order to make it more developer-friendly. The fact that no such extension exists or is not popular (I, for one, do not know of any) leads me to believe that SAX is not so widely used. Probably the reasons for which it was conceived (small memory footprint being the most important one) are not important anymore or the XML documents that are usually manipulated do not require a lot of resources.<br /><font color="#ff9900">Even later edit: </font>It looks like the size of the XML documents and the number of formats <a target="_blank" href="http://www.infoq.com/news/XML-Overload">grow pretty rapidly</a> as SOA matures. A SAX-based OX mapper would not be a bad idea after all&#8230; </p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/06/15/dom-vs-sax/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Operatiunea Gramofonul</title>
		<link>http://cristi.blogsome.com/2006/06/10/operatiunea-gramofonul/</link>
		<comments>http://cristi.blogsome.com/2006/06/10/operatiunea-gramofonul/#comments</comments>
		<pubDate>Sat, 10 Jun 2006 11:41:19 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Personal</category>
		<guid>http://cristi.blogsome.com/2006/06/10/operatiunea-gramofonul/</guid>
		<description><![CDATA[	S-a dus pe conducta.

]]></description>
			<content:encoded><![CDATA[	<p>S-a dus pe conducta.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/06/10/operatiunea-gramofonul/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Away</title>
		<link>http://cristi.blogsome.com/2006/06/06/away/</link>
		<comments>http://cristi.blogsome.com/2006/06/06/away/#comments</comments>
		<pubDate>Tue, 06 Jun 2006 18:44:48 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Personal</category>
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/06/06/away/</guid>
		<description><![CDATA[	I&#8217;ve been away from my blog for a while. I am in the process of getting a SCEA certification and this kept me pretty busy.Now I&#8217;m back, ready for writing more about enteprise computing.
]]></description>
			<content:encoded><![CDATA[	<p>I&#8217;ve been away from my blog for a while. I am in the process of getting a SCEA certification and this kept me pretty busy.<br />Now I&#8217;m back, ready for writing more about enteprise computing.</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/06/06/away/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Going thru the EJB spec</title>
		<link>http://cristi.blogsome.com/2006/06/06/going-thru-the-ejb-spec/</link>
		<comments>http://cristi.blogsome.com/2006/06/06/going-thru-the-ejb-spec/#comments</comments>
		<pubDate>Tue, 06 Jun 2006 18:41:03 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/06/06/going-thru-the-ejb-spec/</guid>
		<description><![CDATA[	This is obviously not the first time someone points out the deficiencies in the EJB spec but I just could not help it. 
	I have started my SCEA certification process and for the first exam I had to revisit the EJB architecture. I read EJB 2&rsquo;s spec and at the end I was left in [...]]]></description>
			<content:encoded><![CDATA[	<p class="MsoNormal">This is obviously not the first time someone points out the deficiencies in the EJB spec but I just could not help it. </p>
	<p class="MsoNormal">I have started my SCEA certification process and for the first exam I had to revisit the EJB architecture. I read EJB 2&rsquo;s spec and at the end I was left in wonder. I could not believe that a corporation like SUN came out with such a spec. </p>
	<p class="MsoNormal">The first (huge) surprise was the fact that there are interfaces that go against their contracts is a first (as far as I know) for SUN. For example, the <strong>MessageDrivenContext</strong> interface extends <strong>EJBContext</strong> and as a result it provides the MDB with access to its home. Except that an MDB has no access to a home since it is not referenced thru a home. Accessing the home thru a <strong>MessageDrivenContext</strong> would throw a system exception. I was in shock when I read this. You just have to wonder, what other methods are invalid in what interfaces? An API should provide a bullet-proof contract with no room for &lsquo;buts&rsquo; or &lsquo;maybes&rsquo;. Well, this time SUN took a short-cut.</p>
Another thing that surprised me was the breadth of the spec. The spec tries to address quite a few issues: transactions, security, concurrency, timer services, distributed computing, persistence and resource management. Addressing all these issues is obviously not trivial, and in this case the end-result in this case is a hodge-podge of an architecture. SUN made quite a few assumptions about the applications that will be built using EJBs and hard-wired these assumptions into the spec.<br />For example, concurrency is addressed in the simplest manner: all calls to a session bean are serialized. You cannot isolate calls based on state that is shared between calls as you would want in order to create a better-performing architecture.<br />Resource management assumes that 10 years after the first JRE garbage collection is still a big problem in enterprise computing.<br />In the persistence area: requiring that some tasks are carried out by pooled beans and others by pooled or active beans seems more like a hack than serious design, I don&rsquo;t understand why persistence issues should be inter-twined with lifecycle management.</p>
	<p>One thing that attracts developers to the so-called light frameworks is the fact that these frameworks do not make any assumptions about the applications getting built with them. Instead, they provide a way to assemble applications and bind behavior to various parts of an applications. They let you integrate outside components more easily into your application.<br />
<p class="MsoNormal">I think this is a more sensible approach to enterprise computing than trying to create this solution that tries to solve all the issues important to enterprise computing. </p>
	<p class="MsoNormal">Finally, another failure of the EJB model is the collaboration between different technology providers. The EJB model was supposed to encourage application assembly: you would get some beans from a provider, put them together with some beans from another provider and create an application. I do not know of a successful application which got assembled this way. <br />However, the level of integration the lightweight frameworks have with outside technologies (such as the Acegi security framework) puts them in huge contrast with the EJB architecture. It looks like the IoC containers are much better applications assemblers than an EJB container. </p>
	<p class="MsoNormal">The EJB spec leaves behind the image of an elephant mired in the moors of enterprise computing, trying to provide a solution for every conceivable problem, ending up with no clear answer to anything.<br />Looking at the picture that the EJB spec presents today it is not clear how another version &ndash; even the annotation-enhanced, transparent, lightweight version 3 &ndash; will fix the systemic problems that this bloated technology poses. I am skeptical that the on-going effort for refining EJBs will ever bear the fruit it was supposed to.</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/06/06/going-thru-the-ejb-spec/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Traian Basescu</title>
		<link>http://cristi.blogsome.com/2006/05/16/traian-basescu/</link>
		<comments>http://cristi.blogsome.com/2006/05/16/traian-basescu/#comments</comments>
		<pubDate>Tue, 16 May 2006 16:10:51 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Personal</category>
		<guid>http://cristi.blogsome.com/2006/05/16/traian-basescu/</guid>
		<description><![CDATA[	Si de tipul asta mi se rupe

]]></description>
			<content:encoded><![CDATA[	<p>Si de tipul asta mi se rupe
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/05/16/traian-basescu/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Working with Ajax</title>
		<link>http://cristi.blogsome.com/2006/04/25/working-with-ajax/</link>
		<comments>http://cristi.blogsome.com/2006/04/25/working-with-ajax/#comments</comments>
		<pubDate>Tue, 25 Apr 2006 15:12:59 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/04/25/working-with-ajax/</guid>
		<description><![CDATA[	I developed some components that interacted with the server in an AJAX-like manner (posting to a servlet, registering a callback function that would process the output from the server). I ran into a few issues and spent some time thinking about AJAX development.
	I noticed some tight-coupling for calls that returns HTML content which has Javascript [...]]]></description>
			<content:encoded><![CDATA[	<p class="MsoNormal">I developed some components that interacted with the server in an AJAX-like manner (posting to a servlet, registering a callback function that would process the output from the server). I ran into a few issues and spent some time thinking about AJAX development.</p>
	<p>I noticed some tight-coupling for calls that returns HTML content which has Javascript due to not loading of JS libraries retrieved via AJAX. Some calls were getting some HTML content that required JS libraries for launching popups or DHTML manipulation. The HTML content came with the required JS libraries but the browser (IE 6) was not loading these libraries. As a result the calling page had to load the libraries that were used by the HTML content retrieved thru AJAX. <br />I didn&#8217;t like this because I wanted to be able to encapsulate my component in some form, shape or manner and then have it used without having to determine how are these components coupled and enforcing this coupling. It looks like at the current stage of development component encapsulation is not implemented in AJAX. <br />One problem this causes is that the component&#8217;s future development is pinned. You cannot add more functionality to it because the JS libraries which will implement this functionality will have to be imported in the pages using the AJAX component. You will have to document the dependencies between the AJAX component and the pages calling it, reload the libraries in the dependent pages and re-test them. Big effort&#8230;<br /><em>Note: There is a work-around: getting the JS libraries and adding them to the document in a &lt;script&gt; tag. This would cause the browser to parse the JS required by the component. However this would require 2 calls: one to get the libraries, add them to the document in a &lt;script&gt; tag and another one to pull the component that uses these libs.</em><br /><em>Also, it is possible that future browsers will determine if JS libraries are retrieved thru an AJAX call and parse them.</em></p>
	<p class="MsoNormal">The concept of application on one page is a bit flawed. The problems posed by a browser&#8217;s refresh button will add to the problems of the back button and so on. The current AJAX client is missing some important functionality (it is not transactional for example) and probably due to the variety of JS implementations in browsers it will always miss this functionality. Drawing a boundary between what logic falls on the client and what falls on the server is an extra effort. App versioning and the browser&rsquo;s JS cache pose some interesting problems too.</p>
	<p class="MsoNormal">I wonder what will happen to an application written in AJAX and to its code base once W3C will put out HTML 4.01 (which among other things will separate the data from presentation and style)? Will these apps suddenly become obsolete? Probably yes.  </p>
	<p class="MsoNormal">The biggest drawback of AJAX is that AJAX is currently under-developed. Everything revolves around the return status of the http request. There are some libraries out there (such as DWR &ndash; Direct Web Remoting) and some frameworks are being developed but otherwise AJAX is under-developed. The plumbing is being developed by ear for now. It is possible that Microsoft will come out with their own plumbing for asynchronous client-server communication. It is likely the W3C will expand this technology as well. The danger that your current code base will grow obsolete is great. The danger that various independent AJAX implementations will emerge and require developers to code to 2 different implementations is also pretty big. Anyone remembers the Netscape-vs-IE wars?</p>
	<p class="MsoNormal">The asynchronous nature of AJAX may pose some problems. Some ramp-up time is required for developing at ease in an asynchronous environment if you have not had to deal with asynchronous applications.</p>
	<p>My opinion is that currently AJAX is pretty good for small tasks pertaining to presentation. Let&rsquo;s say you have a result set presented in a list and you want to display detailed information about an object in that list without refreshing the page. You could do it in AJAX. You could share various presentation objects across a site with AJAX as well. <br />What you should probably not be doing right now is embark on large-scale projects revolving around this immature technology.</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/04/25/working-with-ajax/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Ada Milea</title>
		<link>http://cristi.blogsome.com/2006/04/17/ada-milea/</link>
		<comments>http://cristi.blogsome.com/2006/04/17/ada-milea/#comments</comments>
		<pubDate>Mon, 17 Apr 2006 16:36:49 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Personal</category>
		<guid>http://cristi.blogsome.com/2006/04/17/ada-milea/</guid>
		<description><![CDATA[	Cam asa arata o mare frectie

]]></description>
			<content:encoded><![CDATA[	<p>Cam asa arata o mare frectie
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/04/17/ada-milea/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Declarative programming and dynamic languages</title>
		<link>http://cristi.blogsome.com/2006/04/17/declarative-programming-and-dynamic-languages/</link>
		<comments>http://cristi.blogsome.com/2006/04/17/declarative-programming-and-dynamic-languages/#comments</comments>
		<pubDate>Mon, 17 Apr 2006 14:00:27 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
	<category>Favorites</category>
		<guid>http://cristi.blogsome.com/2006/04/17/declarative-programming-and-dynamic-languages/</guid>
		<description><![CDATA[	I am following the dynamic vs static debate and its by-product, the debate of Ruby vs Java, not really understanding what the fuss is all about.
	I think we could say that the language used in the XML descriptors of a package using declarative programming (such as an EJB XML descriptor, a struts-config.xml or bean-definitions.xml for [...]]]></description>
			<content:encoded><![CDATA[	<p class="MsoNormal">I am following the dynamic vs static debate and its by-product, the debate of Ruby vs Java, not really understanding what the fuss is all about.</p>
	<p class="MsoNormal">I think we could say that the language used in the XML descriptors of a package using declarative programming (such as an EJB XML descriptor, a struts-config.xml or bean-definitions.xml for Spring) fits the definition of a dynamic language.<br />You can change the behavior at runtime, you can create new classes and call them from different points in your program, you can even pass invalid objects to your program and find out that your program is not working because you didn&#8217;t XML-program (I have to admit &#8216;XML-program&#8217; is an atrocious name) it correctly. </p>
	<p class="MsoNormal">Declarative programming and the descriptors that enforce the contracts specified declaratively could be viewed as the place where a Java app would act in a dynamic way. The language of the application would be Java + various XML descriptors rather than only Java and this language could be viewed as dynamic. </p>
	<p class="MsoNormal">So far declarative programming has been used mostly for infrastructure (EJB, Struts, etc&#8230;) but it would be interesting to see what results if it is being used for describing an application. I am thinking particularly about organizations that write programs that have to be easily customizable (such as a B2C shopping cart, a content-management system, etc&#8230;). It would be a good thing if I could describe this application in a declarative way so that I could describe and incorporate a customized business-process easily into the application. My app would be changed dynamically, customized behaviour would be created and passed to the appropriate components, etc&#8230; It would be written in Java and described and assembled in XML descriptors. It would be dynamic. </p>
	<p class="MsoNormal">For example when the user presses the submit order button on an e-commerce site I should be able to specify in a declarative fashion that the DB will get updated, the credit card will be charged and the back-office system will know to send the product to the user and ask for replenishment. I want to add this and other functionality and turn it on/off at run-time. </p>
	<p class="MsoNormal">To go back to the debate of Ruby vs Java, I think that Ruby will not get much penetration into enterprise development. The reason is that by now a huge investment has been made in JEE applications, an investment of the size of a few millions line of code that have been developed and, more importantly, tested and debugged. Assuming that you need to add some dynamic behavior to your product you could do so by applying declarative programming to your existing code base rather than re-writing the application once more in the language that happens to be popular. The debate of Ruby vs Java is a non-debate, it debates the current Ruby development environment and Java&#8217;s development environment as it was 4-5 years ago, i.e. Java running on its own. However, today most applications written in Java are usually run in some container that allows for loading behavior dynamically. Ruby vs Java + some frameworks would seem a more rational debate, however I have not seen anyone taking part in it.</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/04/17/declarative-programming-and-dynamic-languages/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Taranul din Spania</title>
		<link>http://cristi.blogsome.com/2006/04/11/taranul-din-spania/</link>
		<comments>http://cristi.blogsome.com/2006/04/11/taranul-din-spania/#comments</comments>
		<pubDate>Tue, 11 Apr 2006 19:37:09 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Personal</category>
		<guid>http://cristi.blogsome.com/2006/04/11/taranul-din-spania/</guid>
		<description><![CDATA[	Un mare meserias

]]></description>
			<content:encoded><![CDATA[	<p>Un mare meserias
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/04/11/taranul-din-spania/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Spring proxy-based AOP versus annotation-based AOP</title>
		<link>http://cristi.blogsome.com/2006/04/11/spring%e2%80%99s-proxy-based-aop-versus-annotation-based-aop/</link>
		<comments>http://cristi.blogsome.com/2006/04/11/spring%e2%80%99s-proxy-based-aop-versus-annotation-based-aop/#comments</comments>
		<pubDate>Tue, 11 Apr 2006 18:14:23 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/04/11/spring%e2%80%99s-proxy-based-aop-versus-annotation-based-aop/</guid>
		<description><![CDATA[	One big difference between Spring&rsquo;s proxy-based AOP implementation (referenced from now on as Spring AOP) and annotation-based AOP is the fact the Spring AOP declares the advices outside of the code while annotations declare the advice in the code. This causes some side effects:
1) Spring AOP lets you apply different behavior to the same class [...]]]></description>
			<content:encoded><![CDATA[	<p>One big difference between Spring&rsquo;s proxy-based AOP implementation (referenced from now on as Spring AOP) and annotation-based AOP is the fact the Spring AOP declares the advices outside of the code while annotations declare the advice in the code. This causes some side effects:<br />
<p class="MsoNormal">1) Spring AOP lets you apply different behavior to the same class in different instances (actually you can do this in the same instance). It would be possible to download an open-source JEE application (such as a B2C shopping cart) and customize it without changing code resulting in different instances of the same app. For example, you would be able to declare that various steps in the checkout are transactional, apply different security requirements from instance to instance without changing the downloaded code. </p>
	<p class="MsoNormal">2) The fact that annotation-based AOP binds behavior to code implies some development coupling: you have to develop or at least design the advice before you develop the class being advised. Ideally you would develop the advice independent of the code it gets applied to. </p>
	<p class="MsoNormal">3) Annotation-based AOP creates horizontal relationships between classes that are very hard to change. All the classes sharing the same advice are tied together. Suppose that you have a <em>Transaction </em>annotation applied to you account manager, user signup manager and checkout manager. It would be very hard (and would require quite a lot of code-juggling) to change the app so that only your checkout process is transactional. These horizontal relationships (which as far as I know have not been integrated into modeling tools) should probably not exist at the code level, but at the application-deployment level. Cross-functional behavior should probably be applied at deployment time when the user&rsquo;s requirements are ready to be implemented. </p>
	<p class="MsoNormal">4) Annotations may degrade portability. One example would be the core EJB3 annotations for persistence. These annotations are platform independent since they are part of the EJB3 spec, however, these annotations are probably insufficient for real-life deployment because they do not allow for application tuning (such as data caching for example). In order to add caching to an EJB we would probably have to add server-specific annotations, and these server-specific annotations ruin the portability between application servers. With Spring AOP we could write an aspect that would piggy-back on the server-specific cache and advise the DAO with this aspect at deployment time. We could change the cache pretty easily by creating a new aspect for a different cache and advise the DAO with this aspect at deployment time. </p>
	<p class="MsoNormal">5) Spring AOP creates a new role in the product&rsquo;s life-cycle: the application assembler role. This role (probably best fulfilled by a business analyst which has a relation with the customer) would allow for making the application more flexible to customer&rsquo;s requirements. A business analyst should be able to look at an application, determine what type of behavior should be attached to, or detached from its various parts and attach or detach that behavior. Supposing that this behavior doesn&rsquo;t exist the business analyst should be able to have it developed in an advice that is independent of the overall application and advise various parts of the application with this advise. </p>
	<p class="MsoNormal">I think that Spring&rsquo;s proxy-based AOP is a better proposition that AOP thru annotations. Annotations promote relationships that are hard-coded and unless are specified by the domain problem they should be better implemented outside of code.</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/04/11/spring%e2%80%99s-proxy-based-aop-versus-annotation-based-aop/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Plesu</title>
		<link>http://cristi.blogsome.com/2006/04/05/plesu/</link>
		<comments>http://cristi.blogsome.com/2006/04/05/plesu/#comments</comments>
		<pubDate>Wed, 05 Apr 2006 14:51:27 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Personal</category>
		<guid>http://cristi.blogsome.com/2006/04/05/plesu/</guid>
		<description><![CDATA[	Opa, hopa, Penelopa.

]]></description>
			<content:encoded><![CDATA[	<p>Opa, hopa, Penelopa.
</p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/04/05/plesu/feed/</wfw:commentRss>
	</item>
		<item>
		<title>Hello world!</title>
		<link>http://cristi.blogsome.com/2006/04/04/hello-world/</link>
		<comments>http://cristi.blogsome.com/2006/04/04/hello-world/#comments</comments>
		<pubDate>Tue, 04 Apr 2006 14:34:50 +0000</pubDate>
		<dc:creator>Cristi</dc:creator>
		
	<category>Personal</category>
	<category>Development</category>
		<guid>http://cristi.blogsome.com/2006/04/04/hello-world/</guid>
		<description><![CDATA[	
]]></description>
			<content:encoded><![CDATA[	<p><img border="0" title="emoticon" alt="emoticon" src="http://cristi.blogsome.com/wp-content/plugins/Wysi-Wordpress/plugins/emotions/images/bye.gif" /></p>
]]></content:encoded>
			<wfw:commentRss>http://cristi.blogsome.com/2006/04/04/hello-world/feed/</wfw:commentRss>
	</item>
	</channel>
</rss>
