<?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</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 10:46:38 -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>3 new posts on dpHibernate</title>
				<link>http://blog.mikenimer.com/index.cfm/2010/1/18/3-new-posts-on-dpHibernate</link>
				<description>
				
				Marty Pitt, one of the developers on dpHibernate has been busy. And he has written 3 new blogs covering some of the new features he is working on in dpHibernate

Check them out here:

overview:
&lt;a href=&quot;http://martypitt.wordpress.com/2010/01/18/dphibernate-an-overview/&quot;&gt;http://martypitt.wordpress.com/2010/01/18/dphibernate-an-overview/&lt;/a&gt;

paged collections
&lt;a href=&quot;http://martypitt.wordpress.com/2010/01/18/implementing-paged-collections-in-dphibernate/&quot;&gt;http://martypitt.wordpress.com/2010/01/18/implementing-paged-collections-in-dphibernate/&lt;/a&gt;

entity persistence
&lt;a href=&quot;http://martypitt.wordpress.com/2010/01/18/entity-persistence-with-dphibernate-overview/&quot;&gt;http://martypitt.wordpress.com/2010/01/18/entity-persistence-with-dphibernate-overview/&lt;/a&gt; 
				</description>
				
				<category>dpHibernate</category>				
				
				<category>Flex</category>				
				
				<pubDate>Mon, 18 Jan 2010 16:29:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2010/1/18/3-new-posts-on-dpHibernate</guid>
				
			</item>
			
			<item>
				<title>Why nomee uses Adobe AIR</title>
				<link>http://blog.mikenimer.com/index.cfm/2009/10/4/Why-nomee-uses-Adobe-AIR</link>
				<description>
				
				Recently, we released version 1.2 of nomee, a social media desktop app written in Adobe AIR. When I look back, I realize it&apos;s been more then a year since we started down the path to build nomee. As I prepare for my presentation at Adobe MAX this week, I thought it would be a good idea to share why we chose Adobe AIR as our development platform and why it makes so much sense – both for our customers and for our business. 

Originally, nomee was going to be a native Windows application. However, we quickly realized that it would take too long to build a Windows version and then a separate Mac version. Not to mention the problem of keeping two different applications in sync as we add new features – think of the duplicate code we&apos;d have to write. For a consumer product like this, it has to run on both operating systems, or run as a Web application, from the beginning. That decision is what started us on the Adobe AIR path. But it didn&apos;t end with cross-OS support. When we started looking at the benefits of AIR for nomee, we found a few reasons that made it a better solution than creating just another Web application.

1.	Offline – For nomee to become a full relationship and information management tool, you need to be able to use it anywhere (on a plane after a conference, for example). We have basic offline support now in nomee – login offline, open cards, get contact information, and so on. And we have even more plans on the roadmap, such as editing and sending cards while offline.

2.	Customer Experience – There are a lot of things we can do in a desktop application, which we can&apos;t do on the web, to give the user a better experience. We aren&apos;t limited by browser sand boxes. We can access local resources to build better caching layers and local data stores, as well as to add native drag-n-drop support. In a web application, every time you login in you need to pull the data back from the server that you saw the last time you used the application – plus anything that has happened since. With an AIR application, you can keep the data you&apos;ve already pulled cached locally and only pull new data, requiring less bandwidth for the clients and server while decreasing the round-trip to the server.

3.	Always Working – By creating a desktop application, we are able to give users a tool that is always monitoring their friends&apos; and families&apos; sites for updates and alerting them as things change. If nomee was a web application, users would need to remember to open a browser and login to see updates. And if they didn&apos;t login, they would never know something has happened with someone they care about. 

4.	Security – For some reason, we live in a world where people don&apos;t mind giving out usernames and passwords to random web sites and letting them impersonate you as they login and pull in your data. We don&apos;t like that. We don&apos;t believe that our db should have copies of every user&apos;s login name and password. However, in an application like nomee where we do need to pull in users&apos; data from across the web - at times we do need to ask for a username and password.  Because nomee is a desktop application, when we do need to get your credentials, we don&apos;t save it on the server. Instead, we save it in an Encrypted File Store that only lives on your computer. 

