<?xml version="1.0" encoding="utf-8"?>
			
			<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://web.resource.org/cc/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">

			<channel>
			<title>Mike Nimer&apos;s Blog - ColdFusion</title>
			<link>http://blog.mikenimer.com/index.cfm</link>
			<description>Random posting about Flex, ColdFusion, Travel, Java, and anything else I can think of. Follow me on twitter @mnimer.</description>
			<language>en-us</language>
			<pubDate>Tue, 07 Sep 2010 11:50:04 -0400</pubDate>
			<lastBuildDate>Thu, 01 Jul 2010 21:23:00 -0400</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>mikenimer@yahoo.com</managingEditor>
			<webMaster>mikenimer@yahoo.com</webMaster>
			<itunes:subtitle></itunes:subtitle>
			<itunes:summary></itunes:summary>
			<itunes:category text="Technology" />
			<itunes:category text="Technology">
				<itunes:category text="Podcasting" />
			</itunes:category>
			<itunes:category text="Technology">
				<itunes:category text="Tech News" />
			</itunes:category>
			<itunes:keywords></itunes:keywords>
			<itunes:author></itunes:author>
			<itunes:owner>
				<itunes:email>mikenimer@yahoo.com</itunes:email>
				<itunes:name></itunes:name>
			</itunes:owner>
			<itunes:image href="" />
			<image>
				<url></url>
				<title>Mike Nimer&apos;s Blog</title>
				<link>http://blog.mikenimer.com/index.cfm</link>
			</image>
			<itunes:explicit>no</itunes:explicit>
			
			<item>
				<title>Spring MVC with ColdFusion Views</title>
				<link>http://blog.mikenimer.com/index.cfm/2010/7/1/Spring-MVC-with-ColdFusion-Views</link>
				<description>
				
				Ok CF developers, remember the matrix, is it time to take the red-pill yet?  There are a lot of frameworks in ColdFusion, and if you like them great. However if you need too, or want too, mix CF and Java wouldn&apos;t it be cool if you could use a leading Java framework with ColdFusion instead?

First, a little background. Recently I tried JSP for a side project, to see if things have changed - they haven&apos;t. JSP pages are just as painful as they always were. There is just something right about mixing one tag based language (HTML) with another tag based language (ColdFusion).  However at the same time I&apos;ve been using Spring with BlazeDS to build a lot of services for flex applications. And there is something that feels right about using java for the back-end.   So that got me thinking.. 

What I want is &lt;b&gt;CFML with Java code-behind&lt;/b&gt;. Just like how you can have MXML with ActionScript code-behind, or XAML and C#. But how? After some digging and a bit of coding what I found was a way to do it with the Spring MVC project. 

Spring MVC has some very powerful features,  but this isn&apos;t a &apos;what is SpringMVC&apos; article - so I urge you to read up on what it can do. &lt;a href=&quot;http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-introduction&quot;&gt;http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-introduction&lt;/a&gt;

However one feature I do want to talk about is the way Spring MVC forces a hard separation between the controller and the view layers allowing for multiple views driven from the same model and controller. And that is how we are going to drive CF from Spring. 

For example: Let&apos;s say you had a mapping defined as 
/userList.*

If you call &quot;/userList.cfm&quot; you will get a cfml page. But what if you want to call the same page from your mobile application and need to get back a pure JSON version of the same data used to render the html.   You could use this url &quot;/userList.json&quot;.  With Spring MVC the exact same model and contoller code will be run for both requests - only the view is different. With the *.cfm mapping Spring MVC sends the request to the ColdFusion servlet. Using the *.json mapping Spring can send the request to a custom view class  that will format the model arguments as JSON and return the results.   Technically you can configure it so , *.cfm, *.html, *asp, *.jsp extensions  all go to the same ColdFusion Servlet too (if you like to mess with your fellow developers). 

Or perhaps you want different variations of html for different platforms. 

&lt;ul&gt;
&lt;li&gt;/index.web&lt;/li&gt;
&lt;li&gt;/index.mobile&lt;/li&gt;
&lt;/ul&gt;

These can all be mapped to completely different cfm templates with different code for the different platforms (just a thought).




Ok time to talk code. How to use ColdFusion as the view-layer in a Spring MVC application.

1. Create a java controller class.  with the @Controller annotation
&lt;code&gt;
@Controller
public class LitepostController
{
}
&lt;/code&gt;


2. Add a method fo handle requests. WIth the @RequestMapping annotation. 
&lt;code&gt;
    @RequestMapping(value = &quot;/index.*&quot;)
    public ModelAndView indexHandler(HttpServletRequest request, HttpServletResponse response) throws Exception
    {
    }
&lt;/code&gt;


3. In the method, create and return a ModelAndView object. This string you define in the constructor will be the cfml template you really want to be invoked. 
&lt;code&gt;
    @RequestMapping(value = &quot;/index.*&quot;)
    public ModelAndView indexHandler(HttpServletRequest request, HttpServletResponse response) throws Exception
    {
if (request.getSession().getAttribute(&quot;user&quot;) != null)
        {
// Start the app by directing the use to a login page.
ModelAndView view = new ModelAndView(&quot;login&quot;); //invoke the login.cfm template
return view;
}

ModelAndView view = new ModelAndView(&quot;index&quot;);   //invoke the index.cfm template
view.addObject(&quot;user&quot;,   request.getSession().getAttribute(&quot;user&quot;) ); // this property will be accessible in the #request.USER# variable
return view;
    }
