I'm Speaking at the Adobe ColdFusion Government Summit on March 9

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.

I'll be speaking about caching in ColdFusion along with performance enhancements made around caching (specifically, using Redis as a session storage cache) in Adobe ColdFusion 2016, the forthcoming release of the product. I've spoken about the crazy simple, crazy powerful caching tools in ColdFusion in the past, so I hope to show attendees how simple it is to vastly speed up performance in ColdFusion apps by using simple caching techniques.

If your'e in the DC/NoVA/Maryland area, the event is free and open to anyone, not just government employees. Space is limited to 50 people, so if you haven't yet registered, now is definitely the time to do so!

Getting the Latest AWS Java SDK to Work with Adobe ColdFusion

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.

One of those libraries is the AWS Java SDK, and you're going to need that library if you want to do anything in AWS that goes beyond the simple, easy, kinda powerful support that ColdFusion has for Amazon S3 (Simple Storage Service). ColdFusion makes it drop-dead easy to utilize S3 because it provides a series of tag and function-based wrappers for the underlying AWS Java SDK to access services within S3.

If you want to do more with AWS in Adobe ColdFusion than just utilize S3, however, you're going to need to create objects and call methods on the objects in the AWS Java SDK. The problem you'll quickly run into is that the version of the AWS Java SDK bundled with Adobe ColdFusion — even ColdFusion 11 — is pretty old. If you want to use any of the services introduced in the last two years, like Lambda or the API Gateway, you're going to need to use an updated version of the AWS Java SDK.

You cannot, however, just drop the latest AWS Java SDK into your cfInstallRoot/lib directory and be done with it. You also can't use the new Java class loader introduced in Adobe ColdFusion 11 to load up the AWS Java SDK .jar files. That's because a version of the core AWS Java SDK .jar file is already in cfInstallRoot/lib and trying to load a new version on top of that .jar using Java loader in Adobe ColdFusion 11 and beyond will conflict with the one that's loaded during app server startup.

I'll be covering this briefly in my talk, so I thought it would be best to post instructions on how to use the latest AWS Java SDK in Adobe ColdFusion for both those in attendance at the talk and for future general reference.

To get the latest AWS Java SDK working in Adobe ColdFusion 10 or later, do the following:

  1. Download the latest SDK from from https://aws.amazon.com/sdk-for-java/
  2. Move the current aws-java-sdk-x.x.xx.jar file from your cfInstallRoot/lib elsewhere for backup.
  3. Move the aws-java-sdk.jar from the download into your cfInstallRoot/lib directory.
  4. Inside the "third-party" folder in the download, move the following .jar files into your cfInstallRoot/lib directory:
    • jackson-annotations
    • jackson-core
    • jackson-databind
    • joda-time
  5. Restart ColdFusion

It used to be that the AWS Java SDK was one monolithic .jar which included all third-party dependencies. Amazon changed things a while back to make it easier to manage dependencies using tools like Maven by breaking out the SDK's dependencies. This is why you can't just drop the aws-java-sdk-x.x.xx.jar file into the cfInstallRoot/lib directory and have things work.

The AWS Java SDK actually requires quite a few more third-party dependencies but fortunately most of those are already bundled with Adobe ColdFusion (version 10 or later) and have only patch version differences between what's in bundled with Adobe ColdFusion and what's bundled with the AWS Java SDK. I've not experienced any problems at all on that front.

I'm Speaking at the First Official Adobe ColdFusion Summit!

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.

While the final session names haven't been announced, I can say that I'll be talking about Amazon Web Services (AWS) and ColdFusion. I gave talks about architecting highly available ColdFusion apps at both NCDevCon and cf.Objective this year, and both talks included a lot of information about architecting for AWS.

The Trello board for CF Summit session ideas had two proposed sessions related to AWS and ColdFusion. "Cloud AWS & PaaS (possibly two topics)" and "VFS, File handling, CFHTTP, S3 (What is a file anyway?)" both made references to using ColdFusion with AWS, and my current plan is to try to pick from both cards for my talk. I think that a PaaS (platform as a service) comparison is probably way out of the scope of an hour-long session at the CF Summit, so my plan is to cover the following:

  • AWS Overview
  • S3 integration in ColdFusion
  • The official CF10 AMI (quick setup and some caveats)
  • A quick reference architecture for CF apps on AWS
  • The reality of running production apps on AWS (gotchas)

