Check it out for yourself:
http://css-tricks.com/show-
I tend to focus on development topics of late. Specifically ColdFusion, Coldbox Framework, SQL Server and Eclipse. (And now Transfer ORM, too.)

So I've been on the Trillian Astra (multi-service instant messenger program) beta for some time now. I totally love it and can't wait for it to go to production so I can pay these guys for their great work.
I just discovered a nifty feature today by accident and wanted to share. Typically, I use the custom hotkeys to show and hide the contact list, then double click the contact I want to IM with.
You can, however, drag individual names or entire groups out of the contact list and drop it, and it will create an always-on-top mini list. I tend to only IM about three people most of the time, so it fits quite nicely hovering in the corner!

Way to go Trillian!
observerAfterNew,
observerBeforeCreate,
observerAfterCreate,
observerBeforeUpdate,
observerAfterUpdate,
observerBeforeDelete,
observerAfterDelete
arguments.event.getTransferObject()
arguments.event.getTransferObject().getClassName()
<cfif arguments.event.getTransferObject().getClassName() IS "media.Media">
<cfset arguments.event.getTransferObject().deleteMyFiles()/>
</cfif>
<cffunction name="actionBeforeDeleteTransferEvent" returntype="void" access="public" output="false" hint="I am called BEFORE a Transfer object has been deleted from the database.">
<cfargument name="event" type="transfer.com.events.TransferEvent" hint="The event object" required="true" />
<cfset var stLocal = structNew() />
<cfif structKeyExists(arguments.event.getTransferObject(), "observerBeforeDelete")>
<cfset arguments.event.getTransferObject().observerBeforeDelete() />
</cfif>
</cffunction>
<cffunction name="createVendorTypeA" access="public" output="false" returntype="com.model.vendorTypeA.vendorTypeA">
<cfargument name="vendorTypeID_A" type="numeric" required="true" />
<cfargument name="vendorTypeA" type="string" required="false" />
<cfargument name="isActive" type="boolean" required="false" />
<cfset var vendorTypeA = createObject("component","com.model.vendorTypeA.vendorTypeA").init(argumentCollection=arguments) />
<cfreturn vendorTypeA />
</cffunction>
<cfset var vendorTypeA_obj= createObject("component","com.model.vendorTypeA.vendorTypeA").init(argumentCollection=arguments) />
<cfreturn vendorTypeA_obj />
In my ColdSpring's XML config file, I had attempted to place the following:
However, this only resulted in a query error along the lines of a datasource not being found with a name of "#APPLICATION.dbName#".<bean id="oDatabase" class="com.oDatabase" >
<constructor-arg name="dbDatasource">
<value>#APPLICATION.dbName#</value>
</constructor-arg>
<constructor-arg name="dbUser">
<value>#APPLICATION.dbUser#</value>
</constructor-arg>
<constructor-arg name="dbPass">
<value>#APPLICATION.dbPass#</value>
</constructor-arg>
</bean>
Perhaps my solution to my need is not the best way, since I modified ColdSpring files directly. Perhaps there is even another way, but a couple hours of searching did not reveal the answer to me. I thought "there has to be a way to tell CS to evaluate the XML value entry instead of just seeing it as a literal string."
I opened DefaultXMLBeanFactory.cfc in the /coldspring/beans/ directory and modified the "constructBean" function. There are two places you'll find this line, one in a regular bean function setup, I believe, and the other specifically for init() functions.<cfinvokeargument name="#argDefs[arg].getArgumentName()#" value="#argDefs[arg].getValue()#"/>I replaced that line with this block:
<cfset VARIABLES.csTempEval = argDefs[arg].getValue() />In my ColdSpring XML config file, I changed the section above to look like this:
<cfif FindNoCase("~~~", VARIABLES.csTempEval) GT 0>
<cfset VARIABLES.csTempEval = mid(VARIABLES.csTempEval, 4, 999999) />
<cfset VARIABLES.csTempEval = Evaluate(VARIABLES.csTempEval) />
</cfif>
<cfinvokeargument name="#argDefs[arg].getArgumentName()#" value="#VARIABLES.csTempEval#"/>
<bean id="oDatabase" class="com.oDatabase" >Voila! Now my ColdSpring dynamically evaluates APPLICATION.dbName instead of trying to use it as a literal. It will only do this is the tag has the three tildes (~~~) at the front. Obviously, you can modify it to do it with any character combination you find more appealing. I would avoid anything too crazy, or anything you might actually want as a true value down the road. I considered having the changes look for anything beginning and ending with "#" characters but that would eliminate the ability for more complex combinations, if needed, such as "myTest_v#APPLICATION.version#" where it evaluates to "myTest_v01" or similar.
<constructor-arg name="dbDatasource">
<value>~~~#APPLICATION.dbName#</value>
</constructor-arg>
<constructor-arg name="dbUser">
<value>~~~#APPLICATION.dbUser#</value>
</constructor-arg>
<constructor-arg name="dbPass">
<value>~~~#APPLICATION.dbPass#</value>
</constructor-arg>
</bean>
If anyone out there knows of a more ColdSpring acceptable way (that I was unable to find), please let me know. Of course, I made a backup of the original CFC in the event that someone brings it to my attention!
"The system has attempted to use an undefined value, which usually indicates a programming error, either in your code or some system code. Null Pointers are another name for undefined values."After my initial bafflement, it occurred to me that the problem wasn't where it was saying it was, in a call to the CFC, but rather in the CFC function itself. I had specified a function returntype of "numeric", but had neglected to setup to return anything at all. Even when I modified the call to the function to not accept a return, as in:
