The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<!doctype html>  
<html lang="en">
	
	<head>
		<meta charset="utf-8">
		
		<title>DBIx::Class::AuditLog</title>

		<meta name="description" content="Quick talk shoowing DBIx::Class AuditLog">
		<meta name="author" content="Mark Jubenville">

		<meta name="apple-mobile-web-app-capable" content="yes" />
		<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
		
		<link href='http://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
		
		<link rel="stylesheet" href="css/main.css">
		<link rel="stylesheet" href="css/theme/default.css" id="theme">

		<!-- For syntax highlighting -->
		<link rel="stylesheet" href="lib/css/zenburn.css">

		<script>
			// If the query includes 'print-pdf' we'll use the PDF print sheet
			document.write( '<link rel="stylesheet" href="css/print/' + ( window.location.search.match( /print-pdf/gi ) ? 'pdf' : 'paper' ) + '.css" type="text/css" media="print">' );
		</script>

		<!--[if lt IE 9]>
		<script src="lib/js/html5shiv.js"></script>
		<![endif]-->
		<style>
			section {
				padding-top: 10px;
			}
		</style>
	</head>
	
	<body>
		
		<div class="reveal">

			<!-- Used to fade in a background when a specific slide state is reached -->
			<div class="state-background"></div>
			
			<!-- Any section element inside of this container is displayed as a slide -->
			<div class="slides">
				<section>
					<h1>DBIx::Class::AuditLog</h1>
					<h5>(man I think the styles in reaveal.js need some minor tweaking)</h5>
					<h3>Simple activity audit logging for DBIx::Class</h3>
					<h4>2012-09-27 &mdash; Toronto Perl Mongers<br /><br /><a href="https://metacpan.org/module/DBIx::Class::AuditLog">View on Metacpan</a></h4>
				</section>
				
				<section>
					<h2>What we needed it for.</h2>
					<p>
						At $work we had a need to add user activity logging to one of our internal APIs.
					</p>
					<p>
						We already had some logging code written for Class::DBI, however the new app happily used DBIx::Class.
					</p>
				</section>
				<section>
					<h2>Alternatives</h2>
					<p>
						DBIx::Class::Journal <a href="https://metacpan.org/module/DBIx::Class::Journal">https://metacpan.org/module/DBIx::Class::Journal</a>
					</p>
					<p>&nbsp;</p>
					<p>
						DBIx::Class::Shadow	<a href="https://github.com/frioux/dbix-class-shadow-presentation">https://github.com/frioux/dbix-class-shadow-presentation</a>
					</p>
					<p>
						Not much else.
					</p>
				</section>
				<section>
					<h2>What do we log?  When does it ocur?</h2>
					<ul>
						<li>
							Enabled for all insert/update/delete actions wrapped in "txn_do" statements
						</li>
						<li>
							Transactions are saved as Changesets
						</li>
						<li>
							Each Changeset can have many Actions
						</li>
						<li>
							Actions can have many Changes. An Action can be of type insert/update/delete
						</li>
						<li>
							Changes show the data that was changed during an action
						</li>
					</ul>

					<aside class="notes">						
					</aside>
				</section>
				<section>
					<h2>Additional DBIC column attributes</h2>
					<p></p>Go to <a href="https://metacpan.org/module/DBIx::Class::AuditLog#ADDITIONAL-DBIC-COLUMN-ATTRIBUTES">https://metacpan.org/module/DBIx::Class::AuditLog#ADDITIONAL-DBIC-COLUMN-ATTRIBUTES</a></p>
				</section>
				<section>
					<h2>Table Structure></h2>
					Go to <a href="https://metacpan.org/module/DBIx::Class::AuditLog#TABLE-STRUCTURE">https://metacpan.org/module/DBIx::Class::AuditLog#TABLE-STRUCTURE</a>
				</section>
			</div>

			<!-- The navigational controls UI -->
			<aside class="controls">
				<a class="left" href="#">&#x25C4;</a>
				<a class="right" href="#">&#x25BA;</a>
				<a class="up" href="#">&#x25B2;</a>
				<a class="down" href="#">&#x25BC;</a>
			</aside>

			<!-- Presentation progress bar -->
			<div class="progress"><span></span></div>
			
		</div>

		<script src="lib/js/head.min.js"></script>
		<script src="js/reveal.min.js"></script>

		<script>
			
			// Full list of configuration options available here:
			// https://github.com/hakimel/reveal.js#configuration
			Reveal.initialize({
				controls: true,
				progress: true,
				history: true,
				
				theme: Reveal.getQueryHash().theme || 'default', // available themes are in /css/theme
				transition: Reveal.getQueryHash().transition || 'default', // default/cube/page/concave/linear(2d)

				// Optional libraries used to extend on reveal.js
				dependencies: [
					{ src: 'lib/js/highlight.js', async: true, callback: function() { window.hljs.initHighlightingOnLoad(); } },
					{ src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },
					{ src: 'lib/js/showdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
					{ src: 'lib/js/data-markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
					{ src: '/socket.io/socket.io.js', async: true, condition: function() { return window.location.host === 'localhost:1947'; } },
					{ src: 'plugin/speakernotes/client.js', async: true, condition: function() { return window.location.host === 'localhost:1947'; } },
				]
			});
			
		</script>

	</body>
</html>