Compound Theory

v2.0

Categories

  1. Transfer
  2. ColdFusion
  3. Java
  4. ColdSpring
  5. Conduit
  6. JavaLoader
  7. ColdDoc
  8. AsyncHTTP
  9. OO Analysis and Design
  10. Flex
  11. Railo
  12. XML / XSL
  13. XHTML / CSS
  14. Ubuntu
  15. Eclipse
  16. Oracle Database
  17. Usability / UI Design
  18. cf.Objective()
  19. webDU
  20. cf.Objective(ANZ)
  21. Captcha
  22. Melbourne CFUG
  23. Martial Arts
  24. Random Things

Recent Posts

Projects

Instant Message

Instantly grab my attention...

Recent Comments

09 June 2009 09:18 AM 0 Comments

Melbourne Coldfusion 9 and FLEX 4 Usergroup Tour

I just wanted to make sure that everyone was aware of the Melbourne leg of the ColdFusion 9 and Flex 4 Usergroup Tour, on June 17th.

Adobe ColdFusion 9

The Adobe ColdFusion team is hitting the road to discuss Centaur, the next version of ColdFusion, and Bolt - code name for the highly anticipated first ColdFusion IDE from Adobe.  Learn about exciting new features and discover how Centaur and Bolt will accelerate your ColdFusion application development. Visit the tour calendar http://bit.ly/UGTour09 to find a stop near you!

Flex 4 / Flash Catalyst

Come learn about the newest features in the Flex 4 framework, Flex Builder 4 and the newest Adobe product -- Flash Catalyst. See product feature demos, and learn how the new Flex framework powers both Flash Catalyst and Flex Builder to speed the development and testing of rich Internet applications and content.

More details and RSVP can be found here .

Hope to see you there!

 

ColdSpring News, CFConversations RoundTable and other cf.Objective() tidbits

While I am recovering from the Australian WebDU conference, a few days before that started I got off a plane after the end of the wonderful cf.Objective() conference.

I have to say, this year's cfObjective() was the best organised out of all the years I have been to.  As per usual, the content was stellar, the hotel was lovely, and it was an absolute pleasure to catch up with everyone at the conference.  I have to give a big 'congratulations' to Jared, Steven, Jim and the rest of the cf.Objective() crew for putting together such a smooth and professional conference.

I had the pleasure of doing two sessions, Rapid OO Development with ColdFusion Frameworks, which covered a variety of techniques on how to increase your development speed when building OO models, and I was very happy to see that it seemed to have been very well received.  I had one attendee let me know that 'Now I know why I'm using ColdSpring! I was using it before, but now I know why', which is an amazing thing to hear as a presenter, that you've managed to create an 'Aha!' moment for someone.

I also did my Introduction to Building Applications with Transfer ORM, which was a repeat of the session that I did last year.  Unfortunately Ray Camden couldn't make it to do his Transfer session, so I was called in at the last minute to take his place.

The big news that we announced at cf.Objective(), is that I will now be the lead developer on the ColdSpring project.  Since Chris Scott's major focus these days is the Swiz Flex framework, he decided it was time to pass on the reigns, and since I tend to talk to him regularly about Cold/Spring, have contributed code to ColdSpring , and know about running an Open Source project, he seemed to think I would be a good fit.  I'm pretty excited about the opportunity, and have discussed some great ideas with theColdSpring development group, of which Chris is going to stay on as lead architect.  I expect we will start off by building the infrastructure around the project, e.g. a centralised wiki, ticket tracker etc, and then move on to some more interesting items.

The obvious question there is, of course, what does this mean for Transfer? (I think I need to start writing down how many times I've been asked if it's 'Dead'.  Does anyone actually expect a 'yes' for an answer?), and quite frankly, I don't see this impacting on Transfer much at all, simply because this is going to be code that I would have probably ended up writing on ColdSpring anyway, but it is now a more formalised relationship.  When I run into a feature or a bug on an Open Source project, that I want to be implemented, my first natural reaction is to start looking into the code, and writing the feature.  This was first exemplified by my contribution toColdSpring of annotation based pointcuts.  There are several aspects of ColdSpring I wanted to improve on, so it was just a natural reaction for me to end up writing code for it.

