<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Les Harris</title> <link>http://lesharris.com</link> <description>Architect. Implement. ECM.</description> <lastBuildDate>Sat, 23 Apr 2011 05:35:47 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/lesharris/main" /><feedburner:info uri="lesharris/main" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>WordPress, W3 Total Cache, and MaxCDN</title><link>http://feedproxy.google.com/~r/lesharris/main/~3/bsBhgLrx7wQ/</link> <comments>http://lesharris.com/2011/04/07/wordpress-w3-total-cache-and-maxcdn/#comments</comments> <pubDate>Fri, 08 Apr 2011 06:35:46 +0000</pubDate> <dc:creator>Les</dc:creator> <category><![CDATA[Wordpress]]></category> <category><![CDATA[cdn]]></category> <category><![CDATA[maxcdn]]></category> <category><![CDATA[w3 total cache]]></category> <category><![CDATA[wordpress]]></category><guid isPermaLink="false">http://lesharris.com/?p=177</guid> <description><![CDATA[A match made in heaven.  For a long while using a CDN (Content Delivery Network) was something only the big boys did.  The CDN market was pioneered by Akamai who remain one of the major players, and companies like Akamai tend to want to deal with other big companies. For a long time this type [...]]]></description> <content:encoded><![CDATA[<div id="attachment_217" class="wp-caption alignleft" style="width: 228px"><a href="http://lesharris.com/wp-content/uploads/2011/04/maxcdn.png"><img class="size-full wp-image-217 " title="maxcdn" src="http://lesharris.com/wp-content/uploads/2011/04/maxcdn.png" alt="MaxCDN and W3 Total Cache" width="218" height="164" /></a><p class="wp-caption-text">Two great tastes that taste great together.</p></div><p>A match made in heaven.  For a long while using a CDN (Content Delivery Network) was something only the big boys did.  The CDN market was pioneered by Akamai who remain one of the major players, and companies like Akamai tend to want to deal with other big companies.</p><p>For a long time this type of arrangement put the use of a CDN out of reach for the average net user. But these days there are numerous CDNs for every conceivable type of content.  Video, images, CSS and JS files, you name it, it’s out there.  Still though using a CDN is sort of a pain, you have to either upload all your content to the network, or configure the network to pull it automatically from you but then you have to go and change each and everyone of your URLs.</p><p>Luckily, WordPress users have an elegant CDN solution in the form of <a href="http://wordpress.org/extend/plugins/w3-total-cache/" target="_blank">W3 Total Cache</a> and <a title="MaxCDN" href="http://www.maxcdn.com" target="_blank">MaxCDN</a>.  Let’s dig in a little and see what exactly a CDN is, how you can set one up, and how you can make it work for you.</p><p><span id="more-177"></span></p><h3>CDN? Is that like CNN?</h3><p>In a strange way sort of.  CNN broadcasts to a satellite and then is picked up by receivers the world over.  The broadcast then travels through different networks until it finally reaches your television.  Or someone else’s television clear across the country, clear across the world.  And it does this rather quickly at that!</p><p>A CDN works in a similar way except you are the one doing the ‘broadcasting’.  Images, javascript, css files, static html pages, and more can put automatically ‘broadcast’ out to the CDN.  The CDN then distributes this content to different servers through the globe.  Then rather than linking to the content stored with your blog you rather link to the content stored on the CDN.</p><p>Due to some internet magic called <em>anycasting</em> when a user from Los Angeles accesses your CDN content they will be sent to a different server than someone who accesses your site from London.  In point of fact, they will access the server closest to them.  This drastically reduces loading times for all viewers of your CDN content.  As a bonus, this content no longer is providing a drain on the resources of your own blog.  All the bandwidth used is carried from the CDN network, not your own.</p><h3>Sounds neat but it seems like a lot of work…</h3><p>It can be but it doesn’t have to be.  Rather than having to upload all this content manually CDN providers like MaxCDN provide a clever option.  Using something called a ‘Pull Zone’ you can set up a special URL that actually points to the CDN and not your own blog.  When a user accesses this URL the CDN will check and see if it already has the file being requested.  If it does, great, it returns that file.  The cool part is if it doesn’t have that file yet it will automatically download it from your site and then serve it.  So you never have to actually upload anything manually at all.</p><p>But we still have a problem.  Once we create this special URL how do we tell WordPress to replace all our links with links to our special URL?  Enter W3 Total Cache.</p><p>W3 Total Cache automates the entire process.  After installation and configuration all the content you want on the CDN will automatically have their links changed to point to the CDN without any further effort on your part.</p><h3>How do we set that up?</h3><p><a href="http://lesharris.com/wp-content/uploads/2011/04/image1.png"><img style="background-image: none; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border-width: 0px;" title="image" src="http://lesharris.com/wp-content/uploads/2011/04/image_thumb1.png" border="0" alt="image" width="123" height="244" align="left" /></a>Well first we need to install <a href="http://wordpress.org/extend/plugins/w3-total-cache/" target="_blank">W3 Total Cache</a> which is installed like any other WordPress plugin.  After installation we’ll see a new menu in the WordPress Admin area called Performance.  W3 Total Cache provides extensive caching capabilities for your blog and I highly recommend you explore all the options the plugin gives you.</p><p>For now though we’re interested in two primary areas.  We will need to first enable the CDN support from within W3 Total Cache and then we will need to configure it.  W3 Total Cache supports any generic pull zone and several push zones which operate in the opposite way of a pull zone (your blog itself handles the uploading to the CDN).  However, W3 Total Cache provides special support for NetDNA/MaxCDN.  MaxCDN provides an API that lets W3 Total Cache take care of the pull process and that is one of the strong reasons using this with W3 Total Cache is so seamless.</p><p>The first thing we’ll need to do is create ourselves a MaxCDN account.  You get a terabyte of bandwidth for a very reasonable price with the deal they are running so now is an excellent time to jump on the CDN bandwagon.  Once you have the account we will need to create a pull zone for our blog.</p><p><a href="http://lesharris.com/wp-content/uploads/2011/04/image2.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" src="http://lesharris.com/wp-content/uploads/2011/04/image_thumb2.png" border="0" alt="image" width="495" height="238" /></a></p><p>In the MaxCDN control panel click on Manage Zones.  This will take you to a screen where you will see the panel above.  We need to create a new pull zone so let’s click that button.</p><p><a href="http://lesharris.com/wp-content/uploads/2011/04/image3.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" src="http://lesharris.com/wp-content/uploads/2011/04/image_thumb3.png" border="0" alt="image" width="681" height="304" /></a></p><p>Fill in the appropriate information for your blog. The pull zone name and label can be largely what you want.  I suggest you enable Compression as well.  The Custom CDN Domain is actually optional but provides a nice branding opportunity we’ll come back to this later.  Once complete we’ll click Create and MaxCDN will automatically set everything up for us.</p><p><a href="http://lesharris.com/wp-content/uploads/2011/04/image4.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border-width: 0px;" title="image" src="http://lesharris.com/wp-content/uploads/2011/04/image_thumb4.png" border="0" alt="image" width="482" height="159" /></a></p><p>Back to the custom domain for a moment.  After you create the Pull Zone if you go to the Manage Zones tab and view your zones you can view settings for your newly created zone.  If you cannot create CNAMEs on your domain name you must use the displayed URL instead. Otherwise create a CNAME on your domain and make sure it points to that URL.  A final piece of information you can get by going to the Manage Account tab and then the API sub tab.  You will see your account number and api displayed.  You will need these in order to  finish configuring W3 Total Cache.</p><p><a href="http://lesharris.com/wp-content/uploads/2011/04/image5.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="image" src="http://lesharris.com/wp-content/uploads/2011/04/image_thumb5.png" border="0" alt="image" width="703" height="228" /></a></p><p>The first thing we need to back in WordPress is open the General Settings tab and enable W3 Total Cache.  Then in the CDN section we need to both enable it and choose the NetDNA / MaxCDN option for the CDN Type.  Once these steps are complete we can move forward and choose the ‘CDN’ option from the Performance menu.</p><p><a href="http://lesharris.com/wp-content/uploads/2011/04/image6.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://lesharris.com/wp-content/uploads/2011/04/image_thumb6.png" border="0" alt="image" width="739" height="370" /></a></p><p>There are many advanced options that we can play with but for now let’s focus on the general settings.  These checkboxes will let you decide which general type of content you want to use a CDN for.  Unless you have a specific reason otherwise there is no great harm in simply selecting all of the options and saving the changes.</p><p><a href="http://lesharris.com/wp-content/uploads/2011/04/image7.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="image" src="http://lesharris.com/wp-content/uploads/2011/04/image_thumb7.png" border="0" alt="image" width="1028" height="533" /></a></p><p>Lastly we need to input our API ID and Key in the configuration panel on the same page.  These let W3 Total Cache perform much of it’s automated functionality.  I recommend keeping SSL support on Auto.  Finally if we set up a custom CDN we input it in the provided field, otherwise we put in the NetDNA domain we found in the Pull Zone settings on the MaxCDN site.  Click Test NetDNA to make sure the connection can be made successfully and then save the changes.</p><p>And that’s it! Your blog is now using a CDN.  Take some time to look at the advanced options available on this page.  You might want to add the wp-content/uploads folder to the folders being managed by the CDN.  Also some plugins don’t take kindly to being cached and from the advanced settings panel we can disable CDN pulling for single files or entire directories.</p><p>This setup is extremely simple and robust.  It’s a credit to both W3 Total Cache and MaxCDN that such a powerful solution is readily affordable and simple to setup.</p> <img src="http://feeds.feedburner.com/~r/lesharris/main/~4/bsBhgLrx7wQ" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://lesharris.com/2011/04/07/wordpress-w3-total-cache-and-maxcdn/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://lesharris.com/2011/04/07/wordpress-w3-total-cache-and-maxcdn/</feedburner:origLink></item> <item><title>The Twitter Trap</title><link>http://feedproxy.google.com/~r/lesharris/main/~3/UI2Zcq67n4Y/</link> <comments>http://lesharris.com/2011/04/05/the-twitter-trap/#comments</comments> <pubDate>Wed, 06 Apr 2011 01:00:02 +0000</pubDate> <dc:creator>Les</dc:creator> <category><![CDATA[Development]]></category> <category><![CDATA[platform]]></category> <category><![CDATA[rights]]></category> <category><![CDATA[trap]]></category> <category><![CDATA[twitter]]></category><guid isPermaLink="false">http://lesharris.com/?p=150</guid> <description><![CDATA[I’ve been setting up a blog for my wife recently and one of the functions I wanted for the blog was to post a tweet when she makes a new post.  Hardly breaking any new ground there! I ended up using the excellent WP to Twitter plugin by Joseph Dolson which expertly and extensively provides [...]]]></description> <content:encoded><![CDATA[<div id="attachment_151" class="wp-caption alignleft" style="width: 228px"><a href="http://lesharris.com/wp-content/uploads/2011/04/failwhale.png"><img class="size-full wp-image-151" title="failwhale" src="http://lesharris.com/wp-content/uploads/2011/04/failwhale.png" alt="Twitter Fail" width="218" height="164" /></a><p class="wp-caption-text">The Original Twitter Trap</p></div><p>I’ve been setting up a blog for my wife recently and one of the functions I wanted for the blog was to post a tweet when she makes a new post.  Hardly breaking any new ground there! I ended up using the excellent <a href="http://www.joedolson.com/articles/wp-to-twitter/" target="_blank">WP to Twitter</a> plugin by <a href="http://www.joedolson.com/" target="_blank">Joseph Dolson</a> which expertly and extensively provides the functionality to enable this.  In the past configuring the plugin to your Twitter account would have been as simple as entering in your username and password.  But Twitter has disabled that old system sometime ago and have rolled out OAuth in it’s place.  Here’s what Joseph has to say about about the new method:</p><blockquote><p>The process to set up OAuth authentication for your web site is needlessly laborious. It is also confusing. However, this is the only method available from Twitter at this time.</p></blockquote><p>I certainly agree with his take on it!  It’s worth exploring some of the reasons behind this switch and how Twitter is attempting to lock down their platform and trap us by limiting our interactions to Twitter approved experiences.</p><p><span id="more-150"></span></p><h1>The New Way</h1><p><a href="http://lesharris.com/wp-content/uploads/2011/04/image.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="image" src="http://lesharris.com/wp-content/uploads/2011/04/image_thumb.png" border="0" alt="image" width="599" height="414" /></a></p><p>This is the setup form to connect your blog to Twitter if you’re using WP to Twitter.  It steps through quite a long and involved process where you have to register an ‘application’ on the Twitter developer site, ensure several key values are properly entered.  The output of this operation is not a single API key, but a series of four separate codes that you must enter in order for your blog to get access.</p><h2>Why do this?</h2><p>So what are the upsides to this arrangement from the user’s standpoint?  The largest, and indeed possible only, benefit the end user sees is that they do not have to give out their Twitter credentials to allow access.  It is all abstracted away by these tokens and keys which can be revoked on an application by application basis without changing the underlying credentials.</p><p>Certainly a noble cause and the one Twitter trumpeted the loudest when OAuth first came into being.  But, I have to ask, what are the benefits to Twitter for setting this up this way?</p><p>The primary benefit to Twitter is that this ensures that all applications can be managed and controlled by Twitter itself.  There is no working around the system.  Before an application and the actual user could be almost indistinguishable as far as Twitter was concerned.  Now there is a very clear and delineated separation between the two.  OAuth is a first stage in a power play by Twitter to take control of their platform back from the third-party developers who helped them get where they are.</p><h2>API, Shmaypeeeye.</h2><p>What’s phase two then?  Twitter recently let the other shoe drop and announced that they <a href="http://mashable.com/2011/03/12/twitter-api-clients/" target="_blank">no longer want third-party developers</a> to create Twitter clients.  These same developers who took Twitter from a quirky service that few understood and fewer used to the status update juggernaut it is today.  It really is an astounding betrayal by the company.  We would be seeing even more outcry from this but Twitter shrewdly grandfathered in the largest and most popular third-party Twitter clients so there wasn’t an immediate rush for the pitchforks and torches.</p><p>Okay, so that’s bad.  But does it really matter?  The most popular clients out there are the most popular for a reason after all.  They tend to be the best at what they do for their particular niche in the ecosystem.  I think it does matter and moving forward we’ll start to see possible changes coming from the Twitter side to get people off those third-party clients and back into Twitter controlled environments.</p><h2>The Trap Closes, A Vision of a Possible Future</h2><p>The dust is still settling now but Twitter isn’t going to long rest on its laurels.  I think what we’re going to see is that Twitter is going to stop developing the public API.  Keep in mind that this API provides the all mechanism for communicating with Twitter from these applications.  So, critically, if Twitter starts adding new features, new capabilities, new experiences and doesn’t update the public API to allow for their use, what then?</p><p>Then to get the “full” Twitter experience users will be forced onto Twitter approved clients.  In many ways this is Microsoft of the late 80s and 90s rearing it’s head again, Microsoft 2.0 if you will.  Hating Microsoft has become so passé it’s like having a deep abiding hatred for Atilla the Hun.  But they were feared and hated for very valid reasons for quite a long time.  What we’re seeing with Twitter is the rebirth of Embrace, Extend, Extinguish except this time it’s wrapped up in Web 2.0 bow.</p><h2>What Can Be Done?</h2><p>In short, nothing really.  Twitter is well within their rights to allow, or not allow, access to their system however they please.  But Twitter isn’t the only system out there that provides the 140 character fix.  Other platforms like <a href="http://identi.ca/" target="_blank">Identi.ca</a> could conceivably fill the gap.  These other systems tend to be open-source and distributed meaning that the Twitter Trap simply couldn’t happen using them.</p><p>Without being too pessimistic I suspect that such services have a hard uphill battle ahead of them.  Twitter, like Microsoft in the 90s, has the ever-elusive quality known as mindshare.  Twitter is what everybody uses, Twitter is where you go to connect with everybody else, to follow interesting people, to see what new trends are bubbling up in our 21st century zeitgeist.</p><p>The thing with mindshare though is that it’s a slippery thing. And eventually the cookie will crumble and other options and other choices will begin to become more prominent.  Look at the rise of Firefox toppling IE 6 for a recent example.</p><p>For now I think we’ll have to wait and see.  If and when we see Twitter become evil then we can create our own Firefox and start the cycle anew.</p> <img src="http://feeds.feedburner.com/~r/lesharris/main/~4/UI2Zcq67n4Y" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://lesharris.com/2011/04/05/the-twitter-trap/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://lesharris.com/2011/04/05/the-twitter-trap/</feedburner:origLink></item> <item><title>Claiming Your WordPress Blog on Technocrati</title><link>http://feedproxy.google.com/~r/lesharris/main/~3/7AOYJNPipRg/</link> <comments>http://lesharris.com/2011/04/03/technocrati/#comments</comments> <pubDate>Sun, 03 Apr 2011 22:10:21 +0000</pubDate> <dc:creator>Les</dc:creator> <category><![CDATA[Wordpress]]></category> <category><![CDATA[sysadmin]]></category> <category><![CDATA[technocrati]]></category> <category><![CDATA[wordpress]]></category><guid isPermaLink="false">http://lesharris.com/?p=127</guid> <description><![CDATA[Technocrati used to have a link that embedded a particular code.  These days they ask you to put a claim code, like this J5VQXYV57DWC, in a blog post after you request the initial claim.  Claiming the blog is a fairly easy process where you tell Technocrati a bit about your blog like it&#8217;s feed url and [...]]]></description> <content:encoded><![CDATA[<div id="attachment_131" class="wp-caption alignleft" style="width: 228px"><a href="http://lesharris.com/wp-content/uploads/2011/04/techno.png"><img class="size-full wp-image-131" title="Technocrati" src="http://lesharris.com/wp-content/uploads/2011/04/techno.png" alt="Technocrati Logo" width="218" height="195" /></a><p class="wp-caption-text">Attach your Technocrati Profile to Your Blog</p></div><p><a title="Technocrati" href="http://www.technocrati.com/" target="_blank"></a><a title="Technocrati" href="http://www.technocrati.com/" target="_blank">Technocrati </a>used to have a link that embedded a particular code.  These days they ask you to put a claim code, like this J5VQXYV57DWC, in a blog post after you request the initial claim.  Claiming the blog is a fairly easy process where you tell Technocrati a bit about your blog like it&#8217;s feed url and what the blog is about and I strongly suggest you consider it for your own blog.</p><p>After you&#8217;ve submitted your blog info you&#8217;ll get an email telling you how to get the Technocrati code.  Once you&#8217;ve embedded this code into a blog post you&#8217;ll return to your Technocrati account page and go into the Claim Blog section once more.  In there you&#8217;ll see a button asking you to verify your Technocrati claim and you just click that.  Shortly afterwards you should receive an email telling you that Technocrati successfully found the code on your blog and then it&#8217;ll go into a queue for verification.</p><p>And that is pretty much it!  And if you suspect I&#8217;m doing this process right now you would be correct.  Rather than just having a cryptic code on my blog I thought I&#8217;d explain a bit about the process.</p> <img src="http://feeds.feedburner.com/~r/lesharris/main/~4/7AOYJNPipRg" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://lesharris.com/2011/04/03/technocrati/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://lesharris.com/2011/04/03/technocrati/</feedburner:origLink></item> <item><title>Amazing Mercury Photo</title><link>http://feedproxy.google.com/~r/lesharris/main/~3/xAQBLfHnzrA/</link> <comments>http://lesharris.com/2011/04/01/amazing-mercury-photo/#comments</comments> <pubDate>Sat, 02 Apr 2011 05:36:43 +0000</pubDate> <dc:creator>Les</dc:creator> <category><![CDATA[Microblog]]></category><guid isPermaLink="false">http://lesharris.com/?p=122</guid> <description /> <content:encoded><![CDATA[<blockquote><p><a href="http://lesharris.com/wp-content/uploads/2011/04/mercury.png"><img src="http://lesharris.com/wp-content/uploads/2011/04/mercury.png" alt="" title="mercury" width="512" height="512" class="aligncenter size-full wp-image-123" /></a></p></blockquote> <img src="http://feeds.feedburner.com/~r/lesharris/main/~4/xAQBLfHnzrA" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://lesharris.com/2011/04/01/amazing-mercury-photo/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://lesharris.com/2011/04/01/amazing-mercury-photo/</feedburner:origLink></item> <item><title>WordPress 3.1 Post Format Support in Prose Child Theme for Studiopress Genesis</title><link>http://feedproxy.google.com/~r/lesharris/main/~3/OLCwSEdyz1A/</link> <comments>http://lesharris.com/2011/04/01/wordpress-3-1-post-format-support-in-prose-child-theme-for-studiopress-genesis/#comments</comments> <pubDate>Sat, 02 Apr 2011 04:48:15 +0000</pubDate> <dc:creator>Les</dc:creator> <category><![CDATA[Wordpress]]></category> <category><![CDATA[genesis]]></category> <category><![CDATA[php]]></category> <category><![CDATA[post formats]]></category> <category><![CDATA[prose]]></category> <category><![CDATA[studiopress]]></category> <category><![CDATA[wordpress]]></category><guid isPermaLink="false">http://lesharris.com/?p=91</guid> <description><![CDATA[I&#8217;m new to StudioPress&#8217; Genesis theme so I was looking for a small project to help familiarize myself with it. When I purchased it I decided I would also purchase a child theme. Since my personal tastes trend toward minimalism I ended up choosing the Prose theme which this blog is using. Then all that [...]]]></description> <content:encoded><![CDATA[<p><div id="attachment_108" class="wp-caption alignleft" style="width: 228px"><a href="http://lesharris.com/wp-content/uploads/2011/04/postformats.png"><img src="http://lesharris.com/wp-content/uploads/2011/04/postformats.png" alt="Post Formats in Prose" title="Prose Post Formats" width="218" height="164" class="size-full wp-image-108" /></a><p class="wp-caption-text">WP 3.1 Post Formats in Prose</p></div>I&#8217;m new to <a href="http://www.studiopress.com" alt="Studiopress">StudioPress&#8217; Genesis</a> theme so I was looking for a small project to help familiarize myself with it.  When I purchased it I decided I would also purchase a child theme.  Since my personal tastes trend toward minimalism I ended up choosing the <a href="http://www.studiopress.com/themes/prose" alt="Prose Theme">Prose theme</a> which this blog is using.  Then all that was left was trying to figure out what useful thing I could do to tip my toe into the world of Genesis framework development.</p><p>I didn&#8217;t have to wait too long luckily when I saw that Studiopress had already released the <a href="http://www.studiopress.com/themes/tapestry" alt="Tapestry">Tapestry theme</a>: a tumblr style child theme using the new post format feature in WordPress 3.1.  I thought it would be nice to have a <a href="http://lesharris.com/microblog/" alt="Microblog Link">microblog on my own site</a> that was separate from this one for the quick and silly stuff.  So this little project was born.<br /> <span id="more-91"></span><br /> It was much easier to hack this in then it might have been.  The Genesis framework provides a fantastic selection of hooks and functions that let me quickly and easily customize what I needed.  I&#8217;m going to go through the code and explain briefly what it is doing but it should be largely self evident.  At the end of this blog post I&#8217;ve listed all the customizations I did and provided a download link for the iconset I am using in case you wanted to follow along.</p><div class="codeblock"><div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Enable Post Format support in Prose</span>
add_theme_support<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis-post-format-images'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
add_theme_support<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'post-formats'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'aside'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'gallery'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'link'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'image'</span><span style="color: #339933;">,</span>
   <span style="color: #0000ff;">'quote'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'status'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'video'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'audio'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'chat'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div></div><p>I wanted to modify the Prose theme files as little as possible so I started by creating a file named <b>post-formats.php</b> and put it into the Prose theme folder.  These are the first two lines of code added into this file.  First off, we activate the built-in Genesis support for post formats which is surprisingly simple.  All it does is check requirements for post formats and then inserts an image with the same name of the format.  So if the post format is set to Video it will return a link wrapped video.png file.  And that&#8217;s it, that&#8217;s all it does. The only gotcha here is that the post format icons need to be in <strong>./theme/prose/images/post-formats</strong>. The second line tells WordPress itself that our theme supports the listed post formats.  The formats listed are also all the post formats that WordPress itself supports so we&#8217;ve got our bases covered.</p><div class="codeblock"><div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// We're not going to display titles so we're going to remove this</span>
