<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ishi Systems, Inc.</title>
	<atom:link href="http://www.ishisystems.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ishisystems.com</link>
	<description>Agile Development &#124; Product Development &#124; Mobile Solutions &#124; Security Solutions</description>
	<lastBuildDate>Tue, 30 Apr 2013 21:57:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>The Dangers of Doing ‘Just Enough’</title>
		<link>http://www.ishisystems.com/the-dangers-of-doing-just-enough/</link>
		<comments>http://www.ishisystems.com/the-dangers-of-doing-just-enough/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 09:34:07 +0000</pubDate>
		<dc:creator>ishisystems</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[history]]></category>
		<category><![CDATA[management]]></category>

		<guid isPermaLink="false">http://www.ishisystems.com/?p=1448</guid>
		<description><![CDATA[Sixty-six years ago in Munich, Germany, a conference was held by the powers of Europe to determine the fate of Czechoslovakia (conveniently, without the participation of the Czech people). It was convened in response to Adolf Hitler’s demand for a...]]></description>
			<content:encoded><![CDATA[<p>Sixty-six years ago in Munich, Germany, a conference was held by the powers of Europe to determine the fate of Czechoslovakia (conveniently, without the participation of the Czech people). It was convened in response to Adolf Hitler’s demand for a region of the country that was primarily German. Having recently annexed Austria, <span id="more-1448"></span>Hitler was in a position to bargain with the other powers of Europe, none of whom was prepared for war. At the end of the conference, the European powers agreed that Hitler could annex the part of Czechoslovakia that he desired, as long as he would go no further. Neville Chamberlain, who was Prime Minister of Britain at the time, triumphantly returned to England and proclaimed, “My good friends, for the second time in our history, a British Prime Minister has returned from Germany bringing peace with honor. I believe it is peace for our time.”</p>
<table>
<tbody>
<tr>
<td><a href="http://www.ishisystems.com/wp-content/uploads/2011/03/Neville_Chamberlain2.jpg"><img class="alignleft size-full wp-image-1449" title="Neville_Chamberlain2" src="http://www.ishisystems.com/wp-content/uploads/2011/03/Neville_Chamberlain2.jpg" alt="" width="300" height="257" /></a><br />
Chamberlain returning from Munich, waving the Munich Agreement</td>
<td>This so called peace, however, was short-lived, as Hitler, emboldened by his military power and encouraged by the failure of the other European nations to respond in kind, went on to occupy the rest of Czechoslovakia and set the stage for World War II.If there’s a lesson to be learned from this story, it is that extraordinary results require extraordinary effort. I will explain what I mean in the course of this article.</td>
</tr>
</tbody>
</table>
<p>Let’s switch gears for a while, and talk a little bit about career planning as a means to illustrate my point. If you are possessed with even a bit of ambition, you are probably not going to be content doing the same job year after year. As time goes on, you expect to be endowed with greater responsibilities, and improve your standing in society (have a house, a car and 2.5 children – the classic American Dream).</p>
<p>Achieving these unsaid objectives might possibly come from working a 9-5 job for twenty or more years, until finally, you have accomplished your life’s goals.</p>
<p>Indeed, this is the path that many working professionals seek to follow. And this path does produce its rewards. However, at Ishi, we believe in another path. That path is the path of entrepreneurship. Entrepreneurship involves an understanding of risk and reward, and picking those investments that yield the greatest reward. Entrepreneurship also involves managing risk in a way that maximizes your upside, and reduces your downside.</p>
<p>The problem with entrepreneurship is that most people perceive themselves as risk-averse, and think that entrepreneurship means taking risks that are not worth taking because of the downside. However, to reiterate what I have said earlier, entrepreneurship is not about taking risks, but about managing and understanding risk.</p>
<p>At Ishi, the engine of entrepreneurship is learning. You frequently hear it mentioned that Ishi is a learning organization. At Ishi, there is a premium on learning activities, and the value that they add to individual growth and the firm’s business objectives. It’s a winning proposition for all. If I were to summarize a strategy for learning and entrepreneurship at Ishi, it would be as follows:</p>
<ul>
<li>Increase your investment into yourself</li>
<li>The easiest way to increase investment into yourself is through learning</li>
<li>Increase your investments into others</li>
<li>The easiest way to increase your investments into others is through mentoring</li>
<li>Learning does not happen through osmosis, but by active participation</li>
<li>Career progress is hard work</li>
</ul>
<p>And finally</p>
<ul>
<li>Extraordinary results require extraordinary effort.</li>
</ul>
<p>There’s a sort of justice in this, isn’t there? After all, why should those who work hard above and beyond what is required from their job description be afforded the rewards that they deserve? At an entrepreneurial firm such as Ishi, the job of building the firm is not the responsibility of a chosen few, but of each person who has chosen to be an entrepreneur. While this paradigm does not suit everybody, the firm does reward entrepreneurship. Career progress at Ishi is very difficult in the absence of entrepreneurial activity.</p>
<p>Sit still, and you run the risk that one day you will be faced with the same words that Neville Chamberlain was presented with when he was forced to step down as Prime Minister: “You have sat too long here for any good you have been doing. Depart, I say, and let us have done with you. In the name of God, go”.</p>
<p>For some background reading, see: <a href="http://en.wikipedia.org/wiki/Munich_Agreement" target="_blank">http://en.wikipedia.org/wiki/Munich_Agreement</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ishisystems.com/the-dangers-of-doing-just-enough/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning Organization &amp; Living Company</title>
		<link>http://www.ishisystems.com/learning-organization-living-company/</link>
		<comments>http://www.ishisystems.com/learning-organization-living-company/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 06:15:09 +0000</pubDate>
		<dc:creator>ishisystems</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[management]]></category>

		<guid isPermaLink="false">http://www.ishisystems.com/?p=1353</guid>
		<description><![CDATA[A learning organization Ishi professes to be a learning organization. This is an idea that is central to our philosophy, and forms a solid foundation on which our core values and governing principles are based. More than once, I have...]]></description>
			<content:encoded><![CDATA[<h4><strong>A learning organization</strong></h4>
<p>Ishi professes to be a learning organization. This is an idea that is central to our philosophy, and forms a solid foundation on which our core values and governing principles are based. More than once, I have been asked, “What is a learning organization?” In this column, I will address this question, as well as some other related principles in an attempt to elucidate some of the ideas on which Ishi is based.<span id="more-1353"></span></p>
<p>A learning organization is not an educational institution but a community which promotes learning and the evolution of individuals as well as the whole – in other words, the community itself. It is a platform for collaboration and creativity. It adapts and prevails for its own sake versus that of individual interests.</p>
<h4><strong>A living company</strong></h4>
<p>The idea of a living company is synonymous with the idea of a learning organization. It has been researched that the average life of a company is twelve years. Yet, the oldest company in the world is more than 700 years old (Stora, a copper mine in Sweden).</p>
<p>Interestingly, there is a huge gap between the maximum possible life of a company and the average life span of one. To understand this gap, we might want to view a company as a life form with its own purpose. A living company is not just a money-making machine for its shareholders, but rather a community whose primary purpose is to survive and perpetuate itself. Living companies improve their chances of survival by learning and adapting to their environment more quickly than companies that exist for purely economic reasons. That said, financial success is definitely a stated goal at Ishi. However, we see it as the by-product of sound decision making and the successful execution of our strategy rather than an objective in itself. We see the practice and cultivation of a learning organization as ways to manifest our philosophy and enable our corporate strategy.</p>
<p>There is also value in adjusting our perspective of what a company is. Seeing it as simply a machine implies that it is controlled externally, and that it is fixed and static in its purpose and the nature of its growth. Alternatively, seeing a company as a living organism implies that it creates its own processes — just as human body manufactures its own cells — so that it may subsequently evolve naturally.</p>
<h4><strong>Group intelligence, and its ramifications for Ishi</strong></h4>
<p>This idea is linked to another interesting idea — that of Group Intelligence. This idea suggests that when a group of people interact in a cohesive fashion to achieve a set of common goals, a meta-intelligence forms, which is beyond the individual intellectual contributions to the group. This intelligence is that of the group, not an aggregation of the individual intellects. This may seem far fetched, but to understand this in a within a real framework, let us consider a colony of ants.</p>
<p>We know ant colonies as collections of many very-low-in-the-food-chain organisms that exhibit effective intelligence as a cooperative group. ‘Hive intelligence’ is another phrase used to describe similar seemingly intelligent behavior from groups of bees. The other day, I saw a documentary in which an ant colony was relocating overnight from one nest to another. Similarly, bees have evolved a complex structure of communication, cooperation and specialization by which the community as a whole survives from one generation to the next. These rather intriguing phenomena are very real and with deeper investigation, we find that the keys to this kind of “group intelligence” are very advanced communication (signaling in case of ants, a special dance in the case of bees) systems perfected over a long period of time.</p>
<p>When such collaboration and communication develops in an organization, extraordinary results can be achieved. Such an organization learns as much from failure as from success. It rejects the adage “if it ain’t broken, don’t fix it” and continues to investigate new methods of process improvement. A learning organization creates channels to move knowledge seamlessly. Learning organizations also look outside their own boundaries for knowledge. These practices result in an organization that is decentralized, encourages open communication and encourages individuals to work in teams.</p>
<p>Ishi is in its formative years — just entering its tenth year compared with the 700 years of Stora. This is the time we can lay the foundation of an organization that will outlive us many times. For us to develop this platform of knowledge and collaboration, we are instilling a culture of learning and excellence. This brings us a sense of achievement, belonging and security. I believe such a goal is worth pursuing for the reasons we’ve just discussed.</p>
<p>For related reading, see: <strong>“Where is your Group Intelligence?”</strong> by <strong>Rick Dove</strong>[<a title="Where is your Group Intelligence?" href="http://www.parshift.com/Essays/essay048.htm" target="_blank">http://www.parshift.com/Essays/essay048.htm</a>]</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ishisystems.com/learning-organization-living-company/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What the New York City Subway can Teach us About Design</title>
		<link>http://www.ishisystems.com/what-the-new-york-city-subway-can-teach-us-about-design/</link>
		<comments>http://www.ishisystems.com/what-the-new-york-city-subway-can-teach-us-about-design/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 10:28:39 +0000</pubDate>
		<dc:creator>ishisystems</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[new york]]></category>
		<category><![CDATA[technical]]></category>

		<guid isPermaLink="false">http://www.ishisystems.com/?p=1459</guid>
		<description><![CDATA[&#160; What is good design? In our day-to-day adventures in computer science, we are constantly confronted with examples of good and bad design. For most of us, we probably see more examples of bad design than good. Maybe we are...]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<table>
<tbody>
<tr>
<td></td>
<td>
<h4><a href="http://www.ishisystems.com/wp-content/uploads/2011/03/map2.jpg"><img class="alignleft size-full wp-image-1460" title="map2" src="http://www.ishisystems.com/wp-content/uploads/2011/03/map2.jpg" alt="" width="293" height="316" /></a>What is good design?</h4>
<p>In our day-to-day adventures in computer science, we are constantly confronted with examples of good and bad design. For most of us, we probably see more examples of bad design than good. Maybe we are not even aware of what constitutes good design, and as a result, we may fail to recognize it when we see it. Martin Fowler frequently speaks of “bad smells” in code –- bad practices that hint at the fact that bad design may be present. Reading Mr. Fowler’s books and online articles may prepare us to recognize such smells. However, I would argue that it is more important to recognize and appreciate good design in the real world around us. Doing so prepares us to translate ideas from the real world to the world of software.</td>
</tr>
</tbody>
</table>
<p><span id="more-1459"></span></p>
<h4>Oriented towards objects</h4>
<p>Introductory OO programming classes repeat the fact that object oriented programming arose out of a desire to accurately represent the world around us. It was also based on the understanding that software systems were essentially based on the ability to model the properties, functionality and interactions of real-world objects. We all absorbed this information, and then promptly forgot it once our teachers started talking to us about such esoteric ideas as encapsulation and polymorphism. How many of us took a step back to ask the following question, “If OO is based on the real world, and we’re learning about encapsulation and polymorphism, then shouldn’t these ideas exist in the real world?”</p>
<h4>Design patterns and the real world</h4>
<p>A similar question arises with respect to design patterns. I frequently emphasize the fact that design patterns are solutions to problems in context. It is these last two words that many software ‘designers’ often forget. Just because a software system has been put together using design patterns does not mean that it possesses good design.<br />
Let’s take a walk into the real world to explore this idea a bit. Assume that I am building an office building, and I need to create a way for my employees to enter the building. Given this problem, a novice architect might suggest that we install a door (Let’s call this the Door (with a capital ‘D’) design pattern. However, when I add context to my problem, other solutions surface. I realize that I actually need two separate ways to allow employees to enter:</p>
<ol>
<li>At the entrance to the building, I need a door, but since I am planning to have security cameras installed, I want to ensure that people enter one at a time. Additionally, I want to control traffic flow in and out of the lobby area. Finally, because the building is insulated in summer and winter, I want to ensure that the outside environment does not interfere with the climate-controlled inside</li>
<li>Once employees are inside, I am still interested in controlling the flow of traffic, but I want to install an access point, so that IDs can be checked, and employees admitted to the building once their credentials have been verified.</li>
</ol>
<p>Upon careful thought, I realize that I can use the following design patterns from the real world to solve these problems. At an abstract level, they are extensions of the Door design pattern. These design patterns are RevolvingDoor and Turnstile, respectively. Look around, and you will see another useful design pattern – SlidingDoor (subway cars use them). As a building architect, I would seek to accumulate an understanding of as many of these patterns as I can. However, I would also carry around with me the understanding that context is more important than the pattern itself. Think of how ridiculous it would be to install a RevolvingDoor where a SlidingDoor was called for. Now ask yourself if you’ve seen software design patterns used in contexts for which they were ill suited. I suspect that each one of us can think of at least one.</p>
<h4>The real world and components</h4>
<p>A well-designed component can be one of the most beautiful things in the real world. Frequently, the best components are so well designed that we do not even notice their presence. Components help drive the economy. The success of technology is based on something called ‘network externalities’ – a topic that I will explore in a future article. Components in the real world also follow design patterns. Think about a cassette tape – it has a published interface that it uses to communicate with its container (the tape player). The existence of a container-component interface allows multiple vendors to provide tape players as well as the tapes themselves. So you can see the why having different component and container vendors is a useful idea. This is not an idea that exists solely in the world of software.</p>
<h4>What does all of this have to do with the New York City Subway?</h4>
<p>I decided to write this article because I use the subway every day. The subway system is an example of the real world system (and in my opinion, a well designed system). Since we are in the business of developing software systems, there must be lessons that we can learn. Here, I present some of the ways in which observations of the subway have helped me refine some of my ideas about system design.</p>
<p><span style="font-family: Georgia, 'Bitstream Charter', serif; font-size: 15px;"></p>
<ul>
<li style="line-height: 28px;"><span style="line-height: 27px;"><strong>Keep things simple </strong></span><span style="line-height: 26px;">If you’ve ever attempted to navigate the subway on your own, you will have noticed that you are presented with a bewildering array of choices – uptown, downtown, local, express, letters, numbers, etc. However, the subway map is a model of simplicity. After a while, it becomes almost automatic to figure out mentally how to get from one place to another using the subway. It helps if you realize that the subways in Manhattan generally follow the Avenues, and that the express stops (where you can transfer to the local lines) are located on the designated two-way streets. At its heart, the subway system is designed around the idea of making things as simple as possible, and no simpler. The result is a system that uses its resources in an optimized fashion, and keeps its customers happy.</span></li>
</ul>
<ul>
<li style="line-height: 28px;"><span style="line-height: 28px;"><strong>Provide feedback and information </strong></span><span style="line-height: 28px;">The subway system recently began replacing the classic ‘Redbird’ cars with modern cars that display the time of day as well as the next scheduled stop. As a result, passengers no longer have to decrypt what can best be described as the garbled static of announcements over the PA system. Another interesting feature is a route map that plots all the stations on that particular route (see the picture below), and tells you which direction the train is moving. <span style="line-height: 27px;">However, I discovered that this is actually bad design. It is a perfect example of ‘tight coupling’. Essentially, a subway car is a component. So it should be possible to take a subway car that runs on the ‘2’ line, for example, and plug it into the ‘5’ line. But as soon as you do this, the nice helpful route map is no longer valid. To their credit, the designers did include a portion of the map that lights up, stating, “This route is not valid for this trip”.</span></span></li>
</ul>
<p></span></p>
<p><span style="font-family: Georgia, 'Bitstream Charter', serif; font-size: 15px; line-height: 28px;"><a style="color: #ff4b33;" href="http://www.ishisystems.com/wp-content/uploads/2011/03/trainline.jpg"><img class="size-full wp-image-1461 aligncenter" style="border-style: initial; border-color: initial;" title="trainline" src="http://www.ishisystems.com/wp-content/uploads/2011/03/trainline.jpg" alt="" width="600" height="450" /></a></span></p>
<p><span style="font-family: Georgia, 'Bitstream Charter', serif; font-size: 15px;"></p>
<ul style="line-height: 26px;">
<li><span style="line-height: 25px;"><strong>Keep your customers satisfied </strong></span><span style="line-height: 26px;">This should be the objective of anyone who aspires to be a designer. Good design is not that which can be appreciated by your peers, but rather by those who use it on a daily basis. New York is known to be a city that’s short on forgiveness. If something doesn’t work, you’ll be sure to hear about it. In fact, a group known as the Straphangers maintains a site (<a style="line-height: 26px;" href="http://www.straphangers.org/" target="_blank">http://www.straphangers.org/</a>) that tracks the performance and reliability of the subway system. Imagine a scenario where a system that you designed was laid bare for the world to see. How frequently do you think of your users when you design systems?</span></li>
</ul>
<p></span></p>
<ol></ol>
<p style="text-align: left;">There are other ideas that I could hint at, but leave up to you to explore. If you can manage it, riding the subways for work or for pleasure is highly recommended. See if you can recognize examples of interoperability between systems (for example, being able to use the subway’s Metrocard to pay for your PATH fare), the use of standards (why is the track a certain gauge?), other examples of container-component contracts, and of course design patterns. At some point, it would be useful to keep a notebook to see if the subway is a resource for design ideas, including design idioms and anti-patterns. Happy riding!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ishisystems.com/what-the-new-york-city-subway-can-teach-us-about-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adventures in Podcasting (with apologies to Shakespeare)</title>
		<link>http://www.ishisystems.com/adventures-in-podcasting-with-apologies-to-shakespeare/</link>
		<comments>http://www.ishisystems.com/adventures-in-podcasting-with-apologies-to-shakespeare/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 11:47:43 +0000</pubDate>
		<dc:creator>ishisystems</dc:creator>
				<category><![CDATA[Blogging & Social Media]]></category>

		<guid isPermaLink="false">http://www.ishisystems.com/?p=1463</guid>
		<description><![CDATA[Bid the players make haste I wanted to write this article to describe my attempts to create an “interesting” piece of technology using available frameworks. It all started when I recently decided to get myself an mp3 player. No run...]]></description>
			<content:encoded><![CDATA[<h4><strong>Bid the players make haste</strong></h4>
<p>I wanted to write this article to describe my attempts to create an “interesting” piece of technology using available frameworks. It all started when I recently decided to get myself an mp3 player. No run of the mill iPod for me. I had some very specific requirements. So, I created a features-benefits matrix to help me make a decision. <span id="more-1463"></span>Here it is:</p>
<table>
<tbody>
<tr>
<td><strong>Features</strong></td>
<td><strong>Benefits</strong></td>
</tr>
<tr>
<td>USB 2.0 connectivity</td>
<td>
<ul>
<li>Simple fast transfers</li>
<li>no additional software needed</li>
<li>can plug into any computer</li>
<li>function as a storage device for other files if necessary</li>
</ul>
</td>
</tr>
<tr>
<td>Small (size of a pack of gum would be nice)</td>
<td>
<ul>
<li>Easy portability</li>
<li>Store it in my pockets with all my other junk (wallet, phone, keys, etc.)</li>
</ul>
</td>
</tr>
<tr>
<td>LCD Screen</td>
<td>
<ul>
<li>So I can see what song is playing (this is why the iPod Shuffle is out)</li>
</ul>
</td>
</tr>
<tr>
<td>Microphone</td>
<td>
<ul>
<li>So I can record reminders to myself</li>
</ul>
</td>
</tr>
<tr>
<td>At least 1 GB storage capacity</td>
<td>
<ul>
<li>I don’t want to max out my mp3 player with Dark Side of the Moon!</li>
</ul>
</td>
</tr>
<tr>
<td>Internal rechargeable battery</td>
<td>
<ul>
<li>Who wants to keep running to the store for AA or AAA batteries?</li>
</ul>
</td>
</tr>
<tr>
<td>FM Radio</td>
<td>
<ul>
<li>Not a deal breaker, but would be nice</li>
</ul>
</td>
</tr>
<tr>
<td>Equalizer/Presets</td>
<td>
<ul>
<li>It’s really no fun listening to classical, jazz and heavy metal when they all sound the same!</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>Sound like a tall order? Well, maybe just a year or so ago this would have been as fanciful as sighting the Loch Ness monster on a UFO. However, I found that I had quite a few options to choose from. I reviewed a number of mp3 players from Samsung, Sony, Apple, Creative and iRiver, and then finally settled on the Cowon iAudio U2 player, which had not only a great set of features, but fantastic reviews online as well.</p>
<h4><strong>The Earl of Salisbury craveth supply…</strong></h4>
<p>Now that I had selected an mp3 player, I had to figure out what kind of content I wanted on it. While music was an obvious choice, there were also other sources of content that were available. I found <a href="http://www.americanrhetoric.com/" target="_blank">http://www.americanrhetoric.com/</a> which featured numerous speeches in mp3 format that were interesting and sometimes amusing (cf: Nixon’s “Checkers” speech). Another site was the UBUWeb “365 days” project [http://www.ubu.com/outsiders/365/] that presented a collection of quirky and rare recordings. Finally, I discovered Podcasting.<br />
Podcasting is a way to have mp3 content automatically downloaded to your computer using RSS. Podcasting clients such as iPodder can even sync this content with your mp3 device. (Note: this is a short introduction. More information can be found online, or in the Resources section).</p>
<p>Podcasting essentially consists of two steps:<br />
1. A publish step, in which the creator (or publisher) of the content makes it available on a server.<br />
2. A subscribe step, in which a subscriber uses a podcasting client to download the published material.</p>
<p>An overview of this process is shown in the diagram below:</p>
<table>
<tbody>
<tr>
<td><a href="http://www.ishisystems.com/wp-content/uploads/2011/03/Podcasting.jpg"><img class="aligncenter size-full wp-image-1464" title="Podcasting" src="http://www.ishisystems.com/wp-content/uploads/2011/03/Podcasting.jpg" alt="" width="405" height="297" /></a></td>
</tr>
<tr>
<td><strong>Figure 1</strong>: Podcasting Overview</td>
</tr>
</tbody>
</table>
<h4><strong>…which but to-day by feeding is allay’d</strong></h4>
<p>Podcasting provides mp3 fans with a whole new way of accessing content. Content providers such as bloggers, Internet radio stations and online news providers can create automatic feeds of their content for consumption by subscribers. The advantage of this format is that content is updated automatically by the client and can be downloaded to the mp3 device according to a specified schedule.</p>
<p>Discovering podcasting added a new dimension to my thinking about mp3 and its applications. I began to consider ways in which podcasting could be used to deliver various types of content to users. One of the ideas that occurred to me was to create a feed of incoming email in mp3 format. This would provide a way for you to take your email with you on your mp3 device and listen to it whenever you wanted. I started to think about the technology that would be required to make this idea work. Specifically, the following problems would need to be solved (the second column lists the technologies I identified to solve each problem):</p>
<table>
<tbody>
<tr>
<td>Intercept and process email messages at the email server</td>
<td>Apache James</td>
</tr>
<tr>
<td>Convert each email message to speech</td>
<td>James mailet architecture + FreeTTS</td>
</tr>
<tr>
<td>Save the converted speech file to mp3 format</td>
<td>Lame mp3 encoding engine</td>
</tr>
<tr>
<td>Generate the rss feed for the mp3 file of your email</td>
<td>FreePod (use its libraries. FreePod is designed for existing RSS)</td>
</tr>
<tr>
<td>Publish both mp3 and rss files to a server</td>
<td>Podifier (optional); or ftp/file copy</td>
</tr>
<tr>
<td>Access the feed from a client</td>
<td>iPodder</td>
</tr>
</tbody>
</table>
<p>Due to space limitations, I will not cover these technologies in depth. However, the Resources section points to online locations for more information.</p>
<h4><strong>Pretty too! What say you, James Soundpost?</strong></h4>
<p>Although each of the technologies listed above is important in addressing a piece of the puzzle, it is James that lies at the center of the processing logic. James provides pluggable components called mailets that are very similar to servlets in their architecture. In that famliar paradigm, mailets implement init(), destroy() and service() methods, and are subclassed from a base class called GenericMailet.<br />
The service() method takes a parameter of type Mail that allows you to perform processing actions on a Mail item. James can be configured to load a set of mailets on startup. The James installation also comes with a number of mailets that allow an administrator to configure actions such as redirecting undeliverable mail, or adding a footer to an email message.<br />
In order to generate an mp3 from an email message, we can write a mailet that will intercept each email received at the server, extract the text from it, and then use the FreeTTS (text-to-speech) libraries to synthesize the associated speech. This allows James to create sound posts (to borrow from Shakespeare) of email messages. The utility libraries packaged with FreePod contain the logic required to invoke the Lame mp3 encoder that is needed to actually generate the mp3 files. These mp3 files can then be stored on the server for use by the feed generator. Look at Listing 1 for the code for the service() method of such a mailet.</p>
<p>An overview of the approach (with the key API method calls) is shown below:</p>
<p><a href="http://www.ishisystems.com/wp-content/uploads/2011/03/email2mp3-new-size.jpg"><img class="aligncenter size-full wp-image-1465" title="email2mp3-new-size" src="http://www.ishisystems.com/wp-content/uploads/2011/03/email2mp3-new-size.jpg" alt="" width="682" height="365" /></a></p>
<p>&nbsp;</p>
<p><strong>Figure 2</strong>: Inside the code</p>
<h4><strong>I know this man well: he hath been since an ape-bearer; then a process-server</strong></h4>
<p>The final piece of the puzzle is to have a process serve the rss. For this, I visualized a servlet that would accept any requests for files ending in .rss. The servlet would incorporate any security requirements (for example, authenticating against LDAP tp gain access to the user’s mailbox) and then scan the appropriate spool directory for mp3 files and generate the podcast rss on the fly. Again FeedPod’s libraries can be used to access any functionality that has already been written.<br />
iPodder could be configured to retrieve the feed from a pre-specified URL. Each user on the system could have a unique URL, or access the same URL after passing authentication parameters. When iPodder sends the request to the server, the servlet will process the request and return the content.</p>
<h4><strong>Give not this rotten orange to your friend</strong></h4>
<p>There are still additional issues to be resolved, namely:</p>
<ul>
<li>The mailet code as written may not be thread-safe owing to the dependencies on other libraries. This needs to be tested and fixed if necessary (for example, James may process a second email while the first email is still being written to file as mp3).</li>
<li>Need to understand James’ classloading architecture so that the dependencies can be located in the correct libraries. Currently, external libraries can be placed in james/lib, james/bin/lib or james/apps/james/SAR-INF/lib. Not sure how (or in what order) James loads classes from each of these locations. Also, James is an Avalon application, which means that Avalon acts as the container. This has some implications here as well.</li>
<li>James has a mailet passthrough option that allows multiple mailets to handle the same email. This flag may need to be set.</li>
<li>Would like to remove dependencies on FeedPod and code directly against the underlying libraries</li>
<li>Need to create proper procedures to access the RSS feeds in a secure manner (so that each user accesses his or her own podcast)</li>
<li>Solve any integration issues between James and Tomcat (should the mp3 files be written to a web location, or should the RSS generator read from a mail spool directory?)</li>
<li>Handle multiple content types (ex: text/plain, text/html, etc.). Can probably use java.net.ContentHandler for this. Feedpod also has a Html2Text class that may be useful here.</li>
<li>The mp3 folder needs to be refreshed after a certain period (daily? weekly?) or the podcast needs to pick up only the last n files to avoid overwhelming clients and servers.</li>
<li>Need to invent a naming scheme for the generated mp3 files so that they are unique. Right now, it’s coded to use:<br />
<a href="mailto:sender@host.com_subject_date">sender@host.com_subject_date</a> as the format.</li>
<li>FreeTTS can be improved with better voices and better voice modulation through some customization (ex: MBROLA). This would result in the generation of better sounding MP3’s.</li>
<li>etc.</li>
</ul>
<p>If you are interested in working on this project, or in examining the source code in further detail, please let me know via email.</p>
<h4><strong>Great floods have flown from simple sources</strong></h4>
<p>Pease use the following for reference while exploring the technologies behind the solution discussed in this article:</p>
<ul>
<li>Apache James mail server: <a href="http://james.apache.org/" target="_blank">http://james.apache.org/</a></li>
<li>FreeTTS text-to-speech engine: <a href="http://freetts.sourceforge.net/docs/index.php" target="_blank">http://freetts.sourceforge.net/docs/index.php</a></li>
<li>Tritonus JSAPI implementation: <a href="http://tritonus.org/" target="_blank">http://tritonus.org/</a></li>
<li>jid3 – A java ID3 implementation: <a href="http://jid3.blinkenlights.org/" target="_blank">http://jid3.blinkenlights.org/</a></li>
<li>The LAME project: <a href="http://lame.sourceforge.net/" target="_blank">http://lame.sourceforge.net/</a>; <a href="http://jthz.com/~lame/" target="_blank">http://jthz.com/~lame/</a></li>
<li>FeedPod: <a href="https://feedpod.dev.java.net/" target="_blank">https://feedpod.dev.java.net/</a></li>
<li>iPodder: <a href="http://ipodder.sourceforge.net/index.php" target="_blank">http://ipodder.sourceforge.net/index.php</a>. This is also the starting point for learning about podcasting.</li>
<li>Podifier: <a href="http://www.podifier.com/" target="_blank">http://www.podifier.com/</a></li>
</ul>
<p><strong>Also see</strong></p>
<ul>
<li>A couple of good articles on James:<br />
o <a href="http://www-128.ibm.com/developerworks/java/library/j-james1.html" target="_blank">http://www-128.ibm.com/developerworks/java/library/j-james1.html</a><br />
o <a href="http://www-128.ibm.com/developerworks/java/library/j-james2.html" target="_blank">http://www-128.ibm.com/developerworks/java/library/j-james2.html</a></li>
<li>Java Sound Resources: <a href="http://www.jsresources.org/faq_general.html" target="_blank">http://www.jsresources.org/faq_general.html</a></li>
<li>An introduction to using FreeTTS in your applications – sound-enabling your Ant build:<br />
<a href="http://javaswamy.blogspot.com/2004/10/adding-sound-to-boring-build.html" target="_blank">http://javaswamy.blogspot.com/2004/10/adding-sound-to-boring-build.html</a></li>
</ul>
<p><strong><em>Listing 1</em></strong></p>
<p>public void service(Mail incoming) {<br />
MailImpl email = (MailImpl) incoming;<br />
try {<br />
log(”in mp3 Mailet’s service method”); // Example to show how to log status messages</p>
<p>String outputFolder = “C:\\MP3″; // hard-coded for now; but can use input parameters<br />
File temp = new File(outputFolder);<br />
temp.mkdirs(); // create the directory if it doesn’t exist</p>
<p>// Extract the message portion of the email<br />
MimeMessage emailMessage = email.getMessage();</p>
<p>// Extract identifying information<br />
String fromAddress =<br />
((InternetAddress)emailMessage.getFrom()[0]).getAddress();</p>
<p>// Generate the filename for the audio file<br />
String basicFileName = (new StringBuilder()<br />
.append(outputFolder)<br />
.append(File.separator)<br />
.append(fromAddress)<br />
.append(”_”)<br />
.append(emailMessage.getSubject())<br />
.append(”_”)<br />
.append(DateFormat.getDateInstance().format(emailMessage.getSentDate())).toString());</p>
<p>String mp3FileName = (new StringBuilder()<br />
.append(basicFileName)<br />
.append(”.mp3″)).toString();</p>
<p>String wavFileName = (new StringBuilder()<br />
.append(basicFileName)<br />
.append(”.wav”)).toString();</p>
<p>// Compose the IDv3 tag for the mp3 file<br />
String title = emailMessage.getSubject();<br />
if (title == null)<br />
title = “No Title Available”;</p>
<p>String author = ((MailAddress) email.getSender()).getUser().toString();<br />
if (author == null) {<br />
author = “Ishi Mail2MP3″;<br />
}<br />
String year = (new StringBuilder()).append(”&#8221;).append(<br />
(new GregorianCalendar()).get(1)).toString();</p>
<p>String comment = “Ishi Mail2MP3″;<br />
String album = “Email’s Greatest Hits”;</p>
<p>// Get the message body<br />
String emailString = emailMessage.getContent().toString();<br />
if (emailString == null) {<br />
emailString = “There was no content in this email from ”<br />
+ email.getSender().toString();<br />
}</p>
<p>File mp3File = new File(mp3FileName);</p>
<p>try {<br />
// 1. Create a wav file using the TTS engine<br />
speakToFile(emailString, wavFileName);</p>
<p>// 2. Encode the wav file into MP3<br />
MP3Encoder.writeFile(wavFileName);</p>
<p>// 3. Add the IDv3 information<br />
MP3Encoder.writeID3(new File(mp3FileName), title, author, album, comment, year);</p>
<p>} catch (Exception e) {<br />
e.printStackTrace();</p>
<p>}<br />
} catch (Exception e) {<br />
e.printStackTrace();<br />
}<br />
}</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ishisystems.com/adventures-in-podcasting-with-apologies-to-shakespeare/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exception Handling &#8211; Know Your Responsibility</title>
		<link>http://www.ishisystems.com/exception-handling-know-your-responsibility/</link>
		<comments>http://www.ishisystems.com/exception-handling-know-your-responsibility/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 11:03:12 +0000</pubDate>
		<dc:creator>ishisystems</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[technical]]></category>

		<guid isPermaLink="false">http://www.ishisystems.com/?p=1470</guid>
		<description><![CDATA[Remember C/C++. Remember malloc, calloc, free, new, delete. You do? Good, because If you remember them, then, perhaps, you also remember how important they are, and their purpose: memory (de)allocation was your own responsibility and that they were a part...]]></description>
			<content:encoded><![CDATA[<p>Remember C/C++. Remember malloc, calloc, free, new, delete. You do? Good, because If you remember them, then, perhaps, you also remember how important they are, and their purpose: memory (de)allocation was your own responsibility and that they were a part of the programming logic. They were not syntactically required. Case in point, when programming in C/C++, you took care of memory yourself and that was required for your program to run and behave properly.<span id="more-1470"></span></p>
<p>Remember Java? Yes that’s the language most of us are programming in, these days. Remember exceptions? Of course you do. They are your responsibility! The importance of exception handling in your program is right up there with the importance of memory management in C/C++ programs. Lot of times they are syntactically required, but it is just too easy to work your way around it: Bury it! Do you? Hopefully not. Because that would be a crime, just like accessing an un-initialized pointer in a C program.</p>
<p>Without spending more original thoughts/sentences about programming philosophy here (that would be text for another article!), let me humbly suggest productive ways of handling exceptions in your programs. Now, I am not an authority on exception handling, or even programming. These are techniques I use and that I have learnt over a period of time, practicing exception handling and reading articles. By no means is this supposed to be a comprehensive coverage on the topic of exceptions. Do yourself a favor, give the last section “References and Suggested Readings” a second look!</p>
<h4>Exceptional Design!</h4>
<p>Exception Handling deserves thought as early as design time. Specifically, when identifying business objects in the system, one must always question if there is a possibility of a business object being unable to perform its function. Furthermore, one must also ask questions about the destiny of the exception raised under such circumstances. How must other business objects handle an instance of such an exception? Whether such business failures would lead to a “user-friendly” error message to the user or is the system capable of solving the problem &#8211; by fixing it or resorting to an alternate process? A design with such questions (and answers) in mind lays the foundations of a fault-tolerant, possibly even a “self-healing” system.</p>
<h4>Classification by Syntax: Checked Exceptions and Unchecked Exceptions</h4>
<p>Typically all exceptions you throw must be declared in your method signature. Exception to this rule is the RuntimeException. You can throw one when you like, without explicitly declaring that your method throws it. Also, any method you call potentially can throw this exception; the java compiler does not require you to check for this exception. Hence “Unchecked Exceptions”. Usually these exceptions are used in system errors: division by zero, deferencing a null pointer, bounds checking failure. Mostly you need not worry about them. By intent, such exceptions are not meant to be handled by the client. In general, if you encounter these when your code executes, it is probably a good idea to refactor it.</p>
<h4>Classification by Meaning: Technical Exceptions and Business Exceptions</h4>
<p>Technical exceptions arise out of technical failures. There’s a whole slew of them… “file not found”, “class not found”, “socket can not connect”, “database transaction failed”. Just to name a few. Business exceptions arise out of failures in business actions. Consider these business exceptions &#8211; “Configuration missing”, “Plug-in not found”, “Remote service unavailable” and “System busy, Please try your request later again”. One thing is clear, users do not care about technical exceptions. If you pay attention, you will notice a direct mapping between the technical exceptions and the business exceptions mentioned above. Subsequently, another thing becomes clear – all technical exceptions must translate to business exceptions before they reach the user. Business exceptions may also arise out of logical failures: “you do not have enough money in your account to buy your requested item: an Airbus A-340”.</p>
<h4>Throwing an exception</h4>
<p>So when you run into an error condition, what exception should you throw? Remember, the purpose of instantiating an exception object is not only to reflect a real-life physical or logical error condition, but to also provide as much detail as possible about this error condition. An exception class is just like any other class, except that one of its ancestors is the Throwable class. Several things become information to the client when it will catch this exception: The exception class name, the exception class package, the stack trace stored in it, any public properties you provide as extra information. Try to use pre-existing exception classes, if you can fully express the error condition with that class, otherwise you need to create a new exception class that addresses the need for you to be able to fully express the error condition. Consider a descriptive name. Another particularly useful guideline in choice of which exception to throw is: You should favor throwing exceptions which belong to the package that propagates them. This avoids undesirable package dependencies.</p>
<h4>Catches win matches; judging the exception</h4>
<p>Fielders in the game of cricket never have to make a decision about whether to catch, and what to do after catching. You, as a Java programmer, have an advantage though, you tell the compiler about your intent to catch, and it is guaranteed! So what must you do when you catch an exception? You judge its meaning. The first point of judgment is based on the exception class itself. You may choose to ignore it (you do not try to catch it, so compiler makes you declare that you throw it). You may choose to catch, wrap and propagate (you create a new exception – one which reflects your perspective of the problem, but as details, contains the original exception object) or you could handle it (for ex. File not found in /home/foo/etc, try with /etc next). Most well designed exception classes provide a good description of what happened using exception properties. This information, when applied to your well defined business logic, becomes a basis of what needs to be done when you want to catch, wrap &amp; propagate or handle the exception.</p>
<h4>Encapsulation</h4>
<p>One important observation to make when you ignore an exception/propagate it – by declaring that you throw it, is that the client becomes aware/ must be aware of this particular exception class. Done carelessly, this can lead to breaking encapsulation in your design. For instance, you write a data access layer, which can fetch data from a database. Needless to say, if the client needs to be aware of the exceptions you encounter (ex. the ubiquitous SQLException), then you have failed to encapsulate the business function of your object. Perhaps a new exception class needs to be written: DataAccessExeception or something akin to that.</p>
<p>On a closing note for this article, I once again invite you to read the articles mentioned in “References and Suggested Readings” section below.</p>
<p><strong>References and Suggested Readings</strong></p>
<ul>
<li>Best Practices for Exception Handling<br />
<a href="http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html" target="_blank">http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html</a></li>
<li>Best Practices in EJB Exception Handling<br />
<a href="http://www-106.ibm.com/developerworks/java/library/j-ejbexcept.html" target="_blank">http://www-106.ibm.com/developerworks/java/library/j-ejbexcept.html</a></li>
<li>Beware the dangers of generic exceptions<br />
<a href="http://www.javaworld.com/javaworld/jw-10-2003/jw-1003-generics.html" target="_blank">http://www.javaworld.com/javaworld/jw-10-2003/jw-1003-generics.html</a></li>
<li>Performance improvement techniques in Exceptions<br />
<a href="http://www.precisejava.com/javaperf/j2se/Exceptions.htm" target="_blank">http://www.precisejava.com/javaperf/j2se/Exceptions.htm</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ishisystems.com/exception-handling-know-your-responsibility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Applying Crosscutting Concerns to Problem Solving</title>
		<link>http://www.ishisystems.com/applying-crosscutting-concerns-to-problem-solving/</link>
		<comments>http://www.ishisystems.com/applying-crosscutting-concerns-to-problem-solving/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 08:33:03 +0000</pubDate>
		<dc:creator>ishisystems</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[technical]]></category>

		<guid isPermaLink="false">http://www.ishisystems.com/?p=1454</guid>
		<description><![CDATA[Figure 1: The blind men and the elephant Quite a few of us are familiar with the ancient story of the blind men and the elephant. Each man visualized the elephant based on his own perspective, and none of them...]]></description>
			<content:encoded><![CDATA[<table>
<tbody>
<tr>
<td><img class="alignleft size-full wp-image-1457" title="elephant" src="http://www.ishisystems.com/wp-content/uploads/2011/03/elephant.jpg" alt="" width="390" height="244" /><br />
<em><strong>Figure 1: The blind men and the elephant</strong></em></td>
<td>Quite a few of us are familiar with the ancient story of the blind men and the elephant. Each man visualized the elephant based on his own perspective, and none of them had any idea what the entire elephant looked like. As a child, this was narrated to me as a cautionary tale –- don’t make decisions without knowing all the facts.</td>
</tr>
</tbody>
</table>
<p><span id="more-1454"></span></p>
<p>In modern times, the approach of looking at complex problems by focusing on one particular aspect of the problem has become valued as a thinking tool. Sometimes, a problem may be too difficult to understand or its scope may be too large to grasp unless one looks at a little piece at a time. In this article, I look at some of the ways in which we can use this technique to become better problem solvers.</p>
<p>One of the problems I face when working on new projects is that I walk in the door and am confronted with a mountain of code to understand and work with. When I was less experienced, I used to apply a brute force method — walk through the code with the help of a debugger, and test out all the functionality of the application until I understood exactly what each module, class and method did. However, this approach requires time, and that is not always a luxury one has. One is usually expected to jump right in and be productive.</p>
<h4>What light through yonder window shines?</h4>
<p>One of the tools that I’ve found to be helpful in assisting me with code comprehension is Juliet (see the Resources section for more information). Juliet is not merely a code browser. Given a codebase, Juliet parses the code to discover relationships that may not immediately be obvious. For example, I’ve sometimes provided Juliet with supplementary code, such as the JDK, or weblogic.jar in order to discover how application code relates to the deployment platform.</p>
<p><img title="Juliet" src="http://www.ishisystems.com/wp-content/themes/ishi/images/juliet.jpg" alt="Juliet" /></p>
<p><strong><em>Figure 2: Juliet in action</em></strong></p>
<p>When Juliet analyzes the code, it does so by focusing on a particular perspective of the code that I am interested in. Juliet is even considerate enough to let me hide comments and collapse methods down to their signatures. As you can tell, this is a huge improvement over the brute force method described earlier. For example, if I want to know exactly what code fragment A does, and how it relates to code fragment B, Juliet helps me figure it out. All tokens (variables, methods, classes, etc.) are hyperlinked so that I can instantly browse to the artifact of choice. Figure 2 is a screenshot of Juliet. (Who says you can’t design great user interfaces using AWT?) This perspective-based approach lets me focus on what’s important and neglect other code that may be unnecessary for my analysis.</p>
<h4>Everything under the Sun is in tune</h4>
<p>The idea that a codebase can be examined using a set of “perspectives” is familiar to anyone who has used Eclipse for development. The designers of Eclipse understand that as a developer, I don’t want to see my entire codebase all at once. I might perform many different actions with the same code. For example, I might want to interact with the codebase using a ‘work-with-scm-codebase’ mentality. If so, I can easily switch Eclipse to CVS perspective, and perform all my actions that are relevant to the SCM tool. Or, I might want to set up datasources for my J2EE application and run some test queries against a database. To do this, I can switch to a Database view. This focuses my efforts. I don’t have to sort through different menus trying to find the functionality I want (Is it under Tools? Edit?). I know that when I switch perspectives, I am working with a particular mindset, and all the actions I perform on the code will be relevant to that mindset.</p>
<h4>One word, my boy: aspects!</h4>
<p>This approach has been applied to software development in the form of aspect-oriented programming (AOP). AOP is a concept that is complementary to OOP. AOP gives us a way to deal with concerns (AOP calls these crosscutting concerns) that affect multiple objects all at the same time. Common examples include transactions, security and logging. You need to handle transactions in multiple objects and in multiple methods across your code. The same goes for logging. However, transactions and logging have nothing to do with the core business logic that you are using objects (and OOP) for. They are complementary concerns. AOP lets you deal with these concerns by viewing them as ‘aspects’ of your code. Doing this helps you focus on problems that span objects without getting sidetracked by the object-orientedness of your code.<br />
If aspects are such a useful way to look at code, does it make sense to apply this way of thinking to everyday problems? In other words, can we train ourselves to think in aspects, and therefore become more effective thinkers? This would allow us to migrate this idea out of the realm of programming into the real world, allowing us to address problems that don’t traditionally require code to solve.</p>
<h4>Six hats to rule them all</h4>
<p>As it turns out, this is not such a far-fetched idea. In his book, Six Thinking Hats, Edward de Bono argues that we can train ourselves to think exactly like this. He contends that doing so can make us better thinkers and allow us to solve problems faster. This approach has been tested in real world situations, and in many instances has made it easier for groups of people to make decisions. It has also facilitated better communication among group members. Mr. de Bono encourages readers of his book to visualize different modes of thinking as hats of different colors. Then, when confronted with a problem, the thinker can mentally put on a relevant hat and invoke the method of thinking associated with that hat. This practice helps avoid the chaos that is caused when one tries to look at a problem in many different ways all at once.</p>
<p>As we’ve seen, the concept of crosscutting concerns can be adopted as a problem-solving tool in many different ways. At a fundamental level, it encourages a way of thinking about the world in terms of a particular perspective, so that common aspects of complex problems can be addressed. As developers, aspect-oriented programming can enhance our thinking and give us another way to model systems (complementing OOP and design patterns). With this in mind, I would encourage you to seek out and understand frameworks such as AspectJ, AspectWerkz and Spring-AOP that provide support for AOP. I also encourage you to read Six Thinking Hats to understand how you can apply aspect-oriented thinking to your own life.</p>
<p><strong>Resources</strong></p>
<ul>
<li>Juliet can be downloaded from <a href="http://www.infotectonica.com/" target="_blank">http://www.infotectonica.com/</a></li>
<li>Learn more about perspectives in the Eclipse platform at:<br />
<a href="http://www.eclipse.org/articles/using-perspectives/PerspectiveArticle.html" target="_blank">http://www.eclipse.org/articles/using-perspectives/PerspectiveArticle.html</a></li>
<li>Learn about AspectJ at: <a href="http://www.eclipse.org/aspectj/" target="_blank">http://www.eclipse.org/aspectj/</a></li>
<li>AspectWerkz can be found at: <a href="http://aspectwerkz.codehaus.org/" target="_blank">http://aspectwerkz.codehaus.org/</a></li>
<li>Spring AOP is discussed in the Spring documentation at:<a href="http://www.springframework.org/docs/reference/aop.html" target="_blank">http://www.springframework.org/docs/reference/aop.html</a></li>
<li>I want my AOP! is a series of JavaWorld articles on AOP using AspectJ:</li>
<li><a href="http://www.javaworld.com/javaworld/" target="_blank">www.javaworld.com/javaworld/</a> jw-01-2002/jw-0118-aspect.html</li>
<li>O’Reilly’s OnJava site has an introduction to Spring-AOP:<a href="http://www.onjava.com/pub/a/onjava/2004/07/14/springaop.html" target="_blank">http://www.onjava.com/pub/a/onjava/2004/07/14/springaop.html</a></li>
<li>You can read the first chapter of Six Thinking Hats here:<br />
<a href="http://www.twbookmark.com/books/62/0316177911/chapter_excerpt9537.html" target="_blank">http://www.twbookmark.com/books/62/0316177911/chapter_excerpt9537.html</a></li>
</ul>
<p><strong>Entertainment</strong><br />
Some amusement might be found by deciphering the cultural references alluded to in the section headings of this article.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ishisystems.com/applying-crosscutting-concerns-to-problem-solving/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blogolution – Part 2</title>
		<link>http://www.ishisystems.com/blogolution-part-1-2/</link>
		<comments>http://www.ishisystems.com/blogolution-part-1-2/#comments</comments>
		<pubDate>Fri, 26 Oct 2007 10:35:03 +0000</pubDate>
		<dc:creator>ishisystems</dc:creator>
				<category><![CDATA[Blogging & Social Media]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[blogs]]></category>

		<guid isPermaLink="false">http://www.ishisystems.com/?p=1474</guid>
		<description><![CDATA[In the first part of this article, I gave a gentle introduction to the world of blogging (something I referred to as Blogopolis in that issue). I primarily concentrated on a couple of aspects of blogging – it’s onset and what’s...]]></description>
			<content:encoded><![CDATA[<p>In the first part of this article, I gave a gentle introduction to the world of blogging (something I referred to as Blogopolis in that issue). I primarily concentrated on a couple of aspects of blogging – it’s onset and what’s being blogged.</p>
<div id="content_left">
<div>
<p><span id="more-1474"></span></p>
<p>In this article, I will attempt to &#8211; classify blogs and bring up issues that have arisen.</p>
<h3>Classifying Blogs</h3>
<p>Let me restate the meaning of the word blog from the first part of this article &#8211; “To put it straight without much elaboration, a blog is a frequent (which depends from blogger to blogger) record/commentary/small essay/article/blurb about content on the web, personal experience, observations or public events possibly with an option of readers feedback, which may or may not be used.” It is more than clear that this is a very broad, dangerously close to vague, definition at best. Classifying something which is vaguely defined is not easy either. For the evolution of this activity of internet publishing has affected other methods of internet publishing, bringing them closer – on the fringe – of the Blogosphere. Hence, there exist items in the classification which existed even before the word “blog” was coined! People blogged before they knew that they were blogging. However, blogging became mainstream when the blogging tools made the task of adding a blog entry easier than composing email.</p>
<dl>
<dt>So, anyhow, here is the classification</dt>
<dd>
<ul>
<li>Community Blogs &#8211; Blogging as a collective. The topics and access to these are usually restricted. Somewhat of a relative of a mailing list.</li>
<li>Personal Blogs/Journals &#8211; Bloggers typically use personal blogs to express individual day-to-day activities and thoughts.</li>
<li>PhotoBlogs &#8211; The primary content posted on these blogs is pictures.</li>
<li>Moblogs &#8211; Moblogging allows bloggers to add postings to their blog sites from almost anywhere at any time, using a cellphone, RIM Blackberry, or wireless handheld computer.</li>
<li>Wikis &#8211; Unstructured, semi autolinking, collective/individual blog. Unlike most other blogs, wiki’s are not sorted by date and are very famous in work situations.</li>
</ul>
</dd>
</dl>
<p>The success of blogging phenomenon is undeniable. Quite expectedly, their is a push to further the blogolution. Creative juices have flown all around… I picked up the scent of this one - <a href="http://www.hpl.hp.com/semweb/biblio#Semantic%20blogging" target="_blank">Semantic Blogs at Hewlett Packard</a>. Semantic Blogs attempt to evolve the concept of blogs by making the underlying meta-data richer &#8211; with semantics. Something akin to the evolution from flat-files to XML.</p>
<h3>Motivations, or lack there off, for blogging</h3>
<p>This is a tough one. Why blog? If I told you I own a printing press and would print anything you want, whenever you want and distribute it out in any public places you want, in all the cities you want with a “Take One” board by it – all for free, would you blog? If I had not known of blogs, I would have guessed most people would have said “No”. But, knowing blogs, even this is a hard question.</p>
<p>Every individual, to a certain degree, desires that their views, their thoughts, their voice be heard &#8211; for various reasons. Blogging provides an organized, flexible, open and easily accessible infrastructure for people to do so. Easily accessible is probably an understatement &#8211; especially when compared to other publishing media. This infrastructure provides the shortest part from that individual’s head to a publishable media. That’s why blogging is such a revolutionary concept &#8211; and a reality. Yet, some people do not blog. They too have thoughts they would like to share &#8211; but there’s something that’s stopping them from doing so. Some of these possible hurdles, which people are unable to cross, are discussed in the following section.</p>
<h3>Issues with Blogging</h3>
<blockquote>
<h4>Privacy, anonymity, audiance selection and access control</h4>
<blockquote><p>I don’t want everything I say heard by everyone. If I blog, I wouldn’t want everything I blog read by just any one. The level and type of access control desired depends on the poster of the content and the content itself. To people who are more aware of mechanisms of security, monitoring/surviellane and of-course the power of obtaining such information from the media operator by instrument of law, there is a significant problem with blogging. After all, we live in the age where surviellance is at it’s unprecedented high &#8211; The Echelon Project, The PATRIOT Act in the US, The U.S. Total Information Awareness Act. To post your opinion on the web… you are feeding information about yourself straight into the mouth’s of these surviellance systems. A woman in Canada suffered consequences of writing an email to her friend about her son “bombing” in the school. With all due respect to the governing bodies, a lot of people do not trust them &#8211; in several regards. Hence, such people are less likely to blog. By the same argument, it might be said that people apathetic about privacy concerns are more likely to blog.</p>
<p>Another view of this problem: You blogged something yesterday, now you’re ashamed of it (for any reason); and you can not erase it! This is a classic problem. In context of online media, it’s effect is elevated by the heavily archived nature of the Internet. If you blog, be ready to own up what you said yesterday. You must always be careful what you want to put down in your permanent record! On the flip side &#8211; one should be able to express what he stands for. A common advice for ages has been “think twice before your thoughts leave your lips” … well the new age version goes like &#8211; “think thrice before your thoughts become permanent in your blog”. I like to call it the responsibility of a blogger to herself.</p>
<p>A blogger should also respect the privacy of the target of his blog. If you blog about your children/parents/friends/significant other, you must respect their privacy.</p>
<p>A lot of bloggers, who care about <strong>social anonymity</strong>, blog anonymously. I must point out though that <strong>real anonymity</strong> on the web practically doesn’t exist &#8211; did you know RIAA is suing quite a few hundreds of “John Doe”s (I wonder when someone will sue RIAA on this for gender bias).</p></blockquote>
<h4>Lazyness</h4>
<blockquote><p>Then there are people who just don’t find it worth their effort. Everyone know the mysterious ways lazyness works.</p></blockquote>
<h4>Choosing between doing and observing</h4>
<blockquote><p>A lot of blogging is penning down observations. In a lot of cases, observation is followed by an act &#8211; based on the observation. But, that’s not a given as well. So a lot of people merely observe and contribute the the huge pool of information &#8211; a lot of it duplicated. I must point out to another group of people here. And these people have chosen to contribute to another pool &#8211; that of source code. Blogging takes time, and some people would rather spend their time contributing in another way. Then there are people who belong to both.</p></blockquote>
<h4>Losing the spirit</h4>
<blockquote><p>One important aspect of blogging is the concept of independent thought, originality. In a way, this is the spirit of blogging. To know that people read your writings is a good ego boost as well. Somewhere down the line, bloggers get affected by their audiences. Suddenly, they become involved in seeing their numbers &#8211; how many readers, how many referrers, even how much money through ads &#8211; and eventually lose the spirit. It’s an individual reaction &#8211; yet worth mentioning.</p></blockquote>
<h4>Apathy towards blogging</h4>
<blockquote><p>Finally, a real life catch all reason for not blogging. Some people just don’t want to! THey just don’t care, or they just don’t want to. Also some poeple just don’t know about blogs &#8211; and &#8211; in related news, a recent slashdot poll explains some of this behaviour!</p></blockquote>
</blockquote>
<h3>Corporate acceptance</h3>
<p>The emergence of blogging has not been unnoticed by the corporate world. Afterall, they must look into all possible ways to make their organization work better… and make more moola. Blogging has certain obvious advantages for them &#8211; it improves employee interaction &#8211; horizontal and vertical, build knowledge bases &#8211; extract the corporate knowledge living in the heads of the people to the digitized medium. Another great benefit is ability to give the company a different, more human face, through it’s employees, one which is perhaps more welcome by the swarms of blog readers. It is also quite effective when companies provide asynchronous communications about progress of work to it’s clients through blog like media. The clients can keep track of the progress and can avoid unneccessary chatter &#8211; trivial and irrelevant questions need not be discussed &#8211; rather their answers evident from the blogs.</p>
<p>One of the most successful forms of blogging that has found acceptance in corporate world is Wiki. The ease of putting something down in a wiki is simply irresistable. One of the most interesting thing about a wiki is that it’s not structure enforcing. It’s flexibility in expressing the content desired to be published is unparalleled.</p>
<h3>Useful articles &amp; blogs</h3>
<blockquote>
<h4>Blogging</h4>
<ul>
<li><a href="http://www.content-wire.com/FreshPicks/Index.cfm?ccs=86&amp;cs=2919" target="_blank">History of Blogs 101</a></li>
</ul>
<h4>Moblogs</h4>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Moblog" target="_blank">Moblog</a></li>
<li><a href="http://news.com.com/Nokia+releases+%27moblog%27+camera+phone/2100-1039_3-5223618.html?tag=nefd.top" target="_blank">http://news.com.com/Nokia+releases+%27moblog%27+camera+phone/2100-1039_3-5223618.html?tag=nefd.top</a></li>
<li><a href="http://www.boston.com/business/personalfinance/articles/2004/04/12/blogging_now_wireless_with_photos?mode=PF" target="_blank">Blogging now wireless, with photos</a></li>
<li><a href="http://www.photoblogs.org/" target="_blank">PhotoBlogs</a></li>
</ul>
<h4>Privacy, anonymity, audiance selection and access control</h4>
<ul>
<li><a href="http://news.bbc.co.uk/1/hi/magazine/3638733.stm" target="_blank">Do babyblogs violate children’s privacy?</a></li>
<li><a href="http://news.com.com/RIAA+sues+493+more+music+swappers/2100-1027_3-5219114.html?tag=st.rn" target="_blank">RIAA after John Does</a></li>
<li><a href="http://news.com.com/RIAA+takes+hundreds+more+%27John+Does%27+to+court/2100-1027_3-5243587.html?tag=nefd.pop" target="_blank">RIAA after more John Does</a></li>
<li><a href="http://slashdot.org/pollBooth.pl?qid=1134" target="_blank">Slashdot poll &#8211; In general, most people are</a></li>
</ul>
<h4>Corporate Acceptance</h4>
<ul>
<li><a href="http://www.economist.com/science/tq/displayStory.cfm?story_id=2477025" target="_blank">Blogging goes to work</a></li>
<li><a href="http://www.cio.com/archive/051504/work.html" target="_blank">The Virtues of Chitchat</a></li>
<li><a href="http://www.content-wire.com/FreshPicks/Index.cfm?ccs=86&amp;cs=2919" target="_blank">Personal Publishing For Corporate Blogging</a></li>
<li><a href="http://singletrack.org/randal/blog/archives/000591.html" target="_blank">Kblogs At Work</a></li>
<li><a href="http://www.echelonwatch.org/" target="_blank">ECHELON Project</a></li>
<li><a href="http://www.eff.org/Privacy/Surveillance/Terrorism/20011031_eff_usa_patriot_analysis.html" target="_blank">USA PATRIOT Act Privacy Analysis</a></li>
<li><a href="http://www.eff.org/Privacy/TIA/" target="_blank">Total Information Awareness</a></li>
</ul>
</blockquote>
</div>
</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ishisystems.com/blogolution-part-1-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blogolution &#8211; Part 1</title>
		<link>http://www.ishisystems.com/blogolution-part-1/</link>
		<comments>http://www.ishisystems.com/blogolution-part-1/#comments</comments>
		<pubDate>Tue, 25 Sep 2007 09:50:19 +0000</pubDate>
		<dc:creator>ishisystems</dc:creator>
				<category><![CDATA[Blogging & Social Media]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[blogs]]></category>

		<guid isPermaLink="false">http://www.ishisystems.com/?p=1472</guid>
		<description><![CDATA[Believe it or not, I spent about 10 minutes trying to find the right title. I probably would never make it as a “happy-go-lucky blogger”. Blogolution: “Blog Revolution”, “Blog Evolution”, or “Blog Dissolution”. Lets take a look at what a...]]></description>
			<content:encoded><![CDATA[<p>Believe it or not, I spent about 10 minutes trying to find the right title. I probably would never make it as a “happy-go-lucky blogger”. Blogolution: “Blog Revolution”, “Blog Evolution”, or “Blog Dissolution”. Lets take a look at what a blog is, the onset of blogging and what makes it the latest Internet revolution.<span id="more-1472"></span></p>
<p>Wikipedia has an excellent entry for Blog, which I wholeheartedly recommend.</p>
<h4>Blog &#8211; the word.</h4>
<p>The word blog is simply the words “web log” processed through a lazy person word compressor algorithm. The word blogging is simply the same treatment applied to “web logging”.</p>
<h4>Blog &#8211; the meaning.</h4>
<p>To put it straight without much elaboration, a blog is a frequent (which depends from blogger to blogger) record/commentary/small essay/article/blurb about content on the web, personal experience, observations or public events possibly with an option of readers feedback, which may or may not be used.</p>
<h4>The onset.</h4>
<p>The roots of blogging lie in public communication and a need for self expression. Historically, public writing has been somewhat regulated/controlled by the authority of the media in context. In the past, the only communication devices available to a person have been telephone, ham radios and the Internet. Although the user is almost in full control of these devices and the communications made using them, telephone sadly lack the ability to broadcast. That leaves the ham radios and Internet as practical options to provide the user with a virtual dais to stand on and opine away. The vehicle of choice to deliver, however, is the Internet. It is used by the corporate world, the hacker world, as well as the philosophists, and families; the list goes on.<br />
In the Internet world, the predecessor to blogs were perhaps journals. Another prominent influence was the popularity of message boards: Choose a topic, start one, host it and watch the readers post their content (Rules, guidelines and limitations vary). Another definite predecessor of blogs is the “homepage” &#8211; a nineties phenomenon that sprouted up everywhere. One reason why blogs have succeeded more than either of these is perhaps because the dynamic web has evolved to the point where the content has finally gained more importance than the delivery mechanism. Public content posters have grown used to these technologies, the technology of public posting is not the issue, the issue is what they want to post. Blogging is made easy by low-cost, easy-to-use technology that lets anyone — not just propellor-heads — be a publisher.</p>
<h4>Welcome to Blogopolis</h4>
<p>In the online city of Blogopolis, you are what you blog, what you blog about; it’s a cathartic experience (the word “blog” even sounds like the meaning of cathartic!). As a citizen of Blogopolis &#8211; an online persona &#8211; free to express oneself solely through the written word…and perhaps pictures. In Blogopolis, you can find a blog on just about any subject. The content varies from the blog that Martin Fowler writes about object oriented development and design patterns to blogs written by people about the progress they make in the latest diet they are on. You can read blogs of CSS gurus as well as blogs containing the ramblings of an average person living out the ordinary life. People write blogs about the work they did in the office today, they write blogs to express their political agenda, or chronicle the events of their presidential campaign, and when they loose, they may write blogs encouraging readers not to let certain people back in the White House. They are writing a blow-by-blow account of the Iraq war and about their visit to Falluja in Iraq. People are writing blogs because they got shut out as journalists and this is their chosen media of publishing now. And need I mention, people are writing blogs about other blogs! Check out the links section at the end of the article to see some interesting sampling of blogs.</p>
<h4>Blog &#8211; Why some people don’t.</h4>
<p>I’ll make some guesses here, but I shall elaborate in the next article.<br />
You’re really lazy. You love privacy. Your life is not worth talking about. Legal restrictions. Fear of legal issues.</p>
<h4>Blogminator.</h4>
<p>No, this paragraph is not about a blog about Arnold Schwarzenegger, this in fact just means that this paragraph is the terminator of this blog article.</p>
<p><strong>Oh I almost forgot… The Links section.</strong></p>
<ul>
<li>The Martin Fowler Blog - <a href="http://martinfowler.com/bliki/" target="_blank">http://martinfowler.com/bliki/</a></li>
<li>The Diet Blogs - <a href="http://www.google.com/search?q=diet+blog" target="_blank">http://www.google.com/search?q=diet+blog</a></li>
<li>The CSS Blogs - <a href="http://www.google.com/search?q=CSS+blog" target="_blank">http://www.google.com/search?q=CSS+blog</a></li>
<li>Daily Life Blogs - <a href="http://www.google.com/search?q=daily+life+blog" target="_blank">http://www.google.com/search?q=daily+life+blog</a></li>
<li>The Political Blogs - <a href="http://www.google.com/search?q=presidential+campaign+blog" target="_blank">http://www.google.com/search?q=presidential+campaign+blog</a></li>
<li>More Blogs - <a href="http://www.google.com/search?q=blogs" target="_blank">http://www.google.com/search?q=blogs</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ishisystems.com/blogolution-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache Beehive Project</title>
		<link>http://www.ishisystems.com/apache-beehive-project/</link>
		<comments>http://www.ishisystems.com/apache-beehive-project/#comments</comments>
		<pubDate>Sun, 25 Mar 2007 12:57:36 +0000</pubDate>
		<dc:creator>ishisystems</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[technical]]></category>

		<guid isPermaLink="false">http://www.ishisystems.com/?p=1467</guid>
		<description><![CDATA[Introduction When BEA released WebLogic Platform 8.1, they introduced an enhanced version of Workshop 8.1. Workshop 8.1 was not just another IDE but an IDE plus an application development framework all built into one solution. Even though BEA might deny...]]></description>
			<content:encoded><![CDATA[<h4><strong>Introduction</strong></h4>
<p>When BEA released WebLogic Platform 8.1, they introduced an enhanced version of Workshop 8.1. Workshop 8.1 was not just another IDE but an IDE plus an application development framework all built into one solution.<span id="more-1467"></span></p>
<p>Even though BEA might deny allegations that Workshop is based on Microsoft’s Visual development tools, the fact remains that the primary Architect on this project was Adam Bosworth, who formerly worked for Microsoft.</p>
<p>The primary intention BEA had in introducing an application development framework was to make it easier for developers to develop complex web applications, manipulate XML, use web services and integrate with 3rd party resources or other applications.</p>
<p>In May 2004, BEA announced that it was going to extract the application development framework from Workshop and make it an Open Source initiative. It also announced that this initiative would be an Apache project. It would be called the Beehive project.</p>
<h4><strong>Overview</strong></h4>
<p>The Beehive project consists of the following components:<br />
1. Page Flows<br />
2. Controls<br />
3. Java Web Services<br />
4. XML Beans (this is not considered part of the Beehive project but will be packaged in the first release)</p>
<p>The figure below shows how all these components all fit together.</p>
<p><a href="http://www.ishisystems.com/wp-content/uploads/2011/03/beehive-framework-resized.jpg"><img class="aligncenter size-full wp-image-1468" title="beehive-framework-resized" src="http://www.ishisystems.com/wp-content/uploads/2011/03/beehive-framework-resized.jpg" alt="" width="572" height="242" /></a></p>
<p>&nbsp;</p>
<p><strong><em>Source: BEA dev2dev website</em></strong></p>
<h4><strong>Architecture</strong></h4>
<p>The Beehive implementation is dependant on JDK 1.5 (or also called J2SE 5.0). JDK 1.5 introduces annotations to the Java language. Annotations can be thought of as meta-data on Java classes. The advantages of such an approach (i.e. annotations) are that any existing Java class/component can be transformed to expose functionality based on the requirements.</p>
<p>Beehive heavily relies on annotations. This is different from the implementation that ships with Workshop 8.1 as no annotations were used. Also Workshop 8.1 is JDK 1.4 compliant. Beehive also exposes all its interfaces as simple Java Beans (POJOs).</p>
<h4><strong>Details</strong></h4>
<p>In this section we will cover details of every component that is part of the Beehive initiative.</p>
<ol>
<li><strong>XML Beans</strong><br />
XML beans are a Java representation of XML documents. Most of developers find the need to manipulate XML in their applications. Technologies like JAXB help developers bind XML to Java objects. But how XML Beans differ is that they treat Java Beans and XML as one entity. So when a developer modifies the Java Object using accessor methods like setters, the underlying XML document is modified. The advantages of such an approach is:<br />
• Ease of use<br />
• Developers focusing on solving the business problems rather than technological nuances</li>
<li><strong>Controls</strong><br />
Controls are a mechanism of exposing interfaces to either 3rd party applications/projects, components or simple Java APIs. The advantage of such an approach is the ability for developers to use controls to integrate with existing functionality or APIs rather than re-writing all the logic again.&nbsp;</p>
<p>BEA has tons of pre-written controls that ship with Workshop 8.1. Examples of common controls are:<br />
• Documentum Controls<br />
• JDBC Controls<br />
• Entity Bean Controls<br />
• JMS Controls<br />
• WebSphere MQ Controls</p>
<p>Another benefit is developers can now share components by exposing their code as a control. Controls have properties (implemented as member variables) and methods (providing the business functionality).</p>
<p>Example: With a JDBC control, a developer would not need to worry about opening and cleaning up of connections but would just be required to provide the SQL and get the result.</li>
<li><strong>Java Web Services</strong><br />
Java Web Services is a mechanism to expose any Java Component (or a simple class) as a Web Service. Again this is done through the use of annotations.&nbsp;</p>
<p>This enables developers to concentrate on the business aspect of the solution rather than focusing on how web services work, how marshalling/un-marshalling is handled etc.</p>
<p>Another advantage is the ability for application developers to expose existing functionality as web services.</li>
<li><strong>Page Flows</strong><br />
Page Flows is an easy-to-use web development framework. It is built on top of the Struts Programming Model.&nbsp;</p>
<p>Beehive uses annotations on Java Beans to represent the flow of the application. The use of annotations replaces the need for Struts developers to define the struts-config.xml An IDE like Workshop adds benefits like visually being able to create a flow for a web application.</li>
</ol>
<p><strong><em>Example 1</em></strong><br />
public class UserRegistrationController<br />
extends PageFlowController<br />
{</p>
<p>/**<br />
* @jpf:action<br />
* @jpf:forward name=”getAddress”<br />
*              path=”address.jsp”<br />
*/<br />
public Forward name_next( … )<br />
{<br />
…</p>
<p>return new Forward(”getAddress”);<br />
}</p>
<p>…<br />
}</p>
<p><strong><em>Source: BEA website</em></strong></p>
<p>Note the highlighted code. Annotations are built into the Java class to represent what page needs to be called.</p>
<p>Page Flows are a grouping of JSPs and actions to provide functionality to the end-users. A web application generally consists of multiple modules. Each web module in Beehive can be implemented as a Page Flow. There exists a master Page Flow that links all the modules together. Page Flows correspond to the concept of modules in Struts.</p>
<h4><strong>Conclusion</strong></h4>
<p>Beehive is still nascent. But the concept is sound. Developers have always had problems with the technical implementation rather than focusing on delivering the solution. Beehive makes it easier for developers to use technologies like Struts, XML, JMS and Web Services. Developers can now focus on the “what” rather than the “how”.</p>
<p><strong>References</strong></p>
<p><a href="http://incubator.apache.org/projects/beehive.html/" target="_blank">http://incubator.apache.org/projects/beehive.html/</a><br />
<a href="http://www.controlhaus.org/" target="_blank">http://www.controlhaus.org/</a><br />
<a href="http://www.oracle.com/technetwork/middleware/beehive/platform-098968.html" target="_blank">http://www.oracle.com/technetwork/middleware/beehive/platform-098968.html</a><br />
<a href="http://www.eclipse.org/proposals/eclipse-pollinate/" target="_blank">http://www.eclipse.org/proposals/eclipse-pollinate/</a><br />
<a href="http://java.sun.com/j2se/1.5.0/index.jsp" target="_blank">http://java.sun.com/j2se/1.5.0/index.jsp</a><br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ishisystems.com/apache-beehive-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
