<?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>Simon Whatley &#187; relational database</title>
	<atom:link href="http://www.simonwhatley.co.uk/tag/relational-database/feed" rel="self" type="application/rss+xml" />
	<link>http://www.simonwhatley.co.uk</link>
	<description>The opposite of every great idea is another great idea</description>
	<lastBuildDate>Wed, 02 Nov 2011 09:28:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Preventing SQL Injection in an AIR Application</title>
		<link>http://www.simonwhatley.co.uk/preventing-sql-injection-in-an-air-application</link>
		<comments>http://www.simonwhatley.co.uk/preventing-sql-injection-in-an-air-application#comments</comments>
		<pubDate>Mon, 01 Sep 2008 10:41:20 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Adobe Integrated Runtime]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[attack]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[online repositories]]></category>
		<category><![CDATA[relational database]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Injection]]></category>
		<category><![CDATA[SQLite]]></category>
		<category><![CDATA[United States]]></category>
		<category><![CDATA[vulnerability]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=959</guid>
		<description><![CDATA[SQLite is a mostly ACID-compliant relational database management system contained in a relatively small (~500kB) C programming library. The Adobe AIR runtime includes the SQLite embedded database for use by Adobe AIR applications. This allows applications to run and store data locally and or synchronise the datastore with online repositories.]]></description>
			<content:encoded><![CDATA[<p>SQLite is a mostly <a href="http://en.wikipedia.org/wiki/ACID" title="Wikipedia: ACID" target="_blank" rel="nofollow">ACID</a>-compliant relational database management system contained in a relatively small (~500kB) C programming library. The Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym> runtime includes the SQLite embedded database for use by Adobe <acronym title="Adobe Integrated Runtime">AIR</acronym> applications. This allows applications to run and store data locally and or synchronise the datastore with online repositories.</p>
<p>Applications that depend on user input to create a <abbr title="Structured Query Language">SQL</abbr> statement &#8212; concatenating the user input to the SQL query &#8212; can become vulnerable to <a href="http://en.wikipedia.org/wiki/SQL_injection" title="Wikipedia: SQL Injection" target="_blank" rel="nofollow">SQL Injection</a> attacks, much like those common to web applications.</p>
<p><abbr title="Structured Query Language">SQL</abbr> Injection is a technique that exploits a security vulnerability occurring in the database layer of an application. The vulnerability is present when user input is either incorrectly filtered for string literal escape characters embedded in <abbr title="Structured Query Language">SQL</abbr> statements or user input is not strongly typed and thereby unexpectedly executed.</p>
<p>Fortunately, there is a simple solution to the problem: use parameterised <abbr title="Structured Query Language">SQL</abbr> Statements. Parameterised statements not only make your applications more secure and run more efficiently, but they also enable you to use objects, rather than literal values, in your queries. <abbr title="Structured Query Language">SQL</abbr> injection can&#8217;t happen because the parameter values are treated explicitly as substituted values, rather than becoming part of the literal statement text.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>Parameters in a <abbr title="Structured Query Language">SQL</abbr> statement can be either <em>named</em> or <em>unnamed</em>. Below are examples of both types of statement in ActionScript and JavaScript.</p>
<h3>Named Parameters</h3>
<p>A named parameter has a specific name that is used to match the parameter value to its placeholder location in the <abbr title="Structured Query Language">SQL</abbr> statement text. A parameter name consists of the colon (:) or an at (@) character followed by the variable&#8217;s name:</p>
<p><strong>ActionScript 3</strong></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> conn<span style="color: #000000; font-weight: bold;">:</span>SQLConnection = <span style="color: #0033ff; font-weight: bold;">new</span> SQLConnection<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #6699cc; font-weight: bold;">var</span> stmt<span style="color: #000000; font-weight: bold;">:</span>SQLStatement = <span style="color: #0033ff; font-weight: bold;">new</span> SQLStatement<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
stmt.sqlConnection = conn;
stmt.<span style="color: #004993;">text</span> = <span style="color: #990000;">&quot;INSERT INTO user VALUES(@title, @firstname, @lastname)&quot;</span>;
stmt.<span style="color: #004993;">parameters</span><span style="color: #000000;">&#91;</span><span style="color: #990000;">&quot;@title&quot;</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;Mr&quot;</span>;
stmt.<span style="color: #004993;">parameters</span><span style="color: #000000;">&#91;</span><span style="color: #990000;">&quot;@firstname&quot;</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;Simon&quot;</span>;
stmt.<span style="color: #004993;">parameters</span><span style="color: #000000;">&#91;</span><span style="color: #990000;">&quot;@lastname&quot;</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;Whatley&quot;</span>;
stmt.execute<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span></pre></div></div>

<p><strong>JavaScript</strong></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> conn <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">SQLConnection</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> stmt <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">SQLStatement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">sqlConnection</span> <span style="color: #339933;">=</span> conn<span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">text</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;INSERT INTO user VALUES(@title, @firstname, @lastname)&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">parameters</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;@title&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Mr&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">parameters</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;@firstname&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Simon&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">parameters</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;@lastname&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Whatley&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>Unnamed Parameters</h3>
<p>As an alternative to using explicit named parameters, you can also use implicit unnamed parameters. To use an unnamed parameter you simply designate a parameter in the <abbr title="Structured Query Language">SQL</abbr> statement using a question mark (?) character. Each parameter is assigned a numeric index, according to the order in which the parameters appear in the <abbr title="Structured Query Language">SQL</abbr> statement, <em>starting with index 0 (zero)</em> for the first parameter.</p>
<p><strong>ActionScript 3</strong></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> conn<span style="color: #000000; font-weight: bold;">:</span>SQLConnection = <span style="color: #0033ff; font-weight: bold;">new</span> SQLConnection<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #6699cc; font-weight: bold;">var</span> stmt<span style="color: #000000; font-weight: bold;">:</span>SQLStatement = <span style="color: #0033ff; font-weight: bold;">new</span> SQLStatement<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
stmt.sqlConnection = conn;
stmt.<span style="color: #004993;">text</span> = <span style="color: #990000;">&quot;INSERT INTO address VALUES(?, ?, ?, ?)&quot;</span>;
stmt.<span style="color: #004993;">parameters</span><span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;123 Main Street&quot;</span>;
stmt.<span style="color: #004993;">parameters</span><span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;Sometown&quot;</span>;
stmt.<span style="color: #004993;">parameters</span><span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">2</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;12345&quot;</span>;
stmt.<span style="color: #004993;">parameters</span><span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">3</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;USA&quot;</span>;
stmt.execute<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span></pre></div></div>

<p><strong>JavaScript</strong></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> conn <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">SQLConnection</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> stmt <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> air.<span style="color: #660066;">SQLStatement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">sqlConnection</span> <span style="color: #339933;">=</span> conn<span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">text</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;INSERT INTO address VALUES(?, ?, ?, ?)&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">parameters</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;123 Main Street&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">parameters</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Sometown&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">parameters</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;12345&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">parameters</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;USA&quot;</span><span style="color: #339933;">;</span>
stmt.<span style="color: #660066;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>Note: Use <code>clearParameters()</code> to empty the statement parameters array; e.g. <code>stmt.clearParameters()</code>.</p>
<h3>Advantages</h3>
<ol>
<li><strong>Performance</strong> &#8211; A <abbr title="Structured Query Language">SQL</abbr> statement that uses parameters can execute more efficiently compared to one that dynamically creates the <abbr title="Structured Query Language">SQL</abbr> text each time it executes. The performance improvement is because the statement is prepared once and then executed multiple times using different parameter values, without needing to recompile the <abbr title="Structured Query Language">SQL</abbr> statement. A comparison can be draw with database stored procedures.</li>
<li><strong>Data Typing</strong> &#8211; Parameters are used to allow for typed-substitution of values that are unknown at the time the <abbr title="Structured Query Language">SQL</abbr> statement is constructed. The use of parameters is the only way to guarantee the type (storage class) for a value passed to the database. Using paramters therefore, implies better performance and security. When parameters are not used, the runtime attempts to convert all values from their text representation to a type based on the associated column&#8217;s type.</li>
<li><strong>Security</strong> &#8211; The <acronym title="Adobe Integrated Runtime">AIR</acronym> application is not vulnerable to <abbr title="Structured Query Language">SQL</abbr> injections so common to web applications.</li>
</ol>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/preventing-sql-injection-in-an-air-application/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Are these Contenders for Acquisition by Adobe?</title>
		<link>http://www.simonwhatley.co.uk/are-these-contenders-for-acquisition-by-adobe</link>
		<comments>http://www.simonwhatley.co.uk/are-these-contenders-for-acquisition-by-adobe#comments</comments>
		<pubDate>Wed, 23 Apr 2008 12:22:29 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Strategy]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[analytics tools]]></category>
		<category><![CDATA[Applications]]></category>
		<category><![CDATA[asset management]]></category>
		<category><![CDATA[Blist]]></category>
		<category><![CDATA[Brio]]></category>
		<category><![CDATA[Buzzword]]></category>
		<category><![CDATA[database software application]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Internet Application]]></category>
		<category><![CDATA[Internet application technologies]]></category>
		<category><![CDATA[Internet Evangelist writing]]></category>
		<category><![CDATA[king]]></category>
		<category><![CDATA[online database market]]></category>
		<category><![CDATA[online database systems]]></category>
		<category><![CDATA[online presence]]></category>
		<category><![CDATA[online productivity application]]></category>
		<category><![CDATA[online spreadsheet]]></category>
		<category><![CDATA[Photoshop Express]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[presentation applications]]></category>
		<category><![CDATA[presentation creation applications]]></category>
		<category><![CDATA[presentation products]]></category>
		<category><![CDATA[relational database]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Rich Internet Applications]]></category>
		<category><![CDATA[Ryan Stewart]]></category>
		<category><![CDATA[Share]]></category>
		<category><![CDATA[slide shows]]></category>
		<category><![CDATA[SlideRocket]]></category>
		<category><![CDATA[spreadsheets]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[web-based presentation application]]></category>
		<category><![CDATA[web-based tools]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=533</guid>
		<description><![CDATA[Adobe has progressively been developing an online presence with Buzzword, Share, Brio and Photoshop Express. But the online presence falls short of important spreadsheet and presentation applications.

So who could the contenders be? Here are two extremely promising applications built on the Flash platform]]></description>
			<content:encoded><![CDATA[<p>Adobe has progressively been <a href="/adobes-expanding-online-empire">developing an online presence</a> with Buzzword, Share, Brio and Photoshop Express. But the online presence falls short of important spreadsheet and presentation applications.</p>
<p>So who could the contenders be? Here are two extremely promising applications built on the Flash platform:</p>
<h3>SlideRocket</h3>
<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/sliderocket-logo.png' alt='SlideRocket Logo' style="margin-right:5px; float:left;" />SlideRocket is a <a href="http://en.wikipedia.org/wiki/Rich_Internet_application" title="rich Internet application" target="_blank" rel="nofollow">rich Internet application</a>, built on the Flash platform, that provides for every part of the presentation lifecycle. It integrates authoring, asset management, delivery and analytics tools into a single hosted environment that allows you to quickly create stunning presentations, intelligently manage your assets, securely share your slides, and measure the results.</p>
<p>There are already a number of companies that are striving to be the web-based presentation application of choice, including <a href="http://docs.google.com/" title="Google Docs" target="_blank" rel="nofollow">Google</a>, <a href="http://show.zoho.com/" title="Zoho Show" target="_blank" rel="nofollow">Zoho</a> and <a href="http://www.empressr.com/" title="Empressr" target="_blank" rel="nofollow">Empressr</a>.</p>
<p>SlideRocket is the first online productivity application that embraces business level features such as collaboration, robust security, dynamic data binding and business integration with applications like Salesforce.com. SlideRocket aims to differentiate itself from other presentation products by including a community marketplace where content and services can be shared and transacted. SlideRocket also embraces the best of the Internet with features like asset tagging, web content mashups, embedded data services and seamless rich media support.</p>
<blockquote><p>It&#8217;s absolutely one of the best presentation creation applications out there. And because itâ€™s built on rich Internet application technologies you can add interactivity and create a cinematic experience that I haven&#8217;t seen done any where else.</p></blockquote>
<p><em>Ryan Stewart, Adobe&#8217;s Rich Internet Evangelist writing in ZDNet &#8211; <a href="http://blogs.zdnet.com/Stewart/?p=793" title="SlideRocket - the king of presentation applications" target="_blank" rel="nofollow">SlideRocket &#8211; the king of presentation applications</a>.</em></p>
<p><a href='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/sliderocket-1.png' title='SlideRocket - main presentation screen' rel="lightbox" style="margin-right:5px"><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/sliderocket-1.thumbnail.png' alt='SlideRocket - main presentation screen' /></a><a href='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/sliderocket-2.png' title='SlideRocket - incorporating video' rel="lightbox" style="margin-right:5px"><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/sliderocket-2.thumbnail.png' alt='SlideRocket - incorporating video' /></a><a href='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/sliderocket-3.png' title='SlideRocket - adding Flickr to the library' rel="lightbox" style="margin-right:5px"><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/sliderocket-3.thumbnail.png' alt='SlideRocket - adding Flickr to the library' /></a><a href='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/sliderocket-4.png' title='SlideRocket - manipulating images' rel="lightbox"><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/sliderocket-4.thumbnail.png' alt='SlideRocket - manipulating images' /></a></p>
<p><em>(click on the images for more detail)</em></p>
<p>SlideRocket has been designed from the ground up with extensibility and portability in mind as well. To this effect, third party developers will be able to build components into slideshows using the application&#8217;s APIs, creating compelling presentations.</p>
<p>You can find more information on the <a href="http://www.sliderocket.com" title="SlideRocket" target="_blank" rel="nofollow">SlideRocket website</a>.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h3>blist</h3>
<p><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/blist-logo.png' alt='Blist Logo' style="margin-right:5px; float:left;" />Blist makes it easy for anyone to create private or collaborative databases.</p>
<p>Blist is not alone in the online database market. <a href="http://db.zoho.com" title="Zoho DB" target="_blank" rel="nofollow">Zoho DB</a>, <a href="http://www.dabbledb.com" title="DabbleDB" target="_blank" rel="nofollow">DabbleDB</a> and <a href="http://www.trackvia.com" title="Trackvia" target="_blank" rel="nofollow">Trackvia</a> are all web-based tools that provide users the ability to create and administer databases.</p>
<p>Although Blist&#8217;s simplicity makes it seem like you&#8217;re not dealing with anything more complicated than an online spreadsheet, the Blist user interface is actually hiding a complex relational database backend.</p>
<p>Unlike other online database systems, such as <a href="http://db.zoho.com" title="Zoho DB" target="_blank" rel="nofollow">Zoho DB</a>, using Blist doesn&#8217;t require the user to know <acronym title="Structured Query Language">SQL</acronym> to use all it has to offer. This makes Blist great for users who need more than an Excel spreadsheet, but who don&#8217;t want to delve into the complexities of a database software application like Access.</p>
<p><a href='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/blist-beta-1.png' title='Blist Beta' rel="lightbox" style="margin-right:5px"><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/blist-beta-1.thumbnail.png' alt='Blist Beta' /></a><a href='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/blist-beta-2.png' title='Blist Beta' rel="lightbox" style="margin-right:5px"><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/blist-beta-2.thumbnail.png' alt='Blist Beta' /></a><a href='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/blist-beta-3.png' title='Blist Beta' rel="lightbox" style="margin-right:5px"><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/blist-beta-3.thumbnail.png' alt='Blist Beta' /></a><a href='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/blist-beta-4.png' title='Blist Beta' rel="lightbox"><img src='http://www.simonwhatley.co.uk/blog/wp-content/uploads/2008/04/blist-beta-4.thumbnail.png' alt='Blist Beta' /></a></p>
<p><em>(click on the images for more detail)</em></p>
<p>Blist&#8217;s focus on making database creation and management a straightforward process, built on an always available, rich Internet application suggests it can fill a niche. Demand will prove the depth of such a niche, but if it grabs enough attention from people as regular users, it will become an extremely interesting prospect for acquisition.</p>
<p>You can find more information on the <a href="http://www.blist.com" title="blist" target="_blank" rel="nofollow">blist website</a>.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/are-these-contenders-for-acquisition-by-adobe/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ColdFusion ORM Frameworks &amp; Tools</title>
		<link>http://www.simonwhatley.co.uk/coldfusion-orm-frameworks-tools</link>
		<comments>http://www.simonwhatley.co.uk/coldfusion-orm-frameworks-tools#comments</comments>
		<pubDate>Thu, 27 Apr 2006 20:53:05 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Active Record Factory]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[code generation]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[Doug Hughes]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[generation]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[mapping]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Nicholas Tunney]]></category>
		<category><![CDATA[object]]></category>
		<category><![CDATA[object relational mapping]]></category>
		<category><![CDATA[object-oriented programming]]></category>
		<category><![CDATA[ObjectBreeze]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Reactor]]></category>
		<category><![CDATA[Reactor Reactor]]></category>
		<category><![CDATA[relational database]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Transfer]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=65</guid>
		<description><![CDATA[Object-Relational Mapping (or ORM), is a programming technique that links databases to object-oriented language concepts, creating (in effect) a "virtual object database". There are both free and commercial packages available that perform object-relational mapping, although some programmers opt to code their own object-relational mapping for their systems.]]></description>
			<content:encoded><![CDATA[<p><strong>Object-Relational Mapping (or ORM)</strong>, is a programming technique that links databases to object-oriented language concepts, creating (in effect) a &#8220;virtual object database.&#8221; There are both free and commercial packages available that perform object-relational mapping, although some programmers opt to code their own object-relational mapping for their systems.</p>
<p>In object-oriented programming, programming objects represent real-world objects. To illustrate, consider the example of an address book, which contains listings of people along with zero or more phone numbers and zero or more addresses. In object-oriented terms this would be represented by a &#8220;person object&#8221; with &#8220;slots&#8221; (fields, members, instance variables etc.) to hold the data that make up this listing: the person&#8217;s name, a list (or array) of phone numbers, and a list of addresses.</p>
<p>The crux of the problem is in translating those objects to forms which can be stored in files or databases, and which can later be retrieved easily while preserving the properties of the objects and their relationships; these objects can then be said to be persistent.</p>
<p>Object-Relational systems attempt to solve this problem by providing libraries of classes which are able to do this mapping automatically. Given a list of tables in the database, and objects in the program, they will automatically map requests from one to the other. Asking a person object for its phone numbers will result in the proper query being created and sent, and the results being &#8220;magically&#8221; translated directly into phone number objects inside the program.</p>
<p>From a programmer&#8217;s perspective, the system looks like a persistent object store. One can create objects and work with them as one would normally, and they automatically end up in the relational database.</p>
<p>A number of ORM frameworks have been created for ColdFusion:</p>
<h2>Reactor</h2>
<p>Reactor, created by Doug Hughes of <a target="_blank" title="Alagad" href="http://www.alagad.com/">Alagad</a> fame, is a very simple <acronym title="Application Program Interface">API</acronym> for ColdFusion which generates and instantiates database abstraction <acronym title="ColdFusion Components">CFCs</acronym> on the fly as needed.</p>
<p><a title="Reactor for ColdFusion" target="_blank" href="http://www.doughughes.net/index.cfm?filter=category&#038;categoryId=30">http://www.doughughes.net/</a></p>
<h2>Arf!</h2>
<p>Active Record Factory (Arf!) is a Rails-style ActiveRecord implementation in ColdFusion.</p>
<p>Below is a list of the basics that Arf! provides:</p>
<ul>
<li>JDBC metadata based reflection:  not database specific</li>
</ul>
<ul>
<li>Creates ActiveRecord <acronym title="Application Program Interface">API</acronym>&#8216;d instances out of <acronym title="ColdFusion Components">CFCs</acronym> that extend a base ActiveRecord component</li>
</ul>
<ul>
<li>Implements hasMany() and belongsTo() methods for establishing Record properties that point to other tables</li>
</ul>
<ul>
<li>Allows for overloading any of the automagically generated methods to add custom business logic</li>
</ul>
<ul>
<li>Automagic methods on Records include GetInstance(), Create(), Read(), Update(), Delete(), Save() [smart create/update], List(orderBy, whereClause), Validate() [does type and length checking], and SetNNN()/GetNNN() methods for each DB column</li>
</ul>
<p><a title="Arf!" target="_blank" href="http://www.clearsoftware.net/index.cfm?mode=cat&#038;catid=4BF355FB-E081-2BAC-691AF2BBF35F5E7C">http://www.clearsoftware.net/</a></p>
<h2>objectBreeze</h2>
<p>Developed by Nicholas Tunney, objectBreeze is an <acronym title="Object-Relational Mapping">ORM</acronym> tool that allows you to interact with your data persistence layer and easily model objects within your ColdFusion applications. With no setup, objectBreeze will instantly create objects directly from your database schema. objectBreeze requires that your table has -a- primary key defined. Currently, objectBreeze works with Microsoft SQL, Oracle, MySQL and PostgreSQL, but other versions are on the way.</p>
<p><a title="objectBreeze" target="_blank" href="http://www.objectbreeze.com/ob/">http://www.objectbreeze.com/ob/</a></p>
<h2>cfcPowerTools</h2>
<p>Batch generation of your data layer objects in minutes.</p>
<p><a title="cfcPowerTools" target="_blank" href="http://cfcpowertools.riaforge.org/">http://cfcpowertools.riaforge.org/</a></p>
<h2>Transfer</h2>
<p>Transfer was built out of a need to speed up the development process that is normally slowed down by the development of Business Objects and Data Access Objects.</p>
<p>Transfer does this through a series of methods, including SQL generation and CFML code generation, that all occur during the run-time process.</p>
<p>All this is configured through a XML file, that maps your object generation back to the tables and columns in your database.</p>
<p><a title="Transfer object Relational Mapping" href="http://www.compoundtheory.com/?action=transfer.index">http://www.compoundtheory.com/</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/coldfusion-orm-frameworks-tools/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ColdFusion &amp; Lucene</title>
		<link>http://www.simonwhatley.co.uk/coldfusion-lucene</link>
		<comments>http://www.simonwhatley.co.uk/coldfusion-lucene#comments</comments>
		<pubDate>Sun, 09 Apr 2006 22:54:09 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Aaron Johnson]]></category>
		<category><![CDATA[Aaron Johnson Inspired]]></category>
		<category><![CDATA[alternative]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Apache Lucene Java library]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[author]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[dynamic Web applications]]></category>
		<category><![CDATA[engine]]></category>
		<category><![CDATA[Full-Text Search]]></category>
		<category><![CDATA[indexing]]></category>
		<category><![CDATA[Jakarta]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Lucene]]></category>
		<category><![CDATA[Lucene Java library]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Microsoft Windows]]></category>
		<category><![CDATA[operating system]]></category>
		<category><![CDATA[RAM]]></category>
		<category><![CDATA[relational database]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[search capabilities]]></category>
		<category><![CDATA[search engine]]></category>
		<category><![CDATA[Solaris]]></category>
		<category><![CDATA[text search engine library]]></category>
		<category><![CDATA[Verity]]></category>
		<category><![CDATA[web application]]></category>

		<guid isPermaLink="false">http://www.simonwhatley.co.uk/?p=75</guid>
		<description><![CDATA[One of the many reasons to use ColdFusion MX is that it has a large, standard toolset that enbales the creation of full-featured, dynamic Web applications. The tag-based language makes it relatively simple to query a relational database and send e-mail. In a similar way, you can create and search Verity full-text indexes.]]></description>
			<content:encoded><![CDATA[<p>One of the many reasons to use ColdFusion MX is that it has a large, standard toolset that enables the creation of full-featured, dynamic Web applications. The tag-based language makes it relatively simple to query a relational database and send e-mail. In a similar way, you can create and search Verity full-text indexes.</p>
<p>However, there are situations where you cannot use the full-text searching capabilities of Verity. For example, Verity only runs on Windows, Linux and Solaris, therefore the ability to run ColdFusion MX on the Apple OS X operating system, whilst advantageuos to developers who code on the Apple platform, does not include the ability to use Verity. Furthermore, programmers who work in a hybrid J2EE/ColdFusion MX environment cannot natively use the Verity search capabilities in the J2EE environment. Finally, programmers who need customized searching and indexing capabilities may find the standard Verity integration limiting. There are work-arounds include installing Verity on a Windows, Linux, or Solaris server and configuring your ColdFusion server to use the remote Verity server, however these may not only be impractical, but cost-prohibitative.</p>
<p>Enter Lucene, an open source full-text searching framework from the Apache Jakarta project, which, when combined with ColdFusion MX, can be run on Apple OS X, can be programmatically accessed by both J2EE and ColdFusion MX developers, and can be fully customized and extended.Apache Lucene is a high-performance, full-featured text search engine library written entirely in Java. It is a technology suitable for nearly any application that requires full-text search, especially cross-platform.</p>
<p>Apache Lucene is an open source project available for <a title="Download Apache Lucene" target="_blank" href="http://www.apache.org/dyn/closer.cgi/lucene/java/">free download</a>.</p>
<p><strong>Features</strong></p>
<ul>
<li>Lucene offers powerful features through a simple API.</li>
</ul>
<p><strong>Scalable, High-Performance Indexing</strong></p>
<ul>
<li>Over 20MB/minute on Pentium M 1.5GHz</li>
<li>Small RAM requirements &#8212; only 1MB heap</li>
<li>Incremental indexing as fast as batch indexing</li>
<li>Index size roughly 20-30% the size of text indexed</li>
</ul>
<p><strong>Powerful, Accurate and Efficient Search Algorithms</strong></p>
<ul>
<li>Ranked searching &#8212; best results returned first</li>
<li>Many powerful query types: phrase queries, wildcard queries, proximity queries, range queries and more</li>
<li>Fielded searching (e.g., title, author, contents)</li>
<li>Date-range searching</li>
<li>Sorting by any field</li>
<li>Multiple-index searching with merged results</li>
<li>Allows simultaneous update and searching</li>
</ul>
<h2>ColdFusion &#038; Lucene Implementations</h2>
<p>If you don&#8217;t fancy attempting the task of writing your own ColdFusion implementation of Lucene, below are a couple of projects that will give you a kick-start along the road to indexing database content.  With the addition of other Java projects such as <a title="PDF Box" target="_blank" href="http://www.pdfbox.org/">PDFBox</a> the textual content of a pdf can also be extracted and indexed.</p>
<h2>Aaron Johnson</h2>
<p>Inspired by Lindex, Aaron Johnson has created a CFX Tag called CFX_Lucene that closely mimics the ColdFusion cfsearch tag, but uses Lucene rather than Verity.</p>
<p><a target="_blank" title="cfx_lucene" href="http://cephas.net/blog/lucene/index.html">http://cephas.net/blog/lucene/index.html</a></p>
<h2>CFLucene</h2>
<p>CFLucene is an open source project that attempts to provide developers an easy way to integrate the indexing and searching functions of the Apache Lucene Java library with a ColdFusion web application. The CFLucene is a collection of ColdFusion Components that natively call the Lucene Java classes to index and search any sort of textual data.</p>
<p><a title="CFLucene" target="_blank" href="http://www.cflucene.org/">http://www.cflucene.org/</a></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-6475233631580417";
/* 468x60 Basic */
google_ad_slot = "7117418273";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simonwhatley.co.uk/coldfusion-lucene/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