&lt;/code&gt;



4. Define a new Servlet in the web.xml file. Directing all /myApp/* requests to the controller above. 
&lt;code&gt;
&lt;servlet&gt;
&lt;servlet-name&gt;litepost-mvc&lt;/servlet-name&gt;
&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;
&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
&lt;/servlet&gt;

&lt;!-- Map all REST request to /requestbroker --&gt;
&lt;servlet-mapping&gt;
&lt;servlet-name&gt;litepost-mvc&lt;/servlet-name&gt;
&lt;url-pattern&gt;/myApp/*&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;
&lt;/code&gt;

5. Spring will look for an XML config file using the pattern &quot;&lt;servlet-name&gt;-servlet.xml&quot;. So we need to create file called &quot;litepost-mvc-servlet.xml&quot; 
&lt;code&gt;

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
  xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
  xmlns:context=&quot;http://www.springframework.org/schema/context&quot;
  xmlns:mvc=&quot;http://www.springframework.org/schema/mvc&quot; xmlns:util=&quot;http://www.springframework.org/schema/util&quot;
  xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd&quot;&gt;

&lt;bean class=&quot;org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping&quot;&gt;&lt;/bean&gt;
&lt;bean class=&quot;org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter&quot;&gt;&lt;/bean&gt;

&lt;bean id=&quot;litepostService&quot; class=&quot;com.mikenimer.cfspringmvc.litepost.controllers.LitepostController&quot;&gt;
&lt;/bean&gt;

&lt;bean class=&quot;org.springframework.web.servlet.view.InternalResourceViewResolver&quot;&gt;
&lt;property name=&quot;order&quot; value=&quot;1&quot;/&gt;
&lt;property name=&quot;prefix&quot; value=&quot;/litepost/cfspringmvc-inf/views/&quot;/&gt;
&lt;property name=&quot;suffix&quot; value=&quot;.cfm&quot;/&gt;
&lt;property name=&quot;viewClass&quot; value=&quot;com.mikenimer.spring.mvc.views.ColdFusionView&quot;/&gt;
&lt;/bean&gt;

&lt;/beans&gt;

&lt;/code&gt;


The trick in this file is the ViewResolver, which has 4 properties. 

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;order&lt;/b&gt; - the order it should try the &lt;/li&gt;
&lt;li&gt;&lt;b&gt;suffix&lt;/b&gt; - the extension for this view, when there are more then one view resolver to pick from&lt;/li&gt;
&lt;li&gt;&lt;b&gt;prefix&lt;/b&gt; - the real location of the cfml templates you want executed.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;viewClass&lt;/b&gt; - This is a custom view resolver I created (which you can download below). This custom class knows how to take the java model properties, returned from the controller, and put them into the ColdFusion REQUEST scope.  &lt;/li&gt;
&lt;/ul&gt;

&lt;code&gt;
&lt;bean class=&quot;org.springframework.web.servlet.view.InternalResourceViewResolver&quot;&gt;
&lt;property name=&quot;order&quot; value=&quot;1&quot;/&gt;
&lt;property name=&quot;suffix&quot; value=&quot;.cfm&quot;/&gt;
&lt;property name=&quot;prefix&quot; value=&quot;/litepost/cfspringmvc-inf/views/&quot;/&gt;
&lt;property name=&quot;viewClass&quot; value=&quot;com.mikenimer.spring.mvc.views.ColdFusionView&quot;/&gt;
&lt;/bean&gt;
&lt;/code&gt;


That&apos;s it.. Now Spring MVC controller class will process requests for   &quot;/myApp/index.cfm&quot; first, then execute the correct CFML template. And any properties you return in the ModelAndView object will be put automatically into the ColdFusion REQUEST Scope. 


And some extra java utils to go with it, yes!  In building the sample litepost application I found that I needed two simple methods to get things working right. So I create a CFJAVAUTILS object with some extra helper methods. This object will also be placed into the request scope of every request. 

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;ifNull( Object object, Object default ) &lt;/b&gt;&lt;br/&gt;
This method will take any java object an if it&apos;s null, return the default instead. For instance #request.CFJAVAUTILS.ifNull( user.getName(), &quot;&quot;)#
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;toCFArray( Collection collection ) &lt;/b&gt;&lt;br/&gt;
A lot of java objects support the Collection interface. However, ColdFusion arrays functions and loop functions have problems with them so I&apos;ve created a simple collection to vector (also known as an Array in CF). for example: #arrayLen(  request.CFJAVAUTILS.toCFArray( entry.getComments() )  )#  
&lt;/li&gt;
&lt;/ul&gt;




You want to see it in action? Ok, there is a sample application out there, called Litepost ( http://code.google.com/p/litepost/ ), which is used  to show the same application coded with different frameworks.  So I&apos;ve used this application as the sample app, so you can see a real-world application using Spring MVC, compared with other  techniques.

After you download and install the litepost application. Download my cf-spring litepost application below. To install, unzip the file and put the cfspringmvc-inf folder under the /litepost directory. Really it doesn&apos;t matter where you put it, as long as you modify the mapping in the spring config to match (and it&apos;s in a folder CF has permission to serve files from) 

I&apos;ve included the a list of jars required for this sample application to work in the WEB-INF-Config folder.  I&apos;ve also made this example java heavy - doing all of the data work with hibernate in the java layer. That is to appeal to the more java focused of you out there.  But you could use this just to control the flow of templates or take it as far as I did doing all of the data work in the java layer. 


Some other areas I&apos;m planning on exploring in future posts
&lt;ul&gt;
&lt;li&gt;Multiple View-Resolvers&lt;/li&gt;
&lt;li&gt;Integration with Spring Security&lt;/li&gt;
&lt;li&gt;Integration with the Spring Integration Bus&lt;/li&gt;
&lt;li&gt;Spring Web-Flow with CF&lt;/li&gt;
&lt;li&gt;File Uploading&lt;/li&gt;
&lt;li&gt;Sending emails&lt;/li&gt;
&lt;li&gt;Using the Spring JSP tags in a CFML template (I think this will work). &lt;/li&gt;
&lt;/ul&gt;

If anyone wants to write up a how-to on one of these, or any other examples, let me know and I&apos;ll link to them here.  Plus, I&apos;m sure some of you know spring a lot better then I do, so to get some more views on this would be great for everyone. 


Downloads:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.mikenimer.com/downloads/cfspringmvc/com.mikenimer.cfSpring.0.18.jar&quot;&gt;Custom ColdFusion Spring-MVC View&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.mikenimer.com/downloads/cfspringmvc/cfspringmvc-inf - 07-01-2010.zip&quot;&gt;CF - SpringMVC LitePost application&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>Java, SpringMVC</category>				
				
				<pubDate>Thu, 01 Jul 2010 21:23:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2010/7/1/Spring-MVC-with-ColdFusion-Views</guid>
				
			</item>
			
			<item>
				<title>Follow the MAX updates, from across the web, from your desktop</title>
				<link>http://blog.mikenimer.com/index.cfm/2009/8/25/Follow-the-MAX-updates-from-across-the-web-from-your-desktop</link>
				<description>
				
				You may of already seen the Adobe cards I created for some of the  &lt;a href=&quot;http://blog.mikenimer.com/index.cfm/2009/3/31/Adobe-nomee-cards--follow-your-favorite-technology&quot;&gt;different adobe products&lt;/a&gt;. 


Now I&apos;ve created a nomee card for all things MAX.. This card runs inside the &lt;a href=&quot;http://www.nomee.com&quot;&gt;nomee AIR application&lt;/a&gt; and monitors all of the sites on the card for updates. So when there is a new tweet, facebook post, blog post, etc..  You&apos;ll get an alert. So you know when something you care about has happened. And you can see it all merged together in the Newstream on the card. If your going to MAX you need this. 

&lt;a href=&quot;http://www.nomee.com/who-card.aspx?id=2e3bde4a-068c-de11-96f4-001cc479154c&amp;cat=technology&quot;&gt;Direct Link&lt;/a&gt;

&lt;p&gt;
&lt;div style=&apos;width:550; height:270&apos;&gt;&lt;object classid=&apos;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&apos; id=&apos;nomee&apos; width=&apos;550&apos; height=&apos;270&apos; codebase=&apos;http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab&apos;&gt;&lt;param name=&apos;movie&apos; value=&apos;http://nomee.com/live/livecardHorizontal.swf&apos; /&gt;&lt;param name=&apos;flashvars&apos; value=&apos;showFollowMe=true&amp;pid=2e3bde4a-068c-de11-96f4-001cc479154c&apos; /&gt;&lt;param name=&apos;quality&apos; value=&apos;high&apos; /&gt;&lt;param name=&apos;bgcolor&apos; value=&apos;#ffffff&apos; /&gt;&lt;param name=&apos;allowScriptAccess&apos; value=&apos;sameDomain&apos; /&gt;&lt;embed src=&apos;http://nomee.com/live/livecardHorizontal.swf&apos; flashvars=&apos;showFollowMe=true&amp;pid=2e3bde4a-068c-de11-96f4-001cc479154c&apos; quality=&apos;high&apos; bgcolor=&apos;#ffffff&apos; width=&apos;550&apos; height=&apos;270&apos; name=&apos;nomee&apos; align=&apos;middle&apos; play=&apos;true&apos; loop=&apos;false&apos; quality=&apos;high&apos; allowScriptAccess=&apos;sameDomain&apos; type=&apos;application/x-shockwave-flash&apos; pluginspage=&apos;http://www.adobe.com/go/getflashplayer&apos;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/p&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>nomee</category>				
				
				<category>AIR</category>				
				
				<category>Flex Builder and ColdFusion</category>				
				
				<category>Flex</category>				
				
				<pubDate>Tue, 25 Aug 2009 21:33:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2009/8/25/Follow-the-MAX-updates-from-across-the-web-from-your-desktop</guid>
				
			</item>
			
			<item>
				<title>Adobe nomee cards - follow your favorite adobe technology on your desktop</title>
				<link>http://blog.mikenimer.com/index.cfm/2009/3/31/Adobe-nomee-cards--follow-your-favorite-technology</link>
				<description>
				
				The other day I told you about &lt;a href=&quot;http://blog.mikenimer.com/index.cfm/2009/3/26/Do-you-nomee-or-my-new-job&quot;&gt;nomee&lt;/a&gt; and how nomee was primarily a tool to follow people not sites. However, nomee can be used to do more. So I created some public cards for the different adobe technologies. What can I say, I&apos;m a geek and I follow technology as close as I do friends and family. 

These cards monitor all of the key pages and rss feeds on adobe.com that I could find for Air, Flex, CF, LCDS, and FMS. Including the main phone numbers, product pages, support feeds, developer center articles, team blogs, and mxna feeds. All on your desktop.

These are the first cards for our &lt;a href=&quot;http://www.nomee.com/follow-nomee_newsmakers.aspx?category=technology&quot;&gt;technology section&lt;/a&gt; of public cards, &lt;a href=&quot;http://www.nomee.com/follow-nomee_newsmakers.aspx&quot;&gt;watch this page&lt;/a&gt; for more public cards. And if you have any suggestions for other public cards let me know or email us at support@nomee.com.

&lt;br/&gt;&lt;br/&gt;

&lt;div style=&apos;width:550; height:270&apos;&gt;&lt;object classid=&apos;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&apos; id=&apos;nomee&apos; width=&apos;550&apos; height=&apos;270&apos; codebase=&apos;http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab&apos;&gt;&lt;param name=&apos;movie&apos; value=&apos;http://nomee.com/live/livecardHorizontal.swf&apos; /&gt;&lt;param name=&apos;flashvars&apos; value=&apos;showFollowMe=true&amp;pid=39aaa471-4a19-de11-a83c-001cc479154c&apos; /&gt;&lt;param name=&apos;quality&apos; value=&apos;high&apos; /&gt;&lt;param name=&apos;bgcolor&apos; value=&apos;#ffffff&apos; /&gt;&lt;param name=&apos;allowScriptAccess&apos; value=&apos;sameDomain&apos; /&gt;&lt;embed src=&apos;http://nomee.com/live/livecardHorizontal.swf&apos; flashvars=&apos;showFollowMe=true&amp;pid=39aaa471-4a19-de11-a83c-001cc479154c&apos; quality=&apos;high&apos; bgcolor=&apos;#ffffff&apos; width=&apos;550&apos; height=&apos;270&apos; name=&apos;nomee&apos; align=&apos;middle&apos; play=&apos;true&apos; loop=&apos;false&apos; quality=&apos;high&apos; allowScriptAccess=&apos;sameDomain&apos; type=&apos;application/x-shockwave-flash&apos; pluginspage=&apos;http://www.adobe.com/go/getflashplayer&apos;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;

&lt;br/&gt;&lt;br/&gt;

&lt;div style=&apos;width:550; height:270&apos;&gt;&lt;object classid=&apos;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&apos; id=&apos;nomee&apos; width=&apos;550&apos; height=&apos;270&apos; codebase=&apos;http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab&apos;&gt;&lt;param name=&apos;movie&apos; value=&apos;http://nomee.com/live/livecardHorizontal.swf&apos; /&gt;&lt;param name=&apos;flashvars&apos; value=&apos;showFollowMe=true&amp;pid=4563db99-4c19-de11-a83c-001cc479154c&apos; /&gt;&lt;param name=&apos;quality&apos; value=&apos;high&apos; /&gt;&lt;param name=&apos;bgcolor&apos; value=&apos;#ffffff&apos; /&gt;&lt;param name=&apos;allowScriptAccess&apos; value=&apos;sameDomain&apos; /&gt;&lt;embed src=&apos;http://nomee.com/live/livecardHorizontal.swf&apos; flashvars=&apos;showFollowMe=true&amp;pid=4563db99-4c19-de11-a83c-001cc479154c&apos; quality=&apos;high&apos; bgcolor=&apos;#ffffff&apos; width=&apos;550&apos; height=&apos;270&apos; name=&apos;nomee&apos; align=&apos;middle&apos; play=&apos;true&apos; loop=&apos;false&apos; quality=&apos;high&apos; allowScriptAccess=&apos;sameDomain&apos; type=&apos;application/x-shockwave-flash&apos; pluginspage=&apos;http://www.adobe.com/go/getflashplayer&apos;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;

&lt;br/&gt;&lt;br/&gt;

&lt;div style=&apos;width:550; height:270&apos;&gt;&lt;object classid=&apos;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&apos; id=&apos;nomee&apos; width=&apos;550&apos; height=&apos;270&apos; codebase=&apos;http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab&apos;&gt;&lt;param name=&apos;movie&apos; value=&apos;http://nomee.com/live/livecardHorizontal.swf&apos; /&gt;&lt;param name=&apos;flashvars&apos; value=&apos;showFollowMe=true&amp;pid=ce34fc4b-8c19-de11-a83c-001cc479154c&apos; /&gt;&lt;param name=&apos;quality&apos; value=&apos;high&apos; /&gt;&lt;param name=&apos;bgcolor&apos; value=&apos;#ffffff&apos; /&gt;&lt;param name=&apos;allowScriptAccess&apos; value=&apos;sameDomain&apos; /&gt;&lt;embed src=&apos;http://nomee.com/live/livecardHorizontal.swf&apos; flashvars=&apos;showFollowMe=true&amp;pid=ce34fc4b-8c19-de11-a83c-001cc479154c&apos; quality=&apos;high&apos; bgcolor=&apos;#ffffff&apos; width=&apos;550&apos; height=&apos;270&apos; name=&apos;nomee&apos; align=&apos;middle&apos; play=&apos;true&apos; loop=&apos;false&apos; quality=&apos;high&apos; allowScriptAccess=&apos;sameDomain&apos; type=&apos;application/x-shockwave-flash&apos; pluginspage=&apos;http://www.adobe.com/go/getflashplayer&apos;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;

&lt;br/&gt;&lt;br/&gt;

&lt;div style=&apos;width:550; height:270&apos;&gt;&lt;object classid=&apos;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&apos; id=&apos;nomee&apos; width=&apos;550&apos; height=&apos;270&apos; codebase=&apos;http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab&apos;&gt;&lt;param name=&apos;movie&apos; value=&apos;http://nomee.com/live/livecardHorizontal.swf&apos; /&gt;&lt;param name=&apos;flashvars&apos; value=&apos;showFollowMe=true&amp;pid=11db7045-4f19-de11-a83c-001cc479154c&apos; /&gt;&lt;param name=&apos;quality&apos; value=&apos;high&apos; /&gt;&lt;param name=&apos;bgcolor&apos; value=&apos;#ffffff&apos; /&gt;&lt;param name=&apos;allowScriptAccess&apos; value=&apos;sameDomain&apos; /&gt;&lt;embed src=&apos;http://nomee.com/live/livecardHorizontal.swf&apos; flashvars=&apos;showFollowMe=true&amp;pid=11db7045-4f19-de11-a83c-001cc479154c&apos; quality=&apos;high&apos; bgcolor=&apos;#ffffff&apos; width=&apos;550&apos; height=&apos;270&apos; name=&apos;nomee&apos; align=&apos;middle&apos; play=&apos;true&apos; loop=&apos;false&apos; quality=&apos;high&apos; allowScriptAccess=&apos;sameDomain&apos; type=&apos;application/x-shockwave-flash&apos; pluginspage=&apos;http://www.adobe.com/go/getflashplayer&apos;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;

&lt;br/&gt;&lt;br/&gt;

&lt;div style=&apos;width:550; height:270&apos;&gt;&lt;object classid=&apos;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&apos; id=&apos;nomee&apos; width=&apos;550&apos; height=&apos;270&apos; codebase=&apos;http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab&apos;&gt;&lt;param name=&apos;movie&apos; value=&apos;http://nomee.com/live/livecardHorizontal.swf&apos; /&gt;&lt;param name=&apos;flashvars&apos; value=&apos;showFollowMe=true&amp;pid=2d61b002-4d19-de11-a83c-001cc479154c&apos; /&gt;&lt;param name=&apos;quality&apos; value=&apos;high&apos; /&gt;&lt;param name=&apos;bgcolor&apos; value=&apos;#ffffff&apos; /&gt;&lt;param name=&apos;allowScriptAccess&apos; value=&apos;sameDomain&apos; /&gt;&lt;embed src=&apos;http://nomee.com/live/livecardHorizontal.swf&apos; flashvars=&apos;showFollowMe=true&amp;pid=2d61b002-4d19-de11-a83c-001cc479154c&apos; quality=&apos;high&apos; bgcolor=&apos;#ffffff&apos; width=&apos;550&apos; height=&apos;270&apos; name=&apos;nomee&apos; align=&apos;middle&apos; play=&apos;true&apos; loop=&apos;false&apos; quality=&apos;high&apos; allowScriptAccess=&apos;sameDomain&apos; type=&apos;application/x-shockwave-flash&apos; pluginspage=&apos;http://www.adobe.com/go/getflashplayer&apos;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>nomee</category>				
				
				<category>AIR</category>				
				
				<category>Flex</category>				
				
				<pubDate>Tue, 31 Mar 2009 01:30:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2009/3/31/Adobe-nomee-cards--follow-your-favorite-technology</guid>
				
			</item>
			
			<item>
				<title>Congratulations ColdFusion (for topping the User Choice list.)</title>
				<link>http://blog.mikenimer.com/index.cfm/2008/10/22/Congratulations-ColdFusion-for-topping-the-User-Choice-list</link>
				<description>
				
				ColdFusion is among the top Applications servers in a &quot;users choice&quot; report created by Evans Data. 
&lt;a href=&quot;http://www.evansdata.com/reports/viewRelease_download.php?reportID=20&quot;&gt;http://www.evansdata.com/reports/viewRelease_download.php?reportID=20&lt;/a&gt;

&lt;a href=&quot;http://www.cio.com/article/print/455845&quot;&gt;http://www.cio.com/article/print/455845&lt;/a&gt;

Evans Data interviewed more than 700 developers asking them questions about the servers they have used. And ColdFusion is among the top! 

But this is my favorite quote of the survey: &quot;this survey felt that performance was one of the server&apos;s strongest points, along with scalability, security, and support&quot;

So to the ColdFusion Team, keep up the good work! 
				</description>
				
				<category>ColdFusion</category>				
				
				<pubDate>Wed, 22 Oct 2008 12:14:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2008/10/22/Congratulations-ColdFusion-for-topping-the-User-Choice-list</guid>
				
			</item>
			
			<item>
				<title>RIA Debugging and ColdFusion (brainstorming)</title>
				<link>http://blog.mikenimer.com/index.cfm/2008/10/13/RIA-Debugging-and-ColdFusion-brainstorming</link>
				<description>
				
				I just posted about a post written about RIA Debugging by Simeon Simeonov, in this post:
&lt;a href=&quot;http://blog.mikenimer.com/index.cfm/2008/10/13/RIA-Debugging-and-ColdFusion-forgotten-feature&quot;&gt;http://blog.mikenimer.com/index.cfm/2008/10/13/RIA-Debugging-and-ColdFusion-forgotten-feature&lt;/a&gt;

In Sim&apos;s post he talks about the need for a common place to see all of the debug data from the server and the client. 

So my question to everyone. What would this look like?

Let&apos;s imagine that there was a way to send all of the client (flex, ajax, silverlight, etc.) logging data and all of the server logging data(ColdFusion debug data, etc..) to a common UI.. 

What features does that common UI need to have?
What would it look like?
What are some of the must do features? 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>Flex</category>				
				
				<pubDate>Mon, 13 Oct 2008 12:09:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2008/10/13/RIA-Debugging-and-ColdFusion-brainstorming</guid>
				
			</item>
			
			<item>
				<title>RIA Debugging and ColdFusion (forgotten feature)</title>
				<link>http://blog.mikenimer.com/index.cfm/2008/10/13/RIA-Debugging-and-ColdFusion-forgotten-feature</link>
				<description>
				
				Some of you might remember Simeon Simeonov from the early days of ColdFusion. He was one of the original engineers and the architect of ColdFusion at Allaire. Needless to say, he is responsible for many of your favorite features in ColdFusion.

Sim, has recently posted a great blog post about the problems debugging RIA applications. And a possible solution. Definitely worth a read.

&lt;a href=&quot;http://simeons.wordpress.com/2008/09/16/debugging-ria-ajax-flex-services/&quot;&gt;http://simeons.wordpress.com/2008/09/16/debugging-ria-ajax-flex-services/&lt;/a&gt;


However, there is one more way to do debugging missing from his post (unless it&apos;s been updated). One of the last things I added to ColdFusion 7.0.2 before I left Adobe was to make sure all of the ColdFusion debug data is sent with every Flash Remoting request. 

This is one of the more common forgotten features in ColdFusion. If you are using ColdFusion with Flex, you can still get all of the information you are used to seeing at the bottom of a regualar .cfm. To turn this on, just turn on debugging in the cfadmin. And then in your result event, you can look at the result event header to see all of this information; sql, execution times, variables, etc.. 

Way back when, on mikenimer.com I posted a flex dump component that does know how to format this debug data. However, to be honest. I haven&apos;t opened the component in the latest versions of flex so the component might need to be tweak to work in flex 3. 

But that&apos;s no excuse not to monitor this data. With RIA apps it&apos;s more important than ever to monitor your requests. It&apos;s too easy to write a bad query and not know it, since you can&apos;t easily see this debug data. But it&apos;s worth a little extra work. 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>Flex</category>				
				
				<pubDate>Mon, 13 Oct 2008 11:48:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2008/10/13/RIA-Debugging-and-ColdFusion-forgotten-feature</guid>
				
			</item>
			
			<item>
				<title>FlexCamp Chicago presentation and examples</title>
				<link>http://blog.mikenimer.com/index.cfm/2008/1/30/FlexCamp-Chicago-presentation-and-examples</link>
				<description>
				
				First I just want to thank everyone who attended the FlexCamp in Chicago. As promised here is the presentation I did and the two examples I walked through. 

&lt;a href=&quot;http://www.mikenimer.com/downloads/presentations/flexcampchicago2008/FlexCampChicago2008_CFandFlex101.pdf&quot;&gt;Presentation&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;http://www.mikenimer.com/downloads/presentations/flexcampchicago2008/flexcamp_chicago_examples.zip&quot;&gt;Examples&lt;/a&gt;&lt;br/&gt;
(these use the sample database that ship with ColdFusion) 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>Flex</category>				
				
				<pubDate>Wed, 30 Jan 2008 14:11:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2008/1/30/FlexCamp-Chicago-presentation-and-examples</guid>
				
			</item>
			
			<item>
				<title>Flex Camp Chicago! - limited space available, sign up now while you still can</title>
				<link>http://blog.mikenimer.com/index.cfm/2008/1/9/Flex-Camp-Chicago--limited-space-available-sign-up-now-while-you-still-can</link>
				<description>
				
				Are you a flex developer? Are you still learning new things about flex? Are you planning on learning flex? Do you want to meet other flex developers in the area? Do you live near Chicago, IL? 

Then you need to register and come to the next Flex Camp right here in Chicago, on Jan 18th, before it sells out. Plus you get a FREE COPY OF &quot;Adobe Flex 2: Training from the Source&quot; - thanks to PeachPit Press. 

Flex Camp is a one day, all day, conference about Flex with something for everyone - Flex Component development, Air development, CF Integration, and Java Integration. Plus I&apos;m a speaker! 

And it&apos;s easy to get to, Flex Camp will be located at the Illinois Technology Association, 200 S. Wacker Drive, 15th Floor. Which is right by Union Station in downtown Chicago. 

Click here to learn more and register:&lt;br/&gt;
&lt;a href=&quot;http://www.flexcampchicago.com/&quot;&gt;http://www.flexcampchicago.com/&lt;/a&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>Flex</category>				
				
				<pubDate>Wed, 09 Jan 2008 04:11:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2008/1/9/Flex-Camp-Chicago--limited-space-available-sign-up-now-while-you-still-can</guid>
				
			</item>
			
			<item>
				<title>Tapper, Nimer &amp; Assoc. + Digital Primates IT Consulting</title>
				<link>http://blog.mikenimer.com/index.cfm/2007/12/5/Tapper-Nimer--Assoc--Digital-Primates-IT-Consulting--the-secret-is-out</link>
				<description>
				
				I&apos;m happy to finally be able to tell the world that Tapper, Nimer &amp; Associates and Digital Primates have decided to join forces. Now that the lawyers are done the merger is complete.

The new company will be keeping the name Digital Primates. If you&apos;d like to learn more about Digital Primates check out our web site at &lt;a href=&quot;http://www.digitalprimates.net&quot;&gt;http://www.digitalprimates.net&lt;/a&gt;

It&apos;s an exciting time in the RIA world and for us it just got a lot more exciting!

P.S. We are looking for a few great flex developers and flash video experts. If you&apos;re interested send me your resume. 
				</description>
				
				<category>General</category>				
				
				<category>ColdFusion</category>				
				
				<category>Flex</category>				
				
				<pubDate>Wed, 05 Dec 2007 03:47:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2007/12/5/Tapper-Nimer--Assoc--Digital-Primates-IT-Consulting--the-secret-is-out</guid>
				
			</item>
			
			<item>
				<title>CFForm xml forms</title>
				<link>http://blog.mikenimer.com/index.cfm/2006/12/4/CFForm-xml-forms</link>
				<description>
				
				Sure it&apos;s a slow adoption feature in ColdFusion, but it hasn&apos;t been forgotten. And those that know how to use it - love it. 

Wim Dewijngaert @ &lt;a href=&quot;http://cfform.dewijngaert.be&quot; target=&quot;_blank&quot;&gt;http://cfform.dewijngaert.be&lt;/a&gt; has created a number of great DHTML components that work with CFForm (format=&quot;xml&quot;). 

So if you&apos;ve already discovered the hidden power in xml forms or have been meaning to use them - go take a look and try some of them out. 

I knew that people would eventually start posting components/xsl skins for cfform. Does anyone else have any that they would like to post (they aren&apos;t hard to make). 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>CFForm XML Skins</category>				
				
				<category>CFForm</category>				
				
				<pubDate>Mon, 04 Dec 2006 12:04:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2006/12/4/CFForm-xml-forms</guid>
				
			</item>
			
			<item>
				<title>Motionbox.com launches flex app to manage multi-file uploads</title>
				<link>http://blog.mikenimer.com/index.cfm/2006/10/21/Motionboxcom-launches-flex-app-to-manage-multifile-uploads</link>
				<description>
				
				It&apos;s not very often that we (&quot;Tapper, Nimer, and Associates&quot;) do work that lives outside the firewall, so when we do it&apos;s great to be able to share it. This week &lt;a href=&quot;http://www.motionbox.com/&quot;&gt;Motionbox.com&lt;/a&gt; launched a new flex 2 multi-file uploader, written by our own Angela Nimer!

This has to be one of the best examples of flex doing what it does best; can you imagine trying to provide this kind of interaction and feedback with old-school html (or dare I say Ajax). You&apos;d be in ActiveX/Applet hell. Instead with the flex components, lots of event listeners, and some css we were able to quickly build a rich interactive experience that does the job while informing the user about what is happening at all times.

If you?re not familiar with &lt;a href=&quot;http://www.motionbox.com/&quot;&gt;Motionbox.com&lt;/a&gt;, check it out! Motionbox is a video sharing site, but not any regular video sharing site, Motionbox lets you share whole videos, but, even better you can share just the clips of a video (aka, just the good parts).  Plus they have a cool flex video player and filmstrip tool too. 

&lt;img src=&quot;/images/motionboxScreenshot.gif&quot;/&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>Flex</category>				
				
				<pubDate>Sat, 21 Oct 2006 03:47:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2006/10/21/Motionboxcom-launches-flex-app-to-manage-multifile-uploads</guid>
				
			</item>
			
			<item>
				<title>DOJO/JSON requests in ColdFusion</title>
				<link>http://blog.mikenimer.com/index.cfm/2006/10/2/DOJOJSON-requests-in-ColdFusion</link>
				<description>
				
				Recently I was putting together a sample app for my presentation at &lt;a href=&quot;http://www.ajaxworldconference.com/&quot;&gt;AjaxWorld&lt;/a&gt;, and I decided to use the DOJO ajax library and ColdFusion together. However, there was one problem, DOJO does everything with JSON requests/response, instead of url/form variables and XML and it does it in such a way that you can&apos;t easily get to it from CF. 

What I mean by that, DOJO will send the JSON request arguments in a string, in the body of the HTTP get request. Now this is perfectly valid in HTTP, however it is rare. And it means that the values don&apos;t end up in a FORM or URL variable either.  So getting the JSON string can be tricky. 

So I&apos;ve put together a simple UDF that you can use to get this JSON request, technically anything in the http body of a request. Soon I&apos;ll put this on &lt;a href=&quot;http://www.cflib.org/&quot;&gt;cflib&lt;/a&gt;, but for now, here it is. Hope it helps.

(Special thanks to &lt;a href=&quot;http://weblogs.macromedia.com/cantrell/&quot;&gt;Christian Cantrell&lt;/a&gt;, the byte array code is from his blog).

&lt;code&gt;

&lt;cffunction name=&quot;getJSONRequest&quot; access=&quot;private&quot; returnType=&quot;string&quot; output=&quot;no&quot;&gt;
	&lt;cfscript&gt;
		var size=GetPageContext().getRequest().getInputStream().available();
		var emptyByteArray = createObject(&quot;java&quot;, &quot;java.io.ByteArrayOutputStream&quot;).init().toByteArray();
		var byteClass = createObject(&quot;java&quot;, &quot;java.lang.Byte&quot;).TYPE;
		var byteArray = createObject(&quot;java&quot;,&quot;java.lang.reflect.Array&quot;).newInstance(byteClass, size);

		GetPageContext().getRequest().getInputStream().readLine(byteArray, 0, size);

		createObject(&apos;java&apos;, &apos;java.lang.System&apos;).out.println(&quot;{GetJSONRequest} ByteArray.ToString=&quot; &amp;ToString( byteArray	 ) );	
		return ToString( byteArray );
	&lt;/cfscript&gt;
&lt;/cffunction&gt;

&lt;cfset jsonstring = getJSONRequest()&gt;

&lt;/code&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<pubDate>Mon, 02 Oct 2006 13:31:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2006/10/2/DOJOJSON-requests-in-ColdFusion</guid>
				
			</item>
			
			<item>
				<title>Do you do freelance work?</title>
				<link>http://blog.mikenimer.com/index.cfm/2006/9/8/Do-you-do-freelance-work</link>
				<description>
				
				Send me your resume!

As many of you know I recently joined up with Jeff Tapper to start a new consulting company, Tapper, Nimer and Associates. And we&apos;ve already had a few opportunities come up where we need more people. A great sign of the market out there, I have to say. 

So anyway, we are looking at building our Rolodex of people we can sub-contract work out to. If you are a ColdFusion, Flex2, or Flash contractor I want to know. I can&apos;t guarantee anything right away but if I know who you are I&apos;ll know who I can call. 

What I&apos;d like to know:&lt;br/&gt;
1) Your resume, skills and experience.&lt;br/&gt;
2) Your contact info.&lt;br/&gt;
3) Stuff you&apos;ve worked on.&lt;br/&gt;
4) What your going rate is.&lt;br/&gt;
5) Can/Will you travel? 20%, 50%, 100%, etc.&lt;br/&gt;
6) Describe your perfect gig? What do you want to work on? &lt;br/&gt;


Send me an email at &lt;a href=&quot;mailto:mikenimer@yahoo.com&quot;&gt;mikenimer@yahoo.com&lt;/a&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>Flex</category>				
				
				<pubDate>Fri, 08 Sep 2006 17:16:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2006/9/8/Do-you-do-freelance-work</guid>
				
			</item>
			
			<item>
				<title>ColdFusion FDS Docs</title>
				<link>http://blog.mikenimer.com/index.cfm/2006/9/1/ColdFusion-FDS-Docs</link>
				<description>
				
				A friendly URL reminder for myself and everyone who finds this first. Now I don&apos;t have to go searching for it next time. 

This pdf covers how to Configure Flex2 and ColdFusion to work with FlashRemoting, Flex Data Services, and Flex Messaging.

&lt;a href=&quot;http://download.macromedia.com/pub/documentation/en/flex/2/using_cf_with_flex2.pdf&quot;&gt;Using CF with Flex2&lt;/a&gt; 
				</description>
				
				<category>ColdFusion</category>				
				
				<category>Flex</category>				
				
				<pubDate>Fri, 01 Sep 2006 13:21:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2006/9/1/ColdFusion-FDS-Docs</guid>
				
			</item>
			
			<item>
				<title>Flex2 Fieldset Component</title>
				<link>http://blog.mikenimer.com/index.cfm/2006/8/10/Flex2-Fieldset-Component</link>
				<description>
				
				One thing that keeps driving me nuts is the lack of a &quot;FieldSet&quot; component, like the html tag of the same name, in Flex. So I wrote one. 

This component is based on the base VBox component so all of the properties and methods of the VBox apply. Here is an example of using the component. 

&lt;code&gt;
&lt;nimer:FieldSet  
	label=&quot;This is the fieldset legend&quot; 
	borderStyle=&quot;solid&quot; borderThickness=&quot;2&quot; cornerRadius=&quot;10&quot;&gt;
		
	&lt;mx:Label text=&quot;Label&quot;/&gt;
	&lt;mx:TextInput/&gt;
		
&lt;/nimer:FieldSet&gt;
&lt;/code&gt;

&lt;i&gt;Note: I&apos;ve added this new component to the same .swc file as my DebugPanel component. Considering that the .swc now has more then one component, I&apos;ve also renamed the .swc too. So, if you are already using the DebugPanel.swc you&apos;ll want to remove the link to that .swc file and create a new link to this nimerComponents.swc in your project.&lt;/i&gt; 
				</description>
				
				<category>General</category>				
				
				<category>ColdFusion</category>				
				
				<category>Flex</category>				
				
				<pubDate>Thu, 10 Aug 2006 04:07:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2006/8/10/Flex2-Fieldset-Component</guid>
				
				<enclosure url="http://blog.mikenimer.com/enclosures/nimerComponents_v2_08092006.zip" length="651620" type="application/x-zip-compressed"/>
				
			</item>
			</channel></rss>