<?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>Oracle Musings</title>
	<atom:link href="http://www.oraclemusings.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.oraclemusings.com</link>
	<description>ORACLE, Oracle Server, Oracle7, 8i, 9i, 10g and related (mostly performance) commentary.</description>
	<lastBuildDate>Thu, 17 May 2012 14:58:40 +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>NEOOUG Ohio, ODTUG Kscope12 and something unique from Redgate</title>
		<link>http://www.oraclemusings.com/?p=212</link>
		<comments>http://www.oraclemusings.com/?p=212#comments</comments>
		<pubDate>Wed, 16 May 2012 18:25:00 +0000</pubDate>
		<dc:creator>ddelmoli</dc:creator>
				<category><![CDATA[Coding Style]]></category>
		<category><![CDATA[Standards]]></category>

		<guid isPermaLink="false">http://www.oraclemusings.com/?p=212</guid>
		<description><![CDATA[If you&#8217;ve known me for a long time, and let&#8217;s face it, if you&#8217;re visiting this blog, you probably do, you know that I&#8217;m particularly proud of the work I was able to do at Network Solutions as the Director of Database Engineering and Development. I had the privilege of working with some of the [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve known me for a long time, and let&#8217;s face it, if you&#8217;re visiting this blog, you probably do, you know that I&#8217;m particularly proud of the work I was able to do at Network Solutions as the Director of Database Engineering and Development.</p>
<p>I had the privilege of working with some of the best software development colleagues I&#8217;ve ever encountered, including <a href="http://www.linkedin.com/pub/pete-fox/3/24a/17">Pete Fox</a> (Vice President of Engineering), <a href="http://www.linkedin.com/pub/brian-taylor/a/387/468">Brian Taylor</a> (Release Management), <a href="http://www.linkedin.com/pub/eric-faulkner/2/70/652">Eric Faulkner</a> (Product/Portfolio Owner), <a href="http://www.linkedin.com/in/mikecocozza">Mike Cocozza</a> (Application Tier) and <a href="http://www.linkedin.com/in/monanahavandi">Mona Nahavandi</a> (Presentation Tier), <a href="http://www.linkedin.com/in/sujatanakhre">Sujata Nakhre</a> (Billing) and <a href="http://www.linkedin.com/in/michellelee1?trk=pub-pbmap">Michelle Lee</a> (CRM), as well as a host of other professionals in QA and Operations to bring the Network Solutions website and IT applications to life.</p>
<p>I didn&#8217;t know it at the time (2002-2007) because it wasn&#8217;t well known yet, but we practiced what I now know to be proto-Agile and proto-<a href="http://thehelsinkideclaration.blogspot.com/2009/03/helsinki-declaration-observation-1.html">Helsinki</a> development of a complex system that was timeboxed and data-centric. We regularly released features in three-month cycles based on release themes made up of capabilities and features which were managed and prioritized by product owners.</p>
<p>Recently I had the privilege of presenting at the <a href="http://www.neooug.org/">Northeast Ohio Oracle User&#8217;s Group</a> <a href="http://www.neooug.org/generaltab/seminar_2012/seminar.html">training day conference</a> in Cleveland, Ohio and during the sessions I actually started to hear the stirrings of the Oracle community becoming more aware of Agile and Helsinki as ways to improve our ability to deliver quality Oracle-based software systems in a more rapid manner.</p>
<p>BTW, I couldn&#8217;t have been more impressed with the NEOOUG training day conference &#8212; I was highly surprised given that I had assumed attendees would be limited to North East Ohio, and that the conference itself would reflect a minimal ability to host a larger event.</p>
<p>I was wrong.</p>
<p>Held at Cleveland State University, I estimated the crowd at about 100-150 participants in state-of-the-art venues including university classrooms and ballroom spaces. Excellent wifi coverage was the icing on the cake.</p>
<p>I thought the quality of the presentations was pretty good as well &#8212; and I&#8217;ll definitely be returning in the future, as well as encouraging folks from the Midwest and Great Lakes regions to attend. The folks at NEOOUG told me they&#8217;re aiming to be as good as the <a href="http://www.rmoug.org/">RMOUG</a> Training Days conference and I&#8217;d say they&#8217;re clearly on the right track.</p>
<p>As an aside, I think it&#8217;s really a good idea for Oracle Technology conferences to be more closely identified with academia through the use of university / college facilities as opposed to the Applications-focused conferences which are more of a vendor event &#8212; I think it more clearly aligns the content with the audience and venue.</p>
<p>I gave 2 presentations at the conference: Implementing MapReduce with SQL and PL/SQL; and An Examination of Schema Architecture Patterns for Edition-Based Redefinition.</p>
<p>I&#8217;m particularly proud of the MapReduce presentation &#8212; it&#8217;s evolved nicely since I gave it at RMOUG and I&#8217;ll be reprising it at <a href="http://kscope12.com/">ODTUG KScope12</a> in June as well, but I was really pleasantly surprised at how well the EBR presentation went.</p>
<p>It&#8217;s probably because any discussion of EBR naturally aligns itself with how to use it to support a development process, and so I got to discuss some of my methods for doing database development:</p>
<p>1. Agile-style timeboxed deliveries<br />
2. Helsinki-style database APIs through stored procedures<br />
3. Describing the database as a &#8220;data server&#8221; accessed via an API (lately I prefer a RESTful API exposed via the APEX listener), instead of a &#8220;database server&#8221; with tables mapped into client-side ORMs<br />
4. Versioning of database objects &#8212; historically by appending version numbers to programmatic objects (packages and procedures), now by using Edition-Based Redefinition<br />
5. Extracting definitions of database objects to the file-system for source-code control check-in<br />
6. DDL auditing everywhere &#8212; Development, QA, Production &#8212; to track all database structural changes</p>
<p>#4, #5 and #6 have been areas of keen interest to me for over 7 years now &#8212; and I&#8217;m happy to say that tools and vendors have really been responsive to my requests for improvements. I can&#8217;t say enough good things about <a href="http://www.linkedin.com/in/krisrice">Kris Rice</a> and <a href="http://www.linkedin.com/pub/bryn-llewellyn/9/342/4b7">Bryn Llewellyn</a> from Oracle, who listen to my requests for features in SQL Developer and how I might use EBR &#8212; I&#8217;ve seen changes that make SQL Developer get better and better at #4 and #5 in particular – now you can generate individual scripts per object and use the new Cart feature for deployment.</p>
<p>Today I want to talk about another vendor looking to provide capability in #4 and #5 in a unique way: through a live opportunity to engage the Oracle developer community in a rapid feedback loop on features at the upcoming <a href="http://kscope12.com/">ODTUG KScope12 conference</a> in San Antonio, TX on June 24-28, 2012.</p>
<p><a href="http://www.red-gate.com/products/oracle-development/">Redgate Software</a> has done a bunch of work in the SQL Server space for years and more recently has upped their game in the Oracle tools world with their Schema Compare, Data Compare and Schema Doc products, as well as hosting the <a href="http://allthingsoracle.com/">AllThingsOracle.com</a> website. And at KScope they&#8217;re looking to really interact with the development community on building Source Code Control for Oracle in a live, agile fashion.</p>
<p>Instead of a simple product demonstration booth, Redgate will be using their <a href="http://www.red-gate.com/products/oracle-development/source-control-for-oracle/kscope12">vendor space as a mini-development shop</a>, soliciting features from conference attendees and using an agile development process to actualize those features into a prototype product for Oracle Source Code Control.</p>
<p>Needless to say, I&#8217;m excited about it &#8212; I have definite ideas on what works and what doesn&#8217;t work for Oracle source code control and I can&#8217;t wait to try and get those things implemented while seeing what other developers and DBAs also want.</p>
<p>If database development is at all important to you, this sounds like a great opportunity to get your ideas out there.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oraclemusings.com/?feed=rss2&#038;p=212</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Death of the Enterprise Architect?</title>
		<link>http://www.oraclemusings.com/?p=208</link>
		<comments>http://www.oraclemusings.com/?p=208#comments</comments>
		<pubDate>Thu, 10 May 2012 15:32:10 +0000</pubDate>
		<dc:creator>ddelmoli</dc:creator>
				<category><![CDATA[Management]]></category>

		<guid isPermaLink="false">http://www.oraclemusings.com/?p=208</guid>
		<description><![CDATA[Last week I read an interesting article about how cloud computing is changing the role of the enterprise architect and it got me thinking about the bad rap many architects are getting in the brave new agile, cloud, big data world. From what I&#8217;ve been reading, there&#8217;s been a bit of a straw man argument [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I read an interesting article about how <a href="http://gigaom.com/cloud/cloud-and-the-evolution-of-the-enterprise-architect/">cloud computing is changing the role of the enterprise architect</a> and it got me thinking about the bad rap many architects are getting in the brave new agile, cloud, big data world.</p>
<p>From what I&#8217;ve been reading, there&#8217;s been a bit of a straw man argument going on &#8212; enterprise architects are often described as uber-control freaks who attempt to dictate software architectures in a repressive way to implementation teams. Mention the term &#8220;reference architecture&#8221; and you&#8217;ll often raise the hackles of the new developer-led world.</p>
<p>To be sure, there are many enterprise architects who match that description. And they&#8217;re the ones who give architects a bad name, just like undisciplined developers can give agile a bad rap too.</p>
<p>I tend to agree with the article in many respects &#8212; the idea that software architectures can be fully contained and described in a prescriptive way that potentially limits or increases the cost of software that adds value to the business is something that really isn&#8217;t good. To me, it almost always comes back to the value question &#8212; does the architect add net positive business value?</p>
<p>One of the best roles I&#8217;ve seen for enterprise architects is in attention to technical debt &#8212; measuring the growth of it, assisting agile teams in ways to address emerging technical debt, and generally ensuring that the business isn&#8217;t accumulating potentially crippling amounts of it. To me, the companies which have these kinds of architects never have to &#8220;stop all development&#8221; in order to do vendor-software upgrades, re-platforming, or huge re-write / re-factoring efforts.</p>
<p>Again, I don&#8217;t think this is about the enterprise architect defining an architecture and enforcing it &#8212; it&#8217;s a lot more about being an architectural scout: staying out in front of the agile development teams to bring back ideas and help them choose concepts which keep the system flexible in the face of change. Not in defining the ultimate generic architecture &#8212; we&#8217;ve been down that path before with SOA, &#8220;message-bus&#8221;, integration servers and broker architectures.</p>
<p>I hope you&#8217;re lucky enough to work with such an enterprise architect.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.oraclemusings.com/?feed=rss2&#038;p=208</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recursive Subqueries for FizzBuzz</title>
		<link>http://www.oraclemusings.com/?p=197</link>
		<comments>http://www.oraclemusings.com/?p=197#comments</comments>
		<pubDate>Thu, 10 May 2012 14:25:57 +0000</pubDate>
		<dc:creator>ddelmoli</dc:creator>
				<category><![CDATA[Coding Style]]></category>

		<guid isPermaLink="false">http://www.oraclemusings.com/?p=197</guid>
		<description><![CDATA[So in yesterday&#8217;s post I mentioned that I wasn&#8217;t happy with my solution. Among several reasons were the limit on the first 100 numbers, and the lack of using what I think to be a more elegant solution with recursive sub-queries. Also, I received a comment about problems with the MarkDown plugin &#8212; which was [...]]]></description>
			<content:encoded><![CDATA[<p>So in yesterday&#8217;s <a href="http://www.oraclemusings.com/?p=177">post</a> I mentioned that I wasn&#8217;t happy with my solution. Among several reasons were the limit on the first 100 numbers, and the lack of using what I think to be a more elegant solution with recursive sub-queries.</p>
<p>Also, I received a comment about problems with the MarkDown plugin &#8212; which was also affecting my code posting, so I disabled MarkDown and can now handle code posting much, much better.</p>
<p>I couldn&#8217;t let it rest, so I dug into the recursive sub-queries with a vengeance and wrote up something more elegant.</p>
<pre class="brush: sql; title: ; notranslate">
with
fb0 (input) as (
select      'buzz,fizz,fizzbuzz,fizz,buzz,fizz,fizz' input
from        dual
),
fb2 (n,pos,n_start,n_str) as
(
select      /* Anchor query of root nodes for recursion */
            fb1.column_value n,
            1 pos,
            fb1.column_value n_start,
            to_char(fb1.column_value) n_str
from        fb0,
            table(sys.odcinumberlist(3,5,6,9,10,12,15)) fb1
where       /* Limit root nodes to ones that match the first word of input */
            case regexp_substr(fb0.input,'\w+')
              when 'fizz' then mod(fb1.column_value,3)
              when 'buzz' then mod(fb1.column_value,5)
              when 'fizzbuzz' them mod(fb1.column_value,15)
            end = 0
union all
select      /* Build &quot;child&quot; nodes by walking fizzbuzz matching to input string */
            case
              when mod(fb2.n,15) in (5,9) then n+1
              when mod(fb2.n,15) in (3,10) then n+2
              when mod(fb2.n,15) in (0,6,12) then n+3
            end,
            fb2.pos + 1,
            fb2.n_start,
            fb2.n_str || ',' ||
            case
              when mod(fb2.n,15) in (5,9) then n+1
              when mod(fb2.n,15) in (3,10) then n+2
              when mod(fb2.n,15) in (0,6,12) then n+3
            end
from        fb2,
            fb0
where       case
              when mod(fb2.n,15) in (0,5,6,10) then 'fizz'
              when mod(fb2.n,15) in (3,9) then 'buzz'
              when mod(fb2.n,15) in (12) then 'fizzbuzz'
            end =
            regexp_substr(fb0.input,'\w+',1,fb2.pos + 1)
),
fb3 (input, n_str, n_length, n_start, min_length, min_start) as
(
select      /* Measure lengths of resulting matches, discard ones that are not long enough */
            fb0.input,
            fb2.n_str,
            fb2.n - fb2.n_start n_length,
            fb2.n_start,
            min(fb2.n - fb2.n_start) over () min_length,
            min(fb2.n_start) over (partition by fb2.n - fb2.n_start) min_start
from        fb2,
            fb0
where       fb2.pos = nvl(length(regexp_replace(fb0.input,'\w')),0)+1
),
fb4 (input, n_str) as
(
select      /* Retain the matches which are shortest and start at the smallest value */
            fb3.input,
            fb3.n_str
from        fb3
where       fb3.n_length = fb3.min_length
and         fb3.n_start = fb3.min_start
)
select      /* Display output */
            input,
            n_str
from        fb4;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.oraclemusings.com/?feed=rss2&#038;p=197</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