<span style="color: #666666; font-style: italic;">// so it runs at another point.</span>
remove_action<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'genesis_before_post_title'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'genesis_do_post_format_image'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Lets not display our subnav on the Microblog since they're all</span>
<span style="color: #666666; font-style: italic;">// the microblog category.</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_before_header'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'lh_remove_subnav'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> lh_remove_subnav<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_page<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Microblog&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		remove_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_after_header'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'genesis_do_subnav'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Add a subtitle for the Microblog page.</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_before_content'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'lh_microblog_title'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> lh_microblog_title<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_page<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Microblog&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Welcome to the Microblog. Let's let our hair down a little.&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// I don't want Microblog posts on the front page, kill 'em.</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_before_loop'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'lh_strip_microblog'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> lh_strip_microblog<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wp_query</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> is_home<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$wp_query</span> <span style="color: #339933;">=</span>
                    <span style="color: #000000; font-weight: bold;">new</span> WP_Query<span style="color: #009900;">&#40;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'cat'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;-&quot;</span> <span style="color: #339933;">.</span> get_cat_id<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Microblog&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div></div><p>Moving on we come to this set of actions and functions.  These just set a few customizations that I wanted for my own blog and you may have very different ideas for your preferred post format setup.  All of these are optional.  In my setup it&#8217;s worth pointing out that I am not using post titles.  The built in Genesis post format function hooks into <strong>genesis_before_post_title</strong> by default.  I remove this hook in my code and handle it at a later point, if you wanted titles on your microblog post there&#8217;s no need to touch this hook.</p><div class="codeblock"><div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Setup Custom Loop for Microblog</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_before_loop'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'lh_check_micro_page'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> lh_check_micro_page<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// Confine the Microblog posts to a</span>
	<span style="color: #666666; font-style: italic;">// page named Microblog</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_page<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Microblog&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Remove Genesis Actions</span>
		remove_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_before_post_content'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'genesis_post_info'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		remove_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_after_post_content'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'genesis_post_meta'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		remove_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_post_title'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'genesis_do_post_title'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Add Microblog Actions</span>
		add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_before_post_content'</span><span style="color: #339933;">,</span>
                           <span style="color: #0000ff;">'genesis_do_post_format_image'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Run the loop for all posts with the</span>
		<span style="color: #666666; font-style: italic;">// Microblog category.</span>
		genesis_custom_loop<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'cat='</span> <span style="color: #339933;">.</span> get_cat_id<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Microblog&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div></div><p>Lastly we come to the actual meat of this code.  You can see that we really aren&#8217;t doing very much, Genesis rocks!  We hook into before the start of the loop and check to see if we&#8217;re on the Microblog page.  On your blog you&#8217;ll probably want to change this but for me I just wanted this to work on a single page.  If we&#8217;re on the Microblog page we remove a bunch of Genesis built-in actions.  This will get rid of the post title, the info line, and any meta information leaving us just our content.  Then we hook the genesis post format function back into the works but this time we make it run right before the post content is displayed rather than the post title.  After that we fire off a custom loop with a query for all posts in the Microblog category. And well, that&#8217;s it!  Told you it was simple.</p><div class="codeblock"><div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Post formats</span>