5.	Infrastructure Costs – AIR saves us money! And as a start-up, that&apos;s important. Let me explain. With an AIR application, you are able to push a lot of the work for each client back to the client. Work like pulling feeds, parsing feeds, etc. Remember a browser is nothing more then a dumb terminal. Granted there is a lot you can do with one, but it is limited in certain ways. If we were to have started out as a web application, we would need to build server farms of dozens – if not hundreds – of servers to do all of the social web parsing that our nomee clients do.

As we dig in to our next nomee build (an engineer&apos;s work is never done), I&apos;d love to hear what you think. What makes a desktop application right for you? I&apos;d also encourage you to take nomee for a spin and send us your feedback. 
				</description>
				
				<category>nomee</category>				
				
				<category>AIR</category>				
				
				<category>Flex</category>				
				
				<pubDate>Sun, 04 Oct 2009 18:30:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2009/10/4/Why-nomee-uses-Adobe-AIR</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>dphibernate made it into the spring docs</title>
				<link>http://blog.mikenimer.com/index.cfm/2009/5/18/dphibernate-made-it-into-the-spring-docs</link>
				<description>
				
				This was just pointed out to my by &lt;a href=&quot;http://www.infoaccelerator.net/&quot;&gt;Andrew Powell&lt;/a&gt;. &lt;a href=&quot;http://code.google.com/p/dphibernate/&quot;&gt;dpHibernate&lt;/a&gt; is used as an example in the spring-flex docs for &quot;Providing Custom Service Adapters&quot;

&lt;a href=&quot;http://static.springframework.org/spring-flex/docs/1.0.x/reference/html/ch02s09.html&quot;&gt;http://static.springframework.org/spring-flex/docs/1.0.x/reference/html/ch02s09.html&lt;/a&gt;

to the guys who figured out how to get dpHibernate working with the spring-flex project, thank you! 
				</description>
				
				<category>dpHibernate</category>				
				
				<category>Flex</category>				
				
				<pubDate>Mon, 18 May 2009 18:41:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2009/5/18/dphibernate-made-it-into-the-spring-docs</guid>
				
			</item>
			
			<item>
				<title>starting to build some buzz</title>
				<link>http://blog.mikenimer.com/index.cfm/2009/4/1/starting-to-build-some-buzz</link>
				<description>
				
				Check it out - we are starting to get some buzz for our beta launch. Let it begin. 


&lt;A href=&quot;http://www.techcrunch.com/2009/04/01/nomee-is-an-all-in-one-social-networking-aggregator-and-rss-feed/&quot;&gt;http://www.techcrunch.com/2009/04/01/nomee-is-an-all-in-one-social-networking-aggregator-and-rss-feed/&lt;/a&gt;


&lt;a href=&quot;http://www.readwriteweb.com/archives/nomee_introduces_new_social_aggregation_software.php&quot;&gt;
http://www.readwriteweb.com/archives/nomee_introduces_new_social_aggregation_software.php&lt;/a&gt; 
				</description>
				
				<category>nomee</category>				
				
				<pubDate>Wed, 01 Apr 2009 15:20:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2009/4/1/starting-to-build-some-buzz</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>web 2.0 conference</title>
				<link>http://blog.mikenimer.com/index.cfm/2009/3/31/web-20-conference</link>
				<description>
				
				Are you going to the web 2.0 conference this week? If so, stop by and say hi. I&apos;ll be in the nomee booth #621 as we launch our beta this week at the conference. I&apos;ll be easy to find, our booth is right across from Adobe&apos;s booth. See you in SF! 
				</description>
				
				<category>nomee</category>				
				
				<pubDate>Tue, 31 Mar 2009 00:38:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2009/3/31/web-20-conference</guid>
				
			</item>
			
			<item>
				<title>Do you nomee? (or my new job)</title>
				<link>http://blog.mikenimer.com/index.cfm/2009/3/26/Do-you-nomee-or-my-new-job</link>
				<description>
				
				Some of you already know this, but I&apos;ve been waiting to post the news until I had something to show. With the new year ahead of me, I decided it was time to get out of consulting and back into product development; this time with a company called &lt;a href=&quot;http://www.nomee.com&quot;&gt;nomee.&lt;/a&gt; What can I say, I like product development.

What is nomee you ask?  What is that thing on the side of my blog? First let me say, Nomee is not another social website. It&apos;s a tool, built with Adobe AIR, to organize and monitor them all. 

