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

<channel>
	<title>Fireside Media Development Blog</title>
	<atom:link href="http://www.firesidemedia.net/dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.firesidemedia.net/dev</link>
	<description></description>
	<lastBuildDate>Mon, 24 Aug 2009 23:23:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>IIS Fails with Multiple Referers, but not Referrers</title>
		<link>http://www.firesidemedia.net/dev/iis-fails-with-multiple-referers-but-not-referrers/</link>
		<comments>http://www.firesidemedia.net/dev/iis-fails-with-multiple-referers-but-not-referrers/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 23:09:46 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.firesidemedia.net/dev/?p=121</guid>
		<description><![CDATA[This is something I came across today when we launched a new section for a website. It&#8217;s something I&#8217;ve never encountered before, and I ended up spending most of my afternoon debugging what was causing our issue. Let me begin by saying the correct spelling of Referrer does have two r&#8217;s, however it is misspelled [...]]]></description>
			<content:encoded><![CDATA[<p>This is something I came across today when we launched a new section for a website. It&#8217;s something I&#8217;ve never encountered before, and I ended up spending most of my afternoon debugging what was causing our issue. Let me begin by saying the correct spelling of Referrer <strong>does</strong> have two r&#8217;s, however it is misspelled in the <a href="http://tools.ietf.org/html/rfc2616#section-14.36">HTTP Specification</a>. To the end user, this should mean nothing as most software that uses the HTTP Spec uses the incorrect spelling, as it&#8217;s what was defined in the spec.</p>
<p>When we launched the site, we checked it out in all our normal browsers and everything was good. Then we fired up IE 6 (unfortunately the client in question needs IE 6 support), navigated to the new secti-OH CRAP! The page itself would load, but <strong>none </strong>of the external assets (images, stylesheets and scripts) were loading. Refresh the page and bingo! it works fine! What the heck is going on?!</p>
<p>It turns out IE 6 was sending not one, but two referers to the web server. While it&#8217;s odd to have 2 referers, it shouldn&#8217;t cause 4xx Errors when sending a request. From this, we were able to find out a few things:</p>
<ol>
<li>IIS accepts both Referer <em>and</em> Refer<strong>r</strong>er as valid HTTP headers.</li>
<li>IIS <em>will not</em> accept more than one Referer.</li>
<li>IIS <em>will</em> accept more than one Referrer (note this is the dictionary spelling of referrer, not the spec spelling).</li>
<li>IE 6 will add 2 referrers if the link you clicked is located inside of a Flash element for all external assets: the URI to the Flash file and the URI of the page you are on.</li>
</ol>
<p><span id="more-121"></span><br />
I&#8217;m not quite sure why IE 6 behaves the way it does, but the fact is that it does and it was causing IIS to give us 400 Bad Request responses. Think I&#8217;m crazy (and maybe I am, please prove me wrong)? Try sending this request to www.microsoft.com:</p>
<pre>HEAD / HTTP/1.1
Host: www.microsoft.com
Referer: http://google.com
Referer: http://yahoo.com
Connection: Close</pre>
<p>In response you should get something similar to:</p>
<pre>HTTP/1.1 400 Bad Request
Content-Length: 339
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Mon, 24 Aug 2009 22:53:04 GMT
Connection: close</pre>
<p>Now send the <em>exact same request</em> to, say, www.apple.com:</p>
<pre>HEAD / HTTP/1.1
Host: www.apple.com
Referer: http://google.com
Referer: http://yahoo.com
Connection: Close</pre>
<p>and you get:</p>
<pre>HTTP/1.1 200 OK
Age: 255
X-Cache-TTL: 345
Accept-Ranges: bytes
Date: Mon, 24 Aug 2009 22:48:41 GMT
Content-Length: 9542
Content-Type: text/html; charset=utf-8
Expires: Mon, 24 Aug 2009 22:58:41 GMT
Cache-Control: max-age=600
Server: Apache/2.2.8 (Unix)
X-Cached-Time: Mon, 24 Aug 2009 22:50:56 GMT</pre>
<p>And now, to prove point #3, send the following request to www.microsoft.com (note the change in spellings):</p>
<pre>HEAD / HTTP/1.1
Host: www.microsoft.com
Referrer: http://google.com
Referrer: http://yahoo.com
Connection: Close</pre>
<p>and you get</p>
<pre>HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Length: 1020
Content-Type: text/html
Last-Modified: Mon, 16 Mar 2009 20:35:26 GMT
Accept-Ranges: bytes
ETag: "67991fbd76a6c91:0"
Server: Microsoft-IIS/7.0
P3P: CP="ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI"
X-Powered-By: ASP.NET
Date: Mon, 24 Aug 2009 23:09:03 GMT</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.firesidemedia.net/dev/iis-fails-with-multiple-referers-but-not-referrers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Show Only Children Pages on Parent Page</title>
		<link>http://www.firesidemedia.net/dev/show-only-children-pages-on-parent-page/</link>
		<comments>http://www.firesidemedia.net/dev/show-only-children-pages-on-parent-page/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 22:54:32 +0000</pubDate>
		<dc:creator>Jonathan Dingman</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.firesidemedia.net/dev/?p=113</guid>
		<description><![CDATA[There is still much to be desired within WordPress when it comes to dealing with parent and children pages.  The core code is there, and it&#8217;s usable, but there&#8217;s not a lot &#8220;out of the box&#8221; to play with.
We&#8217;ve developed a bit of code to help make your life a little easier.
Adding the code [...]]]></description>
			<content:encoded><![CDATA[<p>There is still much to be desired within WordPress when it comes to dealing with parent and children pages.  The core code is there, and it&#8217;s usable, but there&#8217;s not a lot &#8220;out of the box&#8221; to play with.</p>
<p><strong>We&#8217;ve developed a bit of code to help make your life a little easier.</strong></p>
<p>Adding the code below to your functions.php file will let you remove the other children pages while on the parent page.</p>
<pre class="brush: php;">add_filter('wp_list_pages_excludes', 'remove_others_children');
function remove_others_children($excludes = array()) {
  $all_pages = get_pages();
  $all_children = (array) get_page_children(true, $all_pages);
  foreach ( $all_children as $child )
    $excludes[] = $child-&gt;ID;

  if ( ! is_page() )
    return $excludes;

  global $post;

  $this_heirarchy = (array) $post-&gt;ancestors;
  $this_children = (array) get_page_children($post-&gt;ID, $all_pages);
  foreach ( $this_heirarchy as $ancestor )
    $this_children = array_merge($this_children, (array) get_page_children($ancestor, $all_pages));

  foreach ($this_children as $child)
    $this_heirarchy[] = $child-&gt;ID;

  return array_diff($excludes, $this_heirarchy);
}</pre>
<p>Here are some examples of what it would like without the code, then with the code.</p>
<p><img src="http://www.firesidemedia.net/dev/files/wordpress-remove-children-from-parents-pages.jpg" alt="WordPress:  Remove Children Pages from Parent Pages" title="WordPress:  Remove Children Pages from Parent Pages" width="491" height="474" class="size-full wp-image-115" /></p>
<p>A huge thanks goes out to <a href="http://sivel.net/">Matt Martz</a> for working with us on helping get this code ready.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firesidemedia.net/dev/show-only-children-pages-on-parent-page/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>WordPress Tutorial: Using SSH to Install/Upgrade</title>
		<link>http://www.firesidemedia.net/dev/wordpress-install-upgrade-ssh/</link>
		<comments>http://www.firesidemedia.net/dev/wordpress-install-upgrade-ssh/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 20:33:13 +0000</pubDate>
		<dc:creator>Jonathan Dingman</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.firesidemedia.net/dev/?p=81</guid>
		<description><![CDATA[This tutorial will guide you step by step on how to setup your server so you can install new plugins and upgrade existing plugins using an SSH2 layer in PHP and WordPress.
What is WordPress?
WordPress started in 2003 with a single bit of code to enhance the typography of everyday writing and with fewer users than [...]]]></description>
			<content:encoded><![CDATA[<p>This tutorial will guide you <strong>step by step</strong> on how to setup your server so you can <strong>install new plugins and upgrade existing plugins using an SSH2</strong> layer in PHP and WordPress.</p>
<p><strong>What is WordPress?</strong><br />
WordPress started in 2003 with a single bit of code to enhance the typography of everyday writing and with fewer users than you can count on your fingers and toes. Since then it has grown to be the largest self-hosted blogging tool in the world, used on hundreds of thousands of sites and seen by tens of millions of people every day.</p>
<p><strong>What is SSH[2]?</strong><br />
SSH (Secure Shell) is a protocol allowing a secure channel to be established between a web server and a client&#8217;s local machine. Many web hosting companies now offer SSH for greater security.<br />
<span id="more-81"></span></p>
<hr />
<p><strong>Tutorial Pre-requisites</strong></p>
<p>There are a few things that need to be in place before you can actually use this tutorial.</p>
<p>The first thing to do is make sure you have SSH2 installed via pecl.  If it&#8217;s not installed or you&#8217;re not sure, run this command: <strong>pecl install ssh2</strong></p>
<p><strong>note:</strong>  If your case is where the installed version of SSh2 is beta, run this command instead: <strong>pecl install channel://pecl.php.net/ssh2-0.11.0</strong></p>
<p>If you don&#8217;t feel comfortable running these commands yourself and you know of a server administrator that can help, or you&#8217;re paying for managed services, ask them to install this for you.</p>
<p>After SSH2 is installed, follow these instructions to ensure that the SSH2 extension is enabled in PHP.  Again, if you are using managed services, simply ask them to do this for you.</p>
<dl>
<dt>Ubuntu/Debian</dt>
<dd>cd /etc/php5/conf.d; echo &#8220;extension=ssh2.so&#8221; > ssh2.ini</dd>
<dd>/etc/init.d/apache2 restart</dd>
<dt>Red Hat, CentOS, Fedora</dt>
<dd>cd /etc/php.d; echo &#8220;extension=ssh2.so&#8221; > ssh2.ini</dd>
<dd>/etc/init.d/httpd restart</dd>
</dl>
<hr />
<h3>Step 1: Generating the server-side RSA keys</h3>
<pre class="brush: plain;">
ssh-keygen
</pre>
<p><em>Generating public/private rsa key pair.<br />
Enter file in which to save the key (/home/user1/.ssh/id_rsa):<br />
Created directory &#8216;/home/user1/.ssh&#8217;.<br />
Enter passphrase (empty for no passphrase): <strong>(just hit enter, no need for a password)</strong><br />
Enter same passphrase again: <strong>(same thing, hit enter again)</strong><br />
Your identification has been saved in /home/user1/.ssh/id_rsa.<br />
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.<br />
The key fingerprint is:<br />
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user1@server1.example.com</em></p>
<p><small>The xx:xx:xx etc. will be replaced with your actual fingerprint.</small></p>
<h3>Step 2: Creating an &#8216;authorized_keys&#8217; file</h3>
<pre class="brush: plain;">
cd .ssh
cp id_rsa.pub authorized_keys
</pre>
<h3>Step 3: Setting the proper file permissions</h3>
<pre class="brush: plain;">
cd ~/
chmod 755 .ssh
chmod 644 .ssh/*
</pre>
<h3>Step 4: Choosing the &#8216;SSH&#8217; option</h3>
<p><img src="http://www.firesidemedia.net/dev/files/wordpress-ssh-connection-information.jpg" alt="WordPress SSH Connection Information" title="WordPress SSH Connection Information" /></p>
<p>In this tutorial, I opted not to use a password, so you do not need to enter a password.</p>
<h3>Step 5: Click &#8220;Proceed&#8221;</h3>
<p>The last step is to click the proceed button and it will install a new plugin or upgrade an existing plugin via the integrated SSH layer in WordPress.  You should see results something like this&#8230;</p>
<p><img src="http://www.firesidemedia.net/dev/files/activated-plugin-via-ssh.jpg" alt="Activated WordPress Plugin via SSH" title="Activated WordPress Plugin via SSH" width="500" height="147" /></p>
<h3>== Optional ==</h3>
<p>If you want to automate the process a bit more, there are a few more things you can do to make it even easier.</p>
<p>If you open up your <strong>wp-config.php</strong> and add these lines, it will make the process smoother.</p>
<pre class="brush: plain;">
define('FTP_PUBKEY','/home/user1/.ssh/id_rsa.pub');
define('FTP_PRIKEY','/home/user1/.ssh/id_rsa');
define('FTP_USER','user1');
define('FTP_PASS','');
define('FTP_HOST','server1.example.com:22');
</pre>
<p>Now, when you click &#8220;upgrade&#8221; or &#8220;install&#8221; on a new plugin, it will bypass the first screen you saw above asking for the details.  It will automatically go into the process and start the install/upgrade.</p>
<h3>Thank you</h3>
<p>A huge thanks to <a href="http://dd32.id.au/">Dion Hulse</a> and <a href="http://sivel.net/">Matt Martz</a> for helping me with creating this tutorial.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firesidemedia.net/dev/wordpress-install-upgrade-ssh/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>OpenX Advanced Targeting Using WordPress</title>
		<link>http://www.firesidemedia.net/dev/openx-targeting-using-wordpress/</link>
		<comments>http://www.firesidemedia.net/dev/openx-targeting-using-wordpress/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 13:23:46 +0000</pubDate>
		<dc:creator>Jonathan Dingman</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[OpenX]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.firesidemedia.net/dev/?p=56</guid>
		<description><![CDATA[What is Openx
OpenX is, in my opinion, the most efficient and hands-free open source ad server  on the web today.  It&#8217;s flexible, easy to use, and best of all, free.
What is WordPress
WordPress is one of the leading platforms in blogging on the web today.  Whether you are self-hosted (using wordpress.org) or being [...]]]></description>
			<content:encoded><![CDATA[<p><strong>What is Openx</strong></p>
<p>OpenX is, in my opinion, the most efficient and hands-free open source ad server  on the web today.  It&#8217;s flexible, easy to use, and best of all, free.</p>
<p><strong>What is WordPress</strong></p>
<p>WordPress is one of the leading platforms in blogging on the web today.  Whether you are self-hosted (using wordpress.org) or being hosted on Automattic servers (using wordpress.com), WordPress is an amazing blogging platform which makes blogging easy and fun.</p>
<p>This OpenX and WordPress tutorial will outline how to more effectively use the targeting features of OpenX utilizing the built-in features of WordPress.  It will explain how to do this by using WordPress tags and OpenX source parameters, both built-in features to WordPress and OpenX, respectively.</p>
<p><strong>OpenX Solution Used</strong>:  Hosted OpenX (<a href="http://hosted.openx.org/">http://hosted.openx.org/</a>)<br />
<strong>WordPress Version</strong>: <a href="http://wordpress.org/download/release-archive/">2.6.2</a></p>
<p>For this tutorial, I will be using tags are the &#8220;source&#8221; for OpenX.</p>
<hr />
<h4>Step 1:  Setup tags so OpenX can view them as a &#8220;source.&#8221;</h4>
<pre class="php">&lt;?php
        while ( have_posts() ) : the_post();
                $fsm_oxtags = get_the_tags();
                if ($fsm_oxtags) { foreach ($fsm_oxtags as $tag) {
                        $taglist .= $tag-&gt;name . '|';
                }
                $taglist = rtrim($taglist, '|');
                $oxtags = rawurlencode($taglist);
                }
        endwhile;
?&gt;</pre>
<p>I have these in the top of my single.php file within WordPress.  This only creates the variable of $oxtags so it can be echo&#8217;d elsewhere.</p>
<p>Details of Step 1: The first bit of code will create the loop.  then it will go through each tag and set it as &#8220;tag |&#8221; because I am using pipes to separate each tag for OpenX.  Next, it will trim off the last pipe because it&#8217;s not needed, creating something like&#8230; &#8220;tag 1|tag 2|tag 3|tag 4&#8243; &#8230; and like I just mentioned, it will strip off the last pipe.  Lastly, it will put that string, &#8220;tag 1|tag 2|tag 3|tag 4&#8243; &#8230; into a raw encoded URL string which we will be able to echo later in the page.  <strong>Note:</strong> this is only being set at $oxtags so it can be used elsewhere, nothing is echo&#8217;d in this part of the script.<br />
<span id="more-56"></span></p>
<h4>Step 2: Setup your OpenX invocation code</h4>
<pre class="javascript">&lt;script type='text/javascript'&gt;&lt;!--//&lt;![CDATA[
   var m3_u = (location.protocol=='https:'?'https://d.openx.org/ajs.php':'http://d.openx.org/ajs.php');
   var m3_r = Math.floor(Math.random()*99999999999);
   if (!document.MAX_used) document.MAX_used = ',';
   document.write (&quot;&lt;scr&quot;+&quot;ipt type='text/javascript' src='&quot;+m3_u);
   document.write (&quot;?zoneid=1009&quot;);
   document.write ('&amp;cb=' + m3_r);
   if (document.MAX_used != ',') document.write (&quot;&amp;exclude=&quot; + document.MAX_used);
   document.write (document.charset ? '&amp;charset='+document.charset : (document.characterSet ? '&amp;charset='+document.characterSet : ''));
   document.write (&quot;&amp;loc=&quot; + escape(window.location));
   document.write (&quot;&amp;source=<strong>&lt;?php echo $oxtags; ?&gt;</strong>&quot;);
   if (document.referrer) document.write (&quot;&amp;referer=&quot; + escape(document.referrer));
   if (document.context) document.write (&quot;&#038;context=&quot; + escape(document.context));
   if (document.mmm_fo) document.write (&quot;&amp;mmm_fo=1&quot;);
   document.write (&quot;'&gt;&lt;\/scr&quot;+&quot;ipt&gt;&quot;);
//]]&gt;--&gt;&lt;/script&gt;</pre>
<p>Now that we have the $oxtags variable ready, we can echo it where we need it.  Simply add the next line, such as I have, <code class="inline">document.write (&quot;&amp;source=<strong>&lt;?php echo $oxtags; ?&gt;</strong>&quot;);</code>, then we&#8217;re almost ready to start using advanced targeting within OpenX using your WordPress tags.</p>
<h4>Step 3:  Rewind the content loop</h4>
<p><span class="big red">!!! IMPORTANT !!!</strong></p>
<p>This is critical!  You must do this if you want your posts&#8217; content to display properly.</p>
<pre class="php">&lt;?php rewind_posts(); if (have_posts()) : while (have_posts()) : the_post(); ?&gt;</pre>
<p>The reason for this is that you need to rewind the posts so the loop is displayed properly. (<a href="http://codex.wordpress.org/The_Loop#Loop_Examples_2">documentation</a>)</p>
<p>The line above is what my real loop looks like in my single.php file, ensuring that the content of the loop is displayed properly as it was originally.</p>
<p><strong>Note:</strong> You only need to rewind_posts(); if you have multiple loops or you put the Step 1 code before the first loop, which I did for this tutorial.</p>
<h4>Step 4:  Setup OpenX Targetting to Deliver to Specific Tags</h4>
<p>Now that we have sources setup within the JavaScript and PHP for WordPress, we need to get to work adding some banners using specific sources.  Go to one of your campaigns, then select a banner you&#8217;ve already added or add a new banner.  Go to the <strong>Delivery Options</strong> tab.  This is where you can select your targeting limitations.</p>
<p>First, add the delivery option to limit the banner display for a specific source.</p>
<p><img src="http://www.firesidemedia.net/dev/files/wordpress-openx-target-source.jpg" alt="OpenX: Setup Delivery Options to be Limited by a Source" title="OpenX: Setup Delivery Options to be Limited by a Source" /></p>
<p>Next, set it to &#8220;contains&#8221; so you can specify which tagged posts you want to display this banner.</p>
<p><img src="http://www.firesidemedia.net/dev/files/wordpress-openx-target-contains.jpg" alt="OpenX: Setup Delivery Options to Contain a Source" title="OpenX: Setup Delivery Options to Contain a Source" /></p>
<p>Lastly, specify the source you want to use fr banner delivery limitation.</p>
<p><img src="http://www.firesidemedia.net/dev/files/wordpress-openx-banner-delivery-options.jpg" alt="OpenX: Specify the Delivery Source for Banner Limitation" title="OpenX: Specify the Delivery Source for Banner Limitation" /></p>
<h4>Results</h4>
<p>Here is what your final output should look like:</p>
<pre class="javascript">&lt;script type='text/javascript'&gt;&lt;!--//&lt;![CDATA[
   var m3_u = (location.protocol=='https:'?'https://d.openx.org/ajs.php':'http://d.openx.org/ajs.php');
   var m3_r = Math.floor(Math.random()*99999999999);
   if (!document.MAX_used) document.MAX_used = ',';
   document.write (&quot;&lt;scr&quot;+&quot;ipt type='text/javascript' src='&quot;+m3_u);
   document.write (&quot;?zoneid=1009&quot;);
   document.write ('&amp;cb=' + m3_r);
   if (document.MAX_used != ',') document.write (&quot;&amp;exclude=&quot; + document.MAX_used);
   document.write (document.charset ? '&amp;charset='+document.charset : (document.characterSet ? '&amp;charset='+document.characterSet : ''));
   document.write (&quot;&amp;loc=&quot; + escape(window.location));
   document.write (&quot;&amp;source=<strong>tag%201%7Ctag%202</strong>&quot;);
   if (document.referrer) document.write (&quot;&amp;referer=&quot; + escape(document.referrer));
   if (document.context) document.write (&quot;&#038;context=&quot; + escape(document.context));
   if (document.mmm_fo) document.write (&quot;&amp;mmm_fo=1&quot;);
   document.write (&quot;'&gt;&lt;\/scr&quot;+&quot;ipt&gt;&quot;);
//]]&gt;--&gt;&lt;/script&gt;</pre>
<p>I bolded the part that was used with the Step 1 code.  Basically, it will output your tags for each WordPress post as a &#8220;source&#8221; so you can use them for targeting on your site.</p>
<p><em>Thanks goes out to <a href="http://outnow.ch/">Thomas</a> and <a href="http://www.stevesmith1983.co.uk/">Steve Smith</a> for helping me get this working</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.firesidemedia.net/dev/openx-targeting-using-wordpress/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>WordCamp NY 2008 Photos &amp; Videos</title>
		<link>http://www.firesidemedia.net/dev/wordcamp-ny-2008-photos-videos/</link>
		<comments>http://www.firesidemedia.net/dev/wordcamp-ny-2008-photos-videos/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 20:13:57 +0000</pubDate>
		<dc:creator>Jonathan Dingman</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[WordCamp NY]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.firesidemedia.net/dev/?p=35</guid>
		<description><![CDATA[First of all, a huge, HUGE, thank you to all of our speakers and sponsors for making this event possible.  It was a huge success and would not have been possible without everyone involved.
Photos

Matt Mullenweg Keynote
Automattic Inc. &#8212; automattic.com &#8211; ma.tt
Part 1

Part 2

Part 3

Part 4

Aaron Brazell
Lijit &#8212; lijit.com &#8211; technosailor.com
Part 1

Part 2

Shay David
Kaltura &#8212; [...]]]></description>
			<content:encoded><![CDATA[<p>First of all, a huge, HUGE, thank you to all of our speakers and sponsors for making this event possible.  It was a huge success and would not have been possible without everyone involved.</p>
<p>Photos</p>
<div class="flickr-photos"><a class="tt-flickr tt-flickr-Thumbnail" href="http://www.flickr.com/photos/jdingman/2936696119/" rel="album-72157607997534127" id="photo-2936696119" title="WordCampNY2008_091"><img src="http://farm4.static.flickr.com/3060/2936696119_5c42f5ab31_t.jpg" width="100" height="67" alt="WordCampNY2008_091" /></a> <a class="tt-flickr tt-flickr-Thumbnail" href="http://www.flickr.com/photos/jdingman/2936694165/" rel="album-72157607997534127" id="photo-2936694165" title="WordCampNY2008_090"><img src="http://farm4.static.flickr.com/3286/2936694165_d1dab82948_t.jpg" width="100" height="67" alt="WordCampNY2008_090" /></a> <a class="tt-flickr tt-flickr-Thumbnail" href="http://www.flickr.com/photos/jdingman/2936691833/" rel="album-72157607997534127" id="photo-2936691833" title="WordCampNY2008_089"><img src="http://farm4.static.flickr.com/3244/2936691833_1dd487a7fe_t.jpg" width="100" height="67" alt="WordCampNY2008_089" /></a> <a class="tt-flickr tt-flickr-Thumbnail" href="http://www.flickr.com/photos/jdingman/2936689689/" rel="album-72157607997534127" id="photo-2936689689" title="WordCampNY2008_088"><img src="http://farm4.static.flickr.com/3066/2936689689_e64871f6b7_t.jpg" width="100" height="67" alt="WordCampNY2008_088" /></a> <a class="tt-flickr tt-flickr-Thumbnail" href="http://www.flickr.com/photos/jdingman/2937540374/" rel="album-72157607997534127" id="photo-2937540374" title="WordCampNY2008_087"><img src="http://farm4.static.flickr.com/3155/2937540374_6b76791cbe_t.jpg" width="100" height="67" alt="WordCampNY2008_087" /></a> <a class="tt-flickr tt-flickr-Thumbnail" href="http://www.flickr.com/photos/jdingman/2936685583/" rel="album-72157607997534127" id="photo-2936685583" title="WordCampNY2008_086"><img src="http://farm4.static.flickr.com/3217/2936685583_3b8f70d7f5_t.jpg" width="100" height="67" alt="WordCampNY2008_086" /></a> <a class="tt-flickr tt-flickr-Thumbnail" href="http://www.flickr.com/photos/jdingman/2937536580/" rel="album-72157607997534127" id="photo-2937536580" title="WordCampNY2008_085"><img src="http://farm4.static.flickr.com/3204/2937536580_bd8d2e8e1b_t.jpg" width="100" height="67" alt="WordCampNY2008_085" /></a> <a class="tt-flickr tt-flickr-Thumbnail" href="http://www.flickr.com/photos/jdingman/2936681637/" rel="album-72157607997534127" id="photo-2936681637" title="WordCampNY2008_084"><img src="http://farm4.static.flickr.com/3215/2936681637_35a24db673_t.jpg" width="100" height="67" alt="WordCampNY2008_084" /></a> <a class="tt-flickr tt-flickr-Thumbnail" href="http://www.flickr.com/photos/jdingman/2937532180/" rel="album-72157607997534127" id="photo-2937532180" title="WordCampNY2008_083"><img src="http://farm4.static.flickr.com/3240/2937532180_5ebe443cda_t.jpg" width="100" height="67" alt="WordCampNY2008_083" /></a> <a class="tt-flickr tt-flickr-Thumbnail" href="http://www.flickr.com/photos/jdingman/2936676685/" rel="album-72157607997534127" id="photo-2936676685" title="WordCampNY2008_082"><img src="http://farm4.static.flickr.com/3181/2936676685_c462b0d5de_t.jpg" width="100" height="67" alt="WordCampNY2008_082" /></a> <a class="tt-flickr tt-flickr-Thumbnail" href="http://www.flickr.com/photos/jdingman/2936674561/" rel="album-72157607997534127" id="photo-2936674561" title="WordCampNY2008_081"><img src="http://farm4.static.flickr.com/3239/2936674561_ce50e1731f_t.jpg" width="100" height="67" alt="WordCampNY2008_081" /></a> <a class="tt-flickr tt-flickr-Thumbnail" href="http://www.flickr.com/photos/jdingman/2937525188/" rel="album-72157607997534127" id="photo-2937525188" title="WordCampNY2008_080"><img src="http://farm4.static.flickr.com/3150/2937525188_1a026ec87b_t.jpg" width="100" height="67" alt="WordCampNY2008_080" /></a> </div>
<p><span id="more-35"></span><br />
<strong>Matt Mullenweg</strong> <em>Keynote</em><br />
<em>Automattic Inc.</em> &mdash; <a href="http://www.automattic.com">automattic.com</a> &#8211; <a href="http://www.ma.tt">ma.tt</a></p>
<p>Part 1</p>
<p><embed src="http://blip.tv/play/gdlJ0scTAA" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p>Part 2</p>
<p><embed src="http://blip.tv/play/gdlJ0sd6AA" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p>Part 3</p>
<p><embed src="http://blip.tv/play/gdlJ0shCAA" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p>Part 4</p>
<p><embed src="http://blip.tv/play/gdlJ0shoAA" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p><strong>Aaron Brazell</strong><br />
<em>Lijit</em> &mdash; <a href="http://www.lijit.com">lijit.com</a> &#8211; <a href="http://www.technosailor.com">technosailor.com</a></p>
<p>Part 1</p>
<p><embed src="http://blip.tv/play/gdlJ0sp0AA" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p>Part 2</p>
<p><embed src="http://blip.tv/play/gdlJ0sskAA" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p><strong>Shay David</strong><br />
<em>Kaltura</em> &mdash; <a href="http://www.kaltura.com">kaltura.com</a></p>
<p><embed src="http://blip.tv/play/gdlJ0so1AA" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p><strong>Jeremy Clarke</strong><br />
<em>Global Voices</em> &mdash; <a href="http://www.globalvoicesonline.org">globalvoicesonline.org</a></p>
<p>Part 1</p>
<p><embed src="http://blip.tv/play/gdlJ0sx9AA" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p>Part 2</p>
<p><embed src="http://blip.tv/play/gdlJ0s08AA" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p>Part 3</p>
<p><embed src="http://blip.tv/play/gdlJ0skYAA" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p><strong>Jen Simmons</strong><br />
<em>Milkweed Media Design</em> &mdash; <a href="http://milkweedmediadesign.com/">milkweedmediadesign.com</a> &#8211; <a href="http://www.jensimmons.com">jensimmons.com</a></p>
<p>Part 1</p>
<p><embed src="http://blip.tv/play/gdlJ0st3AA" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p>Part 2</p>
<p><embed src="http://blip.tv/play/gdlJ0swxAA" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p><strong>Jeremy Zilar</strong><br />
<em>New York Times</em> &mdash; <a href="http://www.nytimes.com">nytimes.com</a> &#8211; <a href="http://www.silencematters.com">silencematters.com</a></p>
<p>Part 1</p>
<p><embed src="http://blip.tv/play/gdlJ0slJAA" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p>Part 2</p>
<p><embed src="http://blip.tv/play/gdlJ0soEAA" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p><strong>Sponsors</strong></p>
<p>Sun Microsystems &mdash; <a href="http://www.sun.com/">sun.com</a><br />
Atlantic Metro Communications &mdash; <a href="http://atlanticmetro.net/">atlanticmetro.net</a><br />
Margaret Roach Inc. &mdash; <a href="http://awaytogarden.com/">awaytogarden.com</a><br />
Kaltura &mdash; &#8211; <a href="http://kaltura.com/">kaltura.com</a></p>
<p><strong>Video Producer</strong><br />
<a href="http://www.nextinvestor.com/">Valerie Gurka</a></p>
<p><strong>Event Photographer</strong><br />
Leora Israel &#8211; leoraisrael -@- gmail.com</p>
<p>Note: I will try to post all the presentations (slides) when I get them all.  Thank you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firesidemedia.net/dev/wordcamp-ny-2008-photos-videos/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WordCamp NY was a Success!</title>
		<link>http://www.firesidemedia.net/dev/wordcamp-ny-was-a-success/</link>
		<comments>http://www.firesidemedia.net/dev/wordcamp-ny-was-a-success/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 16:34:04 +0000</pubDate>
		<dc:creator>Jonathan Dingman</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[WordCamp NY]]></category>

		<guid isPermaLink="false">http://www.firesidemedia.net/dev/?p=33</guid>
		<description><![CDATA[Thank you to everyone involved with WordCamp NY!  It was a great time and I feel it was very successful.
Here is a quick recap of the speakers.

Matt Mullenweg &#8211; The State of the Word
Aaron Brazell &#8211; Making it into the Big Leagues
Shay David &#8211; How to Use Kaltura
Jeremy Clarke &#8211; How to Run a [...]]]></description>
			<content:encoded><![CDATA[<p>Thank you to everyone involved with WordCamp NY!  It was a great time and I feel it was very successful.</p>
<p>Here is a quick recap of the speakers.</p>
<ul>
<li>Matt Mullenweg &#8211; The State of the Word</li>
<li>Aaron Brazell &#8211; Making it into the Big Leagues</li>
<li>Shay David &#8211; How to Use Kaltura</li>
<li>Jeremy Clarke &#8211; How to Run a Blog Network</li>
<li>Jen Simmons &#8211; Video on WordPress</li>
<li>Jeremy Zilar &#8211; How the New York Times uses WordPress</li>
</ul>
<p>A huge thanks to our videographer, Valerie Gurka.  She recorded each speaker and the videos will be ready in about a week.</p>
<p>Second, a huge thanks to Leora Israel for being the official photographer for the event.  A ton of great photos that will already be ready soon.  I&#8217;ll make another post when the photos are ready.</p>
<p>And of course, our sponsors.  Thank you so much for making this event possible.  <a href="http://www.sun.com/">Sun Microsystems</a>, <a href="http://www.atlanticmetro.net/">Atlantic Metro Communications</a>, <a href="http://awaytogarden.com/">Margaret Roach</a>, and <a href="http://kaltura.com/">Kaltura</a>.</p>
<p><strong>Flickr Details</strong></p>
<ul>
<li><a href="http://www.flickr.com/photos/tags/wordcamp">http://www.flickr.com/photos/tags/wordcamp</a></li>
<li><a href="http://www.flickr.com/photos/tags/wordcampny">http://www.flickr.com/photos/tags/wordcampny</a></li>
<li><a href="http://www.flickr.com/groups/wordcampny/">http://www.flickr.com/groups/wordcampny/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.firesidemedia.net/dev/wordcamp-ny-was-a-success/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordCamp NY this Weekend</title>
		<link>http://www.firesidemedia.net/dev/wordcamp-ny-this-weekend/</link>
		<comments>http://www.firesidemedia.net/dev/wordcamp-ny-this-weekend/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 21:48:19 +0000</pubDate>
		<dc:creator>Jonathan Dingman</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[WordCamp NY]]></category>

		<guid isPermaLink="false">http://www.firesidemedia.net/dev/?p=31</guid>
		<description><![CDATA[This weekend is WordCamp NY 2008.  I have been organizing this event for the past 3 or 4 months now and I&#8217;m really excited for it.
We have a great list of speakers lined up and it&#8217;s going to be an awesome event.
Matt Mullenweg will be keynoting the event.  I have never met Matt, [...]]]></description>
			<content:encoded><![CDATA[<p>This weekend is <a href="http://newyork.wordcamp.org/">WordCamp NY 2008</a>.  I have been organizing this event for the past 3 or 4 months now and I&#8217;m really excited for it.</p>
<p>We have a great list of speakers lined up and it&#8217;s going to be an awesome event.</p>
<p><a href="http://ma.tt/">Matt Mullenweg</a> will be keynoting the event.  I have never met Matt, so it will be a first to meet him and hear him speak about The State of WordPress.</p>
<p>Thanks to everyone involved with the event!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firesidemedia.net/dev/wordcamp-ny-this-weekend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Power of XSL</title>
		<link>http://www.firesidemedia.net/dev/the-power-of-xsl/</link>
		<comments>http://www.firesidemedia.net/dev/the-power-of-xsl/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 20:47:53 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://www.firesidemedia.net/dev/the-power-of-xsl/</guid>
		<description><![CDATA[When we did the last rewrite of Christian Lyrics I spent a good bit of time working on the template system. I loathe Smarty due to how bloated it is, but almost went with it because needed modular caching (guests all see the same static files, logged in users see their user info, etc&#8230;). We [...]]]></description>
			<content:encoded><![CDATA[<p>When we did the last rewrite of <a href="http://www.christian-lyrics.net/" rel="external" title="Christian Music Lyrics">Christian Lyrics</a> I spent a good bit of time working on the template system. I loathe <a href="http://smarty.php.net" title="Smarty Templating Engine" rel="external">Smarty</a> due to how bloated it is, but almost went with it because needed modular caching (guests all see the same static files, logged in users see their user info, etc&#8230;). We ended up using a <a href="http://phpsavant.com" title="PHP Savant" rel="external">Savant</a> style system (no stupid custom tags, no parsing, just PHP) that works pretty well, but has some short comings still. After we finished the rewrite, I spent some time exploring other options. Only one caught my eye: <a href="http://www.w3.org/TR/xsl" title="Extensible Stylesheet Language" rel="external">XSL</a>.</p>
<blockquote><p>The eXtensible Stylesheet Language (XSL) is a family of transformation languages which allows one to describe how files encoded in the XML standard are to be formatted or transformed. XSL is designed to be data driven and strongly encourages the Inversion of control design pattern. There are three languages in the family:</p>
<ol>
<li>XSL Transformations (XSLT): an XML language for transforming XML documents</li>
<li>XSL Formatting Objects (XSL-FO): an XML language for specifying the visual formatting of an XML document</li>
<li>the XML Path Language (XPath): a non-XML language used by XSLT, and also available for use in non-XSLT contexts, for addressing the parts of an XML document.</li>
</ol>
<p><cite>Source: <a href="http://en.wikipedia.org/wiki/Extensible_Stylesheet_Language" rel="external nofollow">Wikipedia</a></cite></p></blockquote>
<p>In a nutshell, XSL can be used to transform a plain XML document into a full-fledged HTML document. One thing I really like about XSL is that the processing can be done either server-side or client-side. Most modern browsers understand XSL and do all the dirty work for you, leaving your server to do other, more important, things. Not only that, but if you send the XML to the client for processing, then you have the base of your API already done.</p>
<p>But the best part is how modular you can make the caching. Here&#8217;s how I do it:</p>
<ol>
<li>If the data is cacheable it gets saved to disk in an XML file. Queries are only done to the SQL server for this data if the cache file doesn&#8217;t exist or has expired.</li>
<li>If it&#8217;s not cacheable, insert it into the cached XML document on the fly.</li>
</ol>
<p>Then the XSL document handles the rest. I can&#8217;t think of any simpler way to do it.</p>
<p>However, there are downsides (when aren&#8217;t there?):</p>
<ul>
<li>IE has notoriously bad support for XSL (of course).</li>
<li>PHP has <a href="http://www.php.net/xsl" title="PHP:XSL" rel="external">XSL support natively in PHP5</a>, but PHP4 requires a <a href="http://www.php.net/xslt">PECL library</a> (I can&#8217;t find the extension on PECL for some reason).</li>
<li>More syntax to remember</li>
<li>The only good documentation I&#8217;ve come across is the specification itself. <a href="http://www.w3schools.com/xsl/" title="W3 Schools XSLT Tutorial" rel="external">W3Schools</a>, which usually has a pretty decent overview, I found lacking.</li>
<li><span style="font-weight: bold; font-style: italic">Most</span> variable processing has to be done before you transform the XML. It is possible to use variables in the XSL itself, but it is very limited.</li>
<li>Javascript does not work on the XML document itself, just the generated source. This means if you use AJAX to grab eg. a list of languages, you have to either do the transformation server-side or in the Javascript itself. Thankfully, Google has an excellent <a href="http://code.google.com/p/ajaxslt/" rel="external" title="AJAXSLT">Javascript library to do XSL transformations</a>! Some browsers (Mozilla is one I believe) also have built-in XSLT support in Javascript.</li>
<li>Unless you do the transformation on the server-side <span style="font-weight: bold">search engine crawlers will not be able to index your site</span>. Of course you could set it up to only transform server-side if a crawler comes.</li>
</ul>
<p>Now I ask: why don&#8217;t more sites use XSL? I know I&#8217;ll be building most of my sites in the future with XSL, the benefits far outweigh the downsides in my opinion.</p>
<p><span style="font-weight: bold">Update:</span> I completely forgot to mention a <span style="font-style: italic">very important</span> downside. I bolded it in the list.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firesidemedia.net/dev/the-power-of-xsl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fireside Media LLC Software Development</title>
		<link>http://www.firesidemedia.net/dev/fireside-media-llc-software-development/</link>
		<comments>http://www.firesidemedia.net/dev/fireside-media-llc-software-development/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 18:07:30 +0000</pubDate>
		<dc:creator>Jonathan Dingman</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wordpress plugins]]></category>

		<guid isPermaLink="false">http://www.firesidemedia.net/dev/fireside-media-llc-software-development/</guid>
		<description><![CDATA[We have the start of what will be a long line of open source products by Fireside Media, LLC.  To start it, we are releasing an updated version of the Twitter Updater plugin.
The plugin was originally written by Victoria, but she gave us permission to release the updated version here.  The plugin was [...]]]></description>
			<content:encoded><![CDATA[<p>We have the start of what will be a long line of <a href="http://www.firesidemedia.net/dev/software/">open source</a> products by <a href="http://www.firesidemedia.net/">Fireside Media, LLC</a>.  To start it, we are releasing an updated version of the <a href="http://www.firesidemedia.net/dev/software/wordpress/twitter-updater/">Twitter Updater plugin</a>.</p>
<p>The plugin was originally written by Victoria, but she gave us permission to release the updated version here.  The plugin was modified by Jonathan to include tinyurl.com&#8217;s API as part of the Twitter updating.</p>
<p>We have some other great ideas for <a href="http://www.firesidemedia.net/dev/software/wordpress/">Wordpress plugins</a> already coming along and will be releasing them in stages.  Expect some new plugins to come out within the next few weeks.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.firesidemedia.net/dev/fireside-media-llc-software-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
