<?xml version="1.0" encoding="iso-8859-1"?><!-- generator="b2evolution/3.3.3" -->
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>web notes - a blog</title>
		<link>http://web-notes.wirehopper.com/</link>
		<atom:link rel="self" type="application/rss+xml" href="http://web-notes.wirehopper.com/?tempskin=_rss2" />
		<description></description>
		<language>en-US</language>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<admin:generatorAgent rdf:resource="http://b2evolution.net/?v=3.3.3"/>
		<ttl>60</ttl>
				<item>
			<title>An Excellent Dialup ISP - US</title>
			<link>http://web-notes.wirehopper.com/2010/09/03/an-excellent-dialup-isp-us</link>
			<pubDate>Sat, 04 Sep 2010 04:14:50 +0000</pubDate>			<dc:creator>admin</dc:creator>
			<category domain="main">News</category>			<guid isPermaLink="false">586@http://web-notes.wirehopper.com/</guid>
						<description>&lt;p&gt;&lt;a href=&quot;http://www.dialup4less.com/&quot;&gt;http://www.dialup4less.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;As noted in the previous post, a free Juno account grants you access to juno.com, including their webmail.&lt;/p&gt;

&lt;p&gt;Juno requires that even people that subscribe to their service use their software to connect to the Internet.&lt;/p&gt;

&lt;p&gt;Unfortunately, their software isn&amp;#8217;t available for Linux.&lt;/p&gt;

&lt;p&gt;An excellent alternative is &lt;a href=&quot;http://dialup4less.com&quot;&gt;http://dialup4less.com&lt;/a&gt;.  The rates are fair, the service is great, and the connection is fast.  They have access numbers in most states, if not all.&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://web-notes.wirehopper.com/2010/09/03/an-excellent-dialup-isp-us&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p><a href="http://www.dialup4less.com/">http://www.dialup4less.com/</a></p><p>As noted in the previous post, a free Juno account grants you access to juno.com, including their webmail.</p>

<p>Juno requires that even people that subscribe to their service use their software to connect to the Internet.</p>

<p>Unfortunately, their software isn&#8217;t available for Linux.</p>

<p>An excellent alternative is <a href="http://dialup4less.com">http://dialup4less.com</a>.  The rates are fair, the service is great, and the connection is fast.  They have access numbers in most states, if not all.</p><div class="item_footer"><p><small><a href="http://web-notes.wirehopper.com/2010/09/03/an-excellent-dialup-isp-us">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://web-notes.wirehopper.com/2010/09/03/an-excellent-dialup-isp-us#comments</comments>
			<wfw:commentRss>http://web-notes.wirehopper.com/?tempskin=_rss2&#38;disp=comments&#38;p=586</wfw:commentRss>
		</item>
				<item>
			<title>Ubuntu 9.04 - USB Dialup - Juno - Connect</title>
			<link>http://web-notes.wirehopper.com/2010/08/30/ubuntu-9-04-usb-dialup-juno-connect</link>
			<pubDate>Tue, 31 Aug 2010 03:35:51 +0000</pubDate>			<dc:creator>admin</dc:creator>
			<category domain="main">News</category>			<guid isPermaLink="false">585@http://web-notes.wirehopper.com/</guid>
						<description>&lt;p&gt;&lt;a href=&quot;http://www.linuxant.com/drivers/dgc/archive/dgcmodem-1.13/dgcmodem-1.13.tar.gz&quot;&gt;http://www.linuxant.com/drivers/dgc/archive/dgcmodem-1.13/dgcmodem-1.13.tar.gz&lt;/a&gt;&lt;/p&gt;&lt;p&gt;My Mom uses Juno&amp;#8217;s dialup service to connect to the Internet and for email.  Her HP laptop (running Windows) was infected with something, and had really become unusable, it was so slow.&lt;/p&gt;

&lt;p&gt;I took it home where my most valuable tool is a high-speed Internet connection.&lt;/p&gt;

&lt;p&gt;After many tries, this is the general sequence of operations that worked.  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Ubuntu 9.04.  Other versions may work, I chose this because Linuxant had drivers to support the internal modem.  It&amp;#8217;s nice.&lt;/li&gt;
&lt;li&gt;Run the upgrades offered.&lt;/li&gt;
&lt;li&gt;Restart&lt;/li&gt;
&lt;li&gt;The internal modem just wouldn&amp;#8217;t work, so I bought an external USB modem from Best Buy.  Zoom Modem, Model 3095.&lt;/li&gt;
&lt;li&gt;Followed the installation instructions and found that this laptop isn&amp;#8217;t supported (it&amp;#8217;s an x86_64).  Used the link above and built the driver from the source.  Many thanks to Linuxant.com.&lt;/li&gt;
&lt;li&gt;Added the user to dip and dialout groups&lt;/li&gt;
&lt;li&gt;Installed Gnome PPP, and Network&lt;/li&gt;
&lt;li&gt;Use sudo wvdialconf to configure wvdial&lt;/li&gt;
&lt;li&gt;Manually edited /etc/wvdial.conf to add in the Juno phone numbers, username and password&lt;/li&gt;
&lt;li&gt;Restart&lt;/li&gt;
&lt;li&gt;Tested the connection using wvdial, it worked.  Then tested with Gnome PPP, it worked.  Finally, used Network and PPP to connect, and browsed to juno.com&lt;/li&gt;
&lt;li&gt;Since I have a free account, Juno runs in a limited mode, but it is running.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Ubuntu is really nice to work with.&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://web-notes.wirehopper.com/2010/08/30/ubuntu-9-04-usb-dialup-juno-connect&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p><a href="http://www.linuxant.com/drivers/dgc/archive/dgcmodem-1.13/dgcmodem-1.13.tar.gz">http://www.linuxant.com/drivers/dgc/archive/dgcmodem-1.13/dgcmodem-1.13.tar.gz</a></p><p>My Mom uses Juno&#8217;s dialup service to connect to the Internet and for email.  Her HP laptop (running Windows) was infected with something, and had really become unusable, it was so slow.</p>

<p>I took it home where my most valuable tool is a high-speed Internet connection.</p>

<p>After many tries, this is the general sequence of operations that worked.  </p>

<ol>
<li>Install Ubuntu 9.04.  Other versions may work, I chose this because Linuxant had drivers to support the internal modem.  It&#8217;s nice.</li>
<li>Run the upgrades offered.</li>
<li>Restart</li>
<li>The internal modem just wouldn&#8217;t work, so I bought an external USB modem from Best Buy.  Zoom Modem, Model 3095.</li>
<li>Followed the installation instructions and found that this laptop isn&#8217;t supported (it&#8217;s an x86_64).  Used the link above and built the driver from the source.  Many thanks to Linuxant.com.</li>
<li>Added the user to dip and dialout groups</li>
<li>Installed Gnome PPP, and Network</li>
<li>Use sudo wvdialconf to configure wvdial</li>
<li>Manually edited /etc/wvdial.conf to add in the Juno phone numbers, username and password</li>
<li>Restart</li>
<li>Tested the connection using wvdial, it worked.  Then tested with Gnome PPP, it worked.  Finally, used Network and PPP to connect, and browsed to juno.com</li>
<li>Since I have a free account, Juno runs in a limited mode, but it is running.</li>
</ol>

<p><strong>Ubuntu is really nice to work with.</strong></p><div class="item_footer"><p><small><a href="http://web-notes.wirehopper.com/2010/08/30/ubuntu-9-04-usb-dialup-juno-connect">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://web-notes.wirehopper.com/2010/08/30/ubuntu-9-04-usb-dialup-juno-connect#comments</comments>
			<wfw:commentRss>http://web-notes.wirehopper.com/?tempskin=_rss2&#38;disp=comments&#38;p=585</wfw:commentRss>
		</item>
				<item>
			<title>Hack Attack</title>
			<link>http://web-notes.wirehopper.com/2010/08/01/hack-attack</link>
			<pubDate>Sun, 01 Aug 2010 12:30:36 +0000</pubDate>			<dc:creator>admin</dc:creator>
			<category domain="main">Security</category>			<guid isPermaLink="false">579@http://web-notes.wirehopper.com/</guid>
						<description>&lt;p&gt;For the last year or so, I have a site that sends me an email listing all the new and modified files on the server.&lt;/p&gt;

