Making the move...
ambassador at fourthworld.com
Tue Mar 28 03:40:51 EST 2006
Dan Shafer wrote:
> I agree that "merge" is very cool and quite powerful.
> Still, I cannot put into a Web page:
> Hello, there. The time is <% merge [[the time]] %> (regardless of the
> dellimiter being used around the call) as I can with Ruby. The merge
> operation would, I think, have to be included in the CGI generating the
> entire text string above, right? Or am I really missing something obvious
The merge function can take any block of text (such as an HTML page, for
example) and will replace Transcript expressions between "[[" and "]]"
with the evaluated result. You can but any expression or container
reference between those brackets, including variables, constants, or
even calls to Transcript functions defined elsewhere, and you can place
any number of these anywhere in your HTML.
It really is worth devoting a half-hour to playing with. Merge is one
of the best things Transcript adopted from SuperTalk (from back in the
days when Allegiant was pushing a server-side engine).
You can use the merge function in a CGI script, or in HTML templates
processed by the engine, however you like. And just like the
recommended Ruby setup, we have users on this list who set up Rev with
FastCGI, so performance should be roughly on par with similarly
With Ruby it's common to create server directives that pass any files
accessed in specified directories through Ruby on the way out (in
essence an "implied CGI"), and I see no reason one couldn't do the same
for any text processing engine they're using, such as Rev.
So while it seems somewhat magical to use:
...all that's really happening there is the server is set up to
interpret that as:
Set up similarly, you could just as easily set up the server to have
implied default pages specified as belonging to Rev, so calling the
directory above would be interpreted as:
> Again, as I said earlier, this may well be a distinction without a
> difference when it comes to accomplishing what I'm pointing out as the main
> advantage/feature of an MVC framework for Web development, namely the
> (relatively) clean separation between presentation and business logic. I'm
> not promoting Ruby, just trying to understand the qualitative difference in
> using an embedded scripting language vs. a CGI approach.
"Embedded" is just how you set up your server to use the text processing
engine of your choice, be it Ruby or Rev or whatever. Since Ruby is
most commonly set up using FastCGI, any distinction between "embedded"
and "CGI" may be too subtle to be instructive.
But when you mention the framework, now you're on to the big difference
that makes RoR attractive: Rails already exists, whereas one would need
to write a well-factored web app framework in Rev to get the same level
MVC can make a good foundation for such a framework, as can many other
common patterns. Anything that separates code, content, and
presentation is a step in the right direction, esp. if it makes smart
use of triggers and accessors as MVC and similar patterns do.
As I noted here recently, I'm not yet convinced MVC per se is the best
fit for Rev. I'm open to opinions to the contrary, and would enjoy
learning about successful apps shipped with a Transcript implementation
Among languages that don't already provide MVC classes, there's much
debate about how to graft them on. The more I look into it the more I
find many different flavors of MVC, MV, and similar factored patterns.
For example, there's at least one good paper outlining how Apple's MVC
in Core Data differs from SmallTalk's. The biggest debates out there
seems to focus on the scope and role of the Controller (most pretty much
agree what a Model and a Viewer are), and a few have dropped the
I haven't had enough commercial experience with MVC to have a strong
opinion about those differences. But stepping back from other people's
implementation specifics to focus on the results we're all looking for,
there are many ways to separate code, content, and presentation with
Couple that with the high productivity of Transcript's typelessness,
chunk expressions, and merge function (just to name a few), Rev would
seem a worthy contender for anything involving a lot of text processing,
on the desktop or the server.
PS: For a fun take on the flipside of frameworks, this post at Joel is a
Managing Editor, revJournal
Rev tips, tutorials and more: http://www.revJournal.com
More information about the Use-livecode