<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-35088216</id><updated>2011-09-19T08:17:17.307-07:00</updated><category term='flash'/><category term='javascript'/><category term='coldfusion'/><category term='China'/><category term='collaboration'/><category term='advertising'/><category term='railo'/><category term='godin'/><category term='Skype'/><category term='Apollo'/><category term='applications'/><category term='RSS'/><category term='travel'/><category term='web 2.0'/><category term='ning'/><category term='sprouts'/><category term='Flex'/><category term='humor'/><category term='Gears'/><category term='coldrails'/><category term='business'/><category term='MySQL'/><category term='Implosion'/><category term='translation'/><category term='comand line'/><category term='vacation'/><category term='ajax'/><category term='security'/><category term='politics'/><category term='customer service'/><category term='AIR'/><category term='AS3'/><category term='goals'/><category term='lifehacker'/><category term='2007'/><category term='Google'/><category term='filter'/><category term='GTD'/><category term='blogger'/><category term='search'/><category term='time travel'/><category term='weird'/><category term='framework'/><category term='maps'/><category term='error'/><category term='widget'/><category term='prototype'/><category term='Silverlight'/><category term='Useful'/><category term='money'/><title type='text'>Punctuated Equilibrium</title><subtitle type='html'>Rantings &amp; Ramblings on the Convergence of Code and Business</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>89</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-35088216.post-5997938727610088055</id><published>2009-03-09T06:27:00.000-07:00</published><updated>2009-03-09T09:34:57.026-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Over on ReignDesign...</title><content type='html'>I'll be posting on a bi-weekly basis over at my &lt;a href="http://www.reigndesign.com/blog"&gt;ReignDesign&lt;/a&gt;'s blog (&lt;a href="http://www.reigndesign.com/"&gt;my new company&lt;/a&gt;). Here are some of the topics you can expect:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Flash, Flex, AIR&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Android (Java Mobile Development)&lt;/li&gt;&lt;li&gt;iPhone (yep, packing the market with apps)&lt;/li&gt;&lt;li&gt;UX Design&lt;/li&gt;&lt;/ul&gt;Swing over and check it out.&lt;br /&gt;If you are looking for RIA or Mobile Development, we've got a talented group of developers working with us. &lt;a href="http://www.reigndesign.com/contact"&gt;Get in touch&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-5997938727610088055?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/5997938727610088055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=5997938727610088055&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/5997938727610088055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/5997938727610088055'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2009/03/ill-be-posting-on-bi-weekly-basis-over.html' title='Over on ReignDesign...'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-8484378723810513271</id><published>2008-06-24T11:00:00.000-07:00</published><updated>2008-06-24T11:16:14.490-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Using DI to add a PureMVC Mediator in Flex</title><content type='html'>Classic issue with PureMVC, how do you add your mediators to your Flex components in an application at initialization. If you're not concerned with tight coupling you might add all the mediators with one command. But what if you don't want to tie all the mediator initialization together in one command? You might be thinking make separate commands for each mediator and fire it off as a PureMVC MacroCommand. Not a bad idea. It would certainly get the job done. But what about reusing the same command for each component and dependency injecting the mediator class and view component reference? Oh so clean. I love it and I think you will to.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;//inside command class&lt;br /&gt;public var mediatorClass:Class;&lt;br /&gt;public var viewLocation:String;&lt;br /&gt;&lt;br /&gt;override public function execute( note:INotification ):void&lt;br /&gt;{&lt;br /&gt; var m:IMediator = new mediatorClass() as IMediator;&lt;br /&gt; m.viewComponent = getViewComponent( note.getBody() );&lt;br /&gt; Facade.getInstance().registerMediator( m );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected function getViewComponent( app:Object ):Object&lt;br /&gt;{&lt;br /&gt; var result:Object = app;&lt;br /&gt; for each( var subItem:Object in viewLocation.split(".") )&lt;br /&gt; {&lt;br /&gt;  result = result[subItem];&lt;br /&gt; }&lt;br /&gt; return result;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The viewLocation would be equal to a String like "someComponent.menu.list" where someComponent is located directly under the main application and menu is a subcomponent of that etc. etc.&lt;br /&gt;&lt;br /&gt;If you don't know how to handle DI in a Flex application, I highly suggest you take a look at the &lt;a href="http://www.pranaframework.org"&gt;Prana Framework&lt;/a&gt;. Its made a huge difference in the flexibility and extensibility of the Flex product I'm currently working on. Plus, you'll be able to handle mediator initialization in seconds with one class. :)&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-8484378723810513271?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/8484378723810513271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=8484378723810513271&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8484378723810513271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8484378723810513271'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2008/06/using-di-to-add-puremvc-mediator-in.html' title='Using DI to add a PureMVC Mediator in Flex'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-2233765187997505861</id><published>2008-04-27T04:38:00.000-07:00</published><updated>2008-04-27T07:50:41.101-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='China'/><title type='text'>Cantonese = Tasty</title><content type='html'>We grabbed a little late night snack after the evenings festivities at a local Cantonese restaurant. You can think of this place as the "diner food" of China. Very popular with the post bar/club crowd around 3am.&lt;br /&gt;&lt;br /&gt;First up was a little duck.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_5tvmGcWqEn4/SBRnsd1OyiI/AAAAAAAAAG0/oUoJesocniU/s1600-h/IMG0023A.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_5tvmGcWqEn4/SBRnsd1OyiI/AAAAAAAAAG0/oUoJesocniU/s320/IMG0023A.jpg" alt="" id="BLOGGER_PHOTO_ID_5193890283884825122" border="0" /&gt;&lt;/a&gt;Actually, duck beak would be a little more accurate. It had been prepared in a spicy red sauce. If you don't mind spending hours gnawing at your food, this is a perfect snack (very bony).&lt;br /&gt;&lt;br /&gt;Next we have carrot cake, no not that carrot cake.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_5tvmGcWqEn4/SBRof91OyjI/AAAAAAAAAG8/bIkEs4LbJsE/s1600-h/IMG0024A.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_5tvmGcWqEn4/SBRof91OyjI/AAAAAAAAAG8/bIkEs4LbJsE/s320/IMG0024A.jpg" alt="" id="BLOGGER_PHOTO_ID_5193891168648088114" border="0" /&gt;&lt;/a&gt;This is actually a tuber best known from Vietnam and Laos. Its the closest thing you get to a potato in Shanghai. A little sweet with just the right amount of starch. Delicious.&lt;br /&gt;&lt;br /&gt;Below you can see a rice paste rolled into a cylinder and mixed in a sweet, tangy sauce.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_5tvmGcWqEn4/SBRpl91OykI/AAAAAAAAAHE/6_mQb0BxsM0/s1600-h/IMG0025A.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_5tvmGcWqEn4/SBRpl91OykI/AAAAAAAAAHE/6_mQb0BxsM0/s320/IMG0025A.jpg" alt="" id="BLOGGER_PHOTO_ID_5193892371238931010" border="0" /&gt;&lt;/a&gt;The overall effect is very pleasing. Think rice &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;au&lt;/span&gt; gratin.&lt;br /&gt;&lt;br /&gt;While I didn't have high expectation for Shanghai's culinary experience. I've been very surprised by the range of foods I've sampled since arriving here almost a month ago. I can not say all of it has been enjoyable but it certainly has been original (from a US perspective).&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-2233765187997505861?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/2233765187997505861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=2233765187997505861&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2233765187997505861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2233765187997505861'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2008/04/cantonese-tasty.html' title='Cantonese = Tasty'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_5tvmGcWqEn4/SBRnsd1OyiI/AAAAAAAAAG0/oUoJesocniU/s72-c/IMG0023A.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-1774916030592415230</id><published>2008-03-27T17:29:00.000-07:00</published><updated>2008-03-27T17:36:32.533-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><category scheme='http://www.blogger.com/atom/ns#' term='China'/><title type='text'>Traveling on the Lazy</title><content type='html'>One great thing about going to Shanghai from the Eastern US is that you don't have to change your watch.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_5tvmGcWqEn4/R-w8WipM1II/AAAAAAAAAGk/eumnLKxkNzE/s1600-h/Photo+6.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_5tvmGcWqEn4/R-w8WipM1II/AAAAAAAAAGk/eumnLKxkNzE/s320/Photo+6.jpg" alt="" id="BLOGGER_PHOTO_ID_5182583629150999682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just flip it around (assuming you don't have numbers on it!).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_5tvmGcWqEn4/R-w8-CpM1JI/AAAAAAAAAGs/fX-wUTndv1Q/s1600-h/Photo+13.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_5tvmGcWqEn4/R-w8-CpM1JI/AAAAAAAAAGs/fX-wUTndv1Q/s320/Photo+13.jpg" alt="" id="BLOGGER_PHOTO_ID_5182584307755832466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Its exactly a twelve-hour time difference. Brilliant!&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;br /&gt;&lt;br /&gt;PS - this might be my first post of many entitled "Traveling on the Lazy" :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-1774916030592415230?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/1774916030592415230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=1774916030592415230&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1774916030592415230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1774916030592415230'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2008/03/traveling-on-lazy.html' title='Traveling on the Lazy'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_5tvmGcWqEn4/R-w8WipM1II/AAAAAAAAAGk/eumnLKxkNzE/s72-c/Photo+6.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-4906728961865568685</id><published>2008-03-18T13:58:00.000-07:00</published><updated>2008-03-20T10:10:50.449-07:00</updated><title type='text'>Google Code University</title><content type='html'>If you ever wanted to learn more about the tech. behind Google's shimmer, check out their new website &lt;a href="http://code.google.com/edu/"&gt;Google Code University&lt;/a&gt;. Its aimed at students and professors but an individual interested in distributed computing will do just as well.  So far the site has four main sections:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;AJAX Programming&lt;/li&gt;&lt;li&gt;Distributed Systems&lt;/li&gt;&lt;li&gt;Web Security&lt;/li&gt;&lt;li&gt;Languages&lt;/li&gt;&lt;/ul&gt;In each section are tutorials and videos, exposing how Google is using these technologies/techniques and how you can give them a try too. A fun website if you've got some ambition and a little free time.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-4906728961865568685?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/4906728961865568685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=4906728961865568685&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4906728961865568685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4906728961865568685'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2008/03/google-code-university.html' title='Google Code University'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-1615229134972653703</id><published>2008-03-18T13:06:00.000-07:00</published><updated>2008-03-18T13:27:54.717-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>On the road to Shanghai...</title><content type='html'>I left Pier almost a month ago now. Since then I've been skiing, pub-crawling (NYC for St. Patty's Day), concert going, and traveling up and down the eastern seaboard. Time off is great but after a while it can get to be too much and you need to get back to what you love.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://your-austin-dwi.com/Shanghai.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://your-austin-dwi.com/Shanghai.jpg" alt="" border="0" /&gt;&lt;/a&gt; So, next week I'm starting my new job at &lt;a href="http://www.reigndesign.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ReignDesign&lt;/span&gt;&lt;/a&gt; in Shanghai, China. I'm extremely excited about this move. New language, culture, city, company...and the list goes on. Reign has a great Flash development team, I can't wait to get across the pond and meet everyone. As always, I'll be working to push the boundaries of Flash and thin client GUI design.&lt;br /&gt;&lt;br /&gt;For all my friends and family in the US, I'll miss you guys but you're always welcome to come over and visit (mere ~18 hour flight). Wish me luck.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-1615229134972653703?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/1615229134972653703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=1615229134972653703&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1615229134972653703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1615229134972653703'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2008/03/on-road-to-shanghai.html' title='On the road to Shanghai...'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-3508082333531098100</id><published>2008-02-24T22:19:00.000-08:00</published><updated>2008-02-24T22:29:07.866-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Full Open Source Flex 3 SDK Released</title><content type='html'>The full source for the Flex 3 SDK was just released on Adobe's new open source wiki. Check it out if you're so inclined: &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/"&gt;http://opensource.adobe.com/wiki/display/flexsdk/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There were two surprises on the website:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You can view Actionscript source for the AIR specific classes in Flex&lt;/li&gt;&lt;li&gt;There's a section on Flex 4 (codename Gumbo) with some bug details&lt;/li&gt;&lt;/ol&gt;Cheers,&lt;br /&gt;Todd&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;PS - Flex 3 and AIR 1.0 have just shipped. &lt;/span&gt;&lt;span&gt;I think the post script topped the actual post...&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-3508082333531098100?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/3508082333531098100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=3508082333531098100&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3508082333531098100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3508082333531098100'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2008/02/full-open-source-flex-3-sdk-released.html' title='Full Open Source Flex 3 SDK Released'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-6746136891955606949</id><published>2008-02-13T19:20:00.000-08:00</published><updated>2008-02-16T12:45:06.735-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AS3'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Synchronous Service Calls in AS3</title><content type='html'>Tired of dealing with an asynchronous services in Flex? Here's a solution that can be helpful in certain situations.&lt;br /&gt;&lt;br /&gt;Start off with a simple user interface bound to a &lt;a href="http://www.google.com/url?sa=t&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Flabs.adobe.com%2Fwiki%2Findex.php%2FCairngorm&amp;amp;ei=48azR8ucIIXoed2_2IYD&amp;amp;usg=AFQjCNEvKWilkRZ2ICxY1G7-JRNGqvDGqg&amp;amp;sig2=n95oBpBjJAIb0LZZ6TwgDg"&gt;Cairngorm-style&lt;/a&gt;    ModelLocator Singleton:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;mx:Grid dataProvider="{ModelLocator.getInstance().myDP}"/&amp;gt;&lt;br /&gt;&amp;lt;mx:Button label="Click here" click="dispatchEvent(new Event('getDP'))" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then Create a Controller Class that listens for the click event and calls a service:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class SimpleController{&lt;br /&gt;&lt;br /&gt;function SimpleController(){&lt;br /&gt; Application.application.AboveViewHere.addEventListener('getDP', onGetDP );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function onGetDP ( e:Event ):void{&lt;br /&gt;  var dpService:DPService= new DPService();&lt;br /&gt;  ModelLocator.getInstance().myDP= dpService.getDP();//binds ArrayCollection reference from service to ModelLocator&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Finally here's the service Class:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class DPService(){&lt;br /&gt;&lt;br /&gt;function DPService(){}&lt;br /&gt;&lt;br /&gt;private var data:ArrayCollection;&lt;br /&gt;public function getDP(){&lt;br /&gt; var loader:URLLoader = new URLLoader();&lt;br /&gt;     loader.addEventListener("complete", onComplete);&lt;br /&gt;     loader.load(new URLRequest("someURL.aSweetExtension"));&lt;br /&gt;&lt;br /&gt;  data = new ArrayCollection();//create the ArrayCollection reference here&lt;br /&gt;&lt;br /&gt;  return data;//return the reference to the controller&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function onComplete( e:Event ):void{//get called when the service returns&lt;br /&gt;  var loader:URLLoader = e.target as URLLoader;&lt;br /&gt;      //loop over returned data and populate ArrayCollection&lt;br /&gt;      for each( var xml:XML in loader.data.items ){&lt;br /&gt;          data.addItem( xml.someProperty );//add data to ArrayCollection&lt;br /&gt;      }&lt;br /&gt; //no need to return anything or dispatch an Event&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Using this approach, you don't need to handle services asynchronously because of intelligent object reference management. We created the reference to the resulting data in the call to "getDP", Flex's data binding system will take care of the rest for us. This is a handy approach if you're binding the data directly to the UI since it can greatly simplify your controllers. In a situation where there's an error with the service, you can localize your error handling to one function in the controller in most situations.&lt;br /&gt;&lt;br /&gt;Happy coding.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;br /&gt;&lt;br /&gt;PS - I'm using Singleton's here for simplicity of the example. I don't suggest using them this way in an actual application. Proper MVC architecture wasn't within the scope of this article. Check out &lt;a href="http://www.google.com/url?sa=t&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fpuremvc.org%2F&amp;amp;ei=E8ezR7TmJJm2eqGV2PUC&amp;amp;usg=AFQjCNGVKCRCouwoQWu3eGrO6cMgqpzfNw&amp;amp;sig2=ut9N5qv0fJmkoNk6-fT17Q"&gt;PureMVC&lt;/a&gt;, if you interested in learning more about Flex/AS3 architecture.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-6746136891955606949?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/6746136891955606949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=6746136891955606949&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6746136891955606949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6746136891955606949'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2008/02/synchronous-service-calls-in-as3.html' title='Synchronous Service Calls in AS3'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-1007355607042010660</id><published>2008-01-27T16:06:00.000-08:00</published><updated>2008-01-27T19:40:22.835-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sprouts'/><title type='text'>Automation Tooling in Flash</title><content type='html'>For a long time flash has been the realm of small to mid sized marketing projects. Something that provides a rich interactive experience on the web, difficult to parallel with any other medium. Since the average Flash developer is more designer than developer, true application-grade tooling has been seriously lacking. Items like build tools, unit testing automation suites, source code/package management are all notably lacking. That is until now. If you're developing with either Flash or Flex I encourage you to check out &lt;a href="http://code.google.com/p/projectsprouts/"&gt;Project Sprouts&lt;/a&gt;. Here's the tagline:&lt;br /&gt;&lt;blockquote&gt;Sprouts is an open-source, cross-platform project generation and configuration tool for ActionScript 2, ActionScript 3, Adobe AIR and Flex projects.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The project is on the verge of a 1.0 release, which has the potential to revolutionize the way your develop applications in Flash. I'm actually a member of the Core Team working a new website to help newcomers become productive quickly. It should be accessible in the next three weeks at &lt;a href="http://www.blogger.com/www.projectsprouts.com"&gt;www.projectsprouts.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-1007355607042010660?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/1007355607042010660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=1007355607042010660&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1007355607042010660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1007355607042010660'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2008/01/automation-tooling-in-flash.html' title='Automation Tooling in Flash'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-8764233831430483138</id><published>2007-12-12T20:16:00.000-08:00</published><updated>2007-12-12T20:32:33.938-08:00</updated><title type='text'>ADOBE, Adobe, adobe...</title><content type='html'>Two quick notes on Adobe. First, They've revamped their website...and damn does it look sweet. &lt;a href="http://www.adobe.com/"&gt;Check it out&lt;/a&gt;. Second, I noticed a side note in the Flex 3 tracking log a couple weeks ago that mentioned something about "Blaze &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;DS&lt;/span&gt;". The name sounded pretty intriguing to me at the time but I didn't have any details to go on. Today they finally issued a press release, it appears Blaze &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;DS&lt;/span&gt; is an open source Data Service manager, a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Lifecycle&lt;/span&gt; Data Services-Light (that's a mouthful). The platform will provide Remote Object access to new server-side languages (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;PHP&lt;/span&gt;, Ruby, etc.), basic data-push, and syncing functionality to Flex 3 (still in beta). No word on its level of integration with Flex 2, the most current full-release of Flex. This should open the door to a larger "open source" crowd that might have been dissuaded from using Flex without an integrated server-side component. Looks like another solid move by Adobe to bolster their development ranks, we'll see how it plays out as more information becomes available.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;br /&gt;&lt;br /&gt;PS - This information comes from a number of scatter sources so forgive any misinformation I might be spreading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-8764233831430483138?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/8764233831430483138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=8764233831430483138&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8764233831430483138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8764233831430483138'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/12/two-quick-notes-on-adobe.html' title='ADOBE, Adobe, adobe...'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-275358556643021883</id><published>2007-11-16T08:48:00.000-08:00</published><updated>2007-11-16T08:54:58.496-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Pier Developer Blog Listing...</title><content type='html'>Developer Post Round-Up:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a class="__feedview__feedItemUnreadTitleLink" href="http://feeds.pierinc.com/~r/PierDevelopersBlog/~3/184734067/"&gt;Flex 3 SDK Development&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="__feedview__feedItemUnreadTitleLink" href="http://feeds.pierinc.com/~r/PierDevelopersBlog/~3/180970163/"&gt;Dealing with Build Times in AIR&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="__feedview__feedItemUnreadTitleLink" href="http://feeds.pierinc.com/~r/PierDevelopersBlog/~3/175459404/"&gt;Creating and using an mx_internal style Namespace&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="__feedview__feedItemUnreadTitleLink" href="http://feeds.pierinc.com/~r/PierDevelopersBlog/~3/175505689/"&gt;Debugging Basics in Flex 3 (beta)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="__feedview__feedItemUnreadTitleLink" href="http://feeds.pierinc.com/~r/PierDevelopersBlog/~3/163572932/"&gt;Error Logging with AJAX&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="__feedview__feedItemUnreadTitleLink" href="http://feeds.pierinc.com/~r/PierDevelopersBlog/~3/164555977/"&gt;HTML Reporting in AIR&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Not all these posts are mine but most of them are.&lt;/p&gt;&lt;p&gt;Cheers,&lt;/p&gt;&lt;p&gt;Todd&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-275358556643021883?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/275358556643021883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=275358556643021883&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/275358556643021883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/275358556643021883'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/11/pier-developer-blog-listing.html' title='Pier Developer Blog Listing...'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-8740162196003143282</id><published>2007-11-07T19:12:00.000-08:00</published><updated>2007-11-07T19:24:44.473-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>The Gmail Upgrade Has Arrived...</title><content type='html'>...at least for me. I'm not sure if everyone can see it yet. Below is a sneak peek ofa the new Contact Manager. If you're working in a small shop it looks like it can be a decent little CRM.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_5tvmGcWqEn4/RzJ_l3P53-I/AAAAAAAAAGM/sBz0SJ9HnAU/s1600-h/new_gmail.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_5tvmGcWqEn4/RzJ_l3P53-I/AAAAAAAAAGM/sBz0SJ9HnAU/s400/new_gmail.PNG" alt="" id="BLOGGER_PHOTO_ID_5130303213990961122" border="0" /&gt;&lt;/a&gt;As for the main interface, not a whole lot has changed except for the inclusion of a dropdown menu.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_5tvmGcWqEn4/RzKAhHP53_I/AAAAAAAAAGU/xhNkCsvrq1g/s1600-h/new_gmail2.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_5tvmGcWqEn4/RzKAhHP53_I/AAAAAAAAAGU/xhNkCsvrq1g/s400/new_gmail2.PNG" alt="" id="BLOGGER_PHOTO_ID_5130304231898210290" border="0" /&gt;&lt;/a&gt;The interface changes are nice but the main upgrade is speed. You'd almost think this is running on the desktop, near seamless experience. They actually prompted me to shut off Firebug just so it wouldn't ruin the experience. The Net Monitor intercepts all the incoming requests slowing things down a bit.&lt;br /&gt;&lt;br /&gt;I'm sure I'm missing a couple items but that's all I have to report for now. Hope you get to check it out soon!&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-8740162196003143282?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/8740162196003143282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=8740162196003143282&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8740162196003143282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8740162196003143282'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/11/gmail-upgrade-has-arrived.html' title='The Gmail Upgrade Has Arrived...'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_5tvmGcWqEn4/RzJ_l3P53-I/AAAAAAAAAGM/sBz0SJ9HnAU/s72-c/new_gmail.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-6385964680812717110</id><published>2007-11-06T19:54:00.000-08:00</published><updated>2007-11-07T08:18:24.101-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Basecamp JS Injection</title><content type='html'>I've used Basecamp on and off for a couple years now. Generally, I thought it was a great application: secure, well-designed, simple &amp;amp; efficient. That is until I ran into this little beauty today.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_5tvmGcWqEn4/RzE38RC8WpI/AAAAAAAAAFs/TFNymHerVbI/s1600-h/basecamp_hack.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5129942959059131026" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://bp0.blogger.com/_5tvmGcWqEn4/RzE38RC8WpI/AAAAAAAAAFs/TFNymHerVbI/s400/basecamp_hack.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In case you can't figure out what you're looking at, thats a lightbox with an Iframe pointing to pierinc.tickspot.com. No, that's not a new feature for Basecamp that you missed out on. One of my colleagues, today, noted that he could enter HTML into the Todo list. Immediately, I was like uh-oh...I wonder if I can....out come the &amp;lt;script&amp;gt; tags. You can insert html script tags right into the Todo list and it doesn't get sanitized. A little scary if you use Basecamp for larger projects, perhaps with a developer you don't completely trust.&lt;br /&gt;&lt;br /&gt;After a little inspection of the DOM and playing around, I "mashed up" tickspot, our time tracking application, with basecamp so I can kill two birds w/ one stone. Beyond the security risk, this could actually be kinda fun. Tossing anything I want onto my Basecamp page for easy access. I still think Basecamp is a great application but this a serious no no. I had higher expectation from the 37Signals folks than this (perhaps its a feature...lol).&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;br /&gt;&lt;br /&gt;PS-I don't have a picture of it but the first thing I did was animate all the &amp;lt;div&amp;gt; tags. I had them flying all around the page...great way to freak out your boss ;)&lt;br /&gt;&lt;br /&gt;***Update***&lt;br /&gt;37Signals Support responded with this message:&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;Basecamp intentionally allows HTML (and JavaScript) because many ofour&lt;br /&gt;users find great value in being able to use that. We're fullyaware that this&lt;br /&gt;allows for XSS attacks, but Basecamp is based on thenotion of trusted parties.&lt;br /&gt;You should only allow people into thesystem that you believe won't hack your&lt;br /&gt;system (just as you shouldonly invite people into your office that you don't&lt;br /&gt;believe will stealfrom you). If your friend becomes a foe, you can revoke their&lt;br /&gt;accountand change your login credentials. Just like you would simply not letthem&lt;br /&gt;into your office.&lt;br /&gt;&lt;br /&gt;If this was a public system, it would definitely be different. You can't&lt;br /&gt;have a public forum today without carefully dealing with XSS issues.&lt;br /&gt;&lt;br /&gt;In the 3+ years we've operated Basecamp, we've never had a single suchcase&lt;br /&gt;occur, though. So it doesn't seem like it's a big problem. And I know many of&lt;br /&gt;our customers would scream murder if we removed the option to use HTML in their&lt;br /&gt;messages, as they've become accustomed toover the past 3+ years.&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;I'm not sure I total agree with the sentiment of leaving security up to your users but its certainly a refreshing change from the pervasive concept of the "low-trust" internet.&lt;/p&gt;&lt;p&gt;==&gt;If you're into javascript...hack away!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-6385964680812717110?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/6385964680812717110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=6385964680812717110&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6385964680812717110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6385964680812717110'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/11/basecamp-js-injection.html' title='Basecamp JS Injection'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_5tvmGcWqEn4/RzE38RC8WpI/AAAAAAAAAFs/TFNymHerVbI/s72-c/basecamp_hack.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-323458600593655756</id><published>2007-11-02T18:10:00.000-07:00</published><updated>2007-11-02T18:33:29.890-07:00</updated><title type='text'>Shakakai.com</title><content type='html'>If you're wondering why I haven't been posting here as often as I used to, I've been tied up on my new website &lt;a href="http://www.shakakai.com"&gt;Shakakai.com&lt;/a&gt;. Its a site that was created with two main goals:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;To aggregate all the content I'm generating over the web, be it blog posts, tweets, del.icio.us or digg tags, and a host of social website content.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;As an experiment into using Google as Content Delivery Network ( commonly referred to as a CDN)&lt;/li&gt;&lt;/ol&gt;The former point isn't particularly groundbreaking, everyone is cranking out mashups nowadays. The latter is a radical restructuring of how a website is built. Rather than construct and consume services for my own view layer, I'm capturing all the dynamic content for the site in RSS feeds. Then using Google's AJAX feed API, I'm using request the content from Google rather than my own server. As long as I optimize my JavaScript code, I should see a massive reduction in the bandwidth consumed per visit (in theory). This loose coupling of data from the view also serves to enforce proper MVC development practices while moving much of the application logic to the client.&lt;br /&gt;&lt;br /&gt;There's a couple things I need to watch out for taking this approach:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Accessibility - When building out the view, you need to actively review the accessibility of the markup you're using. Its very easy to blow off the standards when you're waist deep in JavaScript.&lt;/li&gt;&lt;li&gt;Load Time - Minimize the amount of JS that gets loaded up front so the initial load time appears extra snappy. Then switch over to on-demand loading for any additional functionality (e.g. a "donate now" button)&lt;/li&gt;&lt;/ol&gt;The site is still in its infant stages but I hope to make a major dent in the development effort by the end of the weekend. So check in sometime next week: &lt;a href="http://www.shakakai.com"&gt;www.shakakai.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-323458600593655756?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/323458600593655756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=323458600593655756&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/323458600593655756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/323458600593655756'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/11/shakakaicom.html' title='Shakakai.com'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-8618774782808924940</id><published>2007-10-26T13:52:00.001-07:00</published><updated>2007-10-26T13:53:35.986-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>The Developer Blog's Alive!</title><content type='html'>We've got some hot post action over at the Pier Dev Blog. Swing over and check it out.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developers.pierinc.com/"&gt;http://developers.pierinc.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-8618774782808924940?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/8618774782808924940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=8618774782808924940&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8618774782808924940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8618774782808924940'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/10/developer-blogs-alive.html' title='The Developer Blog&apos;s Alive!'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-2809476212647798825</id><published>2007-10-01T17:22:00.000-07:00</published><updated>2007-10-01T17:34:44.193-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Pier Interactive Developer Blog</title><content type='html'>My company, &lt;a href="http://www.pierinc.com/"&gt;Pier Interactive&lt;/a&gt;, just launched a developer blog. We're still working to fill out the content but if you're looking for more advanced articles on Flex and AIR it should be a superb resource. I currently have two posts up:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://developers.pierinc.com/#article=58DBC50D-9C36-CA4D-AC0A7025B107A1FB"&gt;HTML Reporting in Adobe AIR&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developers.pierinc.com/#article=58280F4E-B1C6-121F-DBD90F90F5B922B2"&gt;Client-Side Error Logging with AJAX&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Speaking of developer articles, was anyone else let down by the extremely basic tutorials up on the new &lt;a href="http://www.adobe.com/devnet/"&gt;Adobe Developer Connection&lt;/a&gt;? I know AIR is still technically "new" but Flex definitely isn't. Where's the Enterprise-grade development posts?  --&gt;  &lt;a href="http://developers.pierinc.com/"&gt;http://developers.pierinc.com&lt;/a&gt;  (that's right I plugged it twice, I'm shameless).&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-2809476212647798825?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/2809476212647798825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=2809476212647798825&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2809476212647798825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2809476212647798825'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/10/pier-interactive-developer-blog.html' title='Pier Interactive Developer Blog'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-3258763426079099998</id><published>2007-09-07T19:55:00.000-07:00</published><updated>2007-09-07T20:21:21.901-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><title type='text'>RIP CFDJ</title><content type='html'>If you're a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ColdFusion&lt;/span&gt; developer, then its a safe assumption you've visited the &lt;a href="http://coldfusion.sys-con.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;ColdFusion&lt;/span&gt; Developer's Journal&lt;/a&gt; on &lt;a href="http://www.sys-con.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Sys&lt;/span&gt;-Con&lt;/a&gt;. Over the past year, their frequency and quality of posts has been on the decline (perhaps in conjunction with their readership). Adobe took notice and recently pulled their support from the publication. Apparently that was the final nail in the coffin because &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Sys&lt;/span&gt;-Con just &lt;a href="http://coldfusion.sys-con.com/read/426141.htm"&gt;announced &lt;/a&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;CFDJ&lt;/span&gt; has been axed.&lt;br /&gt;&lt;br /&gt;The quality of their content aside, I'm a little surprised Adobe allowed this to happen.  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;CFDJ&lt;/span&gt; was the premier &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;ColdFusion&lt;/span&gt; publication and really the only one that comes to mind as I'm writing this article. Is this a reflection of Adobe's commitment to CF or just a fitting end to a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;subpar&lt;/span&gt; journal?  I don't mean any offense to the authors of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;CFDJ&lt;/span&gt;. There's a long list of great reads from the journal, over the years, but lets face facts. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Sys&lt;/span&gt;-Con's user experience is probably the worst of any website I'll admit to frequenting. Perhaps a new blog with a better format and design will fill its place (hint, hint). Check in with &lt;a href="http://www.pierinc.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;pierinc&lt;/span&gt;.com&lt;/a&gt; in the next week for all the info.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-3258763426079099998?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/3258763426079099998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=3258763426079099998&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3258763426079099998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3258763426079099998'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/09/rip-cfdj.html' title='RIP CFDJ'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-9142306795160046341</id><published>2007-08-26T19:24:00.000-07:00</published><updated>2007-08-26T20:14:35.038-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Client-Side Error Logging</title><content type='html'>If you've done any amount of server-side scripting (CF, PHP, RoR, .NET, etc.), you already know the benefits of error handling. It allows you to capture unusual, sometimes unforeseen, errors that can occur in your script and handle them gracefully so your users get proper feedback on what just happened. No matter how great a programmer your are, something out of your control will break your code. Its your responsibility to build in a safety net so your users don't break their neck when they step off the correct path.&lt;br /&gt;&lt;br /&gt;Since most developers would generally agree with my sentiment, why don't you see AJAX applications properly handling and logging client-side errors. The application that sticks out for me is Gmail. At least once a week I'll see a host of non-fatal errors pop up. Why? Can't errors that bubble up to the application scope be captured? Yes.&lt;br /&gt;&lt;br /&gt;Be better than Google. Here's how:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var ErrorLogger = Class.create();&lt;br /&gt;ErrorLogger.prototype = {&lt;br /&gt; initialize: function(url, opts){&lt;br /&gt;  this.url = url;&lt;br /&gt;  this.active = true;&lt;br /&gt;  this.opts = opts;&lt;br /&gt;  window.onerror = this.onError.bind(this);&lt;br /&gt; },&lt;br /&gt; onError: function(msg, URI, line){&lt;br /&gt;  try{&lt;br /&gt;   if(this.active){&lt;br /&gt;    var body = 'URI=' + escape(URI) + '&amp;line=' + line + '&amp;amp;msg=' + escape(msg) + '&amp;brw=' + escape(Object.toJSON(Prototype.Browser)) + '&amp;amp;pv=' + escape(Prototype.Version);&lt;br /&gt;    if('onError' in this.opts)this.opts.onError.apply(this, arguments);&lt;br /&gt;    var opts = {&lt;br /&gt;     onSuccess : this.onSuccess.bind(this),&lt;br /&gt;     onFailure : this.onComplete,&lt;br /&gt;     postBody : body&lt;br /&gt;    };&lt;br /&gt;    new Ajax.Request(this.url, opts);&lt;br /&gt;   }&lt;br /&gt;  }catch(e){&lt;br /&gt;   this.onFailure();&lt;br /&gt;  }&lt;br /&gt;  return true;&lt;br /&gt; },&lt;br /&gt; onSuccess: function(){&lt;br /&gt;  if('onSuccess' in this.opts)this.opts.onSuccess.apply(this, arguments);&lt;br /&gt; },&lt;br /&gt; onFailure: function(){&lt;br /&gt;  this.active = false;&lt;br /&gt;  if('onFailure' in this.opts)this.opts.onFailure.apply(this, arguments);&lt;br /&gt; }&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;What's it doing? Well, first off this is a &lt;a href="http://www.prototypejs.org/api/class"&gt;Prototype Class&lt;/a&gt; so you need to include &lt;a href="http://www.prototypejs.org/download"&gt;prototype.js&lt;/a&gt; in order to use it. Here's the breakdown:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The window.onerror event is set to call ErrorLogger.onError. When an unhandled error bubbles up to the window scope, onError will be called to handle it.&lt;/li&gt;&lt;li&gt;Three arguments are passed into the onError function ( msg, URI, line ) and an Ajax request with some additional browser information is constructed and posted to the URL specified in the constructor.&lt;/li&gt;&lt;li&gt;Lastly, the onError function returns true so the browser knows to disregard the error.&lt;/li&gt;&lt;/ol&gt;Can you just show the syntax for use? No prob.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt; &amp;lt;title&amp;gt;Logger Test&amp;lt;/title&amp;gt;&lt;br /&gt; &amp;lt;script type="text/javascript" src="prototype.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt; &amp;lt;script type="text/javascript" src="ErrorLogger.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt; &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;  var er;&lt;br /&gt;  var init = function(){&lt;br /&gt;   er = new ErrorLogger('TestResult.html',&lt;br /&gt;   {&lt;br /&gt;    onSuccess : function()&lt;br /&gt;    {&lt;br /&gt;     $('btn').setStyle({'backgroundColor' : 'red'});&lt;br /&gt;    },&lt;br /&gt;    onError : function()&lt;br /&gt;    {&lt;br /&gt;     alert('An error occurred on the page. Run for your life!');&lt;br /&gt;    }&lt;br /&gt;   });&lt;br /&gt;  };&lt;br /&gt; &amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body onload="init()"&amp;gt;&lt;br /&gt; &amp;lt;button id="btn" onclick="nonExistentFunction()"&amp;gt;Throw Error&amp;lt;/button&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;When you click on the button labeled "Throw Error", the ErrorLogger class will gracefully handle the error and post some useful debug information to your server. From there you can do whatever you want. Personally, I just toss it in a log file that I monitor. All that in less than 1KB, not bad.&lt;br /&gt;&lt;br /&gt;I've tested it on IE6/7 and FF2. Its definitely not production ready quite yet but I'll throw an update up with my final version in a day or two.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-9142306795160046341?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/9142306795160046341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=9142306795160046341&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/9142306795160046341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/9142306795160046341'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/08/client-side-error-logging.html' title='Client-Side Error Logging'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-6360519652034999542</id><published>2007-08-23T15:40:00.000-07:00</published><updated>2007-08-23T17:09:24.663-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Useful'/><category scheme='http://www.blogger.com/atom/ns#' term='RSS'/><title type='text'>Add A Blog Search Feed to Google Reader</title><content type='html'>If you're like me your &lt;s&gt;Google Reader&lt;/s&gt; RSS Feed Reader is filled with great blogs site ( &lt;a href="http://www.lifehacker.com/"&gt;Lifehacker&lt;/a&gt;, &lt;a href="http://www.mashable.com/"&gt;Mashable&lt;/a&gt;, &lt;a href="http://www.techmeme.com/"&gt;Techmeme&lt;/a&gt;, etc.) While I'm not ditching any of my favorite web filters, sometimes I want to get my information direct from the source, or just another source. Here's a handy trick to keep you ahead of the curve.&lt;br /&gt;&lt;br /&gt;Go to &lt;a href="http://blogsearch.google.com/blogsearch?hl=en&amp;tab=wb&amp;amp;amp;amp;amp;q=Adobe+Air&amp;amp;btnG=Search+Blogs"&gt;Google's Blog Search&lt;/a&gt;. Note the RSS/ATOM links on the side. Toss those in your Feed Reader and you're ready to go.&lt;br /&gt;&lt;br /&gt;Oh, did I say this was difficult and time consuming? Definitely not.&lt;br /&gt;&lt;br /&gt;Very useful? You know it.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;br /&gt;&lt;br /&gt;PS - Depending on the search query, you may run into some spam. Play around w/ the advanced search options to get things working right.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-6360519652034999542?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/6360519652034999542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=6360519652034999542&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6360519652034999542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6360519652034999542'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/08/add-blog-search-feed-to-google-reader.html' title='Add A Blog Search Feed to Google Reader'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-7292682682117628954</id><published>2007-08-21T15:41:00.001-07:00</published><updated>2007-08-21T15:43:45.288-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Got Some Free Time?</title><content type='html'>Great list of top notch Flash sites: &lt;a href="http://flashprayer.blogspot.com/"&gt;http://flashprayer.blogspot.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Steer clear during work hours...lest your lose your whole day (which may or may not be a good thing).&lt;br /&gt;&lt;br /&gt;:)&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;br /&gt;&lt;br /&gt;PS - AIR Tour on Friday in Boston.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-7292682682117628954?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/7292682682117628954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=7292682682117628954&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7292682682117628954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7292682682117628954'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/08/got-some-free-time.html' title='Got Some Free Time?'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-8299025994372001299</id><published>2007-08-13T17:45:00.000-07:00</published><updated>2007-09-02T21:24:37.847-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>Designer//Slash//Model</title><content type='html'>&lt;embed src="http://designerslashmodel.com/images/designermodel.mov" autoplay="false" height="375" width="450"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Simply awesome.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Enjoy!&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Check out the &lt;a href="http://designerslashmodel.com/"&gt;source&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-8299025994372001299?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/8299025994372001299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=8299025994372001299&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8299025994372001299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8299025994372001299'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/08/designerslashmodel.html' title='Designer//Slash//Model'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-4833881036137970782</id><published>2007-08-07T19:10:00.000-07:00</published><updated>2007-08-07T20:09:42.373-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><title type='text'>Code Highlighting</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_5tvmGcWqEn4/RrknO9M7DKI/AAAAAAAAAFk/z9NREG9mHsg/s1600-h/syntax-highlighting.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_5tvmGcWqEn4/RrknO9M7DKI/AAAAAAAAAFk/z9NREG9mHsg/s320/syntax-highlighting.PNG" alt="" id="BLOGGER_PHOTO_ID_5096147591246843042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you're in the market for a code highlighter, I just ran into a good one that handles PHP, Java, Javascript, Perl, SQL, HTML, and CSS. To rock this on your blog/website, all you need to do is include the &lt;a href="http://www.codepress.org/download/codepress-v.0.9.5.zip"&gt;javascript source&lt;/a&gt; in you page header and add a textarea tag like so:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;textarea id="myCpWindow" class="codepress javascript linenumbers-off"&amp;gt;&lt;br /&gt;// your code here&lt;br /&gt;&amp;lt;/textarea&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Notice the language to be highlighted is included in the class declaration. There's a couple other useful features (such as copying code to the user's clipboard) that can be found &lt;a href="http://www.codepress.org/install.php"&gt;here&lt;/a&gt;. To make life even easier, I've written up a quick ColdFusion custom tag to create the textarea declaration and include the appropriate content (sorry, non-CF users). Here's the code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;CFSETTING enablecfoutputonly="true"&amp;gt;&lt;br /&gt;&amp;lt;CFIF ThisTag.ExecutionMode eq "Start"&amp;gt;&lt;br /&gt;&amp;lt;cfparam name="attributes.language" type="string"&amp;gt;&amp;lt;!--- Language to Highlight ---&amp;gt;&lt;br /&gt;&amp;lt;cfparam name="attributes.file" type="string"&amp;gt;&amp;lt;!--- relative file path ---&amp;gt;&lt;br /&gt;&amp;lt;cfparam name="attributes.readOnly" type="boolean" default="false"&amp;gt;&lt;br /&gt;&amp;lt;cfparam name="attributes.lineNumbers" type="boolean" default="true"&amp;gt;&lt;br /&gt;&amp;lt;cfparam name="attributes.autoComplete" type="boolean" default="false"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;cfset attriList = "language,file,readOnly,lineNumbers,autoComplete"&amp;gt;&lt;br /&gt;&amp;lt;cfset attriKey = StructKeyList(attributes)&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;CFTRY&amp;gt;&lt;br /&gt; &amp;lt;CFFILE action="read"&lt;br /&gt;   file="#ExpandPath(attributes.file)#"&lt;br /&gt;   variable="fileResult"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;CFCATCH type="any"&amp;gt;&lt;br /&gt;  &amp;lt;CFTHROW detail="Double check the file location. The error occurred trying reading the specified filed."&amp;gt;&lt;br /&gt; &amp;lt;/CFCATCH&amp;gt;&lt;br /&gt;&amp;lt;/CFTRY&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;CFOUTPUT&amp;gt;&amp;lt;textarea class='codepress&amp;lt;/CFOUTPUT&amp;gt;&lt;br /&gt;&amp;lt;CFIF attributes.readOnly&amp;gt;&amp;lt;CFOUTPUT&amp;gt; readonly-on &amp;lt;/CFOUTPUT&amp;gt;&amp;lt;/CFIF&amp;gt;&lt;br /&gt;&amp;lt;CFIF NOT attributes.lineNumbers&amp;gt;&amp;lt;CFOUTPUT&amp;gt; linenumbers-off &amp;lt;/CFOUTPUT&amp;gt;&amp;lt;/CFIF&amp;gt;&lt;br /&gt;&amp;lt;CFIF NOT attributes.autoComplete&amp;gt;&amp;lt;CFOUTPUT&amp;gt; autocomplete-off &amp;lt;/CFOUTPUT&amp;gt;&amp;lt;/CFIF&amp;gt;&lt;br /&gt;&amp;lt;CFOUTPUT&amp;gt;'&amp;lt;/CFOUTPUT&amp;gt;&lt;br /&gt;&amp;lt;CFLOOP from="1" to="#ListLen(attriKey)#" index="aIndex"&amp;gt;&lt;br /&gt; &amp;lt;CFIF NOT ListFindNoCase(attriList, ListGetAt(attriKey,aIndex))&amp;gt;&lt;br /&gt;  &amp;lt;CFOUTPUT&amp;gt; #ListGetAt(attriKey,aIndex)#='#attributes[ListGetAt(attriKey,aIndex)]#' &amp;lt;/CFOUTPUT&amp;gt;&lt;br /&gt; &amp;lt;/CFIF&amp;gt;&lt;br /&gt;&amp;lt;/CFLOOP&amp;gt;&lt;br /&gt;&amp;lt;CFOUTPUT&amp;gt;&gt;#fileResult#&amp;lt;/textarea&gt;&amp;lt;/CFOUTPUT&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/CFIF&amp;gt;&lt;br /&gt;&amp;lt;CFSETTING enablecfoutputonly="false"&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can use the tag like so:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;cf_syntaxify &amp;lt;-- whatever you name the tag --&amp;gt;&lt;br /&gt;   language="ColdFusion"&lt;br /&gt;   file="test.cfm"&lt;br /&gt;   id="testID" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Any attribute you define in the tag that is not param'ed at the top of the custom tag will be passed onto the &amp;lt;textarea&amp;gt; tag. Note the id attribute in the above example.&lt;br /&gt;&lt;br /&gt;There are a couple other code highlighters available, most notably the one released by &lt;a href="http://code.google.com/p/syntaxhighlighter/"&gt;Google&lt;/a&gt;, but the simplicity of CodePress is immediately apparent once you check out the docs. Let me know if you run into any problems w/ the custom tag (I haven't tested it extensively yet).&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-4833881036137970782?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/4833881036137970782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=4833881036137970782&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4833881036137970782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4833881036137970782'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/08/code-highlighting.html' title='Code Highlighting'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_5tvmGcWqEn4/RrknO9M7DKI/AAAAAAAAAFk/z9NREG9mHsg/s72-c/syntax-highlighting.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-1007721571474250996</id><published>2007-08-03T22:03:00.000-07:00</published><updated>2007-08-03T22:24:21.735-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='money'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>The Cross-Over Point AKA FU Money</title><content type='html'>Hackzine has a &lt;a href="http://www.hackszine.com/blog/archive/2007/08/the_fu_money_spreadsheet.html?CMP=OTC-7G2N43923558"&gt;great post&lt;/a&gt; on money management. They discuss the often sought after (little talked about) situation known as FU Money. The point where you earn more in interest on your investments than you spend in living expenses. Its a really simple concept that most people don't think about until they're old and gray (Hackzine begs to differ).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://hackszine.com/fumoney_20070803.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 385px; height: 240px;" src="http://hackszine.com/fumoney_20070803.jpg" alt="" border="0" /&gt;&lt;/a&gt;I've come up with a new response to &lt;span style="font-style: italic;"&gt;"What's fueling this whole Web 2.0 frenzy?"&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;  FU Money&lt;/span&gt;, obviously!&lt;br /&gt;&lt;br /&gt;Have a great weekend.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-1007721571474250996?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/1007721571474250996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=1007721571474250996&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1007721571474250996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1007721571474250996'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/08/cross-over-point-aka-fu-money.html' title='The Cross-Over Point AKA FU Money'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-3553106078738262185</id><published>2007-08-03T19:14:00.000-07:00</published><updated>2007-08-03T19:25:40.660-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><title type='text'>CF8 Logos...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.reybango.com/images/cf8logos/ColdFusion_8_Powered_by_icon_large.png"&gt;&lt;img style="border: 0px none ; margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.reybango.com/images/cf8logos/ColdFusion_8_Powered_by_icon_large.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Rey Bango just posted a bunch of CF8 logos. If you're working on a ColdFusion 8 powered project (I know I am), then you may want to snag one of &lt;a href="http://www.reybango.com/index.cfm/2007/8/1/ColdFusion-8-Powered-By-Logos-Get-Em-While-Theyre-Hot"&gt;these&lt;/a&gt;. I'm hoping to have some info on my *hush* *hush* AIR derby project by Monday.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-3553106078738262185?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/3553106078738262185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=3553106078738262185&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3553106078738262185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3553106078738262185'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/08/cf8-logos.html' title='CF8 Logos...'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-1995392265929418779</id><published>2007-07-28T19:48:00.000-07:00</published><updated>2007-08-01T19:13:10.368-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ning'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Ning :: Full Source Access</title><content type='html'>API's are great from a security standpoint but creativity takes a backseat in the process. What happens when you come up with an idea/concept that the original developer never thought of? With a standard web service, nothing. With Ning, you can write your own API .&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ning.com/help/faq-developers.html"&gt;http://www.ning.com/help/faq-developers.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Perhaps I'm blurring the truth a little bit. Ning doesn't really provide an "API" like other web applications, they've created an application layer that ANY community user can edit. Their API is exposed via PHP, a very untraditional approach to open development that begs the question: if Ning can do it, why can't you? or me? or Google?&lt;br /&gt;&lt;br /&gt;If you could provide all your company's information/resources in a system like Ning, would you?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-1995392265929418779?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/1995392265929418779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=1995392265929418779&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1995392265929418779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1995392265929418779'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/07/ning-full-source-access.html' title='Ning :: Full Source Access'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-2545323035331234304</id><published>2007-07-26T08:22:00.000-07:00</published><updated>2007-10-02T19:35:06.996-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><title type='text'>Drag &amp; Drop in AIR</title><content type='html'>I just ran into a great article by Alastair outlining the use of Native Drag &amp;amp; Drop functionality in AIR (w/ a little RoR mixin). The documentation for Native D&amp;amp;D is very spotty, there are more mistakes then anything else. So, if you haven't learned the hard way yet, let me make your life a little easier: &lt;a href="http://blog.vixiom.com/2007/06/29/merb-on-air-drag-and-drop-multiple-file-upload/"&gt;http://blog.vixiom.com/2007/06/29/merb-on-air-drag-and-drop-multiple-file-upload/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here's a simple test application you can use to get started:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;br /&gt;&amp;lt;mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init(event)"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;mx:Script&gt;&lt;br /&gt;&amp;lt;![CDATA[&lt;br /&gt;import mx.events.DragEvent;&lt;br /&gt;import flash.desktop.DragManager;&lt;br /&gt;import flash.desktop.DragActions;&lt;br /&gt;import flash.events.NativeDragEvent;&lt;br /&gt;import flash.desktop.TransferableFormats;&lt;br /&gt;import flash.filesystem.File;&lt;br /&gt;&lt;br /&gt;private function init(e:Event):void&lt;br /&gt;{&lt;br /&gt; //add the event handlers&lt;br /&gt; this.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, onEnter);&lt;br /&gt; dropPanel.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, onDrop);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function onEnter(event:NativeDragEvent):void&lt;br /&gt;{ &lt;br /&gt; //Check to see if the drag item is the right format&lt;br /&gt; if(event.transferable.hasFormat(TransferableFormats.FILE_LIST_FORMAT))&lt;br /&gt; {&lt;br /&gt;  DragManager.acceptDragDrop(dropPanel);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function onDrop(event:NativeDragEvent):void{&lt;br /&gt;    trace("dropped");&lt;br /&gt; // Cast the drag &amp;amp; drop data as an array&lt;br /&gt; var files:Array = event.clipboard.dataForFormat(flash.desktop.ClipboardFormats.FILE_LIST_FORMAT) as Array;&lt;br /&gt; for each (var f:File in files)&lt;br /&gt;          {&lt;br /&gt;             // check out the file URL&lt;br /&gt;    trace(f.url);&lt;br /&gt;          }&lt;br /&gt;}&lt;br /&gt;]]&gt;&lt;br /&gt;&amp;lt;/mx:Script&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;mx:Panel id="dropPanel"&lt;br /&gt; top="10"&lt;br /&gt; left="10"&lt;br /&gt; height="100"&lt;br /&gt; width="100"&lt;br /&gt; title="Drop Files Here"&lt;br /&gt; backgroundColor="#FFF"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/mx:Panel&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/mx:WindowedApplication&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Also worth a read: &lt;a href="http://coenraets.org/blog/2007/06/air-to-desktop-drag-and-drop-two-simple-utility-classes/"&gt;http://coenraets.org/blog/2007/06/air-to-desktop-drag-and-drop-two-simple-utility-classes/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll let you know why I'm reading up on D&amp;amp;D in a couple days :)&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;br /&gt;&lt;br /&gt;***Updated for AIR Beta 2***&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-2545323035331234304?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/2545323035331234304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=2545323035331234304&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2545323035331234304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2545323035331234304'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/07/drag-drop-in-air.html' title='Drag &amp; Drop in AIR'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-5249721619474763451</id><published>2007-07-22T18:31:00.000-07:00</published><updated>2007-07-22T18:57:18.555-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><title type='text'>CT-CFUG Presentation</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_5tvmGcWqEn4/RqQKK9M7DJI/AAAAAAAAAFc/5UVC7W1nPsw/s1600-h/adobe_air.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp0.blogger.com/_5tvmGcWqEn4/RqQKK9M7DJI/AAAAAAAAAFc/5UVC7W1nPsw/s400/adobe_air.jpg" alt="" id="BLOGGER_PHOTO_ID_5090204662179237010" border="0" /&gt;&lt;/a&gt; Just a quick heads up. JB and I are giving a presentation on Adobe AIR at the &lt;a href="http://www.cfugitives.com/"&gt;Connecticut ColdFusion User Group&lt;/a&gt; on Tuesday night (July 24th, 2007). If you're in the area and up on technology, you might want to think about stopping in for our jam session. I hear there's going to be some free Adobe swag in it.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-5249721619474763451?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/5249721619474763451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=5249721619474763451&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/5249721619474763451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/5249721619474763451'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/07/ct-cfug-presentation.html' title='CT-CFUG Presentation'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_5tvmGcWqEn4/RqQKK9M7DJI/AAAAAAAAAFc/5UVC7W1nPsw/s72-c/adobe_air.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-8623277153243850973</id><published>2007-07-19T20:59:00.000-07:00</published><updated>2007-07-19T21:21:00.781-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>Nokia Didn't See This Use Case Coming</title><content type='html'>Adam Prestin pointed me to this crazy picture earlier today and I had to re-post it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://fusion94.org/images/missed_call.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://fusion94.org/images/missed_call.jpg" alt="" border="0" /&gt;&lt;/a&gt;No this phone wasn't modded out by some &lt;a href="http://www.makezine.com/"&gt;MAKE&lt;/a&gt; afficionado.  Its actually a terrorist/insurgent/{insert political spin here} bomb timer from Iraqi, apparently a very common one too.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Its a good thing they missed the call.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(Thanks Adam)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-8623277153243850973?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/8623277153243850973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=8623277153243850973&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8623277153243850973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8623277153243850973'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/07/nokia-didnt-see-this-use-case-coming.html' title='Nokia Didn&apos;t See This Use Case Coming'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-5163300724669571012</id><published>2007-07-19T06:39:00.000-07:00</published><updated>2007-07-20T20:19:24.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Bubblemark Animation Test Confirms It</title><content type='html'>Alexey Gavrilov compiled a nice set of performance tests for all the major RIA development platforms (Flex, Silverlight, JavaFX, AJAX). Flex (aka Flash) performed like a champ in the browser arena, which isn't horribly surprising considering how long its been around.  Both Flex &amp;amp; Actionscript are up to, or on the way to, version 3.0 and Flash is rocking numero nine. I do have to admit that I'm impressed by Microsoft's progress on Silverlight. After the Flex 2.0 release, they must have recognized the enterprise level development capabilities that Flex brought to the table and jumped right on the issue. If they had taken a look at the &lt;a href="http://neighborhood.symesassociates.com/in/flashindex.html"&gt;crazy flash apps&lt;/a&gt; Pier was doing back in 2001, they might have foreseen this RIA trend long in advance.&lt;br /&gt;&lt;br /&gt;Here are a couple surprises:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JavaFX is 4.4 times slower than Flash.&lt;/li&gt;&lt;li&gt; Firefox + Silverlight (CLR) — 99 fps&lt;/li&gt;&lt;li&gt;Flex and AIR peform at the same speed (as I previous reported)&lt;/li&gt;&lt;/ul&gt;While it looks like Silverlight is going to be a strong contender from a performance standpoint, I'm going to hold my opinion until they release the first non-Windows version.&lt;br /&gt;&lt;br /&gt;Check out the complete results &lt;a href="http://metalinkltd.com/?p=93#results"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;PS- I also enjoyed reading Alexey's initial experiences w/ Flex. I distinctly remember dealing with  each one of the issues he mentioned. Good times.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-5163300724669571012?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/5163300724669571012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=5163300724669571012&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/5163300724669571012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/5163300724669571012'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/07/bubblemark-animation-test-confirms-it.html' title='Bubblemark Animation Test Confirms It'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-1554893740086076228</id><published>2007-07-12T14:03:00.000-07:00</published><updated>2007-07-19T21:22:35.085-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Apollo'/><title type='text'>There's an Advanced DataGrid!?!</title><content type='html'>I guess in all the excitement surrounding Adobe AIR, I missed out on a huge feature available in Flex 3, the Advanced DataGrid.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_5tvmGcWqEn4/RpaaGzTnlnI/AAAAAAAAAFM/Vq7wUhBW30w/s1600-h/advanced_datagrid.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_5tvmGcWqEn4/RpaaGzTnlnI/AAAAAAAAAFM/Vq7wUhBW30w/s400/advanced_datagrid.PNG" alt="" id="BLOGGER_PHOTO_ID_5086422270803940978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you're working w/ alot of data in your Flex/AIR applications like I am, you need to check this component out. It may just save your life/sanity.&lt;br /&gt;&lt;br /&gt;Here are some of the main features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Multi-column sorting&lt;/li&gt;&lt;li&gt;Tree View (basically a tree component mashed into a DataGrid)&lt;/li&gt;&lt;li&gt;Cell Formatting&lt;/li&gt;&lt;li&gt;Summary Collections (allows you to perform a calcuation on the DataGrid columns and output a result)&lt;/li&gt;&lt;li&gt;Column Grouping&lt;/li&gt;&lt;/ul&gt;Seriously, half the work I'm doing right now could be handled with this component. Check out some of the details &lt;a href="http://labs.adobe.com/wiki/index.php/Flex_3:Feature_Introductions:_Advanced_DataGrid"&gt;here &lt;/a&gt;or the Flex 3 docs &lt;a href="http://livedocs.adobe.com/labs/flex/3/langref/index.html"&gt;here&lt;/a&gt;. This is the type of great stuff I expect from the Flex team. Now if we could only get the CS3-to-Flex skinning integration to work properly everything would be brilliant.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-1554893740086076228?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/1554893740086076228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=1554893740086076228&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1554893740086076228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1554893740086076228'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/07/advanced-datagrid.html' title='There&apos;s an Advanced DataGrid!?!'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_5tvmGcWqEn4/RpaaGzTnlnI/AAAAAAAAAFM/Vq7wUhBW30w/s72-c/advanced_datagrid.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-8120994710520331660</id><published>2007-07-10T16:21:00.001-07:00</published><updated>2007-07-10T17:25:55.870-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Performance in AIR</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_5tvmGcWqEn4/RpQi5tiu5UI/AAAAAAAAAFE/VM59jtAOoIU/s1600-h/choreo_demo.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 274px; height: 161px;" src="http://bp2.blogger.com/_5tvmGcWqEn4/RpQi5tiu5UI/AAAAAAAAAFE/VM59jtAOoIU/s400/choreo_demo.PNG" alt="" id="BLOGGER_PHOTO_ID_5085728254081295682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you're like me, you might have thought that Adobe AIR (formerly Apollo) would provide a more powerful computing platform for desktop &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;RIA&lt;/span&gt; development. Well, you'd be wrong. After running a number of performance tests ranging from long-running financial calculations to CPU intensive &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;UI&lt;/span&gt; effects, AIR and Flex executed at approximately the same speed (~2% in favor of Flex -- insignificant).&lt;br /&gt;&lt;br /&gt;While I must profess a little disappointment, I don't think its a huge downside of the platform since Flash provides so many other core competencies. However, you need to take it into account whenever you are about to perform a lengthy IO operation. The user interface will freeze up when saving/generating multiple files. At Pier, we've been popping up a modal window just prior to all IO ops to keep the user from trying to interact w/ the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;UI&lt;/span&gt; during the freeze.&lt;br /&gt;&lt;br /&gt;My suggestion is take the time to setup you IO framework so you don't have to code a custom modal on every operation.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-8120994710520331660?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/8120994710520331660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=8120994710520331660&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8120994710520331660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8120994710520331660'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/07/performance-in-air.html' title='Performance in AIR'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_5tvmGcWqEn4/RpQi5tiu5UI/AAAAAAAAAFE/VM59jtAOoIU/s72-c/choreo_demo.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-2442809516623472424</id><published>2007-06-30T21:06:00.000-07:00</published><updated>2007-06-30T21:23:05.967-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Execution Times in Apollo vs. Flash</title><content type='html'>I just wrapped up a 12hrs. coding session at &lt;a href="http://www.pierinc.com"&gt;work&lt;/a&gt;. We're creating an application that provides ROI (return on investment) calculations to prospective technology clients. Its standard practice these days to sell software based on value even though selling on features is a heck of a lot more fun, which is where the ROI calc. comes in handy.&lt;br /&gt;&lt;br /&gt;Behind the calculator's UI, there are a plethora of events being generated to update the key benefits used by the buyer. As we've continued to work on larger calculators (more benefits), the processing time in AIR has lagged even when the Flex seems to run unhindered. So tonight I did a little testing to see how significant the difference was, I was shocked to learn that AIR executed the same functions as the Flex application at a speed ~ 54% slower. The "native" application is running slower?!? Even more bizarre, the execution time goes back to normal when I load a secondary SWF inside the AIR application to handle the calculations. Very weird and disheartening to say the least. I don't have the tests at home otherwise I'd post them but if anyone has a reason for this discrepancy. Do tell.&lt;br /&gt;&lt;br /&gt;You can expect the source for my tests tomorrow. Until then, you might want to think about creating a wrapper for calling functions w/in a SWFLoader. Here's a useful &lt;a href="http://livedocs.adobe.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;amp;file=00000642.html"&gt;article &lt;/a&gt; about how to make calls from the child app. to the parent.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-2442809516623472424?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/2442809516623472424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=2442809516623472424&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2442809516623472424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2442809516623472424'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/06/execution-times-in-apollo-vs-flash.html' title='Execution Times in Apollo vs. Flash'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-4818791682516437103</id><published>2007-06-21T15:00:00.000-07:00</published><updated>2007-06-21T15:38:34.105-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='Apollo'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Living in Boston...</title><content type='html'>I guess I haven't taken the time to make mention of my new job (or write a post for that matter). I packed up my bags about a week ago and made the long haul up to Boston, actually it was three short hauls. Besides the psycho that yelled at me for "borrowing" her parking space while I moved my furniture into my apartment, everyone I've met has been great. A trend I'm sure can't last forever but I'm enjoying it for now.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_5tvmGcWqEn4/Rnr9YtewSYI/AAAAAAAAAEk/X121WPzz5Ak/s1600-h/Pier_BlogspotArticle.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_5tvmGcWqEn4/Rnr9YtewSYI/AAAAAAAAAEk/X121WPzz5Ak/s400/Pier_BlogspotArticle.jpg" alt="" id="BLOGGER_PHOTO_ID_5078650130780932482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;My new company, &lt;a href="http://www.pierinc.com/"&gt;Pier Inc.&lt;/a&gt;, creates Rich Internet Applications using Flash (Flex, AIR). We've got an impressive list of Fortune five clients and skunkworks to boot! I've got to get back to work for now but you can expect some great Flex/AIR tutorials to follow.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-4818791682516437103?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/4818791682516437103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=4818791682516437103&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4818791682516437103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4818791682516437103'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/06/living-in-boston.html' title='Living in Boston...'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_5tvmGcWqEn4/Rnr9YtewSYI/AAAAAAAAAEk/X121WPzz5Ak/s72-c/Pier_BlogspotArticle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-7313014682749628117</id><published>2007-06-07T13:30:00.000-07:00</published><updated>2007-06-07T14:07:25.241-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='maps'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Managing Markers in Google Maps</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_5tvmGcWqEn4/Rmhza9ewSVI/AAAAAAAAAEM/uSqTk95m6_U/s1600-h/many_markers.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_5tvmGcWqEn4/Rmhza9ewSVI/AAAAAAAAAEM/uSqTk95m6_U/s200/many_markers.PNG" alt="" id="BLOGGER_PHOTO_ID_5073431887250213202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I just spent the last four hours trying to coerce &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Firefox&lt;/span&gt; into properly displaying 600 markers on Google Maps (using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;GMarkerManager&lt;/span&gt;). In the end, I came up with the same response "too much recursion", &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;FF's&lt;/span&gt; words not mine.&lt;br /&gt;&lt;br /&gt;My original process was to create the map, so users have something to look at, then make an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;XHR&lt;/span&gt; call for all the markers I wanted to place on it. Logical, I thought at the time. For some reason, making the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;XHR&lt;/span&gt; call after the map is instantiated seems to freeze up my computer (dual-core Mac). A very bad sign considering the average user doesn't have the power setup that I do. I tweaked a couple functions to improve &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;performance&lt;/span&gt; but nothing seemed to work.&lt;br /&gt;&lt;br /&gt;Then I found this &lt;a href="http://www.econym.demon.co.uk/googlemaps/markermanager.htm"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;web page&lt;/span&gt; &lt;/a&gt;(and &lt;a href="http://www.econym.demon.co.uk/googlemaps/examples/markermanager.htm"&gt;demo&lt;/a&gt;) which provides a VERY simple solution. Load the data up front then initialize the map. Presto, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;GMarkerManager&lt;/span&gt; kicks in and everything works perfectly. If you don't feel this answer is satisfying...I hear you. Frankly, it doesn't sit well with me either but it works and the load time isn't horrible.&lt;br /&gt;&lt;br /&gt;Hopefully, someone will see this post and avoid getting brutalized like I did.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-7313014682749628117?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/7313014682749628117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=7313014682749628117&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7313014682749628117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7313014682749628117'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/06/managing-markers-in-google-maps.html' title='Managing Markers in Google Maps'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_5tvmGcWqEn4/Rmhza9ewSVI/AAAAAAAAAEM/uSqTk95m6_U/s72-c/many_markers.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-167222001738002465</id><published>2007-06-06T21:15:00.000-07:00</published><updated>2007-06-07T14:13:17.714-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Is Google Expanding Too Quickly?</title><content type='html'>I want to say no. Really.&lt;br /&gt;I want to believe that Google is the company of the future. Nimble, smart, and opportunistic. Shifting resources on a dime to push whatever technology is on the horizon.&lt;br /&gt;Then I get a reality &lt;a href="http://picasa.google.com/intl/en_us/web/learn_more_picasa.html"&gt;check&lt;/a&gt;:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_5tvmGcWqEn4/RmeIMdewSTI/AAAAAAAAAD8/uqnkJj6YGy8/s1600-h/GMistake.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_5tvmGcWqEn4/RmeIMdewSTI/AAAAAAAAAD8/uqnkJj6YGy8/s400/GMistake.png" alt="" id="BLOGGER_PHOTO_ID_5073173252909582642" border="0" /&gt;&lt;/a&gt;You'll notice something strange in the top left corner of the page. Yep, thats some Javascript for their Google Analytics account. Upon further inspection, I discovered they forgot the closing script tag. Pretty sloppy. I'm not saying I haven't thrown pages up before they were ready or that I don't make mistakes. But come on. Someone should have QC'ed the page and noticed that.&lt;br /&gt;I guess the future isn't today.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-167222001738002465?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/167222001738002465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=167222001738002465&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/167222001738002465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/167222001738002465'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/06/is-google-expanding-too-quickly.html' title='Is Google Expanding Too Quickly?'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_5tvmGcWqEn4/RmeIMdewSTI/AAAAAAAAAD8/uqnkJj6YGy8/s72-c/GMistake.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-2291882400102895552</id><published>2007-06-01T18:23:00.000-07:00</published><updated>2007-06-01T18:51:54.961-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Updated: Custom Event System for Prototype</title><content type='html'>After using my &lt;a href="http://forwarddevelopment.blogspot.com/2007/05/prototype-custom-event-system.html"&gt;original&lt;/a&gt; Event System for a little while I realize that I structured the original Classes all wrong. For some reason, I though it was a good idea to pass the event dispatching responsibilities off on the Event object itself. Bad idea. So I updated the code, all 2K of it.&lt;br /&gt;&lt;br /&gt;Here's the update:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;/**&lt;br /&gt; * @author toddcullen&lt;br /&gt; */&lt;br /&gt;CustomEvent = {};&lt;br /&gt;CustomEvent.Events = {};&lt;br /&gt;CustomEvent.Events.Base = Class.create();&lt;br /&gt;CustomEvent.Events.Base.prototype = {&lt;br /&gt; initialize : function(){&lt;br /&gt;  this.type = "CustomEvent.Events.Base";&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;CustomEvent.EventController = Class.create();&lt;br /&gt;CustomEvent.EventController.prototype = {&lt;br /&gt; initialize: function(){&lt;br /&gt;  this.listeners = $A([]);&lt;br /&gt; },&lt;br /&gt; addEventListener: function(n, f){&lt;br /&gt;  this.listeners.push({name: n, callback: f});&lt;br /&gt; },&lt;br /&gt; removeEventListener: function(n, f){&lt;br /&gt;  this.listeners = this.listeners.without({name: n, callback: f});&lt;br /&gt; },&lt;br /&gt; dispatchEvent: function(n, e){&lt;br /&gt;  for(var x=0; x&amp;lt;this.listeners.length; x++){&lt;br /&gt;   if(this.listeners[x].name == n){&lt;br /&gt;    this.listeners[x].callback(e);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;var EventController = new CustomEvent.EventController();&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can create any type of Event you'd like. Its just an object you pass from the event target to the listener. Here's an example usage where I created a DataEvent Event Class:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;   /*&lt;br /&gt;    * Data Event &lt;br /&gt;    */&lt;br /&gt;   CustomEvent.Events.DataEvent = Class.create();&lt;br /&gt;   CustomEvent.Events.DataEvent.prototype = {&lt;br /&gt;    initialize : function(data){&lt;br /&gt;     this.type = "CustomEvent.Events.DataEvent";&lt;br /&gt;     this.data = $H(data);&lt;br /&gt;    }&lt;br /&gt;   };&lt;br /&gt;   &lt;br /&gt;   Event.observe(window, "load", function(){&lt;br /&gt;    EventController.addEventListener("BasicEvent", testListener);&lt;br /&gt;    EventController.addEventListener("DataEvent", testListener);&lt;br /&gt;    &lt;br /&gt;    Event.observe('basic', 'click', dispatchBasic);&lt;br /&gt;    Event.observe('data', 'click', dispatchData);&lt;br /&gt;   });&lt;br /&gt;   &lt;br /&gt;   function dispatchBasic(){&lt;br /&gt;    var event = new CustomEvent.Events.Base();&lt;br /&gt;    EventController.dispatchEvent("BasicEvent", event);&lt;br /&gt;   }&lt;br /&gt;   function dispatchData(){&lt;br /&gt;    var event = new CustomEvent.Events.DataEvent({info : 'HELLO WORLD!'});&lt;br /&gt;    EventController.dispatchEvent("DataEvent", event);&lt;br /&gt;   }&lt;br /&gt;   function testListener(event){&lt;br /&gt;    alert("event type:"+event.type);&lt;br /&gt;    if(event.type == "CustomEvent.Events.DataEvent"){&lt;br /&gt;     alert('event data: ' + event.data.inspect());&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The HTML is simply an anchor with an id of "data" and an anchor with an idea of "basic". This system is really useful for an HTML UI that has to be flexible. Minimize/eliminates the need for objects to know about each other. They only need to "know" about the EventController.&lt;br /&gt;&lt;br /&gt;Snag the full demo &lt;a href="http://www.mediamax.com/shakakai/Hosted/Event%20Demo"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-2291882400102895552?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/2291882400102895552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=2291882400102895552&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2291882400102895552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2291882400102895552'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/06/updated-custom-event-system-for.html' title='Updated: Custom Event System for Prototype'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-1380592135756266457</id><published>2007-06-01T08:01:00.001-07:00</published><updated>2007-06-01T08:02:31.586-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gears'/><category scheme='http://www.blogger.com/atom/ns#' term='Apollo'/><title type='text'>Apollo/Gears Integration</title><content type='html'>Check out &lt;a href="http://home.businesswire.com/portal/site/home/index.jsp?epi-content=NEWS_VIEW_POPUP_TYPE&amp;newsId=20070530006266&amp;amp;ndmHsc=v2*A1177930800000*B1180591242000*DgroupByDate*J2*L1*N1000837*Zgoogle&amp;newsLang=en&amp;amp;amp;beanID=202776713&amp;amp;viewID=news_view_popup"&gt;this&lt;/a&gt;  press release on Apollo/Gears integration.&lt;br /&gt;&lt;br /&gt;Gotta run!&lt;br /&gt;&lt;br /&gt;Seriously, I have to leave this time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-1380592135756266457?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/1380592135756266457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=1380592135756266457&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1380592135756266457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1380592135756266457'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/06/apollogears-integration.html' title='Apollo/Gears Integration'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-4540881600086377720</id><published>2007-06-01T07:54:00.000-07:00</published><updated>2007-06-01T14:14:15.103-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gears'/><title type='text'>Gears is Great for Bandwidth</title><content type='html'>Real quick post, I'm on my way into the office.&lt;br /&gt;&lt;br /&gt;Most people are aware of the growing bandwidth issue facing &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ISP's&lt;/span&gt;. With high def videos and full scale web applications, people are using more bandwidth today per &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;capita&lt;/span&gt; than every before.&lt;br /&gt;&lt;br /&gt;Enter Google Gears, reduce the amount of bandwidth needed for large scale web apps by downloading it once and serving the static files locally.&lt;br /&gt;&lt;br /&gt;Brilliant!&lt;br /&gt;&lt;br /&gt;&lt;s&gt;::I'm working on a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;versioning&lt;/span&gt; system right now, so applications will know when to update themselves to the latest version::&lt;/s&gt;(Its apart of the API)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-4540881600086377720?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/4540881600086377720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=4540881600086377720&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4540881600086377720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4540881600086377720'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/06/gears-is-great-for-bandwidth.html' title='Gears is Great for Bandwidth'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-7379126322003833689</id><published>2007-05-30T18:05:00.001-07:00</published><updated>2007-05-30T18:34:29.998-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Google Closing Web-Desktop Gap</title><content type='html'>Right on the heels of my post concerning "Universal Search", Google just announced a new project bringing the web and the desktop closer together. Google Gears is a development platform where online applications can be made available offline or provide additional processing power to an online application. One of the major limitation of javascript is its single threaded processing. If you have a resource intensive operations occurring on a web page, the UI will often freeze until the operation is complete. Obviously, users don't understand what's going on in the bowels of the application so this can create a significant development barrier. Google Gears provides an API to hand off the resource intensive operation so the UI doesn't freeze up and users are none the wiser.&lt;br /&gt;&lt;br /&gt;Here are the three main features of Google Gears (straight from Google):&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://code.google.com/apis/gears/api_localserver.html"&gt;&lt;img src="http://code.google.com/apis/gears/resources/localserver.gif" alt="LocalServer" style="border: medium none ;" height="35" width="43"&gt;&lt;/a&gt;     &lt;/td&gt;     &lt;td&gt;       &lt;a href="http://code.google.com/apis/gears/api_localserver.html"&gt;LocalServer&lt;/a&gt;&lt;br /&gt;     Cache and serve application resources (HTML, JavaScript, images, etc.) locally     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;       &lt;a href="http://code.google.com/apis/gears/api_database.html"&gt;&lt;img src="http://code.google.com/apis/gears/resources/database.gif" alt="Database" style="border: medium none ;" height="35" width="43" /&gt;&lt;/a&gt;     &lt;/td&gt;     &lt;td&gt;       &lt;a href="http://code.google.com/apis/gears/api_database.html"&gt;Database&lt;/a&gt;&lt;br /&gt;     Store data locally in a fully-searchable relational database     &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;     &lt;td&gt;       &lt;a href="http://code.google.com/apis/gears/api_workerpool.html"&gt;&lt;img src="http://code.google.com/apis/gears/resources/workerpool.gif" alt="WorkerPool" style="border: medium none ;" height="35" width="43"&gt;&lt;/a&gt;     &lt;/td&gt;     &lt;td&gt;       &lt;a href="http://code.google.com/apis/gears/api_workerpool.html"&gt;WorkerPool&lt;/a&gt;&lt;br /&gt;     Make your web applications more responsive by performing resource-intensive operations asynchronously&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;From my brief inspection of the API, this makes me rethink my whole opinion of Apollo. You can develop one website with hooks into Gears that gracefully degrades if its not installed. With the Flex/AJAX bridge, you could even have a Flex website that communicates with the Database and WorkerPool. Whoa. Pretty sweet.&lt;br /&gt;&lt;br /&gt;I'll post some more thoughts, once I get some time to digest the idea.&lt;br /&gt;&lt;br /&gt;-Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-7379126322003833689?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/7379126322003833689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=7379126322003833689&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7379126322003833689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7379126322003833689'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/google-closing-web-desktop-gap.html' title='Google Closing Web-Desktop Gap'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-7157605580150805625</id><published>2007-05-30T15:39:00.000-07:00</published><updated>2007-05-30T16:25:31.786-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='translation'/><title type='text'>Search in a Foreign Language</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_5tvmGcWqEn4/Rl3916RpRVI/AAAAAAAAADk/SAVzkghWKGc/s1600-h/Google_Language_Search.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp3.blogger.com/_5tvmGcWqEn4/Rl3916RpRVI/AAAAAAAAADk/SAVzkghWKGc/s320/Google_Language_Search.PNG" alt="" id="BLOGGER_PHOTO_ID_5070487858107204946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I happened upon this hidden gem in &lt;a href="http://www.google.com/translate_s?hl=en"&gt;Google Translate&lt;/a&gt;. I know Google just announced their "Universal Search" concept but I hadn't actually noticed any new features to back up the claim. That is, until I ran into the aforementioned page.&lt;br /&gt;&lt;br /&gt;As you can see from the screenshots, you can specify your native language and the language you want the results selected from. &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_5tvmGcWqEn4/Rl3-6KRpRWI/AAAAAAAAADs/qIMdHKlJhRA/s1600-h/Google_Language_Search2.PNG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp0.blogger.com/_5tvmGcWqEn4/Rl3-6KRpRWI/AAAAAAAAADs/qIMdHKlJhRA/s320/Google_Language_Search2.PNG" alt="" id="BLOGGER_PHOTO_ID_5070489030633276770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Based on my search for &lt;a href="http://www.google.com/translate_s?hl=en&amp;clss=&amp;amp;q=Silverlight&amp;sl=en&amp;amp;tl=ja"&gt;"Silverlight" in Japanese&lt;/a&gt;, I'm not sure how relevant the results are yet. Here are a couple quick questions I've got running around:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;What's the time line to integrate this feature into Google search classic (or iGoogle)?&lt;/li&gt;&lt;li&gt;What's the purpose behind serving both the translated and original version on the search page? If I'm using a translator, I obviously don't know the language very well. In what situation would I need the original next to the translated version? Besides learning the language.&lt;/li&gt;&lt;li&gt;What type of search requires specifying a foreign language? Perhaps as someone English speaking, I am not Google's target audience for "Universal Search".&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Like all things Google, Universal Search is still in Beta.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-7157605580150805625?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/7157605580150805625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=7157605580150805625&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7157605580150805625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7157605580150805625'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/search-in-foreign-language.html' title='Search in a Foreign Language'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_5tvmGcWqEn4/Rl3916RpRVI/AAAAAAAAADk/SAVzkghWKGc/s72-c/Google_Language_Search.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-7455857724395690932</id><published>2007-05-24T07:57:00.000-07:00</published><updated>2007-05-24T08:07:18.841-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>OOP in Javascript</title><content type='html'>Ran across &lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/05/javascript/default.aspx"&gt;this&lt;/a&gt; great article by &lt;a title="More articles by this author" href="http://msdn.microsoft.com/msdnmag/find/?type=Au&amp;phrase=Ray%20Djajadinata&amp;amp;words=exact"&gt;Ray Djajadinata&lt;/a&gt; (Microsoft Developer). Its a shame this wasn't around when I first started getting into advanced Javascript development two years ago. Could've saved me hours of trial and error.&lt;br /&gt;&lt;br /&gt;If you still don't fully grok OO Javascript, check out the &lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/05/javascript/default.aspx#S7"&gt;section &lt;/a&gt;explaining how prototyping works. Great stuff.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-7455857724395690932?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/7455857724395690932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=7455857724395690932&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7455857724395690932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7455857724395690932'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/oop-in-javascript.html' title='OOP in Javascript'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-2305974207873679510</id><published>2007-05-22T17:52:00.000-07:00</published><updated>2007-05-22T18:37:36.361-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Prototype Custom Event System</title><content type='html'>Perhaps I have a little Flex envy but the DOM event model is woefully ill-suited to handle dynamic single page applications. To remedy the situation, I've written an extension for Prototype to provide a Custom Event messaging system. Its designed to work as a mediator between your AJAX controller and services. The concept works something like this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A user clicks a button (or interacts with any &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;UI&lt;/span&gt; component) and a DOM event is triggered. Typically captured using Event.observe.&lt;/li&gt;&lt;li&gt;The controller receives the DOM event, checks the state of the application, and gathers any data required by the model.&lt;/li&gt;&lt;li&gt;Then using the Custom Event framework, a Custom Event is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;broadcasted&lt;/span&gt; with all the data the Model needs to perform its actions.&lt;/li&gt;&lt;li&gt;The Model receives the Custom Event, processes its service call (or data storage etc.), and then uses its own Custom Event to broadcast data back to the controller.&lt;/li&gt;&lt;li&gt;The controller then updates the view accordingly.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Custom Events are not a replacement for the Event object. Its really meant to aid in the loose coupling of the Model from the Controller in your client side code. Now that you've heard my spiel. Here's the code:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;CustomEvent&lt;/span&gt; = {};&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;CustomEvent&lt;/span&gt;.Events = {};&lt;br /&gt;CustomEvent.Events.Base = Class.create();&lt;br /&gt;CustomEvent.Events.Base.prototype = {&lt;br /&gt;initialize: function(){&lt;br /&gt;this.listeners = new Array();&lt;br /&gt;},&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;addEventListener&lt;/span&gt;: function(f){&lt;br /&gt;this.listeners.push(f);&lt;br /&gt;},&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;removeEventListener&lt;/span&gt;: function(f){&lt;br /&gt;this.listeners = this.listeners.without(f);&lt;br /&gt;},&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;dispatchEvent&lt;/span&gt;: function(n, d){&lt;br /&gt;var data = this.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;setupData&lt;/span&gt;(d);&lt;br /&gt;this.listeners.each(function(l){&lt;br /&gt;l({name : n}, data);&lt;br /&gt;});&lt;br /&gt;},&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;setupData&lt;/span&gt;: function(d){&lt;br /&gt;return $H(d);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;CustomEvent&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;EventController&lt;/span&gt; = Class.create();&lt;br /&gt;CustomEvent.EventController.prototype = {&lt;br /&gt;initialize: function(){&lt;br /&gt;this.events = new Hash();&lt;br /&gt;},&lt;br /&gt;create: function(n, t){&lt;br /&gt;var &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;args&lt;/span&gt; = arguments[2]?arguments[2]:null;&lt;br /&gt;this.events[n] = new Event.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;CustomEvent&lt;/span&gt;[t](&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;args&lt;/span&gt;);&lt;br /&gt;},&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;addEventListener&lt;/span&gt;: function(n, f){&lt;br /&gt;this.events[n].addEventListener(f);&lt;br /&gt;},&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;removeEventListener&lt;/span&gt;: function(n, f){&lt;br /&gt;this.events[n].removeEventListener(f);&lt;br /&gt;},&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;dispatchEvent&lt;/span&gt;: function(){&lt;br /&gt;var n = arguments[0];&lt;br /&gt;var d = arguments[1] ? arguments[1] : {};&lt;br /&gt;this.events[n].dispatchEvent(n, d);&lt;br /&gt;},&lt;br /&gt;destroy: function(n){&lt;br /&gt;this.events.remove(n);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;var &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;EventController&lt;/span&gt; = new &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;CustomEvent&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;EventController&lt;/span&gt;();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here's how you would use it.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;EventController&lt;/span&gt;.create("test", "Base");&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;EventController&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;addEventListener&lt;/span&gt;("test", &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;myTest&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;function &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;myTest&lt;/span&gt;(&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;evt&lt;/span&gt;){&lt;br /&gt;alert('Event Name: '+&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;evt&lt;/span&gt;.name);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Base is just the Basic custom event. Extend it to specify a unique data structure. Trigger the event with the following code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;EventController&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;dispatchEvent&lt;/span&gt;("test");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I still need to tweak the code little bit but so far its been very useful. Hope this helps someone else out.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-2305974207873679510?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/2305974207873679510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=2305974207873679510&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2305974207873679510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2305974207873679510'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/prototype-custom-event-system.html' title='Prototype Custom Event System'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-6278465000291580184</id><published>2007-05-21T21:08:00.001-07:00</published><updated>2007-05-21T21:25:43.079-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>RE: Tips on Life</title><content type='html'>&lt;a href="http://bp1.blogger.com/_5tvmGcWqEn4/RlJwmKRpRUI/AAAAAAAAADc/VipntxadCdE/s1600-h/lifehacklogo.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5067236331640931650" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://bp1.blogger.com/_5tvmGcWqEn4/RlJwmKRpRUI/AAAAAAAAADc/VipntxadCdE/s320/lifehacklogo.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;I've been posting recently about other's superb writing and honestly when you can't out perform someone else in the short-run, acknowledge their efforts and learn what you can from them. It'll make you a more insightful individual in the long-run.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Keeping with that philosophy, here's a great read from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;lifehack&lt;/span&gt;.org (not to be confused with &lt;a href="http://www.lifehacker.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Lifehacker&lt;/span&gt;&lt;/a&gt;): &lt;a href="http://www.lifehack.org/articles/lifehack/10-simple-ways-to-save-yourself-from-messing-up-your-life.html"&gt;http://www.lifehack.org/articles/lifehack/10-simple-ways-to-save-yourself-from-messing-up-your-life.html&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Very solid read.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Cheers,&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Todd&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-6278465000291580184?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/6278465000291580184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=6278465000291580184&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6278465000291580184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6278465000291580184'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/re-tips-on-life.html' title='RE: Tips on Life'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_5tvmGcWqEn4/RlJwmKRpRUI/AAAAAAAAADc/VipntxadCdE/s72-c/lifehacklogo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-7581929401364281899</id><published>2007-05-20T20:14:00.000-07:00</published><updated>2007-05-21T07:32:51.009-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>High Performance MySQL</title><content type='html'>Quick post.&lt;br /&gt;&lt;br /&gt;Two former/current &lt;s&gt;Google&lt;/s&gt; Yahoo! Engineers, &lt;span class="author"&gt;Derek J. Balling &amp; Jeremy D. Zawodny respectively,&lt;/span&gt; released some great tips for performance enhancing your MySQL database. This was actually published back in 2004 but I just got around to reading it over the weekend. It breaks down the basics of Enterprise/Scalable MySQL development, below are some of the topics:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;replication&lt;/li&gt;&lt;li&gt;load balancing&lt;/li&gt;&lt;li&gt;data backup&lt;/li&gt;&lt;li&gt;security&lt;/li&gt;&lt;/ul&gt;FYI, you can check out a preview &lt;a href="http://books.google.com/books?hl=en&amp;amp;lr=&amp;id=sgMvu2uZXlsC&amp;amp;amp;amp;oi=fnd&amp;pg=PA1&amp;amp;dq=MySQL+performance&amp;ots=frVGLhg7EE&amp;amp;sig=U8KE7W_fWzbh4Otec3ojam0264U#PPR4,M1"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-7581929401364281899?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/7581929401364281899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=7581929401364281899&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7581929401364281899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7581929401364281899'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/high-performance-mysql.html' title='High Performance MySQL'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-7022875619180145628</id><published>2007-05-20T17:42:00.000-07:00</published><updated>2007-05-20T17:59:50.125-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='weird'/><title type='text'>Web Development in Iraqi?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_5tvmGcWqEn4/RlDue6RpRTI/AAAAAAAAADU/VUfCDiAxH8Q/s1600-h/iraqi_web_dev.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp2.blogger.com/_5tvmGcWqEn4/RlDue6RpRTI/AAAAAAAAADU/VUfCDiAxH8Q/s320/iraqi_web_dev.png" alt="" id="BLOGGER_PHOTO_ID_5066811795598558514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I ran across &lt;a href="https://cp-its-rmprd.saic.com/MAIN/careerportal/Job_Profile.cfm?szOrderID=77505"&gt;this&lt;/a&gt; job posting and HAD to make a comment. Remote web development is common place due to great applications like Basecamp, Vyew, AIM/GTalk, etc. With that in mind, why would you possibly need to send some to Iraqi for web development?!? I understand that certain circumstances require a physical presence but I'm sorry I don't think the risks equal the rewards for this one.&lt;br /&gt;&lt;br /&gt;Hmmm... I wonder what the hazard pay is like. I'll update this post if I find out.&lt;br /&gt;&lt;br /&gt;No, I'm not going to Iraqi. Well... not unless the pay is insane. jk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-7022875619180145628?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/7022875619180145628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=7022875619180145628&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7022875619180145628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7022875619180145628'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/web-development-in-iraqi.html' title='Web Development in Iraqi?'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_5tvmGcWqEn4/RlDue6RpRTI/AAAAAAAAADU/VUfCDiAxH8Q/s72-c/iraqi_web_dev.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-6883083662144976160</id><published>2007-05-20T15:12:00.000-07:00</published><updated>2007-05-20T15:33:21.762-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Review: Advanced Actionscript 3 with Design Patterns by Joey Lott and Danny Patterson</title><content type='html'>&lt;a href="http://bp3.blogger.com/_5tvmGcWqEn4/RlDLUKRpRSI/AAAAAAAAADM/ZLPcKNjS3QY/s1600-h/flex_book.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5066773128007992610" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://bp3.blogger.com/_5tvmGcWqEn4/RlDLUKRpRSI/AAAAAAAAADM/ZLPcKNjS3QY/s320/flex_book.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;Just finished up the aforementioned book. Great stuff! They cover topics such as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;OOP&lt;/span&gt; in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Actionscript&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;RIA&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;MVC&lt;/span&gt; implementations, and a myriad of design patterns (such as Iterator, Command, Decorator, State, etc etc etc). Most of the first half of the book acts as a refresher course but the design patterns from page 103 on are an absolute must use!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The only thing I &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;found&lt;/span&gt; strange was after all the "advanced" design patterns were over, they cover Regular Expressions!?! I didn't realize my &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;RegEx&lt;/span&gt; chops made me so l33t. Anyway, if you want to make your code more &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;extensible&lt;/span&gt;/reusable give it a &lt;a href="http://www.amazon.com/Advanced-ActionScript-3-Design-Patterns/dp/0321426568/ref=sr_1_1/102-8138160-0656957?ie=UTF8&amp;s=books&amp;amp;amp;amp;amp;qid=1179699894&amp;amp;sr=8-1"&gt;look&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Cheers,&lt;/div&gt;&lt;div&gt;Todd&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-6883083662144976160?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/6883083662144976160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=6883083662144976160&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6883083662144976160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6883083662144976160'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/review-advanced-actionscript-3-with.html' title='Review: Advanced Actionscript 3 with Design Patterns by Joey Lott and Danny Patterson'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_5tvmGcWqEn4/RlDLUKRpRSI/AAAAAAAAADM/ZLPcKNjS3QY/s72-c/flex_book.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-863425017793035365</id><published>2007-05-10T13:42:00.000-07:00</published><updated>2007-05-10T13:46:59.204-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='error'/><title type='text'>RE: Mmm! I love raisins made with SELECT * FROM [Equipment Table]! (pic)</title><content type='html'>Awesome error.  Could someone sue for false advertising!?!&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_5tvmGcWqEn4/RkOERQkUZqI/AAAAAAAAADE/fXbiz88fbjQ/s1600-h/addedsql.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_5tvmGcWqEn4/RkOERQkUZqI/AAAAAAAAADE/fXbiz88fbjQ/s400/addedsql.jpg" alt="" id="BLOGGER_PHOTO_ID_5063035838134511266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I re-posted the picture from &lt;a href="http://worsethanfailure.com/Articles/Classics-Week-Chocolate-Covered-SQL-.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;Not trying to steal the credit but their server is really slow (front page of digg).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-863425017793035365?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/863425017793035365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=863425017793035365&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/863425017793035365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/863425017793035365'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/re-mmm-i-love-raisins-made-with-select.html' title='RE: Mmm! I love raisins made with SELECT * FROM [Equipment Table]! (pic)'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_5tvmGcWqEn4/RkOERQkUZqI/AAAAAAAAADE/fXbiz88fbjQ/s72-c/addedsql.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-8207430738425245583</id><published>2007-05-08T10:47:00.000-07:00</published><updated>2007-05-08T10:53:44.021-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Apollo'/><category scheme='http://www.blogger.com/atom/ns#' term='AS3'/><title type='text'>AS3 MySQL Driver</title><content type='html'>&lt;a href="http://bp0.blogger.com/_5tvmGcWqEn4/RkC4ngkUZpI/AAAAAAAAAC8/sV7IXHfBimQ/s1600-h/mysql_enterprise-white-med.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5062248970061112978" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://bp0.blogger.com/_5tvmGcWqEn4/RkC4ngkUZpI/AAAAAAAAAC8/sV7IXHfBimQ/s320/mysql_enterprise-white-med.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;I'm posting at work so I don't have much time to expound on why this is awesome. If you don't "get it", think Apollo Flex apps (Yes it works in Apollo). &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://maclema.com/assql/"&gt;AS3 MySQL Driver&lt;/a&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;em&gt;Time to beef up on Embedded Systems&lt;/em&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-8207430738425245583?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/8207430738425245583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=8207430738425245583&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8207430738425245583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8207430738425245583'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/as3-mysql-driver.html' title='AS3 MySQL Driver'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_5tvmGcWqEn4/RkC4ngkUZpI/AAAAAAAAAC8/sV7IXHfBimQ/s72-c/mysql_enterprise-white-med.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-8737864182871044202</id><published>2007-05-06T15:23:00.000-07:00</published><updated>2007-05-06T15:50:53.378-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apollo'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Make Your Own Browser w/ Apollo</title><content type='html'>&lt;div&gt;I had a couple minutes on Sunday to play around with Flex/Apollo. In less than an hour, I had this mini-browser working nicely. Check out the source code below for an example of databinding and the Apollo mx:HTML tag. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;img id="BLOGGER_PHOTO_ID_5061582837813372546" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_5tvmGcWqEn4/Rj5axgkUZoI/AAAAAAAAAC0/Z25vuWRRpBk/s400/ApolloBrowser.png" border="0" /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;My blogger application is shaping up nicely. Expect to see the source code for that within a week or so. Yay, yay, I keep pushing it back but it'll be really sweet once its finished.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;mx:ApolloApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;mx:Style&amp;gt;&lt;br /&gt;&lt;br /&gt;  .main{&lt;br /&gt;&lt;br /&gt;   top:0;&lt;br /&gt;&lt;br /&gt;   left:0; &lt;br /&gt;&lt;br /&gt;   bottom:0;&lt;br /&gt;&lt;br /&gt;   right:0;&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  .address{&lt;br /&gt;&lt;br /&gt;   top:0;&lt;br /&gt;&lt;br /&gt;   left:0; &lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  .content{&lt;br /&gt;&lt;br /&gt;   top:50;&lt;br /&gt;&lt;br /&gt;   left: 30;&lt;br /&gt;&lt;br /&gt;   right: 30; &lt;br /&gt;&lt;br /&gt;   bottom: 10;&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt; &amp;lt;/mx:Style&amp;gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &amp;lt;mx:Model id="browserObj"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;root&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;location&amp;gt;&amp;lt;/location&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/root&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/mx:Model&amp;gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &amp;lt;mx:Script&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;![CDATA[&lt;br /&gt;&lt;br /&gt;   private function updateLocation(_loc:String):void{&lt;br /&gt;&lt;br /&gt;    trace('Address: ' + _loc);&lt;br /&gt;&lt;br /&gt;    browserObj.location = _loc;&lt;br /&gt;&lt;br /&gt;    trace('HTML Page Location: ' + htmlPage.location);&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;  ]]&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;/mx:Script&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;mx:Panel styleName="main" label="Apollo Browser"&amp;gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;  &amp;lt;mx:HBox&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;mx:ComboBox id="protocol"&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;mx:dataProvider&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;mx:Array&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;mx:String&gt;http:// &amp;lt;/mx:String&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;mx:String&gt;https:// &amp;lt;/mx:String&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;mx:String&gt;ftp:// &amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;lt&lt;/span&gt;;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;mx&lt;/span&gt;:String&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;lt&lt;/span&gt;;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;mx&lt;/span&gt;:Array&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;lt&lt;/span&gt;;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;mx&lt;/span&gt;:&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;dataProvider&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;lt&lt;/span&gt;;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;mx&lt;/span&gt;:&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;ComboBox&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;lt&lt;/span&gt;;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;mx&lt;/span&gt;:&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;TextInput&lt;/span&gt; id="address" &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;styleName&lt;/span&gt;="address" text="http://www.google.com/" /&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;lt&lt;/span&gt;;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;mx&lt;/span&gt;:Button label="Go!" click="&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;updateLocation&lt;/span&gt;(protocol.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;selectedItem&lt;/span&gt; + address.text)" /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;lt&lt;/span&gt;;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;mx&lt;/span&gt;:&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;HBox&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;  &amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;lt&lt;/span&gt;;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;mx&lt;/span&gt;:HTML height="{this.height - 100}" id="&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;htmlPage&lt;/span&gt;" &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;styleName&lt;/span&gt;="content" location="{&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;browserObj&lt;/span&gt;.location}" /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt; &amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;lt&lt;/span&gt;;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;mx&lt;/span&gt;:Panel&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;lt&lt;/span&gt;;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;mx&lt;/span&gt;:&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;ApolloApplication&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;**disclaimer&lt;br /&gt;This is not my concept of a well-coded/designed application, it is simply a test app. Take it for what it is.&lt;br /&gt;&lt;br /&gt;Cheers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-8737864182871044202?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/8737864182871044202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=8737864182871044202&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8737864182871044202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8737864182871044202'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/make-your-own-browser-w-apollo.html' title='Make Your Own Browser w/ Apollo'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_5tvmGcWqEn4/Rj5axgkUZoI/AAAAAAAAAC0/Z25vuWRRpBk/s72-c/ApolloBrowser.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-1662302513084431395</id><published>2007-05-04T18:28:00.000-07:00</published><updated>2007-05-07T16:16:20.681-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><category scheme='http://www.blogger.com/atom/ns#' term='railo'/><title type='text'>Can We Say Irony?</title><content type='html'>&lt;a href="http://bp0.blogger.com/_5tvmGcWqEn4/RjveQwkUZnI/AAAAAAAAACs/PmoNevulkk0/s1600-h/railo_error.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5060882985777391218" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp0.blogger.com/_5tvmGcWqEn4/RjveQwkUZnI/AAAAAAAAACs/PmoNevulkk0/s400/railo_error.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;I was evaluating Railo for a new application I'm developing at work when I saw this. Evaluation Complete :(&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-1662302513084431395?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/1662302513084431395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=1662302513084431395&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1662302513084431395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1662302513084431395'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/can-we-say-irony.html' title='Can We Say Irony?'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_5tvmGcWqEn4/RjveQwkUZnI/AAAAAAAAACs/PmoNevulkk0/s72-c/railo_error.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-6484818805607127327</id><published>2007-05-03T17:33:00.000-07:00</published><updated>2007-05-03T17:38:32.937-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='Apollo'/><category scheme='http://www.blogger.com/atom/ns#' term='applications'/><title type='text'>Blogger API Updated!</title><content type='html'>Google just updated their Blogger API docs. Very exciting news for me since I'm working on an Apollo application that can manage a blogger account from the desktop.&lt;br /&gt;&lt;br /&gt;Eventually, it will be able to post, update, and delete posts. Plus, with the API additions, you'll be able to review &amp; approve comments. Pretty sweet.&lt;br /&gt;&lt;br /&gt;I guess I'll have the jump on my competition!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/apis/blogger/developers_guide_protocol.html"&gt;Check it out.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-6484818805607127327?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/6484818805607127327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=6484818805607127327&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6484818805607127327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6484818805607127327'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/blogger-api-updated.html' title='Blogger API Updated!'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-2821157313827741021</id><published>2007-05-03T14:02:00.000-07:00</published><updated>2007-05-03T14:14:22.447-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Yahoo! Messenger built using Flex</title><content type='html'>&lt;a href="http://bp1.blogger.com/_5tvmGcWqEn4/RjpPNQkUZmI/AAAAAAAAACk/r8TSWPauwgg/s1600-h/YahooMessenger.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5060444220508366434" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/_5tvmGcWqEn4/RjpPNQkUZmI/AAAAAAAAACk/r8TSWPauwgg/s320/YahooMessenger.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Yahoo! Messenger was released today. All in all, its a great Flex 2 application but my computer definitely hung for ~ a minute the first time it loaded. It might have something to do with the fact that I'm rocking IE7 today. Vista and Firefox haven't been playing nice. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;If you use Yahoo! Messenger, in any form, this is &lt;a href="http://webmessenger.yahoo.com/"&gt;worth &lt;/a&gt;checking out.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Ted (Flex Evangelist) has further &lt;a href="http://www.onflex.org/ted/2007/05/yahoo-web-messenger-built-with-flex-2.php"&gt;coverage&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-2821157313827741021?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/2821157313827741021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=2821157313827741021&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2821157313827741021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2821157313827741021'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/yahoo-messenger-built-using-flex.html' title='Yahoo! Messenger built using Flex'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_5tvmGcWqEn4/RjpPNQkUZmI/AAAAAAAAACk/r8TSWPauwgg/s72-c/YahooMessenger.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-6524653354533442827</id><published>2007-05-01T07:29:00.000-07:00</published><updated>2007-05-01T10:14:35.968-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Fun with Javascript &amp; Images</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_5tvmGcWqEn4/RjdQBAkUZlI/AAAAAAAAACc/3_8cONXkwXo/s1600-h/homer.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_5tvmGcWqEn4/RjdQBAkUZlI/AAAAAAAAACc/3_8cONXkwXo/s400/homer.PNG" alt="" id="BLOGGER_PHOTO_ID_5059600684636464722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you've got a couple free minutes to play around, check out this amazing javascript library: &lt;a href="http://www.netzgesta.de/loupe/"&gt;Loupe.js&lt;/a&gt; . &lt;span style="color:red;"&gt;&lt;br /&gt;&lt;br /&gt;**Warning&lt;/span&gt; all you IE people out there will feel excluded/dejected after clicking link.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-6524653354533442827?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/6524653354533442827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=6524653354533442827&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6524653354533442827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6524653354533442827'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/05/fun-with-javascript-images.html' title='Fun with Javascript &amp; Images'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_5tvmGcWqEn4/RjdQBAkUZlI/AAAAAAAAACc/3_8cONXkwXo/s72-c/homer.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-6727497749029156954</id><published>2007-04-30T09:14:00.000-07:00</published><updated>2007-04-30T09:19:34.172-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apollo'/><title type='text'>Update: First Apollo App</title><content type='html'>So I decided this past weekend to switch my first Apollo application from a desktop version of Google Notebook to an application to manage my Blogger account (posts and all!). Ever since the Mac Blogger widget stopped working ~6 months ago, I've been hoping some other application would pop up and fill the void. No such luck. So I just have to take matters into my own hands. Wish me luck.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-6727497749029156954?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/6727497749029156954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=6727497749029156954&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6727497749029156954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6727497749029156954'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/04/update-first-apollo-app.html' title='Update: First Apollo App'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-3908834254295739339</id><published>2007-04-27T14:16:00.000-07:00</published><updated>2007-04-27T14:22:31.818-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='weird'/><title type='text'>Mouse Mouse?!?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://static.instructables.com/deriv/FKZ/DRW6/F0ZSTCZX/FKZDRW6F0ZSTCZX.MEDIUM.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://static.instructables.com/deriv/FKZ/DRW6/F0ZSTCZX/FKZDRW6F0ZSTCZX.MEDIUM.jpg" alt="" border="0" /&gt;&lt;/a&gt;After I read this &lt;a href="http://www.instructables.com/id/EM1O9XJF0YPF7M5/"&gt;post&lt;/a&gt;, all I was left with were questions.&lt;br /&gt;&lt;br /&gt;Who has time to make something like this?&lt;br /&gt;&lt;br /&gt;Is this how someone spends their weekend?&lt;br /&gt;&lt;br /&gt;What do these people do for work that would allow them to use a mouse mouse (totally wouldn't fly in my office)?&lt;br /&gt;&lt;br /&gt;Bizarre. Awesome but bizarre.&lt;a href="http://www.instructables.com/id/EM1O9XJF0YPF7M5/"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-3908834254295739339?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/3908834254295739339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=3908834254295739339&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3908834254295739339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3908834254295739339'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/04/mouse-mouse.html' title='Mouse Mouse?!?'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-1998901159106365219</id><published>2007-04-27T10:13:00.000-07:00</published><updated>2007-04-27T11:06:37.319-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='advertising'/><title type='text'>Quick Questions About the Weather..</title><content type='html'>&lt;span style="font-family:georgia;"&gt;Does anyone actually tune into the news at 11 because of the weatherman's ad teaser? "Will you be able to hit the beach this weekend....I'll let you know at 11."&lt;br /&gt;You'd think they'd try to sell me on something I can't get from Weather.com in less than 30 seconds.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-1998901159106365219?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/1998901159106365219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=1998901159106365219&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1998901159106365219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/1998901159106365219'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/04/quick-questions-about-weather.html' title='Quick Questions About the Weather..'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-7783667681072071861</id><published>2007-04-26T14:47:00.000-07:00</published><updated>2007-04-26T15:34:15.417-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='applications'/><title type='text'>A Quick Look At Silverlight</title><content type='html'>If you haven't heard yet, Microsoft is jumping into the RIA scene with Silverlight (previously known as Windows Presentation Foundation Everywhere). Silverlight uses XAML, an XML markup language similar to MXML, and a subset of WPF codebase to provide rich interactive user interfaces. This puts Microsoft in direct competition with Adobe's Flex. So the question for anyone just jumping into the RIA revolution is which should I choose, Flex or Silverlight? Here's my quick analysis:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Flex&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Flex runs on Flash 9.0 available in about ~50% of browsers currently.&lt;/li&gt;&lt;li&gt;Adobe makes a concerted effort to release their latest Flash player for those other operating systems, Mac and Linux.&lt;/li&gt;&lt;li&gt;Flex 3 is in beta. The third iteration of a game changing development platform.&lt;/li&gt;&lt;li&gt;Flex is a compiled language making dynamic application generation difficult. Although there are ways to get around &lt;a href="http://labs.adobe.com/wiki/index.php/Flex_Module_for_Apache_and_IIS"&gt;that&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;If you are a ColdFusion/Java developer, server-side integration is a nominal task.&lt;/li&gt;&lt;li&gt;Easily convert your Flex applications into desktop apps with Apollo.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Silverlight&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Tight .NET integration. Utilize the same tools to develop a desktop app, web app, or Silverlight app.&lt;/li&gt;&lt;li&gt;Silverlight is an interpreted language. You can easily generate dynamic applications on the server-side since XAML is just a text file.&lt;/li&gt;&lt;li&gt;Comparable RIA platform to Flex.&lt;/li&gt;&lt;li&gt;All Vista users have Silverlight pre-installed. Requires the .NET framework version 3 so XP users have a number of extra steps to get things running.&lt;/li&gt;&lt;li&gt;Applications are a smaller download size, approximately 50-60% smaller.&lt;/li&gt;&lt;li&gt;The Silverlight plugin is only a 1.9MB download compared to 2.2MB...Ok, when I started writing this line I thought difference would be more significant.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In the end, the deciding factor for most developers will be the server-side language of their choice. But one things for sure, there will be an interesting battle ahead.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-7783667681072071861?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/7783667681072071861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=7783667681072071861&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7783667681072071861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7783667681072071861'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/04/quick-look-at-silverlight.html' title='A Quick Look At Silverlight'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-5230305295187545598</id><published>2007-03-21T08:24:00.000-07:00</published><updated>2007-03-21T08:40:36.373-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Apollo'/><category scheme='http://www.blogger.com/atom/ns#' term='applications'/><title type='text'>Apollo Test App</title><content type='html'>As my Apollo test application, I've decided to create a desktop version of Google Notebook. By itself, Google Notebook never really impressed me. It lets you save a snippet of HTML in its original format. The problem is you need an internet connection and an open browser to view it. May as well just bookmark the page.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://labs.adobe.com/technologies/apollo/images/apollo_logo_225x50.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://labs.adobe.com/technologies/apollo/images/apollo_logo_225x50.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So my Apollo test application is going to use the Google Notebook API to save a copy of your clippings to your computer's file system. That way you'll have access to your Notebook online or off, with or w/o a browser open.&lt;br /&gt;&lt;br /&gt;It'll be my weekend project so expect an update next Monday. A whole desktop app. in one weekend. Craziness.&lt;br /&gt;&lt;br /&gt;A couple Apollo links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://labs.adobe.com/technologies/apollo/"&gt;Adobe's Apollo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://labs.adobe.com/wiki/index.php/Apollo"&gt;Apollo's Wiki&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.adobe.com/devnet/videos/apollo_demo07/index.html"&gt;Ebay's Apollo Application&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-5230305295187545598?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/5230305295187545598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=5230305295187545598&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/5230305295187545598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/5230305295187545598'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/03/apollo-test-app.html' title='Apollo Test App'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-2407106800155637374</id><published>2007-03-19T06:42:00.000-07:00</published><updated>2007-03-19T06:49:30.272-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='Apollo'/><category scheme='http://www.blogger.com/atom/ns#' term='applications'/><title type='text'>Apollo Alpha Released At Adobe Labs!</title><content type='html'>Real quick post with one intent, to direct you to &lt;a href="http://labs.adobe.com/technologies/apollo/"&gt;Adobe labs&lt;/a&gt;. Apollo was just released and how sweet it is. Develop desktop applications for Mac and Windows machines using "web" technologies (Flash, Javascript, and HTML). I guess HTML is not just for the web anymore.&lt;br /&gt;&lt;br /&gt;If you are a Web Developer, you need to check this out.&lt;br /&gt;&lt;br /&gt;Cheers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-2407106800155637374?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/2407106800155637374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=2407106800155637374&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2407106800155637374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/2407106800155637374'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/03/apollo-alpha-released-at-adobe-labs.html' title='Apollo Alpha Released At Adobe Labs!'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-7312256284882535862</id><published>2007-03-18T17:50:00.000-07:00</published><updated>2007-03-18T18:17:59.080-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coldfusion'/><category scheme='http://www.blogger.com/atom/ns#' term='coldrails'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><title type='text'>ColdRails Now Hosted On Google</title><content type='html'>I've released the first version of my ColdFusion MVC framework. You can find it on Google Code at &lt;a href="http://code.google.com/p/coldrails/"&gt;http://code.google.com/p/coldrails/&lt;/a&gt;&lt;br /&gt;ColdRails features integration with two other well-known ColdFusion projects:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://livedocs.reactorframework.com/"&gt;Reactor&lt;/a&gt; -- ORM Framework&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.coldspringframework.org/"&gt;ColdSpring&lt;/a&gt; -- Dependecy Injection Framework&lt;/li&gt;&lt;/ul&gt;In addition, I've embedded a system into the view component to seamlessly manage your javascript and css files. Of course, what contemporary framework would be complete without some nifty ajax integration. I'll have more details in the next couple weeks.&lt;br /&gt;Cheers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-7312256284882535862?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/7312256284882535862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=7312256284882535862&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7312256284882535862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7312256284882535862'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/03/coldrails-now-hosted-on-google.html' title='ColdRails Now Hosted On Google'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-6437990963086048667</id><published>2007-03-04T10:20:00.000-08:00</published><updated>2007-03-04T10:40:54.708-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Quick Website Concept</title><content type='html'>A blogging system based on skiing experiences. Every post must be tagged as a particular mountain. It should probably include a mobile API so people could post pictures and text to the blog while still on the mountain. The main website would have hooks into &lt;a href="http://www.bestskiweather.com/"&gt;bestskiweather.com&lt;/a&gt;, perhaps displaying pictures from the mountains with best recent snow totals.&lt;br /&gt;From there I'd probably approach a couple of the large ski corporations for advertising. Even though we provide information on a wide range of ski mountains, the website provides a ski buzz. There's always powder somewhere to get you pumped up.&lt;br /&gt;What's good for all is good for one.&lt;br /&gt;&lt;br /&gt;Plus, due to the user tagged content, providing companies with targeted advertisment space would be relatively easy.&lt;br /&gt;&lt;br /&gt;Don't forget about equipment reviews.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-6437990963086048667?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/6437990963086048667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=6437990963086048667&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6437990963086048667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6437990963086048667'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/03/quick-website-concept.html' title='Quick Website Concept'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-8869240224280657968</id><published>2007-03-03T07:49:00.000-08:00</published><updated>2007-03-03T07:57:37.989-08:00</updated><title type='text'>Sunrise at Alta</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_5tvmGcWqEn4/RemZMdGL_FI/AAAAAAAAACE/7UM5ZuOuMcc/s1600-h/Photo+3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_5tvmGcWqEn4/RemZMdGL_FI/AAAAAAAAACE/7UM5ZuOuMcc/s400/Photo+3.jpg" alt="" id="BLOGGER_PHOTO_ID_5037726097438669906" border="0" /&gt;&lt;/a&gt;Its snowed 5 times in the past 7 days. Can you sense my excitement?&lt;br /&gt;Snapshot of  &lt;a href="http://www.alta.com/"&gt;Alta&lt;/a&gt; at 7:15AM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-8869240224280657968?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/8869240224280657968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=8869240224280657968&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8869240224280657968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8869240224280657968'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/03/sunrise-at-alta.html' title='Sunrise at Alta'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_5tvmGcWqEn4/RemZMdGL_FI/AAAAAAAAACE/7UM5ZuOuMcc/s72-c/Photo+3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-5294053744621236717</id><published>2007-02-28T14:31:00.000-08:00</published><updated>2007-02-28T14:54:56.187-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='customer service'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Southwest Does It Right</title><content type='html'>I gotta give Southwest a little praise, I just had one of the best customer service experiences of my life. My company's email server went down this past week (major pain). So when I booked my flight on SW for a trip to Houston, I didn't get the confirmation email with all the useful Flight numbers etc etc. I called up their 800 number and *gasp* I didn't get put into a phone tree. I was routed immediately to a customer rep. I froze for second trying to remember why I called. When you're expect a game of telephone &lt;em&gt;Guess Who?&lt;/em&gt; a human voice can be quite a shock.&lt;br /&gt;So this post just goes to show that good, old-fashioned customer service can create some worthwhile buzz marketing. Well...OK, maybe not be as useful as an article on Boing Boing or the like but it has to be worth something.&lt;br /&gt;I should also mention the revamped &lt;a href="http://www.southwest.com/"&gt;SW &lt;/a&gt;website is very sleek. Definitely Web 2.0.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-5294053744621236717?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/5294053744621236717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=5294053744621236717&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/5294053744621236717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/5294053744621236717'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/02/southwest-does-it-right.html' title='Southwest Does It Right'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-3470683656025410330</id><published>2007-02-26T17:29:00.000-08:00</published><updated>2007-02-26T17:42:36.574-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='politics'/><title type='text'>A Great Example of What Web 2.0 Can Do...</title><content type='html'>There are an amazing number of Web 2.0 clones out there doing stuff with RSS feeds or colloborative writing or web-based IM. &lt;a href="http://www.OpenCongress.org"&gt;OpenCongress.org&lt;/a&gt; is taking a different approach turning inaccessible information into something useful. Get a snapshot of the Congress' docket in a matter of minutes. I haven't had time to exhaustively check the website so it might have an underlying political agenda. In concept its a great idea. Post your take in the comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-3470683656025410330?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/3470683656025410330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=3470683656025410330&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3470683656025410330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3470683656025410330'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/02/great-example-of-what-web-20-can-do.html' title='A Great Example of What Web 2.0 Can Do...'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-6659541191874656407</id><published>2007-02-22T14:27:00.000-08:00</published><updated>2007-02-22T14:58:10.060-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='time travel'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Management Style</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.damox.com/cars/thumbs/Delorean/1981_Delorean_DMC12.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://www.damox.com/cars/thumbs/Delorean/1981_Delorean_DMC12.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I started to notice a re-occurring theme with one of my bosses (yes, I have multiple), every time he gives me work it always has to be done yesterday. Luckily, I don't have a problem working under tight deadlines pimping out a Delorean. My other two bosses provide a nice cushion of 1-2 days before any of their assigned tasks become due. Why, when they're all in the same business, can two individuals setup goals for their subordinates earlier than Boss #1?&lt;br /&gt;&lt;br /&gt;One concept, two words: Goal setting. I think most motivated individuals are very good at identifying short-run tasks and long-run goals for themselves. Yet, that same behavior doesn't translate when they become management. As a manager, you're not setting goals/tasks for yourself as much as your team.  The best managers have to realize that their time is best spent keeping their subordinates plates full and collective eyes on the prize. Returning to my original statement. My first boss, nay anyone who calls himself/herself a boss, has to take the time to not only plan strategically for the company but their team members. No plan is worth its weight if you don't communicate it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Be Proactive Not Reactive.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-6659541191874656407?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/6659541191874656407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=6659541191874656407&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6659541191874656407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6659541191874656407'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/02/management-style.html' title='Management Style'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-3001559206663906735</id><published>2007-02-20T14:59:00.000-08:00</published><updated>2007-02-20T15:04:42.861-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Implosion'/><title type='text'>The Implosion of the Decade a Month Late</title><content type='html'>&lt;object height="350" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/N3zdxqvTOUI" /&gt;&lt;param name="wmode" value="transparent" /&gt;&lt;embed src="http://www.youtube.com/v/N3zdxqvTOUI" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Silly me. I forgot to post the video of the New Haven Coliseum implosion a month ago. You can actually see my apartment building in the opening frame of the movie. Its just above the coliseum. I was standing across a bridge on the right side of the opening frame. &lt;br /&gt;Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-3001559206663906735?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/3001559206663906735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=3001559206663906735&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3001559206663906735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3001559206663906735'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/02/implosion-of-decade-month-late.html' title='The Implosion of the Decade a Month Late'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-8733102714457206359</id><published>2007-02-19T11:50:00.000-08:00</published><updated>2007-02-20T14:41:25.761-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><title type='text'>Where's the Web Headed</title><content type='html'>&lt;p&gt;&lt;object height="350" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/6gmP4nk0EOE" /&gt;&lt;param name="wmode" value="transparent" /&gt;&lt;embed src="http://www.youtube.com/v/6gmP4nk0EOE" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425" &gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;I originally saw this video on &lt;a href="http://battellemedia.com"&gt;John Battelle's Search Blog&lt;/a&gt;. Definitely worth a watch for anyone who thinks &lt;span style="font-style: italic;"&gt;there's more to Web 2.0 than hype&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Cheers to &lt;a target="_blank" href="http://www.ksu.edu/sasw/anthro/wesch.htm"&gt;Michael Wesch, PhD&lt;/a&gt; for putting it together.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-8733102714457206359?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/8733102714457206359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=8733102714457206359&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8733102714457206359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8733102714457206359'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/02/wheres-web-headed.html' title='Where&apos;s the Web Headed'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-3879666024574733011</id><published>2007-02-19T06:30:00.000-08:00</published><updated>2007-02-20T14:42:09.316-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Skype'/><category scheme='http://www.blogger.com/atom/ns#' term='applications'/><title type='text'>A Little Skype Toolbar Gotcha</title><content type='html'>Things have been straight hectic since I got back from Ireland. Two big deadlines staring me right in the face. To make sure my blog keeps rolling on, I have this little Skype Toolbar gotcha. I've been using Google Docs a little more recently since I've been bouncing between a number of different computers (with different OS's). The Skype Toolbar for Firefox has a nice feature where it turns all the phone numbers on a webpage into a click to call link (obviously you need SkypeOut for this to work on all numbers). Seems like a nice feature, in walks Google Docs.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_5tvmGcWqEn4/Rdm8e_VjzkI/AAAAAAAAABM/hlxKH4Sl2bI/s1600-h/step1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_5tvmGcWqEn4/Rdm8e_VjzkI/AAAAAAAAABM/hlxKH4Sl2bI/s400/step1.jpg" alt="" id="BLOGGER_PHOTO_ID_5033261299147198018" border="0" /&gt;&lt;/a&gt;Nothing breakthrough here. Just a Google Doc with a phone number on it. Check it out after I save and re-open the document.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_5tvmGcWqEn4/Rdm71PVjzjI/AAAAAAAAABE/-o8L7Wly6HA/s1600-h/step2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_5tvmGcWqEn4/Rdm71PVjzjI/AAAAAAAAABE/-o8L7Wly6HA/s400/step2.jpg" alt="" id="BLOGGER_PHOTO_ID_5033260581887659570" border="0" /&gt;&lt;/a&gt;I guess you shouldn't be suprised by this. Skype converted the number into a single click to call. However, what you may not immediately notice is that the HTML version of this document has been edited by Skype to include the link. Below is what happens after saving and reloading again.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_5tvmGcWqEn4/Rdm8xvVjzlI/AAAAAAAAABU/yuQ1kceJvG8/s1600-h/step3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_5tvmGcWqEn4/Rdm8xvVjzlI/AAAAAAAAABU/yuQ1kceJvG8/s400/step3.jpg" alt="" id="BLOGGER_PHOTO_ID_5033261621269745234" border="0" /&gt;&lt;/a&gt;Whats that garbage around the phone number? Unloaded image icons?! I don't want that in my document. Since Skype works on your browser, Google Docs thinks that the changes were made by you and saves them accordingly. Check out what it looks like in print mode.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_5tvmGcWqEn4/Rdm98fVjzmI/AAAAAAAAABc/TkV_1MfnL0g/s1600-h/step4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_5tvmGcWqEn4/Rdm98fVjzmI/AAAAAAAAABc/TkV_1MfnL0g/s400/step4.jpg" alt="" id="BLOGGER_PHOTO_ID_5033262905464966754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The unloaded image icons are having children. Great. Just what I need on all my business documents.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_5tvmGcWqEn4/Rdm_YvVjznI/AAAAAAAAABk/bYQ0tkQfS0s/s1600-h/step5.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp0.blogger.com/_5tvmGcWqEn4/Rdm_YvVjznI/AAAAAAAAABk/bYQ0tkQfS0s/s320/step5.jpg" alt="" id="BLOGGER_PHOTO_ID_5033264490307898994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Since I rarely expand the Skype Toolbar, I never noticed this button before. It turns off the phone number highlighting. Problem solved. &lt;br /&gt;&lt;br /&gt;Moral of the story: &lt;span style="font-weight: bold;"&gt;Know your Firefox extensions&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Yes, I know. Ridiculously quick resolution. I told you I'm busy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-3879666024574733011?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/3879666024574733011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=3879666024574733011&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3879666024574733011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3879666024574733011'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/02/little-skype-toolbar-gotcha.html' title='A Little Skype Toolbar Gotcha'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_5tvmGcWqEn4/Rdm8e_VjzkI/AAAAAAAAABM/hlxKH4Sl2bI/s72-c/step1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-3144600833282957249</id><published>2007-02-02T07:24:00.000-08:00</published><updated>2007-02-02T07:28:53.793-08:00</updated><title type='text'>Off to the Emerald Isle</title><content type='html'>I've finally accrued some vacation time and I'm going to take full advantage. I'm off to Ireland. Dublin to be more precise. I'll be gone until the 11th so don't expect much from the links above. Pictures to follow.&lt;br /&gt;&lt;br /&gt;Cheers.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.epica-awards.org/assets/epica/2005/winners/films/screenshots/images/05512_guinness12.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.epica-awards.org/assets/epica/2005/winners/films/screenshots/images/05512_guinness12.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-3144600833282957249?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/3144600833282957249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=3144600833282957249&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3144600833282957249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3144600833282957249'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/02/off-to-emerald-isle.html' title='Off to the Emerald Isle'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-3074237317480797267</id><published>2007-02-02T07:00:00.000-08:00</published><updated>2007-02-02T07:06:36.536-08:00</updated><title type='text'>The Intersection of Time &amp; Money</title><content type='html'>I'm in the struggle of my life. The struggle to find that happy middle ground between time and money.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-3074237317480797267?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/3074237317480797267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=3074237317480797267&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3074237317480797267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3074237317480797267'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/02/intersection-of-time-money.html' title='The Intersection of Time &amp; Money'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-4634379378111299017</id><published>2007-01-26T11:40:00.000-08:00</published><updated>2007-01-26T12:05:11.541-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='prototype'/><title type='text'>Prototype's new Website</title><content type='html'>&lt;a href="http://www.prototypejs.org"&gt;Prototype&lt;/a&gt;, one of the most widely used javascript frameworks, just moved to a new website. They did a great job filling out the API documentation and the site is very well designed.&lt;br /&gt;&lt;br /&gt;There is only one thing missing, Search! The documentation doesn't have a search portal so I knocked out a Custom Search Engine (over at &lt;a href="http://www.google.com/coop/"&gt;Google Coop&lt;/a&gt;). Check it out &lt;a href="http://www.google.com/coop/cse?cx=000270142967387495712%3A7a7oj26tkbm"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Yes, the URL is ugly but you can add it to your Google Personalized Homepage and never have to type it again.&lt;br /&gt;&lt;br /&gt;Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-4634379378111299017?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/4634379378111299017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=4634379378111299017&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4634379378111299017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4634379378111299017'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/01/prototypes-new-website.html' title='Prototype&apos;s new Website'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-8653265587666138673</id><published>2007-01-25T12:27:00.000-08:00</published><updated>2007-01-26T09:19:33.160-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GTD'/><category scheme='http://www.blogger.com/atom/ns#' term='comand line'/><category scheme='http://www.blogger.com/atom/ns#' term='applications'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Return of the Command Line</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_5tvmGcWqEn4/RbkUDrBQxvI/AAAAAAAAAAw/3h3gbgrMq2Y/s1600-h/blog.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp1.blogger.com/_5tvmGcWqEn4/RbkUDrBQxvI/AAAAAAAAAAw/3h3gbgrMq2Y/s200/blog.jpg" alt="" id="BLOGGER_PHOTO_ID_5024068912628680434" border="0" /&gt;&lt;/a&gt;I'm trying out &lt;a href="http://www.humanized.com/"&gt;Enzo&lt;/a&gt;, a new product from Humanized. You can think of it as an ever-available, command-linesque, efficiency tool. It handles common tasks such as spellchecking, google searches, opening files &amp;amp; applications with amazing speed. If you're always looking for a way to squeeze an extra ounce of productivity out of the day, check out Enzo. You'll thank yourself for taking time.&lt;br /&gt;&lt;br /&gt;Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-8653265587666138673?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/8653265587666138673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=8653265587666138673&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8653265587666138673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/8653265587666138673'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/01/return-of-command-line.html' title='Return of the Command Line'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_5tvmGcWqEn4/RbkUDrBQxvI/AAAAAAAAAAw/3h3gbgrMq2Y/s72-c/blog.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-7500893935886263033</id><published>2007-01-23T16:44:00.000-08:00</published><updated>2007-01-23T17:23:47.062-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='collaboration'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Can Business meet Web 2.0...</title><content type='html'>So you're working at a company that could use some collaborative applications. I'm in the same boat. Pitching a major expense to your boss may or may not fly depending on your position. I know I like to point out free/cheap options where ever possible. Here's the catch, how do you suggest using a Web 2.0 company that doesn't seem to have a viable business plan. What do I mean by that? If you're looking on their website and you can't figure out how their making any money, their business plan is suspect. Bringing me to my main point, I can't justify using a company if I don't know they're going to be around next year and beyond. I'm speaking strictly from a business setting. Almost everyone at my company falls into the category of non-technically inclined, which I'm convinced means "don't read" and "no patience".&lt;br /&gt;&lt;br /&gt;What do you do?&lt;br /&gt;&lt;br /&gt;You want to provide people with the tools to keep their jobs manageable. At the same time, you don't want someone to take time to learn an interface that might be gone next year. Its not like a desktop application that is physically installed on someone's computer. When a website goes down, its gone along with all the information you have stored there.&lt;br /&gt;&lt;br /&gt;Quite the catch 22.&lt;br /&gt;&lt;br /&gt;Has anyone else gone out on a limb and integrated their operational process with a Web 2.0 company? If so, how're things going and have you run into any serious pitfalls yet?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-7500893935886263033?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/7500893935886263033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=7500893935886263033&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7500893935886263033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7500893935886263033'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/01/can-business-meet-web-20.html' title='Can Business meet Web 2.0...'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-6877461489409098081</id><published>2007-01-22T17:21:00.000-08:00</published><updated>2007-01-23T17:25:11.439-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='filter'/><category scheme='http://www.blogger.com/atom/ns#' term='Apollo'/><title type='text'>Filter :: A New Format</title><content type='html'>After a couple months of semi-regular posting. I've decided to switch gears with my blog and focus on being a "filter" (note the Google Reader Items above). I'll still be posting at least once a week but my current project is taking up most of my free time. The project is based on Adobe's new cross-OS platform &lt;a href="http://labs.adobe.com/wiki/index.php/Apollo"&gt;Apollo&lt;/a&gt;. Very exciting stuff, I'll keep you up-to-date on my progress.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-6877461489409098081?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/6877461489409098081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=6877461489409098081&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6877461489409098081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/6877461489409098081'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/01/filter-new-format.html' title='Filter :: A New Format'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-7191112260078796558</id><published>2007-01-15T12:41:00.000-08:00</published><updated>2007-01-15T13:11:40.536-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Is Wazap worth 7.9 Million?</title><content type='html'>I realize the gaming industry is big money, &lt;a href="http://www.google.com/url?q=http://www.latimes.com/technology/la-fi-games13jan13,1,2017806.story%3Fcoll%3Dla-headlines-technology&amp;ei=O-irRYX7J4qKjAHi6pTJDg&amp;amp;sig2=cIta4x6NmsyGa1BcKlMicQ&amp;sa=X&amp;amp;oi=news&amp;ct=result&amp;amp;cd=1&amp;usg=__JO29dQChdIyUsFJEe6PK0_amWs4="&gt;12.7 Billion&lt;/a&gt;. So any substantial funnel for gaming information, such as a search engine, has a huge marketing potential. But I'm not impressed with Wazap.com. They just received $7.9 million in second round funding. That brings their total to $11.9 million in funding for a product that looks exactly like a Google Coop Search for Gaming information. If I had $7.9 million laying around and I was that enthusiastic about the idea, I'd set out to create my own site.  For less than half that amount of money, a decent web development group could  build a new search portal from scratch &lt;span style="font-weight: bold;"&gt;and&lt;/span&gt; purchase a 30-second commercial during the Superbowl. I'd definitely end up ahead in exposure (at least in the US) and $$.&lt;br /&gt;&lt;br /&gt;I could be underestimating Wazap in a couple areas, such as their draw in Germany, China, and Japan. Perhaps its a powerhouse site and I don't even know it. Also, I didn't play around with their search functionality for more than a couple minutes, its all in German.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;To decide for yourself, check out the links below:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.wazap.com/"&gt;Wazap&lt;/a&gt; :: Main Site&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/translate?u=http%3A%2F%2Fwazap.com%2F&amp;langpair=es%7Cen&amp;amp;amp;hl=en&amp;amp;ie=UTF8"&gt;Wazap&lt;/a&gt; :: Translated to English (via Google Translate)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-7191112260078796558?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/7191112260078796558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=7191112260078796558&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7191112260078796558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/7191112260078796558'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/01/is-wazap-worth-79-million.html' title='Is Wazap worth 7.9 Million?'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-5573483538254269481</id><published>2007-01-12T11:34:00.000-08:00</published><updated>2007-01-12T12:26:08.922-08:00</updated><title type='text'>2 Strikes Against the iPhone</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://images.apple.com/home/2007/images/iphonelockscreen20070109.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://images.apple.com/home/2007/images/iphonelockscreen20070109.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Lets be honest the &lt;a href="http://www.apple.com/iphone/"&gt;iPhone &lt;/a&gt;is pretty sexy. It has the figure of a widescreen tv, the fun-loving persona of an iPod, and the warm embrace of OS X. So whats wrong with this picture.&lt;br /&gt;&lt;br /&gt;Two things so far:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Closed API, no third party application development&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cingular.com/"&gt;Cingular &lt;/a&gt;-- Worst Customer Service Ever&lt;/li&gt;&lt;/ol&gt;Originally, I thought the iPhone would have a scaled back version of Mac's OS X allowing for some very exciting development possibilities. I was picturing myself on a beach in the tropics, "working" on the iPhone with one hand, sipping a rum and coke with the other.  Then, today I read an article citing the iPhone will have a closed API. Buzz kill. No natively installed applications. Time to break out the Safari-capatible web apps.&lt;br /&gt;&lt;br /&gt;As for Cingular, they just suck. Take a look at the &lt;a href="http://consumerist.com/consumer/consumerist-kit/script-for-escaping-cingular-contracts-without-fee-based-on-new-arbitration-clause-228186.php"&gt;hassle &lt;/a&gt;you have to go through in order to get out of one of their contracts. I wish the phone industry interpolated a little more than it currently does. So I could take the iPhone to any provider I wanted.&lt;br /&gt;&lt;br /&gt;In the end, I'll probably still get one but I'll hate myself for it....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-5573483538254269481?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/5573483538254269481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=5573483538254269481&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/5573483538254269481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/5573483538254269481'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/01/2-strikes-against-iphone.html' title='2 Strikes Against the iPhone'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-4539279382088529583</id><published>2007-01-10T16:20:00.000-08:00</published><updated>2007-01-12T11:29:13.538-08:00</updated><title type='text'>The Over-Marketed Early-Adopters</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Warning....This falls into the rant category.&lt;/span&gt;&lt;br /&gt;I just glossed over this &lt;a href="http://web2magazine.blogspot.com/2007/01/thanks-for-web-2.html"&gt;list of the Top 100 Web 2.0 sites&lt;/a&gt; posted on &lt;a href="http://digg.com/programming/Top_100_Web_2_0_Sites"&gt;digg&lt;/a&gt;. People have been prophesying the Web 2.0 burst for a year or so but for the first time, after checking out this list, I think I agree. Below are all the websites from the aforementioned list which actually charge for their service:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.sproutit.com/"&gt;Sprout &lt;/a&gt;(Hosted Email Management)&lt;/li&gt;&lt;li&gt;Jajah (VoIP)&lt;/li&gt;&lt;li&gt;Skype (VoIP)&lt;/li&gt;&lt;/ol&gt;Wow, I stopped looking for paid services because I had to include Jajah and Skype just to make a list. They barely charge for their services, only for certain long-distance phone calls. How are the rest of these services structured? All advertising-Based?!? Unless you have massive, consistent web-traffic, most organizations can't convert an advertising-based business plan into a substantial, sustainable revenue-source. Keep this statistic in mind. The combined &lt;span style="font-weight: bold;"&gt;yearly &lt;/span&gt;revenues of Digg, Del.icio.us, and theFacebook.com don't match the &lt;span style="font-weight: bold;"&gt;daily &lt;/span&gt;revenue of a single Costco.&lt;br /&gt;&lt;br /&gt;Web applications that intends to use advertising should have a strong reason built into the product. &lt;a href="http://www.pandora.com/"&gt;Pandora&lt;/a&gt;, a web-based personal dj, is a great example. A flash music player only takes up a small section of webpage providing ample advertising real estate. Also, its radio-like nature gives it precendence in the advertising-based business realm. They are utilizing a proven approach that  traditional companies are open to.&lt;br /&gt;Another thing Pandora seems to get right is they're selling ads for their web space in house.  It amazes me how many advertising-based sites seem to be using Google Adwords. Horrendous. FYI, if you run one of those websites, a 900 pound gorilla is gobbling up the majority of your income.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why don't more websites charge for their services?&lt;/span&gt; Some argue that people don't like to pay for online services -- advertising is the only way to create a cult-like following found with the big 2.0's.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why don't more people purchase online services? &lt;/span&gt;I always have concerns when purchasing an online service that I'll read an article tomorrow telling me about a comparable FREE application. If you really standout from the crowd that shouldn't be an issue.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Checkout all the duplicates:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Personal RSS Feed Aggregators&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Tiny Tiny RSS&lt;/li&gt;&lt;li&gt;Klipfolio&lt;/li&gt;&lt;li&gt;&lt;a href="http://reader.google.com/"&gt;Google Reader&lt;/a&gt;&lt;/li&gt;&lt;li&gt;InstantFeed&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Web-Base Microsoft Office Replacements&lt;/li&gt;&lt;ol&gt;&lt;li&gt;ThinkFree Office&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.zoho.com/"&gt;Zoho&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Google Docs &amp;amp; Spreadsheets&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.editgrid.com/"&gt;EditGrid&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Video/Photo Sharing (one of these is a fake service, see the bottom for the answer)&lt;br /&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Flickr&lt;/li&gt;&lt;li&gt;VideoSift&lt;/li&gt;&lt;li&gt;MotionBox&lt;/li&gt;&lt;li&gt;Dabble.com&lt;/li&gt;&lt;li&gt;Vimeo&lt;/li&gt;&lt;li&gt;FotoFan&lt;/li&gt;&lt;li&gt;YouTube&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;...and the list goes on&lt;br /&gt;&lt;br /&gt;The defining characteristic between Web 2.0 winners and losers will be &lt;span&gt;tangible product differentiation in the eyes of the average user&lt;/span&gt;. Tangible as in:  x integrates with y much better than z does. Moreover, tangible in the sense it that the average person can understand its purpose. You can't get someone excited about Google Reader if they've never heard of an RSS/Atom feed...even worse, if you explain the concept and they don't understand why its useful.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PS-FotoFan was the fake service listed under Video/Photo Sharing&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-4539279382088529583?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/4539279382088529583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=4539279382088529583&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4539279382088529583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4539279382088529583'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/01/over-marketed-early-adopters.html' title='The Over-Marketed Early-Adopters'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-5566953132340290587</id><published>2007-01-04T08:33:00.000-08:00</published><updated>2007-01-04T08:47:28.409-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GTD'/><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='lifehacker'/><title type='text'>Timing Your Vacation</title><content type='html'>&lt;a href="http://www.scottberkun.com/blog/?p=514"&gt;Scott Berkun&lt;/a&gt; had a great post on how to select the best dates for your vacation. I must admit that I enjoyed working the week between Christmas and New Years. Zero phone calls. Euphoric. I'm getting my R&amp;amp;R right before things kick back into full swing (Feb. 3-11) with a trip to Ireland. Yes, the Guinness factory is on my todo list. To use an Irish phrase, should be great crack.&lt;br /&gt;&lt;br /&gt;*This is a definitely a strategy of the &lt;a href="http://www.43folders.com/"&gt;GTD &lt;/a&gt;(Getting Things Done) clan.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-5566953132340290587?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/5566953132340290587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=5566953132340290587&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/5566953132340290587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/5566953132340290587'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/01/timing-your-vacation.html' title='Timing Your Vacation'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-4882511981133399610</id><published>2007-01-01T00:04:00.000-08:00</published><updated>2007-01-01T10:16:43.743-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='goals'/><category scheme='http://www.blogger.com/atom/ns#' term='2007'/><title type='text'>My Goals in 2007</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_5tvmGcWqEn4/RZlP3J2spyI/AAAAAAAAAAg/26MSWEJV54E/s1600-h/powder.jpg.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp3.blogger.com/_5tvmGcWqEn4/RZlP3J2spyI/AAAAAAAAAAg/26MSWEJV54E/s320/powder.jpg.jpg" alt="" id="BLOGGER_PHOTO_ID_5015127469010495266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I have read a number of blog &lt;a href="http://www.lifehacker.com/software/new-years-resolutions/reader-poll--whats-your-top-resolution-for-2007-225083.php"&gt;posts&lt;/a&gt; about people's goals for 2007 and it got me thinking about what I want to accomplish. Here's my list:&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Finish RSScholar, my web-based RSS/Atom feed creator, and release it publicly. The concept is to allow professors, students, and intellectuals alike to easily tag and share journal articles. I hope to have the beta version finished before the end of the week.&lt;/li&gt;&lt;li&gt;Continue to establish my presence as an operations guru. I've found many small business don't take full advantage of the current technology revolution (web, software, and hardware). Its amazing how much time you can free up with a little integration. I hope to expand my consulting business 200%-300%, which is a little deceiving since I'm working full-time with one company right now.&lt;/li&gt;&lt;li&gt;Get out west and enjoy at least one amazing powder day. I love my work but you have to keep everything in balance. I'm thinking Alta, Jackson Hole, or Big Sky (you never have to fight a crowd in Montana).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Enjoy Life.&lt;/li&gt;&lt;/ol&gt;I wish everyone the best in the new year. I'd love to know some of your New Year's resolutions, comment away.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-4882511981133399610?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/4882511981133399610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=4882511981133399610&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4882511981133399610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4882511981133399610'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2007/01/my-goals-in-2007.html' title='My Goals in 2007'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_5tvmGcWqEn4/RZlP3J2spyI/AAAAAAAAAAg/26MSWEJV54E/s72-c/powder.jpg.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-3925359178984170712</id><published>2006-12-27T10:53:00.000-08:00</published><updated>2006-12-30T18:23:50.274-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='widget'/><category scheme='http://www.blogger.com/atom/ns#' term='translation'/><title type='text'>Add A Translation Tool To Your Blog</title><content type='html'>I added Google Analytics to my blog a couple weeks ago because I was interested to see where my web traffic was coming from. I was surprised at the percentage of views coming from non-English speaking countries (~33%). I started wondering if all these individuals were adept at reading English or were just muddling through my posts to get to the code (most of the views were for my code-related entries). After a minute or two of contemplation, it dawned on me I could make their life a whole lot easier by providing a translation tool. So, I jumped onto &lt;a href="http://www.google.com/translate_t"&gt;Google Translation&lt;/a&gt; and took a quick look at how they structure their URL variables. Here's the HTML/Javascript widget I came up with:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;form action="http://www.google.com/translate" onsubmit="this.u.value=window.location.href" method="GET"&amp;gt;&lt;br /&gt;&amp;lt;input value="en" name="hl" type="hidden"/&amp;gt;&lt;br /&gt;&amp;lt;input value="UTF8" name="ie" type="hidden"/&amp;gt;&lt;br /&gt;&amp;lt;input value="" name="u" type="hidden"/&amp;gt;&lt;br /&gt;Select Language: &amp;lt;select name="langpair"&amp;gt;&lt;br /&gt;&amp;lt;option value="en|fr"/&amp;gt;French&lt;br /&gt;&amp;lt;option value="en|de"/&amp;gt;German&lt;br /&gt;&amp;lt;option value="en|it"/&amp;gt;Italian&lt;br /&gt;&amp;lt;option value="en|pt"/&amp;gt;Portuguese&lt;br /&gt;&amp;lt;option value="en|es"/&amp;gt;Spanish&lt;br /&gt;&amp;lt;option value="en|ar"/&amp;gt;Arabic BETA&lt;br /&gt;&amp;lt;option value="en|zh-CN"/&amp;gt;Chinese (Simplified) BETA&lt;br /&gt;&amp;lt;option value="en|ja"/&amp;gt;Japanese BETA&lt;br /&gt;&amp;lt;option value="en|ko"/&amp;gt;Korean BETA&lt;br /&gt;&amp;lt;option value="en|ru"/&amp;gt;Russian BETA&lt;br /&gt;&amp;lt;/select&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;&amp;lt;input value="Translate" type="submit"/&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The form posts to Google's Translation Service and seems to do a good job of converting the page to the selected language. Please be aware of two things:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;The languages listed in Beta can mess with the page layout a little bit. Remove those from the select box option list if thats a major concern for you.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The WHOLE page will be translated. If some of your posts deal with code examples, they will be turned into some bizarre/humorous pseudo-code.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;To use the widget, just copy and paste the above code into the proper section of your blog Template. If you are using Blogger, paste the code into a "Third Party HTML/Javascript" module.&lt;br /&gt;The widget works great and provides a nice way for people to read your posts in their native tongue. Please let me know if you run into any problems. I'll be more than happy to troubleshoot issues as they arise.&lt;br /&gt;&lt;br/&gt; &lt;em&gt;Enjoy!&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-3925359178984170712?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/3925359178984170712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=3925359178984170712&amp;isPopup=true' title='33 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3925359178984170712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/3925359178984170712'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2006/12/add-translation-tool-to-your-blog.html' title='Add A Translation Tool To Your Blog'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>33</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-4407661479176856941</id><published>2006-12-26T14:04:00.000-08:00</published><updated>2006-12-26T14:10:37.726-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='customer service'/><category scheme='http://www.blogger.com/atom/ns#' term='godin'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>::Customer Service:: So Easy to Provide, So Easy to Slack</title><content type='html'>Great &lt;a href="http://sethgodin.typepad.com/seths_blog/2006/12/its_so_easy.html"&gt;post&lt;/a&gt; by Seth Godin on customer service. Even better picture!&lt;br/&gt; &lt;a href="http://sethgodin.typepad.com/seths_blog/images/cvs.jpg"&gt;&lt;img src="http://sethgodin.typepad.com/seths_blog/images/cvs.jpg" alt="Woman On Phone" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-4407661479176856941?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/4407661479176856941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=4407661479176856941&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4407661479176856941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/4407661479176856941'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2006/12/customer-service-is-still-issue.html' title='::Customer Service:: So Easy to Provide, So Easy to Slack'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-323420731053674893</id><published>2006-12-23T14:58:00.000-08:00</published><updated>2006-12-23T19:13:53.591-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>watch() :: One of Many Missing JS Functions in IE</title><content type='html'>I've been playing around with Adobe's Flex for a couple months now and one feature that keeps impressing me is the ease with which you can bind Actionscript variables to UI Elements. I started wondering if there was any way to attach an onchange event to a JavaScript variable so I could replicate the effect with HTML controls. After a little searching on &lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference"&gt;Mozilla.org&lt;/a&gt;, I found the watch() function. You can check out the documentation &lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Object:watch"&gt;here&lt;/a&gt;. Essentially, it will run a function that you define every time a JS variable is changed. Something very useful if you use data access objects to pass information back and forth in your AJAX applications. The problem is that IE doesn't support the method (surprise, surprise). So I set out to create a work around. Here's the resulting function:&lt;br /&gt;&lt;pre&gt; /* Cross Browser Watch Function */&lt;br /&gt;  Object.prototype.xwatch = function (prop,func){&lt;br /&gt;      if(!Object.watch){&lt;br /&gt;        new IEwatch(this,prop,func);&lt;br /&gt;      }&lt;br /&gt;      else{&lt;br /&gt;          this.watch(prop,func);&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;  var IEwatch = Class.create();&lt;br /&gt;  IEwatch.prototype = {&lt;br /&gt;      initialize: function(obj,prop,func){&lt;br /&gt;          this.obj = obj;&lt;br /&gt;          this.prop = prop;&lt;br /&gt;          this.func = func;&lt;br /&gt;          this.oldvalue = this.obj[this.prop];&lt;br /&gt;          setInterval(this.check.bind(this),50);&lt;br /&gt;      },&lt;br /&gt;      check : function(){&lt;br /&gt;          if(this.obj[this.prop] != null &amp;&amp;amp; this.obj[this.prop] != this.oldvalue){&lt;br /&gt;              this.oldvalue=this.func(this.prop,this.oldvalue,this.obj[this.prop]);&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;First, I start off by extending the Object Class by adding a new method called xwatch (cross-browser watch). If the browser supports watch() then the native function is used otherwise my IEwatch method is used. IEwatch polls the variable specified looking for a change in the variable's value. Kinda crude but it works. I haven't run into any problems with race situations yet.&lt;br /&gt;&lt;br /&gt;I also created the function below to bind a JS variable to another Object. You could use it to bind a variable to a text input or the innerHTML property of a div etc etc.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/* Data Bind Functions */&lt;br /&gt;     var dataBinding = Class.create();&lt;br /&gt;     dataBinding.prototype = {&lt;br /&gt;         initialize: function(sourceObj, sourceProp, destinationObj, destinationProp){&lt;br /&gt;             this.srcObj=sourceObj;&lt;br /&gt;             this.srcProp=sourceProp;&lt;br /&gt;             this.destObj=destinationObj;&lt;br /&gt;   this.destProp=destinationProp;&lt;br /&gt;             var temp = this.update(this.sourceProp, this.srcObj[this.srcProp],this.srcObj[this.srcProp]);&lt;br /&gt;             this.create();&lt;br /&gt;         },&lt;br /&gt;         create: function(){&lt;br /&gt;             this.srcObj.xwatch(this.srcProp,this.update.bind(this));&lt;br /&gt;         },&lt;br /&gt;         update: function(id, oldvalue, newvalue){&lt;br /&gt;             this.destObj[this.destProp] = newvalue;&lt;br /&gt;             return newvalue;&lt;br /&gt;         }&lt;br /&gt;      }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note, these Classes required prototype.js to function.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-323420731053674893?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/323420731053674893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=323420731053674893&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/323420731053674893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/323420731053674893'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2006/12/wactch-one-of-many-missing-js-function.html' title='watch() :: One of Many Missing JS Functions in IE'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-116330139661729410</id><published>2006-11-11T18:55:00.000-08:00</published><updated>2006-11-28T20:58:12.846-08:00</updated><title type='text'>Optimizing Page Loading in ColdFusion</title><content type='html'>I was reading &lt;a href="http://www.die.net/musings/page_load_time/"&gt;this posting&lt;/a&gt; by Aaron Hopkins (a Google Engineer) about optimizing page loading when I started to think about my experimentation with different AJAX implementations. Every time I tried a new implementation, I'd end up with a hodge podge of javascript files on my demo website (some from the previous framework, some from the new). After reading that post, I've come to realize that even though it may be nicer to link to each javascript file individually, this behavior can negatively affect load time. This is due in large part to modern browsers limitations to only allow two outstanding HTTP Requests at any time.&lt;br /&gt;Personally, I still like keeping things organized but I don't want to sacrifice performance for it. So, I've started using the following approach for all my sites:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create two ColdFusion pages (or PHP, Ruby, etc) that change the mime type to "text/js" and "text/css" respectively.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Then include all the appropriate js or css files using &amp;lt;cfinclude&amp;gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;/* js_compilation.cfm*/&lt;br /&gt;&amp;lt;cfcontent type="text/js"&amp;gt;&lt;br /&gt;&amp;lt;cfinclude template="js/core.js"&amp;gt;&lt;br /&gt;&amp;lt;cfinclude template="js/prototype.js"&amp;gt;&lt;br /&gt;&amp;lt;cfinclude templat="js/rico.js"&amp;gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lastly, you should simply reference that file in the Head section of the calling page.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&amp;lt;script src="js_compilation.cfm" type="text/js"&amp;gt;&lt;br /&gt;Do the same thing for all your assorted CSS files and you're load time should be significantly improved without sacrificing organization. You can keep your file structure simple and efficient.&lt;br /&gt;Cheers,&lt;br /&gt;Todd&lt;br /&gt;&lt;br /&gt;PS-I know everyone should be crunching their JS files into one library but we can't all afford to do that. This is a simple step that everyone can handle.&lt;/cfinclude&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-116330139661729410?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/116330139661729410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=116330139661729410&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/116330139661729410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/116330139661729410'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2006/11/optimizing-page-loading-in-coldfusion.html' title='Optimizing Page Loading in ColdFusion'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-116293997138786895</id><published>2006-11-07T14:36:00.000-08:00</published><updated>2006-11-11T19:10:29.118-08:00</updated><title type='text'>Stikkit! and my Vista Experience</title><content type='html'>I should probably start off where I left off. Vista. Once I got past all the flashy new UI components,I was left with a very sour taste in my mouth. Backward compatibility is a serious issue. I realize I'm using a pre-release version but more than half of the programs I became accustomed to using on XP crash on Vista. The most annoying of all is Eclipse which throws a JVM error (Java error) randomly when I'm doing any file folder manipulation. Since I use it all the time for programming, its particularly disruptive. Another killer is the pre-release for Fireworks 9 (Adobe's image editing suite geared towards web design), I haven't been able to get the thing to install yet. Tried everything under the sun, crashes right when I starts the main installation. You know when the little status bar comes up. I've come to hate that damn bar. I guess I shouldn't surprised. Microsoft's products, excluding SQL Server, tend to be skin deep apps. Real pretty when you first pull them up and you read about all the stuff they do but then you realize all the hoops you have to jump through to get there. I think thats the reason I've become so partial to programming all my work rather than using Excel et al. I can define the interface to support exactly what I'm doing. Nonetheless, lets move on to the new web 2.0 app. &lt;a href="http://www.stikkit.com"&gt;Stikkit&lt;/a&gt;. Its got a very sleek UI with some sweet features not overtly apparent. The sites general concept is a web-based stick-it note, hence stikkit. Type in something you want to remind yourself of with a date or perhaps a buddy you want to share the note with and the application figures it out on its own. I tested it out by typing "I have a presentation due on Monday". In response, it created a calendar event automatically. I wonder if they're using an AI friendly server-side language like python to get the job done. I'll poke around and see what I find out. Cheers,&lt;br /&gt;Todd&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-116293997138786895?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/116293997138786895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=116293997138786895&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/116293997138786895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/116293997138786895'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2006/11/stikkit-and-my-vista-experience.html' title='Stikkit! and my Vista Experience'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-116170650923448580</id><published>2006-10-24T09:11:00.000-07:00</published><updated>2006-11-11T19:10:28.911-08:00</updated><title type='text'>Holy Crap! My two greatest passions combined.</title><content type='html'>The two things I  do spend money on. Sunglasses and music have just been combined! Check it out: http://oakley.com/o/o2794d/p8743 .  I'm not someone who jumps on trends just because but in this instance I'll make  an exception.  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://mi.oakley.com/site/media/cache/4460c348133ae.png_242_0_0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://mi.oakley.com/site/media/cache/4460c348133ae.png_0_0_0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I'm very excited for these + ski season.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-116170650923448580?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/116170650923448580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=116170650923448580&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/116170650923448580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/116170650923448580'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2006/10/holy-crap-my-two-greatest-passions.html' title='Holy Crap! My two greatest passions combined.'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-116165450143663209</id><published>2006-10-23T18:26:00.000-07:00</published><updated>2006-11-11T19:10:28.500-08:00</updated><title type='text'>Calling All Flex/ColdFusion Coders</title><content type='html'>So I finally got the go-ahead to build my own development team today. I'll be building the first ERP system designed specifically for the small business auto leasing company. I'm looking for  ColdFusion/Flex expert plus an HTML/CSS Design Coder. The system will be sold on a subscription basis and will feature mass integration with banks, remarketing organizations, and auto manufacturers. In addition, you can expect all the traditional ERP systems such as Sales and Marketing tracking features and accounting/finance functionality.&lt;br /&gt;Exciting times...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-116165450143663209?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/116165450143663209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=116165450143663209&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/116165450143663209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/116165450143663209'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2006/10/calling-all-flexcoldfusion-coders.html' title='Calling All Flex/ColdFusion Coders'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-116120551046947273</id><published>2006-10-18T13:44:00.000-07:00</published><updated>2006-11-11T19:10:28.305-08:00</updated><title type='text'>Trying New Things....(work in process)</title><content type='html'>I've decided to give a few new applications a look and I may as well share my experience with everyone in the process.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Windows Vista: I'm actually installing the OS right now on my other computer. I'll let you know how it goes once I get a little farther along.&lt;/li&gt;&lt;li&gt;FireFox v2: The full version is not ready for release yet but they are up to Release Candidate 3. So far so good. They've added a built in spell cheker (I only have IE on this machine). An excellent feature for web developers too lazy to connect their web apps to google's spell check web service. Also, there's greatly enhanced DOM/W3C compliance for all you AJAX developers out there. I don't even like to look at the websites I'm developing in version 2 (even though they look sweet) since so few other people are using it. It just pains me to switch back to IE.&lt;/li&gt;&lt;li&gt;ColdFusion version 8: No, I haven't actually had a chance to check it out but I've been given a few hints as to the bonus features we can all expect. For starters, PDF web documents/forms will be multi-functional. People will be able to input the information on the screen and submit the data like a regular HTML form OR print it out like a plain 'ol PDF. Sadly, I don't think there's been any advancement on including digital signatures. Spry (Adobe's AJAX framework) will have some hooks in dreamweaver making it very easy to pass information back and forth between the client and server-side CFC's. I'll continue to probe my source for more info but hopefully this will get you thinking.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Gotta focus on getting Vista up and running. I'll update this post when I found out more.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-116120551046947273?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/116120551046947273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=116120551046947273&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/116120551046947273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/116120551046947273'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2006/10/trying-new-thingswork-in-process.html' title='Trying New Things....(work in process)'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-115983742598236144</id><published>2006-10-02T17:45:00.000-07:00</published><updated>2006-11-11T19:10:28.122-08:00</updated><title type='text'>Developing Data Systems for the Small Business</title><content type='html'>Its an interesting situation being in a small company transitioning to medium/large volume of business. In general, employees are still performing a wide range of jobs (you wear many hats) and being stretched increasingly thin.&lt;br /&gt;An up and coming small business rarely has a business application that meets their needs (if they are indeed up and coming). So, they need an app that encapsulates or replaces their existing technology and has the ability to scale with future percieved or unpercieved growth.   I have a few suggestions for anyone starting a project to complete such an enterprise app:&lt;br /&gt;&lt;br /&gt;1. Stay away from straight data entry applications. Yes, they're quick to create and effective for record keeping but they don't command a high usage rate. If your application produces something used in the day to day business operations, then the average employee will be compelled to use your application correctly and often (plus, they'll help you debug it).&lt;br /&gt;&lt;br /&gt;2. Look for opportunistic data entry. There are many times when you can't get &lt;span style="font-style: italic;"&gt;all&lt;/span&gt; the information you need in one format. Rather than default to a standard data entry app, get as much information as you can with every possible opportunity (w/in reason). For example, if you have to gather the colors for all the vehicles owned in a fleet, allow people to email vehicle information from within the application and just a add a color field.&lt;br /&gt;&lt;br /&gt;3. Distribute the load of data entry to your suppliers and clients. Seems so simple but it gets overlooked time and time again.  Allow your clients a standardize way to submit their orders to you, it will allow you to provide better turn around on their services while freeing up company man hours. Most of all, get your suppliers to provide you with all your invoices, supply information, etc.  the way you need it. Most company still follow "the customer's always right" motto.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Above all else, cut out any monotonious/repeatitive tasks whenever possible.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-115983742598236144?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/115983742598236144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=115983742598236144&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/115983742598236144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/115983742598236144'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2006/10/developing-data-systems-for-small.html' title='Developing Data Systems for the Small Business'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35088216.post-115933255849852762</id><published>2006-09-26T21:22:00.000-07:00</published><updated>2006-11-11T19:10:27.865-08:00</updated><title type='text'>Forcing some coherent thought...</title><content type='html'>This is my first post in my new blog. The first of many, hopefully...I've never been much of a blogger. For some reason, I've always found taking the time to put my thoughts on paper was just time that could have been better spent producing something. So, to meet myself in the middle, I've decided to compose my business thoughts and ambitions; plus, keep people posted on the sweetest corners of the web that the average person might not wander. Stay with me, you won't regret it.&lt;br /&gt;&lt;br /&gt;Websites you need to see no matter who you are (Web 2.0 Apps):&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.editgrid.com"&gt;EditGrid.com&lt;/a&gt; (google spreadsheets &lt;  editgrid)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.zoho.com"&gt;ZoHo&lt;/a&gt; (replaces everything in the Microsoft Office package)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.gawker.com/stalker/"&gt;Gawker Stalker&lt;/a&gt; (been alive and kicking for a year now..scary use for 2.0 app)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Technology thats gonna kill in the next couple years:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; &lt;a href="http://labs.adobe.com/wiki/index.php/Apollo"&gt;Apollo&lt;/a&gt; (think web browser with all the capabilities/ resources of a desktop app)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.openlaszlo.org"&gt;Open Laszlo&lt;/a&gt; (creating an open source Flash/DHTML application dev. tool)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/"&gt;Google Web Toolkit&lt;/a&gt; (Knock out client-side code w/ Java...nice)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;So much more to say but not today.&lt;br /&gt;&lt;br /&gt;PS-I'm still learning the intracacies of Python but I'm encouraged to see blogger using some *.py CGI's.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35088216-115933255849852762?l=forwarddevelopment.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://forwarddevelopment.blogspot.com/feeds/115933255849852762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35088216&amp;postID=115933255849852762&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/115933255849852762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35088216/posts/default/115933255849852762'/><link rel='alternate' type='text/html' href='http://forwarddevelopment.blogspot.com/2006/09/forcing-some-coherent-thought.html' title='Forcing some coherent thought...'/><author><name>Todd Cullen</name><uri>http://www.blogger.com/profile/08415290288342516108</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
