<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>RSS feed for InstantSpot site Progressive Overload</title><link>http://ajlcom.instantspot.com</link><description>Aaron Lynch on web development and other stuff</description><language>en-us</language><copyright>This work is Copyright &#xA9; 2009 by Progressive Overload</copyright><generator>RSSVille ColdFusion FeedMaker, version 1.0</generator><pubDate>Sat, 21 Nov 2009 12:12:57 GMT</pubDate><item><title>Coldfusion on the Google App Engine with Open BlueDragon</title><link>http://ajlcom.instantspot.com/blog/2009/11/20/Coldfusion-on-the-Google-App-Engine-with-Open-BlueDragon</link><description>&lt;p&gt;&lt;strong&gt;The future is now!&amp;nbsp; &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;A little melodramatic maybe, but this technology is exciting.&amp;nbsp; Free cfml app servers with clustering (including data and file storage).&amp;nbsp;&lt;/p&gt; &lt;p&gt;First, if you don&apos;t know what the Google App&amp;nbsp;Engine is yet, go &lt;a href=&quot;http://code.google.com/appengine/&quot;&gt;here&lt;/a&gt; first and do a little reading.&amp;nbsp; Once you have read enough of that to be sufficiently excited, we need to set up the development and deployment tools.&amp;nbsp; Paul Kukiel has put together a really nice demo on how to do this &lt;a href=&quot;http://blog.kukiel.net/2009/09/coldfusion-on-google-app-engine-with.html&quot;&gt;here&lt;/a&gt;.&amp;nbsp; &lt;strong&gt;NOTE&amp;nbsp;THERE&amp;nbsp;IS&amp;nbsp;ONE&amp;nbsp;THING&amp;nbsp;THAT&amp;nbsp;IS&amp;nbsp;INCORRECT&amp;nbsp;IN&amp;nbsp;THE&amp;nbsp;VIDEO &amp;nbsp; &lt;/strong&gt; Do not delete the &amp;quot;war&amp;quot; directory, merely paste the openbd war over the existing one.&amp;nbsp; This is important.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Next, reading and writing data with the Google datastore.&amp;nbsp;&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt;Storing data in a scalable web application can be tricky. A user could be interacting with any of dozens of web servers at a given time, and the user&apos;s next request could go to a different web server than the one that handled the previous request. All web servers need to be interacting with data that is also spread out across dozens of machines, possibly in different locations around the world.  &lt;br /&gt; &lt;/blockquote&gt;&lt;blockquote&gt;Thanks to Google App Engine, you don&apos;t have to worry about any of that. App Engine&apos;s infrastructure takes care of all of the distribution, replication and load balancing of data behind a simple API&amp;mdash;and you get a powerful query engine and transactions as well.&lt;/blockquote&gt; &lt;p&gt;Thanks to the fine people at Open BlueDragon, this task is made very very simple.&amp;nbsp; Every cfc in the openBD GAE inherits the following methods from component.cfc.&amp;nbsp; GoogleWrite(), GoogleRead(), and GoogleKey().&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;-- Example object Status.cfc:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;&amp;lt;cfcomponent displayname=&amp;quot;Status&amp;quot; output=&amp;quot;false&amp;quot;&amp;gt;   &amp;lt;cfproperty name=&amp;quot;Message&amp;quot; displayname=&amp;quot;Message&amp;quot; type=&amp;quot;string&amp;quot; /&amp;gt;  &amp;lt;cfproperty name=&amp;quot;DateTimeCreated&amp;quot; displayname=&amp;quot;DateTimeCreated&amp;quot; type=&amp;quot;date&amp;quot; /&amp;gt;   &amp;lt;cffunction name=&amp;quot;init&amp;quot; access=&amp;quot;public&amp;quot; output=&amp;quot;false&amp;quot; returntype=&amp;quot;Status&amp;quot;&amp;gt;   &amp;lt;cfreturn this/&amp;gt;  &amp;lt;/cffunction&amp;gt;   &amp;lt;cffunction name=&amp;quot;getMessage&amp;quot; access=&amp;quot;public&amp;quot; output=&amp;quot;false&amp;quot; returntype=&amp;quot;string&amp;quot;&amp;gt;   &amp;lt;cfreturn this.Message /&amp;gt;  &amp;lt;/cffunction&amp;gt;   &amp;lt;cffunction name=&amp;quot;setMessage&amp;quot; access=&amp;quot;public&amp;quot; output=&amp;quot;false&amp;quot; returntype=&amp;quot;void&amp;quot;&amp;gt;   &amp;lt;cfargument name=&amp;quot;Message&amp;quot; type=&amp;quot;string&amp;quot; required=&amp;quot;true&amp;quot; /&amp;gt;   &amp;lt;cfset this.Message = arguments.Message /&amp;gt;   &amp;lt;cfreturn /&amp;gt;  &amp;lt;/cffunction&amp;gt;   &amp;lt;cffunction name=&amp;quot;getDateTimeCreated&amp;quot; access=&amp;quot;public&amp;quot; output=&amp;quot;false&amp;quot; returntype=&amp;quot;date&amp;quot;&amp;gt;   &amp;lt;cfreturn this.DateTimeCreated /&amp;gt;  &amp;lt;/cffunction&amp;gt;   &amp;lt;cffunction name=&amp;quot;setDateTimeCreated&amp;quot; access=&amp;quot;public&amp;quot; output=&amp;quot;false&amp;quot; returntype=&amp;quot;void&amp;quot;&amp;gt;   &amp;lt;cfargument name=&amp;quot;DateTimeCreated&amp;quot; type=&amp;quot;date&amp;quot; required=&amp;quot;true&amp;quot; /&amp;gt;   &amp;lt;cfset this.DateTimeCreated = arguments.DateTimeCreated /&amp;gt;   &amp;lt;cfreturn /&amp;gt;  &amp;lt;/cffunction&amp;gt;    &amp;lt;/cfcomponent&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;-- Writing data to the datastore:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;&amp;lt;cfscript&amp;gt; //saving a new Status to Google datastore Status = createObject( &amp;quot;component&amp;quot;, &amp;quot;model.Status&amp;quot; ).init(); Status.setMessage( &amp;quot;I love Google App Engine and OpenBD!&amp;quot; ); Status.setDateTimeCreated( Now() );  /*now all we do is call the googleWrite() method on our object, notice this returns the objects new google key*/ googleKey = Status.googleWrite(); &amp;lt;/cfscript&amp;gt; &lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;-- &lt;strong&gt;Querying the datastore:&lt;/strong&gt;&amp;nbsp; for more on this visit the &lt;a href=&quot;http://wiki.openbluedragon.org/wiki/index.php/GoogleAppEngine:Datastore&quot;&gt;openBD wiki page on the datastore&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;&amp;lt;!--- notice dbtype=&amp;quot;google&amp;quot; and the quasi-SQL  ---&amp;gt; &amp;lt;cfquery dbtype=&amp;quot;google&amp;quot; name=&amp;quot;result&amp;quot;&amp;gt; Select from Status &amp;lt;/cfquery&amp;gt;  &amp;lt;!--- The result of this query, is an array of matching Status objects.  Not the usual query recordset. ---&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Securing your new web app&lt;/strong&gt; with the UserServiceFactory (com.google.appengine.api.users.UserServiceFactory)&lt;/p&gt; &lt;p&gt;Once I figured this step out, it was almost embarassingly easy to secure a page, allowing access only to validated Google account holders.&lt;/p&gt; &lt;p&gt;&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;&amp;lt;cfscript&amp;gt; UserServiceFactory = CreateObject(&amp;quot;java&amp;quot;,&amp;quot;com.google.appengine.api.users.UserServiceFactory&amp;quot;);  User = UserServiceFactory.getUserService().getCurrentUser();  /*Here I am doing a test to see if there is a valid user object returned, aka &amp;quot;logged in&amp;quot;.  At this time, I haven&apos;t found the ideal solution for this*/  isLoggedIn = false;  try{    user.getEmail();    isLoggedIn = true; } catch (any excpt){}  &amp;lt;/cfscript&amp;gt;  &amp;lt;!---  building login/logut links  ---&amp;gt;  &amp;lt;cfif NOT isLoggedIn&amp;gt; YOU NEED TO &amp;lt;a href=&amp;quot;&amp;lt;cfoutput&amp;gt;#UserServiceFactory.getUserService().createLoginURL(toString(&amp;quot;http://#cgi.SERVER_NAME#&amp;quot;))#&amp;lt;/cfoutput&amp;gt;&amp;quot;&amp;gt;LOGIN&amp;lt;/a&amp;gt; &amp;lt;cfelse&amp;gt;  &amp;lt;cfoutput&amp;gt;#request.user.getEmail()#&amp;lt;/cfoutput&amp;gt;:  All your email are belong to us   &amp;lt;br /&amp;gt;  &amp;lt;a href=&amp;quot;&amp;lt;cfoutput&amp;gt;#UserServiceFactory.getUserService().createLogoutURL(toString(&amp;quot;http://#cgi.SERVER_NAME#&amp;quot;))#&amp;lt;/cfoutput&amp;gt;&amp;quot;&amp;gt;LOGOUT&amp;lt;/a&amp;gt; &amp;lt;/cfif&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Time to build some real applications.&lt;/strong&gt;&amp;nbsp; Early indications from some experimentation by &lt;a href=&quot;http://www.daveshuck.com&quot;&gt;Dave Shuck&lt;/a&gt;, are revealing that the Mach-ii MVC framework along with the Coldspring IOC framework are working on the Google&amp;nbsp;App Engine.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Other features, new or otherwise:&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt;     &lt;li&gt;&lt;a href=&quot;http://code.google.com/appengine/docs/python/config/cron.html&quot;&gt;cron support&lt;/a&gt;&lt;/li&gt;     &lt;li&gt;&lt;a href=&quot;http://code.google.com/appengine/docs/python/tools/uploadingdata.html&quot;&gt;database import&lt;/a&gt;&lt;/li&gt;     &lt;li&gt;&lt;a href=&quot;http://code.google.com/securedataconnector/&quot;&gt;access to firewalled data&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;There is just no reason that we as cfml developers shouldn&apos;t be churning out app after app on this platform.&amp;nbsp;&lt;/p&gt;</description><pubDate>Sat, 21 Nov 2009 03:54:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2009/11/20/Coldfusion-on-the-Google-App-Engine-with-Open-BlueDragon</guid><category>ColdFusion,Web Development,BlueDragon,Internet,Google App Engine</category></item><item><title>BlueDragon 7 JX and Apache 2.2 on Ubuntu Feisty (7.04)</title><link>http://ajlcom.instantspot.com/blog/2007/04/16/BlueDragon-7-JX-and-Apache-22-on-Ubuntu-Feisty-704</link><description>&lt;p&gt;  So you want to install BlueDragon 7 (JX version) with Apache 2.2 on your Ubuntu Feisty machine?  &lt;/p&gt;  &lt;p&gt;  Well, lucky for you it is SO EASY!  &lt;/p&gt;  &lt;p&gt;  First- go download &lt;a href=&quot;http://www.newatlanta.com/c/products/bluedragon/download/showLicenseAgreement?sku=BD-18-070-jxd&quot;&gt;BlueDragon JX for linux&amp;nbsp;&lt;/a&gt;  &lt;/p&gt;  &lt;p&gt;  Once you have that, head over to Dave Shucks HowTo on installing Apache2.2 from source &lt;a href=&quot;http://daveshuck.instantspot.com/blog/index.cfm/2006/6/12/Installing-CFMX7--Apache222-on-Ubuntu-606&quot;&gt;here&lt;/a&gt;.&amp;nbsp; His write-up is for&amp;nbsp; 6.06 (Dapper) but it still works great.  &lt;/p&gt;  &lt;p&gt;  Ok so if you have come this far you know that &amp;quot;IT WORKS!&amp;quot; right?  &lt;/p&gt;  &lt;p&gt;  That was the hard part, now all you need to do is locate the downloaded BlueDragon installation shell script.&amp;nbsp; (Lets say it is in my /home/alynch/download directory) and run it.  &lt;/p&gt;  &lt;p&gt;  Note:&amp;nbsp; Be sure to run the shell script as root if you want it to correctly connect to your Apache webserver. &amp;nbsp;  &lt;/p&gt;  &lt;p&gt;  &lt;strong&gt;sudo /home/alynch/download/BlueDragon_Server_JX_70_339-Linux.sh&lt;/strong&gt;  &lt;/p&gt;  &lt;p&gt;  Not running the script as sudo won&amp;#39;t throw any exceptions, but it will fail to make the necessary changes to your httpd.conf file.  &lt;/p&gt;  &lt;p&gt;  Follow the prompts, choose your installation directory or accept the default.&amp;nbsp; And thats it!&amp;nbsp; As soon as the installer is finished, restart Apache and start serving .cfm&amp;#39;s through port 80.  &lt;/p&gt;  &lt;p&gt;  &amp;nbsp;  &lt;/p&gt;  &lt;p&gt;  FOR MYSQL USERS:  &lt;/p&gt;  &lt;p&gt;  You will need to download the connector from MySQL &lt;a href=&quot;http://www.mysql.com/products/connector/j/index.html&quot;&gt;here&lt;/a&gt;  &lt;/p&gt;  &lt;p&gt;  Extract the connector jar file from the downloaded archive.&amp;nbsp; Change the jar file&amp;#39;s name:  &lt;/p&gt;  &lt;p&gt;  -from (something like) &lt;strong&gt;mysql-connector-java-5.0.4-bin.jar&amp;nbsp;&lt;/strong&gt;   &lt;/p&gt;  &lt;p&gt;  -to &lt;strong&gt;mysql.jar&lt;/strong&gt;  &lt;/p&gt;  &lt;p&gt;  And move the mysql.jar to the lib directory of your BlueDragon installation directory.&amp;nbsp; If you had already started BlueDragon, you will need to restart it once you have placed the mysql.jar file in the lib directory.  &lt;/p&gt;  &lt;p&gt;  FYI The default BlueDragon admin location is http://localhost:8080/bluedragon/admin.cfm.  &lt;/p&gt;  &lt;p&gt;  &amp;nbsp;  &lt;/p&gt;  &lt;div align=&quot;left&quot; style=&quot;text-align: center&quot;&gt;  &lt;img src=&quot;http://img174.imageshack.us/img174/2497/screenshotcm0.png&quot; border=&quot;1&quot; alt=&quot; &quot; width=&quot;300&quot; height=&quot;149&quot; /&gt;  &lt;/div&gt;  &lt;div align=&quot;center&quot; style=&quot;text-align: center&quot;&gt;  &amp;nbsp;  &lt;/div&gt;  &lt;p&gt;  &amp;nbsp;  &lt;/p&gt;  &lt;p&gt;  My VERY EARLY impression is that the installer was much nicer than the ColdFusion installer, with heavy points going to the easy of the Apache webserver configuration as compared to wsconfig for ColdFusion.&amp;nbsp; Other than that it&amp;#39;s really too early to report on much else.  &lt;/p&gt;  &lt;p&gt;  &amp;nbsp;  &lt;/p&gt;  &lt;p&gt;  &amp;nbsp;  &lt;/p&gt;  </description><pubDate>Mon, 16 Apr 2007 18:29:46 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2007/04/16/BlueDragon-7-JX-and-Apache-22-on-Ubuntu-Feisty-704</guid><category>BlueDragon</category></item><item><title>Robots and main page accessibility</title><link>http://ajlcom.instantspot.com/blog/2005/11/15/Robots-and-main-page-accessibility</link><description>On my quest towards e-stardom (aka a relevant and content-rich website), I realized that the navigation towards my older &amp;quot;news items&amp;quot; was somewhat lacking.  My solution for this problem was to create a side bar menu that would contain all of the news item titles in descending date order (aka newest first). &lt;br /&gt;  &lt;br /&gt;  A day or two after this change, I began to notice a positive side-effect to including all of these titles as links on the main page...The robots (spiders) were crawling all through my site!  I&amp;#39;m not 100% sure, but I can&amp;#39;t imagine how this increased indexing would hurt my chances of being returned in some search results.&lt;br /&gt;  &lt;br /&gt;  In a possibly related subject, a Google search for &amp;#39;Aaron Lynch&amp;#39; now returns this page in the top 10 search results (#6 as of this entry) and an MSN search returns &lt;a href=&quot;http://www.aaronjlynch.com&quot;&gt;www.AaronJLynch.com&lt;/a&gt; as #3!&lt;br /&gt;  &lt;br /&gt;  Does anybody want my autograph?  &lt;img src=&quot;/fckeditor/editor/images/smiley/msn/wink_smile.gif&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;  &lt;br /&gt;  UPDATE 1/25/06:  Either Google has changed my ranking somehow, or my switch to BlogCFC&amp;nbsp; has harmed my accessibility somehow.  I now turn up on like page 5 or something terrible.  Back to the drawing board!    </description><pubDate>Tue, 15 Nov 2005 06:00:00 GMT</pubDate><guid>http://ajlcom.instantspot.com/blog/2005/11/15/Robots-and-main-page-accessibility</guid><category>SEO</category></item></channel></rss>