The amazing adventures of Doug Hughes

Archive for June, 2005

CFUnited Model-Glue BOF – Be There!

As a few people have blogged, there will be a BOF (Birds of a Feather) session about the Model-Glue framework on Wednesday at CFUnited. The session, which starts at 9pm on Wednesday, will consist of a half hour pannel discussion followed by a half hour Breeze Live presentation by Joe Rinehart. I was pleasantly surprised to find out that I have been invited to sit on the pannel. As of now, it looks like the pannel will consist of myself, Joe Rinehart, Jared Rypka-Hauer and (if he agrees to it) Sean Corfield.

Here’s my guess is that the frirst question will be, "Is Mach-II dead?" I’ve already made my opinion clear on this.

If you’re at all interested in the Model-Glue framework, I strongly suggest attending. As as a bit a teaser, I think Joe may be making an announcement…

Mach II, Alive and Kicking!

Over the past year or two, I’ve used Mach-II quite a bit. In fact, this blog and Alagad.com are both Mach-II applications. However, I consulted Joe as he wrote Model-Glue and gave him feedback from my Mach-II perspective. Joe has done a great job and we’re beginning to see a lot of people praising Model-Glue. This has prompted the big question of the week: Is Mach-II dead?! The short answer is No !

Recently, several prominent people in the community have blogged on the apparent demise of Mach-II. The logic tends to be a comparison between the activity of the framework maintainers and the comparative quality of their respective documentation.

People seem to be making this comparison:

Comparison Mach-II Model-Glue
Has had frequent recent updates? No, but it did when it was first released. Yes, but it’s only recently been released.
Has good documentation? No, but Sean Corfield has published some good documentation and there are sites like MachII.info out there. Yes, but it’s not perfect.
The creators actively participate in the community? Not really, but they do sell training and Hal publishes his occasional newsletter. Yes, sometimes we wish he’d be quieter! 😉

Given that comparison, people seem to be drawing the conclusion that Mach-II must be dead and Model-Glue must be taking over.
I believe this argument is dramatically flawed. Consider the following questions:

Question:
Is Mach-II available for download?

Answer:
Yes.

Question:
Does Mach-II still work?

Answer:
Yes.

Question:
Is Mach-II still an Object Oriented, Implicit Invocation, Model View Controller framework?

Answer:
Yes.

Question:
Do many companies still use Mach-II as a standard?

Answer:
Yes.

Question:
Is there still a vibrant and vocal community supporting Mach-II?

Answer:
Yes.

Question:
Given the release of Model-Glue, has Mach-II in some way become obsolete?

Answer:
No. Both of these frameworks ultimately solve the same problems.

Question:
Is Mach-II a stable and functional framework?

Answer:
Yes.

What I’m really saying is that even though the initial comparison between Model-Glue and Mach-II may produce a feeling that Mach-II is somehow dying, it doesn’t actually indicate that it is. Mach-II today is just as stable and functional as it was three months ago, before the release of Model-Glue. Did we hear pundits spouting “fear, uncertainty and doubt” then? No!

The real upshot of this situation is twofold:

One, if you like Mach-II, you have many useful years in which you can keep using Mach-II. It’s not dead. It’s not dying.

Two, the more we as a community discuss this type of topic, the more developers are going to take notice. Hopefully these developers will feel compelled to learn more about and begin applying Object Oriented Programming, design patterns and modern programming techniques. This might help ColdFusion resolve some of its perceived image problems, which benefits us all.

In summary, neither Mach-II or Model-Glue are dead. We should all feel compelled to learn more about and lend support to both however we can.

Just What Is an Alagad?

A few days ago I got an email from the “Contact Us” form on the Alagad.com website from a puzzled Filipino. It seems that the word “alagad” has meaning in Filipino. I thought the resulting email exchange was interesting and I’m publishing it here for all to see.

First Email (From Jerky San Pedro using the Alagad.com Contact Us form)

This is a lame comment, actually. I was just puzzled by your company’s name rather than your product. I am a Filipino and I thought that there is a Filipino in your business since ALAGAD is a Filipino word for “henchmen”, or “accomplice”, or “army men” to some extent. Nothing really just wanna share something. Your company name sounds cool by the way. =)

My Reply

Jerky,

I have to say, of all the emails I’ve received in recent memory, this is the most amusing. Thank you!

When I started Alagad it was intended to be a graphic design business. I wanted a name that sounded slick and modern, so I selected some words that described what I wanted to do and used that to name the company. The words were: Advertising, Layout, And Graphic Art Design, hence, Alagad.

A few years ago another Filipino emailed me and said that Alagad meant “ally,” which I understood to mean someone who’s on your side. I thought that was quite cool. However, “henchmen” isn’t that bad either!

I’d love to know how it’s pronounced.

Thanks again for the email, it made my night.

