Beyond the Basics of Using AWS S3 in CFML: Use Lifecycle Rules to Automatically Delete Files After a Period of Time
Posted 22 June 2020
In the last post in this series, we looked at Lifecycle Rules in S3, how they worked, and how you can use them to save money by automatically moving less-frequently used files to different (and cheaper) storage classes. There’s another powerful aspect to Lifecycle Rules that can save you money: automatically deleting files after a specified period of time.
Beyond the Basics of Using AWS S3 in CFML: Use Lifecycle Rules to Move Files Into Different Storage Classes
Posted 16 June 2020
In my last post in this series, we looked at using different storage classes in S3 via CFML to save money on long-term storage costs. The use case for that blog post assumed you knew the utilization pattern for the files you uploaded. They would either be very busy files, files that were accessed occasionally, or files that were accessed rarely. What happens, though, when file acess moves over time from frequently access to only occasional access? Wouldn’t it be nice if S3 would automatically move those files from a more expensive storage class with the fastest response time to a storage class where response times were a few miliseconds longer, but cost half the price?
Beyond the Basics of Using AWS S3 in CFML: Use Different Storage Classes to Save Money
Posted 2 June 2020
S3 offers a rediculous level of durability for the objects stored in the service. On top of 11 9’s of durability in physically distributed storage, Amazon has developed formal proof-of-correctness algorithms that map across all the systems with which S3 interacts to ensure that data is always correct when requested. They create checksums across loosely-coupled systems (including checking for bitslips in RAM) to ensure transfers never become corrupt, and use complex actuarial models that anticipate when the hard drives on which data is actually stored will fail. AWS has automated “durability auditors” that repeatedly crawl every byte of S3 data to verify that when you retrieve your stuff, it will be correct. This is incredibly powerful, difficult stuff to achieve. There’s a fascinating video from re:Invent 2018 if you want to learn more about the way in which S3 is built.
Beyond the Basics of Using AWS S3 in CFML: Encrypting Objects at Rest in S3
Posted 27 May 2020
AWS Identity Access Management (IAM) provides very strong security to all of your data in AWS, and S3 in particular, if you use it properly. Proper IAM policies make it so that only the right people have access to the right resources in AWS. (If you want to learn more about using IAM in CFML, watch my presentation from Adobe ColdFusion Summit 2019.) What if someone steals one of your AWS logins? How can you protect your data in S3 so that bad actors can’t see what you’ve stored in your S3 buckets in case they steal your credentials? What if you have compliance obligations which require you to encrypt every piece of data you store?
Beyond the Basics of Using AWS S3 in CFML: Restricting Access to Files in S3 by Signing URLs
Posted 12 May 2020
Our next stop in this series on going beyond the basics of using AWS S3 in CFML is learning how to protect content in a S3 bucket by only allowing access via digitally signed URLs.
Beyond the Basics of Using AWS S3 in CFML: Uploading a File via the AWS Java SDK
Posted 8 May 2020
Our first stop in this new series on going beyond the basics of using AWS S3 in CFML is learning how to upload a file to S3 via the AWS Java SDK. CFML runtimes have long had support for uploading files to S3 using built-in CFML functions and tags. It’s important to know how to do this with the AWS Java SDK, however, because all of the advanced features of using S3 from CMFL require use of Java file objects in conjunction with requests to S3.
New Series: Going Beyond the Basics of Using AWS S3 in CFML
Posted 6 May 2020
Amazon Web Services Simple Storage Service (S3) is an amazing service. Super fast, super reliable, and cheap, it’s often referred to as the "file storage of the Web." On an average day and in a single AWS region, S3 will handle 60 terrabytes of data transfer per second. It’s the backbone — and data lake — of many companies. CFML engines have long made it simple to utilze S3 for file storage. I’ve written about reading files from and writing files to S3 from CFML before.
Speaking at IntoTheBox 2020 on CFML and AWS S3
Posted 28 February 2020
I’m privileged to once again speak at the superb IntoTheBox conference in early May, 2020, in Houston, TX. While skewed toward development in CMFL, the conference focuses on intermediate to advanced level sessions on modern web application development and cloud deployment. In addition to two days of workshops on Box-specific tools and technologies, there are sessions on migrating legacy applications to modern dev stacks, Java streams, container deployment on AWS Fargate, database performance, and more.
Updated Versions of My AWS S3 and CloudFront Request Signing Utilities
Posted 27 September 2019
About six years ago, I released two utilities for cryptographically signing requests for objects in btoh AWS S3 and CloudFront. The code in those repos still works just fine, but the code relies on bespoke methods for generating the request signature. Back then, all we really had was bespoke methods, and had to do things in a more roundabout way, utilizing multiple Java libraries. Things have definitely changed for the better in the intervening six years.
Start and Stop the ColdFusion 2018 Performance Monitoring Toolset from Anywhere in the Mac OS Terminal
Posted 26 August 2019
Once of the really nice additions to ColdFusion 2018 is the Performance Monitoring Toolset. This is a very robust tool which helps you see directly inside the black box that the Adobe ColdFusion runtime can sometimes be.
Using AWS Step Functions in CFML: Wrapping Up the Transcribe, Translate, and Speak Workflow
Posted 28 July 2019
After fifteen posts, this is the final post in this series on using Step Functions (and a whole bunch of other AWS services) from CFML applications. The first workflow picked a random image and described the content of the image via Rekognition, a computer vision service. The second workflow, which we finish now, transcribed a video, translated the transcription into a different language, and turned that translation into a MP3 file.
Using AWS Step Functions in CFML: Speaking Translated Text into a MP3 File
Posted 15 July 2019
We are now at the final step in this parallel execution inside our Step Functions workflow that transcribes a video, takes the transcript and translates it into a different langugage (Spanish, in this parallel execution), and speaks that translated text into a MP3 file.
Using AWS Step Functions in CFML: The Frustration of Variable Reassignment in Step Functions
Posted 8 July 2019
As mentioned at the end of the last post in this series, if we try to take our translated text and pass it directly into the next (and final) step in this parallel execution, it won’t quite work. We would get an error that the textToSpeak property wasn’t defined in the event object. Why?
Using AWS Step Functions in CFML: Translating Text into Multiple Languages
Posted 28 June 2019
In the last post in this series on using Step Functions from CFML, I introduced the last of the different Step Functions states: the parallel state. We’re now tracing the execution of a single parallel state in our workflow — the translation and speaking of the audio from the source video into Spanish.
End of the Road for Older Versions of Adobe ColdFusion's Built-In Support for S3 and New S3 Buckets
Posted 20 June 2019
Update August 5, 2019: AWS has pushed back the date on which v2 signatures will no longer work with new S3 buckets to June 24, 2020.
Using AWS Step Functions in CFML: Speeding Workflows with Parallel States
Posted 15 June 2019
We’ve now worked through the first half of this second example Step Functions workflow, which transcribes, translates, and speaks the content of a video file. The first half was dominated by a wait loop, while we waited for transcription of the video to complete. Now that we have the transcription of the content of the video, we can move on to translating that text into multiple lanaguages and speaking that text into those translated languages.
Using AWS Step Functions in CFML: Looping in Step Functions Workflows via the Wait State
Posted 7 June 2019
At this point in the second example Step Functions workflow, we’re waiting for our AWS Transcribe job to complete. AWS Transcribe works faster than real-time, but it’s not instantaneous. If you’re trying to transcribe a 90 minute podcast or 70 minute video, it’s going to take more than a few minutes for Transcribe to do its work. Our workflow of translating the transcription cannot continue until this work is done.
Using AWS Step Functions in CFML: Error Handling and Retries in Step Functions Workflows
Posted 31 May 2019
Our second example Step Functions workflow kicks off with a task that uses AWS Transcribe to “listen” to the audio content of a video and transcribe that content into a text file. If you’re not familiar with how Transcribe works, please review my brief series on the Transcribe service.
Using AWS Step Functions in CFML: Introducing the Second Example Step Functions Workflow
Posted 24 May 2019
Now that we’re done looking at the basics of Step Functions via the first example Step Functions workflow, it’s time to move on to something more powerful — and complicated. The second example Step Functions workflow that I will cover in the rest of this series combines a number of AI-based services from AWS into a powerful workflow that can transcribe, translate, and speak the translation of the spoken content of a video. The code for the complete workflow can be found in the AWSPlaybox app in stateMachines/transcribeTranslateSpeakWorkflow.json.
Using AWS Step Functions in CFML: Invoking and Tracking Step Function Workflows from CFML
Posted 20 May 2019
We are now eight posts in to this series on using Step Functions in your CFML applications, and there hasn’t been a whole lot of CMFL. We’ve looked in detail at the first example workflow of performing image analysis on a randomly selected image, and the various state types that make up that workflow. Now it’s time to see how we invoke a Step Function from CFML and get data back from that Step Function invocation.
Using AWS Step Functions in CFML: Finishing the Workflow Execution and Returning Data to the Caller
Posted 15 May 2019
We’re finally at the end of this first example Step Functions workflow. We’ve randomly selected an image from a set of choices and performed machine vision anlysis on that image. How then, does Step Functions know when a workflow is at an end?
Using AWS Step Functions in CFML: Performing the Image Analysis Task
Posted 10 May 2019
It’s taken us a few posts to get to this point, but we’ve now randomly chosen an image on which we’ll perform analysis using AWS Rekognition, a machine vision service. This post introduces no new state types, and focuses on the Lambda code used to perform the image analysis.
Using AWS Step Functions in CFML: Injecting Key-Value Pairs Into Your Step Function Execution with Pass States
Posted 8 May 2019
As we work our way through this example workflow of performing analysis on a randomly selected image, we’ve looked at task states, task input and output, and making choices in a workflow. In this post, we’ll look at a simple, but critical, option in the execution of a Step Functions workflow: adding additional data to the workflow execution.
Slides from My IntoTheBox 2019 Presentation: Build Fine-Grained Control of Amazon Web Services in Your CFML App
Posted 4 May 2019
I have to again thank the entire Ortus Solutions team for another excellent IntoTheBox conference this year. I always leave the conference energized to build better applications, and the team provides lots of tools to make that happen.
Using AWS Step Functions in CFML: Making Choices and Branching in a Step Functions Workflow
Posted 30 April 2019
Thus far in this first example Step Functions workflow that performs image analysis on a randomly selected image, our workflow has progressed in a purely linear fashion. We started at the first step in our workflow, and moved to the second step. We could continue to move linearly from one step to another, but how often do you build applications (or even individual functions) that are purely linear in execution? We often have to make choices based on the state of the application at any given time. One of the great powers of the Step Functions environment is that we can make choices and take different paths of execution based off those choices.
Using AWS Step Functions in CFML: Getting Data Into and Out of Step Functions States
Posted 27 April 2019
In the last post in this series, we looked at invoking task states to do actual work in our image analysis Step Functions workflow. As with any workflow, passing data into a task and getting result data out of a task invocation is a common requirement. You can, of course, persist data in DynamoDB or another storage mechanism to maintain state between steps in a Step Functions workflow, but that’s often overkill (and expensive) when the Step Functions execution environment can maintain that state data for you.
Using AWS Step Functions in CFML: The First Example Workflow and an Exploration of Task States
Posted 25 April 2019
In the first post in this series, I introduced Step Functions and described the critical role they play in building serverless applications, not just functions. The rest of the series will examine two different Step Functions workflows. The first of these workflows is a relatively simple workflow that analyzes one of two randomly chosen images using AWS Rekognition.
Using AWS Step Functions in CFML: What They Are and How To Connect to the Service
Posted 22 April 2019
In my last series on using AWS services from CFML applications, I talked about using AWS Lambda to write serverless application functionality. Lambda is really powerful, but most developers who get started with Lambda quickly run into a significant architectural stumbling block. Developers (generally) develop applications, not single, standalone functions.
Using AWS Lambda in CFML: Debugging, Observability, and More
Posted 1 March 2019
Developing for AWS Lambda, or Google Cloud Functions, or Azure Functions, is a core part of what is known as “serverless” development. You focus on application logic and workflow, and never really worry about the servers that power the execution of that code. It’s a powerful, liberating development model, but not one without issues. It’s a maturing space, and like all maturing spaces, has pain points. This post explores a couple of those pain points: debugging, observability, and planning the right execution environment. I’ll wrap up by talking about potential intersection points between CFML applications and Lambda.
Using AWS Lambda in CFML: Invoking Your Lambda Function From CFML
Posted 25 February 2019
Once you have set up and tested your Lambda function, calling the function from CFML is a breeze thanks to the AWS Java SDK.
Using AWS Lambda in CFML: Creating a NodeJS Lambda Function that You Can Call From CFML
Posted 20 February 2019
While the FusionLess project is awesome in its potential to write and deploy CFML to AWS Lambda, this post will focus on calling a non-CFML Lambda function from within your CFML application.
Using AWS Lambda in CFML: Overview and Creating the Lambda Service Object
Posted 13 February 2019
What would your developer workflow be like if you could just write and deploy code, without having to worry about the execution environment of that code? No servers to set up, patch, and maintain. No 2AM panics that a server went down, or 3AM panics that a core library in the server has a huge security flaw. Just write, deploy, and build business value.
Slides and Code from My ColdFusion Summit 2018 Presentation "Step Into Serverless with Amazon Web Services and ColdFusion"
Posted 11 February 2019
I just realized that never posted the slides from my ColdFusion Summit 2018 presentation “Step Into Serverless with Amazon Web Services and ColdFusion.” I’ll be presenting an updated version of this presentation at the ColdFusion Summit East 2019 this April.
Update on the Basic Setup for Using the AWS Java SDK with ColdFusion 2018
Posted 10 December 2018
In most of my posts on using AWS services from within CFML, I’ve pointed to my original post on how to use the AWS Java SDK from within your CFML engine. However, the information on that page about the required .jar files for using the AWS Java SDK no longer applies to the Adobe ColdFusion 2018 release.
Using AWS Translate in CFML: Making a Translation Request and Dealing with Service Limits
Posted 29 October 2018
AWS Translate is a simple service to use from within your CFML or Java application. The service only does one thing: translate text from one language to another.
Using AWS Translate in CFML: Overview and Creating the Translate Service Object
Posted 21 October 2018
Our next stop in our trip through working with the various machine learning services offered by AWS from within CFML applications takes us to the land of multi-language translation with AWS Translate.
Using AWS Transcribe in CFML: Retrieving a Transcript
Posted 5 October 2018
Now that our Transcribe job is done, we can retrieve the output of the job. This isn’t quite as straightfoward as it seems, and this post will show you how to both grab the full transcript result and just the text transcript itself.
Using AWS Transcribe in CFML: Checking for Job Completion
Posted 28 September 2018
We’ve started a Transcribe job, now we need to see if the job is done. Jobs in Transcribe can take seconds, or even hours, depending on the length of the source media. Jobs are never immediately completed. As such, you’ll need to approach this in an asyncrhonous manner.
Using AWS Transcribe in CFML: Starting a Transcribe Job
Posted 18 September 2018
There are three distinct phases in working with AWS Transcribe: starting a job, waiting for the job to complete, and parsing the results of the job. This is because Transcribe is a fully asynchronous service. Transcribe cannot transcribe an hour long video in miliseconds. It takes time to do the work.
Using AWS Transcribe in CFML: Overview and Creating the Transcribe Service Object
Posted 14 September 2018
AWS offers a host of machine learning services that you can tap into from within CFML. A CFML engine isn’t neccessarily the best fit for doing machine learning, so I like to leave the heavy, undifferentiated lifting of setting up and training a machine learning infrastructure to people who really know what they are doing.
Using AWS Rekognition in CFML: Detecting Text in an Image
Posted 20 August 2018
Text detection in an image or video stream is a really interesting — and useful — use case for Rekognition. You could use it for near real-time AR (snap a picture and detect landmarks or street signs, provide a video stream and do the same) or indexing slide text in a series of conference presentations. You could use it to “scan” business cards, receipts, or all sorts of documentation. It could be used to perform OCR (optical character recognition) on that backlog of thousands of PDFs which are just scans of documents created by your office copier.
Using AWS Rekognition in CFML: Matching Faces from Two Images
Posted 13 August 2018
Rekognition has the ability to compare two images of a person and determine if they are the same person based on the features of the faces in each image. Rekognition can do this even when the images are of the same person over years, or decades. Like other machine learning systems, this feature is subject to bias and error, but in my work with the feature, it works quite well.
Using AWS Rekognition in CFML: Performing Facial Sentiment Analysis on an Image
Posted 5 August 2018
Facial sentiment analysis is an interesting use case for Rekognition. This process takes an image and returns a number of pre-set attributes about the faces in that image — age range, gender, eyes open/closed, smiling/not smiling, and so on, as well as the emotions of the person in the image. While more objective measures tend to be accurate in this kind of analysis, emotion analysis is still quite subjective and, in my opinion, prone to both error and significant bias.
Using AWS Rekognition in CFML: Detecting and Processing the Content of an Image
Posted 29 July 2018
The most obvious use case for Rekognition is detecting the objects, locations, or activities of an image. This functionality returns a list of “labels.” Labels can be things like “beach” or “car” or “dog.” This allows you to build tools like image search.
Using AWS Rekognition in CFML: Overview and Creating the Rekognition Service Object
Posted 23 July 2018
CFML is a flexible and powerful language, encapsulating a lot of complexity in some fairly straightforward functions and tags. From creating PDFs to tackling the verbosity of file manipulation in Java, CFML makes it easy to do a lot in a few lines of code.
Using Simple Notification Service (SNS) in CFML: Caveats About Working with SNS in CMFL
Posted 16 July 2018
SNS is a great notification service, but it’s not a good transactional or marketing email service. You really should not use SNS for that purpose. You can use SES (Simple Email Service) or, better yet, one of many third-party services that do an amazing job of sending transactional and marketing emails. SNS email messages would be a good fit for your DevOps team when something goes wrong with your EC2 instances or if you exceed service limits in AWS. It’s a bad tool for sending email messages to your CEO. Messages are simple text strings, not HTML, and won’t end up looking pretty.
Using Simple Notification Service (SNS) in CFML: Sending Messages
Posted 8 July 2018
Sending a message to SNS from CMFL via the AWS Java SDK is easy. You need to:
Materials from My "Spielberg, Not Shakespeare" Presentation at UBTech 2017
Posted 24 June 2018
This year’s UBTech conference was another very good mix of technology and pedagogy. I had the pleasure of attending with one of my colleagues from the Bloomberg School of Public Health this year, and we both took away a lot of valuable lessons.
Using Simple Notification Service (SNS) in CFML: Subscribing to Topics
Posted 18 June 2018
Subscribing to topics in CFML via the AWS Java SDK is a two-step process.
Using Simple Notification Service (SNS) in CFML: Creating Topics
Posted 8 June 2018
The process of creating a topic in SNS via CFML is simple, as is working with SNS in general.
Using Simple Notification Service (SNS) in CFML: Overview and Connecting to SNS
Posted 3 June 2018
We’re going to move on from the single AWS service that’s natively supported in CFML to the first service example that uses the AWS Java SDK from within CFML: Simple Notification Service, or SNS.
Using Simple Storage Service (S3) in CFML: Security, Control, and Caveats
Posted 26 May 2018
This is the second of two posts about working with AWS Simple Storage Service (S3) in CFML. In the last post, we looked at the basics of S3 and how simple it is to use S3 with native CMFL support.
Using Simple Storage Service (S3) in CFML: Background and Basic Usage
Posted 24 May 2018
In the last entry in the series, we looked at how you connect to AWS via the AWS Java SDK from your CFML code. That’s the route you need to go if you want to work with AWS services from CFML — with one notable exception: S3, or Simple Storage Service.
Basic Setup Needed to Access AWS from CFML
Posted 21 May 2018
In order to access Amazon Web Services from within CFML applications, you’re going to need to use the AWS Java SDK CFML runs on top of the JRE, so we can tap into the vast array of Java SDKs that companies make available to Java developers.
An Introduction to Using AWS from CFML
Posted 4 May 2018
I’ve spent a lot of time in the past few years speaking at conferences about using Amazon Web Services from within CFML applications. I’ve covered many services and how to take advantage of them using the AWS Java SDK. If you haven’t attended one of my conference sessions, you likely haven’t seen how this works. This series of blog posts aims to provide a basic understanding of both how the tools in AWS work, and how to utilize them from within CFML.
Slides and Code from Into the Box 2018 Presentation "Step Into Serverless with AWS + CFML"
Posted 29 April 2018
In its second year as a standalone conference, Into the Box more than doubled in physical attendees and added a new streaming option. The growth in the conference reflects not only on the high quality of presentations at the conference, but also on the hard work that the entire Ortus Solutions team puts into the conference.
Slides and Code from ColdFusion Summit 2018 Presentation "Level Up Your CF Apps with Amazon Web Services"
Posted 29 November 2017
Attached to this post is a PDF of the slides used in my presentation “Level Up Your CF Apps with Amazon Web Services.” The code that I used in the presentation can be found in the GitHub repo for the AWS Playbox app. There’s a full set of instructions in the readme file on what you need to set up in AWS to get the app fully working.
Slides and Code from My cf.Objective() Presentation on Amazon Web Services and ColdFusion
Posted 24 July 2017
The cf.Objective() conference is always an opportunity for me to learn from some of the smartest people in the CFML community. This year was no exception, and I’m grateful to the conference content committee for again inviting me to speak.
Materials from My "Spielberg, Not Shakespeare" Presentation at UBTech 2017
Posted 22 June 2017
I always enjoy the UBTech conference. It’s an interesting mix of instructional technologists, faculty, administrative deans, and senior IT staff. The sessions are diverse as well, and I always learn quite a bit.
Slides from Into the Box Presentation on Leveling Up Your Web Apps with Amazon Web Services
Posted 28 April 2017
First off, a huge thanks the entire Ortus Solutions team for hosting the very fun Into the Box conference. Though small in total size, the conference had a lot of really good, higher level sessions about CFML and Web apps in general. The Ortus team really is making great tools for the CFML community.
Speaking at Into The Box on Leveling Up Your Web Apps with Amazon Web Services (AWS)!
Posted 28 March 2017
The *Box team at Ortus Solutions are an amazing group of people who have done a ton of work to make the CFML community stronger and better over the past few years. I’m excited that I’ll be speaking at their annual conference — Into the Box!
Slides from "Accessible Video Anywhere with ColdFusion and AWS"
Posted 13 October 2016
This year’s ColdFusion Summit conference was the best one yet. With a lot of new attendees (and people new to ColdFusion!), there was a great attitude and the sessions, overall, were very good. The customer showcase track, in which I spoke, was a great addition to the conference, and one I hope Adobe continues in future years.
Speaking as Part of the ColdFusion Summit 2016 Customer Showcase
Posted 21 September 2016
This year’s ColdFusion Summit features a new track of sessions focused on customer success\/showcase stories, which I think is a great addition to the program. I’ve always enjoyed when technical conferences have real people come out and talk about how they solved problems with a specific technology — problems and all. I don’t care a whit for sales sessions where a company says “Our product is sooo great, go buy it now, it’ll solve all your problems!” I like hearing when a company says “We used X because it helped us solve this problem, here’s how we did it, and here are some of the issues we ran into.”
Slides and Code from My dev.Objective() Talk "Level Up Your Web Apps with Amazon Web Services"
Posted 16 June 2016
I really enjoyed presenting at dev.Objective() again this year. In spite of a projector disaster at the beginning of the session, I thought the talk went surprisingly well. The audience asked a lot of great attendance, and I was thankful that so many people showed up and waited patiently for the projector issues to get resolved.
Back to dev.Objective to Talk About Leveling Up Your Web Apps with AWS
Posted 18 May 2016
I’m a lucky developer and educator. Each year, I’m invited to speak at a number of web development, CFML, and educational conferences. I’m making my fifth speaking appearance at dev.Objective() this year, and I can’t wait to get back to Minneapolis. I love the town, and, more importantly, I love the conference. I’m always challenged by what I learn there and find myself sitting in session after session thinking “Yes! We should totally do this!”
I'm Speaking at the Adobe ColdFusion Government Summit on March 9
Posted 2 February 2016
In addition to the ColdFusion Summit in Las Vegas, Adobe has this year decided to hold a one-day, government (well, DC-area) specific conference. The Adobe ColdFusion Government Summit is on March 9, 2016 in Washington, DC. I’m one of three non-Adobe employees who has been asked to speak at the conference, so I’m both excited and thankful to the Adobe ColdFusion team for the opportunity.
Slides and Resources for My ColdFusion Summit 2015 Presentation on Using AWS Services from CF9
Posted 12 November 2015
This year’s ColdFusion Summit had the biggest attendance of any ColdFusion Summit thus far, and was another good conference in a year of pretty darn good conferences. Although my session on using Amazon Web Services from ColdFusion was scheduled in the last slot of the last day, I had a great turnout with an enthusiastic response and some great questions.
Getting the Latest AWS Java SDK to Work with Adobe ColdFusion
Posted 1 November 2015
I’m really happy to speak again at this year’s Adobe ColdFusion Summit. My talk next Tuesday is titled “Expand Your ColdFusion App Power with Amazon Web Services.” People who know me know that I’m all about AWS and the awesome power that their ever-expanding suite of services provides. I’m also about ColdFusion and how incredibly easy it makes app building on top of the Java Virtual Machine, and how easy it is to tap in to the hundreds of thousands of Java libraries that are out there to make your ColdFusion apps more powerful.
Slides from My UBTech 2015 Presentation "From Shakespeare to Spielberg"
Posted 16 June 2015
Attached to this post are my slides for the presentation I gave at UBTech 2015 today: “From Shakespeare to Spielberg: Designing for the YouTube Generation When Flipping the Classroom.”
Slides from My dev.Objective() 2015 Presentation "Node Without Servers: AWS Lambda"
Posted 18 May 2015
First let me thank everyone who came to my session at dev.Objective() on “Node without Servers: Event-Driven Computing with AWS Lambda.” A lot of really great questions were asked and I had (another) great experience presenting at the conference.
Speaking on AWS Lambda at dev.Objective() and, Hey, the Service Just Changed
Posted 14 April 2015
I’m very lucky to be speaking at dev.Objective() again this year. It’s an awesome conference, especially as it has evolved from cf.Objective() into something more broadly appealing to Web application development professionals while still retaining a lot of its ColdFusion roots.
A Couple of Topic Ideas for dev.Objective()
Posted 29 December 2014
cf.Objective() has long been a great ColdFusion conference, and one of my personal favorite speaking engagements. The organizers of cf.Objective() changed the conference name to dev.Objective() this year to better match the nature of talks given at the conference and to target a wider audience for the great content presented there.
Slides from My Adobe CF Summit Presentation on ColdFusion and Amazon Web Services
Posted 17 October 2014
Thanks to everyone who turned out for my presentation on using Amazon Web Services in ColdFusion 11 at the Adobe CF Summit in Las Vegas. Attached to this post are my slides.
Speaking About Amazon Web Services and ColdFusion 11 at Adobe ColdFusion Summit 2014!
Posted 3 October 2014
This year’s Adobe ColdFusion Summit is only two weeks away (yikes!) and I have been given the great opportunity to speak at the Summit again this year.
Slides and Recording from My NCDevCon 2014 Presentation on AWS and ColdFusion
Posted 15 September 2014
Another great NCDevCon happened this weekend in Raleigh. I really enjoy this conference — it’s incredibly well-run — and look forward to returning next year.
Speaking at NCDevCon 2014, and Why NCDevCon Rocks
Posted 15 August 2014
I’m really honored to be speaking at this year’s NCDevCon. This will be my fourth year in a row as a speaker at the conference, and I’m excited to be returning to Raleigh for what I expect to be another great conference.
Slides from My UBTech 2014 Presentation "Unleash Your Inner Spielberg When Flipping the Classroom"
Posted 24 June 2014
I was asked to speak again this year at UBTech. It’s an interesting educational technology conference with a pretty diverse audience of faculty, instructional staff and senior-level administrators. I always get a lot out of the conference, and this year was no different.
The Very Helpful Outline View in ColdFusion Builder
Posted 2 June 2014
Now that ColdFusion Builder 3 is out, I thought it would be a good time to remind people of the very useful Outline view. The Outline view shows you the structure of your .cfc or .cfm file. Ray Camden has a video from the first version of ColdFusion Builder which explains the view in more depth. I really only use it on CFCs, as there are simply too many tags — and a mixture of CF tags and HTML tags (sorry, that’s how it is with CF) — in .cfm files.
Video of My jQuery San Diego 2014 Conference Talk
Posted 6 May 2014
The great team behind the jQuery San Diego 2014 conference has posted videos from the conference. You can see the video of my talk — Promises, Promises: Unlocking the Power of jQuery’s Deferreds — up on YouTube!
ColdFusion 11 and ColdFusion Builder 3 Launched!
Posted 29 April 2014
Adobe today released new versions of both the ColdFusion server (v11) and the ColdFusion Builder IDE (v3). There’s lots of new features in both, but I wanted to take the time to point out my two favorites:
Review: Learning jQuery Deferreds
Posted 28 March 2014
I’ve been lucky to have been asked to speak twice about promises and deferreds in jQuery at two conferences in the past year (NCDevCon and jQuery San Diego). Just before I was to give my talk at jQuery San Diego, the authors of Learning jQuery Deferreds, Terry Jones and Nicholas Tollervey, got in touch with me to see if I’d like a copy of their book. The book had been published just before the conference, so the timing was great.
Slides from my jQuery San Diego Talk on Promises and a Book Discount Code!
Posted 13 February 2014
I want to offer my deepest gratitude to the entire jQuery San Diego team for inviting me to speak at such an awesome conference. There are a lot of incredibly smart people speaking and attending the conference, which made my impostor syndrome quite acute, but I was very proud to have been given an opportunity to present.
Flash Remoting Gateway Calls in ColdFusion 10 Require a Trailing Slash
Posted 7 February 2014
With the rise of ECMAScript 6, tools like WebRTC, the Web Audio API, and HTML5 and CSS3 in general, we’re seeing fewer and fewer Flash applications in the wild. My team, like many, still have a few out there, mostly revolving around real-time communications because WebRTC is limited to newer browsers (no Mobile Safari, sigh), and polyfills aren’t always the real thing.
I'm Speaking at jQuery San Diego!
Posted 2 January 2014
Slides from My CF Summit 2013 Presentation "Start Using Amazon Web Services in Your ColdFusion Apps"
Posted 27 October 2013
You don’t have to look much further than the relevant tweets and blog posts to know that the first official CF Summit was a great success. It was awesome to be a part of this inaugural event, and I certainly hope that I get the opportunity to give a presentation next year.
Start and Stop the ColdFusion Server from Anywhere in the Mac OS Terminal
Posted 7 October 2013
I’ve been using ColdFusion for years, but finally got around to setting up my Mac OS Terminal so that I could start and stop the ColdFusion 10 application server from anywhere in my Terminal, not just when I’m in the /ColdFusion10/cfusion/bin directory. This has become a common task with the removal of the simple ColdFusion application manager that existed prior to ColdFusion 10.
Slides, Code, and Links to Recordings from My NCDevCon 2013 Presentations
Posted 23 September 2013
NCDevCon continues to be one of the best conferences for web developers that I’ve had the privilege of both speaking at and attending. The speakers are excellent, the location great, and the price is incredibly low compared to similar conferences. I look forward to going again next year (and hopefully speaking too!).
NCDevCon 2013 Is in Less Than Two Weeks, and I'm Speaking There Twice!
Posted 9 September 2013
You Can't Force New CSRF Tokens in ColdFusion's CSRFGenerateToken() Without a Custom Key
Posted 30 July 2013
ColdFusion 10 includes a lot of security-related additions, including (finally!) built-in functions to generate and validate tokens to help prevent cross-site request forgery (CSRF) attacks. The two functions that work in parallel to deal with these kind of attacks are:
I'm Speaking at the First Official Adobe ColdFusion Summit!
Posted 30 July 2013
I’m very pleased to announce that I have been asked to speak at the first official Adobe ColdFusion Summit, which is being held in Las Vegas on October 24 - 25, 2013.
Non-Technical Presentations: Double Speaking Duty at UBTech 2013
Posted 4 June 2013
As much as I love giving talks on Web development at conferences like cf.Objective() and NCDevCon, I also talk at numerous educational technology conferences throughout the year. I’ve been asked to speak at the always-interesting UBTech 2013 conference this year — and not to speak just once, but on two different topics!
Slides from My cf.Objective Session on Highly Available CF Apps
Posted 17 May 2013
The organizers of this year’s cf.Objective() had the brilliant idea of setting up a shared Dropbox folder for the slides, code, and supporting materials from all sessions at the conference. I’ve posted a PDF of my slides from my session, “Making Your ColdFusion Apps Highly Available,” to this Dropbox folder. The PDF includes links to a lot of the tools, services, and articles that I referenced in my talk.
My cf.Objective() 2013 Schedule
Posted 7 May 2013
As a number of other folks in the CF community have been posting their cf.Objective() 2013 schedule, I thought I’d do the same — and promote my session in the process.
CloudFront URLs Do Not Include the S3 Bucket Name
Posted 22 April 2013
This is probably obvious to anyone who has worked with Amazon CloudFront for some time, but I spent the last day or so banging my head against the proverbial wall when trying to make dynamic requests to the CloudFront CDN.
Utility for Creating Signed URLs for Amazon CloudFront Up on GitHub
Posted 25 March 2013
I’ve taken the code I wrote for my previous two posts on creating signed URLs for protected content in Amazon CloudFront in ColdFusion and dynamically changing the file names of the files you serve from CloudFront and put it all in a little CFC which you may find useful if you’re doing either of these two tasks.
Dynamic File Names Using Amazon CloudFront and ColdFusion
Posted 1 March 2013
There are a lot of use cases which require you to store customer-uploaded files with a system-generated file name instead of the original file name that the file had when the customer uploaded the file. You may want to ensure that every customer-uploaded file has a unique file name. You may want to provide a random file name so that someone poking through a server directory or Amazon S3 bucket doesn’t see file names like “income_taxes_jill_smith.pdf” You may have a specific file-naming convention that’s used for storing files in multiple hierarchies in your application. Whatever the reason, you also often need to change the name of the file when it’s requested by the customer after the initial upload. Jill Smith will want her file with the original name, and not “ks8pqz0hs7.pdf”
Creating Signed URLs for Amazon CloudFront in ColdFusion
Posted 11 February 2013
My team is in the process of shifting all of our online course content from being delivered in a Flash-based format to delivery in a video-based format. At the same time, we’re trying to figure out ways of improving delivery of this content to our global audience. We’ve got students all over the world, and in some fairly low-resource areas (where they have Internet access from 3-5pm on Tuesdays and Fridays, for example). One of the strategies we’re going to employ is distribution of our online course content via a CDN. Although we’ve used Akamai as a CDN in the past, we’re going with Amazon S3 and CloudFront because of cost and integration benefits.
Creating Signed URLs for Amazon CloudFront in ColdFusion
Posted 11 January 2013
I’m honored to have been selected to speak at this year’s cf.Objective() conference. I got the opportunity to speak for the first time at cf.Objective() last year, and this year, the good people on the content selection committee asked if I’d do a deep dive on my proposed topic: Making Your ColdFusion Apps Highly Available.
Learn ColdFusion in a Week is Now Available
Posted 8 November 2012
Some of the smartest people in the ColdFusion community have put together a great getting started guide for learning ColdFusion: Learn CF In a Week. This is a great, free resource to anyone who wants to pick up ColdFusion quickly. Instead of buying a book or purchasing training videos about getting started with ColdFusion, there’s this free, in-depth resource (that’s not to say that the CF Web Application Construction Kit series of books shouldn’t be on every CF developer’s bookshelf, because they should be!).
Slides from "Making Your ColdFusion Apps Highly Available"
Posted 30 September 2012
Attached to this post are my slides from my presentation at NCDevCon 2012: Making Your ColdFusion Apps Highly Available. While I do talk a bit about ColdFusion code changes that are necessitated by moving from a single server to a cluster, all of the content applies to making any web application highly available, no matter if it’s written in ColdFusion, PHP, or Ruby. In future iterations, I suppose I should rename the talk to “Making Your Web Apps Highly Available.”
A Few Thoughts on Google's Course Builder
Posted 12 September 2012
As my primary work revolves around online education and using technology to create an excellent learner experience, part of my job is to keep on top of many of the learning platforms available. Coursera has been making a big splash of late, and I’ve taken a number of courses on the platform. Lore has been gathering a large amount of buzz, especially as a replacement for more traditional learning management systems (and not a system for teaching at massive scale, like Coursera).
I'm Speaking at NCDevCon 2012!
Posted 31 July 2012
I’m really excited that the team behind NCDevCon 2012 has selected me to speak at this year’s conference. I was really impressed by last year’s conference (my first) and I really wanted to speak again this year.
Keeping Up With the Always-Changing Software Development Landscape
Posted 23 May 2012
As a manager and Web developer, it’s my responsibility to make sure that both my team and I stay up to date with as much in the ever-changing Web application development landscape as we can. If you’re in software development, and Web application development in particular, and you’re not learning about new technologies, frameworks, and approaches to building your Web apps, you’re in the wrong business. Seriously. Get out. You’re doing yourself and your clients a serious disservice.
Slides from My CFObjective Talk: Making High Performance Caching Easy with ColdFusion
Posted 20 May 2012
Attached to this post is a PDF of the slides used in the talk I gave yesterday at CFObjective: “Making High Performance Caching Easy with ColdFusion.” CFObjective is a great conference (and not only about ColdFusion, by any stretch of the imagination), and one that I felt honored to have been able to speak at. I thought the presentation went well, though I did seem to be talking a bit faster than I usually do (and I’m a fast talker).
A Few of My Favorite Things from ColdFusion 10: The All-New Scheduler
Posted 15 May 2012
Now that ColdFusion 10 has been officially released, I’d like to take some time to talk about some of the new features that I find to be real productivity enhancers and features that open new possibilities for work. I’m not going to discuss how the features work (i.e.; the code) because there are a lot of great resources one Google search away that show you how to do that (and there’s the always-underutilized ColdFusion docs!). If you just want to see the list of new functions in ColdFusion 10, you can also check out this page from the ColdFusion 10 docs.
Speaking at cf.Objective(), UBTech, but, alas, No Open CF Summit
Posted 9 February 2012
It looks like it’ll be another busy Spring for conference presentations for me this year.
Unleash Your Inner Spielberg When Presenting
Posted 28 October 2011
I’ve had the privilege of speaking at technical and educational conferences for more than a decade. At the turn of the century (it really wasn’t that long ago), I was speaking on using streaming media in higher education, and even did a session on the first release of the Flash Media Server at conferences like Syllabus (back before it became the Campus Technology conference).
Slides from My NCDevCon Presentation "Improving Application Performance with 3 Simple Functions"
Posted 18 September 2011
For those of you who wanted my slides from my presentation at NCDevCon — Improving Application Performance with 3 Simple Functions — they’re attached to this post. As usual, I learned a lot about what would work and would not work while practicing this presentation, and was making changes just an hour before showtime. I received some good feedback from a couple of people in the session as well, and wanted to extend my thanks to everyone who attended the session.
Quick Tip on Resolving UNC Paths in ColdFusion
Posted 7 September 2011
A few months back, we moved all of our user-generated content to a file share, and had to rewrite some of our code to use the new UNC path to the files. As with most things ColdFusion, it’s best to let the application server do the hard work for you, so instead of writing out the full UNC path to files in a <cffile> tag, you should use the expandPath() function instead. This is a really good idea if, at some imaginary point in the future, the path to your file share changes. (File shares never change locations in a network, right?)
I'm Speaking at NCDevCon and the CF Unconference at MAX
Posted 4 August 2011
Although I’ve spoken at a number of conferences in the past decade, and at three educational technology conferences in the last year, I’ve never spoken at a ColdFusion-specific conference. That’s about to change. Both the NCDevCon team and Ray Camden and the team behind the CF Unconference at MAX have given me the opportunity to finally do so.
Populating a Hidden ID Field When Using the jQuery UI Autosuggest Widget
Posted 15 July 2011
Creating A CF Administrator View in CFBuilder 2 via Extensions
Posted 7 March 2011
One of the really great new features of ColdFusion Builder 2 is the ability to create brand-new views in Eclipse from a CFBuilder 2 extension. This opens up a whole host of possibilities for developing with ColdFusion.
Accessing Your Adobe Connect Pro Licensed Server From Outside the Firewall
Posted 14 January 2011
I’m a pretty big fan of Adobe Connect. We use it in my job and it’s a critical part of our learning infrastructure. Adobe even featured us in a case study about using Connect in higher education.
Why @@Identity May Not Return the Actual New Row ID Value in SQL Server
Posted 14 January 2011
While I was reading the excellent topic “Database Development Mistakes Made by Application Developers” over on Stack Overflow, I followed a link to “What are the most common SQL anti-patterns?” and came across this tip that made me wonder if I’ve been handling the creation of new identity values all wrong:
Duff's Device in ColdFusion
Posted 6 December 2010
Use of ehcache in CF9 Requires Warm-Up Time
Posted 27 October 2010
One of the great parts of the annual Adobe MAX conference has been the Unconferences at MAX, and the CF Unconference, organized by the ever-dedicated Ray Camden. One of today’s sessions at the CF Unconference was given by Mike Brunt (and one of his colleagues, whose name I completely missed) on scaling ColdFusion 9 applications and, more specifically, how to set up ehcache for scaling. ehcache is built in to ColdFusion 9 and forms the heart of the new, fast, super-easy caching in ColdFusion 9.
cfcache Early, cfcache Often, 'Cause It's Just So Darn Easy
Posted 2 September 2010
Each new version of ColdFusion (be it from Adobe, Railo or OpenBD) brings with it a raft of new features. As a busy developer just trying to get things done, it’s easy to skip over most of the new features and use what you’ve always used. I’d like to share a brief story about the <cfcache> tag in Adobe ColdFusion 9 and why it’s the one tag in CF9 that you should start using now.
The Best Online Guide to the ColdFusion Debugger
Posted 16 August 2010
Charlie Arehart is an indefatigable contributor to the ColdFusion community. He always manages to dig through the dark and unexplored corners of CF and CF-related products, and comes up with some excellent gems and insights along the way.
On App Inventor: Speaking the Language of Novices
Posted 16 August 2010
Google’s App Inventor is a great idea. Empowering consumers to create is always a good thing. Visual Basic was the key to Microsoft’s long-time success. Map making tools are the reason why Warcraft III and Starcraft still sell on retail shelves, more than a decade after their release. iMovie, Windows Movie Maker and its counterparts have helped make YouTube the site for almost every Web meme of the last five years.
Mach-II Modules Don't Automagically Inherit ColdSpring Configuration
Posted 16 April 2010
This is probably obvious to anyone who’s spent time with Mach-II and ColdSpring, but I ran in to the issue the other day, spent about an hour missing the obvious, and thought I’d post.
Mach-II Call Method Command, How Do I Love Thee?
Posted 19 February 2010
Now that Mach-II 1.8 is out, I figured I’d write a little bit about one of my favorite new features of the release, the <call-method> command.
Lessons Learned in Making Many Mach-II Modules Out of Standalone Apps
Posted 30 December 2009
This entry is about a month overdue, but given the holidays and Getting Stuff Done (SM) at work, it’s been delayed.
Mach-II Modules and Views
Posted 30 November 2009
It looks like I’m going to spend another Monday morning writing about Mach-II modules. In this entry in the series, I’m going to look at how your CFML-based views are affected by the Mach-II module structure.
Mach-II Modules and ColdSpring
Posted 23 November 2009
Ah, ColdSpring. In my opinion, you’re the bees’ knees. You’re what makes managing object dependencies a breeze. You simplify and enable the development of object-oriented ColdFusion apps so much that you’re core to most large-scale ColdFusion applications written in the last couple of years. The teams behind Mach-II, Model-Glue and ColdBox like you so much that they made you a key player in their framework stacks. I’m not going to sell you on the virtues of ColdSpring any longer, so if you’re not using it already, start please.
Mach-II and Module Config Files
Posted 16 November 2009
In this installment of my mini-series on modules in Mach-II, I’m going to talk about the Mach-II XML config file for your module, how it relates to the parent (main application) Mach-II XML config file, and try to offer some tips on what should and should not go in your module’s Mach-II XML config file.
A Brief Series on Mach-II Modules
Posted 10 November 2009
I’ve been doing a lot of work with modules in Mach-II in the past couple months and thought I’d blog about some of the stumbling blocks I’ve encountered.
Programmatically Enabling Robust Exception Handling in CF9
Posted 15 October 2009
I’ve been going through Daniel Short’s excellent new training module, "ColdFusion 9 New Features" over on Lynda.com. I really like the depth and breadth of content that’s available on Lynda.com (and it’s not expensive), and given that Adobe’s on in-person training for CF9 won’t be available for a while yet, it’s great to see them rolling out CF9 training at the same time as the CF9 release.
Making Decisions in the Database, Not in Your CF Code
Posted 15 October 2009
Like many people who develop Web applications, I don’t have a formal background in computer science. I’ve taught myself most of what I know, and I’ve been very fortunate to be the recipient of a lot of great knowledge from people much, much smarter than I. One of the areas in which my skills can be improved is with utilizing the full power of SQL. I’m no SQL expert, and while I’ve certainly read up on stored procedures, the variances of T-SQL (as I use MS SQL Server at work), and fun stuff like cursors (and how you should use them judiciously, at best), most of my ColdFusion queries revolve around four simple SQL statements: SELECT, INSERT, UPDATE and DELETE.
Using Mach-II Property CFCs and ColdSpring
Posted 17 September 2009
One of the things that I really like about using Mach-II, my MVC framework of choice for developing ColdFusion applications, is the level of support and interaction with the community that the core team behind the framework provides. I know it’s a lot of work and a lot of time for them (and time is the one thing that none of us ever have enough of), and I’m always impressed with how they go out of their way to help boneheads like me in our hour of need.
Progressive (Contextual) Scaling and WoW
Posted 2 May 2009
I think that Blizzard has taken a new approach to game design with the recent development and release of the Ulduar dungeon in World of Warcraft. This is pure speculation on my part, and other MMORPGs may already be employing such measures, but if it is, I’m not aware.
Be Part of the Solution
Posted 30 April 2009
A blog post over on Vitamin (a fine resource for Web application development articles) got me reading a commentary by Virginia Hefferman at the New York Times Magazine about the knee-jerk reflexivism so rampant in online "commenting" tools. It’s a worthy read (even if she fails to make the distinction between generalist sites (ie; newspapers) and specific, targeted communities).