Compound Theory

v2.0

Categories

  1. Transfer
  2. ColdFusion
  3. JRuby
  4. Java
  5. ColdSpring
  6. Squabble
  7. JavaLoader
  8. ColdDoc
  9. 2ddu
  10. AsyncHTTP
  11. OO Analysis and Design
  12. Flex
  13. Railo
  14. XML / XSL
  15. Hibernate
  16. ColdFusion Builder
  17. Fall
  18. Ubuntu
  19. XHTML / CSS
  20. Eclipse
  21. Git
  22. Oracle Database
  23. Usability / UI Design
  24. webDU
  25. cf.Objective()
  26. LWJGL
  27. cf.Objective(ANZ)
  28. Captcha
  29. MAX
  30. Melbourne CFUG
  31. Martial Arts
  32. Random Things
  33. Conduit

Recent Posts

Projects

Recent Comments

27 March 2007 03:46 PM 3 Comments

webDU 2007 Post Mortem

I figured it was about time I made some comments on webDU now that the dust has settled (and I'm finally over the gastro I've had all week, including at the conference).

Overall, I have to say I have an absolute blast, and it was brilliant to put some real faces to people who were just names on a mail list, IM or irc chat room.

There is a huge amount of kudos that needs to go to Geoff, Julie and the rest of the Daemon team for putting on webDU, it was well organised, professional, and not to mention a whole lot of fun.

The only criticism on the conference was that with the Flex heavy presentations, there seemed to be a fair amount of overlap in terms of content covered.  I went to a few Flex presentations, and many of them covered that very beginning level of introduction into Flex.  While I am not a Flex user by any means, I like to keep my eye on the Flex space, and was often looking for something more than just another 'here is how to say 'Hello World' in Flex', especially when the title of the presentation lends itself to make you believe it is something more.

Otherwise, the presentations where very good, and on the whole insightful.  My favourites included the Keynote: Flash Bang, Apollo, FarCry 4.0: The Application Framework, Seeding, Developing and Growing an online Community, and Using the IM gateway in ColdFusion .

I felt that my Transfer presentation went very well, although I'm still not sure how I managed to get through all 39 slides in just over half an hour without someone telling me to speak slower ;o).  I did have to laugh when I got the webDU booklet and my presentation slides took up something like 4 or 5 pages, compared to other presenters usual 2 or 3.

Speaking to people after the session, the feedback was generally positive, and people seemed to have walked away feeling like they had learnt something.  Mind you, if anyone has any extra feedback they wish to give me on the presentation, I'm all ears, so fire away. I'm always looking to do a better job.

Charlie Arehart and I did a BOF: ColdFusion Componentry session together, which, in all honestly, I didn't think anyone would show up to, being 8am after the night of the banquet.  But people did, and we had a good chat about Object Oriented development, from a variety of angles.  I apologise if I wasn't making any sense, as I may have possibly had my fair share of the Microsoft tab at the bar the night before.

Speaking of which, the Banquet was great as well, including the Kath and Kim impersonators.  I think the most enjoyable part was watching the American visitors try and work out who Kath and Kim were. ;o)

The drinks at the bar after the banquet were also lots of fun, but I am wondering where everyone went around 11pm.  It seemed like the place was packed, and then suddenly it was empty.  Go figure.  I did get a definite giggle out of a Microsoft representative asking me why I didn't program in .Net.  All I know is that at around 2am they kicked us out, so I ended up going back to my room to crash.

The definite highlight of the whole thing, I have to say, was the people.  It was such a good opportunity to run around and actually physically talk to a variety of people who worked with Adobe technologies.  (Especially to one guy who couldn't quite believe that I thought manipulating a huge amount of financial data was really cool... I didn't really care about the Flex part).  To those of you I talked to, and there were way to many to mention, was great to chat to you all, and I'm glad to have (finally?) met you.

A brilliant conference, and I hope that those of you who didn't come, will show up next year, and those that I met this year, I will see again.
25 March 2007 02:09 PM 0 Comments

RSS Feeds now Aggregating

Nope, you're not going crazy, I have some posts that weren't showing up on aggregates.  This was because my RSS feeds were being compressed by the web server they were on, and coming back as a weird Content Type.  That's all been fixed, so you should now see all my posts as per usual.

Compound Theory will now continue its usual broadcasts...
22 March 2007 08:22 AM 0 Comments

WebDU, Day One

webDU has been off to a great start!  The national Adobe user group meeting was an absolute blast, and I had a great time last night chatting to Jeff Coughlin last night when we went for dinner at 10:30 in the evening.

In case anyone has no idea what I look like - look for the guy in the Black Autobots t-shirt.  You can't miss me ;o) So if you see me, feel free to say Hi!

I'm off to partake in some breakfast.
21 March 2007 12:50 PM 2 Comments

Transfer 0.6.3 RC1 is Released

Wow. I have been pushing like crazy the next release of Transfer finished before I fly out for webDU, and I actually made it.  I leave this afternoon for Sydney at 4:00pm, so I am cutting it fine.