I'd love to hear feedback about this. Would these topic areas interest you? Are you looking for something more advanced? Remember, I only have about 50 minutes for the entire session, and although I'm a fast talker, I can only cover so much!

Adobe Shadow Makes My (Design) Life Easier

I hand't heard a whisper of Adobe Shadow before it was released a couple of weeks ago. In a nutshell, Shadow is a tool which lets you perform simultaneous, synchronized browsing on both your desktop and mobile devices. Everything has to be on the same network node, and your mobile devices have to be running a small iOS/Android companion app, but the tool just works, beautifully.

When running Shadow, you pull up a page in your desktop/laptop web browser. At the same time, the same page reloads in the instance of Webkit inside of Shadow. (I'm assuming that they used Adobe AIR to create Shadow, because AIR has an embedded Webkit browser.) This is a huge timesaver when developing mobile sites. Instead of making design/CSS tweaks and checking first on the iPhone, then a co-workers Android phone, then the iPad, then the desktop, you can simply reload the page in your Web browser and all of the mobile devices reload at the same time. It's awesome, and a big, big time-saver.

If you're doing any kind of mobile Web site development, Shadow will rapidly become an indispensable tool in your arsenal, as it has for me.

What Can the MachBuilder Extension for ColdFusion Builder 2 Do for You?

I blogged earlier this month that ColdFusion Builder 2 ships with a number of extensions for the major ColdFusion frameworks. MachBuilder is the extension for the Mach-II framework, and was built by Kurt Wiersma and I.

The extension ships with ColdFusion Builder 2 and can be found in the "extensions" folder inside in the ColdFusion Builder 2 install directory. You can also get it as part of the core Mach-II 1.9 download.

MachBuilder currently has two major features:

1. Configure and create a new Mach-II application skeleton

This option is available to you when you right-click on a project folder or a folder within a project. Selecting this option brings up a simple form that provides you some configuration options for a new Mach-II app skeleton. This includes:

  • Specify the application name
  • Specify the event parameter name
  • Enabling the ColdSpring property
  • Enabling SES URL writing in the Mach-II app
  • Enabling the on-screen Mach-II logger
  • Providing the password for the Mach-II Dashboard
  • Specify a custom webroot path if you don't want to use the default

When you tell the extension to create the application skeleton, it parses through the application sekeleton files and inserts the values that you enetered as required. If you wanted the ColdSpring property to be set up, it does that for you. The same goes for SES URL rewriting (using the default /key/value/ pattern), and the logger. The Dashboard is included by default, as it's part of the core Mach-II 1.9 framework. If you don't want to include the Dashboard, you can delete the related lines from the mach-ii.xml configuration file.

All of the files end up in the folder which you right-clicked on to fire off the extension. You'll want to make sure that you're running the extension in the correct folder. If you want the Mach-II application skeleton files to be put into your webroot, then right-click on your webroot folder. If you want the application to live inside a folder in your webroot, right-click on that specific folder.

2. Display Mach-II Dashboard

This option is only available when you click on files in a project. It does one thing: launch the incredibly useful Mach-II Dashboard for the currently selected server in a view inside of ColdFusion Builder. That view stays open, like all ColdFusion Builder 2 extensions that create views, until you either close it or quit out of ColdFusion Builder 2.

The Mach-II Dashboard is what I would consider to be a required tool in developing Mach-II applications. If you're not using it and you develop using Mach-II, you're missing out on significantly improved development.

We had hoped to provide code assist on Mach-II configuration XML files with this extension, but ColdFusion Builder extensions currently do not work on non-cfc/cfm files. The ColdFusion Builder team is aware of this issue, but if you want to make sure that this becomes possible in the next version of ColdFusion Builder, then please vote for this enhancement request!

Side note: You can get code hinting and assistance on your Mach-II configuration XML files if you use the Mach-II DTD and the free Eclipse Web Tools Project (WTP) XML editor (not Aptana, which is the default XML editor in ColdFusion Builder).

One other feature of this extension is that it will automatically notify you when there's an update to the extension. (Kurt spent a lot of time for this 1.0 release implementing the auto-update mechanism.) We plan on adding more features to it in the future (see this Google Doc for more), and you're encouraged to add feature requests to the Mach-II Trac site. Mach-II is community-driven, after all.

If you want to see how this extension works, including the callback to refresh the Eclipse project view when creating a new Mach-II project, look at the "Mach II Builder Extension" directory that gets created in your webroot when you install the extension into CFBuilder.

ColdFusion Builder 2 Ships with New Extensions, Including MachBuilder, Which I Helped Write

In all the coverage of ColdFusion Builder 2, one thing that hasn't been mentioned is that the IDE now ships with a bunch of framework-specific extensions. There are extensions for:

  • Mach-II
  • ColdBox
  • Model-Glue
  • CFWheels

Each of the extensions provides functionality for building apps with that framework. Each extension has different functionality, but if you're using one of those extensions, you should find that it makes you more productive (or at least we certainly hope it does!).

These extensions can be found in the CFBuilder Install Directory/extensions.

I helped write the MachBuilder extension for Mach-II. The super-smart Kurt Wiersma did most of the work, but my contribution to the project was doing the Mach-II application skeleton work.

I'll detail the MachBuilder extension in a future blog post, but the key thing to remember is that these extensions do exist for the major CF frameworks. Use them — or contribute to making them better!

What I'd Like to See Adobe Do with "Wallaby"

"Wallaby" is the code name for Adobe's Flash to HTML5/CSS conversion tool that they recently posted on Adobe Labs. A lot of people heard about this tool (even when it was previewed back at Adobe MAX in 2010) and assumed it's a full Flash to HTML5 converter tool. It's not. It only converts animations built in Flash. It doesn't convert ActionScript to JavaScript...yet. That's probably being built into a different tool. Wallaby also doesn't support sound export in its current iteration, but my guess is that it wouldn't be too hard to add.

Wallaby converts a Flash animation and generates HTML5-based HTML, CSS3-based CSS, including heavy use of CSS transitions, and some JavaScript for animation support. It's actually pretty impressive, and I hope Adobe begins to use it across a number of tools in their arsenal.

Where I'd really like to see Wallaby applied is in the Adobe Presenter and Captivate products. Both products produce Flash-based animations that are designed for presenting information in a sequential fashion. Presenter created PowerPoint-based lecture presentations, and that's where I think Wallaby has its most immediate applicability (except for the real target of this product, which I'll talk about in a minute). Presenter presentations require Flash, which excludes them from working on iOS devices. And there are a lot of those devices out there. There isn't much ActionScript used in Presenter presentations, so it seems a natural fit for broadening the number of platforms on which content can be delivered from an Adobe product. Presenter is frequently used in higher education (it's a core tool at my place of work), and in higher ed, saying "Oh just have people use Android devices" isn't enough when it comes to solving mobile content compatibility issues for students.

Captivate would be a bit more difficult to implement the Flash to HTML5 conversion engine. Captivate uses a lot more ActionScript, plus has numerous options for custom variables and other fairly complex tracking mechanisms that wouldn't necessarily translate well into a HTML5/CSS/JavaScript combination. RJ Jacquez, who is an Adobe Evangelist, published a video showing a rudimentary conversion of a Captivate movie to HTML5 using Wallaby, so that's quite promising.

(Another product that could benefit from Wallaby is After Effects. It already exports to Flash and as it's purely animation-based, it could go the HTML5/CSS3 route pretty easily.)

The reality of Wallaby is that it's most likely being developed to create HTML5/CSS3 animations that can be used by advertisers in lieu of pure Flash animations. Saying that it's a HTML5 tool gives Adobe the leverage to capitalize on the latest in technology buzzwords for advertising and marketing groups, thereby making those groups feel that they're up to date in the solutions that they can provide to their clients. More importantly, a rich HTML5/CSS3 editing tool would allow those groups to create animation-based advertisements that would get around popular Flash-blocking tools like FlashBlock and ClickToFlash, as well as similar animated GIF-blocking tools. Add in a little tracking and monetization JavaScript, and you have a rich-media advertising tool that works on most mobile devices — something that can't be said of most similar tools today.

Accessing Your Adobe Connect Pro Licensed Server From Outside the Firewall

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.

We've been using Connect since it was Breeze Meeting 5 (remember that naming debacle?), and the upgrade process from one version to another is really quite simple and seamless, particularly if you're not building multiple clusters with multiple origin-edge configurations. There's one big, giant gotcha about setting up Connect that has not changed since the days of Breeze Meeting 5: getting people outside your network to actually access Connect meetings via a Web browser.

The default approach of the licensed version of Connect is that Connect will be deployed behind your firewall to your company and its employees alone, and that no one from outside your network will need to access your Connect setup. That works well for quite a few of the customers who have a licensed version of Connect. If you're an educational institution that needs to have students from around the world use your Connect setup, that's a bit of a problem.

The solution, which isn't well documented, is this: you need to add a line to the custom.ini file in your Connect installation that tells the Flash Media Server inside of Connect (the server which powers the actual Connect meetings, not the administrative UI) how to resolve itself to your external domain name. The line needs to be all in lowercase, and should look like this:

host.machine name=connectServer.domain.name

So if the machine name of your Connect instance is bigBadConnect1, and your domain is connect.mysupercoolsite.com, the line you need to add to the custom.ini file is:


This tells the Flash Media Server running inside of Connect to resolve to the external domain name of the server. Without it, people from outside your network will be able to access the Connect administrator, but not actually connect to any meeting sessions or watch any recordings. They'll get stuck "Connecting..." to your Connect meetings and never get any farther in the process, even if all the appropriate ports are open on your (and their) firewall. With this addition to the custom.ini file, all works well.

Note that this doesn't affect the hosted version of Connect at all. It's only an issue for licensed (internally hosted) customers.

Adobe Releases HTML5 Video Player Widget

It's really nice to see Adobe showing their commitment to the development of HTML5 and Flash tools that make life easier to those of us who develop Web applications. Adobe yesterday released the HTML5 Video Player widget which writes in a video player which, by default, uses the HTML5 <video> tags, but falls back to a Flash video player if the browser doesn't support the <video> tag. There are already a number of video players out there that do this, but what's great is that we're seeing a major player like Adobe doing this. It's based on an open-source project, Kaltura, so it's nice to see open-source getting some high-profile love from Adobe as well.

The player is accessible through the Dreamweaver Widget Browser, which is a nifty AIR application that lets you preview all sorts of HTML/JavaScript based widgets, supply parameters to them, and generate code that you can use. I imagine that we'll be seeing Adobe use the Widget Browser to deliver a lot of HTML5-focused tools in the short term. (And you don't need to use Dreamweaver to use the Widget Browser, thank you very much.)

I really hope that this is just the first in a long line of HTML5 tools from Adobe, and that we'll see them come out with a brand-new HTML5-focused tooling set in the future. They did some pretty impressive work with Flash Catalyst as a front-end to Flex tooling, so I believe they can do the same for HTML5.

Now it's time to really start converting all those .flv movie files to .mp4 movies files...

Acrobat.com Rounds Out Its Office Suite with Tables

A little more than a year ago, I wrote a post called "Adobe Throws Down the Collaboration Gauntlet," in which I talked about what I assumed to be Adobe's different approach to online Office-style application suites. Just recently, Adobe added both Presentations and, now, Tables to their online offerings. This gives them an online word processor, and online presentation editor/player, and an online spreadsheet tool.

The differentiator, in some ways, is the heavy emphasis on collaboration. While Google Docs offers collaboration to varying degrees in their online suite (more so in their spreadsheet app than in others), and we've yet to see how far Microsoft will go with their upcoming, online version of Office, Adobe has made it pretty clear that collaboration, rich media, and a really good user experience are the cornerstones of their online office suite. In some ways, I look at Tables and think "You know, if Apple made an online version of Numbers, this is kind of what it would look and feel like." just because it looks and feels so good.

There are a couple of niceties that aren't found in Google Docs, though. The "Private View" is really nice because if you want to sort or filter data while others are working with you, you can do so without changing their view. Tables is a pretty serious demonstration of Adobe's LiveCycle Data Services (which is supposed to get a pretty nifty update today), as I'm assuming that it's LCDS that's used on the back end to handle all the data synchronization between collaborators in Tables (and probably in Presentations and Buzzword too). On the other hand, Google Docs has some pretty nice data import features (ie; being able to say =http://some.data.service.site/ in a table cell, as seen here), which Tables doesn't.

Now I'm not much of an Excel guy, so I can't say just how much coverage Tables has on formulas compared to Excel, and there's no pivot tables (I'd imagine that's going to be added sooner rather than later), but as with most things software, only 20% of the possible features in an application are used by 80% of the people. I've posited that Adobe's audience is the small office, or the small workgroup, where a handful of people need a simple way to communicate and collaborate in real time on various types of Office-style documents. Tables goes after that audience with Adobe's usual style.

More Entries

BlogCFC was created by Raymond Camden.

Creative Commons License
The content on http://www.iterateme.com/ is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License.