If you think about it, if you put all of the websites you&apos;ve signed up, and everything you&apos;ve posted about yourself  together -- you&apos;ve created a virtual brand for yourself. Wouldn&apos;t it be cool if there was a way to control what part of that online brand people see?  facebook for friends, linked-in for co-workers, etc.. Add in the annoying problem of trying to stay on top of all of these sites and all of your friends.  How many hours a day/week do you spend going to different sites to see if anything has changed; or have you given up?

These are the problems we are solving with Nomee. With nomee:

&lt;ul&gt;
&lt;li&gt;You can control what things about yourself that you want to share with others.&lt;/li&gt;
&lt;li&gt;You can follow your friends. Nomee can monitor over 100 different websites. When your friends do things online you are alerted, then you can decide if you care and want to open the item or if you want to ignore it. &lt;/li&gt;
&lt;li&gt;You can stay in touch. Nomee keeps your contact information synchronized with your friends and families. When they need to know your new phone number - they look in nomee. When they need your new address - they look in nomee.&lt;/li&gt;
&lt;li&gt;You can publish yourself. like I have on this blog, or my facebook page. On the right you&apos;ll see my public nomee card (they can be public or private). &lt;/li&gt;
&lt;/ul&gt;
As we are starting our public beta and getting ready for web 2.0, check out our beta, you can download it now. Go to &lt;a href=&quot;http://www.nomee.com&quot;&gt;nomee.com&lt;/a&gt;, or even better, click the &lt;a href=&quot;http://nomee.com/follow-nomee_newsmakers_individual.aspx?id=2a058d60-e8b9-dd11-b4bd-001cc479154c&quot;&gt;follow me link&lt;/a&gt; on the bottom of my nomee card (on the right of my blog) and add me to your nomee desktop. 
				</description>
				
				<category>Personal</category>				
				
				<category>AIR</category>				
				
				<category>Flex</category>				
				
				<pubDate>Thu, 26 Mar 2009 00:31:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2009/3/26/Do-you-nomee-or-my-new-job</guid>
				
			</item>
			
			<item>
				<title>Intellij 8 - alternative to FlexBuilder</title>
				<link>http://blog.mikenimer.com/index.cfm/2008/11/8/Intellij-8--alternative-to-FlexBuilder</link>
				<description>
				
				If you&apos;ve ever used IntelliJ for java development, are frustrated with eclipse, or you wish Flex Builder could do more (and you never use design view). This might interest you. 

JetBrains has added Flex development support to IntelliJ 8. Which was just release (nov 6th). Note, they have only added code support with no plans for a UI designer. 

&lt;a href=http://www.jetbrains.com/idea/&gt;http://www.jetbrains.com/idea/&lt;/a&gt;


Some of my favorite features

1. CODE FORMATTING!!&lt;br/&gt; 
cntrl-shit-L and boom the as/mxml file is formatted to my liking. 

2. Flaging common errors without running the compiler.&lt;br/&gt;

3. Navigating between classes and around a class. &lt;br/&gt;
you can jump from an interface to the as classes that implemented a given menu. 

4. CNTRL-Q help&lt;br/&gt;
Put your cursor on a method or class and hit cntrl-q, intelliJ will dynamically pull the comments out of the code for that class/method  and show it to you as help

5. Code generation&lt;br/&gt;
It&apos;s easy to auto generate get/set method for properties, constructors, implemented methods, override methods

6. Find Usages&lt;br/&gt;
A quick search of all the code that uses a given variable to method. 
				</description>
				
				<category>Flex</category>				
				
				<pubDate>Sat, 08 Nov 2008 17:36:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2008/11/8/Intellij-8--alternative-to-FlexBuilder</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>dpHibernate - Hibernate lazy loading with Adobe BlazeDS</title>
				<link>http://blog.mikenimer.com/index.cfm/2008/5/21/dpHibernate--Hibernate-lazy-loading-with-Adobe-BlazeDS</link>
				<description>
				
				One of the biggest problems with working with data in a RIA/Flex application is that it&apos;s all or nothing. You either need to get all of the data or write a lot of code to return the data in multiple requests. The problem is that good design means that we want to design our data object to match the data, not the UI.  For instance a User might have an array of Orders which each have an array of Items. Seems simple enough, right. The problem is that this is a large complex objects which could require a query that joins multiple tables when returning data to your application.  No big deal if you want to display all of the data. But if you are just trying to output the users name and email in a search result screen then this is a huge performance hit. 