As stated, the content at cf.Objective() was brilliant as per usual, with my own personal highlights being, Advanced ColdFusion Server Administration (Adam Lehman), Advanced ColdFusion 9 ORM (Terry Ryan) and ColdFusion Portlets (Adam Haskell).

Thinking about the content, I have a little confession to make, that I realised on the way back from cf.Objective() this year.  I have a tendency to go to the wrong sessions when at a conference. This may sound like a weird thing, but I realised the last few years I tend to go to sessions that I already know a lot about, just to see if they say something a little bit extra that I can add to my knowledge base.  Quite often I end up walking out feeling like I haven't added much to my repertoire.  Really what I should be doing is going (mostly) to sessions in which I know absolutely nothing about, which means I actually get the best return on the my investment in the conference.  While it may not be specifically applicable to what I'm currently doing, at the very least it will inspire me to do some interesting new things, and may give me some knowledge that I can then apply at some point in the future.  This is a philosophy I plan on applying to all future conferences that I attend.

Finally, I also had the opportunity to be part of a CFConversations round-table on the second night of the conference.  Brian Meloche, Andy Powell, Andy Matthews and I had a really good chat about the conference in general, our thoughts on some of Adobe's upcoming products, various other topics relating to ColdFusion.  It was lots of fun to do, and you can download and/or read more about it here.

Again, thanks to all the cf.Objective() crew, and look forward to seeing many of you again at cf.Objective(ANZ).
06 May 2009 04:14 PM 0 Comments

ColdFusion & Flex Data Transformations with Conduit Filters

Previously I discuss a simple mechanism in Conduit to enable you to apply data transformations on outgoing data from ColdFusion to Flex, using a simple inheritance strategy, to overwrite how the CFC=>Flex VO object translation occurred.

The only issue there is, if you need to be able to do different transformations, you end up having to combine separate code-bases into a single CFDeserialiser or CFSerialiser , which is not very portable, or decoupled.

To solve this problem, Conduit has filters that can be applied at different points in the AMF communication life cycle, and manipulate the data that is being passed through.

So, if we take the example we looked at previously, where we reversed every simple value that was travelling from ColdFusion to Flex, we can convert this into a simple filter, which is much easier to apply, and can be combined with other filters to do fairly complex data manipulation.

An example ReverseFilter looks like this:

<cfcomponent hint="filter that reverses all strings" output="false">

<cffunction name="init" hint="Constructor" access="public" returntype="ReverseFilter" output="false">
    <cfargument name="args" hint="the argument ConfigMap" type="struct" required="Yes">
    <cfscript>
        return this;
    </cfscript>
</cffunction>

<cffunction name="doFilter" hint="does the filtering - reverses strings" access="public" returntype="void" output="false">
    <cfargument name="filterData" hint="the data for the filter" type="struct" required="Yes">
    <cfargument name="filterChain" hint="the filter chain" type="conduit.core.filter.FilterChain" required="Yes">

    <cfscript>
        >//we know there will be a 'result', in the after filter
        if(isSimplevalue(arguments.filterData.result))
        {
            arguments.filterData.result = Reverse(arguments.filterData.result);
        }

        >//push on to the next filter
        arguments.filterChain.next();
    </cfscript>
</cffunction>

</cfcomponent>

The doFilter() method is the method that manipulates the incoming data, in this case, looking at the 'result' argument that is being passed in, and if it's a simple value, reversing it.

The Filter is then passed on to any subsequent filters, by calling the next() method on the filterChain.  If we didn't want filtering to continue, we could simply skip that step.

We then configure this ReverseFilter against the CFSerialiser, to convert outgoing data that is going to Flex, like so:

