<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='W/&quot;C0EMSHgyfSp7ImA9Wx5aFUU.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549</id><updated>2010-11-12T20:08:09.695+03:00</updated><title>Software Engineers' Blog</title><subtitle type='html'>be part of our community</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default?redirect=false&amp;v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2'/><author><name>Software Engineer</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry gd:etag='W/&quot;C0EMSHk7fip7ImA9Wx5aFUU.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-6832512109900956513</id><published>2010-11-12T20:08:00.002+03:00</published><updated>2010-11-12T20:08:09.706+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2010-11-12T20:08:09.706+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='pattern'/><title>Structural Design Patterns</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="line-height: 1.5em; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.4em;"&gt;In&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Software_engineering" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="Software engineering"&gt;software engineering&lt;/a&gt;,&amp;nbsp;&lt;b&gt;structural design patterns&lt;/b&gt;&amp;nbsp;are&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="Design pattern (computer science)"&gt;design patterns&lt;/a&gt;&amp;nbsp;that ease the design by identifying a simple way to realize relationships between entities.&lt;/div&gt;&lt;div style="line-height: 1.5em; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.4em;"&gt;Examples of Structural Patterns include:&lt;/div&gt;&lt;ul style="line-height: 1.5em; list-style-image: url(http://bits.wikimedia.org/skins-1.5/vector/images/bullet-icon.png?1); list-style-type: square; margin-bottom: 0.5em; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0.1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Adapter_pattern" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="Adapter pattern"&gt;Adapter pattern&lt;/a&gt;: 'adapts' one interface for a class into one that a client expects&lt;ul style="line-height: 1.5em; list-style-image: url(http://bits.wikimedia.org/skins-1.5/vector/images/bullet-icon.png?1); list-style-type: square; margin-bottom: 0.5em; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0.1em;"&gt;Retrofit Interface Pattern&lt;sup class="reference" id="cite_ref-0" style="font-style: normal; font-weight: normal; line-height: 1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Structural_pattern#cite_note-0" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none; white-space: nowrap;"&gt;&lt;span&gt;[&lt;/span&gt;1&lt;span&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;sup class="reference" id="cite_ref-1" style="font-style: normal; font-weight: normal; line-height: 1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Structural_pattern#cite_note-1" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none; white-space: nowrap;"&gt;&lt;span&gt;[&lt;/span&gt;2&lt;span&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;: An adapter used as a new interface for multiple classes at the same time.&lt;/li&gt;
&lt;li style="margin-bottom: 0.1em;"&gt;Adapter pipeline: Use multiple adapters for debugging purposes.&lt;sup class="reference" id="cite_ref-2" style="font-style: normal; font-weight: normal; line-height: 1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Structural_pattern#cite_note-2" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none; white-space: nowrap;"&gt;&lt;span&gt;[&lt;/span&gt;3&lt;span&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0.1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Aggregate_pattern" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="Aggregate pattern"&gt;Aggregate pattern&lt;/a&gt;: a version of the&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Composite_pattern" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="Composite pattern"&gt;Composite pattern&lt;/a&gt;&amp;nbsp;with methods for aggregation of children&lt;/li&gt;
&lt;li style="margin-bottom: 0.1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Bridge_pattern" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="Bridge pattern"&gt;Bridge pattern&lt;/a&gt;: decouple an abstraction from its implementation so that the two can vary independently&lt;ul style="line-height: 1.5em; list-style-image: url(http://bits.wikimedia.org/skins-1.5/vector/images/bullet-icon.png?1); list-style-type: square; margin-bottom: 0.5em; margin-left: 1.5em; margin-right: 0px; margin-top: 0.3em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="margin-bottom: 0.1em;"&gt;Tombstone: An intermediate "lookup" object contains the real location of an object.&lt;sup class="reference" id="cite_ref-3" style="font-style: normal; font-weight: normal; line-height: 1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Structural_pattern#cite_note-3" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none; white-space: nowrap;"&gt;&lt;span&gt;[&lt;/span&gt;4&lt;span&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0.1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Composite_pattern" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="Composite pattern"&gt;Composite pattern&lt;/a&gt;: a tree structure of objects where every object has the same interface&lt;/li&gt;
&lt;li style="margin-bottom: 0.1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Decorator_pattern" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="Decorator pattern"&gt;Decorator pattern&lt;/a&gt;: add additional functionality to a class at runtime where subclassing would result in an exponential rise of new classes&lt;/li&gt;
&lt;li style="margin-bottom: 0.1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Extensibility_pattern" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="Extensibility pattern"&gt;Extensibility pattern&lt;/a&gt;: aka. Framework - hide complex code behind a simple interface&lt;/li&gt;
&lt;li style="margin-bottom: 0.1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Facade_pattern" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="Facade pattern"&gt;Facade pattern&lt;/a&gt;: create a simplified interface of an existing interface to ease usage for common tasks&lt;/li&gt;
&lt;li style="margin-bottom: 0.1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Flyweight_pattern" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="Flyweight pattern"&gt;Flyweight pattern&lt;/a&gt;: a high quantity of objects share a common properties object to save space&lt;/li&gt;
&lt;li style="margin-bottom: 0.1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Proxy_pattern" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="Proxy pattern"&gt;Proxy pattern&lt;/a&gt;: a class functioning as an interface to another thing&lt;/li&gt;
&lt;li style="margin-bottom: 0.1em;"&gt;&lt;a class="mw-redirect" href="http://en.wikipedia.org/wiki/Pipes_and_filters" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="Pipes and filters"&gt;Pipes and filters&lt;/a&gt;: a chain of processes where the output of each process is the input of the next&lt;/li&gt;
&lt;li style="margin-bottom: 0.1em;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Private_class_data_pattern" style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; color: #0645ad; text-decoration: none;" title="Private class data pattern"&gt;Private class data pattern&lt;/a&gt;: restrict accessor/mutator access&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-6832512109900956513?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/6832512109900956513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2010/11/structural-design-patterns.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/6832512109900956513?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/6832512109900956513?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2010/11/structural-design-patterns.html' title='Structural Design Patterns'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DkcCRng9fip7ImA9Wx5UGE4.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-8179168597012127946</id><published>2010-10-23T14:39:00.003+03:00</published><updated>2010-10-23T14:41:07.666+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2010-10-23T14:41:07.666+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='hadoop'/><title>Introduction To Hive Hadoop</title><content type='html'>Hive is a powerful data warehousing application built on top of Hadoop which allows you to use SQL to access your data. This lecture will give an overview of Hive and the query language. This lecture includes a work-along exercise. The next video is a screencast of a user performing this exercise.&lt;br /&gt;
&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3591321&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=3591321&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=1&amp;amp;color=&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="600" height="600"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;&lt;a href="http://vimeo.com/3591321"&gt;Cloudera Hadoop Training: Introduction to Hive&lt;/a&gt; from &lt;a href="http://vimeo.com/cloudera"&gt;Cloudera&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-8179168597012127946?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/8179168597012127946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2010/10/introduction-to-hive-hadoop.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/8179168597012127946?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/8179168597012127946?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2010/10/introduction-to-hive-hadoop.html' title='Introduction To Hive Hadoop'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;AkEDRnc8eip7ImA9Wx5UEUk.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-2172441568753632467</id><published>2010-10-15T16:17:00.000+03:00</published><updated>2010-10-15T16:17:57.972+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2010-10-15T16:17:57.972+03:00</app:edited><title>Google URL Shortener - goo.gl</title><content type='html'>Today, I have just used the Google url shortener named "goo.gl". Like other Google products, it has a very simple, attractive user interface. The project is still beta, and Google will&amp;nbsp;probably&amp;nbsp;add more features in the future.&lt;br /&gt;
&lt;br /&gt;
Fore more&amp;nbsp;information: vist&amp;nbsp;&lt;a href="http://goo.gl/"&gt;goo.gl&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-2172441568753632467?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/2172441568753632467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2010/10/google-url-shortener-googl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/2172441568753632467?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/2172441568753632467?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2010/10/google-url-shortener-googl.html' title='Google URL Shortener - goo.gl'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;CkcARHk9fCp7ImA9Wx5VGUQ.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-4590840565437150328</id><published>2010-10-13T20:14:00.001+03:00</published><updated>2010-10-13T20:14:05.764+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2010-10-13T20:14:05.764+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title>SOA Principles - Service Abstraction Principle</title><content type='html'>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;
In SOA, by keeping specific details hidden, we protect the integrity of the relationship formed between a service and its consumers. Using&amp;nbsp;&lt;i&gt;abstraction&lt;/i&gt;, we allow the service business logic and its underlying implementation to evolve over time while continuing to fulfill its duties in relation to what was&amp;nbsp;originally&amp;nbsp;published in the service's contract.&lt;/div&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;In the real world,&amp;nbsp;&lt;i&gt;abstraction&lt;/i&gt;&amp;nbsp;is really existed; For instance, when you want to buy a car, you don’t need to know everything about the engine and its internal components. Why? Because it will confuse you. Hiding unnecessary information from the buyer protects and simplifies the selling process.&amp;nbsp;In SOA, the scenario is quite similar except we don’t have cars to sell, we have services to publish.&lt;/div&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Why Service Abstraction is Needed?&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The more details we publish in a service contract, the deeper coupling between service and consumers can become. Or in other words, less&amp;nbsp;&lt;i&gt;Abstraction&lt;/i&gt;&amp;nbsp;means that the consumers are more awareness of the&amp;nbsp;underlying&amp;nbsp;service logic, technologies, and internal details of the service. Consequently, the service consumers will&amp;nbsp;naturally&amp;nbsp;judge&amp;nbsp;on the service based on the metadata or&amp;nbsp;extra&amp;nbsp;information.&lt;/div&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Another&amp;nbsp;reason why&amp;nbsp;&lt;i&gt;Abstraction&lt;/i&gt;&amp;nbsp;is required is to&amp;nbsp;empower&amp;nbsp;the service providers the freedom to&amp;nbsp;enhance their services. By abstracting the implementation details from the service contract, the service provider can modify the underline logic without effecting the coupling between the published service and its consumers.&lt;/div&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_1WA3IvOHa9I/TLNx6t50J_I/AAAAAAAACEQ/QItegop1Z8c/s1600/Service+Abstraction+Principle1.png" style="cursor: move;" /&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Design&amp;nbsp;Characteristics&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Providers hide&amp;nbsp;unnecessary&amp;nbsp;information (underlying technology, logic, internal constrains, etc) from the service consumers. The information altogether is hidden in a&amp;nbsp;particular&amp;nbsp;environment that may be accessed by the internal members of the service's organization.&lt;/div&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Requirements&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Providers need to spend more time on the design phase to concisely define the&amp;nbsp;interaction&amp;nbsp;requirements and public service constrains. This process can be&amp;nbsp;integrated&amp;nbsp;with a governance&amp;nbsp;methodology.&lt;/div&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Types of Metadata&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;In order to abstract non-essential&amp;nbsp;metadata, we need to classify them first. Generally, there are four types of metadata in service oriented architecture:&lt;/div&gt;&lt;i&gt;&lt;u&gt;Technology metadata&lt;/u&gt;&lt;/i&gt;&lt;br /&gt;
the metadata that&amp;nbsp;declares the&amp;nbsp;implementation&amp;nbsp;technology of the&amp;nbsp;service. Abstracting the technical metadata from the service contract reduces technology-to-contract coupling. An example of technology metadata is the underline implementation technology of the service such as "this service has been built using .Net technology and for implementation we used Visual Studio 2005".&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;However, some technical metadata are required to be published. For instance, How the service can be invoked? &amp;nbsp;What technology required to invoke the service? Is it SOAP or REST? Publishing these details does not affect the&amp;nbsp;integrity&amp;nbsp;of coupling. It just guides the consumers.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1WA3IvOHa9I/TLQY04bsW5I/AAAAAAAACEU/usVrfqSwPXw/s1600/Service+Abstraction+Principle2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="199" src="http://1.bp.blogspot.com/_1WA3IvOHa9I/TLQY04bsW5I/AAAAAAAACEU/usVrfqSwPXw/s400/Service+Abstraction+Principle2.png" style="cursor: move;" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;i&gt;&lt;u&gt;Systematic&amp;nbsp;Logic metadata&lt;/u&gt;&lt;/i&gt;&lt;/div&gt;The metadata that explains the underline logic and how it&amp;nbsp;maintains&amp;nbsp;its goals and&amp;nbsp;capabilities. The underline design details (such as logging details,&amp;nbsp;algorithms, database drivers, etc) are usually hidden from the service consumer. Without abstracting this metadata, a service consumer can easily become coupled to the low-level implementation of the service.&amp;nbsp;Consequently, the service publisher may not be abile to modify or adjust the internal implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_1WA3IvOHa9I/TLQbqldyaDI/AAAAAAAACEY/SeOfrRy27m4/s1600/Service+Abstraction+Principle3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="126" src="http://2.bp.blogspot.com/_1WA3IvOHa9I/TLQbqldyaDI/AAAAAAAACEY/SeOfrRy27m4/s400/Service+Abstraction+Principle3.png" style="cursor: move;" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;i&gt;&lt;u&gt;Functional metadata&lt;/u&gt;&lt;/i&gt;&lt;/div&gt;The metadata that explains the functional scope of the service. A function scope&amp;nbsp;determines&amp;nbsp;&amp;nbsp;service's&amp;nbsp;capabilities&amp;nbsp;that are made publicly&amp;nbsp;available&amp;nbsp;through the service contract. In OOP, API often abstracts and&amp;nbsp;maintains&amp;nbsp;a set of generic functions &amp;nbsp;considered those most likely to be used to clients that may need to develop an application capable of connecting with the product, &amp;nbsp;In SOA, the&amp;nbsp;technical&amp;nbsp;contract is the service API.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_1WA3IvOHa9I/TLQgQjAvmnI/AAAAAAAACEg/iy5ItOpZwRs/s1600/Service+Abstraction+Principle4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="132" src="http://4.bp.blogspot.com/_1WA3IvOHa9I/TLQgQjAvmnI/AAAAAAAACEg/iy5ItOpZwRs/s400/Service+Abstraction+Principle4.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;i&gt;&lt;u&gt;Quality of Service metadata&lt;/u&gt;&lt;/i&gt;&lt;/div&gt;In the field of computer science, the Quality of Service (QaS) term refers to resource reservation control mechanisms rather than the achieved service quality. Similarly, In SOA, it refers to the behavioral, runtime polices, reliability-related information about the service.&lt;br /&gt;
&lt;br /&gt;
Web service policies are a common form of service&amp;nbsp;description&amp;nbsp;document that explains&amp;nbsp;the QaS of the XML service. Depending on the runtime environment and the&amp;nbsp;capabilities&amp;nbsp;of the hosting service provider, the qulity of service metadata may need to be placed in the non-technical service document. or SLA (Service Level Agreement).&lt;br /&gt;
&lt;br /&gt;
Like other metadata, it is a good idea to publish some of the Quality of Service metadata to the service consumer. An example of the Quality of Service metadata is 'the availability of the service' as shown:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1WA3IvOHa9I/TLSucOdvYjI/AAAAAAAACE4/9NMVlowPIZo/s1600/Service+Abstraction+Principle5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="117" src="http://1.bp.blogspot.com/_1WA3IvOHa9I/TLSucOdvYjI/AAAAAAAACE4/9NMVlowPIZo/s400/Service+Abstraction+Principle5.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-4590840565437150328?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/4590840565437150328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2010/10/soa-principles-service-abstraction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/4590840565437150328?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/4590840565437150328?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2010/10/soa-principles-service-abstraction.html' title='SOA Principles - Service Abstraction Principle'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1WA3IvOHa9I/TLNx6t50J_I/AAAAAAAACEQ/QItegop1Z8c/s72-c/Service+Abstraction+Principle1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;CkIEQ3w8fyp7ImA9Wx5VFk4.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-4974749206779347422</id><published>2010-10-09T15:40:00.003+03:00</published><updated>2010-10-09T16:21:42.277+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2010-10-09T16:21:42.277+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title>WebP, a new image format for the Web</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://img.thesun.co.uk/multimedia/archive/00571/google_logo_682_571408a.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 100px;" src="http://img.thesun.co.uk/multimedia/archive/00571/google_logo_682_571408a.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;As part of Google’s initiative to make the web faster, over the past few months we have released a number of tools to help site owners speed up their websites. We launched the Page Speed Firefox extension to evaluate the performance of web pages and to get suggestions on how to improve them, we introduced the Speed Tracer Chrome extension to help identify and fix performance problems in web applications, and we released a set of closure tools to help build rich web applications with fully optimized JavaScript code. While these tools have been incredibly successful in helping developers optimize their sites, as we’ve evaluated our progress, we continue to notice a single component of web pages is consistently responsible for the majority of the latency on pages across the web: images.&lt;br /&gt;&lt;br /&gt;Most of the common image formats on the web today were established over a decade ago and are based on technology from around that time. Some engineers at Google decided to figure out if there was a way to further compress lossy images like JPEG to make them load faster, while still preserving quality and resolution. As part of this effort, we are releasing a developer preview of a new image format, WebP, that promises to significantly reduce the byte size of photos on the web, allowing web sites to load faster than before.&lt;br /&gt;&lt;br /&gt;Images and photos make up about 65% of the bytes transmitted per web page today. They can significantly slow down a user’s web experience, especially on bandwidth-constrained networks such as a mobile network. Images on the web consist primarily of lossy formats such as JPEG, and to a lesser extent lossless formats such as PNG and GIF. Our team focused on improving compression of the lossy images, which constitute the larger percentage of images on the web today.&lt;br /&gt;&lt;br /&gt;To improve on the compression that JPEG provides, we used an image compressor based on the VP8 codec that Google open-sourced in May 2010. We applied the techniques from VP8 video intra frame coding to push the envelope in still image coding. We also adapted a very lightweight container based on RIFF. While this container format contributes a minimal overhead of only 20 bytes per image, it is extensible to allow authors to save meta-data they would like to store.&lt;br /&gt;&lt;br /&gt;While the benefits of a VP8 based image format were clear in theory, we needed to test them in the real world. In order to gauge the effectiveness of our efforts, we randomly picked about 1,000,000 images from the web (mostly JPEGs and some PNGs and GIFs) and re-encoded them to WebP without perceptibly compromising visual quality. This resulted in an average 39% reduction in file size. We expect that developers will achieve in practice even better file size reduction with WebP when starting from an uncompressed image.&lt;br /&gt;&lt;br /&gt;To help you assess WebP’s performance with other formats, we have shared a selection of open-source and classic images along with file sizes so you can visually compare them on this site. We are also releasing a conversion tool that you can use to convert images to the WebP format. We’re looking forward to working with the browser and web developer community on the WebP spec and on adding native support for WebP. While WebP images can’t be viewed until browsers support the format, we are developing a patch for WebKit to provide native support for WebP in an upcoming release of Google Chrome. We plan to add support for a transparency layer, also known as alpha channel in a future update.&lt;br /&gt;&lt;br /&gt;We’re excited to hear feedback from the developer community on our discussion group, so download the conversion tool, try it out on your favorite set of images, and let us know what you think.&lt;br /&gt;&lt;br /&gt;Posted by Richard Rabbat, Product Manager&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-4974749206779347422?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/4974749206779347422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2010/10/webp-new-image-format-for-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/4974749206779347422?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/4974749206779347422?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2010/10/webp-new-image-format-for-web.html' title='WebP, a new image format for the Web'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;A04DRnk-fCp7ImA9Wx5VFUs.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-7853014606158516518</id><published>2010-10-08T23:04:00.004+03:00</published><updated>2010-10-08T23:32:57.754+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2010-10-08T23:32:57.754+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title>Oracle Exalogic - a New  Revolutionary Solution</title><content type='html'>I always believed adding layers into information system adds more complexities to the internal infrastructure. Today, Oracle started working on a new  revolutionary solution that integrates hardware and middleware together. Named Oracle Exalogic.&lt;br /&gt;Both of layers have been engineered together for maximum performance with minimum set-up and minimum operational cost. It allows different components of a Java application to interact with essentially zero-copy I/O, enabling as much as 12x improvement in handling workloads such as Web requests!! &lt;a href="http://www.oracle.com/us/products/middleware/exalogic/index.html?msgid=3-2453175912"&gt;More..&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-7853014606158516518?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/7853014606158516518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2010/10/oracle-exalogic-fusion-middleware.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/7853014606158516518?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/7853014606158516518?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2010/10/oracle-exalogic-fusion-middleware.html' title='Oracle Exalogic - a New  Revolutionary Solution'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>1</thr:total></entry><entry gd:etag='W/&quot;DEACQ3c-eSp7ImA9WxNRFkg.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-4221911280951720679</id><published>2009-09-11T11:07:00.003+03:00</published><updated>2009-09-11T11:12:42.951+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-09-11T11:12:42.951+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title>Oracle's Plans for Sun</title><content type='html'>&lt;img border="1" style="border-color: rgb(204, 204, 204);" alt="SUN CUSTOMERS" src="http://www.oracle.com/features/images/sun_customers_lg.gif"/&gt;&lt;br /&gt;&lt;br /&gt;Source: &lt;a href="http://www.oracle.com/features/suncustomers.html"&gt;http://www.oracle.com/features/suncustomers.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-4221911280951720679?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/4221911280951720679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/09/oracles-plans-for-sun.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/4221911280951720679?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/4221911280951720679?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/09/oracles-plans-for-sun.html' title='Oracle&apos;s Plans for Sun'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DE8FRHo8cCp7ImA9WxNSEU0.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-1256699306304106281</id><published>2009-08-24T12:30:00.003+03:00</published><updated>2009-08-24T12:40:15.478+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-08-24T12:40:15.478+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='web service'/><title>WS Stack Comparison</title><content type='html'>If you don't know which WS stack tools you  should use in java, this document will certainly help you.&lt;br /&gt; &lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_10778705423755" name="doc_10778705423755" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" rel="media:document" resource="http://d.scribd.com/ScribdViewer.swf?document_id=19033487&amp;amp;access_key=key-2h7musu0o63t0dvubs5q&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode=" media="http://search.yahoo.com/searchmonkey/media/" dc="http://purl.org/dc/terms/" align="middle" height="500" width="100%"&gt;&lt;param name="movie" value="http://d.scribd.com/ScribdViewer.swf?document_id=19033487&amp;amp;access_key=key-2h7musu0o63t0dvubs5q&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode="&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;        &lt;embed src="http://d.scribd.com/ScribdViewer.swf?document_id=19033487&amp;amp;access_key=key-2h7musu0o63t0dvubs5q&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode=" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_10778705423755_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle" height="500" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt;  &lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;br /&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-1256699306304106281?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/1256699306304106281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/08/ws-stack-comparison.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/1256699306304106281?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/1256699306304106281?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/08/ws-stack-comparison.html' title='WS Stack Comparison'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;D0QEQn85eip7ImA9WxNSEU0.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-4765222287877720492</id><published>2009-08-24T12:13:00.000+03:00</published><updated>2009-08-24T12:15:03.122+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-08-24T12:15:03.122+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='metro'/><title>Introduction to Metro</title><content type='html'>&lt;embed id="VideoPlayback" allowfullscreen="true" quality="high" flashvars="width=470&amp;height=350&amp;file=http%3A%2F%2Fmediacast.sun.com%2Fusers%2Fwombat%2Fmedia%2F2009-02-26-Metro-GlassFish-Webinar.flv" src="http://mediacast.sun.com/flash/jw-flv-player/mediaplayer.swf" type="application/x-shockwave-flash" style="width: 470px; height: 350px;"&gt; &lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-4765222287877720492?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/4765222287877720492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/08/introduction-to-metro.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/4765222287877720492?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/4765222287877720492?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/08/introduction-to-metro.html' title='Introduction to Metro'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DEYAR305eCp7ImA9WxNTFEg.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-5545940019512235921</id><published>2009-08-16T23:29:00.004+03:00</published><updated>2009-08-16T23:55:46.320+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-08-16T23:55:46.320+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title>Using Excepnsive Technologies - No more!!</title><content type='html'>&lt;p class="zemanta-img" style="margin: 1em; float: right; display: block; width: 192px;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Image:Oracle_logo.svg"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/en/thumb/5/50/Oracle_logo.svg/300px-Oracle_logo.svg.png" alt="Oracle Corporation" style="border: medium none ; display: block; width: 182px; height: 26px;" /&gt;&lt;/a&gt;&lt;span class="zemanta-img-attribution"&gt;&lt;a href="http://en.wikipedia.org/wiki/Image:Oracle_logo.svg"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;I remember myself two years ago when I was using all new technologies from Oracle to build applications for my company, IraqCom. I have to admit that was inconsequential and I could used some open source tools to save thousands of dollars. I wanna share this lesson with you guys, so I upload Oracle price list to the blog.&lt;br /&gt;&lt;br /&gt;Please, check it and think about it before using it. Finally, burn these words into your brain! THERE ARE ALTERNATIVES.&lt;br /&gt;&lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;br /&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_395531280350573" name="doc_395531280350573" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="500" width="100%"&gt;&lt;param name="movie" value="http://d.scribd.com/ScribdViewer.swf?document_id=18667681&amp;amp;access_key=key-1jaboxhug5bw0nkx1sz5&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode="&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;        &lt;embed src="http://d.scribd.com/ScribdViewer.swf?document_id=18667681&amp;amp;access_key=key-1jaboxhug5bw0nkx1sz5&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode=" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_395531280350573_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle" height="500" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-5545940019512235921?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/5545940019512235921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/08/using-excepnsive-technologies-no-more.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/5545940019512235921?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/5545940019512235921?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/08/using-excepnsive-technologies-no-more.html' title='Using Excepnsive Technologies - No more!!'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;CU8DR3o6fCp7ImA9WxNTEUo.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-6455160639195745682</id><published>2009-08-13T16:52:00.007+03:00</published><updated>2009-08-13T17:31:16.414+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-08-13T17:31:16.414+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='pattern'/><title>Service and Extension Pattern</title><content type='html'>&lt;div style="text-align: justify;"&gt;In component-base system, we always try to decouple components from each other. Sometime, decoupling process becomes a little bit expensive. In this article, I will talk about a simple approach that can be used for decoupling components, service and extension point pattern.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt; &lt;span style="font-weight: bold;"&gt;Why &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Object-oriented_programming" title="Object-oriented programming" rel="wikipedia"&gt;OOP&lt;/a&gt; &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Inheritance_%28computer_science%29" title="Inheritance (computer science)" rel="wikipedia"&gt;inheritance&lt;/a&gt; should not be used?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Service and extension point pattern is similar to general OOP inheritance, but unlike OOP inheritance, it doesn't tight the components with each other. You usually use this pattern when you have a service-provider scenario. For example, suppose component “A” and “B” are in a small &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Human_resources" title="Human resources" rel="wikipedia"&gt;HR&lt;/a&gt; application called HRTest, component "A" is a module that displays employee information, and component "B" manages data source providers for the application. Data providers can come from different resources like &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Database" title="Database" rel="wikipedia"&gt;database&lt;/a&gt;, &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Web_service" title="Web service" rel="wikipedia"&gt;web services&lt;/a&gt;, or even normal files. As you can conclude, "A" requires at least one provider in order to display employee information to the end user, and B provides the implementation for A's requirements. Using normal inheritance doesn't give a flexible solution because providers may only be exist at &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Runtime" title="Runtime" rel="wikipedia"&gt;runtime&lt;/a&gt;, also more than one components can provide the "A" service interface. For instance, "B" and "C". In addition, for some reasons, "C" may be removed at a certain execution point.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Class A{&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;public void getData(number empID){&lt;br /&gt;  ServiceProvider[] service = getService();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public ServiceProvider[] getServices(){&lt;br /&gt;  getProviderB(); // Get B data provider&lt;br /&gt;  getProviderC(); //Get C data provider&lt;br /&gt;  .&lt;br /&gt;  .&lt;br /&gt;  .&lt;br /&gt;}&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;As the preceding example shown, "A" is tightly dependent on "B" and "C." Because, when a new provider such as "D" is added or an old one is removed, "A" should be adjusted.&lt;br /&gt;&lt;br /&gt;In such above scenario, service and extension pattern can be used to solve this issue in the flexible manner.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Service and Extension Pattern:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Service and Extension Pattern is commonly used approach in &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Rich_Client_Platform" title="Rich Client Platform" rel="wikipedia"&gt;RCP&lt;/a&gt; platforms like &lt;a class="zem_slink" href="http://www.netbeans.org/" title="NetBeans" rel="homepage"&gt;NetBeans&lt;/a&gt; and     Eclipse for sharing objects and providing implementation for extension points. Extension point (sometimes is called Service Interface) is a simple interface that a component can define in order to be implemented by other component, which is called  Implementation provider or simply Provider. An extension point can have more than one provider at runtime and both providers and service modules should not know each other. To clear the misconception between them, the figure below shows a general structure of the pattern&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1WA3IvOHa9I/SoQclE3PE6I/AAAAAAAACBQ/FIQcf1e7Vr8/s1600-h/ss.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 250px;" src="http://2.bp.blogspot.com/_1WA3IvOHa9I/SoQclE3PE6I/AAAAAAAACBQ/FIQcf1e7Vr8/s400/ss.png" alt="" id="BLOGGER_PHOTO_ID_5369448079018628002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;As the figure demonstrated, Component “A” defines an extension point which  “B”, “C” and “D” implement at runtime. Note, because extension point is used by all modules, it should be shared. Therefore, it is highly recommended to encapsulate it in a separate component  creating a new abstract layer between them.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1WA3IvOHa9I/SoQdEgaYZqI/AAAAAAAACBY/Zv_Dg4ptpvU/s1600-h/ss2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_1WA3IvOHa9I/SoQdEgaYZqI/AAAAAAAACBY/Zv_Dg4ptpvU/s400/ss2.png" alt="" id="BLOGGER_PHOTO_ID_5369448618989741730" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;What is next?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the next post, we will implement  this pattern using NetBeans Lookup &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Application_programming_interface" title="Application programming interface" rel="wikipedia"&gt;API&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Thanks for your reading.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-6455160639195745682?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/6455160639195745682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/08/service-and-extension-pattern.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/6455160639195745682?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/6455160639195745682?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/08/service-and-extension-pattern.html' title='Service and Extension Pattern'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1WA3IvOHa9I/SoQclE3PE6I/AAAAAAAACBQ/FIQcf1e7Vr8/s72-c/ss.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;CEUHQHY9cCp7ImA9WxJaFkQ.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-2608749675991326480</id><published>2009-08-08T02:25:00.004+03:00</published><updated>2009-08-08T03:43:51.868+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-08-08T03:43:51.868+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='pattern'/><title>IoC Pattern</title><content type='html'>Yesterday, I took a glance at IoC pattern. I found implicitly interesting article about this pattern and the most interesting article is from &lt;a href="http://today.java.net/pub/a/today/2005/02/10/ioc.html"&gt;java.net&lt;/a&gt; as well as &lt;a href="http://www.martinfowler.com/articles/injection.html"&gt;martinfowler.com&lt;/a&gt; . I hope you guys like it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-2608749675991326480?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/2608749675991326480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/08/ioc-pattern.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/2608749675991326480?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/2608749675991326480?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/08/ioc-pattern.html' title='IoC Pattern'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DEcGSXozfip7ImA9WxNTEk4.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-7960132175173331079</id><published>2009-08-07T19:43:00.014+03:00</published><updated>2009-08-14T10:47:08.486+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-08-14T10:47:08.486+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='pattern'/><title>Event-Listener Pattern</title><content type='html'>&lt;div style="text-align: justify;"&gt;In lossy-couple environment, notification system is essential, because it allows two or more lossy-couple components to communicate and notify each other when an event is triggered. There are several patterns to implement notification system in &lt;a class="zem_slink" href="http://java.sun.com/" title="Java (software platform)" rel="homepage"&gt;Java&lt;/a&gt; and one of them is event-listener  pattern.&lt;br /&gt;&lt;br /&gt;In Java, building event-listener components is not easy as &lt;a class="zem_slink" href="http://www.adobe.com/go/flex/" title="Adobe Flex" rel="homepage"&gt;Flex&lt;/a&gt; or &lt;a href="http://www.blogger.com/msdn.microsoft.com/en-us/vcsharp/default.aspx"&gt;C#&lt;/a&gt;. It requires a lot of &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Boilerplate_%28text%29" title="Boilerplate (text)" rel="wikipedia"&gt;boilerplate code&lt;/a&gt; to implement it. In this article, I will talk about building simple event listener in Java. First I will demonstrate the general algorithm for &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Observer_pattern" title="Observer pattern" rel="wikipedia"&gt;event listeners&lt;/a&gt; then I will implement it in a simple, humble example.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Event-Listener Pattern:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Event-Listener pattern is a simple pattern that can be implemented easily in Java &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/JavaBean" title="JavaBean" rel="wikipedia"&gt;bean&lt;/a&gt; &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Class_%28computer_science%29" title="Class (computer science)" rel="wikipedia"&gt;class&lt;/a&gt;. Actually, it is part of &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/JavaBean" title="JavaBean" rel="wikipedia"&gt;JavaBean&lt;/a&gt; conventions. It has been used mainly in &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Java_Platform%2C_Standard_Edition" title="Java Platform, Standard Edition" rel="wikipedia"&gt;J2SE&lt;/a&gt; platform, particularly in &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Graphical_user_interface" title="Graphical user interface" rel="wikipedia"&gt;GUI&lt;/a&gt; libraries. This pattern consists of two main parts (Source and Listener):&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Source:&lt;/span&gt; the source is the Java class for maintaining the event listeners which has previously been registered  - It is like a small database . Therefore, the source class has  method for registering (add) and unregistering (remove) listeners to the small database. The source also has ability to fire an event.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Listener:&lt;/span&gt; As the name refers to, the listener is the Java component that interests in a specific event. When an event is triggered, all listeners interested in the event will get a notification and will execute their own &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Event_handler" title="Event handler" rel="wikipedia"&gt;event handler&lt;/a&gt; codes. Listeners register for events using the methods defined by the sources of those events.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;What is share between these two parts is listener event message! The message is usually interface used to determine  event data-type.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1WA3IvOHa9I/SnxtHGSq78I/AAAAAAAAB8w/EENA4X8x2Tg/s1600-h/ss.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 152px;" src="http://1.bp.blogspot.com/_1WA3IvOHa9I/SnxtHGSq78I/AAAAAAAAB8w/EENA4X8x2Tg/s320/ss.gif" alt="" id="BLOGGER_PHOTO_ID_5367284824634224578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Sample:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, we are going to write a simple implementation for the pattern, so let's start with the source part.&lt;br /&gt;&lt;br /&gt;First of all, we need  a simple bean class. I will name it “SourceClass”:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;class SourceClass {&lt;br /&gt;&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Then we need a &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Data_structure" title="Data structure" rel="wikipedia"&gt;data structure&lt;/a&gt; to store the listeners (Remember, the small database). For simplicity, I will use Vector&lt;br /&gt;&lt;blockquote&gt;private Vector listeners = new Vector();&lt;/blockquote&gt;Now, we need two methods, one of them for registering and the other unregistering, they should have JavaBean conventional style. The method  used to register a listener in the vector must use the prefix “add”, and the other one,  must start with the prefix “remove”. Both of them should follow by the event type and must end with the postfix “Listener”. In addition, they should have an argument with event data-type&lt;br /&gt;&lt;blockquote&gt;public void addTestEventListener(TestEvent l) {&lt;br /&gt;listeners.addElement(l);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void removeTestEventListener(TestEvent l) {&lt;br /&gt;listeners.removeElement(l);&lt;br /&gt;}&lt;/blockquote&gt;As the preceding example depicts, the two methods manage the listeners which interest in "TestEvent" Event.&lt;br /&gt;&lt;br /&gt;For simplicity, a simple fire method will be added to notify all registered listeners&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;public void fire() {&lt;br /&gt;Vector temp = (Vector) listeners.clone();&lt;br /&gt;&lt;br /&gt;for (int i=0; i &amp;gt; l.size(); i++) {&lt;br /&gt;TestEventListener listeners = (TestEventListener) temp.elementAt(i);&lt;br /&gt;listener.eventHandler ();&lt;br /&gt;}&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;Now, let's define our event, which simply extends EventListener interface in the Java util package&lt;br /&gt;&lt;blockquote&gt;public interface TestEvent extends java.util.EventListener {&lt;br /&gt;&lt;br /&gt;void eventHandler();&lt;br /&gt;}&lt;/blockquote&gt;So as you see, the event is nothing than a simple, share interface between the source and listeners.&lt;br /&gt;&lt;br /&gt;Finally, we need a simple listener which listens to our TestEvent. Remember, listener can be any class you want. The only thing is required to become a listener is creating a SourceClass and  adding the event (TestEvent).&lt;br /&gt;&lt;blockquote&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;SourceClass c  = new SourceClass();&lt;br /&gt;TestEvent e = new  TestEvent(){&lt;br /&gt;    void eventHandler(){&lt;br /&gt;      //Do something&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;c.addTestEventListener(e);&lt;br /&gt;&lt;br /&gt;c.fire();&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;As the codes shown above, SourceClass and &lt;/span&gt;TestEvent&lt;span style="font-size:100%;"&gt; objects have been created. of course, we have to resolve all abstract methods in TestEventListener interface and the last not the least, we add the later object to the source.&lt;br /&gt;&lt;br /&gt;when the source fires  the &lt;/span&gt;TestEvent&lt;span style="font-size:100%;"&gt;, listeners gets a notification and will execute their event handler code.&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;&lt;br /&gt;Conclusion:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Event-Listener Pattern provides simple notification system for Java components. The pattern has two main parts (Source and Listener). The source stores all listeners, and the listeners listen to &lt;/span&gt;&lt;span style="font-size:100%;"&gt;particular event, which is simply the message or notification that transports from source to listeners&lt;/span&gt;&lt;span style="font-size:130%;"&gt;.&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;&lt;br /&gt;Further Reading:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.j2ee.me/docs/books/tutorial/javabeans/events/index.html"&gt;http://www.j2ee.me/docs/books/tutorial/javabeans/events/index.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.drbob42.com/jbuilder/jb210T.htm"&gt;http://www.drbob42.com/jbuilder/jb210T.htm&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nat.truemesh.com/archives/000710.html"&gt;http://nat.truemesh.com/archives/000710.html&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-7960132175173331079?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/7960132175173331079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/08/event-listener-pattern.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/7960132175173331079?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/7960132175173331079?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/08/event-listener-pattern.html' title='Event-Listener Pattern'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1WA3IvOHa9I/SnxtHGSq78I/AAAAAAAAB8w/EENA4X8x2Tg/s72-c/ss.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry gd:etag='W/&quot;DEUMQnc-fCp7ImA9WxJWEUo.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-5842817068285900524</id><published>2009-06-16T21:15:00.002+03:00</published><updated>2009-06-16T21:18:03.954+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-06-16T21:18:03.954+03:00</app:edited><title>Google Toolbar Platform</title><content type='html'>Now, Thanks to Google Toolbar, you can create a custom button that can run almost in every well-known browser.&lt;br /&gt;&lt;br /&gt;For more information, &lt;a href="http://toolbar.google.com/buttons/apis/howto_guide.html#%7Bselection%7D"&gt;click here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-5842817068285900524?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/5842817068285900524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/06/google-toolbar-platform.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/5842817068285900524?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/5842817068285900524?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/06/google-toolbar-platform.html' title='Google Toolbar Platform'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;CEIDSX87eyp7ImA9WxJXGUQ.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-2978313905467603712</id><published>2009-06-14T18:14:00.002+03:00</published><updated>2009-06-14T18:16:18.103+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-06-14T18:16:18.103+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='Catalyst'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title>Adobe Firework + Flash Catalyst</title><content type='html'>This demonstration demonstrates how Adobe Firework can be used in Flash Catalyst&lt;br /&gt;&lt;embed src="http://tv.adobe.com/Embed.swf" bgcolor="#000000" name="AdobeTVPlayer" play="true" loop="false" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" flashvars="v=~b64~aHR0cDovL2Fkb2JlLmVkZ2Vib3NzLm5ldC9mbGFzaC9hZG9iZS9hZG9iZXR2Mi9hZGNfcHJlc2VudHMvNjRfYWRjXzE0OC5mbHY/cnNzX2ZlZWRpZD0xNDcyJnhtbHZlcnM9Mg==&amp;amp;w=600&amp;amp;t=http://tv.adobe.com/vi+f1472v1109&amp;amp;h=385" height="385" width="600"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-2978313905467603712?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/2978313905467603712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/06/adobe-firework-flash-catalyst.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/2978313905467603712?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/2978313905467603712?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/06/adobe-firework-flash-catalyst.html' title='Adobe Firework + Flash Catalyst'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;C0QGQH88fCp7ImA9WxJXGUQ.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-4162098879794953210</id><published>2009-06-14T17:49:00.003+03:00</published><updated>2009-06-14T17:55:21.174+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-06-14T17:55:21.174+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='Article'/><title>Interesting Article: Systems Architecture</title><content type='html'>A very unique &lt;a href="http://www.adobe.com/devnet/livecycle/articles/soa_gis.html"&gt;article&lt;/a&gt; talks about &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Systems_architecture" title="Systems architecture" rel="wikipedia"&gt;Systems Architecture&lt;/a&gt; in general, and &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Service-oriented_architecture" title="Service-oriented architecture" rel="wikipedia"&gt;SOA&lt;/a&gt; in specific. Furthermore, It explains the evolution in &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Software_architecture" title="Software architecture" rel="wikipedia"&gt;Software Architecture&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Excellent job Duane Nickul.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-4162098879794953210?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.adobe.com/devnet/livecycle/articles/soa_gis.html' title='Interesting Article: Systems Architecture'/><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/4162098879794953210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/06/systems-architecture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/4162098879794953210?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/4162098879794953210?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/06/systems-architecture.html' title='Interesting Article: Systems Architecture'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;CU4HQnw9cSp7ImA9WxJWEEU.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-5086026576864328611</id><published>2009-06-13T18:18:00.008+03:00</published><updated>2009-06-15T19:38:53.269+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-06-15T19:38:53.269+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title>Linux Yahoo Messanger + Voice + Webcam</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sourceforge.net/dbimage.php?id=97600"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 257px; height: 191px;" src="http://sourceforge.net/dbimage.php?id=97600" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Many Linux users have got some problems with &lt;a class="zem_slink" href="http://messenger.yahoo.com/" title="Yahoo! Messenger" rel="homepage"&gt;Yahoo messenger&lt;/a&gt;. Since official release does not provide new feature like &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Voice_over_Internet_Protocol" title="Voice over Internet Protocol" rel="wikipedia"&gt;VOIP&lt;/a&gt; + Webcam. Fortunately, You can install unofficial version called (&lt;strong&gt;&lt;a class="zem_slink" href="http://gyachi.sourceforge.net/" title="Gyachi" rel="homepage"&gt;Gyachi&lt;/a&gt;)&lt;/strong&gt;&lt;span&gt; which supports almost all the features including: &lt;/span&gt;&lt;span&gt;photo sharing, &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Voice_chat" title="Voice chat" rel="wikipedia"&gt;voice chat&lt;/a&gt;, file sharing, group chat, my yahoo page , etc.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;To setup, choose and &lt;/span&gt;&lt;span&gt;download &lt;/span&gt;&lt;span&gt;your appropriate package:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Ubuntu Jaunty packages:&lt;/strong&gt;&lt;br /&gt;&lt;a href="https://launchpad.net/%7Eloell/+archive/ppa/+files/gyachi_1.1.70-1%7Ejaunty_i386.deb"&gt;gyachi_1.1.70-1~jaunty_i386.deb&lt;/a&gt;&lt;br /&gt;&lt;a href="https://launchpad.net/%7Eloell/+archive/ppa/+files/gyachi_1.1.70-1%7Ejaunty_amd64.deb"&gt;gyachi_1.1.70-1~jaunty_amd64.deb &lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Ubuntu Intrepid packages:&lt;br /&gt;&lt;/strong&gt;&lt;a href="https://launchpad.net/%7Eloell/+archive/ppa/+files/gyachi_1.1.70-1%7Eintrepid_i386.deb"&gt;gyachi_1.1.70-1~intrepid_i386.deb &lt;/a&gt;&lt;/p&gt;&lt;a href="https://launchpad.net/%7Eloell/+archive/ppa/+files/gyachi_1.1.70-1%7Eintrepid_amd64.deb"&gt;gyachi_1.1.70-1~intrepid_amd64.deb &lt;/a&gt;     &lt;p&gt; &lt;strong&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Ubuntu Hardy packages:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="https://launchpad.net/%7Eloell/+arch...ntu11_i386.deb"&gt;https://launchpad.net/%7Eloell/+arch…ntu11_i386.deb&lt;/a&gt;&lt;/p&gt;Or visit the official website ; &lt;a href="http://gyachi.sourceforge.net/"&gt;click here.&lt;/a&gt;    &lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;br /&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-5086026576864328611?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/5086026576864328611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/06/linux-yahoo-messanger-voice-webcam.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/5086026576864328611?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/5086026576864328611?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/06/linux-yahoo-messanger-voice-webcam.html' title='Linux Yahoo Messanger + Voice + Webcam'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>1</thr:total></entry><entry gd:etag='W/&quot;D08MRXwzeip7ImA9WxJXF0k.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-9087326356839656920</id><published>2009-06-11T14:42:00.003+03:00</published><updated>2009-06-11T21:44:44.282+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-06-11T21:44:44.282+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='ADF'/><title>Check Out OTN Virtual Developer Day Records</title><content type='html'>Don't miss these fantasting demonstrations from OTN. &lt;a href="http://www.oracle.com/technology/events/virtualdeveloperday/index.html"&gt;Click here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-9087326356839656920?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/technology/events/virtualdeveloperday/index.html' title='Check Out OTN Virtual Developer Day Records'/><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/9087326356839656920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/06/check-out-otn-virtual-developer-day.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/9087326356839656920?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/9087326356839656920?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/06/check-out-otn-virtual-developer-day.html' title='Check Out OTN Virtual Developer Day Records'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;Ck8AQn88eCp7ImA9WxJXF08.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-8949966127070533275</id><published>2009-06-11T14:33:00.005+03:00</published><updated>2009-06-11T14:47:23.170+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-06-11T14:47:23.170+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='jdeveloper'/><title>JDeveloper's memory Problems</title><content type='html'>I've always got some overhead memory problems since JDeveloper 10g. Finally, I have found a new way to reduce JDeveloper's consuming memory. Check out this &lt;a href="http://andrejusb.blogspot.com/2009/06/jdeveloper-11g-ide-performance-problem.html"&gt;link&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-8949966127070533275?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://andrejusb.blogspot.com/2009/06/jdeveloper-11g-ide-performance-problem.html' title='JDeveloper&apos;s memory Problems'/><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/8949966127070533275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/06/jdevelopers-memory-problems.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/8949966127070533275?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/8949966127070533275?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/06/jdevelopers-memory-problems.html' title='JDeveloper&apos;s memory Problems'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;CkQCSH89eyp7ImA9WxJXF08.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-469981034170915897</id><published>2009-06-10T12:45:00.008+03:00</published><updated>2009-06-11T14:39:29.163+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-06-11T14:39:29.163+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='Catalyst'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title>Adobe Flash Catalyst Changes Everything</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1WA3IvOHa9I/Si-DY6gYrAI/AAAAAAAAB34/s54ojla8pH8/s1600-h/flash_catalyst.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 178px; height: 179px;" src="http://1.bp.blogspot.com/_1WA3IvOHa9I/Si-DY6gYrAI/AAAAAAAAB34/s54ojla8pH8/s320/flash_catalyst.png" alt="" id="BLOGGER_PHOTO_ID_5345635746757258242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Adobe Flash Catalyst is a new tool which has been released recently by Adobe. It bridges the Flex and Flash world into one interaction tool. It connect CS 4 tools with each other, and off course it provides a very convenient way to connect developers and designers together. Therefor, now, designers can make GUI in Adobe Photoshop or Illustrator, then transform their artwork into functional user interface. Furthermore, you can create interactive prototype, which is quite important in development life cycle.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Anther thing I want to mention, unlike Flex, Flash Catalyst do not require learning any new language, it has an interactive interface, and it makes sure your creative vision is perfectly expressed.&lt;br /&gt;&lt;br /&gt;Anyhow,I hope everyone will try it. You can download from  adobe lab website or &lt;a href="http://www.adobe.com/cfusion/entitlement/index.cfm?e=labs_flashcatalyst"&gt;click here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 102, 0);"&gt;Introduction Demo:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="340" width="560"&gt;&lt;param name="movie" value="http://www.youtube.com/v/tNAde32pWT0&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/tNAde32pWT0&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="340" width="560"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 0); font-weight: bold;"&gt;Further Reading:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://labs.adobe.com/technologies/flashcatalyst/"&gt;http://labs.adobe.com/technologies/flashcatalyst/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://labs.adobe.com/technologies/flashcatalyst/tutorials/"&gt;http://labs.adobe.com/technologies/flashcatalyst/tutorials/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-469981034170915897?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/469981034170915897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/06/adobe-flash-catalyst-change-every-thing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/469981034170915897?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/469981034170915897?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/06/adobe-flash-catalyst-change-every-thing.html' title='Adobe Flash Catalyst Changes Everything'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1WA3IvOHa9I/Si-DY6gYrAI/AAAAAAAAB34/s54ojla8pH8/s72-c/flash_catalyst.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;C0UMR34yeyp7ImA9WxJQFUQ.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-8907575284404296770</id><published>2009-05-29T11:51:00.002+03:00</published><updated>2009-05-29T13:01:26.093+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-05-29T13:01:26.093+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><title>When Should I use REST?</title><content type='html'>&lt;div style="text-align: justify;"&gt;It is common that REST is one of the best approach that we can use to design &amp;amp; develop a new highly scalable Web application. However, This approach may be a bit tougher when you are working on an extension to an existing enterprise application, or on an integration project relying in whole or in part on existing infrastructure. &lt;span class="a1"&gt;&lt;a href="http://searchsoa.techtarget.com/expert/KnowledgebaseBio/0,289623,sid26_cid1315182,00.html"&gt;&lt;b&gt;Eric Newcomer&lt;/b&gt;&lt;/a&gt; wrote an interesting article about this subject. The article can be found &lt;a href="http://searchsoa.techtarget.com/expert/KnowledgebaseAnswer/0,289625,sid26_cid1328059_mem1,00.html"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-8907575284404296770?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/8907575284404296770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/05/when-should-i-use-rest.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/8907575284404296770?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/8907575284404296770?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/05/when-should-i-use-rest.html' title='When Should I use REST?'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DEAMQ3w6fSp7ImA9WxJQFUU.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-8285342678120894053</id><published>2009-05-29T11:45:00.001+03:00</published><updated>2009-05-29T11:46:22.215+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-05-29T11:46:22.215+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='glassfish'/><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><category scheme='http://www.blogger.com/atom/ns#' term='openoffice'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title>The future of Oracle/Sun</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1WA3IvOHa9I/SfKq9nrU57I/AAAAAAAABxA/mvCCmtoOwsY/s1600-h/042009_oraclesun.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 184px; height: 138px;" src="http://3.bp.blogspot.com/_1WA3IvOHa9I/SfKq9nrU57I/AAAAAAAABxA/mvCCmtoOwsY/s320/042009_oraclesun.jpg" alt="" id="BLOGGER_PHOTO_ID_5328509284732168114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Three days ago, the news came out that Oracle is buying Sun Microsystems. The Oracle-Sun deal came little more than two weeks after I.B.M. had ended its talks with Sun. This deal shocked many developer and bring a lot of questions and concerns. What is next? What will happen in the future? In this post, in my opinion, I will answer several controversial questions.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;The future of Glassfish&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;To start with, many java developers believe that Glassfish AS is one of the products which is going to be killed by Oracle. However, Let thing about this again, I believe Oracle will use Glassfish to provide new level of products for small &amp;amp; medium-size companies. This new level will consist of MySQL, Glassfish, OpenESB… etc .They will definitely try to attack new level of customers, because current Oracle web stack solution is heavy, expensive and not affordable for mid-scale companies. Therefore, oracle will provide support and easy migration between the solutions.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Another thing I want to mention it, Glassfish is one the most well engineered, fast, and up to date application server available, So Oracle will certainly uses glassfish's code to improve Oracle AS' code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Finally, Oracle will keep this path open for as long as it wants to attract paid customers and avoid customers making a switch in favor of the JBoss stack.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;What about Netbeans IDE?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Will, NetBeans is not only an IDE but it is an RCP, I am sure that NetBeans will have a massive impact on the other oracle products, including JDeveloper. I believe NetBeans is going to provide support for ADF framework  and JDeveloper will be killded in the future, just like Oracle forum and Oracle report, because NetBeans IDE has a huge and vibrant community which can not simply be ignored by Oracle.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;On the other hand, NetBeans IDE is the core for all of Sun's products. It has connection will OpenSolaris, DTrace and ends with JavaFX development. Oracle can not simply ignores these connections and kill the IDE.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;And finally, NetBeans used to be the first IDE which supported the latest specifications, Oracle will keep this opportunity and continue providing bleeding edge functionality both in the deployment and server-side front by pushing GlassFish development forward and also in continuing to support the development of the NetBeans IDE and platform.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;What about Star/Openoffice?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;As the second largest software company in the world, there is at least one thing that Oracle has NOT had yet that their primary competitor has and that is an office automation suite used by students, grandmas,  and enterprises worldwide.  The ability to have your name in front of millions of users is a powerful tool particularly when they can download it for free and run it on Windows, MacOS, Linux distros and Solaris.  I think we know that Larry is not a great friend of Microsoft and this will give him one more thing to poke in their eye.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;Finally, what is going to happen to JavaFX?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;The upcoming land grab for rich internet applications (RIAs) will be a fierce competition between Microsoft, Adobe and Oracle with Sun's JavaFX.  JavaFX provides an advanced tool with proven security and programming model to deploy RIAs on billions of devices over the network.  Its open source status will ensure a broad developer acceptance and diverse contributions from industry, academia and government.  In the fight for "eyeballs" JavaFX will provide Oracle with a significant competitive advantage in function as well as wide device support.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-8285342678120894053?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/8285342678120894053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/05/future-of-oraclesun.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/8285342678120894053?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/8285342678120894053?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/05/future-of-oraclesun.html' title='The future of Oracle/Sun'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_1WA3IvOHa9I/SfKq9nrU57I/AAAAAAAABxA/mvCCmtoOwsY/s72-c/042009_oraclesun.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DUcCRHk_cCp7ImA9WxJQFUU.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-7406133929578379076</id><published>2009-05-07T11:50:00.000+03:00</published><updated>2009-05-29T11:51:05.748+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-05-29T11:51:05.748+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><title>Introduction To REST</title><content type='html'>I found this YouTube presentation very useful.&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="505"&gt;&lt;param name="movie" value="http://www.youtube.com/v/YCcAE2SCQ6k&amp;hl=en&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/YCcAE2SCQ6k&amp;hl=en&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-7406133929578379076?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/7406133929578379076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/05/introduction-to-rest.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/7406133929578379076?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/7406133929578379076?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/05/introduction-to-rest.html' title='Introduction To REST'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DUcERX07eSp7ImA9WxJQFUU.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-7379857018669933255</id><published>2009-05-02T11:49:00.000+03:00</published><updated>2009-05-29T11:50:04.301+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-05-29T11:50:04.301+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='widget'/><title>Add Java Magazines Widget to your website</title><content type='html'>&lt;div style="text-align: justify;"&gt;Finally, I finished designing and building a new widget, Java Magazine. The widget has a very simple interactive interface which allows the end user to browse and navigate through the latest Java Magazine. Be free to embed this widget to your blog, web site, dashboard....etc.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;the Widget's Code:&lt;br /&gt;&lt;pre name="code" class="XML"&gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="http://cdn.widgetserver.com/syndication/subscriber/InsertWidget.js"&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;script&amp;gt;if (WIDGETBOX) WIDGETBOX.renderWidget('6adc2f17-c036-4cac-bfb1-26a0e1a2d298');&amp;lt;/script&amp;gt;&amp;lt;noscript&amp;gt;Get the &amp;lt;a href="http://www.widgetbox.com/widget/3ba73d0f-c85d-4d73-8b61-34b5a8bc4078"&amp;gt;Java Magazines&amp;lt;/a&amp;gt; widget and many other &amp;lt;a href="http://www.widgetbox.com/"&amp;gt;great free widgets&amp;lt;/a&amp;gt; at &amp;lt;a href="http://www.widgetbox.com"&amp;gt;Widgetbox&amp;lt;/a&amp;gt;!&amp;lt;/noscript&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://cdn.widgetserver.com/syndication/subscriber/InsertWidget.js"&gt;&lt;/script&gt;&lt;script&gt;if (WIDGETBOX) WIDGETBOX.renderWidget('c9c7fb80-fa83-49d0-aef4-a2bba301aef1');&lt;/script&gt;&lt;noscript&gt;Get the &lt;a href="http://www.widgetbox.com/widget/3ba73d0f-c85d-4d73-8b61-34b5a8bc4078"&gt;Java Magazines&lt;/a&gt; widget and many other &lt;a href="http://www.widgetbox.com/"&gt;great free widgets&lt;/a&gt; at &lt;a href="http://www.widgetbox.com"&gt;Widgetbox&lt;/a&gt;!&lt;/noscript&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-7379857018669933255?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/7379857018669933255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/05/add-java-magazines-widget-to-your.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/7379857018669933255?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/7379857018669933255?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/05/add-java-magazines-widget-to-your.html' title='Add Java Magazines Widget to your website'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DE4BSHk5fSp7ImA9WxJQFUU.&quot;'><id>tag:blogger.com,1999:blog-1698533201855619549.post-294648799823135746</id><published>2009-04-28T11:48:00.000+03:00</published><updated>2009-05-29T11:49:19.725+03:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2009-05-29T11:49:19.725+03:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='fun'/><title>Java is like Sex!!!</title><content type='html'>because:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;One mistake and you have to support it for the rest of your life. (Michael Sinz)&lt;/li&gt;&lt;li&gt;Working with communities is more productive.&lt;/li&gt;&lt;li&gt;you will get a headache if you don't use it for a day. (yakkoh)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Once you get started, you’ll only stop because you’re exhausted.&lt;/li&gt;&lt;li&gt;It takes another experienced person to really appreciate what you’re doing.&lt;/li&gt;&lt;li&gt;Conversely, there’s some odd people who pride themselves on their lack of experience.&lt;/li&gt;&lt;li&gt;You can do it for money or for fun.&lt;/li&gt;&lt;li&gt;If you spend more time doing it than watching TV, people think you’re some kind of freak.&lt;/li&gt;&lt;li&gt;It’s not really an appropriate topic for dinner conversation.&lt;/li&gt;&lt;li&gt;There’s not enough taught about it in public school.&lt;/li&gt;&lt;li&gt;It doesn’t make any sense at all if you try to explain it in strictly clinical terms.&lt;/li&gt;&lt;li&gt;Some people are just naturally good.&lt;/li&gt;&lt;li&gt;But some people will never realize how bad they are, and you’re wasting your time trying to tell them.&lt;/li&gt;&lt;li&gt;There are a few weirdos with bizarre practices nobody really is comfortable with.&lt;/li&gt;&lt;li&gt;One little thing going wrong can ruin &lt;em&gt;everything&lt;/em&gt;.&lt;/li&gt;&lt;li&gt;It’s a great way to spend a lunch break.&lt;/li&gt;&lt;li&gt;Everyone acts like they’re the first person to come up with a new technique.&lt;/li&gt;&lt;li&gt;Everyone who’s done it pokes fun at those who haven’t.&lt;/li&gt;&lt;li&gt;Beginners do a lot of clumsy fumbling about.&lt;/li&gt;&lt;li&gt;You’ll miss it if it’s been a while.&lt;/li&gt;&lt;li&gt;There’s always someone willing to write about the only right way to do things.&lt;/li&gt;&lt;li&gt;It doesn’t go so well when you’re drunk, but you’re more likely to do it.&lt;/li&gt;&lt;li&gt;Sometimes it’s fun to use expensive toys.&lt;/li&gt;&lt;li&gt;Other people just get in the way.&lt;/li&gt;&lt;/ul&gt;extended from www.push.cx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1698533201855619549-294648799823135746?l=www.softwareengineer.me' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.softwareengineer.me/feeds/294648799823135746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.softwareengineer.me/2009/04/java-is-like-sex.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/294648799823135746?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1698533201855619549/posts/default/294648799823135746?v=2'/><link rel='alternate' type='text/html' href='http://www.softwareengineer.me/2009/04/java-is-like-sex.html' title='Java is like Sex!!!'/><author><name>Software Engineer</name><email>noreply@blogger.com</email><gd:extendedProperty name='OpenSocialUserId' value='04496391739033572675'/></author><thr:total>0</thr:total></entry></feed>