This release has 2 great new features, as well as several critical bug fixes, not to mention a greatly expanded documentation, including a new Overview and FAQ.

Rather than try and explain these features all over again, I'm simply going to show off some of the Overview and FAQ:

From the Overview Section:

Transfer Query Language 

There is also a scripting language that allows you to perform database queries based on the information and naming scheme that you set up in your transfer configuration file called Transfer Query Language (TQL).  TQL is very similar to SQL, however since Transfer already knows about the relationships in your system, you don't have to write as much code to perform complicated queries against your database.

For example,  if we wanted to perform a query to list all Posts in my Blog System, with their Author, and all the Categories they belonged to, ordered by the post date we would write this in TQL:

<cfsavecontent variable="tql">
    from
    post.Post as Post
        join system.Category
            join user.User
    order by
        Post.dateTime desc
</cfsavecontent>

And then we would create a Transfer Query Object by passing the TQL to transfer.createQuery(), and then create the actual query we need by passing the Transfer Query Object to transfer.listByQuery(), as in the example below.

<cfscript>
    query = transfer.createQuery(tql);
    qPosts = transfer.listByQuery(query);
</cfscript>

Since Transfer already has the relationships between the Post, Category and User, it can intelligently create the SQL joins for you!  Saving you even more time!

There's another Database Management Method you can use with TQL besides transfer.listByQuery(), and that's transfer.readByQuery(). readByQuery returns a Transfer Object, whereas listByQuery() returns a query. readByQuery() requires TQL that will return only "one row" - if more than one row is returned, an exception is thrown - and it also requires that you specify the class, like all the otherreadBy* methods.

Basically, readByQuery() is a way to create a Transfer Object when you don't want to use the primary key, but specify some other condition that will return only one record.

For more information on these Transfer methods, see Using The Data Management Methods .

From the FAQ:

How do I inject dependencies into a TransferObject?

To inject dependencies into a TransferObject, the 'afterNew' event must be used.  

To register an Observer for the afterNew event:

observer = createObject("component", "InjectorObserver").init(); 

getTransfer().addAfterNewObserver(observer);

The observer must have a method on it that looks like, which is run when the event is fired:

<cffunction name="actionAfterNewTransferEvent" hint="Do something on the new object" access="public" returntype="void" output="false">
    <cfargument name="event" hint="" type="transfer.com.events.TransferEvent" required="Yes">
    <!--- do stuff here --->
</cffunction>

The event is then fired *after* the TransferObject is init()'d and the configure() method is run.

So if you now want to inject something into a TransferObject, you will need to write a setter/getter on it - and you can do it something like this: 

<cffunction name="actionAfterNewTransferEvent" hint="Do something on the new object" access="public" returntype="void" output="false">
    <cfargument name="event" hint="" type="transfer.com.events.TransferEvent" required="Yes">
    <cfif arguments.event.getTransferObject().getClassName() eq "user.User">
         <cfset arguments.event.getTransferObject().setService(getService()) />
    </cfif>
</cffunction>

A <cfcase> statement could be used instead of an <cfif> depending on your needs.

You could put this event directly on a Factory of some description if you  wanted to, or have it on a specific object whose only task is to inject new
TransferObjects with dependencies, depending on your application design.

Full changelog.

A *HUGE* amount of thanks to Nando, Jaime Metcher, and Aaron Roberson for all the hard work they put into the documentation.  It was greatly appreciated.

You may have also noticed a skip in version numbers.  It's okay, you're not going totally crazy.  That was just a decision that I made, to evenly space out all the major feature releases between 0.6.1 and 0.7.

So now the release road map looks like:

0.6.3 : TQL
0.6.6 : Composite Keys
0.6.9 : Soft Deletes
0.7 : All the other small pieces I wanted to fit into 0.7

It also gives me some wiggle room in case I need/want to do a maintenance release between.

Now, I'm off to webDU, and if you are attending, I hope you come and hear me speak!

You can download Transfer from here.
17 March 2007 05:23 PM 0 Comments

Interview on Transfer, ORMs, and cf.Objective() 2007

I did a quick interview via IM with Judith Dinowitz on travelling over to the USA for cf.Objective() 2007, and the talks I'll be doing on Transfer, and some of the new features that Transfer will have in the next release.  If you want to have a read, check it over here.

Travelling to cf.Objective() this year is going to be so much fun, I can't tell you how excited I am to finally meet a whole heap of people that I've only ever known online, not to mention all the great presentations.  Definitely well worth the over 24 hours of travel that I have to do to get to Minneapolis.
05 March 2007 12:42 PM 0 Comments

Damon Gentry Blogs Transfer

Damon Gentry has started blogging about Transfer over at his website www.dagen.net.

He's done three articles so far as he logs his journey with Transfer, and it is a very interesting read as he learns about the framework.

So, if you are interested in Transfer, or are looking to learn something new, have a look at Dan's blog, it's got some good content.