<destination id="Conduit">
     <channels>
        <channel ref="my-cfamf" />
     </channels>
     <adapter ref="conduit" />
     <properties>
         <source>*</source>
         <cfcs>
             <!--- cfc config --->
         </cfcs>         
         <filters>
            <!-- This is an example filter that reverses strings -->        
            <filter>
                <path>conduit.core.filter.example.ReverseFilter</path>
                <apply-after>serialiser</apply-after>
             </filter>
        </filters>
    </properties>
</destination>

The 'apply-after' section, tells Conduit to fire the ReverseFilter after the processing of the CFSerialiser, rather than before, although in this case, it won't make that much difference.

This is just a simple example for the sort of things that can be done with Conduit Filters, but it should give you a good idea on how with a few simple filters, you can drastically change the way data is sent to and from Flex and ColdFusion.

If you want to read more about Conduit, please have a look at the wiki, and daily builds can be downloaded from the google group.

03 April 2009 08:58 AM 0 Comments

cfObjective(ANZ) - Call for speakers

Several days ago, cf.Objective(ANZ) put out a call for speakers.

For those who have missed the announcements, cf.Objective(ANZ), is bringing the famous cf.Objective() conference to Melbourne Australia. 

To steal some of the copy straight from the website:

Topics we're looking for fit into (but are not limited to) the following major categories:

Architecture and Design:
OOP, Design Patterns, Frameworks, Modeling, Refactoring Legacy Apps, Persistence etc.
RIA:
LC DS and CF, Ajax/Flex with CF, BlazeDS and CF etc.
Process and Methodology:
Agile Development, SOA, Managing large CF architectures, Debugging and Metrics etc.
Integration and Testing:
CF and Java, Build and Deployment processes, Server tuning, Unit Testing etc.

Please let us know by April 24 2009 if you're interested by emailing speakers@cfobjective.com.au with a short blurb about yourself and the topics you'd be interested in presenting on.

cf.Objective(ANZ) will provide speaker accommodation for the night of the 12th to the 13th of November 2009 at the conference venue (Renaissance Hotel in Melbourne). At this stage we unfortunately can't provide any further financial assistance with travel cost or other expenses.

So if you wish to speak, or if you wish to hear about a particular topic, please feel free to send an email to the above address to let people know.

If you want to know more, you can check out the website , sign up to the website, and also follow the twitter feed !

Hope to see you all there!

 

Coming to speak at cf.Objective()!

As per usual, I'm late with my announcement that I will speaking at cf.Objective() again this year.  It is actually really interesting to see the schedule contain so many sessions that cover OO concepts, and specifically, how to use common tools and development practices to make OO development in a web application context so much easier, better and faster.


This is obviously a real trend in the ColdFusion thoughtscape, with sessions like:
  • Introduction to OO Modeling and Design - Brian Kotek
  • Taking Code Reuse to a Higher Level - Jeff Chastian
  • Building an Object Oriented Model - Bob Silverberg
  • RAD OO in Code - Peter Bell
  • Atomic Reactor - Mark Drew
  • Leveraging Basic Object Oriented Concepts and Design Patterns in ColdFusion - Phill Nacelli
  • What to do When OO Fails you in ColdFusion - Brian Meloche
  • The Best of Both Worlds: Java Backends with CFML Frontends - Matt Woodward
  • Object Relational Mapping with ColdFusion - Jason Delmore
  • An Object Oriented Approach to Validations - Bob Silverberg
  • Leveraging Enterprise Open-Source Java in ColdFusion - Joe Rinehart
..and of course, my very own Rapid OO Development with ColdFusion Frameworks.

If you are looking to do, or already are doing Object Oriented development in ColdFusion, this is quite obviously the place to be!

In my Rapid OO talk, we are going to take a completely manually written OO model, including persistence to the database, and slowly strip parts of the code away, replacing them with a combination of ColdFusion Frameworks and custom generic code, to give you some new tools in your 'OO Development tool-belt', that you can then go away and play with, and hopefully include in your day to day development practices.

Look forward to seeing you all there!