Big Mach-II news! GreatBizTools officially backing the project

In what we feel marks the beginning of the “second generation” of the Mach-II project, Team Mach-II has just announced that GreatBizTools has purchased the copyright from Ben Edwards, who along with Hal Helms, created the Mach-II framework. From the blog entry on the Team Mach-II blog:

GBT’s primary goal is to make the framework more transparent and open to the community of users.  Plans are underway over the next several months to achieve the following objectives regarding the Mach-II project:

  • Develop an introductory Mach-II training program with a focus on object-oriented programming
  • Develop an advanced Mach-II training program
  • Release core framework CFC documentation
  • Update and create special documentation as needed
  • Continue releasing development roadmaps
  • Launch a public bug tracking system
  • Improve the process for users to provide feedback to the Mach-II team
  • Extend and enhance the Mach-II framework through continued releases
  • Develop a technical support program and offer technical support to users

Read the entire post here.

Example Mach-II 1.5/ColdSpring application

Last night I wrote a little application for recording CFUG meeting attendees. Someone on the Mach-II email list was asking for an example of code that would populate a select dropdown list with records retrieved from Gateway objects by way of a Service layer, and I offered this application as an example. If anyone is interested, the code can be downloaded at the link below and is bundled with both the Mach-II framework and ColdSpring.
From the Home page of the example:
This is a sample Mach-II 1.5 /ColdSpring application whose purpose is to
record meeting attendance of CFUG members in order to make each attendance
record a virtual raffle ticket for our semi-annual software raffle.

Considering that this application shows some techniques working with Mach-II,
ColdSpring, and an OO data model using Service objects talking to
Bean/DAO/Gateway objects, I am releasing it as a sample application. It
should be noted that there may be certain practices in this application which
could be debated to no end, such as passing arguments from Listeners to
Services using ‘argumentCollection’. In a stricter environment, it might be
wise to explicitly name your arguments so that you have a better visual
handle on the passing of data.

Additionally, you may notice that my beans need to have a service in order to
exist. There are many people who would probably disagree with this approach,
but doing this is what allows us to neatly have child
queries/arrays/iterators, which you can see the usage of on the ListMembers
event. As a rule in this particular model, a Foo.cfc will always depend on a
FooService.cfc. Take a look at the bottom of the Service cfcs to see how
these child relationships are managed. This is a technique that we use in our
applications that work quite well for us.

This application was really just written for my own use. Usability wasn’t a
terribly high priority, but hopefully it will serve as an example for tying
several concepts together. If you have any
questions/suggestions/complaints/insults about this application, feel free to
post them to the Mach-II email list and I will do my best to respond there.

Railo RC 2.0 is released and WOW!

The Railo team has announced the release of its 2.0 release candidate, which brings them up to CFMX7 compatibility regarding tags/functions, with a few inconsequential (to us!) exceptions.  Coincidentally the past few days, Aaron and I have been playing with setting up Apache webserver using the jk_mod connector to Tomcat.  Using this setup we have been swapping in all the different CFML processing engines and playing with them as we work on the next big release of InstantSpot.

This morning I took a sandbox app that I have set up, which uses a basic Mach-II 1.5 application with ColdSpring which we are using to wire together our concrete data model.  I have a sample event that trees through several levels of child relationships, and outputs/dumps information along the way.

In ColdFusion, this event has been taking about 650ms with debugging turned off.  I dropped that same code into my Railo 2.0 instance this morning and after the initial load of the application, that same event ran in 42ms!!!! Even when I turned debugging on it ran in under 100ms.  With that kind of performance gain, it would be silly not to consider using Railo in our future.

If you are interested, I am pasting the text of the Railo 2.0 announcement from Michael Streit that was sent to the Railo email list:

Railo RC is avaiable for download at
Fixed many bugs and also done some performance issues.

we have add some cf 8 features
- add support for ‘onMissingMethod’ to Components
- add support for attribute “statuscode” to tag location

and a particular support for the coldfusion.runtime.ServiceFactory (experimental) and other coldfusion.* specific classes (more to come)
- add Wrapper class coldfusion.runtime.JavaProxy
- add particular support for coldfusion.runtime.ServiceFactory -> coldfusion.server.DataSourceService (experimental)

tnx for all your inputs Michael

