<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>For the Developer &#187; Randy Merrill</title>
	<atom:link href="http://forthedeveloper.com/author/zoramite/feed/" rel="self" type="application/rss+xml" />
	<link>http://forthedeveloper.com</link>
	<description>By Developers, For Developers</description>
	<lastBuildDate>Tue, 20 Jul 2010 23:54:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>GIT SSH keys with Hudson on Ubuntu’s Tomcat</title>
		<link>http://forthedeveloper.com/2010/git-ssh-keys-with-hudson-on-ubuntu%e2%80%99s-tomcat/</link>
		<comments>http://forthedeveloper.com/2010/git-ssh-keys-with-hudson-on-ubuntu%e2%80%99s-tomcat/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 23:54:14 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[bash]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[hudson]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[private]]></category>
		<category><![CDATA[tomcat6]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=220</guid>
		<description><![CDATA[I&#8217;ve recently covered how to configure git with Hudson on Ubuntu&#8217;s Tomcat and it has worked quite well. After taking the plunge and subscribing to have private repositories on github I ran into an issue of not being able to clone the private repository since it was&#8230; well, private. Here is the message I was [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently covered how to <a href="/2010/git-config-with-hudson-on-ubuntus-tomcat/">configure git with Hudson on Ubuntu&#8217;s Tomcat</a> and it has worked quite well. After taking the plunge and subscribing to have private repositories on <a href="http://github.com">github</a> I ran into an issue of not being able to clone the private repository since it was&#8230; well, private.</p>
<p>Here is the message I was seeing:</p>
<blockquote><p><code>ERROR: Error cloning remote repo 'origin' : Could not clone https://username@github.com/username/repository.git<br />
ERROR: Cause: Error performing git clone -o origin https://username@github.com/username/repository.git /srv/hudson/jobs/repository/workspace<br />
Trying next repository<br />
ERROR: Could not clone from a repository<br />
FATAL: Could not clone<br />
hudson.plugins.git.GitException: Could not clone<br />
	at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:587)<br />
	at hudson.plugins.git.GitSCM$2.invoke(GitSCM.java:535)<br />
	at hudson.FilePath.act(FilePath.java:753)<br />
	at hudson.FilePath.act(FilePath.java:735)<br />
	at hudson.plugins.git.GitSCM.checkout(GitSCM.java:535)<br />
	at hudson.model.AbstractProject.checkout(AbstractProject.java:1038)<br />
	at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:479)<br />
	at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:411)<br />
	at hudson.model.Run.run(Run.java:1257)<br />
	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)<br />
	at hudson.model.ResourceController.execute(ResourceController.java:88)<br />
	at hudson.model.Executor.run(Executor.java:129)</code></p></blockquote>