&lt;p&gt;This morning, these entries caught my eye:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;/var/www/html/&lt;br /&gt;
/var/www/html/c99.php&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;The c99 file was not supposed to be on the server.&lt;/p&gt;

&lt;p&gt;Listing the /var/www/html directory, I found:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;-rw-r&amp;#8211;r&amp;#8211;  1 nobody   nobody     7293 Aug  1 04:58 (at sign).php&lt;br /&gt;
-rw-r&amp;#8211;r&amp;#8211;  1 nobody   nobody   162032 Jul 31 05:57 c99.php&lt;br /&gt;
-rw-r&amp;#8211;r&amp;#8211;  1 nobody   nobody        0 May 23 01:36 index.html&lt;br /&gt;
-rw-r&amp;#8211;r&amp;#8211;  1 nobody   nobody    44283 May 23 01:36 Dont.Touch.php&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I went back in my email Inbox, and found that the May 23 email was never received - cron had stopped on the server, and a ticket was sent to restart it.&lt;/p&gt;

&lt;p&gt;The hosting company recommended I update some file and directory permissions, which I did, with the following commands:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;find -type f | xargs chmod 644&lt;br /&gt;
find -type d | xargs chmod 755&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;These set permissions for a files to 644, and all directories to 755.&lt;/p&gt;

&lt;p&gt;Tarred up the files and sent them to the hosting company, along with some notes.&lt;/p&gt;

&lt;p&gt;On the bright side - nothing was lost, and the cleanup was pretty straightforward.&lt;/p&gt;

&lt;p&gt;The error log showed execution attempts, which failed, and that IP address has been blocked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hack was not on this server.&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://web-notes.wirehopper.com/2010/08/01/hack-attack&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>For the last year or so, I have a site that sends me an email listing all the new and modified files on the server.</p>

<p>This morning, these entries caught my eye:</p>

<blockquote><p>/var/www/html/<br />
/var/www/html/c99.php</p></blockquote>

<p>The c99 file was not supposed to be on the server.</p>

<p>Listing the /var/www/html directory, I found:</p>

<blockquote><p>-rw-r&#8211;r&#8211;  1 nobody   nobody     7293 Aug  1 04:58 (at sign).php<br />
-rw-r&#8211;r&#8211;  1 nobody   nobody   162032 Jul 31 05:57 c99.php<br />
-rw-r&#8211;r&#8211;  1 nobody   nobody        0 May 23 01:36 index.html<br />
-rw-r&#8211;r&#8211;  1 nobody   nobody    44283 May 23 01:36 Dont.Touch.php</p></blockquote>

<p>I went back in my email Inbox, and found that the May 23 email was never received - cron had stopped on the server, and a ticket was sent to restart it.</p>

<p>The hosting company recommended I update some file and directory permissions, which I did, with the following commands:</p>

<blockquote>
<p>find -type f | xargs chmod 644<br />
find -type d | xargs chmod 755</p></blockquote>

<p>These set permissions for a files to 644, and all directories to 755.</p>

<p>Tarred up the files and sent them to the hosting company, along with some notes.</p>

<p>On the bright side - nothing was lost, and the cleanup was pretty straightforward.</p>

<p>The error log showed execution attempts, which failed, and that IP address has been blocked.</p>

<p><strong>Hack was not on this server.</strong></p><div class="item_footer"><p><small><a href="http://web-notes.wirehopper.com/2010/08/01/hack-attack">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://web-notes.wirehopper.com/2010/08/01/hack-attack#comments</comments>
			<wfw:commentRss>http://web-notes.wirehopper.com/?tempskin=_rss2&#38;disp=comments&#38;p=579</wfw:commentRss>
		</item>
				<item>
			<title>An Ounce of Performance and Prevention</title>
			<link>http://web-notes.wirehopper.com/2010/07/25/an-ounce-of-performance-and-prevention</link>
			<pubDate>Sun, 25 Jul 2010 14:51:58 +0000</pubDate>			<dc:creator>admin</dc:creator>
			<category domain="main">PHP</category>
<category domain="alt">HTML / CSS</category>			<guid isPermaLink="false">571@http://web-notes.wirehopper.com/</guid>
						<description>&lt;p&gt;&lt;a href=&quot;http://wirehopper.com/wickedgoodgallery/&quot;&gt;http://wirehopper.com/wickedgoodgallery/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The Wicked Good Gallery was a lot of fun to build.  It meets the stated requirements, I like the design, and I learned some good stuff.&lt;/p&gt;

&lt;p&gt;One issue that always concerns me is performance.  The Wicked Good Gallery demo has seven images, and on each page load, it reads the image directories, tests for a thumbnail and detailed image, and if they don&amp;#8217;t exist, it creates them from the first .jpg in the directory it finds.  The issue is that in most cases, when images are posted, they won&amp;#8217;t change.  This isn&amp;#8217;t a versioned gallery, only the last image uploaded will be offered to site visitors.&lt;/p&gt;

&lt;p&gt;For that reason, you can assume that the only time you need to test for new files is when the list of directories changes.  You can further extend it to only rebuild new directories, but then you risk the problem of only testing for content in new directories, not refreshing any existing images. &lt;/p&gt;

&lt;p&gt;Therefore, a simple caching solution was implemented.  When the page loads, the code tests for the presence of a cache file.  If the file is present, it compares the directories listed in the cache file to those it reads on the server.  It they match, the cached list of artwork is used, otherwise, the cache is rebuilt.&lt;/p&gt;

&lt;p class=&quot;amcode&quot;&gt;PHP:&lt;/p&gt;&lt;div class=&quot;codeblock amc_php amc_short&quot;&gt;&lt;table&gt;&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_default&quot;&gt;$bUpdateCache&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_default&quot;&gt;$aDirectoryCache&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;a href=&quot;http://www.php.net/function.array&quot; title=&quot; Read the PHP.net documentation for : array() &quot; target=&quot;_blank&quot; class=&quot;codeblock_external_link&quot;&gt;array&lt;/a&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;if&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;&lt;a href=&quot;http://www.php.net/function.is_file&quot; title=&quot; Read the PHP.net documentation for : is_file() &quot; target=&quot;_blank&quot; class=&quot;codeblock_external_link&quot;&gt;is_file&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$sDirectoryCache&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;include&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$sDirectoryCache&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$bUpdateCache&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc7&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_default&quot;&gt;$aDirectories&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;&lt;a href=&quot;http://www.php.net/function.glob&quot; title=&quot; Read the PHP.net documentation for : glob() &quot; target=&quot;_blank&quot; class=&quot;codeblock_external_link&quot;&gt;glob&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$sArtworkDir&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;'/*'&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc8&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;if&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$aDirectoryCache&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;!=&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$aDirectories&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc9&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc0&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;foreach&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$aDirectories&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;as&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$k&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$v&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;&lt;a href=&quot;http://www.php.net/function.is_file&quot; title=&quot; Read the PHP.net documentation for : is_file() &quot; target=&quot;_blank&quot; class=&quot;codeblock_external_link&quot;&gt;is_file&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$v&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;'/'&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$sArt&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;)&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;&lt;a href=&quot;http://www.php.net/function.is_file&quot; title=&quot; Read the PHP.net documentation for : is_file() &quot; target=&quot;_blank&quot; class=&quot;codeblock_external_link&quot;&gt;is_file&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$v&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;'/'&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$sThumb&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$aPieces&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;[]=&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$v&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;else&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;make_images&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$v&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$sArt&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$iArtHeight&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$sThumb&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$iThumbHeight&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$aPieces&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;[]=&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$v&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc7&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc8&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$bUpdateCache&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc9&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc0&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$aDirectories&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$aDirectoryCache&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;if&amp;nbsp;(&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$bUpdateCache&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;&lt;a href=&quot;http://www.php.net/function.file_put_contents&quot; title=&quot; Read the PHP.net documentation for : file_put_contents() &quot; target=&quot;_blank&quot; class=&quot;codeblock_external_link&quot;&gt;file_put_contents&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$sDirectoryCache&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;'&amp;lt;?php&amp;nbsp;$aDirectoryCache='&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;&lt;a href=&quot;http://www.php.net/function.var_export&quot; title=&quot; Read the PHP.net documentation for : var_export() &quot; target=&quot;_blank&quot; class=&quot;codeblock_external_link&quot;&gt;var_export&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$aDirectories&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;';'&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;PHP_EOL&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;'$aPieces='&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;&lt;a href=&quot;http://www.php.net/function.var_export&quot; title=&quot; Read the PHP.net documentation for : var_export() &quot; target=&quot;_blank&quot; class=&quot;codeblock_external_link&quot;&gt;var_export&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;$aPieces&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;';&amp;nbsp;?&amp;gt;'&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;p&gt;There was about a 0.0002 second improvement in performance.  Although that sounds trivial, more rigorous testing, with more images, would likely justify the implementation.  There is a performance penalty if the cache is removed, but it&amp;#8217;s very small, since the cache is built with &lt;strong&gt;var_export&lt;/strong&gt;s.&lt;/p&gt;

