<?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>Dave&#039;s Reflections</title>
	<atom:link href="http://monead.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://monead.com/blog</link>
	<description></description>
	<lastBuildDate>Sun, 05 Sep 2010 03:25:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>A Dark Welcome to York Beach</title>
		<link>http://monead.com/blog/?p=644</link>
		<comments>http://monead.com/blog/?p=644#comments</comments>
		<pubDate>Sun, 05 Sep 2010 01:56:06 +0000</pubDate>
		<dc:creator>David Read</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[beach]]></category>
		<category><![CDATA[Maine]]></category>
		<category><![CDATA[Nubble Light]]></category>
		<category><![CDATA[Ogunquit Playhouse]]></category>
		<category><![CDATA[Spamalot]]></category>
		<category><![CDATA[vacation]]></category>
		<category><![CDATA[York Beach]]></category>

		<guid isPermaLink="false">http://monead.com/blog/?p=644</guid>
		<description><![CDATA[It was an unusual start to our vacation in York Beach, Maine this year.  We arrived on Saturday afternoon, earlier than usual.  Our efficient start had paid off and we found that there was ample time after unpacking to go to the beach.  As night settled in we noticed a strange absence…the Cape Neddick Lighthouse [...]]]></description>
			<content:encoded><![CDATA[<p style="padding-top: 14px;">It was an unusual start to our vacation in <strong>York Beach, Maine</strong> this year.  We arrived on Saturday afternoon, earlier than usual.  Our efficient start had paid off and we found that there was ample time after unpacking to go to the beach.  As night settled in we noticed a strange absence…<strong><em>the <a href="http://en.wikipedia.org/wiki/Cape_Neddick_Light" target="_new">Cape Neddick Lighthouse</a> (Nubble Light) was dark!</em></strong></p>
<p>I&#8217;ve been coming up to York Beach almost every summer for over 40 years.  This was the first time I had ever seen, or rather not seen, the light operating.  I did what anyone in 2010 does when something strange happens, I checked Google.  However after searching for news related to this &#8220;outage&#8221; I came up empty.  The Town of York website was silent on the issue as was a local news website.</p>
<p>The blackout continued on through Sunday and Monday.  On Tuesday morning we noticed that the light was back in operation.  Whether there was an electrical issue or a burned out light bulb, it was apparently resolved early Tuesday.  I sit here writing this particular paragraph on Tuesday evening with the light operating in its typical and (usually) reliable manner.  Maybe someday I&#8217;ll learn what happened.</p>
<p>Beyond the mystery of the lighthouse, it was an unusually warm week in York.  Upper 80s and lower 90s prevailed each day.  For several days there wasn&#8217;t much wind, at least not a cool wind, at the beach.  This is the first year in recent memory where Lisa hasn&#8217;t been on the beach wrapped in sweatshirts and towels to keep warm.  Complementing the hot weather, the water was about 63 degrees and provided a very refreshing respite from the heat!</p>

<a href='http://monead.com/blog/?attachment_id=648' title='Lisa wears a jacket on the only cool day at the beach'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-124-150x150.jpg" class="attachment-thumbnail" alt="Lisa wears a jacket on the only cool day at the beach" title="Lisa wears a jacket on the only cool day at the beach" /></a>
<a href='http://monead.com/blog/?attachment_id=647' title='Michael enjoying some quality time in the water'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-112-150x150.jpg" class="attachment-thumbnail" alt="Michael enjoying some quality time in the water" title="Michael enjoying some quality time in the water" /></a>
<a href='http://monead.com/blog/?attachment_id=646' title='Sarah preparing to catch a football'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-019-150x150.jpg" class="attachment-thumbnail" alt="Sarah preparing to catch a football" title="Sarah preparing to catch a football" /></a>
<a href='http://monead.com/blog/?attachment_id=649' title='Michael comes out of the water for a moment'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-135-150x150.jpg" class="attachment-thumbnail" alt="Michael comes out of the water for a moment" title="Michael comes out of the water for a moment" /></a>
<a href='http://monead.com/blog/?attachment_id=674' title='Michael glad to be headed to the beach'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/DSC03172-150x150.jpg" class="attachment-thumbnail" alt="Michael glad to be headed to the beach" title="Michael glad to be headed to the beach" /></a>
<a href='http://monead.com/blog/?attachment_id=673' title='Lisa and David prepped for a nice walk on the beach'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/DSC03170-150x150.jpg" class="attachment-thumbnail" alt="Lisa and David prepped for a nice walk on the beach" title="Lisa and David prepped for a nice walk on the beach" /></a>
<a href='http://monead.com/blog/?attachment_id=652' title='Lisa and Sarah enjoy the air-conditioning while waiting for lunch at Surfside'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-147-150x150.jpg" class="attachment-thumbnail" alt="Lisa and Sarah enjoy the air-conditioning while waiting for lunch at Surfside" title="Lisa and Sarah enjoy the air-conditioning while waiting for lunch at Surfside" /></a>
<a href='http://monead.com/blog/?attachment_id=651' title='Michael cools off at Surfside'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-146-150x150.jpg" class="attachment-thumbnail" alt="Michael cools off at Surfside" title="Michael cools off at Surfside" /></a>
<a href='http://monead.com/blog/?attachment_id=650' title='Michael, Lisa and Sarah at Surfside'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-145-150x150.jpg" class="attachment-thumbnail" alt="Michael, Lisa and Sarah at Surfside" title="Michael, Lisa and Sarah at Surfside" /></a>
<a href='http://monead.com/blog/?attachment_id=656' title='Michael picks out a loaf of &quot;When Pigs Fly&quot; bread'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-153-150x150.jpg" class="attachment-thumbnail" alt="Michael picks out a loaf of &quot;When Pigs Fly&quot; bread" title="Michael picks out a loaf of &quot;When Pigs Fly&quot; bread" /></a>
<a href='http://monead.com/blog/?attachment_id=655' title='Lisa enjoying another fun family moment'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-151-150x150.jpg" class="attachment-thumbnail" alt="Lisa enjoying another fun family moment" title="Lisa enjoying another fun family moment" /></a>
<a href='http://monead.com/blog/?attachment_id=654' title='Sarah debates several options for dinner'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-150-150x150.jpg" class="attachment-thumbnail" alt="Sarah debates several options for dinner" title="Sarah debates several options for dinner" /></a>
<a href='http://monead.com/blog/?attachment_id=653' title='Michael still enjoys choosing from lighter fare at restaurants'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-149-150x150.jpg" class="attachment-thumbnail" alt="Michael still enjoys choosing from lighter fare at restaurants" title="Michael still enjoys choosing from lighter fare at restaurants" /></a>
<a href='http://monead.com/blog/?attachment_id=670' title='David preparing to order from the wide variety at Brown&#039;s'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-216-150x150.jpg" class="attachment-thumbnail" alt="David preparing to order from the wide variety at Brown&#039;s" title="David preparing to order from the wide variety at Brown&#039;s" /></a>
<a href='http://monead.com/blog/?attachment_id=661' title='Sarah shows off her sand leggings'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-191-150x150.jpg" class="attachment-thumbnail" alt="Sarah shows off her sand leggings" title="Sarah shows off her sand leggings" /></a>
<a href='http://monead.com/blog/?attachment_id=671' title='Sarah and Michael waiting for their desserts at Brown&#039;s Old Fashioned Ice Cream'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-219-150x150.jpg" class="attachment-thumbnail" alt="Sarah and Michael waiting for their desserts at Brown&#039;s Old Fashioned Ice Cream" title="Sarah and Michael waiting for their desserts at Brown&#039;s Old Fashioned Ice Cream" /></a>
<a href='http://monead.com/blog/?attachment_id=659' title='David enjoys using his kindle at the beach to read and order new books'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-182-150x150.jpg" class="attachment-thumbnail" alt="David enjoys using his kindle at the beach to read and order new books" title="David enjoys using his kindle at the beach to read and order new books" /></a>
<a href='http://monead.com/blog/?attachment_id=660' title='Sarah uses a traditional book form at the beach'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-184-150x150.jpg" class="attachment-thumbnail" alt="Sarah uses a traditional book form at the beach" title="Sarah uses a traditional book form at the beach" /></a>
<a href='http://monead.com/blog/?attachment_id=658' title='David enjoys an afternoon nap - dreaming of a pizza cheese steak hoagie'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-174-150x150.jpg" class="attachment-thumbnail" alt="David enjoys an afternoon nap - dreaming of a pizza cheese steak hoagie" title="David enjoys an afternoon nap - dreaming of a pizza cheese steak hoagie" /></a>
<a href='http://monead.com/blog/?attachment_id=657' title='A common picture of tranquility between Michael and Sarah'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-169-150x150.jpg" class="attachment-thumbnail" alt="A common picture of tranquility between Michael and Sarah" title="A common picture of tranquility between Michael and Sarah" /></a>
<a href='http://monead.com/blog/?attachment_id=662' title='Michael gathers his thoughts as he prepares to bowl'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-194-150x150.jpg" class="attachment-thumbnail" alt="Michael gathers his thoughts as he prepares to bowl" title="Michael gathers his thoughts as he prepares to bowl" /></a>
<a href='http://monead.com/blog/?attachment_id=663' title='Lisa maintains her form as she adjusts for some challenging bowling conditions'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-199-150x150.jpg" class="attachment-thumbnail" alt="Lisa maintains her form as she adjusts for some challenging bowling conditions" title="Lisa maintains her form as she adjusts for some challenging bowling conditions" /></a>
<a href='http://monead.com/blog/?attachment_id=664' title='Sarah is all about focus as she matches wits with some candle pins'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-201-150x150.jpg" class="attachment-thumbnail" alt="Sarah is all about focus as she matches wits with some candle pins" title="Sarah is all about focus as she matches wits with some candle pins" /></a>
<a href='http://monead.com/blog/?attachment_id=676' title='David and Lisa at The Nubble'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/DSC03198-150x150.jpg" class="attachment-thumbnail" alt="David and Lisa at The Nubble" title="David and Lisa at The Nubble" /></a>
<a href='http://monead.com/blog/?attachment_id=675' title='Michael, David and Sarah at The Nubble'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/DSC03196-150x150.jpg" class="attachment-thumbnail" alt="Michael, David and Sarah at The Nubble" title="Michael, David and Sarah at The Nubble" /></a>
<a href='http://monead.com/blog/?attachment_id=714' title='The whole clan at The Nubble'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/DSC03199-150x150.jpg" class="attachment-thumbnail" alt="The whole clan at The Nubble" title="The whole clan at The Nubble" /></a>
<a href='http://monead.com/blog/?attachment_id=665' title='David waiting for some pizza'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-203-150x150.jpg" class="attachment-thumbnail" alt="David waiting for some pizza" title="David waiting for some pizza" /></a>
<a href='http://monead.com/blog/?attachment_id=666' title='Sarah waiting for the pizza to arrive'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-205-150x150.jpg" class="attachment-thumbnail" alt="Sarah waiting for the pizza to arrive" title="Sarah waiting for the pizza to arrive" /></a>
<a href='http://monead.com/blog/?attachment_id=667' title='Michael is excited to have some fresh pizza on the way'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-206-150x150.jpg" class="attachment-thumbnail" alt="Michael is excited to have some fresh pizza on the way" title="Michael is excited to have some fresh pizza on the way" /></a>
<a href='http://monead.com/blog/?attachment_id=668' title='Lisa, Michael and Sarah at Woody&#039;s Pizzeria'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-211-150x150.jpg" class="attachment-thumbnail" alt="Lisa, Michael and Sarah at Woody&#039;s Pizzeria" title="Lisa, Michael and Sarah at Woody&#039;s Pizzeria" /></a>
<a href='http://monead.com/blog/?attachment_id=669' title='David, Michael and Sarah at Woody&#039;s Pizzeria'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/Pictures221-212-150x150.jpg" class="attachment-thumbnail" alt="David, Michael and Sarah at Woody&#039;s Pizzeria" title="David, Michael and Sarah at Woody&#039;s Pizzeria" /></a>
<a href='http://monead.com/blog/?attachment_id=677' title='On the porch at our seaside rental house'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/DSC03204-150x150.jpg" class="attachment-thumbnail" alt="On the porch at our seaside rental house" title="On the porch at our seaside rental house" /></a>
<a href='http://monead.com/blog/?attachment_id=681' title='Looking forward to experiencing Spamalot'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/DSC03220-150x150.jpg" class="attachment-thumbnail" alt="Looking forward to experiencing Spamalot" title="Looking forward to experiencing Spamalot" /></a>
<a href='http://monead.com/blog/?attachment_id=680' title='Warning sign due to TS Earl'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/DSC03210-150x150.jpg" class="attachment-thumbnail" alt="Warning sign due to TS Earl" title="Warning sign due to TS Earl" /></a>
<a href='http://monead.com/blog/?attachment_id=679' title='Warning sign due to TS Earl'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/DSC03209-150x150.jpg" class="attachment-thumbnail" alt="Warning sign due to TS Earl" title="Warning sign due to TS Earl" /></a>
<a href='http://monead.com/blog/?attachment_id=678' title='Warning sign due to TS Earl'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/DSC03208-150x150.jpg" class="attachment-thumbnail" alt="Warning sign due to TS Earl" title="Warning sign due to TS Earl" /></a>
<a href='http://monead.com/blog/?attachment_id=683' title='Michael and Sarah, chums!'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/DSC03237-150x150.jpg" class="attachment-thumbnail" alt="Michael and Sarah, chums!" title="Michael and Sarah, chums!" /></a>
<a href='http://monead.com/blog/?attachment_id=682' title='Feeding the seagulls'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/DSC03225-150x150.jpg" class="attachment-thumbnail" alt="Feeding the seagulls" title="Feeding the seagulls" /></a>
<a href='http://monead.com/blog/?attachment_id=672' title='Michael, Sarah and David wrapping up a fun week'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/09/DSC03238-150x150.jpg" class="attachment-thumbnail" alt="Michael, Sarah and David wrapping up a fun week" title="Michael, Sarah and David wrapping up a fun week" /></a>

<p><span id="more-644"></span>The surf provided excellent waves for riding and playing.  Michael lost a couple of nose clips to the pounding surf.  We upgraded to the type with a neck strap which seemed to solve the problem.  Lisa and Sarah took advantage of the active waves and had some good runs with the boogie boards.</p>
<p>One hiccup for the week was a forgotten camera cable.  I carefully packed the charger but completely blanked on the computer cable.  We&#8217;ve been posting digital pictures during our travels for many years so that family and friends can keep up with our travels.  So, for this past week we had to largely go dark, just like the lighthouse.  During the week I had been reduced to posting a few pictures from my phone since I can download those.</p>
<p>Trying to avoid the heat of the day at the beach on Tuesday, we went into town to bowl (candle pin) and check out a few shops.  The bowling alley was very hot.  We only bowled one game.  We then explored a few of our favorite shops, including <a href="http://www.thegoldenrod.com/" target="_new">The Goldenrod</a> where Lisa purchased some coconut clusters, an annual favorite!</p>
<p>This year we also tried a couple of loaves of bread from the &#8220;When Pigs Fly&#8221; bakery.  We have seen the store several times on Route 1 driving into York but had never stopped in.  However, when we went to do our grocery shopping we saw some of their loaves at the local Hannaford grocery store and purchased the &#8220;Six-Grain and Pumpkin Seed&#8221; loaf.  Sarah and I loved it, both buttered or with cheese.  Later during the week we got their Sourdough loaf to bring home.</p>
<p>Beyond daily beach bumming, we enjoyed our daily treat of Brown&#8217;s Ice Cream (typically Sherbet for Michael and Grape Nuts for the rest of us).  We also spent an evening in Kittery to visit Crate and Barrel as well as the <a href="http://www.kitterytradingpost.com/" target="_new">Kittery Trading Post</a>.</p>
<p>Wednesday we wandered around York Beach Village where we discovered a new restaurant, <strong><a href="http://www.woodysbrickovenpizza.com/" target="_new">Woody&#8217;s Brick Oven Pizza</a></strong>.  As we walked by we all caught the delicious aroma of the fresh dough baking.  We decided we would have to try it out and we did on Friday afternoon.  The pizza was great.  Lisa and Michael stuck with plain cheese while Sarah and I added mushrooms, feta cheese and hot and sweet sausage.  We heartily recommend this place for pizza.</p>
<p>Friday night we attended <em><strong>Spamalot </strong></em>at the <a href="http://www.ogunquitplayhouse.org/" target="_new">Ogunquit Playhouse</a>.  The production was super!  The two leads, Charles Shaughnessy (Mr. Sheffield from TV&#8217;s &#8220;the Nanny&#8221;) and Rachel York were fantastic!   We enjoyed all of the fun music and silly Monty Pythonesque humor performed by stellar and lively cast, musicians and crew.</p>
<p>Present in the audience were several cast members for the next musical they are staging, <strong><em>Chicago</em></strong>.  Sally Struthers (Gloria from &#8220;All In The Family&#8221;), who is part of the <em>Chicago </em>cast, was there as well.  Although she has been in several Ogunquit productions, her appearances haven&#8217;t aligned with our schedule.  So we finally got to see her in person, though not on stage.</p>
<p>As usual, our week flew by, winding down as we met the remnants of <em>Tropical Storm Earl</em> later Friday night.  Although there were warnings posted at the beach to watch out for strong currents, we really didn&#8217;t experience more than a little wind and light rain.</p>
<p>By Saturday morning the clouds of Earl had mostly cleared out.  We fed the seagulls our week&#8217;s supply of left-overs and stopped by Stonewall Kitchen for some jams and assorted odds-and-ends.  We then headed south out of York and had a nice drive home, stopping by Fuddruckers for our traditional heading-home lunch.</p>
]]></content:encoded>
			<wfw:commentRss>http://monead.com/blog/?feed=rss2&amp;p=644</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Injection – Why Does Our Profession Continue to Build Applications that Support It?</title>
		<link>http://monead.com/blog/?p=608</link>
		<comments>http://monead.com/blog/?p=608#comments</comments>
		<pubDate>Tue, 24 Aug 2010 00:57:04 +0000</pubDate>
		<dc:creator>David Read</dc:creator>
				<category><![CDATA[Information Systems]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Security]]></category>
		<category><![CDATA[application security]]></category>
		<category><![CDATA[data security]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[mitigation]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[SQL injection]]></category>
		<category><![CDATA[vulnerability]]></category>

		<guid isPermaLink="false">http://monead.com/blog/?p=608</guid>
		<description><![CDATA[SQL Injection is commonly given as a  root cause when news sites report about stolen data. Here are a few recent headlines for articles describing data loss related to SQL injection: Hackers steal customer data by accessing supermarket database1, Hacker swipes details of 4m Pirate Bay users2, and Mass Web Attack Hits Wall Street Journal, [...]]]></description>
			<content:encoded><![CDATA[<p style="padding-top: 14px;"><strong>SQL Injection</strong> is commonly given as a  <em><strong>root cause </strong></em>when news sites report about <em><strong>stolen data</strong></em>.  Here are a few recent headlines for articles describing data loss related to SQL injection: <strong>Hackers steal customer data by accessing supermarket database</strong><sup>1</sup>, <strong>Hacker swipes details of 4m Pirate Bay users</strong><sup>2</sup>, and <strong>Mass Web Attack Hits Wall Street Journal, Jerusalem Post</strong><sup>3</sup>.  I understand that SQL injection is prevalent; <em>I just don&#8217;t understand why developers continue to write code that offers this avenue to attackers.</em></p>
<p>From my point of view SQL injection is very well understood and has been for many years.  There is no excuse for a programmer to create code that allows for such an attack to succeed.  For me this issue falls squarely on the shoulders of people writing applications. <em><strong> If you do not understand the mechanics of SQL injection and don&#8217;t know how to effectively prevent it then you shouldn&#8217;t be writing software.</strong></em></p>
<p>The mechanics of SQL injection are very simple.  If input from outside an application is incorporated into a SQL statement as literal text, a potential SQL injection vulnerability is created.  Specifically, if a parameter value is retrieved from user input and appended into a SQL statement which is then passed on to the RDBMS, the parameter&#8217;s value can be set by an attacker to alter the meaning of the original SQL statement.</p>
<p>Note that this attack is not difficult to engineer, complicated to execute or a risk only with web-based applications.  There are tools to quickly locate and attack vulnerable applications.  Also note that using encrypted channels (e.g. HTTPS) does nothing to prevent this attack.  The issue is not related to encrypting the data in transit, rather, it is about keeping the untrusted data away from the backend RDMBS&#8217; interpretation environment.</p>
<p>Here is a simple example of how SQL injection works.  Assume we have an application that accepts a last name which will be used to search a database for contact information.  The program takes the input, stores it in a variable called <strong>lastName</strong>, and creates a query:</p>
<pre><strong>String sql = "select * from contact_info where lname = '" + lastName + "'";</strong></pre>
<p style="padding-top: 14px;">Now, if an attacker tries the input of: <strong>&#8216; or 1=1 or &#8217;2&#8242;=&#8217;</strong></p>
<p>It will create a SQL statement of:</p>
<pre><strong>select * from contact_info where lname = '' or 1=1 or '2'=''</strong></pre>
<p style="padding-top: 14px;">This is a legal SQL statement and will retrieve all the rows from the <strong>contact_info</strong> table.  This might expose a lot of data or possibly crash the environment (a denial of service attack).  In any case, using other SQL keywords, particularly UNION, the attacker can now explore the database, including other tables and schemas.</p>
<p><span id="more-608"></span>Sometime developers attempt to sanitize or &#8220;clean up&#8221; the incoming data.  This is a valuable technique and should be a part of a defense-in-depth strategy.  However, <em><strong>it is vital that the external input never be passed to the database in a way that the database engine could interpret it as part of the DDL or DML. </strong></em>Most modern development environments make this issue quite easy to prevent.</p>
<p><em><strong>The best rule to establish when coding database interactions is to always use prepared statements. </strong></em> They are no harder to use than direct execution of the SQL and can be used to improve performance if the same query is being used more than once.</p>
<p>In any language that supports prepared statements the technique is always the same.  You setup a template statement with placeholders for the dynamic (externally supplied) data.  The dynamic portion will be filled-in using bound variables and will not be treated as part of the SQL statement itself.  This means that there is no way a carefully crafted input can trick the environment and alter the structure of the SQL statement.</p>
<p><strong>Here is an example of using a prepared statement in PHP:</strong></p>
<pre>$stmt = $dbh-&gt;prepare("select * from contact_info where name = ?");
if ($stmt-&gt;execute(array($_GET['lastName']))) {
  while ($row = $stmt-&gt;fetch()) {
  print_r($row);
}
</pre>
<p style="padding-top: 14px;"><strong>Here is a prepared statement example in Java:</strong></p>
<pre>PreparedStatement prepSt =
      con.prepareStatement("select * from contact_info where name = ?");
prepSt.setString(1, lastName);
ResultSet rs = prepSt.executeQuery();
while (rs.next()){
  // Process the data
}</pre>
<p style="padding-top: 14px;"><strong>And here is a prepared statement example in C#:</strong></p>
<pre>using (SqlCommand myCommand =
    new SqlCommand("select * from contact_data where lname = @LNAME", myConnection)) {
  myCommand.Parameters.AddWithValue("@LNAME", lastName);
  myConnection.Open();
  SqlDataReader myReader = myCommand.ExecuteReader())
  // process data
}</pre>
<p style="padding-top: 14px;">What I hope you notice is that using prepared statements doesn&#8217;t add a lot of extra work to writing the program.  That is why I don&#8217;t believe that there is any excuse for developers to be writing code that is vulnerable to such an attack.  In all the examples provided (above) the input (in the variable <strong>lastName</strong>) will only be used to search the <strong>lname </strong>column, it will never be interpreted as part of the SQL syntax.</p>
<p>Next time you find yourself writing or maintaining code that connects to a database, please verify that you have done your due diligence by using prepared statements in all cases of database interaction. <em><strong> Doing anything less means that you are part of the problem rather than being part of the solution.</strong></em></p>
<p>I know that there are other techniques, including the use of stored procedures, which are also used as a mitigation approach.  Each technique has it place, but the use of prepared statements can typically be used regardless of other mitigating strategies.  Again, it is all about defense-in-depth.  <em><strong>Using a prepared statement is a simple yet powerful technique to create more secure software.</strong></em></p>
<p>I am curious to hear from software authors that believe that they have to write software that is vulnerable to SQL injection.  Is there some reason, other than a lack of understanding, that we as members of the software engineering profession continue to produce such vulnerable applications?</p>
<p><sup>1</sup><a href="http://www.japantoday.com/category/crime/view/hackers-steal-customer-data-by-accessing-supermarket-database" target="_new">http://www.japantoday.com/category/crime/view/hackers-steal-customer-data-by-accessing-supermarket-database</a><br />
<sup>2</sup><a href="http://www.theregister.co.uk/2010/07/08/pirate_bay_hacked/" target="_new">http://www.theregister.co.uk/2010/07/08/pirate_bay_hacked/</a><br />
<sup>3</sup><a href="http://www.computerworld.com/s/article/9177904/Mass_Web_attack_hits_Wall_Street_Journal_Jerusalem_Post?taxonomyId=17" target="new">http://www.computerworld.com/s/article/9177904/Mass_Web_attack_hits_Wall_Street_Journal_Jerusalem_Post?taxonomyId=17</a></p>
]]></content:encoded>
			<wfw:commentRss>http://monead.com/blog/?feed=rss2&amp;p=608</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Semantic Workbench – A Humble Beginning</title>
		<link>http://monead.com/blog/?p=551</link>
		<comments>http://monead.com/blog/?p=551#comments</comments>
		<pubDate>Thu, 19 Aug 2010 03:28:31 +0000</pubDate>
		<dc:creator>David Read</dc:creator>
				<category><![CDATA[Information Systems]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[Tools and Applications]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[ontology]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[semantics]]></category>

		<guid isPermaLink="false">http://monead.com/blog/?p=551</guid>
		<description><![CDATA[As a way to work with semantic web concepts, including asserting triples, seeing the resulting inferences and also leveraging SPARQL, I have needed a GUI.  In this post I&#8217;ll describe a very basic tool that I have created and released that allows a user to interact with a semantic model. My objectives for this first [...]]]></description>
			<content:encoded><![CDATA[<p style="padding-top: 14px;">As a way to work with semantic web concepts, including asserting triples, seeing the resulting inferences and also leveraging SPARQL, I have needed a GUI.  In this post I&#8217;ll describe a very basic tool that I have created and released that allows a user to interact with a semantic model.</p>
<p>My objectives for this first GUI were basic:</p>
<ol>
<li>Support input of a set of triples in any format that Jena supports (e.g. REF/XML, N3, N-Triples and Turtle)</li>
<li>See the inferences that result for a set of assertions</li>
<li>Create a tree view of the ontology</li>
<li>Make it easy to use SPARQL queries with the model</li>
<li>Allow the resulting model to be written to a file, again using any format supported by Jena</li>
</ol>
<p>Here are some screen shots of the application.  Explanations of the tabs are then provided.</p>

<a href='http://monead.com/blog/?attachment_id=560' title='SemanticUI-Initial View'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/08/SemanticUI-01-150x150.png" class="attachment-thumbnail" alt="Initial View" title="SemanticUI-Initial View" /></a>
<a href='http://monead.com/blog/?attachment_id=561' title='SemanticUI-Assertions'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/08/SemanticUI-02-150x150.png" class="attachment-thumbnail" alt="Assertions Tab Populated" title="SemanticUI-Assertions" /></a>
<a href='http://monead.com/blog/?attachment_id=562' title='SemanticUI-Inferences'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/08/SemanticUI-03-150x150.png" class="attachment-thumbnail" alt="Inferences Tab" title="SemanticUI-Inferences" /></a>
<a href='http://monead.com/blog/?attachment_id=563' title='SemanticUI-Tree View'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/08/SemanticUI-04-150x150.png" class="attachment-thumbnail" alt="Tree View Tab" title="SemanticUI-Tree View" /></a>
<a href='http://monead.com/blog/?attachment_id=559' title='SemanticUI-SPARQL'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/08/SemanticUI-05-150x150.png" class="attachment-thumbnail" alt="SPARQL Tab" title="SemanticUI-SPARQL" /></a>

<p style="padding-top: 14px;">The program provides each feature in a very basic way.  On the <strong>Assertions </strong>tab a text area is used for entering assertions.  The user may also load a text file containing assertions using the <strong><em>File|Open</em></strong> menu item.  Once the assertions are entered, a button is enabled that allows the reasoner to process the assertions.  The reasoner level is controlled by the user from a drop down.</p>
<p><span id="more-551"></span>Any inferences are shown in a separate text area on the <strong>Inferences </strong>tab.  The inferences are displayed using the same format as was used for the assertions.  A tree view of the model is also created and presented on a third tab called <strong>Tree View</strong> (creative, I know).</p>
<p>Along with presenting the inferences and tree view, the model may be queried using SPARQL.  The <strong>SPARQL </strong>tab contains a text area for the query, a button to run the query and a text area which displays the results.</p>
<p>The processed model may also be written out to a file.  By default it is written using the format used for the original assertions.  However, the format may be changed by selecting a specific language from the <strong><em>Setup </em></strong>menu.  The setup menu also allows the user to decide whether to only save the assertions or to save both the assertions and inferences.</p>
<p>A simple semantic model is provided with the download of the project, using Wikipedia&#8217;s Turtle example, as a way to try out the application.  Note that you need to have Java 5 and Ant installed in order to run the program easily.  I am hoping that <a href="http://installbuilder.bitrock.com/" target="_new">BitRock InstallBuilder</a> will approve my project for their open source license option.</p>
<p>There are a lot of opportunities to improve the operation of this tool.  Allowing external data sources as part of the SPARQL query is something I intend to add shortly.  The presentation of the SPARQL output should be in a table rather than a text area.  The tree view needs to be greatly expanded, allowing for exploration to arbitrary levels of depth, properly reflecting class hierarchy, allowing for exploration by subject, predicate and object as well as grouping the URIs (e.g. not showing multiple entries for the same URI under a given node).</p>
<p>Additional functionality, including features such as extracting data from relational databases, would also make sense to add.</p>
<p>As I mentioned in a <a href="http://monead.com/blog/?p=382">previous post</a>, I have created a SourceForge project, <a href="http://semanticwb.sourceforge.net/" target="_new">Semantic Workbench</a>, with the intent of creating a tool that will contain a variety of features useful when working with semantic technologies, including the ones that I have been releasing on my website.  To that end, this small Java application may serve as a starting point for thinking through that tool.</p>
<p>If you have thoughts on tool features that would make working with semantic web concepts easier please comment here or better yet, join the SourceForge project.</p>
<p>In the meantime, if you are toying with semantic concepts or want to see how to leverage some of the features of Jena, feel free to <a href="http://monead.com/semantic/proj_semanticui.html">download this application</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://monead.com/blog/?feed=rss2&amp;p=551</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating RDF Triples from a Relational Database</title>
		<link>http://monead.com/blog/?p=497</link>
		<comments>http://monead.com/blog/?p=497#comments</comments>
		<pubDate>Fri, 06 Aug 2010 02:58:53 +0000</pubDate>
		<dc:creator>David Read</dc:creator>
				<category><![CDATA[Information Systems]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[Software Composition]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Tools and Applications]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[ontology]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[semantics]]></category>

		<guid isPermaLink="false">http://monead.com/blog/?p=497</guid>
		<description><![CDATA[In an earlier blog entry I discussed the potential reduction in refactoring effort if our data is represented as RDF triples rather than relational structures.  As a way to give myself easy access to RDF data and to work more with semantic web tool features I have created a program to export relational data to [...]]]></description>
			<content:encoded><![CDATA[<p style="padding-top:14px;">In an <a href="http://monead.com/blog/?p=359" target="_new">earlier blog entry</a> I discussed the potential reduction in refactoring effort if our data is represented as RDF triples rather than relational structures.  As a way to give myself easy access to RDF data and to work more with semantic web tool features I have created a program to export relational data to RDF.</p>
<p>The program is really a proof-of-concept.  It takes a SQL query and converts the resulting rows into assertions of triples.  The approach is simple: <em>given a SQL statement and a chosen primary key column (PK) to represent the instance for the exported data, assert triples with the primary key column value as the subject, the column names as the predicates and the non-PK column values as the objects</em>.</p>
<p>Here is a brief sample taken from the documentation accompanying the code.</p>
<ul>
<li>Given a table named <strong>people</strong> with the following columns and rows:</li>
</ul>
<pre>       id    name    age
       --    ----    ---
       1     Fred    20
       2     Martha  25
</pre>
<ul>
<li>And a query of:  <strong>select id, name, age from people</strong></li>
<li>And the primary key column set to: <strong>id</strong></li>
<li>Then the asserted triples (shown using Turtle and skipping prefixes) will be:</li>
</ul>
<pre>       dsr:PK_1
          a       owl:Thing , dsr:RdbData ;
          rdfs:label "1" ;
          dsr:name "Fred" ;
          dsr:age "20" .

       dsr:PK_2
          a       owl:Thing , dsr:RdbData ;
          rdfs:label "2" ;
          dsr:name "Martha" ;
          dsr:age "25" .
</pre>
<p>You can see that the approach represents a quick way to convert the data.</p>
<p><span id="more-497"></span>The next question is, &#8220;<em>How do I refactor the data?</em>&#8220;  That was, after all, what my previous blog entry was discussing.  <strong>The decision for me becomes whether I need to add a bunch of features to the export program or is there a way to use features of the semantic web (e.g. OWL, SWRL) to refactor the data?</strong></p>
<p>I compare this in some ways to the initial XML specification that required a DTD as the way to define the valid structure for an XML document.  The DTD is expressed using a different (not XML) meta-language.  This proved a poor choice, needlessly complicating parsers as well as developer&#8217;s learning curves.  The subsequent improvement was a move to XML schema, itself expressed using XML.  This added a consistency, using XML to describe XML.</p>
<p>I view the use of OWL (and probably something like SWRL if it continues to evolve) as a way to use a consistent technology to deal with data refactoring.  After all, if I am creating RDF data using semantic technologies and need to modify the data structure in some way (changing class or property names, adding classifications, etc.) then it makes sense to use the same semantic technologies to affect the transformation.</p>
<p>In the sample program I do just that.  I load an ontology file that contains my conversion assertions and then create the RDB-sources triples, allowing the reasoner to assert my changes.</p>
<p>I have released the program as open source.  The code and some documentation are available for download on my <a href="http://monead.com/semantic/proj_rdbtordf.html" target="_new">RDB To RDF</a> web page.</p>
<p>At this point I&#8217;ve started small in terms of the inferencing, simply adding a superclass relationship and class membership based on a property value.  My goal was to get version one complete, creating a starting point on which to build out functionality.</p>
<p>Please feel free to download, use, and modify the program.  If you have feedback about its operation and the concepts being discussed please add a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://monead.com/blog/?feed=rss2&amp;p=497</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Successful Process Automation: A Summary</title>
		<link>http://monead.com/blog/?p=488</link>
		<comments>http://monead.com/blog/?p=488#comments</comments>
		<pubDate>Tue, 27 Jul 2010 01:44:52 +0000</pubDate>
		<dc:creator>David Read</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Information Systems]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Tools and Applications]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[business rules]]></category>
		<category><![CDATA[enterprise applications]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[Process Automation]]></category>
		<category><![CDATA[process modeling]]></category>
		<category><![CDATA[system integration]]></category>
		<category><![CDATA[web services]]></category>
		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://monead.com/blog/?p=488</guid>
		<description><![CDATA[InformationWeek Analytics (http://analytics.informationweek.com/index) invited me to write about the subject of process automation.  The article, part of their series covering application architectures, was released in July of this year.  It provided an opportunity for me to articulate the key components that are required to succeed in the automation of business processes. Both the business and [...]]]></description>
			<content:encoded><![CDATA[<p style="padding-top:14px;">InformationWeek Analytics (<a href="http://analytics.informationweek.com/index" target="_new">http://analytics.informationweek.com/index</a>)  invited me to write about the subject of <strong>process automation</strong>.   The article, part of their series covering application architectures,  was released in July of this year.  It provided an opportunity for me to  articulate the key components that are required to succeed in the  automation of business processes.</p>
<p><em><strong>Both the business and IT are positioned to make-or-break the  use of process automation tools and techniques.</strong></em> The business  must redefine its processes and operational rules so that work may be  automated.  IT must provide the infrastructure and expertise to leverage  the tools of the process automation trade.</p>
<p><strong>Starting with the business</strong> there must be clearly defined  processes by which work gets done.  Each process must be documented,  including the points where decisions are made.  The rules for those  decisions must then be documented.  Repetitive, low-value and low-risk  decisions are immediate candidates for automation.</p>
<p>A key value point that must be reached in order to extract  sustainable and meaningful value from process automation is measured in  Straight Through Processing (STP).  STP requires that work arrive from a  third-party and be automatically processed; returning a final decision  and necessary output (letter, claim payment, etc.) without a person  being involved in handling the work.</p>
<p>Most businesses begin using process automation tools without  achieving any significant STP rate.  This is fine as a starting point so  long as the business reviews the manual work, identifies groupings of  work, focuses on the largest groupings (large may be based on manual  effort, cost or simple volume) and looks to automate the decisions  surrounding that group of work.  As STP is achieved for some work, the  review process continues as more and more types of work are targeted for  automation.</p>
<p>The end goal of process automation is to have people involved in  truly exceptional, high-value, high-risk, business decisions.  The  business benefits by having people attend to items that truly matter  rather than dealing with a large amount background noise that lowers  productivity, morale and client satisfaction.</p>
<p>All of this is great in theory but requires an information  technology infrastructure that can meet these business objectives.</p>
<p><strong><span id="more-488"></span>On the IT side </strong>we must have an information infrastructure  that promotes automation.  Key components for process automation are  workflow and rules engines and the expertise to use them effectively.   This is a major undertaking on its own.</p>
<p>However, workflow and rules engines are simply software components  that provide features such as Service Level Agreement (SLA) management,  long-running work state management, independently codified rules, rule  versioning and so forth.  These engines need access to data and that  data must be structured and clearly defined.</p>
<p><em><strong>Therefore, in order to create an IT infrastructure ready to  leverage process automation there must be a set of well-defined data  services that all applications (manual and workflow-based) use to read  and write data. </strong></em>Those services, which may be web services or  message-based solutions, become the common approach by which all  applications interact with the data sources.</p>
<p>By utilizing this centralized service approach, applications that  allow for manual manipulation of data, through some form of user  interface, can be leveraged by a workflow or rules engine to carry out  the work on behalf of a person.  The service doesn&#8217;t know or care if it  is being invoked by a person or system, it simply reads and writes the  proper data.</p>
<p>In the article I also discuss the advantages of leveraging process  automation beyond simply speeding up processes.  The platform simplifies  the inclusion of additional channels (IVRs, portals) and third party  access (vendors, clients) to your systems.</p>
<p>The full article can be found on InformationWeek Analytic&#8217;s  subscription-based website at <a href="http://analytics.informationweek.com/abstract/22/3593/SOA-App-Architecture/strategy-process-automation.html" target="_new">http://analytics.informationweek.com/abstract/22/3593/SOA-App-Architecture/strategy-process-automation.html</a>.</p>
<p>If you are interested in reading the article but are not an  InformationWeek Analytics subscriber, there are a limited number of  copies that Blue Slate can provide.  Just drop me a note at <strong><a href="mailto:david.read@blueslate.net">david.read@blueslate.net</a> </strong>and  I&#8217;ll follow-up with you.</p>
<p>As always, I am interested in hearing about the successes and  lessons-learned from people that are working with process automation.   So please share your insights and stories by adding your comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://monead.com/blog/?feed=rss2&amp;p=488</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Clam Festival 2010</title>
		<link>http://monead.com/blog/?p=445</link>
		<comments>http://monead.com/blog/?p=445#comments</comments>
		<pubDate>Tue, 20 Jul 2010 02:23:51 +0000</pubDate>
		<dc:creator>David Read</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[Clam Festival]]></category>
		<category><![CDATA[Maine]]></category>

		<guid isPermaLink="false">http://monead.com/blog/?p=445</guid>
		<description><![CDATA[We made our annual trek to Yarmouth, Maine for this year&#8217;s Clam Festival.  We had signed up to participate in The Levity Project – Maine so we had to be there by 4:30 pm on Friday.  This was the first time we&#8217;ve had a fixed schedule when heading up and one of the only years [...]]]></description>
			<content:encoded><![CDATA[<p style="padding-top:14px;">We made our annual trek to Yarmouth, Maine for this year&#8217;s <a href="http://www.clamfestival.com/" target="_new">Clam Festival</a>.  We had signed up to participate in The Levity Project – Maine so we had to be there by 4:30 pm on Friday.  This was the first time we&#8217;ve had a fixed schedule when heading up and one of the only years we have been there in time for the parade.</p>
<p>After parking we rushed past the Food Circle in order to get to the North Yarmouth Academy Gymnasium and receive our instructions and umbrella hats for &#8220;Maine&#8217;s Longest Smile&#8221; being organized by <a href="http://thelevityproject.com/" target="_new">The Levity Project</a>.  Although temperatures as we drove through Massachussets and New Hampshire and up into Maine were in the 90s, by the time we got to Yarmouth it was about 75.  The gym was another story, hot and humid, but full of festivity!</p>
<p>Hippity-hop balls were being test driven by a variety of people while others were testing out the new hats.  We signed in, filled out a photo release and starting reviewing the instructions we had been given.  By 5pm we were being walked through the overall plan and were ready to head out to our assigned locations by 5:30.  Before getting into position I snuck by the First Parish Congregation Church for my annual lobster roll.  They make a perfect lobster roll – a bun and lots of lobster meat!  Nothing else to distract from the delicious lobster flavor.</p>

<a href='http://monead.com/blog/?attachment_id=460' title='Michael poses with his umbrella hat'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/IMG00373-20100716-1640-150x150.jpg" class="attachment-thumbnail" alt="Michael poses with his umbrella hat" title="Michael poses with his umbrella hat" /></a>
<a href='http://monead.com/blog/?attachment_id=462' title='Sarah poses with her umbrella hat'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/IMG00379-20100716-1643-150x150.jpg" class="attachment-thumbnail" alt="Sarah poses with her umbrella hat" title="Sarah poses with her umbrella hat" /></a>
<a href='http://monead.com/blog/?attachment_id=461' title='Lisa poses with her umbrella hat'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/IMG00377-20100716-1643-150x150.jpg" class="attachment-thumbnail" alt="Lisa poses with her umbrella hat" title="Lisa poses with her umbrella hat" /></a>
<a href='http://monead.com/blog/?attachment_id=463' title='David poses with his umbrella hat'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/IMG00380-20100716-1652-150x150.jpg" class="attachment-thumbnail" alt="David poses with his umbrella hat" title="David poses with his umbrella hat" /></a>
<a href='http://monead.com/blog/?attachment_id=465' title='Michael at his position before beginning the smile project'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/IMG00385-20100716-1956-150x150.jpg" class="attachment-thumbnail" alt="Michael at his position before beginning the smile project" title="Michael at his position before beginning the smile project" /></a>
<a href='http://monead.com/blog/?attachment_id=477' title='Lisa frozen during the longest smile project'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/Levity-Lisa-Pose-150x150.jpg" class="attachment-thumbnail" alt="Lisa frozen during the longest smile project" title="Lisa frozen during the longest smile project" /></a>
<a href='http://monead.com/blog/?attachment_id=485' title='Close-up of Lisa frozen during the longest smile project'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/Levity-Lisa-Pose-Closeup-150x150.jpg" class="attachment-thumbnail" alt="Close-up of Lisa frozen during the longest smile project" title="Close-up of Lisa frozen during the longest smile project" /></a>
<a href='http://monead.com/blog/?attachment_id=484' title='David frozen during the longest smile project'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/Levity-David-Pose.cropped-150x150.jpg" class="attachment-thumbnail" alt="David frozen during the longest smile project" title="David frozen during the longest smile project" /></a>
<a href='http://monead.com/blog/?attachment_id=476' title='Sarah frozen during the longest smile project'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/Levity-Sarah-Pose-150x150.jpg" class="attachment-thumbnail" alt="Sarah frozen during the longest smile project" title="Sarah frozen during the longest smile project" /></a>
<a href='http://monead.com/blog/?attachment_id=487' title='Michael frozen during the longest smile project'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/Levity-Michael-Pose1-150x150.jpg" class="attachment-thumbnail" alt="Michael frozen during the longest smile project" title="Michael frozen during the longest smile project" /></a>
<a href='http://monead.com/blog/?attachment_id=478' title='Close-up of Michael frozen during the longest smile project'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/Levity-Michael-Pose-150x150.jpg" class="attachment-thumbnail" alt="Close-up of Michael frozen during the longest smile project" title="Close-up of Michael frozen during the longest smile project" /></a>
<a href='http://monead.com/blog/?attachment_id=464' title='The perfect lobster roll!'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/IMG00382-20100716-1733-150x150.jpg" class="attachment-thumbnail" alt="The perfect lobster roll!" title="The perfect lobster roll!" /></a>
<a href='http://monead.com/blog/?attachment_id=466' title='Sarah and Michael with Steamer'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/IMG00386-20100717-1131-150x150.jpg" class="attachment-thumbnail" alt="Sarah and Michael with Steamer" title="Sarah and Michael with Steamer" /></a>
<a href='http://monead.com/blog/?attachment_id=467' title='Lisa, Michael and Sarah with the Herbie &quot;cookie&quot;'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/IMG00387-20100717-1135-150x150.jpg" class="attachment-thumbnail" alt="Lisa, Michael and Sarah with the Herbie &quot;cookie&quot;" title="Lisa, Michael and Sarah with the Herbie &quot;cookie&quot;" /></a>
<a href='http://monead.com/blog/?attachment_id=468' title='Lime Rickey and Batter Fried Clams'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/IMG00389-20100717-1207-150x150.jpg" class="attachment-thumbnail" alt="Lime Rickey and Batter Fried Clams" title="Lime Rickey and Batter Fried Clams" /></a>
<a href='http://monead.com/blog/?attachment_id=456' title='A beautiful morning on the lake in Belgrade, ME'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/IMG00395-20100718-0952-150x150.jpg" class="attachment-thumbnail" alt="A beautiful morning on the lake in Belgrade, ME" title="A beautiful morning on the lake in Belgrade, ME" /></a>
<a href='http://monead.com/blog/?attachment_id=458' title='Michael, Sarah and David at Brown&#039;s Ice Cream'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/IMG00410-20100718-1652-150x150.jpg" class="attachment-thumbnail" alt="Michael, Sarah and David at Brown&#039;s Ice Cream" title="Michael, Sarah and David at Brown&#039;s Ice Cream" /></a>
<a href='http://monead.com/blog/?attachment_id=457' title='Michael enjoys his Raspberry Sherbet'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/IMG00406-20100718-1649-150x150.jpg" class="attachment-thumbnail" alt="Michael enjoys his Raspberry Sherbet" title="Michael enjoys his Raspberry Sherbet" /></a>
<a href='http://monead.com/blog/?attachment_id=459' title='Michael, David and Sarah after a traditional post-Maine Fuddruckers meal'><img width="150" height="150" src="http://monead.com/blog/wp-content/uploads/2010/07/IMG00411-20100718-1900-150x150.jpg" class="attachment-thumbnail" alt="Michael, David and Sarah after a traditional post-Maine Fuddruckers meal" title="Michael, David and Sarah after a traditional post-Maine Fuddruckers meal" /></a>

<p style="padding-top: 14px;">For the smile project our family was assigned to group three, which had a great location right by the Memorial Green tent and Food Circle.  The street was lined with people prepared to watch the parade.  The levity event went off without a hitch and we had a blast!  Participating in the smile project was fun.  It was a chance to be a part of the festival and not just an out-of-town visitor watching everything from the sidelines.</p>
<p><span id="more-445"></span>Once the smile wrapped-up we headed over to grab some dinner (my lobster roll having been a perfect appetizer).  Sarah had calamari, Michael went for clam strips, Lisa found some chicken and I ordered the whole clams fried with crumbs (saving the batter-dipped for Saturday).</p>
<p>We enjoyed our meal and went over to explore the craft booths.  The variety and quality of the work by the crafters makes the exploration fun.</p>
<p>For the first time we skipped the rides.  Neither child was interested in heading into the carnival – perhaps the length and heat of the day had tired them out.  We headed for a nearby hotel and relaxed.</p>
<p>Saturday we returned to the festival and explored the art show tents, which close early each night so we missed them Friday.  We then had lunch. I had a Lime Rickey and fried clams in batter which were perfect!</p>
<p>Later in the afternoon we headed up to Belgrade, Maine where Lisa&#8217;s sister and brother-in-law have a lake-side camp.  We celebrated our nephew Sam&#8217;s 20th birthday and enjoyed swimming and good company.  I think that Michael, ever the water bug, spent more time in the water Saturday and Sunday than the rest of us combined!</p>
<p>Sunday afternoon we headed back, stopping by York Beach for some ice cream at <a href="http://www.yelp.com/biz/browns-old-fashioned-ice-cream-inc-york" target="_new">Brown&#8217;s Ice Cream</a> (Grape Nut as usual for Lisa, Sarah and me; Raspberry Sherbet for Michael).  Dinner followed later at <a href="http://www.fuddruckers.com/" target="_new">Fuddruckers</a> in Massachusetts.  Unfortunately I couldn&#8217;t convince Lisa to try the buffalo burger (we always split a burger since they are quite large).  By 10:30pm we were home and getting organized for a new week.</p>
<p>As always we enjoyed the trip and look forward to our vacation in York Beach later in the summer.</p>
<p><em>Thank you to Leslie Wagner (<a href="http://www.lesliewagnerphoto.com/" target="_new">http://www.lesliewagnerphoto.com/</a>) for allowing me to share her photos from The Levity Project event.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://monead.com/blog/?feed=rss2&amp;p=445</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Destination Reached: CISSP</title>
		<link>http://monead.com/blog/?p=402</link>
		<comments>http://monead.com/blog/?p=402#comments</comments>
		<pubDate>Sat, 03 Jul 2010 03:14:00 +0000</pubDate>
		<dc:creator>David Read</dc:creator>
				<category><![CDATA[Information Systems]]></category>
		<category><![CDATA[Quality]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Security]]></category>
		<category><![CDATA[(ISC)2]]></category>
		<category><![CDATA[application security]]></category>
		<category><![CDATA[CISSP]]></category>
		<category><![CDATA[data security]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[linkedin]]></category>

		<guid isPermaLink="false">http://monead.com/blog/?p=402</guid>
		<description><![CDATA[I am happy to report that I have been awarded the Certified Information Systems Security Professional (CISSP) by the International Information Systems Security Certification Consortium [(ISC)2]a. I started pursuing the certification in mid-2009, got serious about studying early this year (2010), took the exam in late April, was notified that I passed and had my [...]]]></description>
			<content:encoded><![CDATA[<p style="padding-top:14px;"><img class="alignleft size-full wp-image-190" title="CISSP logo" src="http://monead.com/blog/wp-content/uploads/2010/07/CISSP_logo.jpg" alt="CISSP logo" width="75" height="75" align="left" />I am happy to report that I have been awarded the <em>Certified Information Systems Security Professional</em> (<strong>CISSP</strong>) by the International Information Systems Security Certification Consortium [(ISC)<sup>2</sup>]<sup>a</sup>.</p>
<p>I started pursuing the certification in mid-2009, got serious about studying early this year (2010), took the exam in late April, was notified that I passed and had my background endorsed in May, had to update my resume for an auditor in early June and was awarded the CISSP designation at the end of June.</p>
<p><em>I felt that this certification was important both professionally and personally.</em></p>
<p>Professionally, the certification serves as a validation that I have a solid and broad understanding of information systems&#8217; security.  People who have worked with me know that I have been focused on IS security for many years.</p>
<p>Whether performing security-centered code reviews, fixing flawed implementations or teaching designers and developers how to improve the security of their systems, I have been on a mission to mentor and train people to observe effective security practices and principles.  I&#8217;ve also had operational responsibility for system infrastructures.  With that experience I was able to pass GIAC&#8217;s <strong>GSEC </strong>and Red Hat&#8217;s <strong>RHCE </strong>exams several years ago.</p>
<p>Personally, the process of studying and passing the exam allowed me to pursue and attain a non-trivial goal.  I am enrolled and taking classes toward my master&#8217;s degree, but completing that work will require several more years of part time attendance.  Setting and achieving intermediate goals helps to keep me focused and learning.</p>
<p>If you are wondering what the CISSP is all about, please read on.</p>
<p><span id="more-402"></span><em>The (ISC)<sup>2</sup>&#8216;s CISSP Common Body of Knowledge (CBK) covers 10 security-centric domains.</em> It is this CBK that forms the basis of the CISSP exam.  The domains cover a broad array of subject areas including physical security, operations security, cryptography, business continuity, network security and so forth.</p>
<p>The bulk of my experience falls solidly into three of the domains: Application Security; Cryptography; and Telecommunications and Network Security.  I have had operational experience in several other domains and there are a few which represent areas well outside any of my professional responsibilities.</p>
<p>I began studying in 2009 by reading the CISSP for Dummies book<sup>b</sup>.  I wanted something that would give me a quick overview of the domains and exam process.  The book was helpful, though insufficient as my sole source for understanding the breadth and depth of the CBK.  <em>One suggestion the book made, which later turned out to be quite wise, was to sign up for the exam in order to force oneself to buckle down and study.</em></p>
<p>I next read the (ISC)<sup>2</sup>&#8216;s official guide to the CISSP CBK<sup>c</sup>.  Although somewhat dry, the book gave me a solid understanding of the knowledge expectations that the (ISC)<sup>2</sup> has for someone to pass the exam and represent the profession.  I took a long time to finish this book, putting it aside at times to read books on other subjects.</p>
<p><strong>In February of 2010 I finally took the advice from the &#8220;For Dummies&#8221; book and registered for the exam that was scheduled to take place nearby in April. </strong>Now the clock was truly ticking and I wanted to assess where I stood.  I knew that I was solid in some domains but likely weak in others.</p>
<p>In order to have access to a broad set of practice exam questions, I purchased Shon Harris&#8217; CISSP exam guide<sup>d</sup>.  This book is well written and very approachable.  There are lighthearted comments sprinkled throughout the book which help to make the material more engaging.  The book also supplies a testing tool with a nice set of practice questions.</p>
<p>After completing the Harris book I took a practice exam and identified my weakest domains (<em>Security Architecture and Design, Physical Security</em>).  I applied some focused study around these 2 areas and took another practice exam, passing with better than 95% across all domains.  At that point I felt I was ready, which was good since it was getting close to exam day.</p>
<p>A couple of weeks before the exam I received an email containing my exam admission document.  It spelled out the location and process for taking the exam.  This information agreed with the background provided in the books I had read.  Essentially you don&#8217;t need anything beyond the admission document and an acceptable photo id (such as a driver&#8217;s license).</p>
<p>You can usually bring something to drink and eat, since you may be there for up to 6 hours.  Where I took the exam, all the test takers were required to put their drinks and snacks at the back of the room and go there to partake.</p>
<p>While taking the test, time flew by for me.  I had no idea what time it was when I left since I didn&#8217;t have my cell phone with me (electronic devices were not allowed in the exam room).  It turned out that I had taken about 3 hours to finish.</p>
<p>Over the next few months I intend to blog about each domain including highlights around material that was new to me as well as information that I already knew and was clearly germane to the CBK.</p>
<p>I am interested in hearing about experiences from others that have taken the exam or are contemplating taking it.  <em><strong>Since I have a background in education I&#8217;m looking for an opportunity to assist with a study group for prospective CISSP test takers.  Perhaps we can get a group started in the Albany/Schenectady area.</strong></em></p>
<p><sup>a</sup> Website: <a href="http://www.isc2.org/" target="_new">ISC<sup>2</sup></a><br />
<sup>b</sup> Book: <a href="http://www.dummies.com/store/product/CISSP-For-Dummies-3rd-Edition.productCd-0470537914.html" target="_new">CISSP for Dummies</a><br />
<sup>c</sup> Book: <a href="http://www.isc2education.org/store/product_info.php?cPath=9&amp;products_id=41" target="_new">Official (ISC)<sup>2</sup> Guide to the CISSP CBK</a><br />
<sup>d</sup> Book: <a href="http://www.logicalsecurity.com/store/vmchk/cissp-all-in-one-exam-guide-fifth-edition.html" target="_new">CISSP All-in-One Exam Guide</a></p>
]]></content:encoded>
			<wfw:commentRss>http://monead.com/blog/?feed=rss2&amp;p=402</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>My First Semantic Web Program</title>
		<link>http://monead.com/blog/?p=382</link>
		<comments>http://monead.com/blog/?p=382#comments</comments>
		<pubDate>Sun, 06 Jun 2010 02:31:43 +0000</pubDate>
		<dc:creator>David Read</dc:creator>
				<category><![CDATA[Information Systems]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[Software Composition]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Tools and Applications]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[ontology]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[semantics]]></category>
		<category><![CDATA[system integration]]></category>

		<guid isPermaLink="false">http://monead.com/blog/?p=382</guid>
		<description><![CDATA[I have create my first slightly interesting, to me anyway, program that uses some semantic web technology.  Of course I&#8217;ll look back on this in a year and cringe, but for now it represents my understanding of a small set of features from Jena and Pellet. The basis for the program is an example program [...]]]></description>
			<content:encoded><![CDATA[<p style="padding-top:14px;">I have create my first slightly interesting, to me anyway, program that uses some semantic web technology.  Of course I&#8217;ll look back on this in a year and cringe, but for now it represents my understanding of a small set of features from Jena and Pellet.</p>
<p>The basis for the program is an example program that is described in <em>Hebler, Fischer et al&#8217;s </em>book &#8220;<strong>Semantic Web Programming</strong>&#8221; (ISBN: 047041801X).  The intent of the program is to load an ontology into three models, each running a different level of reasoner (RDF, RDFS and OWL) and output the resulting assertions (triples).</p>
<p>I made a couple of changes to the book&#8217;s sample&#8217;s approach.  First I allow any supported input file format to be automatically loaded (you don&#8217;t have to tell the program what format is being used).  Second, I report the actual differences between the models rather than just showing all the resulting triples.</p>
<p>As I worked on the code, which is currently housed in one uber-class (<em>that&#8217;ll have to be refactored!</em>), I realized that there will be lots of reusable &#8220;plumbing&#8221; code that comes with this type of work.  Setting up models with various reasoners, loading ontologies, reporting triples, interfacing to triple stores, and so on will become nuisance code to write.</p>
<p>Libraries like Jena help, but they abstract at a low level.  I want a semantic workbench that makes playing with the various libraries and frameworks easy.  To that end I&#8217;ve created a <strong>Sourceforge </strong>project called &#8220;<strong>Semantic Workbench</strong>&#8220;.</p>
<p><em><strong>I intend for the Semantic Workbench to provide a GUI environment for manipulating semantic web technologies. </strong></em>Developers and power users would be able to use such a tool to test ontologies, try various reasoners and validate queries.  Developers could use the workbench&#8217;s source code to understand how to utilize frameworks like Jena or reasoner APIs like that of Pellet.</p>
<p><strong>I invite other interested people to join the Sourceforge project. </strong>The  project&#8217;s URL is: <a href="http://semanticwb.sourceforge.net/" target="_new">http://semanticwb.sourceforge.net/</a></p>
<p>On the data side, in order to have a rich semantic test data set to utilize, I&#8217;ve started an ontology that I hope to grow into an interesting example.  I&#8217;m using the insurance industry as its basis.  The rules around insurance and the variety of concepts should provide a rich set of classes, attributes and relationships for modeling.  My first version of this example ontology is included with the sample program.</p>
<p>Finally, I&#8217;ve added a semantic web section to my website where I&#8217;ll maintain links to useful information I find as well as sample code or files that I think might be of interest to other developers.  <strong><em>I&#8217;ve placed the sample program and ontology described earlier in this post on that page along with links to a variety of resources.</em></strong></p>
<p>My site&#8217;s semantic web page&#8217;s URL is: <a href="http://monead.com/semantic/">http://monead.com/semantic/</a><br />
The URL for the page describing the sample program is: <a href="http://monead.com/semantic/proj_diffinferencing.html">http://monead.com/semantic/proj_diffinferencing.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://monead.com/blog/?feed=rss2&amp;p=382</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Angels and Saints, Patience Please</title>
		<link>http://monead.com/blog/?p=367</link>
		<comments>http://monead.com/blog/?p=367#comments</comments>
		<pubDate>Tue, 01 Jun 2010 03:06:22 +0000</pubDate>
		<dc:creator>David Read</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[church]]></category>

		<guid isPermaLink="false">http://monead.com/blog/?p=367</guid>
		<description><![CDATA[&#8220;I like the silent church before the service begins, better than any preaching.&#8221; -Ralph Waldo Emerson This quote has been running through my head a lot as I&#8217;ve been spending time alone in church.  Our church music director will be away for the first three Sundays in June and asked if I would be willing [...]]]></description>
			<content:encoded><![CDATA[<p><br/><strong>&#8220;I like the silent church before the service begins, better than any preaching.&#8221;</strong> -Ralph Waldo Emerson</p>
<p>This quote has been running through my head a lot as I&#8217;ve been spending time alone in church.  Our church music director will be away for the first three Sundays in June and asked if I would be willing to take the reins during his absence.  This isn&#8217;t the first time I done this, but I believe it is the longest stint I&#8217;ve had.</p>
<p>My initial thinking, and usual approach, when playing the service is to use the piano to accompany everything.  This is where I feel safest.  I spend a lot of time at the piano, working with the Children&#8217;s Choir, rehearsing with the Brass Kickers and accompanying myself for a variety of solos and duets.</p>
<p>However, I&#8217;ve begun to feel compelled to use the organ.  Its variety of colors, range of tones and wide dynamic range cannot be approached by the piano.  Although I love the sound of a piano accompanying a solo voice, the organ adds significant sonic breadth, especially when accompanying hymns.</p>
<p>In fact, I believe that it is the flatness of verse after verse of a hymn played on the piano that has continually pushed me to move out of my personal comfort zone and explore the organ as a more versatile and ultimately more appropriate instrument for such situations.  To be sure, it is now taking me an inordinate amount of time to prepare for a service.</p>
<p>When using the piano, all I needed to do was learn to play the notes.  Now I need to worry about the voicings for each verse.  Looking at the text to suggest color and dynamics adds work.  Basic tasks such as figuring out which manual to use for each verse and configuring piston settings so that they are convenient to access while playing also adds complexity for someone that does not use the instrument often.</p>
<p>I have great respect for those that make such planning and preparation look easy.  I cannot imagine doing this week after week, at least not with a separate full time job.  I would guess that over time one would get to know the instrument and have a more organized approach to this process.  For me there is a great deal of experimentation, figuring out which ranks extend into which octaves and which timbres sound well together.</p>
<p>To be sure, it is an amazing experience to fiddle with such decisions and hear the difference in the feeling invoked by a given hymn.  Played with certain stops, the piece is upbeat.  Change the sounds and it is suddenly reflective or pensive.  In fact, my biggest risk is probably over-using the breadth of sounds and dynamics.</p>
<p>For instance the carillon seems like a great choice for bringing out a melody, perhaps to introduce a hymn.  However, it would probably be tiresome for the congregation if used every week.  Also, it is tempting to approach some hymns with a powerful accompaniment.  I enjoy hearing the reverberation at the end of the piece while practicing.  However, the congregation shouldn&#8217;t be in a shouting match with the organ, so I&#8217;ll need to tame my &#8220;Virgil Fox-ness&#8221;<sup>1</sup>.</p>
<p>This will be in interesting month of Sundays for me and the congregation.  I pray we will each find enjoyment and meaning during the worship time spent together.</p>
<p>At the least, I hope those worshiping don&#8217;t come away saying, <strong>&#8220;I like the silent church before the service begins, better than Dave&#8217;s organ  playing.&#8221;<br />
 <img src='http://monead.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></p>
<p><sup>1</sup><a href="http://en.wikipedia.org/wiki/Virgil_Fox" target="_new">http://en.wikipedia.org/wiki/Virgil_Fox</a></p>
]]></content:encoded>
			<wfw:commentRss>http://monead.com/blog/?feed=rss2&amp;p=367</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Database Refactoring and RDF Triples</title>
		<link>http://monead.com/blog/?p=359</link>
		<comments>http://monead.com/blog/?p=359#comments</comments>
		<pubDate>Thu, 13 May 2010 00:51:28 +0000</pubDate>
		<dc:creator>David Read</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Information Systems]]></category>
		<category><![CDATA[Semantic Web]]></category>
		<category><![CDATA[Software Composition]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Tools and Applications]]></category>
		<category><![CDATA[agile development]]></category>
		<category><![CDATA[efficient coding]]></category>
		<category><![CDATA[enterprise applications]]></category>
		<category><![CDATA[enterprise systems]]></category>
		<category><![CDATA[linkedin]]></category>
		<category><![CDATA[ontology]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[semantic web]]></category>
		<category><![CDATA[semantics]]></category>
		<category><![CDATA[system integration]]></category>

		<guid isPermaLink="false">http://monead.com/blog/?p=359</guid>
		<description><![CDATA[One of the aspects of agile software development that may lead to significant angst is the database.  Unlike refactoring code, the refactoring of the database schema involves a key constraint – state!  A developer may rearrange code to his or her heart&#8217;s content with little worry since the program will start with a blank slate [...]]]></description>
			<content:encoded><![CDATA[<p>One of the aspects of agile software development that may lead to significant angst is the database.  Unlike refactoring code, the refactoring of the database schema involves a key constraint – <strong><em>state</em></strong>!  A developer may rearrange code to his or her heart&#8217;s content with little worry since the program will start with a blank slate when execution begins.  However, the database &#8220;<em>remembers</em>.&#8221;  If one accepts that <strong>each iteration</strong> of an agile process <strong>produces</strong> a <strong>production release</strong> then the stored data can&#8217;t be deleted as part of the next iteration.</p>
<p>The refactoring of a database becomes less and less trivial as project development continues.  While developers have IDE&#8217;s to refactor code, change packages, and alter build targets, there are few tools for refactoring databases.</p>
<p>My definition of a <strong>database refactoring tool</strong> is one that assists the database developer by <strong>remembering the database transformation steps and storing them as part of the project</strong> – e.g. part of the build process.  This includes both the schema changes and data transformations.  Remember that the entire team will need to reproduce these steps on local copies of the database<em>.  It must be as easy to incorporate a peer&#8217;s database schema changes, without losing data, as it is to incorporate the code changes.</em></p>
<p>These same data-centric complexities exist in waterfall approaches when going from one version to the next.  Whenever the database structure needs to change, a path to migrate the data has to be defined.  That transformation definition must become part of the project&#8217;s artifacts so that the data migration for the new version is supported as the program moves between environments (test, QA, load test, integrated test, and production).  Also, the database transformation steps must be <em>automated and reversible</em>!</p>
<p>That last point, the ability to rollback, is a key part of any rollout plan.  We must be able to back out changes.  It may be that the approach to a rollback is to create a full database backup before implementing the update, but that assumption must be documented and vetted (e.g. the approach of a full backup to support the rollback strategy may not be reasonable in all cases).</p>
<p>This database refactoring issue becomes very tricky when dealing with multiple versions of an application.  The transformation of the database schema and data must be done in a defined order.  As more and more data is stored, the process consumes more storage and processing resources.  This is the ETL side-effect of any system upgrade.  Its impact is simply felt more often (e.g. potentially during each iteration) in an agile project.</p>
<p>As part of exploring semantic technology, I am interested in contrasting this to a database that consists of RDF triples.  The semantic relationships of data do not change as often (if at all) as the relational constructs.  Many times we refactor a relational database as we discover concepts that require one-to-many or many-to-many relationships.</p>
<p>Is an RDF triple-based database easier to refactor than a relational database?  Is there something about the use of RDF triples that reduces the likelihood of a multiplicity change leading to a structural change in the data?  If so, using RDF as the data format could be a technique that simplifies the development of applications.  For now, let&#8217;s take a high-level look at a refactoring use case.</p>
<p><span id="more-359"></span>Imagine we are in the first iteration of a web-based on-line store and we decide to support only ordering one item.  We opt to store that item in a table with the order header data.  In the next iteration we decide to add support for multiple items in the shopping basket.</p>
<p>We&#8217;ll refactor the database to support a one-to-many relationship between the order header and the shopping basket items.  There is nothing wrong with this approach; it is simply a part of refactoring the design.  Beyond altering the database schema (adding the <em>order_item</em> table and removing columns from the <em>order</em> table), this change will necessitate a transformation of the existing order data into the two-table structure.</p>
<p>What is interesting to me is to look at this situation where the data is modeled using RDF triples.  What data structure, if any, changes between these two iterations?</p>
<p>The semantic relationships don&#8217;t change.  What does change?  Very little, depending on the implementation.  If the first iteration&#8217;s RDF triple for the order was an <strong><em>order</em></strong> (subject), <strong><em>itemOrdered</em></strong> (predicate) and <strong><em>item</em></strong> (object), then the data structure is unchanged for iteration 2.  We will simply have to allow multiple <strong><em>itemOrdered</em></strong> predicates on the <strong><em>order</em></strong> instance.</p>
<p>Based on this conjecture we are off to a promising start in terms of simplifying data refactoring.  In this case no transformation work was needed to the data itself.  If many of our refactoring use cases look like this (changes to the restrictions and not the relationships) then the use of RDF triples as the data storage format offers an attractive alternative to relational databases when dealing with changing data needs.</p>
<p>Of course that concept (changing data needs) is a key aspect of the semantic web.  The ability to add new data and structures without breaking old ones is a requirement for an extensible and decentralized web database.  It makes sense that looking at a use case within a smaller scope would expose the same benefit.</p>
<p>Will database refactoring of RDF triple-based structures always be this simple?  I don&#8217;t believe so.  If the semantic relationship changes, due to our learning more about the domain, then there will be actual structural refactoring needed.  If we start out using a datatype property for an object and then convert to an object property, we will have to restructure any existing instances.</p>
<p>To defend against these types of issues we need to focus on the correct ontology for our domain first, before building applications.  Any application then built for that domain (company, industry) will benefit, regardless of the development process (e.g. agile, waterfall).</p>
<p>Have you worked with RDF triple-based data structures as part of an agile project?  If so, do you have thoughts on whether the use of triples simplified data storage refactoring from iteration to iteration?</p>
<p>I&#8217;ll be trying these techniques on a POC and hope to have more concrete examples of the impact of this alternate data storage approach.  It is just another example of where <strong><em>semantic technologies are positioned to significantly impact the ways that we design, develop and test software-based solutions.</em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://monead.com/blog/?feed=rss2&amp;p=359</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