<p><!-- more --></p>
<p>To solve the problem we need to create an ssh key for the tomcat user so that it can access the repository.</p>
<blockquote><p><code>cd /usr/share/tomcat6<br />
sudo mkdir .ssh<br />
cd .ssh/<br />
sudo touch known_hosts<br />
sudo ssh-keygen -t rsa -C "tomcat@forthedeveloper.com"</code></p></blockquote>
<p>When creating the key pair save the key to <code>/usr/share/tomcat6/.ssh/id_rsa</code>.</p>
<p>I don&#8217;t know how to tell tomcat the passphrase for a ssh key, so I just left the passphrase blank.</p>
<p>Once the key has been created we need to add the github site to the known_hosts file. If you have already setup your normal account for working with github and have xclip installed you can run the following to copy the github ssh host information:</p>
<blockquote><p><code>ssh-keygen -F github.com | xclip -sel clip</code></p></blockquote>
<p>Edit the <code>/usr/share/tomcat6/.ssh/known_hosts</code> file and paste in the copied host information.</p>
<p>To finish things up:</p>
<blockquote><p><code>sudo chown -R tomcat6:tomcat6 /usr/share/tomcat6/.ssh/<br />
sudo /etc/init.d/tomcat6 restart</code></p></blockquote>
<p>You can copy the new ssh key for tomcat to your clipboard if you have xclip installed with:</p>
<blockquote><p><code>cat /usr/share/tomcat6/.ssh/id_rsa.pub | xclip -sel clip</code></p></blockquote>
<p>If you are only using hudson for one repository you can just add the public key to the one repository in the repository admin (ex: https://github.com/username/repository/edit) under the &#8216;Deploy Keys&#8217; area. Otherwise you can <a href="https://github.com/account">add it to your account&#8217;s &#8216;SSH Public Keys&#8217;</a> to allow the tomcat server access to all of your repositories.</p>
<p>Now when you run hudson against your private github repository it should have the proper access.</p>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2010/git-ssh-keys-with-hudson-on-ubuntu%e2%80%99s-tomcat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GIT Configuration with Hudson on Ubuntu&#8217;s Tomcat</title>
		<link>http://forthedeveloper.com/2010/git-config-with-hudson-on-ubuntus-tomcat/</link>
		<comments>http://forthedeveloper.com/2010/git-config-with-hudson-on-ubuntus-tomcat/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 04:21:22 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[TDD]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[hudson]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[ci]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=198</guid>
		<description><![CDATA[During my recent migration from using SVN to using GIT for my open source projects I was reconfiguring my Hudson CI server and started seeing this message: Caused by: hudson.plugins.git.GitException: Command returned status code 128: *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" I [...]]]></description>
			<content:encoded><![CDATA[<p>During my recent migration from using SVN to using GIT for my open source projects I was reconfiguring my Hudson CI server and started seeing this message:</p>
<blockquote><p><code><br />
Caused by: hudson.plugins.git.GitException: Command returned status code 128:<br />
*** Please tell me who you are.</p>
<p>Run</p>
<p>  git config --global user.email "you@example.com"<br />
  git config --global user.name "Your Name"<br />
</code></p></blockquote>
<p><span id="more-198"></span></p>
<p>I was a little confused to see this message since I had already configured git to have my user name and email. Then I remembered that hudson is running on tomcat which is running with the tomcat6 user. I needed to configure the tomcat6 user to have the git configuration necessary to tag on the git repositories.</p>
<p><strong>[UPDATE: 24 Jun 2010]</strong></p>
<p>I was working on repeating this process on Ubuntu 10.04 and was getting permission errors running the command to set the git config for the tomcat6 user. Here is an updated method:</p>
<p>First we need to create a <code>.gitconfig</code> file for the tomcat6 user:</p>
<blockquote><p><code><br />
sudo touch /usr/share/tomcat6/.gitconfig<br />
sudo chown tomcat6:tomcat6 /usr/share/tomcat6/.gitconfig<br />
sudo nano /usr/share/tomcat6/.gitconfig<br />
</code></p></blockquote>
<p>Place the following in the <code>.gitconfig</code> file:</p>
<blockquote><p><code><br />
[user]<br />
	name = Hudson<br />
	email = hudson@myDomain.com<br />
</code></p></blockquote>
<p>Once the file is saved&#8211;you may need to restart Tomcat&#8211;it should pick up your git configuration.</p>
<p><strong>[/UPDATE]</strong></p>
<p><strong>[ORIGINAL: see updated instructions above]</strong></p>
<p>Setup the git configuration for the tomcat6 user by doing the following:</p>
<blockquote><p><code><br />
sudo -s -H -u tomcat6<br />
git config --global user.name "Hudson"<br />
git config --global user.email "hudson@mydomain.com"<br />
exit<br />
</code></p></blockquote>
<p><em>As a note</em>, if you are using hudson to commit and push to another repository these configuration settings will be used for all commits done by Hudson.</p>
<p>The next step is to let hudson know where the <code>HOME</code> is for the tomcat6 user. On the <code><a href="http://localhost:8080/hudson/configure">hudson/configure</a></code> page there is a checkbox for defining <code>environment variables</code>. Once it is checked you will be able to put in a key-value pair. Add the following pair and save your configuration:</p>
<blockquote><p><code><br />
name: HOME<br />
value: /usr/share/tomcat6/<br />
</code></p></blockquote>
<p>The next time a hudson project is built you should see the following line close to the top of the console output:</p>
<blockquote><p><code>Env: HOME=/usr/share/tomcat6/</code></p></blockquote>
<p><strong>[/ORIGINAL]</strong></p>
<p>The git plugin should now be able to successfully tag the repository and continue with the build.</p>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2010/git-config-with-hudson-on-ubuntus-tomcat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google AJAX Library CDN Versioning</title>
		<link>http://forthedeveloper.com/2010/google-ajax-library-cdn-versioning/</link>
		<comments>http://forthedeveloper.com/2010/google-ajax-library-cdn-versioning/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 01:34:51 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[google]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[Ext Core]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[MooTools Dojo]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[script_aculo_us]]></category>
		<category><![CDATA[SWFObject]]></category>
		<category><![CDATA[Yahoo! UI]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=168</guid>
		<description><![CDATA[It&#8217;s amazing what you find when you read the documentation. Since I always forget the address for Google&#8217;s CDN hosting of jQuery I have to search for it each time. This time when I found the address I was looking around a bit and found out this interesting tidbit that I didn&#8217;t know before about [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s amazing what you find when you read the documentation. Since I always forget the address for Google&#8217;s CDN hosting of jQuery I have to search for it each time. This time when I found the address I was looking around a bit and found out this interesting tidbit that I didn&#8217;t know before about Google&#8217;s CDN for their AJAX libraries.</p>
<blockquote><p>Specifying a version of &#8220;1.8.2&#8243; will select the obvious version. This is because a fully specified version was used. Specifying a version of &#8220;1.8&#8243; would select version 1.8.4 since this is the highest versioned release in the 1.8 branch. For much the same reason, a request for &#8220;1&#8243; will end up loading version 1.9.1.</p>
<p><cite><a href="http://code.google.com/apis/ajaxlibs/documentation/" title="Google AJAX Libraries API Developer's Guide">Google AJAX Libraries API Developer&#8217;s Guide</a></cite>
</p></blockquote>
<p><span id="more-168"></span></p>
<p>For example, if I were linking to jQuery I would normally have used the following and updated semi-regularly:</p>
<blockquote><p><code>http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js</code></p></blockquote>
<p>But if I just want the latest for the &#8220;1.3&#8243; version I could reference:</p>
<blockquote><p><code>http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js</code></p></blockquote>
<p>Or if I was feeling really risky and trust jQuery not to break between versions:</p>
<blockquote><p><code>http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js</code></p></blockquote>
<p>Hope its as useful to others as I found it!</p>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2010/google-ajax-library-cdn-versioning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Railo Express with Multiple Local Hosts</title>
		<link>http://forthedeveloper.com/2009/railo-express-multiple-local-hosts/</link>
		<comments>http://forthedeveloper.com/2009/railo-express-multiple-local-hosts/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 05:47:46 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[railo]]></category>
		<category><![CDATA[snow leopard]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[cfml]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[hosts]]></category>
		<category><![CDATA[jetty]]></category>
		<category><![CDATA[linux windows]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=154</guid>
		<description><![CDATA[This is how you can configure Railo Express to use Jetty virtual hosts and local host file entries to point to a single Railo Express installation. This was extremely useful while developing applications that power multiple domains. For this example, we are going to add a virtual host for the snow.ftd host. Jetty Setup Jetty [...]]]></description>
			<content:encoded><![CDATA[<p>This is how you can configure <a href="http://www.getrailo.org/index.cfm/download/">Railo Express</a> to use Jetty virtual hosts and local host file entries to point to a single Railo Express installation. This was extremely useful while developing applications that power multiple domains.</p>
<p><span id="more-154"></span></p>
<p>For this example, we are going to add a virtual host for the <code>snow.ftd</code> host.</p>
<h3>Jetty Setup</h3>
<p><a href="http://www.mortbay.org/jetty/">Jetty</a> makes it really easy to <a href="http://docs.codehaus.org/display/JETTY/Virtual+hosts">configure virtual hosts</a> for a context.</p>
<p>The configuration file in Railo Express at <code><em>{railo-express-directory}</em>/contexts/railo.xml</code> already has the configuration setup to start us off:</p>
<p><code>
<pre>&lt;!-- virtual hosts
&lt;Set name="virtualHosts"&gt;
	&lt;Array type="String"&gt;
		&lt;Item&gt;www.myVirtualDomain.com&lt;/Item&gt;
		&lt;Item&gt;localhost&lt;/Item&gt;
		&lt;Item&gt;127.0.0.1&lt;/Item&gt;
	&lt;/Array&gt;
&lt;/Set&gt;
--&gt;</pre>
<p></code></p>
<p>Uncomment the block of code and change the item to match the <code>snow.ftd</code> host name like so:</p>
<p><code>
<pre>&lt;!-- virtual hosts --&gt;
&lt;Set name="virtualHosts"&gt;
	&lt;Array type="String"&gt;
		&lt;Item&gt;snow.ftd&lt;/Item&gt;
	&lt;/Array&gt;
&lt;/Set&gt;</pre>
<p></code></p>
<h3>Local Host Setup</h3>
<p>I already posted <a href="http://forthedeveloper.com/2009/local-host-entries-snow-leopard/">instructions for adding local hosts to your Snow Leopard</a>. You can follow the directions there to setup your desired host. In linux you can <a href="http://www.google.com/search?q=linux+hosts+file">modify your hosts file</a> in a similar fashion. There may even be a way to <a href="http://www.google.com/search?q=windows+hosts+file">change your hosts file on windows</a>, although I have never done so.</p>
<h3>Testing</h3>
<p>Once the Jetty config and the local hosts have been updated, restart Railo—if it is running—and go to <code><a href="snow.ftd">snow.ftd:8888</a></code> in your browser. You should see the same page available at <code><a href="localhost:8888">localhost:8888</a></code>.</p>
<p>And you are done! You can now add as many hosts as you need!</p>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2009/railo-express-multiple-local-hosts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Local Host Entries on OS X Snow Leopard</title>
		<link>http://forthedeveloper.com/2009/local-host-entries-snow-leopard/</link>
		<comments>http://forthedeveloper.com/2009/local-host-entries-snow-leopard/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 03:35:23 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[snow leopard]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[hosts]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=146</guid>
		<description><![CDATA[Today I wanted to setup local host entries on my MacBook. Searching around I found several articles about editing the /private/etc/hosts file to add local domains entries pointing back to my computer. I don&#8217;t know if it is something that changed with Leopard or Snow Leopard but it just wasn&#8217;t working for me. Even restarting [...]]]></description>
			<content:encoded><![CDATA[<p>Today I wanted to setup local host entries on my MacBook. Searching around I found several articles about editing the <code>/private/etc/hosts</code> file to add local domains entries pointing back to my computer. I don&#8217;t know if it is something that changed with Leopard or Snow Leopard but it just wasn&#8217;t working for me. Even restarting the computer was a no go.</p>
<p><span id="more-146"></span></p>
<h3>Using the dscl Utility</h3>
<p>With the wonder of Google searching and the <a href="http://www.andyjarrett.com/blog/index.php/2007/11/1/NetInfo-manager-and-HOST-file-in-Leopard/">generous comments</a> of others I found out about the <code>dscl</code> utility.</p>
<h4>Listing Host Entries</h4>
<p>To see what is listed for your hosts at any time just run this command:</p>
<blockquote><p><code>dscl localhost -readall /Local/Default/Hosts</code></p></blockquote>
<h4>Adding a New Entry</h4>
<p>In this example I am going to have the <code>snow.ftd</code> host point to my <code>127.0.0.1</code> IP address:</p>
<blockquote><p><code>sudo dscl localhost -create /Local/Default/Hosts/snow.ftd IPAddress 127.0.0.1</code></p></blockquote>
<p>You should now be able to <code>ping snow.ftd</code> and have it resolve to your local computer.</p>
<h4>Removing an Existing Entry</h4>
<p>If you decide you do not want an entry anymore just run this command to remove it:</p>
<blockquote><p><code>sudo dscl localhost -delete /Local/Default/Hosts/snow.ftd</code></p></blockquote>
<h4>Reading the BSD Flat File</h4>
<p>It was also noted that you can read the BSD flat file using this command:</p>
<blockquote><p><code>dscl localhost -readall /BSD/local/Hosts</code></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2009/local-host-entries-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ColdFusion 9 Ternary Operator Fail</title>
		<link>http://forthedeveloper.com/2009/coldfusion-9-ternary-operator-fail/</link>
		<comments>http://forthedeveloper.com/2009/coldfusion-9-ternary-operator-fail/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 23:27:17 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[adobe]]></category>
		<category><![CDATA[coldfusion]]></category>
		<category><![CDATA[cfml]]></category>
		<category><![CDATA[fail]]></category>
		<category><![CDATA[operator]]></category>
		<category><![CDATA[ternary]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=140</guid>
		<description><![CDATA[One of the things that I was really excited for in ColdFusion 9 was the support for the ternary operator. As Ben said: To me, the ternary operator is what the IIF() method call always wanted to be. Unfortuately I was testing some CFML code, written and working on Railo, on a ColdFusion 9 server [...]]]></description>
			<content:encoded><![CDATA[<p>One of the things that I was really excited for in ColdFusion 9 was the support for the ternary operator. As <a href="http://www.bennadel.com/blog/1643-Learning-ColdFusion-9-The-Ternary-Operator.htm">Ben said</a>:</p>
<blockquote><p>To me, the ternary operator is what the IIF() method call always wanted to be.</p></blockquote>
<p>Unfortuately I was testing some CFML code, written and working on Railo, on a ColdFusion 9 server and had this error pop up:</p>
<blockquote><p><code>Unable to find an operator implementation for coldfusion.compiler.ASToperator</code></p></blockquote>
<p>Turns out the the ternary operator works great&#8230; unless you are using it in a default value for an argument. Fail.</p>
<p><span id="more-140"></span></p>
<p>Here is an example, that should run fine if the ternary operator was doing what it is supposed to:</p>
<pre style="padding-left: 30px;">&lt;cffunction name="testing" access="public" returntype="void" output="false"&gt;
	&lt;cfargument name="test" type="string" default="#(1 EQ 1 ? 'Hi' : 'Bye')#" /&gt;

	&lt;!--- Anything ---&gt;
&lt;/cffunction&gt;</pre>
<p>I have filed it as a bug if you would like to <a href="http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=80610">vote on the issue</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2009/coldfusion-9-ternary-operator-fail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ColdFusion Development using VirtualBox and Ubuntu 9.10</title>
		<link>http://forthedeveloper.com/2009/coldfusion-virtualbox-and-ubuntu/</link>
		<comments>http://forthedeveloper.com/2009/coldfusion-virtualbox-and-ubuntu/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 19:29:41 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[coldfusion]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[sun]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[virtualbox]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=123</guid>
		<description><![CDATA[Here is how I setup a VirtualBox Virtual Machine (VM) running Ubuntu 9.10 Server edition for ColdFusion development on my MacBook Pro. Step 1: Download Needed Files The first step is to download all the files you will need. Since the downloads usually take some time we&#8217;ll get them out of the way first. For [...]]]></description>
			<content:encoded><![CDATA[<p>Here is how I setup a <a title="VirtualBox" href="http://www.virtualbox.org/">VirtualBox</a> Virtual Machine (VM) running <a title="Ubuntu" href="http://www.ubuntu.com/">Ubuntu 9.10</a> Server edition for <a title="Adobe ColdFusion" href="http://www.adobe.com/products/coldfusion/">ColdFusion</a> development on my MacBook Pro.</p>
<p><span id="more-123"></span></p>
<h3>Step 1: Download Needed Files</h3>
<p>The first step is to download all the files you will need. Since the downloads usually take some time we&#8217;ll get them out of the way first.</p>
<p>For my installation I wanted to get more familiar with the Server edition of Ubuntu and to require fewer resources. You should be able to do a similar installation with the Desktop edition.</p>
<ul>
<li><strong>Download VirtualBox</strong> &#8211; The <a title="VirtualBox Downloads" href="http://www.virtualbox.org/wiki/Downloads">official VirtualBox download page</a>.</li>
<li><strong>Download Ubuntu</strong> &#8211; To download the Server edition you will need to <a title="Ubuntu Download Mirrors" href="http://www.ubuntu.com/getubuntu/downloadmirrors#mirrors">find a mirror</a> that hosts the installer images. Once you find a mirror navigate to the 9.10 directory and find the download link for the <code>ubuntu-9.10-server-i386.iso</code> file.</li>
<li><strong>Download ColdFusion</strong> &#8211; The <a title="ColdFusion Edition Downloads" href="http://www.adobe.com/products/coldfusion/editions/">official Developer Edition Download</a> is available on the <a title="Adobe ColdFusion" href="http://www.adobe.com/products/coldfusion/">Adobe ColdFusion</a> page. Download the Linux 32 bit installer.</li>
</ul>
<h3>Step 2: Install VirtualBox</h3>
<p>Once you have downloaded all the files, run the VirtualBox installer.</p>
<p>If you would like to learn more about VirtualBox the installation comes with a user manual or you can download a pdf copy from their <a title="VirtualBox Downloads" href="http://www.virtualbox.org/wiki/Downloads">download page</a>.</p>
<h3>Step 3: Create an Ubuntu Virtual Machine</h3>
<p>Click the <code>New</code> icon in VirtualBox to start the wizard for adding a new VM.</p>
<ol>
<li>Click <code>Next</code> to start the wizard.</li>
<li>Enter <code>Ubuntu CF</code> for the <code>Name</code> of the VM.</li>
<li>Select <code>Linux</code> and <code>Ubuntu</code> in the <code>OS Type</code> drop downs.</li>
<li>Click <code>Next</code>.</li>
<li>Click <code>Next</code> to accept the default amount of RAM. (You can adjust if you want to&#8230;)</li>
<li>Click <code>Next</code> to create a new hard disk image to use for the VM.
<ol>
<li>Click <code>Next</code> to start the wizard .</li>
<li>Click <code>Next</code> to create a dynamically expanding storage.</li>
<li>Click <code>Next</code> to accept the default name and size.</li>
<li>Click <code>Finish</code> to accept the choices for the disk image.</li>
</ol>
</li>
<li>Click <code>Finish</code> to end the wizard.</li>
</ol>
<h3>Step 4: Install Ubuntu</h3>
<p>Now that there is a VM setup to hold the guest Ubuntu system we need to install Ubuntu on it.</p>
<p>In VirtualBox Double Click on the <code>Ubuntu CF</code> listed in the left column to start up the VM. Since this is the first time you are starting the VM it will bring a up a First Run Wizard to guide you in setting up the new VM.</p>
<ol>
<li>Click <code>Next</code> to start the wizard.</li>
<li>Change the <code>Media Source</code> to <code>Image File</code> and click the <code>Other...</code> icon.
<ol>
<li>Click the <code>Add</code> icon along the top.</li>
<li>Select the <code>ubuntu-9.10-server-i386.iso</code> file we downloaded earlier.</li>
<li>Click <code>Select</code> with the <code>ubuntu-9.10-server-i386.iso</code> item selected.</li>
</ol>
</li>
<li>Click <code>Next</code> to continue.</li>
<li>Click <code>Finish</code> to end the wizard.</li>
</ol>
<p>The VM should now startup and bring up the installation the Ubuntu. I&#8217;m not going to go into the details of installing Ubuntu here, so just continue with the next step once Ubuntu installation is complete. Also, since we are going to be using apache you may wish to have the setup create a LAMP server configuration when choosing features or you can install it manually afterwards.</p>
<h3>Step 5: Setup Guest Additions</h3>
<p>In order to have the Shared Folders work we will need to install the Guest Additions.</p>
<p>Before we install the Guest Additions we will need to install dkms:</p>
<pre style="padding-left: 30px; ">sudo apt-get install dkms</pre>
<p>To mount the Guest Additions disc image to the VM press <code>Command + D</code> or select <code>Devices &gt; Install Guest Additions...</code> from the VM menu. Then install the Guest Additions by running:</p>
<pre style="padding-left: 30px; ">cd /cdrom</pre>
<pre style="padding-left: 30px; ">sudo sh ./VBoxLinuxAdditions-x86.run</pre>
<h3>Step 6: Setup Shared Folders</h3>
<p>One of the goals when creating the virtual machine was to be able to edit the files natively but run them on the guest operating system that reflects the production environment.</p>
<p>With shared folders we are able to use a local directory as a share on the guest VM.</p>
<p>Before we add the shared folder we need to have a folder to share. For this example I&#8217;m using the directory I created at <code>/Users/randy/Documents/cf9/</code>.</p>
<p>With the VM powered off edit the <code>Settings</code> and select the <code>Shared Folder</code> icon.</p>
<ol>
<li>Click the <code>Add a new shared folder definition</code> icon on the right side.</li>
<li>Enter the <code>Folder Path</code> (<code>/Users/randy/Documents/cf9/</code>) or select <code>Other...</code> from the drop down and locate the directory.</li>
<li>Enter the name you would like the share to be referenced as in the <code>Folder Name</code> field. In this case I am going to call it <code>cf9</code>.</li>
</ol>
<p>Now that we have the shared folder available to the VM we want it to mount the share each time the VM starts. To do this we startup the Ubuntu VM and edit the <code>/etc/fstab</code> file and add the following line at the end of the file (note that you will need to change the username to match your user):</p>
<pre style="padding-left: 30px;"><code>cf9	/home/randy/Documents/cf9	vboxsf	uid=randy,gid=users	0	0</code></pre>
<p>You will also need to create a blank directory at <code>/home/randy/Documents/cf9</code> that the share will mount to.</p>
<p>The next time your VM is started it should have access to <code>/Users/randy/Documents/cf9</code> on the host machine at <code>/home/randy/Documents/cf9</code> on the guest machine.</p>
<h3>Step 7: Enable Port Forwarding</h3>
<p>To setup the port forwarding you will need to stop the VM. In the terminal run the following commands to setup the port forwarding. (Note that <code>"Ubuntu CF"</code> needs to match the name of the VM created above.)</p>
<pre style="padding-left: 30px;"><code>VBoxManage setextradata "Ubuntu CF" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/Protocol" TCP
VBoxManage setextradata "Ubuntu CF" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/GuestPort" 80
VBoxManage setextradata "Ubuntu CF" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/HostPort" 8580</code></pre>
<p>This will change the VM settings to have the guest port of <code>80</code> (which is the default apache port) of the guest forwarded to port <code>8580</code> on the host. Without this you would not be able to talk to the guest operating system.</p>
<h3>Step 8: Install ColdFusion</h3>
<p>Since we already downloaded the installer for ColdFusion we just need to get that file to the VM. Luckily we already setup a shared folder so if you move the installer to the <code>/Users/randy/Documents/cf9/</code> directory it will be available in the VM.</p>
<p>To run the ColdFusion installer:</p>
<pre style="padding-left: 30px; "><code>cd /home/randy/Documents/cf9/</code></pre>
<pre style="padding-left: 30px; "><code>chmod +x ColdFusion_9_WWE_linux.bin</code></pre>
<pre style="padding-left: 30px; "><code>sudo ./ColdFusion_9_WWE_linux.bin</code></pre>
<p>This should start the installer. During the installation, apache should be configured to run with ColdFusion.</p>
<h3>Step 9: Test Environment</h3>
<p>To test that the development environment is working correctly you should be able to place an <code>index.cfm</code> file in your <code>/Users/randy/Documents/cf9/</code> directory. Make sure that you place some CFML in the file to test that ColdFusion is doing it&#8217;s thing. Then visit <a href="http://localhost:8580/">http://localhost:8580/</a> in a browser on your host to test out the new development environment!</p>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2009/coldfusion-virtualbox-and-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upgrade Jetty in Railo Express</title>
		<link>http://forthedeveloper.com/2009/upgrade-jetty-in-railo-express/</link>
		<comments>http://forthedeveloper.com/2009/upgrade-jetty-in-railo-express/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 18:22:13 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[railo]]></category>
		<category><![CDATA[express]]></category>
		<category><![CDATA[jar]]></category>
		<category><![CDATA[jetty]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[upgrade]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=118</guid>
		<description><![CDATA[There was a bug in Jetty that was causing MXUnit ant tests to not work because it was double encoding the cookies. The bug was fixed in Jetty but Railo had not released a new Express version with the fix. I found out that it is quite simple to upgrade: Download and unarchive the version of [...]]]></description>
			<content:encoded><![CDATA[<p>There was a bug in Jetty that was causing <a href="http://groups.google.com/group/mxunit/browse_thread/thread/debd36e8eddb8341" target="_blank">MXUnit ant tests</a> to not work because it was double encoding the cookies. The bug was fixed in Jetty but Railo had not released a new Express version with the fix.</p>
<p><span id="more-118"></span></p>
<p>I found out that it is quite simple to upgrade:</p>
<ul>
<li><a href="http://docs.codehaus.org/display/JETTY/Downloading+Jetty" target="_blank">Download</a> and unarchive the version of Jetty you are upgrading to (ex: <code>6.1.20</code>).</li>
<li>Stop Railo Express.</li>
<li>Delete the old jetty and jetty-util jars from the Railo Express <code>/lib</code> directory (ex: <code>jetty-6.1.2.jar</code> and <code>jetty-util-6.1.2.jar</code>).</li>
<li>Copy the <code>jetty-6.1.20.jar</code> and the <code>jetty-util-6.1.20.jar</code> from the jetty <code>lib/</code> directory to the Railo Express <code>lib/</code> directory.</li>
<li>Start Railo Express.</li>
</ul>
<p>Not much too it, but it seems to be working just fine and the <a href="http://mxunit.org/" target="_blank">MXUnit</a> ant tasks are now running as expected.</p>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2009/upgrade-jetty-in-railo-express/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automate WordPress Upgrade on Grid Server</title>
		<link>http://forthedeveloper.com/2009/automate-wordpress-upgrade-on-grid-server/</link>
		<comments>http://forthedeveloper.com/2009/automate-wordpress-upgrade-on-grid-server/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 22:02:05 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[media temple]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[grid service]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=104</guid>
		<description><![CDATA[Many of the domains and sub-domains on my Media Temple Grid Service contain installations of WordPress. Since I don&#8217;t want to be bothered by a normal upgrades here is how I install WordPress in a way that allows for simple upgrades. This is not a completely automated solution, there is more that you could do [...]]]></description>
			<content:encoded><![CDATA[<p>Many of the domains and sub-domains on my Media Temple Grid Service contain installations of WordPress. Since I don&#8217;t want to be bothered by a normal upgrades here is how I install WordPress in a way that allows for simple upgrades.</p>
<p>This is not a completely automated solution, there is more that you could do to improve the process, but it should save a lot of the time normally spent updating WordPress.</p>
<p><span id="more-104"></span></p>
<p><em><strong>Note:</strong> the <a href="http://forthedeveloper.com/wp-content/uploads/2009/09/updateWP.zip">provided script</a> will only work if you do the WordPress install using subversion and in the domain/sub-domain&#8217;s <code>html/</code> directory.</em></p>
<h3>Installing WordPress</h3>
<p>Yes, there is a 1-click install for installing WordPress on the (gs), but I don&#8217;t use it. Here is how I install WordPress on a domain or sub-domain (ex: <code>blog.site.org</code>):</p>
<ol>
<li><span style="background-color: #ffffff;">Ensure that you have an <a href="http://kb.mediatemple.net/questions/906/Creating+an+alternate+domain" target="_blank">alternate domain</a> or <a href="http://kb.mediatemple.net/questions/99/Creating+a+subdomain" target="_blank">sub-domain</a> created that has an empty <code>html/</code> directory.</span></li>
<li><span style="background-color: #ffffff;">Find the latest tag listed in the <a href="http://svn.automattic.com/wordpress/tags/" target="_blank">WordPress repositor</a>y. (ex: 2.8.3)</span></li>
<li><span style="background-color: #ffffff;"><a href="http://kb.mediatemple.net/questions/16/Connecting+via+SSH+to+your+(gs)+Grid-Service" target="_blank">SSH into the (gs)</a> as the serveradmin.</span></li>
<li><span style="background-color: #ffffff;"><code>cd domains/blog.site.org/html</code></span></li>
<li><span style="background-color: #ffffff;"><code>svn checkout http://svn.automattic.com/wordpress/tags/2.8.3/ ./ --force</code></span></li>
</ol>
<p>Once the svn checkout is complete you should be able to visit the install page (ex: <code>blog.site.org/wp-admin/install.php</code>) and finish the installation of WordPress like normal.</p>
<p>I also suggest you take steps to <a href="http://codex.wordpress.org/Hardening_WordPress" target="_blank">harden your WordPress install</a>.</p>
<h3>Upgrading Many WordPress Installs at Once</h3>
<p>When you <a href="http://wordpress.org/development/" target="_blank">learn of a new version</a> of WordPress you can do the following to easily upgrade all of your installations at once.</p>
<ol>
<li><a href="http://kb.mediatemple.net/questions/16/Connecting+via+SSH+to+your+(gs)+Grid-Service" target="_blank">SSH into the (gs)</a> as the serveradmin.</li>
<li>You will need to upload the <a href="http://forthedeveloper.com/wp-content/uploads/2009/09/updateWP.zip">updateWP</a> bash script to your serveradmin home directory (<code>~/</code>) if it does not already exist.</li>
<li>Run the bash script with the new version number: <code>./updateWP.sh 2.8.4</code></li>
<li>The script will look at each of your domains to see if you have WordPress installed. If it finds WordPress it will switch to the new tag.</li>
<li>After all the installs are updated you can view the <code>updateWP.log</code> to see all of the installations that were completed. On some tags you may need to go to each of the <code>/wp-admin/</code> page and manually tell it to update the database. You can check if this is necessary by visiting one of your WordPress install&#8217;s <code>/wp-admin/</code> directory.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2009/automate-wordpress-upgrade-on-grid-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AIR Update Checking Using Mate</title>
		<link>http://forthedeveloper.com/2009/air-update-using-mate/</link>
		<comments>http://forthedeveloper.com/2009/air-update-using-mate/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 03:55:58 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[flex / air]]></category>
		<category><![CDATA[mate]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[google code]]></category>
		<category><![CDATA[maintenance]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=80</guid>
		<description><![CDATA[While working on an AIR project hosted on Google Code I wanted to setup automatic updates. I wanted the entire project to be self contained and not require any supporting websites. After a little coding I can now use Mate and dispatch an event to check for updates. Preparing for Updating In the main mxml [...]]]></description>
			<content:encoded><![CDATA[<p>While working on an AIR project hosted on Google Code I wanted to setup automatic updates. I wanted the entire project to be self contained and not require any supporting websites. After a little coding I can now use Mate and dispatch an event to check for updates.</p>
<p><span id="more-80"></span></p>
<h3>Preparing for Updating</h3>
<p>In the main mxml document I add a namespace for my ef-flex event maps (<code>xmlns:efmaps="com.ef.air.maps.*"</code>) and the following line:</p>
<blockquote><p><code>&lt;!-- Automatic update event map --&gt;<br />
&lt;efmaps:UpdateEventMap /&gt;</code></p></blockquote>
<p>Once included, the Mate knows how to handle the update event and is listening for it. See the <a href="http://code.google.com/p/prosperonair/source/browse/trunk/src/prosperonair.mxml?r=47">prosperonair main mxml</a> for an example.</p>
<h3>Automatic Update Checking</h3>
<p>Using the event driven nature of Mate to check for an update–automatically or manually–is now as easy as dispatching an event. See the <a href="http://code.google.com/p/prosperonair/source/browse/trunk/src/com/poa/maps/MainEventMap.mxml?r=47" target="_blank">prosperonair event map</a> for an example.</p>
<p>To automatically check for an update edit the application&#8217;s event map, add the import for the <code>UpdateEvent</code>, add an event handler for the <code>AIREvent.WINDOW_COMPLETE</code> event, and add the following (changed for your project):</p>
<blockquote>
<pre><code>&lt;!-- Automatically check for newer version --&gt;
&lt;mate:EventAnnouncer generator="{UpdateEvent}" type="{UpdateEvent.CHECK}"&gt;
	&lt;mate:Properties isAutomatic="true" versionURL="http://project.googlecode.com/svn/trunk/version.xml" /&gt;
&lt;/mate:EventAnnouncer&gt;
</code></pre>
</blockquote>
<h3>Manual Update Checking</h3>
<p>The process for checking for an update manually is almost identical to the automatic update check save for changing the isAutomatic property to false. This lets the updater know that the user should be notified when there is no update.</p>
<h3>Version XML File</h3>
<p>For the updater to work correctly you will need to have a XML file in your repository that the application will use to check if it has the latest version. You can read more about the format the xml file needs to use in the <a href="http://livedocs.adobe.com/labs/textlayout/air/update/ApplicationUpdaterUI.html#configurationFile" target="_blank">official documentation for the ApplicationUpdaterUI</a>. Be sure that you pass the correct url of the XML file when doing an update check.</p>
<h3>The Code</h3>
<p>The code used in this post is available in the <a title="Prosper on AIR" href="http://code.google.com/p/prosperonair/" target="_blank">prosperonair</a> and <a title="ef-flex" href="http://code.google.com/p/ef-flex/" target="_blank">ef-flex</a> projects. The main code of interest that performs the update can be seen in the <a href="http://code.google.com/p/ef-flex/source/browse/trunk/com/ef/air/business/UpdateManager.as?r=6">UpdateManager.as file</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2009/air-update-using-mate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aperture Vault on Amazon S3</title>
		<link>http://forthedeveloper.com/2009/aperture-vault-on-amazon-s3/</link>
		<comments>http://forthedeveloper.com/2009/aperture-vault-on-amazon-s3/#comments</comments>
		<pubDate>Sun, 25 Jan 2009 03:27:03 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[amazon]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[photography]]></category>
		<category><![CDATA[amazon S3]]></category>
		<category><![CDATA[aperture]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[jungle disk]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=58</guid>
		<description><![CDATA[As I amass more photos I get squeamish. Photos are some of the most valuable data on my computer besides the code I write. My code generally isn&#8217;t a big worry because it is being versioned and usually exists in several working copies so the risk of loss is smaller. With photos I have at [...]]]></description>
			<content:encoded><![CDATA[<p>As I amass more photos I get squeamish. Photos are some of the most valuable data on my computer besides the code I write. My code generally isn&#8217;t a big worry because it is being versioned and usually exists in several working copies so the risk of loss is smaller. With photos I have at best have a dvd backup of the originals along with a time machine backup. But if my apartment and computer goes up in smoke? It&#8217;s all gone.</p>
<p>With the wonderful advances in the cloud I decided to see what it could do for me. After doing a little searching I found a <a href="http://www.oreillynet.com/digitalmedia/blog/2007/01/backing_up_aperture_with_amazo.html">post</a> or <a href="http://tech.kateva.org/2007/01/using-amazon-s3-and-jungle-disk-to.html">two</a> about it and I decided to try it out myself.</p>
<p><span id="more-58"></span></p>
<p>To use Amazon&#8217;s S3 for the vault I need to have it be mounted as a drive. I chose to use a product called <a href="http://www.jungledisk.com/">Jungle Disk</a> to mount and manage my S3 account. Jungle Disk has clients for all the operating systems and a version for portable drives that has all three clients.</p>
<p>Once I had setup a bucket with Jungle Disk I was ready to create my vault with Aperture. The way that Aperture is programmed it won&#8217;t allow you to directly setup the vault on a network drive. To get around that I create the vault onto the desktop. Once the vault is created you will notice that it has the locked symbol next to it. I closed Aperture and removed the locked status from the file. Then I moved the vault onto the S3 drive.</p>
<p>I had about 35GB library of photos when I created the vault. Since this is all going over the internet it is going to take a while for all the files to copy over, which is to be expected. I was luckly on a university connection so the wait wasn&#8217;t <a href="http://www.neuski.com/post/29086209">as long as it was for some</a>.</p>
<p>After the files all successfully copied over to the S3 account load up Aperture. Right click on the vault that was just created and select the Update Vault Path&#8230; From there you should be able to browse to your S3 network drive and select your vault.</p>
<p>When I had taken some more pictures and went to update the vault I found the big reason that I probably would not use the S3 for anything but periodic (quarterly or semi-annually) backups. When I updated the vault it seemed to want to touch and/or copy every file. If you are on a local drive this wouldn&#8217;t be much of a problem, but since you are doing this over the internet it seemed to take about as long as the original move of the library. It might not have taken as long since I just left it working overnight I didn&#8217;t know for sure.</p>
<p>Just remember, if you do plan on using the S3 for aperture not only are you paying for the space, which is very inexpensive, but you are also paying for each request for a file so it does add a few dollars each time you do a vault update. Overall I would still use it as a periodic off-site backup but would not rely upon it for my day-to-day backups.</p>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2009/aperture-vault-on-amazon-s3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Terminal Sweetness with reverse-i-search</title>
		<link>http://forthedeveloper.com/2008/terminal-sweetness-reverse-i-search/</link>
		<comments>http://forthedeveloper.com/2008/terminal-sweetness-reverse-i-search/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 03:56:47 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[mac]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=64</guid>
		<description><![CDATA[I am a terminal n00b, but I&#8217;m liking it. I grew up on a M$ box and didn&#8217;t take the &#8216;leap&#8217; to a linux / unix based operating system until about a year and a half ago when we got new computers at work. Since that time I have been trying to learn more about [...]]]></description>
			<content:encoded><![CDATA[<p>I am a terminal n00b, but I&#8217;m liking it. I grew up on a M$ box and didn&#8217;t take the &#8216;leap&#8217; to a linux / unix based operating system until about a year and a half ago when we got new computers at work. Since that time I have been trying to learn more about the terminal and am very impressed by it. I&#8217;ve been using OS X at work and Ubuntu at home and haven&#8217;t booted into windows (except for playing games) for almost a year.</p>
<p>Something that I found out in the recent months and finding very useful is the reverse-i-search. By pressing <code>ctrl + r</code> in the terminal (works at least in ubuntu and OS X, probably all real terminals) you are given a console line like the following:</p>
<blockquote><p><code>(reverse-i-search)`':</code></p></blockquote>
<p>As you type the terminal will search through your terminal history and locate any commands that contain what you search.</p>
<p><span id="more-64"></span></p>
<p>For instance if you type <code>ssh</code> it will start searching through the history and show you the last one that you used that had <code>ssh</code> in the command. If the first result isn&#8217;t the one that you are looking for you can press <code>ctrl + r</code> to keep the search going and cycle back through your history.</p>
<p>I am still amazed by all the things that I am learning about *nux operating systems and I am only touching the surface.</p>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2008/terminal-sweetness-reverse-i-search/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The Search For Sitemap Ping URLs</title>
		<link>http://forthedeveloper.com/2008/the-search-for-sitemap-ping-urls/</link>
		<comments>http://forthedeveloper.com/2008/the-search-for-sitemap-ping-urls/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 03:11:13 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[ask]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[msn]]></category>
		<category><![CDATA[ping]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[sitemap]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=47</guid>
		<description><![CDATA[Sitemaps just make sense. You create a Sitemap file, or a set of files and a Sitemap Index, that has all the your site links crafted purely for search engine consumption. It&#8217;s like candy for the search giants since they get spoon-fed your site structure by you. Not only can it tell them where your [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sitemaps.org/" target="_blank">Sitemaps</a> just make sense. You create a <a href="http://sitemaps.org/protocol.php#xmlTagDefinitions" target="_blank">Sitemap file</a>, or a set of files and a <a href="http://sitemaps.org/protocol.php#index" target="_blank">Sitemap Index</a>, that has all the your site links crafted purely for search engine consumption. It&#8217;s like candy for the search giants since they get spoon-fed your site structure by you. Not only can it tell them where your content is, but it can tell them how often it changes, when it was last changed, and what priority it is to your site. Pure confection!</p>
<p>But the problem, for me at least, was finding the urls to ping so that you are not waiting for the giants to get a sweet tooth and come looking for you. The page on <a href="http://sitemaps.org/protocol.php#informing" target="_blank">informing giants</a> talks about a magical <em>searchengine_URL</em> that can be replace by your supporting giant. The problem: the site never tells what <em>searchengine_URL</em>s exist for your giant companions.</p>
<p><span id="more-47"></span></p>
<p>After some searching I finally found the urls that I was looking for. Where did I find the mystical urls you ask? Well it wasn&#8217;t from a google search (returned a lot of non-helpful links), it was from a <a href="http://www.arnebrachhold.de/projects/wordpress-plugins/google-xml-sitemaps-generator/" target="_blank">wordpress plugin</a>. In my opinion it is not a very good way to promote a service that is supposed to make it easier for you to get your content into the giants&#8217; mouths.</p>
<p>Without further ado here are the urls that <strong>should</strong> work for sending your updated Sitemap to the search giants:</p>
<ul>
<li>http://www.google.com/webmasters/sitemaps/ping?sitemap=&lt;url&gt;</li>
<li>http://submissions.ask.com/ping?sitemap=&lt;url&gt;</li>
<li>http://webmaster.live.com/ping.aspx?siteMap=&lt;url&gt;</li>
<li>http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=&lt;<a href="http://developer.yahoo.com/" target="_blank">Yahoo! Developer Key</a>&gt;&amp;url=&lt;url&gt;</li>
</ul>
<p>I would also suggest reading the other options for informing the search engines, such as adding &#8216;Sitemap: &lt;url&gt;&#8217; to your robots.txt file and actually visiting to the giants&#8217; playground.</p>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2008/the-search-for-sitemap-ping-urls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse 3.4 On Ubuntu 8.04.1</title>
		<link>http://forthedeveloper.com/2008/eclipse-3_4-on-ubuntu-8_04_1/</link>
		<comments>http://forthedeveloper.com/2008/eclipse-3_4-on-ubuntu-8_04_1/#comments</comments>
		<pubDate>Wed, 20 Aug 2008 05:54:25 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=42</guid>
		<description><![CDATA[Something that really bugged me (and still does) about the ubuntu since I installed it is that eclipse is not even close to being the latest version in the package manager. That just seems really strange to me to have such and awesome and widely used IDE not supported in Ubuntu. Anyhow I am not [...]]]></description>
			<content:encoded><![CDATA[<p>Something that really bugged me (and still does) about the ubuntu since I installed it is that eclipse is not even close to being the latest version in the package manager. That just seems really strange to me to have such and awesome and widely used IDE not supported in Ubuntu. Anyhow I am not writing this post to just complain about Ubuntu&#8217;s quirks, I am writing to detail the steps that I took to get it setup and working on my Ubuntu 8.04.1 64 bit box.</p>
<p><span id="more-42"></span></p>
<h2>Using the Sun Java</h2>
<p>I started off by doing your standard Google search and came up with this page listed promently on the Ubuntu community site:</p>
<p><a href="https://help.ubuntu.com/community/EclipseIDE" target="_blank">https://help.ubuntu.com/community/EclipseIDE</a></p>
<p>I followed the instructions to get the Java 6 from Sun installed on the system. But I stopped after the install of Java 6 since my install is basically a download of eclipse it wasn&#8217;t going to have the /etc/eclipse/java_home that was described on the community page.</p>
<p>With a little more searching I came across <a href="http://jhcore.com/2008/06/26/eclipse-34-ganymede-on-ubuntu/" target="_blank">this page</a> which gave a brief description his installation. From his post I edited my ~/.bashrc file and added in the export JAVA_HOME=/usr/lib/jvm/java-6-sun/ so that my default JAVA_HOME would be the sun java.</p>
<h2>Getting Eclipse</h2>
<p>To get the latest eclipse distribution I went to the <a href="http://www.eclipse.org/downloads/" target="_blank">eclipse download page</a> and downloaded the eclipse classic, my preferred base distro. Once I had the file I extracted the eclipse directory. I&#8217;m not a linux guru and didn&#8217;t know the &#8216;best&#8217; place to put the eclipse directory so i put it in /opt/.</p>
<h2>Running Eclipse</h2>
<p>Once I had the application in the directory I decided to add it to my applications menu. I did so by right clicking on the &#8216;Applications&#8217; menu and selecting the &#8216;Edit Menus&#8217; option. From there I went into the Applications &gt; Programming menu on the left side and created a &#8216;New Item&#8217;. I chose the type of &#8216;Application&#8217; and a name of &#8216;Eclipse&#8217;. For the command I entered &#8216;/opt/eclipse/eclipse -vm /usr/lib/jvm/java-6-sun/bin/java&#8217; just to make sure that eclipse was being loaded with the correct jvm.</p>
<h2>Using Eclipse</h2>
<p>So far I have not had any problems with any of the plugins that I commonly use (CFEclipse, Subclipse, etc) that aren&#8217;t found on all system.</p>
<p>That&#8217;s what I did to get Eclipse 3.4 Ganymede running on Ubuntu 8.04.1 Hardy Heron, so enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2008/eclipse-3_4-on-ubuntu-8_04_1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Impressions of Railo</title>
		<link>http://forthedeveloper.com/2008/impressions-of-railo/</link>
		<comments>http://forthedeveloper.com/2008/impressions-of-railo/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 22:41:45 +0000</pubDate>
		<dc:creator>Randy Merrill</dc:creator>
				<category><![CDATA[coldfusion]]></category>
		<category><![CDATA[railo]]></category>
		<category><![CDATA[cfml]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://forthedeveloper.com/?p=23</guid>
		<description><![CDATA[As part of their tour of North America, Railo stopped by Salt Lake City with their CEO Gert Franz and CTO Michael Streit to present their CFML engine to the combined audiences of SLCFUG and NUCFUG groups. Along with the meeting we were able to have dinner with the Railo duo. The content of this [...]]]></description>
			<content:encoded><![CDATA[<p>As part of their tour of North America, <a href="http://www.railo-technologies.com/" target="_blank">Railo</a> stopped by Salt Lake City with their CEO Gert Franz and CTO Michael Streit to present their CFML engine to the combined audiences of <a href="http://slcfug.org/" target="_blank">SLCFUG</a> and <a href="http://nucfug.org/" target="_blank">NUCFUG</a> groups. Along with the meeting we were able to have dinner with the Railo duo. The content of this post is being pulled from memory and conversations with others so I don&#8217;t vouch for 100% accuracy.</p>
<p><span id="more-23"></span></p>
<h2>General Impressions</h2>
<p>Overall, I was greatly impressed by what the Railo team has done to make their product a viable CFML solution. The presentation was great with a wealth of examples and content to go over. The end effect of the presentation and subsequent discussion left me with a very positive take-away.</p>
<h2>It&#8217;s in the Name</h2>
<p>This is something that was brought up during dinner that I didn&#8217;t know before about the origin of the name Railo. From their <a href="http://www.railo-technologies.com/en/index.cfm?treeID=274" target="_blank">FAQ page</a>:</p>
<p style="padding-left: 30px;">Yes. Railo is the name of an alien dog, first appearing in the first season, episode 25 of the TV-series &#8220;Enterprise&#8221;.</p>
<h2>Standardization</h2>
<p>During the meeting Gert talked a little about his involvement with the advisory committee that was created to help direct the CFML language as it continues to evolve. With multiple companies producting CFML engines it is a temptation to start developing extra tags that make the company stand out. The downside is the harm it causes to the CFML language by confusing developers and/or locking them into one engine since the code becomes specialized.</p>
<p>Railo is not without it&#8217;s features (which I will talk about below) that are not standard, but they have been making an awesome effort to share what they have been working on and the ideas for the future with the advisory committee in an effort to help things become more of a standard. Railo distinguishes themselves by making it out-perform the competitors, which is the right way to do it.</p>
<p>One of the comments made by Gert that I really enjoyed was to this effect:</p>
<p style="padding-left: 30px;">While presenting at Adobe an Adobe engineer commented that they hoped Railo wasn&#8217;t mad that they used some of their ideas for features in ColdFusion 8. Gert replied that Railo stole 95% of Adobe&#8217;s ideas, Adobe stole 5% of Railo&#8217;s features so they were about even.</p>
<h2>Two Administrators</h2>
<p>When dealing with applications running on Adobe&#8217;s ColdFusion you have one Administrator that runs everything on that installation. If you want to break up the server to use a different configuration you have to use the enterprise version which allows you to create separate instances but cost a lot of money to do so. With Railo there are two types of administrators that you can use to run your application: the global administrator and the context administrator.</p>
<p>The global administrator allows you to configure options that will be available on all the web contexts running on the server (or instance of the JVM, I think). Basically anything you define there will take effect across all web contexts, unless overridden by the context administrator.</p>
<p>With the context administrator you are able to define settings that affect only the web context itself. This includes settings such as mappings and datasources. Traditionally you would have to do something in the Application.cfc to get mappings dynamically that were not defined in the administrator.</p>
<h2>Resources</h2>
<p>There are a lot of different ways to access files. You have local filesystem files, files on network shares, files on ftp servers, files on <a href="http://en.wikipedia.org/wiki/Amazon_S3" target="_blank">Amazon&#8217;s S3 services</a>, flicker, google docs, etc. Thanks to the folks at Railo we are able to access the files from different services through an abstracted layer in Railo. I don&#8217;t know if they do flicker and google docs but they showed examples of using ftp and the S3 service.  Essentially, you could reference anything with a file path. Of course, getting files from ftp is considerably slower than the local file system. What this abstraction allows is for the programmer to reference files from varied locations without having to worry about where it is coming from.</p>
<p>Even if they don&#8217;t have a flicker:// path it sounded like it would be up to developers to program additional resources if they chose so you can have a flicker resource. You have to love abstraction, it&#8217;s just cool.</p>
<h2>Portability</h2>
<p>With the ability to change settings the portability of the Railo engine is impressive. All of the information to run your Railo application resides within one directory so if you want to distribute or move your application, datasources, mapping, et al., you just move the directory. It also is nice that it doesn&#8217;t break encapsulation, you just move it and it all comes.</p>
<h2>Clustering</h2>
<p>I&#8217;ll admit right now that I am no server administrator, but I was impressed by the quickness and seeming ease it was for Gert to startup a cluster and show us how it runs. Granted we didn&#8217;t watch him create the cluster he showed that it was done using the underlying Java server and you just need to tell the servers where each other are and give them some private key goodness. That alone looked pretty neat, but when you couple it with the cluster scope it was amazing.</p>
<h2>Cluster Scope</h2>
<p>This is something which just makes sense. You have session scopes and applications scopes when working on a single box, why not expand that out to the next level and have a cluster scope? Well Railo has a cluster scope. How cool is that? You can have variables that are created on one node in the cluster which then get shared to all other nodes in the cluster. Even if a node of the cluster is unavailable it will be updated once it comes back online and automatically synced with the rest of the cluster. I believe that Gert said Railo was using the cfthread task to accomplish the syncing of the cluster scope.</p>
<h2>cfthread Task</h2>
<p>Not many developers are used to using threading in their applications, at least the programmers that I know don&#8217;t. But if you do use cfthread, and even if you don&#8217;t, the type=&#8221;task&#8221; was a very cool addition to the cfthread tag. The task type allows you to define a task that is run as a separate thread. If that thread fails for some reason you are able to define how often and how many times to retry it. I believe that this is how the cluster scope is managed &#8211; by way of a threaded task.</p>
<h2>TDD</h2>
<p>Test Driven Development (TDD) has been something that has interested me for quite some time but never actually implemented it. Railo is a very fine example of why you do implement TDD and the benefits it reaps. As we were talking I asked the Railo duo about their using TDD.  I had read something about them using it and it turns out they have about 60,000 tests currently. Each time they start working on a bug or a feature they create their test for it beforehand. Once they have written the fix or feature the test is run to make sure it is correct. They also noted that it takes about an hour to run the tests each time they do a build for release. Awesome work Railo!</p>
<h2>Debugging</h2>
<p>Not much to say on this one other than the duo report that turning on debugging in Railo doesn&#8217;t really affect the system. They have such a hard time measuring how much it slows it down that they just say 1% to be safe.</p>
<h2>Multimedia Tags</h2>
<p>Prevalent among web sites these days is a lot of rich and streaming videos. With the 3.0 release of Railo they have created cfvideo and cfvideoplayer tags that do video conversion, clipping, screengrabs, and playback. I haven&#8217;t done much with video content but it was quite cool to hear and see the examples of the tag and how simple it is.</p>
<p>To me it was more impressive to see the way they used Amazon&#8217;s EC2 along with Amazon&#8217;s S3 to convert and stream their videos. Along with the EC2 Railo is planning on having some public Railo templates(?) that can be copied and made private for those who want to use Railo on the cloud once it is open source.</p>
<h2>Extensions</h2>
<p>This was one of the things that has some of the greatest potential and would be awesome for developers. The idea of an extension is basically having a packaged version of an application, training module, network thingy, etc., available for people to download and install/upgrade from within their administrator. I kind of picture this like the Apple app store, only for ColdFusion applications and add-ons.</p>
<p>This extension feature is how they are planning to off the video tags and other Railo extensions that they can&#8217;t distribute freely because of licensing. In addition developers would be able to have their applications and extensions sold through the same manner. Or you could define your own server to distribute solely your applications.</p>
<p>This was an idea they had at the beginning of the year and are still exploring the options and functionality. They are also in talks with Adobe to have this be something that is not unique to Railo but used in CF 9 or CF 10 as well.</p>
<h2>Shared Hosting</h2>
<p>One area of the ColdFusion community that is lacking is the ability to have very powerful shared hosting solutions for ColdFusion. You can get dedicated hosting that works awesome, but it costs you a lot to do it. With the current availability for shared hosting I&#8217;ve only heard not-so-good things. Especially with respect to shared hosting and mappings. With the features that Railo brings to the table it clears away a lot of the problems that seem to run rampant among CF shared hosts.</p>
<p>Given the structure of Railo you could set it up so that each account has their own web context(s) that they control while the host controls the global administrator. Or, depending on the hosting solution (such as <a href="http://www.mediatemple.net/go/order/?refdom=zdsystems.com" target="_blank">media temple&#8217;s grid server</a> where this blog is hosted), they could give you a fully working set of the Railo Administrator where you can have your own global administrator along with web context administrators.</p>
<h2>Cascading Scope</h2>
<p>One of my pet peves is code that doesn&#8217;t use explicit scoping. To me it is very inefficient and confusing not to know where the variables are coming from. I was very happy to hear that there is a setting to turn off the cascading scope functionality in Railo. If your code doesn&#8217;t know what to do it dies and tells you it can&#8217;t find the variable. Go encapsulation!</p>
<h2>In Review</h2>
<p>To sum it all up, I am excited to try out and hopefully contribute to the Railo project when it is released into the open source world.  It&#8217;s definately something that has an awesome potential to help expand the ColdFusion community, along with <a href="http://www.openbluedragon.org/">Open Blue Dragon</a>, to those who complain about ColdFusion not being free. I look forward to great things from Railo.</p>
]]></content:encoded>
			<wfw:commentRss>http://forthedeveloper.com/2008/impressions-of-railo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