&lt;p&gt;The prevention added was a &lt;strong&gt;base &lt;a href=&quot;http://www.w3schools.com/TAGS/tag_base.asp&quot;&gt;http://www.w3schools.com/TAGS/tag_base.asp&lt;/a&gt;&lt;/strong&gt; tag.  This tag ensures all files are drawn from the correct directories, while still allowing relative references in the code.&lt;/p&gt;

&lt;p class=&quot;amcode&quot;&gt;XML:&lt;/p&gt;&lt;div class=&quot;codeblock amc_xml amc_short&quot;&gt;&lt;table&gt;&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&lt;span class=&quot;amc_default&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;base&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt; &lt;span class=&quot;amc_attribute&quot;&gt;href&lt;/span&gt;=&lt;span class=&quot;amc_string&quot;&gt;&quot;http://wirehopper.com/wickedgoodgallery/&quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&lt;span class=&quot;amc_default&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;link&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt; &lt;span class=&quot;amc_attribute&quot;&gt;rel&lt;/span&gt;=&lt;span class=&quot;amc_string&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt; &lt;span class=&quot;amc_attribute&quot;&gt;type&lt;/span&gt;=&lt;span class=&quot;amc_string&quot;&gt;&quot;text/css&quot;&lt;/span&gt; &lt;span class=&quot;amc_attribute&quot;&gt;href&lt;/span&gt;=&lt;span class=&quot;amc_string&quot;&gt;&quot;css/style.css&quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;p&gt;In this case, the base URL is &lt;a href=&quot;http://wirehopper.com/wickedgoodgallery/&quot;&gt;http://wirehopper.com/wickedgoodgallery/&lt;/a&gt;, and the style tag will draw from &lt;a href=&quot;http://wirehopper.com/wickedgoodgallery/css/style.css&quot;&gt;http://wirehopper.com/wickedgoodgallery/css/style.css&lt;/a&gt;, regardless of any slashes submitted in the URI, the page will display properly, and future references, derived by page navigation (clicking on images and links) will be valid.&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://web-notes.wirehopper.com/2010/07/25/an-ounce-of-performance-and-prevention&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p><a href="http://wirehopper.com/wickedgoodgallery/">http://wirehopper.com/wickedgoodgallery/</a></p><p>The Wicked Good Gallery was a lot of fun to build.  It meets the stated requirements, I like the design, and I learned some good stuff.</p>

<p>One issue that always concerns me is performance.  The Wicked Good Gallery demo has seven images, and on each page load, it reads the image directories, tests for a thumbnail and detailed image, and if they don&#8217;t exist, it creates them from the first .jpg in the directory it finds.  The issue is that in most cases, when images are posted, they won&#8217;t change.  This isn&#8217;t a versioned gallery, only the last image uploaded will be offered to site visitors.</p>

<p>For that reason, you can assume that the only time you need to test for new files is when the list of directories changes.  You can further extend it to only rebuild new directories, but then you risk the problem of only testing for content in new directories, not refreshing any existing images. </p>

<p>Therefore, a simple caching solution was implemented.  When the page loads, the code tests for the presence of a cache file.  If the file is present, it compares the directories listed in the cache file to those it reads on the server.  It they match, the cached list of artwork is used, otherwise, the cache is rebuilt.</p>

