<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>RSS feed for InstantSpot site Blog of Dave</title><link>http://daveshuck.instantspot.com</link><description>Dave Shuck&apos;s ramblings on - ColdFusion, Flex, and Java, and life.</description><language>en-us</language><copyright>This work is Copyright &#xA9; 2009 by Blog of Dave</copyright><generator>RSSVille ColdFusion FeedMaker, version 1.0</generator><pubDate>Sat, 21 Nov 2009 14:32:16 GMT</pubDate><item><title>Create SSL sites in Apache on Windows with OpenSSL</title><link>http://daveshuck.instantspot.com/blog/2009/11/12/Create-SSL-sites-in-Apache-on-Windows-with-OpenSSL</link><description>To get a secure SSL site up and running on Apache under Windows, there are a few hoops to jump through that are not very intuitive.&amp;nbsp; To that end, I am going to document my approach to setting up SSL using OpenSSL.&amp;nbsp; This approach assumes that you already have Apache up and running on your machine, so if you have not done that, head over to the &lt;a href=&quot;http://httpd.apache.org/download.cgi&quot;&gt;HTTPD download page&lt;/a&gt; and set that up before continuing.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Setting up OpenSSL&lt;br /&gt;&lt;/b&gt;First we need to get &lt;a href=&quot;http://www.openssl.org&quot;&gt;OpenSSL&lt;/a&gt; setup on our system, which is not included with the Apache Windows binaries.&amp;nbsp; In fact the OpenSSL project doesn&apos;t even provide the binaries themselves, but you can find them at &lt;a href=&quot;http://www.slproweb.com/products/Win32OpenSSL.html&quot;&gt;Shining Light Productions&lt;/a&gt;.&amp;nbsp; For this example, I will be choosing the &lt;a href=&quot;http://www.slproweb.com/download/Win32OpenSSL_Light-0_9_8k.exe&quot;&gt;Win32 OpenSSL v0.9.8k Light&lt;/a&gt; version.&amp;nbsp; If you see a message like the one below, you will need to install the &lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&amp;amp;displaylang=en&quot;&gt;Microsoft Visual C++ 2008 Redistributable Package&lt;/a&gt; and then attempt the OpenSSL installation again.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;img style=&quot;max-width: 800px;&quot; src=&quot;http://daveshuck.instantspot.com/userfiles/073006/91/c++error.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Once you have it installed, you can do a quick test to make sure that it is set up properly:&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;max-width: 800px;&quot; src=&quot;http://daveshuck.instantspot.com/userfiles/073006/91/openssltest.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Creating Certificates&lt;br /&gt;&lt;/b&gt;Next, we will use the OpenSSL terminal interface to create our self-signed certificates.&amp;nbsp; To explain a bit about what is going on below, I have a site already existing on my system that can be reached at http://scribble.&amp;nbsp; What we are doing is creating a secure subdomain of https://secure.scribble. &amp;nbsp; Typically when I create certificates, I name the files with the host/domain obvious so that they can be easily identified later.&amp;nbsp; Obviously you will want to replace the domain name to match your setup, but type the following in the terminal in the OpenSSL/bin directory:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;padding: 0pt 10px 10px 0pt;&quot;&gt;[codeblock 433]&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;That will generate what you see below.&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;max-width: 800px;&quot; src=&quot;http://dl.dropbox.com/u/101948/blog/entries/ssl_on_apache/create-cert1.png&quot; height=&quot;420&quot; width=&quot;650&quot; /&gt;&lt;br /&gt;&lt;br /&gt;You may notice that I left a lot of the prompts blank.&amp;nbsp; Considering this is a dummy certificate in a development environment, that approach makes sense.&amp;nbsp; You may choose to be more explicit based on your needs.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If we were to use this key as it is, we would be prompted for the password every time that Apache starts.&amp;nbsp; Since that is less than ideal, we will now generate a non-protected key from the one we created in the previous step by typing the following:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;padding: 0pt 10px 10px 0pt;&quot;&gt;[codeblock 434]&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;max-width: 800px;&quot; src=&quot;http://dl.dropbox.com/u/101948/blog/entries/ssl_on_apache/create-cert2.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can see that I was prompted for a pass phrase.&amp;nbsp; This is the same password that you created when we generated the certificate above.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now we need to need to build the certificate that we will actually import into Apache.&amp;nbsp; You can do so by typing:&lt;br /&gt;&lt;span style=&quot;padding: 0pt 10px 10px 0pt;&quot;&gt;&lt;br /&gt;[codeblock 435]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will result in the following output:&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;max-width: 800px;&quot; src=&quot;http://dl.dropbox.com/u/101948/blog/entries/ssl_on_apache/create-cert3.png&quot; height=&quot;443&quot; width=&quot;650&quot; /&gt;&lt;br /&gt;&lt;br /&gt;You can see that we now have a .cert, .csr, .key, and .pem file for our domain.&amp;nbsp; We will use a combination of the .key and the .cert&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Configuring Apache&lt;br /&gt;&lt;/b&gt;Now we need to make sure that your Apache server is ready to serve SSL requests.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;First, let&apos;s put the .key and .cert files that we created above into a directory under Apache.&amp;nbsp; In your &quot;conf&quot; directory, create a subdirectory named &quot;ssl&quot; and move secure.scribble.key and secure.scribble.cert into that new directory.&lt;br /&gt;&lt;br /&gt;Next we need to make sure that the mod_ssl module is enabled.&amp;nbsp; Open up the httpd.conf file for your Apache webserver.&amp;nbsp; Search for &quot;mod_ssl&quot; and you should find a line that looks like this:&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;max-width: 800px;&quot; src=&quot;http://daveshuck.instantspot.com/userfiles/073006/91/mod_sso.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Yours will likely be commented out with a &apos;#&apos; sign in front of the line.&amp;nbsp; You will want to delete that &apos;#&apos; so that it looks like the highlighted line above.&lt;br /&gt;&lt;br /&gt;Next you will need to make sure that you have uncommented the line that includes the httpd-ssl.conf file like you see below:&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;max-width: 800px;&quot; src=&quot;http://daveshuck.instantspot.com/userfiles/073006/91/conf_ssl.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;The last thing we need to do is configure our site.&amp;nbsp; Open up the conf/extra/httpd-ssl.conf file in an editor.&amp;nbsp; You will see that there is an amazingly huge and complex site definition in there already that starts with &lt;virtualhost _default_:443=&quot;&quot;&gt; and ends about 150 lines later with &lt;/virtualhost&gt;.&amp;nbsp; We need to disable this site.&amp;nbsp; If you are feeling bold, you can simply delete it.&amp;nbsp; However, I take the approach of commenting it out entirely so that I still have it as a reference, which is my recommendation as well.&amp;nbsp;&amp;nbsp; Starting with the line &lt;virtualhost _default_:443=&quot;&quot;&gt;, put a &apos;#&apos; at the start of every line that doesn&apos;t already have one and continue until you comment out the &lt;/virtualhost&gt; line.&lt;br /&gt;&lt;br /&gt;Now it is finally time for us to create the site definition for our https://secure.scribble site.&amp;nbsp; We will use some of the concepts in the example, but eliminate most of them.&amp;nbsp; Here is what mine looks like after paring down all the excess:&lt;br /&gt;&lt;span style=&quot;padding: 0pt 10px 10px 0pt;&quot;&gt;[codeblock 436]&lt;br /&gt;&lt;br /&gt;In that code you can see where we are pointing to the .key and .cert files that we created above.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Now, restart your Apache server and you are now serving up securely! &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;zemanta-pixie&quot;&gt;&lt;img class=&quot;zemanta-pixie-img&quot; alt=&quot;&quot; src=&quot;http://img.zemanta.com/pixy.gif?x-id=9d1b1403-fab2-8595-83d6-897a928c54c5&quot; /&gt;&lt;/div&gt;</description><pubDate>Fri, 13 Nov 2009 03:47:33 GMT</pubDate><guid>http://daveshuck.instantspot.com/blog/2009/11/12/Create-SSL-sites-in-Apache-on-Windows-with-OpenSSL</guid><category>Tips and Tricks,Servers,Windows,Technology</category></item><item><title>Photos from the Dallas Adobe User Group Tour event</title><link>http://daveshuck.instantspot.com/blog/2009/06/29/Photos-from-the-Dallas-Adobe-User-Group-Tour-event</link><description>&lt;p&gt;We had a great time Friday night with around 170 in attendance!  Terry did a great job and everyone left hungry for the new releases that he teased.  Here are some pics from the night.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;object width=&quot;400&quot; height=&quot;300&quot;&gt; &lt;param value=&quot;offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2Fdaveshuck%2Fsets%2F72157620588183099%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Fdaveshuck%2Fsets%2F72157620588183099%2F&amp;set_id=72157620588183099&amp;jump_to=&quot; name=&quot;flashvars&quot; /&gt; &lt;param value=&quot;http://www.flickr.com/apps/slideshow/show.swf?v=71649&quot; name=&quot;movie&quot; /&gt; &lt;param value=&quot;true&quot; name=&quot;allowFullScreen&quot; /&gt;&lt;embed width=&quot;400&quot; height=&quot;300&quot; flashvars=&quot;offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2Fdaveshuck%2Fsets%2F72157620588183099%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Fdaveshuck%2Fsets%2F72157620588183099%2F&amp;set_id=72157620588183099&amp;jump_to=&quot; allowfullscreen=&quot;true&quot; src=&quot;http://www.flickr.com/apps/slideshow/show.swf?v=71649&quot; type=&quot;application/x-shockwave-flash&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;</description><pubDate>Mon, 29 Jun 2009 21:13:00 GMT</pubDate><guid>http://daveshuck.instantspot.com/blog/2009/06/29/Photos-from-the-Dallas-Adobe-User-Group-Tour-event</guid><category>InstantSpot,Tips and Tricks</category></item><item><title>How to set JAVA_HOME environment variable in Ubuntu </title><link>http://daveshuck.instantspot.com/blog/2009/03/20/How-to-set-JAVAHOME-environment-variable-in-Ubuntu-</link><description>&lt;p&gt;I am actually creating this blog entry as a bookmark for myself, but since I know that I never remember how to do it, others might benefit as well!&lt;/p&gt; &lt;p&gt;One way that you can set your JAVA_HOME variable and add to your PATH, is be doing the folowing.&amp;nbsp; As &apos;sudo&apos; open up &lt;strong&gt;/etc/bash.bashrc&lt;/strong&gt; and add the following to the end of the file.&amp;nbsp; NOTE: Set the java path to whatever the actual path is on your environment if it does not match &lt;strong&gt;/usr/lib/jvm/java&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;JAVA_HOME=/usr/lib/jvm/java export JAVA_HOME PATH=$PATH:$JAVA_HOME/bin export PATH&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;When you reboot, try running the following:&lt;/p&gt; &lt;p&gt;&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;$ echo $JAVA_HOME /usr/lib/jvm/java  echo $PATH [probably lots of paths]:/usr/lib/jvm/java/bin  &lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;</description><pubDate>Sat, 21 Mar 2009 01:02:00 GMT</pubDate><guid>http://daveshuck.instantspot.com/blog/2009/03/20/How-to-set-JAVAHOME-environment-variable-in-Ubuntu-</guid><category>Ubuntu,Tips and Tricks</category></item><item><title>Setting up Apache, OpenBD, Railo, and ColdFusion - Part 1</title><link>http://daveshuck.instantspot.com/blog/2009/02/01/Setting-up-Apache-OpenBD-Railo-and-ColdFusion--Part-1</link><description>&lt;p&gt;This is Part 1 of a muilt-part blog post demonstrating how run OpenBlueDragon, Railo, and ColdFusion all on the same machine, and all using the Apache webserver with individual Virtual hosts using different CFML engines.&amp;nbsp; But, before we get into it, here is a little background.&lt;br /&gt; &lt;br /&gt; For the past several months now I have stepped over to Windows on my laptop after years of not using it regularly.&amp;nbsp; It was actually the first time I had actually used Vista, actually and was quite an interesting experience.&amp;nbsp; First, as much as I love the Linux environment, I really expected to loathe being in Windows daily.&amp;nbsp; I was surprised at how much Vista *didn&apos;t* suck.&amp;nbsp; With all the raging passion against it in general I suppose that I had low expectations, but nevertheless I really thought it was pretty decent in general.&amp;nbsp; However it has a more sluggish, constricting feel to it in comparison to Linux, so I have decided I have paid my dues and it is time to go back to using an OS that is truly fun to use, rather than one that just wasn&apos;t as crappy as I thought it would be.&amp;nbsp; &lt;br /&gt; &lt;br /&gt; After lots of experimentation with various flavors, hands-down Ubuntu is the most painless and most comfortable Linux distros for me personally.&amp;nbsp; My reasoning for that is vast and probably belongs in another blog entry, so I will attempt to keep from straying any further off the topic!&amp;nbsp; That said, last night I decided to try gOS which is a really neat distro built off of Ubuntu.&amp;nbsp; Although the UI is Gnome based, it has more of a Max 10.5.x feel to it.&amp;nbsp; I think Mac folks would feel right at home taking this environment for a spin.&lt;br /&gt; &lt;br /&gt; Immediately after the first boot of my shiny new OS I started trying to put my development environment back together.&amp;nbsp; I decided that I wanted to have ColdFusion, Railo, and OpenBD all on from the beginning, with all requests first passing through Apache httpd.&amp;nbsp; Quite some time ago, Aaron Lynch put together some steps to install Smith Project w/Tomcat/Apache, which we have used several times since, primarily setting up Railo. I am not sure I ever would have waded my way through it without his early experimentation and documentation.&amp;nbsp; On this iteration, I loosely followed those instructions, opting for several packages from the repos, and updated versions of software, and have documented my steps as the are somewhat different in areas. For my current environment, I first installed OpenBD.&amp;nbsp; I then followed this by installing ColdFusion and setting it up to user the default JRUN connector that is set up during the installation.&amp;nbsp; Lastly, I installed Railo as another webapp in Tomcat and tied that into Apache as well.&amp;nbsp; &lt;br /&gt; &lt;br /&gt; In the following posts, you will see these steps in detail.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; Next:&amp;nbsp; &lt;a href=&quot;http://daveshuck.instantspot.com/blog/2009/02/01/Setting-up-Apache-OpenBD-Railo-and-ColdFusion--Part-2--Installing-TomcatApacheOpenBD&quot;&gt;Part 2 - Installing Tomcat/Apache/OpenBD&lt;/a&gt;&lt;/p&gt;</description><pubDate>Sun, 01 Feb 2009 07:33:00 GMT</pubDate><guid>http://daveshuck.instantspot.com/blog/2009/02/01/Setting-up-Apache-OpenBD-Railo-and-ColdFusion--Part-1</guid><category>ColdFusion,Tips and Tricks,Servers</category></item><item><title>Related checkbox validation with JQuery</title><link>http://daveshuck.instantspot.com/blog/2008/07/16/Related-checkbox-validation-with-JQuery</link><description>&lt;p&gt;I was given a problem yesterday where I needed to do the following client-side validation.  If a user selects a checkbox that they wish to enable credit card transactions, I need to display a panel of specific credit card companies and they need to select at least one before submitting.&lt;/p&gt; &lt;p&gt;If you think about writing the JS to do this without a library it is a somewhat lengthy task.  In essence, you would need to do some type of an onsubmit function on your form, check the value of the key checkbox.  If it was checked, check the value of each credit card checkbox to see if the user had selected one of the children.  After writing this in JQuery, I thought it might be worth demonstrating what an easy task this is.&lt;/p&gt; &lt;p&gt;Let&apos;s start with the specific part of my form that has my checkboxes:&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;&amp;lt;label for=&amp;quot;RequireCCInfo&amp;quot;&amp;gt;Require Credit Card Information?&amp;lt;/label&amp;gt; &amp;lt;input name=&amp;quot;RequireCCInfo&amp;quot; id=&amp;quot;RequireCCInfo&amp;quot; value=&amp;quot;1&amp;quot; type=&amp;quot;checkbox&amp;quot;&amp;gt; &amp;lt;div id=&amp;quot;CreditCardCompanyPanel&amp;quot;&amp;gt;  &amp;lt;div&amp;gt;   &amp;lt;input id=&amp;quot;ccAmex&amp;quot; class=&amp;quot;ccCheckBox&amp;quot; value=&amp;quot;1&amp;quot; type=&amp;quot;checkbox&amp;quot;&amp;gt;   &amp;lt;label for=&amp;quot;ccAmex&amp;quot;&amp;gt;American Express&amp;lt;/label&amp;gt;  &amp;lt;/div&amp;gt;  &amp;lt;div&amp;gt;   &amp;lt;input id=&amp;quot;ccVisa&amp;quot; class=&amp;quot;ccCheckBox&amp;quot; value=&amp;quot;1&amp;quot; type=&amp;quot;checkbox&amp;quot;&amp;gt;   &amp;lt;label for=&amp;quot;ccVisa&amp;quot;&amp;gt;Visa&amp;lt;/label&amp;gt;  &amp;lt;/div&amp;gt;  &amp;lt;div&amp;gt;   &amp;lt;input id=&amp;quot;ccDiscover&amp;quot; class=&amp;quot;ccCheckBox&amp;quot; value=&amp;quot;1&amp;quot; type=&amp;quot;checkbox&amp;quot;&amp;gt;   &amp;lt;label for=&amp;quot;ccDiscover&amp;quot;&amp;gt;Discover&amp;lt;/label&amp;gt;  &amp;lt;/div&amp;gt;  &amp;lt;div&amp;gt;   &amp;lt;input id=&amp;quot;ccMc&amp;quot; class=&amp;quot;ccCheckBox&amp;quot; value=&amp;quot;1&amp;quot; type=&amp;quot;checkbox&amp;quot;&amp;gt;   &amp;lt;label for=&amp;quot;ccMc&amp;quot;&amp;gt;Master Card&amp;lt;/label&amp;gt;        &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;There is nothing too notable in all of that other than the fact that you should notice that I have added a class &amp;quot;ccCheckBox&amp;quot; to all of my dependent checkboxes.  I will explain more on that in a bit, but I wanted to point out that it is there.  You will also notice that I am not doing anything in the way of hiding the &amp;quot;CreditCardCompanyPanel&amp;quot; div.  We need to determine at request time whether that will be hidden or not based on whether the &amp;quot;RequireCCInfo&amp;quot; checkbox is checked.&lt;/p&gt; &lt;p&gt;Now, here is the fun part...  I am including the JS that I use for this task below:&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;&amp;lt;script language=&amp;quot;javascript&amp;quot;&amp;gt;  (document).ready(function(){  $(&amp;quot;#RequireCCInfo&amp;quot;).change(function(){   toggleCreditCardCompanyPanel();  });    function toggleCreditCardCompanyPanel() {   if ($(&amp;quot;#RequireCCInfo&amp;quot;).attr(&amp;quot;checked&amp;quot;) == true)  $(&amp;quot;#CreditCardCompanyPanel&amp;quot;).show();    else $(&amp;quot;#CreditCardCompanyPanel&amp;quot;).hide();  }  $(&amp;quot;#SaveButton&amp;quot;).click(function(){   var pass = false;   if ($(&amp;quot;#RequireCCInfo&amp;quot;).attr(&amp;quot;checked&amp;quot;) == true){    $(&amp;quot;.ccCheckBox&amp;quot;).each(function() {                   if ($(this).attr(&amp;quot;checked&amp;quot;) == true) pass = true;               });   }   else pass = true;   if (pass) $(&amp;quot;#frmMyForm&amp;quot;).submit();   else alert(&apos;You must select at least on credit card company if &amp;quot;Require Credit Card Information&amp;quot; is checked.&apos;);  });   toggleCreditCardCompanyPanel(); }); &amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;First, by using the $(document).ready() function we are telling JQuery to run this JS once the DOM has been completely loaded.  Let&apos;s look at each section within that ready() block...&lt;/p&gt; &lt;p&gt;The first thing you will see is the $(&amp;quot;#RequireCCInfo&amp;quot;).change() method.  JQuery gives us the concept of binding a listener to an element.  For our example, this listener says that anytime that an element with an ID of &amp;quot;RequireCCInfo&amp;quot; is changed, that we will run the code in its function().  You will see that anytime our &amp;quot;RequireCCInfo&amp;quot; checkbox is changed we are going to run a function called toggleCreditCardCompanyPanel().   As you can see we have that method defined immediately after our &amp;quot;RequireCCInfo&amp;quot; checkbox.&lt;/p&gt; &lt;p&gt;In our toggleCreditCardCompanyPanel() method, we are making the decision as to whether or not our &amp;quot;CreditCardCompanyPanel&amp;quot; will be displayed based on whether our user has decided to check the box labeled &amp;quot;Require Credit Card Information?&amp;quot;.   By using the JQuery selectors we are in essence saying:  If a checkbox with an ID of &amp;quot;RequireCCInfo&amp;quot; is checked, display an element with the ID &amp;quot;CreditCardCompanyPanel&amp;quot;.  Otherwise we will hide this element.&lt;/p&gt; &lt;p&gt;Next comes our validation on form submit... and pretty cool stuff!&lt;/p&gt; &lt;p&gt;Basically I have added a listener which is bound to our submit button with the ID of &amp;quot;SaveButton&amp;quot; which will submit our form &amp;quot;frmMyForm&amp;quot;.   Anytime that this button is clicked, we will run the code in the function() block.   We start this function by setting a value pass=false.  We will use this variable to determine whether our form has passed validation.  Next we get just a small taste of the magic of JQuery selectors.    First, as we did in the toggleCreditCardCompanyPanel() function, we are determining if the element with the ID of &amp;quot;RequireCCInfo&amp;quot; is checked.  If so, by using the each() function, we are going to loop through all elements on the page with the class &amp;quot;ccCheckBox&amp;quot; (remember that from above?).  In each iteration of the loop we are going to determine if the element has been checked.  If so, we are going to set pass=true since we know that our validation has passed.&lt;/p&gt; &lt;p&gt;Lastly, now that we have determined that our form is either going to pass/fail, we take the appropriate action.  If pass==fail, we are simply going to alert a message telling the user that if they are going to enable credit cards that they have to choose at least one credit card company.  Otherwise, we are going to call the submit() method on our form.&lt;/p&gt; &lt;p&gt;I almost took the time to write out the equivalent of this in POJS (plain old JavaScript) to show how much easier life is with JQuery, but I realized I didn&apos;t have the time, patience, or will.  JQuery has spoiled me!&lt;/p&gt;</description><pubDate>Wed, 16 Jul 2008 14:41:00 GMT</pubDate><guid>http://daveshuck.instantspot.com/blog/2008/07/16/Related-checkbox-validation-with-JQuery</guid><category>ColdFusion,Javascript,Tips and Tricks</category></item><item><title>ColdFusion in odd places - using the directory watcher on my desktop</title><link>http://daveshuck.instantspot.com/blog/2008/04/21/ColdFusion-in-odd-places--using-the-directory-watcher-on-my-desktop</link><description>&lt;p&gt;Since recently installling yet another distro on my laptop, I was unable to get the FTP functionality of my webcam software (Camorama) to work properly.  The program will save snapshots locally, but bombs on transfer.   Rather than troubleshoot it to death, I decided to whip out a quick and dirty ColdFusion directory watcher event gateway and have it watch for updated images, and then push them to my webserver via FTP.&lt;/p&gt; &lt;p&gt;For anyone interested in this non-earth shattering bit of code, here it is.  First I created a config file:&lt;/p&gt; &lt;p&gt;WebcamWatcher.cfg&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;# The directory we want to watch.  directory=/home/dshuck/Webcam_Pictures  # Do we want to recurse the directories? recurse=no  # miliseconds between checks interval=6000  # The comma separated list of extensions to match. extensions=*  # component method for change events changeFunction=onChange  # component method for add events addFunction=onAdd  # no delete events for now deleteFunction= &lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;Now to create the methods in our WebcamWatcher.cfc.  In short, either a changed file or an added file will trigger the putImage function which first creates the FTP connection, changes directories to my webcam directory, then pushes the file to the server.  Here is the code:&lt;/p&gt; &lt;p&gt;WebcamWatcher.cfc&lt;div class=&quot;code&quot; &gt;&lt;pre&gt;&amp;lt;cfcomponent output=&amp;quot;false&amp;quot;&amp;gt;  &amp;lt;cffunction name=&amp;quot;onAdd&amp;quot; output=&amp;quot;false&amp;quot;&amp;gt;   &amp;lt;cfargument name=&amp;quot;CFEvent&amp;quot; type=&amp;quot;struct&amp;quot; required=&amp;quot;yes&amp;quot;&amp;gt;   &amp;lt;cfset var Data=CFEvent.data /&amp;gt;     &amp;lt;cflog file=&amp;quot;DirectoryWatcher&amp;quot; application=&amp;quot;No&amp;quot;         text=&amp;quot; ACTION: #data.type#;  FILE: #data.filename#;  calling putImage()&amp;quot; /&amp;gt;   &amp;lt;cfset putImage() /&amp;gt;  &amp;lt;/cffunction&amp;gt;     &amp;lt;cffunction name=&amp;quot;onChange&amp;quot; output=&amp;quot;false&amp;quot;&amp;gt;     &amp;lt;cfargument name=&amp;quot;CFEvent&amp;quot; type=&amp;quot;struct&amp;quot; required=&amp;quot;yes&amp;quot;&amp;gt;     &amp;lt;cfset var data=CFEvent.data&amp;gt;     &amp;lt;cflog file=&amp;quot;DirectoryWatcher&amp;quot; application=&amp;quot;No&amp;quot;         text=&amp;quot; ACTION: #data.type#;  FILE: #data.filename#; TIME: #timeFormat(data.lastmodified)# calling putImage();&amp;quot; /&amp;gt;   &amp;lt;cfset putImage() /&amp;gt;  &amp;lt;/cffunction&amp;gt;   &amp;lt;cffunction name=&amp;quot;putImage&amp;quot; access=&amp;quot;private&amp;quot; output=&amp;quot;false&amp;quot; returntype=&amp;quot;void&amp;quot;&amp;gt;   &amp;lt;cfftp action = &amp;quot;open&amp;quot;       username = &amp;quot;joeuser&amp;quot;      connection = &amp;quot;MyConnection&amp;quot;       password = &amp;quot;mycoolpassword&amp;quot;       server = &amp;quot;www.mywebserver.com&amp;quot;       stopOnError = &amp;quot;true&amp;quot; /&amp;gt;      &amp;lt;cfif cfftp.Succeeded&amp;gt;    &amp;lt;cfftp      connection=&amp;quot;MyConnection&amp;quot;      action=&amp;quot;changedir&amp;quot;      directory=&amp;quot;htdocs/mywebcamdirectory&amp;quot; /&amp;gt;        &amp;lt;cfif cfftp.Succeeded&amp;gt;     &amp;lt;cfftp       connection = &amp;quot;MyConnection&amp;quot;      action = &amp;quot;putFile&amp;quot;       name = &amp;quot;uploadFile&amp;quot;       transferMode = &amp;quot;binary&amp;quot;       localFile = &amp;quot;/home/dshuck/Webcam_Pictures/webcam.jpeg&amp;quot;       remoteFile = &amp;quot;DaveWebcam.jpg&amp;quot; /&amp;gt;    &amp;lt;/cfif&amp;gt;     &amp;lt;/cfif&amp;gt;   &amp;lt;cflog file=&amp;quot;DirectoryWatcher&amp;quot; application=&amp;quot;false&amp;quot; text=&amp;quot;file push to webserver...#cfftp.Succeeded#&amp;quot; /&amp;gt;  &amp;lt;/cffunction&amp;gt; &amp;lt;/cfcomponent&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt; &lt;p&gt;So, now the internet can yet again be graced with my &amp;quot;almost live&amp;quot; presence.   I can almost hear the selective sigh of relief.&lt;/p&gt; &lt;p&gt;I have to consider this to be a somewhat odd place for ColdFusion and it got me thinking... What kinds of odd places do you or have you used ColdFusion?&lt;/p&gt;</description><pubDate>Mon, 21 Apr 2008 05:02:00 GMT</pubDate><guid>http://daveshuck.instantspot.com/blog/2008/04/21/ColdFusion-in-odd-places--using-the-directory-watcher-on-my-desktop</guid><category>ColdFusion,InstantSpot,Tips and Tricks</category></item><item><title>Adding spell checking to Evolution mail client</title><link>http://daveshuck.instantspot.com/blog/2008/04/01/Adding-spell-checking-to-Evolution-mail-client</link><description>&lt;p&gt;I am not sure why I have never pusued this until today, but I for some reason have never spent the time to figure out why I didn&apos;t have spell checking in my Evolution mail client. I knew that Evolution used the packages aspell and gnome-spell, which I already had installed, so why wasn&apos;t it working?&lt;/p&gt; &lt;p&gt;When I went into my composer settings in the Evolution preferences, I saw a big empty box that was the list of dictionaries that Evolution was using.&amp;nbsp; You would think there would be some method of adding them from there, but unfortunately it isn&apos;t quite that obvious. To add the English dictionary I had to install the package aspell-en. Once I added this I reopened Evolution and Bamn!&lt;/p&gt; &lt;p&gt;There it is. For the copy/paste inclined, try the following:&lt;/p&gt; &lt;p&gt;&lt;code&gt;#sudo apt-get install aspell gnome-spell aspell-en&lt;/code&gt;&lt;/p&gt;</description><pubDate>Tue, 01 Apr 2008 13:41:00 GMT</pubDate><guid>http://daveshuck.instantspot.com/blog/2008/04/01/Adding-spell-checking-to-Evolution-mail-client</guid><category>Ubuntu,Tips and Tricks</category></item><item><title>Publishing blog entries with ScribeFire using XMLRPC API</title><link>http://daveshuck.instantspot.com/blog/2008/01/29/Publishing-blog-entries-with-ScribeFire-using-XMLRPC-API</link><description>&lt;p&gt;On the most recent release of InstantSpot, we added in XMLRPC support so that blog administration can happen anywhere, using any client that supports XMLRPC.  We are thinking it might be fun to create an AIR app for this purpose down the line (or better yet... someone else! hint...hint...), but until that time, there are a variety of clients that can be used, since we followed the MetaWeblog API standards.&lt;br /&gt; &lt;br /&gt; I am actually trying this out for the first time on our live instance with this blog entry by using a *sweet* Firefox plugin called ScribeFire.  Considering that we haven&apos;t really published this ability, I thought it might make sense to do a walk through of setting it up and using it.&lt;br /&gt; &lt;br /&gt; First, let&apos;s walk through the ScribeFire Account Wizard.  One you have installed the ScribeFire plugin (&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/1730&quot;&gt;available here&lt;/a&gt;), click on the little text pad icon in the bottom corner of your browser window and start the Account Wizard.  You should see a window that looks like the one below.  Choose &amp;quot;Manually Configure&amp;quot; and continue.&lt;br /&gt; &lt;br /&gt; &lt;img src=&quot;http://daveshuck.instantspot.com/userfiles/073006/91/ScribeFireWizard01.png&quot; style=&quot;border: 1px solid rgb(48, 48, 48);&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;br /&gt; You will then be presented with a number of options of various &lt;ahem&gt;inferior&lt;/ahem&gt; blogging services.  Choose  &amp;quot;Custom Blog&amp;quot; and continue.&lt;br /&gt; &lt;br /&gt; &lt;img src=&quot;http://daveshuck.instantspot.com/userfiles/073006/91/ScribeFireWizard02.png&quot; style=&quot;border: 1px solid rgb(48, 48, 48);&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;br /&gt; On the screen you see below, choose &amp;quot;MetaWeblog API&amp;quot; and enter this URL into the Server API URL input box:  &lt;strong&gt;http://www.instantspot.com/gospot/remote.metaweblogAPI&lt;/strong&gt; &lt;br /&gt; Leave &amp;quot;Advanced Settings&amp;quot; unchecked and continue.&lt;br /&gt; &lt;br /&gt; &lt;img src=&quot;http://daveshuck.instantspot.com/userfiles/073006/91/ScribeFireWizard03.png&quot; style=&quot;border: 1px solid rgb(48, 48, 48);&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;br /&gt; On the following screen you will be prompted for your username and password.  Since the new release of InstantSpot, your email address is now used as your username.  &lt;br /&gt; &lt;br /&gt; &lt;img src=&quot;http://daveshuck.instantspot.com/userfiles/073006/91/ScribeFireWizard04.png&quot; style=&quot;border: 1px solid rgb(48, 48, 48);&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;br /&gt; That&apos;s it!  If you did this correctly you should see your blog listed in the following screen like this:&lt;br /&gt; &lt;img src=&quot;http://daveshuck.instantspot.com/userfiles/073006/91/ScribeFireWizard05.png&quot; style=&quot;border: 1px solid rgb(48, 48, 48);&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;br /&gt; Now, you should see a list of your categories (labeled in the interface as &amp;quot;tags&amp;quot;), blogposts, and in the future, saved &amp;quot;Notes&amp;quot; which are drafts stored locally by ScribeFire to the right of the ScribeFire window like this:&lt;br /&gt; &lt;img src=&quot;http://daveshuck.instantspot.com/userfiles/073006/91/ScribeFireInterface01.png&quot; style=&quot;border: 1px solid rgb(48, 48, 48);&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;br /&gt; From here, the interface is pretty simple.  One thing that is noteworthy is that we even support the ability for you to upload and insert images through ScribeFire.  When you click on the image icon on the editor, you will see a window that looks like this:&lt;br /&gt; &lt;br /&gt; &lt;img src=&quot;http://daveshuck.instantspot.com/userfiles/073006/91/ScribeFireImageUpload.png&quot; style=&quot;border: 1px solid rgb(48, 48, 48);&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;br /&gt; Choose &amp;quot;Image Upload&amp;quot;, then after browsing to your file, select &amp;quot;Upload Via API&amp;quot;.  &lt;br /&gt; &lt;br /&gt; &lt;img src=&quot;http://daveshuck.instantspot.com/userfiles/073006/91/ScribeFireImage%20UploadWait.png&quot; style=&quot;border: 1px solid rgb(48, 48, 48);&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;br /&gt; When it completes you will see the following window.  Choose &amp;quot;Insert Image&amp;quot; and you will see your image inserted into your text.&lt;br /&gt; &lt;br /&gt; &lt;img src=&quot;http://daveshuck.instantspot.com/userfiles/073006/91/ScribeFireUploadComplete.png&quot; style=&quot;border: 1px solid rgb(48, 48, 48);&quot; alt=&quot;&quot; /&gt;&lt;br /&gt; &lt;br /&gt; Now you can start posting away to your heart&apos;s content!&lt;/p&gt; &lt;p class=&quot;poweredbyperformancing&quot;&gt;Powered by &lt;a href=&quot;http://scribefire.com/&quot;&gt;ScribeFire&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 29 Jan 2008 15:37:00 GMT</pubDate><guid>http://daveshuck.instantspot.com/blog/2008/01/29/Publishing-blog-entries-with-ScribeFire-using-XMLRPC-API</guid><category>InstantSpot,Tips and Tricks</category></item><item><title>Gmail Tip: Muting and Unmuting conversation threads</title><link>http://daveshuck.instantspot.com/blog/2006/11/17/Gmail-Tip-Muting-and-Unmuting-conversation-threads</link><description>I accidentally learned a new Gmail trick today.  I was viewing an email and accidentally hit the &amp;#39;m&amp;#39; key on my keyboard.  This apparently mutes the conversation making that thread disappear from your inbox.   This is a cool trick on its own, but what happens if you want to unmute it?    In your Gmail search you can enter: &lt;strong&gt;is:muted&lt;/strong&gt;, and you will see a list of all muted threads.  To unmute, click into one and choose &amp;quot;Move to Inbox&amp;quot; in the select box at the top.    </description><pubDate>Fri, 17 Nov 2006 23:41:01 GMT</pubDate><guid>http://daveshuck.instantspot.com/blog/2006/11/17/Gmail-Tip-Muting-and-Unmuting-conversation-threads</guid><category>Tips and Tricks</category></item><item><title>Grand Canyon... It&apos;s on!</title><link>http://daveshuck.instantspot.com/blog/2005/07/11/Grand-Canyon-Its-on</link><description>My father and I decided that this was the year that we would hike the North Rim to the South Rim of the Grand Canyon.   I know this seems crazy, but it is actually a paperwork challenge to be able to hike the Grand Canyon.  There is an application process in which you have to fax your request in the 1st day of the month 6 months before the intended date of your trip with a detailed itinerary, including where you will be sleeping and when.  We sent faxed our paperwork in and held our breath on the 1st of April, 6 months before we hoped to go in September.  After no word for a month we finally contacted them, only to find out that we had been rejected.  Discouraged, but not beaten, we laid out the calendar to see if there was another time that would work.  We decided that November would be acceptable, albeit a little colder.  It should be in the 60s in the bottom of the canyon though where we will spend the majority of our time.  Once again, we laid out our itinerary and faxed in on July 1.  My dad received a letter today dated July 6, 2005 telling him that they were sorry, but they were unable to accept out application.  He spent a good hour walking around the house cussing and feeling terribly disappointed.  A bit later my mom noticed there was another letter from the Grand Canyon dated July 7, 2005.  &lt;br /&gt;  &lt;br /&gt;  &lt;div class=&quot;note&quot;&gt;  Dear Mr. Shuck, we have accepted your request to hike the Grand Canyon on the dates of November 1, 2 and 3, 2005.  Enlcosed are your passes, which you will need to affix to your backpack and carry with you in the canyon.  There is no need to stop by the back country headquarters before departing on the trail.  &lt;/div&gt;  So in 3.5 months, I will be taking this in....&lt;br /&gt;  &lt;div style=&quot;text-align: center&quot;&gt;  &lt;img src=&quot;/images/GrandCanyon.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;  &lt;/div&gt;      </description><pubDate>Mon, 11 Jul 2005 05:00:00 GMT</pubDate><guid>http://daveshuck.instantspot.com/blog/2005/07/11/Grand-Canyon-Its-on</guid><category>Outdoors</category></item></channel></rss>