<span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span>CHILD_DIR<span style="color: #339933;">.</span><span style="color: #0000ff;">'/post-formats.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div></div><p>Now I needed a way to hook this code into the Prose theme itself. What I ended up doing was adding this line into the <strong>./themes/prose/lib/init.php</strong> file where Prose loads the rest of its code on startup. This means if Prose gets updated later I&#8217;ll just need to add this single line of code back in and I&#8217;ll be good to go.  This sort of minimal integration is something I strived for since it will make maintenance easier later on.  I&#8217;m not sure if this is the best way so if there is a better way to do this please let me know.</p><p>And there we go.  The only thing left is a tiny bit of CSS that primarily floats the post format icon so it&#8217;ll show up to the left of the post content and the css class I&#8217;m using for my little heading on the microblog page.  One of the nice things about these post formats is that they automatically will get assigned a post format CSS class.  For example, a Quote format post will have &#8216;format-quote&#8217; automatically added into its div.  This means we can style each of these formats separately and that is probably the next step for me.  I admit I did very little to make this easy for other&#8217;s to use, pretty much the only way to do customizations is edit the code itself.  If there is any demand for this I will probably end up trying to integrate this better into the admin page so everything can be customized without editing the code.</p><p>Thanks for checking this out, if you have any questions drop me a line and I&#8217;ll see if I can help out in anyway.</p><h3>Post Format Iconset</h3><p>This iconset is created from a larger free Tumblr icon set called <a href="http://www.woothemes.com/2010/05/pictos/" alt="Pictos">Pictos</a> I think they look great, thanks <a href="http://www.woothemes.com/" alt="WooThemes">WooThemes</a>!<br /> <a href='http://lesharris.com/wp-content/uploads/2011/04/post-formats.zip'>Download Post Format Iconset</a></p><h3>./themes/prose/css/custom.css</h3><div class="codeblock"><div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.post-format-image</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">block</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">float</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">margin-right</span><span style="color: #00AA00;">:</span> <span style="color: #933;">5px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #cc00cc;">#microblog-desc</span> <span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#999</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">font-family</span><span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'Palatino Linotype'</span><span style="color: #00AA00;">,</span> <span style="color: #ff0000;">'Book Antiqua'</span><span style="color: #00AA00;">,</span> Palatino<span style="color: #00AA00;">,</span> <span style="color: #993333;">serif</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> <span style="color: #933;">15px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">padding-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">20px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">padding-top</span><span style="color: #00AA00;">:</span> <span style="color: #933;">0px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">font-style</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">italic</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">border-bottom</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span> <span style="color: #993333;">dotted</span> <span style="color: #cc00cc;">#aaa</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div></div><h3>./themes/prose/lib/init.php</h3><div class="codeblock"><div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Post formats</span>
<span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span>CHILD_DIR<span style="color: #339933;">.</span><span style="color: #0000ff;">'/post-formats.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div></div><h3>./themes/prose/post-formats.php</h3><div class="codeblock"><div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * This file controls Post Format customisations to the Prose child theme.
 *
 * @author Les Harris &lt;les@lesharris.com--&gt; http://lesharris.com
 * @package Prose
 * @subpackage Post Format Customisations
 */</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Enable Post Format support in Prose</span>