<p class="amcode">PHP:</p><div class="codeblock amc_php amc_short"><table><tr class="amc_code_odd"><td class="amc_line"><div class="amc1"></div></td><td><code><span class="amc_html"><span class="amc_default">$bUpdateCache</span><span class="amc_keyword">=</span><span class="amc_default">false</span><span class="amc_keyword">;</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"></div></td><td><code><span class="amc_html"><span class="amc_default">$aDirectoryCache</span><span class="amc_keyword">=<a href="http://www.php.net/function.array" title=" Read the PHP.net documentation for : array() " target="_blank" class="codeblock_external_link">array</a>();</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"></div></td><td><code><span class="amc_html"><span class="amc_keyword">if&nbsp;(</span><span class="amc_default"><a href="http://www.php.net/function.is_file" title=" Read the PHP.net documentation for : is_file() " target="_blank" class="codeblock_external_link">is_file</a></span><span class="amc_keyword">(</span><span class="amc_default">$sDirectoryCache</span><span class="amc_keyword">))</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;include&nbsp;</span><span class="amc_default">$sDirectoryCache</span><span class="amc_keyword">;</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"></div></td><td><code><span class="amc_html"><span class="amc_keyword">else</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc6"></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span class="amc_default">$bUpdateCache</span><span class="amc_keyword">=</span><span class="amc_default">true</span><span class="amc_keyword">;</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc7"></div></td><td><code><span class="amc_html"><span class="amc_default">$aDirectories</span><span class="amc_keyword">=</span><span class="amc_default"><a href="http://www.php.net/function.glob" title=" Read the PHP.net documentation for : glob() " target="_blank" class="codeblock_external_link">glob</a></span><span class="amc_keyword">(</span><span class="amc_default">$sArtworkDir</span><span class="amc_keyword">.</span><span class="amc_string">'/*'</span><span class="amc_keyword">);</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc8"></div></td><td><code><span class="amc_html"><span class="amc_keyword">if&nbsp;(</span><span class="amc_default">$aDirectoryCache</span><span class="amc_keyword">!=</span><span class="amc_default">$aDirectories</span><span class="amc_keyword">)</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc9"></div></td><td><code><span class="amc_html"><span class="amc_keyword">{</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc0"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;foreach&nbsp;(</span><span class="amc_default">$aDirectories&nbsp;</span><span class="amc_keyword">as&nbsp;</span><span class="amc_default">$k&nbsp;</span><span class="amc_keyword">=&gt;&nbsp;</span><span class="amc_default">$v</span><span class="amc_keyword">)</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc1"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&nbsp;(</span><span class="amc_default"><a href="http://www.php.net/function.is_file" title=" Read the PHP.net documentation for : is_file() " target="_blank" class="codeblock_external_link">is_file</a></span><span class="amc_keyword">(</span><span class="amc_default">$v</span><span class="amc_keyword">.</span><span class="amc_string">'/'</span><span class="amc_keyword">.</span><span class="amc_default">$sArt</span><span class="amc_keyword">)&nbsp;&amp;&amp;&nbsp;</span><span class="amc_default"><a href="http://www.php.net/function.is_file" title=" Read the PHP.net documentation for : is_file() " target="_blank" class="codeblock_external_link">is_file</a></span><span class="amc_keyword">(</span><span class="amc_default">$v</span><span class="amc_keyword">.</span><span class="amc_string">'/'</span><span class="amc_keyword">.</span><span class="amc_default">$sThumb</span><span class="amc_keyword">))</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span class="amc_default">$aPieces</span><span class="amc_keyword">[]=</span><span class="amc_default">$v</span><span class="amc_keyword">;</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if&nbsp;(</span><span class="amc_default">make_images</span><span class="amc_keyword">(</span><span class="amc_default">$v</span><span class="amc_keyword">,</span><span class="amc_default">$sArt</span><span class="amc_keyword">,</span><span class="amc_default">$iArtHeight</span><span class="amc_keyword">,</span><span class="amc_default">$sThumb</span><span class="amc_keyword">,</span><span class="amc_default">$iThumbHeight</span><span class="amc_keyword">))</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc6"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span class="amc_default">$aPieces</span><span class="amc_keyword">[]=</span><span class="amc_default">$v</span><span class="amc_keyword">;</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc7"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc8"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span class="amc_default">$bUpdateCache</span><span class="amc_keyword">=</span><span class="amc_default">true</span><span class="amc_keyword">;</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc9"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">}</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc0"><div class="amc2"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">else</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc1"><div class="amc2"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span class="amc_default">$aDirectories</span><span class="amc_keyword">=</span><span class="amc_default">$aDirectoryCache</span><span class="amc_keyword">;</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"><div class="amc2"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">if&nbsp;(</span><span class="amc_default">$bUpdateCache</span><span class="amc_keyword">)</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"><div class="amc2"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span class="amc_default"><a href="http://www.php.net/function.file_put_contents" title=" Read the PHP.net documentation for : file_put_contents() " target="_blank" class="codeblock_external_link">file_put_contents</a></span><span class="amc_keyword">(</span><span class="amc_default">$sDirectoryCache</span><span class="amc_keyword">,</span><span class="amc_string">'&lt;?php&nbsp;$aDirectoryCache='</span><span class="amc_keyword">.</span><span class="amc_default"><a href="http://www.php.net/function.var_export" title=" Read the PHP.net documentation for : var_export() " target="_blank" class="codeblock_external_link">var_export</a></span><span class="amc_keyword">(</span><span class="amc_default">$aDirectories</span><span class="amc_keyword">,</span><span class="amc_default">true</span><span class="amc_keyword">).</span><span class="amc_string">';'</span><span class="amc_keyword">.</span><span class="amc_default">PHP_EOL</span><span class="amc_keyword">.</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"><div class="amc2"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span class="amc_string">'$aPieces='</span><span class="amc_keyword">.</span><span class="amc_default"><a href="http://www.php.net/function.var_export" title=" Read the PHP.net documentation for : var_export() " target="_blank" class="codeblock_external_link">var_export</a></span><span class="amc_keyword">(</span><span class="amc_default">$aPieces</span><span class="amc_keyword">,</span><span class="amc_default">true</span><span class="amc_keyword">).</span><span class="amc_string">';&nbsp;?&gt;'</span><span class="amc_keyword">);</span></span></code></td></tr>
</table></div>


<p>There was about a 0.0002 second improvement in performance.  Although that sounds trivial, more rigorous testing, with more images, would likely justify the implementation.  There is a performance penalty if the cache is removed, but it&#8217;s very small, since the cache is built with <strong>var_export</strong>s.</p>

<p>The prevention added was a <strong>base <a href="http://www.w3schools.com/TAGS/tag_base.asp">http://www.w3schools.com/TAGS/tag_base.asp</a></strong> tag.  This tag ensures all files are drawn from the correct directories, while still allowing relative references in the code.</p>

<p class="amcode">XML:</p><div class="codeblock amc_xml amc_short"><table><tr class="amc_code_odd"><td class="amc_line"><div class="amc1"></div></td><td><code><span class="amc_default"><span class="amc_default"><span class="amc_keyword">&lt;base</span><span class="amc_default"> <span class="amc_attribute">href</span>=<span class="amc_string">"http://wirehopper.com/wickedgoodgallery/"</span> /&gt;</span></span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"></div></td><td><code><span class="amc_default"><span class="amc_default"><span class="amc_keyword">&lt;link</span><span class="amc_default"> <span class="amc_attribute">rel</span>=<span class="amc_string">"stylesheet"</span> <span class="amc_attribute">type</span>=<span class="amc_string">"text/css"</span> <span class="amc_attribute">href</span>=<span class="amc_string">"css/style.css"</span> /&gt;</span></span></span></code></td></tr>
</table></div>


<p>In this case, the base URL is <a href="http://wirehopper.com/wickedgoodgallery/">http://wirehopper.com/wickedgoodgallery/</a>, and the style tag will draw from <a href="http://wirehopper.com/wickedgoodgallery/css/style.css">http://wirehopper.com/wickedgoodgallery/css/style.css</a>, regardless of any slashes submitted in the URI, the page will display properly, and future references, derived by page navigation (clicking on images and links) will be valid.</p><div class="item_footer"><p><small><a href="http://web-notes.wirehopper.com/2010/07/25/an-ounce-of-performance-and-prevention">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://web-notes.wirehopper.com/2010/07/25/an-ounce-of-performance-and-prevention#comments</comments>
			<wfw:commentRss>http://web-notes.wirehopper.com/?tempskin=_rss2&#38;disp=comments&#38;p=571</wfw:commentRss>
		</item>
				<item>
			<title>Quick Average Request Time from Apache access_log</title>
			<link>http://web-notes.wirehopper.com/2010/07/14/quick-average-request-time-from-apache-access_log</link>
			<pubDate>Wed, 14 Jul 2010 19:33:19 +0000</pubDate>			<dc:creator>admin</dc:creator>
			<category domain="main">LAMP</category>			<guid isPermaLink="false">563@http://web-notes.wirehopper.com/</guid>
						<description>&lt;p&gt;&lt;a href=&quot;http://suso.suso.org/programs/num-utils/downloads/rpm/num-utils-0.5-1.noarch.rpm&quot;&gt;http://suso.suso.org/programs/num-utils/downloads/rpm/num-utils-0.5-1.noarch.rpm&lt;/a&gt;&lt;/p&gt;&lt;p&gt;First, you&amp;#8217;ll need to add the time required to deliver the request into the access_log.  In this case, a custom_log is created.  Note the bolded &lt;strong&gt;^%D &lt;/strong&gt;at the end, which will deliver the time required to serve the request in milliseconds ( &lt;a href=&quot;http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats&quot;&gt;http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats&lt;/a&gt; ).&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;CustomLog logs/custom_log &amp;#8220;%h %l %u %t \&quot;%r\&amp;#8221; %&gt;s %b \&quot;%{Referer}i\&amp;#8221; \&quot;%{User-agent}i\&amp;#8221; &lt;strong&gt;^%D&lt;/strong&gt;&amp;#8220;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Add this into your Apache .conf file, as appropriate.&lt;/p&gt;

&lt;p&gt;Next, restart Apache with &lt;strong&gt;apachectl restart&lt;/strong&gt;.  You can use &lt;strong&gt;apachectl configtest&lt;/strong&gt; to check your editing.&lt;/p&gt;

&lt;p&gt;The log file entry will look like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;127.0.0.1 - - [14/Jul/2010:15:31:19 -0400] &amp;#8220;GET /test/php/index.php HTTP/1.1&amp;Prime; 200 473 &amp;#8220;-&amp;#8221; &amp;#8220;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.4) Gecko/20100624 CentOS/3.6-8.el5.centos Firefox/3.6.4&amp;Prime; ^4097&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;The &lt;strong&gt;^4097&lt;/strong&gt; indicates the number of milliseconds to serve the request.&lt;/p&gt;

