<?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>Doing better &#187; Practice</title>
	<atom:link href="http://www.longacre-scm.com/blog/index.php/category/practice/feed" rel="self" type="application/rss+xml" />
	<link>http://www.longacre-scm.com/blog</link>
	<description>Opinions on CM, software development, and process automation from Longacre.</description>
	<lastBuildDate>Sat, 28 Aug 2010 21:23:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Which &#8216;which&#8217; is which?</title>
		<link>http://www.longacre-scm.com/blog/index.php/2010/08/which-which-is-which</link>
		<comments>http://www.longacre-scm.com/blog/index.php/2010/08/which-which-is-which#comments</comments>
		<pubDate>Tue, 10 Aug 2010 22:13:27 +0000</pubDate>
		<dc:creator>Austin Hastings</dc:creator>
				<category><![CDATA[Off-topic]]></category>
		<category><![CDATA[Practice]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.longacre-scm.com/blog/?p=91</guid>
		<description><![CDATA[The &#8216;which&#8217; utility is one of those really useful commands that never seems to cross the bridge from Unix to Windows. The CMD.EXE special %$PATH:f syntax seems to promise some relief, but of course it&#8217;s never that simple &#8211; I at least want to type &#8220;which foo&#8221; rather than &#8220;which foo.exe&#8221;.
So here&#8217;s which.cmd &#8211; a [...]]]></description>
			<content:encoded><![CDATA[<p>The &#8216;which&#8217; utility is one of those really useful commands that never seems to cross the bridge from Unix to Windows. The CMD.EXE special %$PATH:f syntax seems to promise some relief, but of course it&#8217;s never that simple &#8211; <strong>I</strong> at least want to type &#8220;which foo&#8221; rather than &#8220;which foo.exe&#8221;.</p>
<p>So here&#8217;s <code>which.cmd</code> &#8211; a script that tries to DWIW. </p>
<p>Note that this script is wrong in one key detail: it searches inside-out. That is, any &#8220;foo.COM&#8221; will take precedence over any &#8220;foo.EXE&#8221; even if the .exe version occurs earlier in the PATH.</p>
<pre>
@echo off
REM Copyright (c) 2010, Austin Hastings.
REM This file may be used for any purpose without restriction.

REM NOTE: This script does not handle multiple entries with different
REM extensions correctly. It returns the first matching EXTENSION, rather
REM than returning the first DIRECTORY with any EXTENSION.

REM Analogous to unix 'which' command, look for a matching runnable
REM in %PATH% and print the location.

SETLOCAL ENABLEDELAYEDEXPANSION

set check_extensions= ;%PATHEXT%

:ext_loop
if "%check_extensions%" == "" goto done

for /F "tokens=1* delims=;" %%E in ( "%check_extensions%" ) do (
	set check_extensions=%%F
	set target=%1%%E
	for %%W in (  !target! ) do set answer=%%~f$PATH:W
)

if "%answer%" == "" goto ext_loop

:done
if "%answer%" == "" goto not_found

@echo %answer%
goto exit

:not_found
@echo No runnable matching '%1' was found.

:exit
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.longacre-scm.com/blog/index.php/2010/08/which-which-is-which/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Being a trust specialist</title>
		<link>http://www.longacre-scm.com/blog/index.php/2009/04/being-a-trust-specialist</link>
		<comments>http://www.longacre-scm.com/blog/index.php/2009/04/being-a-trust-specialist#comments</comments>
		<pubDate>Mon, 27 Apr 2009 07:25:57 +0000</pubDate>
		<dc:creator>Austin Hastings</dc:creator>
				<category><![CDATA[General CM]]></category>
		<category><![CDATA[Organizations]]></category>
		<category><![CDATA[Practice]]></category>
		<category><![CDATA[Software CM]]></category>
		<category><![CDATA[Theory]]></category>

		<guid isPermaLink="false">http://www.longacre-scm.com/blog/index.php/2009/04/being-a-trust-specialist</guid>
		<description><![CDATA[Most of the readers of this blog are CM specialists. Whether you&#8217;re a corporate CM librarian, or a build manager, you are focused on what the industry now calls &#8220;Application Lifecycle Management.&#8221; That&#8217;s an attempt to give a name to the collection of roles and functions we perform. It isn&#8217;t so much that the people [...]]]></description>
			<content:encoded><![CDATA[<p>Most of the readers of this blog are CM specialists. Whether you&#8217;re a corporate CM librarian, or a build manager, you are focused on what the industry now calls &#8220;Application Lifecycle Management.&#8221; That&#8217;s an attempt to give a name to the collection of roles and functions we perform. It isn&#8217;t so much that the people are diversifying, as that the collection of tools that were all trying to fit under the &#8220;Configuration Management Tool&#8221; umbrella got too large. Change tracking? Sure, that&#8217;s a CM function. Version control? Yep. Requirements management? Well &#8230; okay. UML? Not so much. Trouble ticketing? Yeah, I guess. ITIL? Sure, why not?</p>
<p><a href="http://bradapp.blogspot.com/">Brad Appleton</a> is, in my opinion, one of the all-around smart guys in the CM space. His focus for the last few years has been on Agile CM, but his writings are applicable to anybody doing software development, for a <i>very </i>broad definition of software &#8211; most of what he writes is applicable to almost any kind of intellectual property. And recently Brad has been doing some blogging about books on various flavors of &#8216;trust. &#8216;</p>
<p>Trust, to me, is one of those core values for most CM specialists. The fact is that CM is a simple job. There are certain requirements, and once you meet them you get to go home. In that way it&#8217;s a lot like being a system administrator: is the system up, is everything working? Okay, go home. Now admittedly it can be pretty hard to meet some of those requirements. That&#8217;s why I didn&#8217;t say it was an easy job &#8211; just a simple one. But that&#8217;s where trust comes in. Because whether your shop is an agile shop or not, the CM guys are more affected by trust than any single other thing.<br />
<span id="more-65"></span></p>
<p>Let me repeat that: CM guys are more affected by trust than any single other thing.</p>
<p>I&#8217;m a CM consultant. I get called in by shops that either don&#8217;t have CM and want to build a team, or by shops that already HAVE a CM team but have experienced enough CM failures that they don&#8217;t trust them any more. Since most companies obtain headcount by calling up a body shop and ordering it by the pound (kilos for the EU, I guess), I don&#8217;t usually get called <i>first</i> for CM team setups. It&#8217;s usually only after there are some bodies on site, when it turns out that CM specialists that are great at keeping an existing system going don&#8217;t have so much experience in starting a new system up from scratch. So there&#8217;s usually some kind of mess on the floor when I show up.</p>
<p>What does that mean for you? Well, it means that if you see me at your shop, you should make sure your resume is up to date. (Sorry, but it&#8217;s true.) It also means that you can keep me, or somebody like me, from showing up if you concentrate on building trust with your customers.</p>
<p>Brad&#8217;s first blog post about trust was on Covey&#8217;s &#8220;The Speed of Trust,&#8221; and in that book there are five &#8220;rings of trust&#8221; outlined. The second and third rings, or types, are interpersonal trust and organizational trust. That&#8217;s where I live, and if you&#8217;re smart it&#8217;s where you spend time each day maintaining your relationships with your customers.</p>
<p>It&#8217;s a pretty simple set of questions, but it makes all the difference. </p>
<ol>
<li>Do the people you interact with understand what you need from them, and understand how to deliver it?</li>
<li>Do they understand what services you can provide to them, and how to request them? </li>
<li>Are all of these things practicable?</li>
<li>Do they perceive you as doing what is needed, on time, and without unnecessary oversight?</li>
<li>Do they perceive you as requesting things that are objective, and consistent, and in keeping with your and their function?</li>
<li>Do they believe the estimates and the explanations you give them?</li>
</ol>
<p>If you can answer yes to all of those, you&#8217;ll never work with me. That&#8217;s because your customers trust you. If you can&#8217;t &#8211; if your customers distrust you &#8211; then as the level of trust decreases, the likelihood of a &#8220;fixer&#8221; being called in for your team goes up. In the credit card business, your interest rate goes up. In the CM business, the level of interest in working with you goes down.</p>
<p>If you&#8217;re a CM manager for a military systems contractor, then you&#8217;ve got a CM plan. And you&#8217;ve got a set of prescribed deliverables. And if the developers &#8211; software, firmware, systems engineers, whatever &#8211; know how to deliver each release to you, and it&#8217;s an automated, mechanical, simple chore, then you&#8217;re halfway there. If your other customers &#8211; the clients, and the development team that need to roll back to an earlier release &#8211; can submit a request and quickly get some kind of link, or bundle, or set of typing instructions, then you&#8217;re all the way done.</p>
<p>If you&#8217;re a build guy, or a release guy, or a deployment guy for a software team &#8211; agile or not &#8211; then the activities might be different but the questions aren&#8217;t. Does the team know how to get you to do a build, or cut a release, or deploy a package? Are there any bogus hoops they have to jump through? Have you built any passive-aggressive walls, saying &#8220;we want the development team to do this thing which they really ought to trust us to do but they overrode us that one time and now we&#8217;re bitter and whiny and nobody loves us&#8221;? Can a developer quickly get to the codeface of some old branch from six months ago?</p>
<p>I guess the short form is this. Are you doing your job? Are you making it as easy as possible for your customers to ask you to do your job for them? Because in my experience &#8211; and I&#8217;ll admit my experiences are all negative &#8211; if you aren&#8217;t doing your job, or if you&#8217;re making your customers pay some kind of &#8220;tax&#8221; (time, whining, paperwork, hoop-jumping, sloth, inefficiency) then you&#8217;re going to lose trust. And once you lose trust, you&#8217;ll see a little bureaucracy get started. And when that doesn&#8217;t work (and it rarely does) you&#8217;ll get to meet me. I&#8217;ll be the guy &#8220;we brought in to help gets things caught up.&#8221;</p>
<p>This isn&#8217;t a threat, quite. Because I don&#8217;t know you. It&#8217;s a reflection of the world as I see it, because I&#8217;m like a specialist doctor &#8211; nobody makes an appointment with a gastroenterologist to talk about how healthy they are. In my case, nobody calls me up and says, &#8220;We&#8217;d like to pay you to fly out here and sit in a conference room and live in a hotel for two weeks so that we can tell you how smoothly our build and deployment works!&#8221; (Man, I would LOVE that.) But what I get instead is, &#8220;We need you to come and fix our build and deployment procedures. Our developers don&#8217;t trust the CM team, and we&#8217;ve had a couple of blown deployments in the last few months.&#8221;</p>
<p>So anyway, I guess the upshot of this blog post &#8211; and this is much too depressing to be a CM Journal article, so it&#8217;ll stay a blog post &#8211; is that you need to make sure your house is in order, trust-wise. Go read one or more of the books on Brad&#8217;s list. Because CM teams seem far more Boolean than development teams. Developers can say &#8220;It&#8217;ll be done soon,&#8221; while CM&#8217;ers have to say &#8220;it&#8217;s not done.&#8221; And saying &#8220;it&#8217;s not done&#8221; leads pretty directly to &#8220;you&#8217;re not hired.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.longacre-scm.com/blog/index.php/2009/04/being-a-trust-specialist/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unit tests for MySQL scripts</title>
		<link>http://www.longacre-scm.com/blog/index.php/2009/04/unit-tests-for-mysql-scripts</link>
		<comments>http://www.longacre-scm.com/blog/index.php/2009/04/unit-tests-for-mysql-scripts#comments</comments>
		<pubDate>Sun, 26 Apr 2009 01:07:09 +0000</pubDate>
		<dc:creator>Austin Hastings</dc:creator>
				<category><![CDATA[Practice]]></category>
		<category><![CDATA[Software CM]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[database]]></category>

		<guid isPermaLink="false">http://www.longacre-scm.com/blog/index.php/2009/04/58</guid>
		<description><![CDATA[Recently I had the opportunity to develop a unit testing framework for MySQL scripts in mostly-pure SQL. While I can&#8217;t share the code, I can certainly describe what we did, and why we did it. Hopefully it will be useful to you.

My client was reorganizing a development team into an agile mode in order to [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I had the opportunity to develop a unit testing framework for MySQL scripts in mostly-pure SQL. While I can&#8217;t share the code, I can certainly describe what we did, and why we did it. Hopefully it will be useful to you.<br />
<span id="more-58"></span></p>
<p>My client was reorganizing a development team into an agile mode in order to deal with an outsourcing disaster. It was one of those horror stories that starts out like &#8220;We were 3 years in to a 10 month project, when &#8230;&#8221; I was brought on to help ramp up their build and deployment processes, to get continuous integration and testing systems up, and to help mechanize their deployments.</p>
<p>The impetus for the MySQL unit test framework came from a short term contractor. The one &#8220;constant&#8221; in the otherwise highly-variable environment had been that the team wasn&#8217;t changing. Suddenly, that stopped being true. We had a handful of contractors in for a short term surge, and none of them were familiar with the application, or with SQL (it seemed). The offender was using the CI server as his syntax checker for database scripts. Yikes!</p>
<p>Luckily, the garbage he delivered was syntactically invalid. The mysql command-line client rejected the script and exited with an error status, which caused the CI script to log a failure, and &#8230; voila! Everyone credited me with doing a great job of implementing CI, because it was even checking the database stuff. Like a good consultant, I said &#8220;Yes. Of course.&#8221; Then I ran back to my desk, thinking &#8220;Oh, no! I&#8217;ve got to come up with a unit test framework for the MySQL stuff, pronto!&#8221; And I did.</p>
<p><strong>Solutions</strong></p>
<p>The software was a pretty complex web app, and the target environment was a mixture of Linux and Windows. As a result, when I looked at existing SQL unit test frameworks (<a href="http://www.dbunit.org/">dbUnit</a> and <a href="http://sqlunit.sourceforge.net/">sqlUnit,</a> respectively) I had to reject them. They are decent products &#8211; and free &#8211; but the fact is that they expect certain things about their runtime environment that we couldn&#8217;t deliver. We had to build our own MySQL unit test framework, ideally in &#8220;pure&#8221; MySQL.</p>
<p>Fortunately for me, a nice guy named Giuseppe Maxia maintains a web site at <a href="http://www.datacharmer.org">datacharmer.org,</a> and he has written a library of general-purpose MySQL code. (Called the General Purpose Stored Routine library, or gp_sr_lib.) Among the all this well-written, free, already debugged code was a set of testing routines. Thirty minutes into my development effort, I was already 80% done. Woo-hoo!</p>
<p>The GP library test routines are a good start on a mysqlUnit library, and I strongly recommend that if you need such a library you stop reading here and go download the code. Right now. </p>
<p><strong>Rolling (y)our Own</strong></p>
<p>There are a couple of gotchas that you&#8217;ll want to watch out for in your own unit testing library. First, the tests should be able to integrate into your CI engine. In particular, you need to decide on and implement some kind of failure mode &#8211; either fail when the first problem occurs, or fail after running all test cases. If you&#8217;re running the mysql client via some kind of exec call, be aware that while syntax errors will cause the client to exit with a failure code, other errors will not cause a failure. Instead, the client prints a diagnostic and returns zero. What&#8217;s more, the syntax does not support a deliberate abort from within the SQL engine.</p>
<p>In my own case, I chose to follow the model that Maxia has provided, and NOT fail as soon as a test fails. Rather, my code collected the results of all the tests that were run, and summarized them. In order to get &#8220;fail on error&#8221; behavior out of the mysql command line client, I coded a routine that would perform a &#8220;SELECT force_mysql_client_abort FROM no_such_table&#8221;. This definitely does cause the client to abort, at least until some developer creates a table called &#8220;no_such_table.&#8221; Then I wrapped the test cases in an &#8220;ignore failure&#8221; script that called the summarizer after all the cases had run, which in turn would call the abort routine if the error count was non-zero.</p>
<p>Another thing I chose to &#8220;fix&#8221; was the routine names. Maxia&#8217;s code includes both functions and procedures, but the names are not really in keeping with the style used in the various xUnit test frameworks. The library contains a procedure for asserting the existence of a database table. It is called as:</p>
<p><code>CALL check_table('db name', 'table name');<br />
</code></p>
<p>I opted to &#8220;embrace and extend&#8221; the library. I wrapped these types of checks into functions, like this:</p>
<p><code><br />
set_database('db name');<br />
assert_table_exists('table name');<br />
assert_table_exists_in_db('other table', 'other db');<br />
</code></p>
<p>And in general, wherever there is a straight-ahead assert, I also added an &#8220;assert_not&#8221;. In terms of effect, there is no real difference in behavior between Maxia&#8217;s naming and my own. But I felt that the developers, who were using jUnit and nUnit, would be more comfortable learning a set of routines that had a similar structure and style.</p>
<p><strong>Going Most of the Way: DDL</strong></p>
<p>I tried to make a list of the various things that SQL scripts might do. The most obvious &#8212; and this probably accounted for two thirds or more of the scripts we had &#8212; is DDL statements. DDL (Data Definition Language) is that subset of SQL that relates to defining databases, tables, indexes, triggers, and the like. While the most frequently executed SQL statements are DML (Data Manipulation Language), DDL is where it&#8217;s at for most of the human-generated script files: CREATE TABLE, ADD INDEX, etc.</p>
<p>The great thing is that the assertions for these statements are trivial to write. Maxia&#8217;s library includes the CHECK_TABLE procedure, and some code for looking up procedures and functions. Adding other stuff, like keys and constraints, is pretty straightforward. By the end of the day you should have a long list of functions like assert_table_exists, assert_index_exists, assert_database_exists, and  assert_column_has_type.</p>
<p><strong>Deploy Early</strong></p>
<p>At this point, you&#8217;re ready to go live. Except that you need to build a framework to run these tests. That&#8217;s going to depend a lot on your deployment process, and on your particular CI environment. Sorry. The simplest idea would be to write a script that matches the file names of test files, and runs them one at a time. Call that script from CI, and make sure the exit status is meaningful.</p>
<p>Forget the next couple of sections, because most of the database changes you&#8217;re likely to see are DDL. Developers and DBAs do a lot of adding fields, adding indexes, and sometimes adding tables. If you have just the existence assertions for each kind of object, your library will cover two-thirds or more of the statements being delivered. That&#8217;s not a trivial amount of test coverage for a day or two of work. Ship it! Your developers will need some training, and you&#8217;ll need to beat on the thing once it&#8217;s deployed to your CI servers to make sure that the errors are coming out correctly. </p>
<p><strong>Sell to the Development Team</strong></p>
<p>I recommend that you write some simple tests of things you know to be true. Confirm the positive cases first. Then sit down with a smart, involved developer and pair develop some unit tests for code he hasn&#8217;t written yet. Do it the way you want the developers to do it, including deciding how to handle assertions that don&#8217;t exist yet. </p>
<p>In our case, the DBAs had already established a naming convention for database update files. I chose to duplicate the file names, which would look like ####_description.sql, changing the .sql extension to .test.sql. This let the testing framework associate the test with the delivered change. When running a &#8220;from zero&#8221; deployment, the test framework would then run TEST-CHANGE-TEST and expect the first test to fail and the second to pass. This demonstrated that the test was meaningful for the change (remember, the change is supposed to repair a shortcoming that is demonstrated by the test).</p>
<p>Once you&#8217;ve got buy-in from your chosen developer, sit down and develop a presentation that the two of you can give. Point to specific examples of blown deployments as reasons for unit testing the SQL. Then get the coder to explain the available test assertions. Then explain the framework you&#8217;ve developed to integrate the testing library with CI, and explain what failures are going to look like. And don&#8217;t forget to point them at the documentation you&#8217;ve written on the project wiki. This should get your team on board, and now you can start looking for other assertions to write. You can also start tightening the screws on your framework. Make it so that no change can be delivered without at least one test.</p>
<p><strong>Simple DML Checking</strong></p>
<p>The next obvious category of SQL statements to check is simple DML. These are the CRUD verbs: INSERT, SELECT, UPDATE and DELETE.  Except that SELECT can be pretty hard to check within SQL, so it&#8217;s best to ignore it for now in favor of the others. The problem with DML is knowing what to check for. If you insert a row, should you check that the ROW_COUNT() returns 1? Or should you query for the particular key of that row? </p>
<p>I&#8217;m pretty convinced that DML commands in scripts are going to be metadata related. That is, your application may be inserting customer records, or video titles, or whatever you track. But if a developer codes a DELETE, INSERT, or UPDATE into a deployable script, I think the intent is either to perform some kind of bulk fix (convert data fields, or eliminate nulls) or it is adjusting the &#8220;background&#8221; data &#8212; the list of postal codes, state and province names, etc. that your application relies on. In the case of the simple background data, if you added or updated it, you should check it explicitly: assert that for a specific key, the values are as expected. </p>
<p>Some examples of helpful functions would be <code>assert_statement_affects_rowcount(prepared_statement, num_rows), assert_table_column_matches_count('table name', 'column', value, count),</code> and their negatives. The way to do dynamic programming in MySQL is with prepared statements. You can construct a string containing a SQL statement, use PREPARE to assign it to an identifier, and then EXECUTE the identifier:</p>
<p><code><br />
PREPARE stmt<br />
    FROM<br />
        CONCAT("SELECT COUNT(*) FROM ", table_name, " WHERE ", field_name, " = ?");<br />
</code></p>
<p><code><br />
EXECUTE stmt USING value;<br />
</code></p>
<p>In the more complex case of a data format or type update, the update should be encoded in a stored procedure. This way you can unit test the stored procedure with sample data. Once the procedure is ready to go, write a script that calls the procedure &#8211; confident already that the procedure will work &#8211; and test the invocation by confirming random elements of the data have converted correctly.</p>
<p><strong>Testing Result Sets</strong></p>
<p>As mentioned, testing SELECT can be a real challenge. While it is easy to create an assert_row_count(num) to confirm that your query returned the right number of values, it can be much harder to create a function to assert that a particular ordering exists, or that the results are truly grouped by postal code.</p>
<p>The first thing to do is go ahead and write the assertion functions for number of rows returned by the query. That&#8217;s simple, straightforward, and it can stand in place of more complex stuff for a long time. You may not ever get around to writing the more challenging assertions &#8212; if the tests are designed well enough, the number of results may be meaningful enough. If you do need to write more, especially if the query is complex, pass the query as a string to your assertion, prepare it as a statement, and make sure the results go into a temporary table. Then you can write whatever horribly complex code you need against the temporary table, without having to worry about losing context.</p>
<p><strong>Testing Triggers</strong></p>
<p>Triggers are going to be harder to test than other pieces of code because of the diverse ways you can invoke them. For example, a DELETE trigger may need to be checked with a simple delete statement as well as with a CASCADE from a foreign key relationship. Beyond creating assertions for the existence and type of triggers (BEFORE/AFTER, INSERT/UPDATE/DELETE, etc.) there isn&#8217;t really any obvious set of assertions to write. It&#8217;s more a question of deciding how to test the effects of the triggers, and of documenting the ways the trigger can be invoked.</p>
<p><strong>Conclusion</strong></p>
<p>Unit testing, and test-first development, are well established best practices. But it&#8217;s easy to overlook the &#8220;small stuff&#8221; when developers are setting up frameworks for testing their code. Database updates are small, but when they go wrong they can take out the rest of the system. It&#8217;s important to apply the same techniques, and get the same value, to this part of your development. Now you can.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.longacre-scm.com/blog/index.php/2009/04/unit-tests-for-mysql-scripts/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Two Conferences</title>
		<link>http://www.longacre-scm.com/blog/index.php/2008/09/two-conferences</link>
		<comments>http://www.longacre-scm.com/blog/index.php/2008/09/two-conferences#comments</comments>
		<pubDate>Wed, 17 Sep 2008 02:15:52 +0000</pubDate>
		<dc:creator>Austin Hastings</dc:creator>
				<category><![CDATA[Industry]]></category>
		<category><![CDATA[Practice]]></category>
		<category><![CDATA[Software CM]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[database]]></category>

		<guid isPermaLink="false">http://www.longacre-scm.com/blog/index.php/2008/09/two-conferences</guid>
		<description><![CDATA[Austin Hastings (that&#8217;s me) will be speaking at two conferences coming up in October. Both presentations will be focusing on LDM.
First, there&#8217;s the Telelogic User Group Conference 2008, in Austin, Texas. That&#8217;s obviously focused on Telelogic, and on CM Synergy and Telelogic Change, or whatever it&#8217;s called this week. Since I spent a fair amount [...]]]></description>
			<content:encoded><![CDATA[<p>Austin Hastings (that&#8217;s me) will be speaking at two conferences coming up in October. Both presentations will be focusing on LDM.</p>
<p>First, there&#8217;s the <a href="http://www.telelogic.com/campaigns/2008/ugc/americas/index.cfm">Telelogic User Group Conference 2008,</a> in Austin, Texas. That&#8217;s obviously focused on Telelogic, and on CM Synergy and Telelogic Change, or whatever it&#8217;s called this week. Since I spent a fair amount of time during the initial implementation of LDM wishing that I could use the kind of one-off ad hoc queries that Change is so good at, I suppose it&#8217;s appropriate.</p>
<p>The second conference is <a href="http://www.cmconf.de/agenda/">CMconf.DE,</a> in Munich, Germany. Sadly, it will be a few weeks after Oktoberfest &#8212; otherwise there would be no hope at all of getting hotel space, I suppose. I&#8217;ll just have to wander around looking for any leftover barrels of beer, slightly-used lederhosen, or oompa bands that I can scrounge up. The theme is the same &#8212; presenting LDM and some other approaches to database CM. </p>
<p>In both cases, the time constraints are really biting. LDM needs an understanding of the other ways to do (fail at) database CM before I can really talk about it, and I&#8217;m pretty sure that most people haven&#8217;t thought beyond one way, if that many. So I&#8217;ll be speaking really, really fast, and inviting attendees to stick around afterwards to talk about it.</p>
<p>Anyway, that&#8217;s two continents in a single month &#8212; not bad, if I do say so. If I could just find a conference in India, China, or Israel, I could sweep the northern hemisphere.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.longacre-scm.com/blog/index.php/2008/09/two-conferences/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
