This past Saturday, Gert Franz came to New York to talk to the New York ColdFusion User Group about his ColdFusion engine, Railo. Special thanks to Peter Bell for getting Gert here in the first place. Below is the "wrap up" of the meeting sent out to NY CFUG members.
I have to admit, before this meeting, I didn't know anything about Gert Franz or Railo. I knew that it was a ColdFusion engine and that I've seen it come up in speeds tests on various blogs, but that's where my understanding ended.
By the end of the meeting, which was just short of three hours, I definitely walked away thinking to myself, "Do I have to go home and start using Railo immediately?!?" Now, obviously, I wouldn't just abandon my beloved Adobe ColdFusion engine without some serious consideration; but, I throw that thought out there to emphasize how good the meeting was and how exciting Railo seems to be.
There was a ton of information to absorb in the three hours, more than I can even remember, but I wanted to share with you a few of the key concepts that I found particularly interesting:
Everything Is A File System
This was hands down the coolest feature of the night. In Railo, you can make just about anything into a native file system that is 100% compatible with tags like CFFile and CFDirectory. For example, if you wanted to grab files out of a ZIP archive, no problem:
<cfdirectory action="list" directory="zip://\files\data.zip" />
Or maybe you wanted to grab a file out of an FTP:
<cfdirectory action="list" directory="ftp://files.com/" />
Or maybe you wanted to grab files out of the RAM:
<cfdirectory action="list" directory="ram://" />
I'll give you a moment to sit back and process what I just wrote.... cause it's pretty mind-blowing. Seamless integration with all sorts of file systems and archives. And I just demonstrated a few - he also mentioned SFTP, HTTP, RAR, GZIP, and just about any kind of archive file that contains other files.
Oh, and did I mention it works with the Amazon S3 service as well. That's write, you can use CFFile and CFDirectory to view and manipulate your Amazon S3 files.
And to make it even better, this whole concept is encapsulated behind an "Interface", so theoretically you could write your own file access code to turn your custom "whatever" into a file system. That's pretty bananas.
You may have noticed above that I used a "Ram" resource as denoted by "ram://". This isn't the RAM of the computer. This is a special resource that acts like RAM for the Railo engine. By that, I mean it's a persistent file system, that only lasts as long as the Railo service lifecycle. Now, you might ask yourself how that's any different from the APPLICATION scope? That's understandable. The thing is, this isn't a scope at all; it's a temporary file system that you can read and write to.
<cffile action="write" file="ram://test.cfm" output="blam" /> <cfinclude template="ram://test.cfm" />
The power of this might not be obvious until you realize that it answers the question: How can I execute dynamically generated code without writing it to the file system? Are you beginning to see the possibilities?
Video conversion. Video player. Video screen shots. Extracting animated GIFs. Splicing video. Dozens of optimized profiles. 'nuff said.
In Railo, you can turn on a "magic functions" mode that allows Railo to make assumptions about how you want to access and maniupulateCFC-based information. By this, I mean it can use implicit getters and setters with direct variable addressing (ie. obj.Foo = "Bar" actually calls obj.SetFoo( "Bar" ) implicitly). Loads of other stuff there, including casting function (ie. _ToString(), _ToBoolean()).
Site Specific Administration And Portability
Each web site you create has its own ColdFusion administrator with site-specific settings. Don't worry, there is still a global admin for global settings; but, from what I gathered, you can literally set properties in a web site, pick its folder up and drop it somewhere else, and just run it as if nothing changed. Bad ass.
... and, there's so much more. But I don't have time to get into all of it now. Hopefully, you can see from the above that this is something you might want to consider at least learning a little more about.
See you next time.
Want to use code from this post? Check out the license.