for newer blog posts." />

An Architect's View

CFML, Clojure, Software Design, Frameworks and more...

An Architect's View


This is a fairly complete list of presentations that I've given over the years. The downloads are all PDF and contain just the slides. See the 'software' page on my blog for sample code that goes with some of these presentations.

  • BDD with cfSpec (PDF)
    Behavior-Driven Development with cfSpec. I'm a strong advocate of Test-Driven Development but I find it works best when building low-level components and when you've already got a strong sense of how those components should respond to input. For higher-level development, I find the vocabulary and approach of Behavior-Driven Development more approachable since it lets you write a description of high-level expected behavior in an English-like domain specific language (DSL). It looks like simple XML with some CFML code embedded but it's actually a set of custom tags so the whole specification is executable.
  • Branches (Subversion) (PDF)
    This presentation goes beyond the basics of SVN to look at how you can manage deployments across tiers (development, staging, production) with SVN branches, as well as looking at strategies for managing parallel development.
  • CF8 AJAX (PDF)
    I gave this presentation a couple of times while CF8 was in prerelease.
  • Clojure and CFML Sitting in a Tree (PDF)
    Created primarily as a case study of World Singles' use of Clojure alongside CFML and presented at CFML User Groups in San Francisco, CA and Melbourne and Sydney in Australia in mid-2012. Since I can't share the code shown during the live talks, I've added slides with notes about what the code was examples of.
  • Design Patterns (PDF)
    Originally created for Adobe MAX some years back, this talk has been given to several user groups since. It tries to deconstruct the techno-babble and mysticism around design patterns by looking at the core concepts: common problems with common solutions and the trade offs involved.
  • Doing Boring Things With An Exciting Language (PDF)
    This is a 25 minute talk that I gave at Clojure/West 2012, talking about how World Singles uses Clojure and why it works so well as a general purpose scripting language that isn't just for solving hard problems at large scale. It doesn't go into any depth - it's a short talk - but I hope it gives a taste for what Clojure can do.
  • Duck Typing (PDF)
    Hal Helms was due to give this presentation at CFUnited several years ago but was unable to attend. I stepped in at the last minute and used his presentation as an inspiration to create my own view of duck typing aka typeless programming. It gained some notoriety because on one slide I mentioned the performance benefits of duck typing and a lot of people promptly forgot the rest of the slides. Sigh.
  • Event-Driven Programming in ColdFusion (PDF)
    This is the version of the Edmund presentation I gave at Adobe MAX, focusing on the similarities with Flex's event model to allow a common coding style between Flex and CFML.
  • Extending the language of Fusebox (PDF)
    Fusebox 5 introduced the ability to write your own verbs for the XML language of the Fusebox circuits. I seem to recall the "Model-Glue in Fusebox" example got the most interest...
  • Factories (PDF)
    This and the persistence talk below were the two talks that I "toured" user groups with while my wife was training to be a cat show judge. Both talks were given at CFUnited, along with the duck typing talk above. This talk tries to show the complexity of dependencies that you can run into as you rely more and more on objects to package your code and how you can reduce that complexity by using patterns known as Dependency Injection or Inversion of Control (and why ColdSpring makes complete sense!).
  • FW/1 - The Invisible Framework (PDF)
    This talk introduces my lightweight MVC framework. It covers the principles, the conventions and refers to the examples that ship with FW/1 as demos. This version is from Scotch on the Rocks 2011.
  • Frameworks (PDF)
    A ColdBox / Mach-II / Model-Glue comparison preso. Originally given to BACFUG in April 2009, this version is very slightly updated to reflect the availability of Mach-II 1.8 and the improved documentation for Model-Glue - as well as my feelings about ColdBox, having used it heavily for nine months.
  • Fusebox Workshop (PDF)
    Written while Fusebox 5.5 was in development, this presentation covers the evolution of Fusebox up to version 5 and then previews the no-XML approach offered by version 5.5.
  • Functional Programming: What is it and why should I care? (PDF)
    An introduction to functional programming, showing techniques that you can use to make your CFML easier to test, safer with concurrency and more reusable - using examples from Clojure as well as CFML. Created for cf.Objective() 2011.
  • Getting Dynamic with ColdFusion (PDF)
    Probably the most bewildering talk I've ever given - based on the audience's reaction at Scotch on the Rocks. It was intended to show the unique benefits of dynamic programming that is possible with CFML (but not possible with Java) as part of a push to get CFers to stop looking at Java for inspiration. I still like the presentation and I hope to give an updated version to user groups in the future. But I'll admit it's a bit left-field!
  • Humongous MongoDB (PDF)
    Looks at replica sets, sharding, read preference, write concern, map/reduce and the aggregation framework, to show how MongoDB can scale out to support true "Big Data". The talk featured a live demo of setting up a replica set and using it from CFML, including coping robustly with failover, and a live demo of setting up a sharded cluster (and using it from CFML) to show how MongoDB handles extremely large data sets in a fairly simple, robust manner. See the code on Github. Presented at cf.Objective() 2013.
  • Learn You a What for Great Good (PDF) - Polyglot Lessons to Improve Your CFML
    A walk thru JavaScript, Groovy and Clojure (and a quick look at Scala) to show some interesting and powerful idioms that we can use in CFML to leverage the real power behind arrays and structs, and some closure goodness too! See the code on Github. Presented at cf.Objective() 2013.
  • Multi-Tenant, Multi-Lingual Architecture (PDF)
    A two hour deep dive created for cf.Objective() 2011 that looks at infrastructure and software issues behind creating a single codebase that supports multiple sites.
  • Open Source Landscape (PDF)
    Commissioned for CFinNC in 2009, this talk has been seen at cf.Objective() 2010, CFUnited 2010 and was updated for OpenCF Summit 2011. It's a broad overview of the benefits of open source, why you might give away your code, how you can contribute to open source projects, a look at the evolution of open source within the CF community and my (hopeful) vision for the future.
  • Open Source Language Evolution (PDF)
    Commissioned for OpenCF Summit 2011, this talk looks at the processes behind two "rising stars" in the JVM languages world and then reviews the processes behind Open BlueDragon and Railo, to show how CFML is able to evolve in the same way as other open source language projects.
  • ORM, NoSQL, and Vietnam (PDF)
    This plays on blog posts by Ted Neward and Jeff Atwood to put Object-Relational Mapping under the microscope and look at where the mapping breaks down and how it can "leak" into your code, making your life harder. After that I take a quick walk thru the general "No-SQL" space and then focus on document-based data stores as a good (better?) match for OOP and provide examples based on MongoDB and cfmongodb, with a quick look at how common SQL idioms play out in that world. See the code on Github. Presented at cf.Objective() 2013.
  • Persistence (PDF)
    Intended to be an introductory talk to CFCs and how to move from pure queries to objects that are persisted to a database. I probably ought to create an updated version of this that also covers the new ORM integration in CF9 (and coming soon to Railo).
  • Real World SOA
    A practical discussion of the pros and cons of trying to create software following a Service Oriented Architecture approach. The examples are drawn from the last project I was on at Adobe and gave birth to the REST adapter you'll find on my 'software' page.