Doug Hughes

His Reply to My Reply

Doug,

Actually, ALAGAD is a Filipino word which means someone who is serving a purpose or a person. For example if you were called “ALAGAD NG BATAS” (perpetrator of justice) here, it means you are a cop (NG, pronounced as NANG, a word which can be loosely translated to “OF”, and BATAS — said as BUTT-TASS — is a word which means justice). Thus, I said there “armymen”.

“Henchmen”, “accomplice”, “perpetrator” and “ally” are near terms, but “dignified servant” is, I think, the best translation. As “alagad” is a word commonly used for serious topics like “good and evil”, “justice”, “news and current affairs”, “journalism” and also in poetry and poetic proses.

Er — ALAGAD is pronounced as “AH-LOG-GOD”. “AH” as in “AH! I’m falling into a cliff and I don’t have wings to help me fly!”, “LOG” as in “Your legs look like Sequoia logs from this view.”, and “GOD” as in “This guy [Jerky] is nuts, he must be the GOD of nonsense.”

Hope that helped satisfy your curiosity. Go forth and be the best ALAGAD of Graphic Design and all that jazz.

Thanks for er — replying and commenting nicely on my mail.

Jerky San Pedro

Breeze Demo of the Alagad Image and Captcha Component today at 1pm PST (4pm EST)

Sean Corfield has graciously allowed me to present on the Alagad Image Component and Alagad Captcha Components in his breeze room. Today, June 15th, I will be giving an overview of these components (and giving away free licenses!). I will demonstrate how to use them as well as covering advantages and possible pitfalls.

To attend the demo go to http://www.corfield.org/breezeme and sign in as a guest.

If you are unfamiliar with these components here’s a brief introduction:

The Alagad Image Component is a single CFC written in ColdFusion which provides the ability to read, create and write image files from ColdFusion. It’s cross platform, and provides nearly 100 methods for working with images.

The Alagad Captcha Component is a component used to prevent automated submissions of forms. Captcha stands for Completely Automated Turing Test to Tell Computers and Humans Apart.

After the presentation I’ll be answering questions and one lucky person will win a free license for both components!

ColdFusion Java Object Reflector

I’ve been recently been working with some undocumented features of ColdFusion. Unfortunately, because of a lack of documentation I’ve been feeling my way in the dark by using the trusty cfdump tag.

However, cfdump doesn’t produce all that much useful information when you dump Java objects. You get the package and class name, its methods (in an unintelligible form), and its fields. You don’t get the class’ superclass, its implemented interfaces, its constructors or any useful information on its methods.

If you’re lucky the class is one of the standard java classes and you can easily look the information up in the Javadocs. If you’re unlucky you have almost no information on the object and what it does.

That is, until now! I spent a good portion of today writing a CFC which uses reflection to inspect any arbitrary class. The CFC returns a structure of information on the class. I then went on to write a handy user interface for the CFC with Model-Glue. (If you go to the link, be sure try out a class name of coldfusion.sql.QueryTable. This is the class name for a ColdFusion Query.)

You can download the whole thing here. To use it you will need to download Model-Glue, extract it, and create a ColdFusion mapping to the Model-Glue folder.

The reflector.cfc is the heart of the application. It can be found under the /reflector/model/reflection directory.

Reflector.cfc provides the following methods:

Boolean isClassName(name) This returns a Boolean value indicating if the name argument is a class name.

Boolean isPackageName(name) This returns a Boolean value indicating if the name argument is a package name.

Array getAllPackageNames() This returns an array of all available packages. I’m not much use, but I’m here.

Struct getClassInfoFromObject(object) This method returns information on the object passed in. The object can actually be a primitive value, or any other object. This simply calls the getClassInfo(name) method.

Struct getClassInfo(name) This method returns information on the class identified by the name. This is case sensitive. This pools information from all of the following methods.

Array getSuperclasses(Class) This returns an array of names of super classes for the java.lang.Class object passed in.

Array getNestedClasses(Class) This returns an array of names of nested inner classes for the java.lang.Class object passed in.

Array getInterfaces(Class) This returns an array of structures describing interfaces which implemented by the java.lang.Class object passed in.

Array getFieldsInfo(Class) This returns an array of structures describing interfaces on the fields available in the java.lang.Class object passed in.

Array getConstructorsInfo(Class) This returns an array of structures describing constructors available in the java.lang.Class object passed in.

Array getMethodsInfo(Class) This returns an array of structures describing methods available in the java.lang.Class object passed in.

In general, you’ll probably only want to use the getClassInfo(name) method. Normally I would describe the exact structure of the struct. However, it’s time for me to take care of my son. I suggest you take a look at the source code for the reflection.cfc and how I use it in the Model-Glue user interface.

If enough people ask I’ll document more details.

Tag Cloud