add_theme_support<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis-post-format-images'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
add_theme_support<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'post-formats'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'aside'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'gallery'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'link'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'image'</span><span style="color: #339933;">,</span>
   <span style="color: #0000ff;">'quote'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'status'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'video'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'audio'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'chat'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// We're not going to display titles so we're going to remove this</span>
<span style="color: #666666; font-style: italic;">// so it runs at another point.</span>
remove_action<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'genesis_before_post_title'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'genesis_do_post_format_image'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Lets not display our subnav on the Microblog since they're all</span>
<span style="color: #666666; font-style: italic;">// the microblog category.</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_before_header'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'lh_remove_subnav'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> lh_remove_subnav<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_page<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Microblog&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		remove_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_after_header'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'genesis_do_subnav'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Add a subtitle for the Microblog page.</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_before_content'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'lh_microblog_title'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> lh_microblog_title<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_page<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Microblog&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Welcome to the Microblog. Let's let our hair down a little.&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// I don't want Microblog posts on the front page, kill 'em.</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_before_loop'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'lh_strip_microblog'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> lh_strip_microblog<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wp_query</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> is_home<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$wp_query</span> <span style="color: #339933;">=</span>
                    <span style="color: #000000; font-weight: bold;">new</span> WP_Query<span style="color: #009900;">&#40;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'cat'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;-&quot;</span> <span style="color: #339933;">.</span> get_cat_id<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Microblog&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Setup Custom Loop for Microblog</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_before_loop'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'lh_check_micro_page'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> lh_check_micro_page<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// Confine the Microblog posts to a</span>
	<span style="color: #666666; font-style: italic;">// page named Microblog</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>is_page<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Microblog&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Remove Genesis Actions</span>
		remove_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_before_post_content'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'genesis_post_info'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		remove_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_after_post_content'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'genesis_post_meta'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		remove_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_post_title'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'genesis_do_post_title'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Add Microblog Actions</span>
		add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'genesis_before_post_content'</span><span style="color: #339933;">,</span>
                           <span style="color: #0000ff;">'genesis_do_post_format_image'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Run the loop for all posts with the</span>
		<span style="color: #666666; font-style: italic;">// Microblog category.</span>
		genesis_custom_loop<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'cat='</span> <span style="color: #339933;">.</span> get_cat_id<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Microblog&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div></div> <img src="http://feeds.feedburner.com/~r/lesharris/main/~4/OLCwSEdyz1A" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://lesharris.com/2011/04/01/wordpress-3-1-post-format-support-in-prose-child-theme-for-studiopress-genesis/feed/</wfw:commentRss> <slash:comments>1</slash:comments> <feedburner:origLink>http://lesharris.com/2011/04/01/wordpress-3-1-post-format-support-in-prose-child-theme-for-studiopress-genesis/</feedburner:origLink></item> <item><title>digitalized what?</title><link>http://feedproxy.google.com/~r/lesharris/main/~3/PAROboHyALM/</link> <comments>http://lesharris.com/2011/04/01/digitalized-what/#comments</comments> <pubDate>Sat, 02 Apr 2011 01:27:05 +0000</pubDate> <dc:creator>Les</dc:creator> <category><![CDATA[Microblog]]></category><guid isPermaLink="false">http://lesharris.com/?p=87</guid> <description><![CDATA[My sister&#8217;s proto-blog.]]></description> <content:encoded><![CDATA[<blockquote><p><a title="Digitalized Existence" href="http://www.digitalized-existence.org">My sister&#8217;s proto-blog.</a></p></blockquote> <img src="http://feeds.feedburner.com/~r/lesharris/main/~4/PAROboHyALM" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://lesharris.com/2011/04/01/digitalized-what/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://lesharris.com/2011/04/01/digitalized-what/</feedburner:origLink></item> <item><title>Oh Miyamoto</title><link>http://feedproxy.google.com/~r/lesharris/main/~3/039iZzhn3vM/</link> <comments>http://lesharris.com/2011/04/01/oh-miyamoto/#comments</comments> <pubDate>Sat, 02 Apr 2011 01:24:38 +0000</pubDate> <dc:creator>Les</dc:creator> <category><![CDATA[Microblog]]></category><guid isPermaLink="false">http://lesharris.com/?p=84</guid> <description><![CDATA[Video games are bad for you? That&#8217;s what they said about rock-n-roll. Shigeru Miyamoto]]></description> <content:encoded><![CDATA[<blockquote><p>Video games are bad for you? That&#8217;s what they said about rock-n-roll.</p><p><em>Shigeru Miyamoto</em></p></blockquote> <img src="http://feeds.feedburner.com/~r/lesharris/main/~4/039iZzhn3vM" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://lesharris.com/2011/04/01/oh-miyamoto/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://lesharris.com/2011/04/01/oh-miyamoto/</feedburner:origLink></item> <item><title>Hosting Your Own Services</title><link>http://feedproxy.google.com/~r/lesharris/main/~3/ANBLUyBPmV0/</link> <comments>http://lesharris.com/2011/03/30/hosting-your-own-services/#comments</comments> <pubDate>Thu, 31 Mar 2011 01:32:51 +0000</pubDate> <dc:creator>Les</dc:creator> <category><![CDATA[Sysadmin]]></category> <category><![CDATA[dns]]></category> <category><![CDATA[email]]></category> <category><![CDATA[linode]]></category> <category><![CDATA[sysadmin]]></category> <category><![CDATA[vps]]></category> <category><![CDATA[wordpress]]></category><guid isPermaLink="false">http://lesharris.com/?p=44</guid> <description><![CDATA[Hosting your own services is becoming increasingly anachronistic as time goes on.  When you have huge players like Google, Microsoft, and Yahoo providing everything under the sun there doesn&#8217;t seem to be much point in it. However, there are some unique benefits to hosting your own email, your own blog, your own web applications, your [...]]]></description> <content:encoded><![CDATA[<div id="attachment_47" class="wp-caption alignleft" style="width: 228px"><a href="http://lesharris.com/wp-content/uploads/2011/03/hosting.png"><img class="size-full wp-image-47" title="Service Hosting" src="http://lesharris.com/wp-content/uploads/2011/03/hosting.png" alt="Service Hosting" width="218" height="164" /></a><p class="wp-caption-text">Hosting your own services has lots of benefits.</p></div><p>Hosting your own services is becoming increasingly anachronistic as time goes on.  When you have huge players like Google, Microsoft, and Yahoo providing everything under the sun there doesn&#8217;t seem to be much point in it.  However, there are some unique benefits to hosting your own email, your own blog, your own web applications, your own whatever.</p><p><span id="more-44"></span></p><p>While my <a title="ImageSource Inc." href="http://imagesourceinc.com" target="_blank">job</a> has me working primarily in a Windows environment I&#8217;ve used and enjoyed Linux since I first came across it in the late 90s.  I did some development work with <a title="GNOME" href="http://www.gnome.org" target="_blank">GNOME</a> in the past (you&#8217;ll see me on their foundation page) but between my work and my two year old son I found that had very little time to actually get any development work done so I was forced to put it to the side. I still like to play around with it so I host my domain and services in a Linux environment.</p><p>Let&#8217;s look at email for an example of some of the benefits involved.  Setting up email is notoriously complicated and fiddly especially if you want your emails to be accepted by the majority of mail servers.  I use a package called<a title="iRedMail" href="http://www.iredmail.org/" target="_blank"> iRedMail</a> which is a setup package that automates the process of getting an email server setup and usable.   It works  with many different distributions and if you&#8217;re the type who is running Linux servers chances are you already are running one of them.  I can&#8217;t overstate how simple iRedMail makes setting up an email server.  Get the software, spend fifteen minutes, and boom.</p><p>Now what are the benefits?  Well first the only person who has access to my email is me.  It&#8217;s not stored in an inaccessible Google server, it&#8217;s not being scanned for keywords to feed me ads, and I can set up precisely how I want to access it.  In my case I use a really great webmail package called <a title="Afterlogic" href="http://www.afterlogic.com/" target="_blank">Webmail Pro</a> from Afterlogic.  It&#8217;s a commercial product but they give out free licenses for up to five users and it is generally really awesome.  I&#8217;ve also setup IMAP and because it&#8217;s my own server I set it up so it&#8217;s only accessible over SSL so nothing is passed in plain text.</p><p>So by hosting my own email I get privacy, I get power, and I get a completely personalized setup that works the way I want it to work.  Extend those three key points across the rest of an online presence: web server, database server, PHP extensions and setup, everything.  It truly is the best of all worlds and inexpensive!</p><p>Now you need a reliable hosting company and frankly a standard &#8216;shared&#8217; web account isn&#8217;t going to get you very far.  What you want to do this sort of thing are called Virtual Private Servers or VPS.  These function exactly like real servers, what makes them virtual is that a single physical server can hold more than one VPS.  But as a user you&#8217;ll never notice that, it&#8217;ll just be your server.  Because you&#8217;re effectively splitting the cost of the really beefy physical server among all the other VPS users the pricing is very reasonable for the power you get.  Without getting too shill-like, for my money <a title="Linode" href="http://www.linode.com/" target="_blank">Linode </a>is the VPS provider of choice.  I&#8217;ve been with them for over a year and haven&#8217;t had a single hiccup.  Their backend administration is powerful and easy to use and they are very well priced.  A starter VPS from Linode will run you about twenty dollars a month.  Pretty good.</p><p>In closing, I recommend everyone who wants to not share resources and have their own personal setup check out getting a VPS and start hosting some of your own stuff, your own way.</p> <img src="http://feeds.feedburner.com/~r/lesharris/main/~4/ANBLUyBPmV0" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://lesharris.com/2011/03/30/hosting-your-own-services/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://lesharris.com/2011/03/30/hosting-your-own-services/</feedburner:origLink></item> <item><title>The Case for 11g</title><link>http://feedproxy.google.com/~r/lesharris/main/~3/UxD856HvhoA/</link> <comments>http://lesharris.com/2011/03/27/the-case-for-11g/#comments</comments> <pubDate>Mon, 28 Mar 2011 06:22:58 +0000</pubDate> <dc:creator>Les</dc:creator> <category><![CDATA[ECM]]></category> <category><![CDATA[11g]]></category> <category><![CDATA[ecm]]></category> <category><![CDATA[fusion middleware]]></category> <category><![CDATA[ipm]]></category> <category><![CDATA[ucm]]></category><guid isPermaLink="false">http://lesharris.com/?p=17</guid> <description><![CDATA[Oracle IPM 11g is the latest version of the venerable Image and Process Management product but the product has a long history.  IPM was developed by Optika in the late 90s with the name eMedia as a workflow enabled replacement for an imaging solution named FilePower.  The eMedia brand was phased out at version 2.0 [...]]]></description> <content:encoded><![CDATA[<div id="attachment_35" class="wp-caption alignleft" style="width: 228px"><a href="http://lesharris.com/wp-content/uploads/2011/03/Middleware-11g.jpg"><img class="size-full wp-image-35" title="Oracle Fusion Middleware 11g" src="http://lesharris.com/wp-content/uploads/2011/03/Middleware-11g.jpg" alt="" width="218" height="163" /></a><p class="wp-caption-text">Welcome to the Jungle</p></div><p>Oracle IPM 11g is the latest version of the venerable Image and Process Management product but the product has a long history.  IPM was developed by Optika in the late 90s with the name eMedia as a workflow enabled replacement for an imaging solution named FilePower.  The eMedia brand was phased out at version 2.0 and replaced with the Acorde name.  We still have some clients who are successfully running Acorde installations to this day.</p><p>Optika was bought out by a company called Stellent and the product went through another rebranding phase this time as Imaging and Business Process Management (IBPM).  It was at this time the version was bumped up from Acorde 4.0 to Stellent IBPM 7.5 to bring the product in line with Stellent’s overall product versioning.</p><p>Finally Oracle buys Stellent and brings the Stellent Content Server and IBPM products under their umbrella.  Content Server turns into Universal Content Management and IBPM turns into Oracle Image and Process Management 10gR3.</p><p>So we’ve finally arrived at IPM.  A key thing to remember that during this period of development and rebranding is that the product remained essentially the same.  It operated on the same principles and was architected in the same manner.  Not to say there weren’t improvements between eMedia 1.0 and IPM 10gR3 but these improvements embodied natural evolution of the product.</p><p>This is true no longer; IPM 11g has changed the game.</p><p><span id="more-17"></span></p><h2>IPM Today</h2><p>The first and foremost thing to consider when evaluating the 11g platform is that it is for all intents and purposes an entirely new application.  Other than some general concepts which can be easily mapped across there remains very little of the venerable 10g branch.  This has both benefits and disadvantages.  An engineer looking to architect an 11g based solution must carefully weigh these factors when designing the final project.  Let’s cover some of the disadvantages first and then we’ll take a look at what 11g brings to the table.</p><h3>Disadvantages</h3><ul><li>Entirely new architecture.</li><li>Missing several potentially important features.</li><li>Increased resource usage.</li></ul><p>Let’s break these down point by point.  One of the biggest shockers when it comes to first looking into IPM 11g is how foreign everything is.  Long loved (or at least tolerated!) components of IPM like Process Broker and Info Broker are nowhere to be found.  In their place is a somewhat inscrutable system based off the Oracle Weblogic Server platform.  Any and all redundancy or performance clustering must now be done at this new WLS layer.  Another surprise happens when the system engineer decides to look at how workflow is now done in IPM and comes to the shocking realization that there is no built-in workflow in IPM 11g.  The system engineer notices there is something to set up a workflow connection and upon further research finds out that the entirety of IPM workflow is now handled by the Oracle SOA suite.  The days of Process Builder are finished.</p><p>After the workflow surprise we dig a bit deeper and see if we can find any other features that have gone MIA.  We find almost immediately that there is absolutely no way to do linked servers using IPM 11g. No COLD support either.  These can be critical challenges to overcome in any upgrade scenario and frankly IPM 11g simply does not handle either case natively.   Looking further we see that while there does seem to be a part of IPM that functions like the old Filer it seems to have shed the vast majority of it’s features.  Other than very basic file importing and maybe tacking on an XML document for supporting content the new Filer, called simply Input, frankly just doesn’t do much.</p><p>After working with the system for a bit we decide to look at the server’s resource usage and nearly fall out of our desk chair.  A basic out of the box installation of IPM 11g will include Weblogic Server, Universal Content Management (more on this in a bit), and IPM itself.  With these components running at the same time in production configuration we find that they take up roughly 4 gigabytes of RAM to themselves on a completely idle system.    But wait! Why can’t we install each component on a separate server?  While we can easily do this the most common licensing scenarios in the field translate to needing to have all these components installed on a single, physical server.</p><h3>Benefits</h3><ul><li>Entirely new architecture.</li><li>Modern web-based user experience.</li><li>Simplified development options.</li></ul><p>But it’s not all doom and gloom.  There are some very compelling features that help to offset some of the issues we’ve discussed so let’s dive in and take a look.   The fact that the architecture bullet point has appeared twice is quite intentional, the new architecture is not different just for the sake of being different.  One of the biggest things it brings to the table is unification of system administration tasks.  Want to create a cluster? Want to configure Active Directory configuration? Want to configure runtime server settings?  All these things are now done the same way for the majority of the 11g suite of products.   Weblogic Server is the new strategic application deployment platform for Oracle middleware products.   If a feeling of panic is arising within you at this thought allow me to paraphrase Bex Huff and say that Weblogic Server isn’t any more difficult than IIS or Apache or whatever you may be used to, it is simply different.   And in this difference lies a lot of power.  Having a unified interface for all those listed tasks dramatically simplifies administration and maintenance of a production 11g system.  Additionally, WLS is fully cross platform and is certified for use on a wide variety of Microsoft Windows products as well as a large range of Unix products.  IPM is no longer tied to a single platform.</p><p>Because of this cross-platform nature of 11g the old IPM thick client has been replaced with an entirely web based approach.  This existed in 10g (in two flavors nonetheless) but now it is the only option.  Luckily for us the web interface is much better than it used to be.  Modern web development technologies like Oracle’s ADF have been extensively utilized throughout the product allowing for a quick to load and more desktop application like interface experience.  The biggest win in my view is we can finally kiss DSMS goodbye (and good riddance).  We no longer have to worry about deploying anything to our client workstations and we can rest easy knowing that our Mac users, our Linux users, and our Windows users have equal access to our business content.</p><p>I’m a bit of a developer so indulge me this last point.  All development in 11g can be done through web services using a well-defined (and industry standard) WSDL interface.  The API is powerful enough where one could effective code a user-end replacement for the old thick client using it.  Because it’s exposed through web services we can consume the IPM service using whatever language we want to use.  This is huge. We’re no longer tied to Windows with our DLLs, we can interface directly with IPM using PHP running on a LAMP server if wanted to.  Hugely flexible, hugely powerful.</p><h2>Final Thoughts</h2><p>So why bother.  That’s what it comes down to in the end.  IPM 10g is going away.  It’s going to receive updates for quite some time but the end is in sight for that platform.  Next year Oracle is planning on releasing a 12g version of it’s middleware platform.  Know what it’ll look like?  Well if you think it’s the triumphant return of Info Broker I’m going to have to sadly disappoint you.  11g is the opportunity to get in on the ground floor of Oracle’s new middleware platform for years to come.  Further development is going to be built on the foundation that 11g provides.  Another factor to consider is that the older systems get the harder it is upgrade them.  Typically a truly ancient system will only be able to be migrated by highly experienced professionals or possibly unable to be migrated at all.  By keeping up with the pace of ECM technology you are saving you and your business a lot of expensive headache down the road.</p><p>I’ve been doing or assisting in production installations of 11g for a while now and each one is different.    In the end I really enjoy the platform in a way I’ve never enjoyed the 10g platform, warts and all.</p> <img src="http://feeds.feedburner.com/~r/lesharris/main/~4/UxD856HvhoA" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://lesharris.com/2011/03/27/the-case-for-11g/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://lesharris.com/2011/03/27/the-case-for-11g/</feedburner:origLink></item> </channel> </rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using apc
Page Caching using apc
Database Caching using apc
Object Caching 570/708 objects using apc

Served from: lesharris.com @ 2012-05-24 12:40:30 -->