fixes for
- fixed Bug in FileHandling “BOM (Byte Order Mask) will not be removed in any case”
- change default date parsing from simple do advanced parser except in comparsion
- fixed bug FileResource “Opening Stream of a none existing Resource on win32″
- fixed bug in HTTP/FTP ResourcePath Util “cant handle path with no path”
- fixed bug in java reflector “cant cast content of one array to a other”
- fixed bug in caster “can not cast calendar to date object”
- fixed bug in tag directory “railo does not ignore invalid input for attribute sort”
- add support for “Lazy Serializer” to Struct and Array Object for method “toString()”
- change return value of method iterator from Array Object from a key Iteration to a value iteration (similar to java.util.List Object)
- add Wrapper class coldfusion.runtime.JavaProxy
- fixed bug in Application.cfc handling “only allow named argument with name ‘targetPage’”
- fixed bug in error template error.cfm “error template does not check if errorcode exists”
- add support for implizit casting from String to Resource
- add support for “cfdocument” scope to tag “cfdocument”
- fixed bug in tag http “can no read quoted charset definition from response”
- fixed bug in tag http “post with enctype ‘application/x-www-form-urlencoded’ (multipart=false) has a invalid ‘Content-Type’ Header Entry”
- fixed bug in tag http “query string part of value from attribute url should not be encodedgcal1″
- fixed bug in handling of the applicatin.cfc “cfc throws a exception when using tag cfabort”
- fixed “bug” in tag function “when abort execution of function body with tag abort, “output” attribute value “false” should be ignored”
- fixed bug in tag queryparam “sql date date does not accept null valus (empty string)”
- fixed bug in tag logout “tag does not remove session value”
- fixed bug in Application.cfc handling “onApplicationStart is called when the first time the application Scope is invoke by the code”
- fixed bug in Application.cfc handling “when onApplicationStart return false the execution of the page does not stop”
- fixed bug in tag procparam “attribute maxlength and scale is of invalid type (int instead of double)”
- fixed bug in tag lock “tag does not run without scope or name attribute”
- fixed bug in tag query “cant handle multiple resultsets, if first is a update”
- fixed bug in tag query “attribute result produce a NullPointerxception when query does not return a result”
- add support for conversion of array to “java.util.Vector” (CFMX Array Type)
- add support for conversion of struct to “java.util.Hashtable” (CFMX Struct Type)
- add possibility to change general read/write access to tag admin (Web Administrator)
- add support for node objects to Comparator
- fixed bug in tag loop-index “works with integer instead of double value”
- fixed bug in components “super components has no acccess on the members of its children”
- fixed bug in components “instaneof not work properly in the components constructor”
- fixed bug in tag select “attribute multiple has invalid tld definition (type boolean instead of string)”
- fixed bug in java reflection “selection of right constructor can fail when there are more than 1 constructor”
- fixed bug in tag query “QOQ loose typing in case of union selects”
- add support for attribute “statuscode” to tag location
- extend debugging-comment template
- extend debugging-neo template
- fixed bug in tag form “attribute method allows only lower case inputs”
- fixed bug in debugging template “missing cgi.context_path for in img source”
- add support for ‘onMissingMethod’ to Components
- fixed bug in function javacast “type ‘null’ is not supported”
- add particular support for coldfusion.runtime.ServiceFactory -> coldfusion.server.DataSourceService (experimental)

- fixed bug in tag file-upload “attribute ‘filefield’ does not accept form field value as input (fileField = “”)”“,1] ); //–>
- fixed bug in Component Body “code in body can access callers local scope”
- fixed bug in web administrator “can not create archive when language is english”
- fixed bug in server administator “can not set init password”
- fixed bug in tag query “if username is a empty string, admin defaults username should be used”
- fixed bug in bytecode writer “return operation does not handle finally block the right way”
- fixed bug in Webservice Client “conflict in handling timezones of remote date objects”

Flood pictures from Lake Texoma 4th of July 2007

I took my family up to Lake Texoma over the past couple days where both my brother and my parents have cabins right on the water in the Texins Club, which is mostly made up of current and former TI employees and Family.  As of this today, the water is 22 feet above normal and my brother’s cabin is actually now *in* the water, which has been rising 1″ hour for the past week with no sign of relief in the near future.   The full set of pictures is available here, but since you are already here, I will post a couple of notable pictures:

The baseball diamond there in the park.

Steps leading up to my brother’s cabin.  There is usually a nice green yard between the porch and the water.

Same porch the next morning.  Notice the steps are gone.

The neighbor’s porch swing.

In case there was any question…

Usability – It’s not just for websites!

As a web developer, usability is something that we consider on a daily basis.  When it comes to functionality that has become a standard, we don’t jack with it!  For instance, we have long established that when you mouseover a link the cursor turns into a pointy finger.  Can we alter that?  Sure!  But people would be confused and would likely miss some content in your application.  See that navigation bar at the top of my page?  I could easily move to align with the bottom of my site, but the result would lead to more confusion.

This leads me to a mini-rant about my new phone.  A couple weeks ago I dropped my LG phone one too many times.  It seemed to always think I had a headset plugged in, although I have never actually owned a phone headset.  In addition, when I turned it on, it would randomly call my Mom and Dad.  That one I still can’t figure out!

So, being a generally cheap guy, I stopped by the Cingular store to pick up the the next-to-the-bottom-line model for about 60 bucks and was on my way without paying too much attention.    After unwrapping it and charging for the first time, I discovered something that baffles me.  Check out this keypad!

Sony Ericsson flip phone keypad

What genius thought it would be a good idea to design the keys like that?  After about 35 years of a consistent and well-defined pattern of telephone keypads, Sony/Ericsson decided it would be a good idea to alter that by offsetting the middle column.   This serves no functional purpose either.  You can see they could have quite easily shifted the middle column of buttons up so that they would be aligned.  I am sure my fingers will get used to it, but dialing without looking at my fingers presents a new challenge.  I suppose that is one of the costs of being cheap.  :)