&lt;p&gt;You&amp;#8217;ll need the num_utils RPM, see the link above.&lt;/p&gt;

&lt;p&gt;Get it and install it, like so:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;wget &lt;a href=&quot;http://suso.suso.org/programs/num-utils/downloads/rpm/num-utils-0.5-1.noarch.rpm&quot;&gt;http://suso.suso.org/programs/num-utils/downloads/rpm/num-utils-0.5-1.noarch.rpm&lt;/a&gt;&lt;br /&gt;
rpm -i num-utils-0.5-1.noarch.rpm&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Use the following commands to extract the times from the log:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;grep index.php custom_log | cut -d &amp;#8216;^&amp;#8217; -f 2&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;And then, you can average them, like so:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;cd /etc/httpd/logs&lt;br /&gt;
grep index.php custom_log | cut -d &amp;#8216;^&amp;#8217; -f 2 | average&lt;br /&gt;
2611.33333333333&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;This post courtesy of Lyrix, Inc. ( &lt;a href=&quot;http://lyrix.com&quot;&gt;http://lyrix.com&lt;/a&gt; / &lt;a href=&quot;http://mobiso.com)&quot;&gt;http://mobiso.com)&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://web-notes.wirehopper.com/2010/07/14/quick-average-request-time-from-apache-access_log&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p><a href="http://suso.suso.org/programs/num-utils/downloads/rpm/num-utils-0.5-1.noarch.rpm">http://suso.suso.org/programs/num-utils/downloads/rpm/num-utils-0.5-1.noarch.rpm</a></p><p>First, you&#8217;ll need to add the time required to deliver the request into the access_log.  In this case, a custom_log is created.  Note the bolded <strong>^%D </strong>at the end, which will deliver the time required to serve the request in milliseconds ( <a href="http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats">http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats</a> ).</p>

<blockquote><p>CustomLog logs/custom_log &#8220;%h %l %u %t \"%r\&#8221; %>s %b \"%{Referer}i\&#8221; \"%{User-agent}i\&#8221; <strong>^%D</strong>&#8220;</p></blockquote>

<p>Add this into your Apache .conf file, as appropriate.</p>

<p>Next, restart Apache with <strong>apachectl restart</strong>.  You can use <strong>apachectl configtest</strong> to check your editing.</p>

<p>The log file entry will look like this:</p>

<blockquote>
<p>127.0.0.1 - - [14/Jul/2010:15:31:19 -0400] &#8220;GET /test/php/index.php HTTP/1.1&Prime; 200 473 &#8220;-&#8221; &#8220;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.4) Gecko/20100624 CentOS/3.6-8.el5.centos Firefox/3.6.4&Prime; ^4097</p></blockquote>

<p>The <strong>^4097</strong> indicates the number of milliseconds to serve the request.</p>

<p>You&#8217;ll need the num_utils RPM, see the link above.</p>

<p>Get it and install it, like so:</p>

<blockquote><p>wget <a href="http://suso.suso.org/programs/num-utils/downloads/rpm/num-utils-0.5-1.noarch.rpm">http://suso.suso.org/programs/num-utils/downloads/rpm/num-utils-0.5-1.noarch.rpm</a><br />
rpm -i num-utils-0.5-1.noarch.rpm</p></blockquote>

<p>Use the following commands to extract the times from the log:</p>

<blockquote><p>grep index.php custom_log | cut -d &#8216;^&#8217; -f 2</p></blockquote>

<p>And then, you can average them, like so:</p>

<blockquote>
<p>cd /etc/httpd/logs<br />
grep index.php custom_log | cut -d &#8216;^&#8217; -f 2 | average<br />
2611.33333333333</p></blockquote>

<p>This post courtesy of Lyrix, Inc. ( <a href="http://lyrix.com">http://lyrix.com</a> / <a href="http://mobiso.com)">http://mobiso.com)</a></p><div class="item_footer"><p><small><a href="http://web-notes.wirehopper.com/2010/07/14/quick-average-request-time-from-apache-access_log">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://web-notes.wirehopper.com/2010/07/14/quick-average-request-time-from-apache-access_log#comments</comments>
			<wfw:commentRss>http://web-notes.wirehopper.com/?tempskin=_rss2&#38;disp=comments&#38;p=563</wfw:commentRss>
		</item>
				<item>
			<title>Browser Based Audio Preview / Listen - IE6/7/+, FF2+ - HTTP/HTTPS</title>
			<link>http://web-notes.wirehopper.com/2010/06/21/browser-based-audio-preview-listen-ie6-7-ff2-http-https</link>
			<pubDate>Mon, 21 Jun 2010 20:19:30 +0000</pubDate>			<dc:creator>admin</dc:creator>
			<category domain="main">HTML / CSS</category>			<guid isPermaLink="false">557@http://web-notes.wirehopper.com/</guid>
						<description>&lt;p&gt;The following code segment is an extract from a Smarty template which allows you to embed Windows Media Player in a web page and use javascript to initiate playback.  AUDIOFILE.WAV is a marker name, you will need to use a valid URL.&lt;/p&gt;

&lt;p&gt;The code uses two different methods for Internet Explorer (IE) and Firefox (FF).  &lt;/p&gt;

&lt;p&gt;For IE, it uses an object tag and the object model to initiate playback with player.controls.play and stop.  Note the assignment of the source URL and data, this allows you to change which audio (or video) is being played.&lt;/p&gt;

&lt;p&gt;The FF approach uses a pop up, opened with window.open.  This loads a very small page which includes the player tag.  The pop up is named, so later requests will reload the same window.&lt;/p&gt;

&lt;p&gt;The template uses $bFF as a flag to indicate whether to deliver the page content for IE or FF.  $bFF is true if the user agent is Firefox, false otherwise.  The template logic can be replaced with PHP.&lt;/p&gt;

&lt;p class=&quot;amcode&quot;&gt;Code:&lt;/p&gt;&lt;div class=&quot;codeblock amc_code amc_long&quot;&gt;&lt;table&gt;&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;{if !$bFF}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;lt;object id=&quot;wmp_p&quot; name=&quot;wmp_p&quot; style=&quot;display:none&quot; classid=&quot;clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6&quot; width=&quot;0&quot; height=&quot;0&quot;&amp;gt;&amp;lt;/object&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;/* &amp;lt;![CDATA[ */&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;var sAudioFile='AUDIOFILE.WAV';&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;{literal}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;var player=document.getElementById('wmp_p');&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc7&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;function StartMeUp()&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc8&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc9&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (sAudioFile!='')&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc0&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;player.URL=sAudioFile;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;player.data=sAudioFile;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;player.controls.play();&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;function ShutMeDown()&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc7&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc8&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;player.controls.stop();&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc9&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc0&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;{/literal}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;/* ]]&amp;gt; */&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;{else}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;/* &amp;lt;![CDATA[ */&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;var sAudioFile='AUDIOFILE.WAV';&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc7&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;{literal}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc8&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;function StartMeUp()&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc9&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc0&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (sAudioFile != '')&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;window.open('player.php?'+sAudioFile,&quot;player&quot;,&quot;toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=275, height=95&quot;);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;function ShutMeDown()&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;{&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (sAudioFile != '')&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;window.open('player.php?',&quot;player&quot;,&quot;toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=275, height=95&quot;);&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc7&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc8&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;{/literal}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc9&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;/* ]]&amp;gt; */&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc0&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;{/if}&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_default&quot;&gt;&amp;lt;a href=&quot;javascript:StartMeUp();&quot; title=&quot;Listen&quot; id=&quot;Preview&quot; name=&quot;Preview&quot;&amp;gt;&amp;lt;img src=&quot;images/cp/16x16/actions/player_play.png&quot; alt=&quot;Listen&quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;player.php&lt;/strong&gt;&lt;/p&gt;

&lt;p class=&quot;amcode&quot;&gt;PHP:&lt;/p&gt;&lt;div class=&quot;codeblock amc_php amc_short&quot;&gt;&lt;table&gt;&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;DOCTYPE&amp;nbsp;HTML&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;PUBLIC&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;-//W3C//DTD&amp;nbsp;HTML&amp;nbsp;4.01//EN&quot;&amp;nbsp;&quot;http://www.w3.org/TR/html4/strict.dtd&quot;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;html&amp;nbsp;lang&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;en-US&quot;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;meta&amp;nbsp;http&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;equiv&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;Content-Type&quot;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;text/html;&amp;nbsp;charset=utf-8&quot;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;Audio&amp;nbsp;Preview&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc7&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc8&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;div&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc9&quot;&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;img&amp;nbsp;src&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;images/cp/64x64/apps/arts.png&quot;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc0&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span class=&quot;amc_comment&quot;&gt;/*&amp;nbsp;Some&amp;nbsp;code&amp;nbsp;omitted&amp;nbsp;for&amp;nbsp;brevity&amp;nbsp;*/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_comment&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;!--&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;Some&amp;nbsp;code&amp;nbsp;omitted&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;for&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;brevity&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;--&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;object&amp;nbsp;id&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;wmp_p&quot;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;&amp;lt;?php&amp;nbsp;echo&amp;nbsp;$_SERVER['QUERY_STRING'];?&amp;gt;&quot;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;application/x-ms-wmp&quot;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;175&quot;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;75&quot;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc3&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;param&amp;nbsp;name&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;autostart&quot;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;true&quot;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc4&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;param&amp;nbsp;name&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;volume&quot;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;10&quot;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc5&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;param&amp;nbsp;name&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;uiMode&quot;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;amc_string&quot;&gt;&quot;mini&quot;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc6&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;Error&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;the&amp;nbsp;plugin&amp;nbsp;has&amp;nbsp;not&amp;nbsp;loaded&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc7&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;object&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc8&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;div&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_odd&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc9&quot;&gt;&lt;div class=&quot;amc1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class=&quot;amc_code_even&quot;&gt;&lt;td class=&quot;amc_line&quot;&gt;&lt;div class=&quot;amc0&quot;&gt;&lt;div class=&quot;amc2&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&lt;span class=&quot;amc_html&quot;&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;amc_default&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;amc_keyword&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;p&gt;Difficulties were encountered playing HTTPS audio with a self-signed certificate under FF.  After research, the simplest resolution was to route audio requests through HTTP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.w3schools.com/media/media_playerref.asp&quot;&gt;http://www.w3schools.com/media/media_playerref.asp&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://port25.technet.com/pages/&quot;&gt;http://port25.technet.com/pages/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://support.mozilla.com/en-US/kb/Using+the+Windows+Media+Player+plugin+with+Firefox&quot;&gt;http://support.mozilla.com/en-US/kb/Using+the+Windows+Media+Player+plugin+with+Firefox&lt;/a&gt;&lt;br /&gt;
For MP3s, you can use: &lt;a href=&quot;http://docs.dojocampus.org/dojox/av/FLAudio&quot;&gt;http://docs.dojocampus.org/dojox/av/FLAudio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;&amp;#8212;-&lt;/p&gt;

&lt;p&gt;This post courtesy of Lyrix, Inc. ( &lt;a href=&quot;http://lyrix.com&quot;&gt;http://lyrix.com&lt;/a&gt; ) - Mobiso ( &lt;a href=&quot;http://mobiso.com&quot;&gt;http://mobiso.com&lt;/a&gt; )&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://web-notes.wirehopper.com/2010/06/21/browser-based-audio-preview-listen-ie6-7-ff2-http-https&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>The following code segment is an extract from a Smarty template which allows you to embed Windows Media Player in a web page and use javascript to initiate playback.  AUDIOFILE.WAV is a marker name, you will need to use a valid URL.</p>

<p>The code uses two different methods for Internet Explorer (IE) and Firefox (FF).  </p>

<p>For IE, it uses an object tag and the object model to initiate playback with player.controls.play and stop.  Note the assignment of the source URL and data, this allows you to change which audio (or video) is being played.</p>

<p>The FF approach uses a pop up, opened with window.open.  This loads a very small page which includes the player tag.  The pop up is named, so later requests will reload the same window.</p>

<p>The template uses $bFF as a flag to indicate whether to deliver the page content for IE or FF.  $bFF is true if the user agent is Firefox, false otherwise.  The template logic can be replaced with PHP.</p>

<p class="amcode">Code:</p><div class="codeblock amc_code amc_long"><table><tr class="amc_code_odd"><td class="amc_line"><div class="amc1"></div></td><td><code><span class="amc_default">{if !$bFF}</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"></div></td><td><code><span class="amc_default">&lt;object id="wmp_p" name="wmp_p" style="display:none" classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" width="0" height="0"&gt;&lt;/object&gt;</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"></div></td><td><code><span class="amc_default">&lt;script type="text/javascript"&gt;/* &lt;![CDATA[ */</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"></div></td><td><code><span class="amc_default">var sAudioFile='AUDIOFILE.WAV';</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"></div></td><td><code><span class="amc_default">{literal}</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc6"></div></td><td><code><span class="amc_default">var player=document.getElementById('wmp_p');</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc7"></div></td><td><code><span class="amc_default">function StartMeUp()</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc8"></div></td><td><code><span class="amc_default">{</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc9"></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (sAudioFile!='')</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc0"><div class="amc1"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc1"><div class="amc1"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;player.URL=sAudioFile;</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"><div class="amc1"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;player.data=sAudioFile;</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"><div class="amc1"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;player.controls.play();</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"><div class="amc1"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"><div class="amc1"></div></div></td><td><code><span class="amc_default">}</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc6"><div class="amc1"></div></div></td><td><code><span class="amc_default">function ShutMeDown()</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc7"><div class="amc1"></div></div></td><td><code><span class="amc_default">{</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc8"><div class="amc1"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;player.controls.stop();</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc9"><div class="amc1"></div></div></td><td><code><span class="amc_default">}</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc0"><div class="amc2"></div></div></td><td><code><span class="amc_default">{/literal}</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc1"><div class="amc2"></div></div></td><td><code><span class="amc_default">/* ]]&gt; */</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"><div class="amc2"></div></div></td><td><code><span class="amc_default">&lt;/script&gt;</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"><div class="amc2"></div></div></td><td><code><span class="amc_default">{else}</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"><div class="amc2"></div></div></td><td><code><span class="amc_default">&lt;script type="text/javascript"&gt;</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"><div class="amc2"></div></div></td><td><code><span class="amc_default">/* &lt;![CDATA[ */</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc6"><div class="amc2"></div></div></td><td><code><span class="amc_default">var sAudioFile='AUDIOFILE.WAV';</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc7"><div class="amc2"></div></div></td><td><code><span class="amc_default">{literal}</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc8"><div class="amc2"></div></div></td><td><code><span class="amc_default">function StartMeUp()</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc9"><div class="amc2"></div></div></td><td><code><span class="amc_default">{</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc0"><div class="amc3"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (sAudioFile != '')</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc1"><div class="amc3"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;window.open('player.php?'+sAudioFile,"player","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=275, height=95");</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"><div class="amc3"></div></div></td><td><code><span class="amc_default">}</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"><div class="amc3"></div></div></td><td><code><span class="amc_default">function ShutMeDown()</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"><div class="amc3"></div></div></td><td><code><span class="amc_default">{</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"><div class="amc3"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (sAudioFile != '')</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc6"><div class="amc3"></div></div></td><td><code><span class="amc_default">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;window.open('player.php?',"player","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=275, height=95");</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc7"><div class="amc3"></div></div></td><td><code><span class="amc_default">}</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc8"><div class="amc3"></div></div></td><td><code><span class="amc_default">{/literal}</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc9"><div class="amc3"></div></div></td><td><code><span class="amc_default">/* ]]&gt; */</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc0"><div class="amc4"></div></div></td><td><code><span class="amc_default">&lt;/script&gt;</span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc1"><div class="amc4"></div></div></td><td><code><span class="amc_default">{/if}</span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"><div class="amc4"></div></div></td><td><code><span class="amc_default">&lt;a href="javascript:StartMeUp();" title="Listen" id="Preview" name="Preview"&gt;&lt;img src="images/cp/16x16/actions/player_play.png" alt="Listen" /&gt;&lt;/a&gt;</span></code></td></tr>
</table></div>




<p><strong>player.php</strong></p>

<p class="amcode">PHP:</p><div class="codeblock amc_php amc_short"><table><tr class="amc_code_odd"><td class="amc_line"><div class="amc1"></div></td><td><code><span class="amc_html"><span class="amc_keyword">&lt;!</span><span class="amc_default">DOCTYPE&nbsp;HTML&nbsp;</span><span class="amc_keyword">PUBLIC&nbsp;</span><span class="amc_string">"-//W3C//DTD&nbsp;HTML&nbsp;4.01//EN"&nbsp;"http://www.w3.org/TR/html4/strict.dtd"</span><span class="amc_keyword">&gt;</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"></div></td><td><code><span class="amc_html"><span class="amc_keyword">&lt;</span><span class="amc_default">html&nbsp;lang</span><span class="amc_keyword">=</span><span class="amc_string">"en-US"</span><span class="amc_keyword">&gt;</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"></div></td><td><code><span class="amc_html"><span class="amc_keyword">&lt;</span><span class="amc_default">head</span><span class="amc_keyword">&gt;</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"></div></td><td><code><span class="amc_html"><span class="amc_keyword">&lt;</span><span class="amc_default">meta&nbsp;http</span><span class="amc_keyword">-</span><span class="amc_default">equiv</span><span class="amc_keyword">=</span><span class="amc_string">"Content-Type"&nbsp;</span><span class="amc_default">content</span><span class="amc_keyword">=</span><span class="amc_string">"text/html;&nbsp;charset=utf-8"</span><span class="amc_keyword">&gt;</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"></div></td><td><code><span class="amc_html"><span class="amc_keyword">&lt;</span><span class="amc_default">title</span><span class="amc_keyword">&gt;</span><span class="amc_default">Audio&nbsp;Preview</span><span class="amc_keyword">&lt;/</span><span class="amc_default">title</span><span class="amc_keyword">&gt;</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc6"></div></td><td><code><span class="amc_html"><span class="amc_keyword">&lt;/</span><span class="amc_default">head</span><span class="amc_keyword">&gt;</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc7"></div></td><td><code><span class="amc_html"><span class="amc_keyword">&lt;</span><span class="amc_default">body</span><span class="amc_keyword">&gt;</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc8"></div></td><td><code><span class="amc_html"><span class="amc_keyword">&lt;</span><span class="amc_default">div</span><span class="amc_keyword">&gt;</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc9"></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&lt;</span><span class="amc_default">img&nbsp;src</span><span class="amc_keyword">=</span><span class="amc_string">"images/cp/64x64/apps/arts.png"&nbsp;</span><span class="amc_keyword">/&gt;</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc0"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span class="amc_comment">/*&nbsp;Some&nbsp;code&nbsp;omitted&nbsp;for&nbsp;brevity&nbsp;*/</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc1"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_comment">&#160;&#160;&#160;&#160;</span><span class="amc_keyword">&lt;!--&nbsp;</span><span class="amc_default">Some&nbsp;code&nbsp;omitted&nbsp;</span><span class="amc_keyword">for&nbsp;</span><span class="amc_default">brevity&nbsp;</span><span class="amc_keyword">--&gt;</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc2"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&lt;</span><span class="amc_default">object&nbsp;id</span><span class="amc_keyword">=</span><span class="amc_string">"wmp_p"&nbsp;</span><span class="amc_default">data</span><span class="amc_keyword">=</span><span class="amc_string">"&lt;?php&nbsp;echo&nbsp;$_SERVER['QUERY_STRING'];?&gt;"&nbsp;</span><span class="amc_default">type</span><span class="amc_keyword">=</span><span class="amc_string">"application/x-ms-wmp"&nbsp;</span><span class="amc_default">width</span><span class="amc_keyword">=</span><span class="amc_string">"175"&nbsp;</span><span class="amc_default">height</span><span class="amc_keyword">=</span><span class="amc_string">"75"&nbsp;</span><span class="amc_keyword">&gt;</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc3"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&lt;</span><span class="amc_default">param&nbsp;name</span><span class="amc_keyword">=</span><span class="amc_string">"autostart"&nbsp;</span><span class="amc_default">value</span><span class="amc_keyword">=</span><span class="amc_string">"true"&nbsp;</span><span class="amc_keyword">/&gt;</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc4"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&lt;</span><span class="amc_default">param&nbsp;name</span><span class="amc_keyword">=</span><span class="amc_string">"volume"&nbsp;</span><span class="amc_default">value</span><span class="amc_keyword">=</span><span class="amc_string">"10"&nbsp;</span><span class="amc_keyword">/&gt;</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc5"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&lt;</span><span class="amc_default">param&nbsp;name</span><span class="amc_keyword">=</span><span class="amc_string">"uiMode"&nbsp;</span><span class="amc_default">value</span><span class="amc_keyword">=</span><span class="amc_string">"mini"&nbsp;</span><span class="amc_keyword">/&gt;</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc6"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&#160;&#160;&lt;</span><span class="amc_default">p</span><span class="amc_keyword">&gt;</span><span class="amc_default">Error&nbsp;</span><span class="amc_keyword">-&nbsp;</span><span class="amc_default">the&nbsp;plugin&nbsp;has&nbsp;not&nbsp;loaded</span><span class="amc_keyword">&lt;/</span><span class="amc_default">p</span><span class="amc_keyword">&gt;</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc7"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&#160;&#160;&#160;&#160;&lt;/</span><span class="amc_default">object</span><span class="amc_keyword">&gt;</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc8"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&lt;/</span><span class="amc_default">div</span><span class="amc_keyword">&gt;</span></span></code></td></tr>
<tr class="amc_code_odd"><td class="amc_line"><div class="amc9"><div class="amc1"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&lt;/</span><span class="amc_default">body</span><span class="amc_keyword">&gt;</span></span></code></td></tr>
<tr class="amc_code_even"><td class="amc_line"><div class="amc0"><div class="amc2"></div></div></td><td><code><span class="amc_html"><span class="amc_keyword">&lt;/</span><span class="amc_default">html</span><span class="amc_keyword">&gt;</span></span></code></td></tr>
</table></div>



<p>Difficulties were encountered playing HTTPS audio with a self-signed certificate under FF.  After research, the simplest resolution was to route audio requests through HTTP.</p>

<p><strong>Resources:</strong></p>

<p><a href="http://www.w3schools.com/media/media_playerref.asp">http://www.w3schools.com/media/media_playerref.asp</a><br />
<a href="http://port25.technet.com/pages/">http://port25.technet.com/pages/</a><br />
<a href="http://support.mozilla.com/en-US/kb/Using+the+Windows+Media+Player+plugin+with+Firefox">http://support.mozilla.com/en-US/kb/Using+the+Windows+Media+Player+plugin+with+Firefox</a><br />
For MP3s, you can use: <a href="http://docs.dojocampus.org/dojox/av/FLAudio">http://docs.dojocampus.org/dojox/av/FLAudio</a></p>

<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>

<p>This post courtesy of Lyrix, Inc. ( <a href="http://lyrix.com">http://lyrix.com</a> ) - Mobiso ( <a href="http://mobiso.com">http://mobiso.com</a> )</p><div class="item_footer"><p><small><a href="http://web-notes.wirehopper.com/2010/06/21/browser-based-audio-preview-listen-ie6-7-ff2-http-https">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://web-notes.wirehopper.com/2010/06/21/browser-based-audio-preview-listen-ie6-7-ff2-http-https#comments</comments>
			<wfw:commentRss>http://web-notes.wirehopper.com/?tempskin=_rss2&#38;disp=comments&#38;p=557</wfw:commentRss>
		</item>
				<item>
			<title>ErrorDocument * index.php</title>
			<link>http://web-notes.wirehopper.com/2010/06/19/errordocument-index-php</link>
			<pubDate>Sun, 20 Jun 2010 02:42:07 +0000</pubDate>			<dc:creator>admin</dc:creator>
			<category domain="main">LAMP</category>
<category domain="alt">Web Sites</category>			<guid isPermaLink="false">556@http://web-notes.wirehopper.com/</guid>
						<description>&lt;p&gt;&lt;a href=&quot;http://httpd.apache.org/docs/2.2/mod/core.html#errordocument&quot;&gt;http://httpd.apache.org/docs/2.2/mod/core.html#errordocument&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Using a site&amp;#8217;s home page as an error document is a good way to prevent people and &amp;#8216;bots from learning more about the site architecture.  Routing all error requests to the home page, or some other page, will reduce information leaks, such as &amp;#8216;file not found&amp;#8217;, &amp;#8216;access denied&amp;#8217;, and script failures which could display error information.&lt;/p&gt;

&lt;p&gt;It is important to monitor the server error log to see what errors are occurring.  Be sure there is a &lt;strong&gt;robots.txt&lt;/strong&gt; file, even if it is empty. Check the log and stats to see what files people are requesting.&lt;/p&gt;

&lt;p&gt;Be careful not to confuse legitimate users - if you remove pages or update content frequently, you may want to use 301 redirects for those pages to alert site visitors and search engines of the change.&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://web-notes.wirehopper.com/2010/06/19/errordocument-index-php&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p><a href="http://httpd.apache.org/docs/2.2/mod/core.html#errordocument">http://httpd.apache.org/docs/2.2/mod/core.html#errordocument</a></p><p>Using a site&#8217;s home page as an error document is a good way to prevent people and &#8216;bots from learning more about the site architecture.  Routing all error requests to the home page, or some other page, will reduce information leaks, such as &#8216;file not found&#8217;, &#8216;access denied&#8217;, and script failures which could display error information.</p>

<p>It is important to monitor the server error log to see what errors are occurring.  Be sure there is a <strong>robots.txt</strong> file, even if it is empty. Check the log and stats to see what files people are requesting.</p>

<p>Be careful not to confuse legitimate users - if you remove pages or update content frequently, you may want to use 301 redirects for those pages to alert site visitors and search engines of the change.</p><div class="item_footer"><p><small><a href="http://web-notes.wirehopper.com/2010/06/19/errordocument-index-php">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://web-notes.wirehopper.com/2010/06/19/errordocument-index-php#comments</comments>
			<wfw:commentRss>http://web-notes.wirehopper.com/?tempskin=_rss2&#38;disp=comments&#38;p=556</wfw:commentRss>
		</item>
				<item>
			<title>Wicked Good Gallery - Lightweight LAMP, Easy to Administer</title>
			<link>http://web-notes.wirehopper.com/2010/06/13/wicked-good-gallery-lightweight-lamp-easy-to-administer</link>
			<pubDate>Sun, 13 Jun 2010 18:19:50 +0000</pubDate>			<dc:creator>admin</dc:creator>
			<category domain="alt">PHP</category>
<category domain="alt">javascript</category>
<category domain="main">LAMP</category>			<guid isPermaLink="false">552@http://web-notes.wirehopper.com/</guid>
						<description>&lt;p&gt;&lt;a href=&quot;http://wirehopper.com/wickedgoodgallery/&quot;&gt;http://wirehopper.com/wickedgoodgallery/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The Wicked Good Gallery grew from an idea mentioned at &lt;a href=&quot;http://w3schools.com/forum&quot;&gt;http://w3schools.com/forum&lt;/a&gt; and discussions with the people at &lt;a href=&quot;http://lilyclaireart.com&quot;&gt;http://lilyclaireart.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The challenge was to build a gallery application that would allow site visitors to view and purchase artwork and be very easy to administer.&lt;/p&gt;

&lt;p&gt;The gallery offers two viewing modes, navigation through the thumbnails at the top of the page, and a slide show.  The thumbnails are limited by the width of the page, so not all thumbnails may be displayed.  Arrows are used to indicate additional images earlier or later in the list.  Clicking on a thumbnail displays a larger image, along with the associated HTML.  The slide show hides the HTML and centers the image, then loops through the images to display all the images of the gallery.  It&amp;#8217;s as if the site visitor is walking through the gallery, looking at artwork.&lt;/p&gt;

&lt;p&gt;Administration is through SFTP/FTP/SCP.  The person running the site creates a directory, named for the image, and places the original image .jpg in it, as well as free form HTML.  When the site loads the next time, it will find the new directory, check for a thumbnail and detail image, and create them if necessary.  When site visitors click on the thumbnail, the HTML will be displayed with the image.&lt;/p&gt;

&lt;p&gt;With respect to SEO, each image is represented with a dedicated URL.  The artwork&amp;#8217;s name is used as the title, and the more text in the HTML for that image, the better.&lt;/p&gt;

&lt;p&gt;All requests into the application are routed through a single file.  If the requests map to an image, the appropriate artwork is displayed, otherwise, the home page, or contact page is shown.&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://web-notes.wirehopper.com/2010/06/13/wicked-good-gallery-lightweight-lamp-easy-to-administer&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p><a href="http://wirehopper.com/wickedgoodgallery/">http://wirehopper.com/wickedgoodgallery/</a></p><p>The Wicked Good Gallery grew from an idea mentioned at <a href="http://w3schools.com/forum">http://w3schools.com/forum</a> and discussions with the people at <a href="http://lilyclaireart.com">http://lilyclaireart.com</a>.</p>

<p>The challenge was to build a gallery application that would allow site visitors to view and purchase artwork and be very easy to administer.</p>

<p>The gallery offers two viewing modes, navigation through the thumbnails at the top of the page, and a slide show.  The thumbnails are limited by the width of the page, so not all thumbnails may be displayed.  Arrows are used to indicate additional images earlier or later in the list.  Clicking on a thumbnail displays a larger image, along with the associated HTML.  The slide show hides the HTML and centers the image, then loops through the images to display all the images of the gallery.  It&#8217;s as if the site visitor is walking through the gallery, looking at artwork.</p>

<p>Administration is through SFTP/FTP/SCP.  The person running the site creates a directory, named for the image, and places the original image .jpg in it, as well as free form HTML.  When the site loads the next time, it will find the new directory, check for a thumbnail and detail image, and create them if necessary.  When site visitors click on the thumbnail, the HTML will be displayed with the image.</p>

<p>With respect to SEO, each image is represented with a dedicated URL.  The artwork&#8217;s name is used as the title, and the more text in the HTML for that image, the better.</p>

<p>All requests into the application are routed through a single file.  If the requests map to an image, the appropriate artwork is displayed, otherwise, the home page, or contact page is shown.</p><div class="item_footer"><p><small><a href="http://web-notes.wirehopper.com/2010/06/13/wicked-good-gallery-lightweight-lamp-easy-to-administer">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://web-notes.wirehopper.com/2010/06/13/wicked-good-gallery-lightweight-lamp-easy-to-administer#comments</comments>
			<wfw:commentRss>http://web-notes.wirehopper.com/?tempskin=_rss2&#38;disp=comments&#38;p=552</wfw:commentRss>
		</item>
			</channel>
</rss>