Luckily there is a solution, It is called lazy loading. JSP developers, which use the java hibernate framework, have been able to use lazy loading for years. But until now this did not work with remote client applications like Flex.  For those of you who have tried, I&apos;m sure your familiar with the dreaded LazyLoadingException.  Frustrating huh.  Lazy loading let&apos;s your define a complete object model, such as a User with an array of Orders. But only return the data you are actually using in your presentation layer (Flex). Avoiding that all or nothing data problem that is so common.

I&apos;m happy to announce a new Digital Primates open source project. dpHibernate, add support to BlazeDS for Hibernate lazy loading.  You can find both the java and the ActionScript parts of the project here:
&lt;a href=&quot;http://code.google.com/p/dphibernate&quot;&gt;http://code.google.com/p/dphibernate&lt;/a&gt;

If you&apos;re not familiar with hibernate, check out http://www.hibernate.org. At a real high level, Hibernate is a java ORM tool, which lets you map java beans to a relation database. Hibernate does all of the sql work for you. 

So how do &lt;a href=&quot;http://code.google.com/p/dphibernate&quot;&gt;dpHibernate&lt;/a&gt; work? dpHibernate is actually a combination of two code bases. First, there is a custom java adapter for the BlazeDS server. This HibernateAdapter understands the hibernate proxy objects and knows how to convert them into a special &lt;a href=&quot;http://code.google.com/p/dphibernate&quot;&gt;dpHibernate&lt;/a&gt; proxy which the AMF serializer will ignore and not try to initialize. This is how the proxy objects are able to go back to the client without getting the LazyLoadingException. 

The second part of &lt;a href=&quot;http://code.google.com/p/dphibernate&quot;&gt;dpHibernate&lt;/a&gt; is an ActionScript library which gives your application the code it needs to understand these dpHibernate proxy objects. This AS library has the code to manage your ActionScript beans and knows how to call back to the server to load a proxy once that object has been touched, usually with a binding expression. 

In case your wondering, how does &lt;a href=&quot;http://code.google.com/p/dphibernate&quot;&gt;dpHibernate&lt;/a&gt; differ from the hibernate support in LiveCycle Data Services ES?  For one dpHibernate doesn&apos;t require LCDS it works with the open source BlazeDS server. The other big difference is that hibernate support in LCDS requires you to duplicate the lazy associations in the services-config.xml and you need to use an Assembler class to get the hibernate objects. dpHibernate let&apos;s you call any java method and return any hibernate object. 

So check it out, if you can use it I&apos;d love to hear about it. If it doesn&apos;t work for you I want to know about that too. And as with all open source projects this one can use as many eyes as possible on it too. If you find any hibernate configurations that don&apos;t work let me know. Or better yet, send me a test case with the right hibernate mapping files to recreate the issue.

Thanks,
---mike nimer
mikenimer at yahoo.com 
				</description>
				
				<category>hibernate</category>				
				
				<category>dpHibernate</category>				
				
				<category>Flex</category>				
				
				<pubDate>Wed, 21 May 2008 15:44:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2008/5/21/dpHibernate--Hibernate-lazy-loading-with-Adobe-BlazeDS</guid>
				
			</item>
			
			<item>
				<title>Making air do crazy things</title>
				<link>http://blog.mikenimer.com/index.cfm/2008/1/30/Making-air-do-crazy-things</link>
				<description>
				
				So technically Adobe Air doesn&apos;t have direct OS level integration, we can only hope the next version does. But that doesn&apos;t mean it&apos;s not possible. Louie Penaflor (a member of the Digital Primates team) has still been able to make AIR bend to his will, with some help from the Artemis project. He has written an application that let&apos;s AIR control his scanner. So from inside his application he can scan his travel receipts. 

Read all about it here: &lt;a href=&quot;http://www.restlessthinker.com/blog/?p=69&quot;&gt;http://www.restlessthinker.com/blog/?p=69&lt;/a&gt; 
				</description>
				
				<category>Flex</category>				
				
				<pubDate>Wed, 30 Jan 2008 14:16:00 -0400</pubDate>
				<guid>http://blog.mikenimer.com/index.cfm/2008/1/30/Making-air-do-crazy-things</guid>
				
			</item>
			</channel></rss>