<?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>Austin Matzko&#039;s Blog &#187; Austin Matzko</title>
	<atom:link href="http://austinmatzko.com/author/pressedwords/feed/" rel="self" type="application/rss+xml" />
	<link>http://austinmatzko.com</link>
	<description>A blog about philosophy, Christianity, web development and whatever else I feel like writing about.</description>
	<lastBuildDate>Wed, 16 Mar 2011 17:14:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2-RC4-18391</generator>
		<item>
		<title>5 Things of Interest to Developers in the New WordPress 2.8</title>
		<link>http://pressedwords.com/stuff-new-in-wp-2-8-for-coders/</link>
		<comments>http://pressedwords.com/stuff-new-in-wp-2-8-for-coders/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 07:53:44 +0000</pubDate>
		<dc:creator>Austin Matzko</dc:creator>
				<category><![CDATA[Pressed Words]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://pressedwords.com/stuff-new-in-wp-2-8-for-coders/</guid>
		<description><![CDATA[With each major WordPress release, public changes like the new widgets administrative interface usually get all the glory. Here are some new features in WordPress 2.8 that most users won&#8217;t even know exist but you will probably care about, if you&#8217;re a WordPress developer. Widgets API The new widgets API lets you create widgets by [...]]]></description>
			<content:encoded><![CDATA[<p>With each major WordPress release, public changes like the new widgets administrative interface usually get all the glory.  Here are some new features in <a href="http://wordpress.org/development/2009/06/wordpress-28/">WordPress 2.8</a> that most users won&#8217;t even know exist but you will probably care about, if you&#8217;re a WordPress developer.</p>
<ul>
<li><strong>Widgets API</strong>  The <a href="http://codex.wordpress.org/WordPress_Widgets_Api">new widgets API</a> lets you create widgets by extending the <code>WP_Widget</code> class.  If making a multi-widget with the old system was like trying to piece together your kid&#8217;s bicycle on Christmas Eve, the new API rolls out the bike for you, tires inflated and topped with a bow.
</li>
<li><strong>SimplePie RSS</strong>  WordPress has been using the MagpieRSS class to parse RSS feeds.  Trouble is, Magpie development ground to a halt about four years ago, meaning when contemporary feeds flummoxed Magpie, flustered developers <a href="http://core.trac.wordpress.org/ticket/2864">fumed, futilely</a>.  In 2.8, WordPress now reads RSS with <a href="http://simplepie.org/">SimplePie</a>, an active project with a robust API.
</li>
<li><strong>New Escape Functions</strong>  A new set of functions consistently named and <a href="http://en.wikipedia.org/wiki/DRY">DRY</a>-er now make your strings sparkly clean and cuddly safe.
<ul>
<li><code>esc_sql()</code>: A wrapper for the <code>$wpdb-&gt;escape()</code> method.</li>
<li><code>esc_url()</code>: Clean up an untrustworthy URL for printing.</li>
<li><code>esc_url_raw()</code>: Clean up an untrustworthy URL for storing in the database.</li>
<li><code>esc_js()</code>: Make text suitable for printing as a JavaScript string.</li>
<li><code>esc_html()</code>: Convert characters that have special meaning in HTML (such as <code>&gt;</code> and <code>&lt;</code>) into their equivalent character entities.</li>
<li><code>esc_attr()</code>: Prepare text so that it&#8217;s safe to be used in an HTML element attribute.</li>
<li><code>esc_attr__()</code>, <code>esc_attr_e()</code>, and <code>esc_attr_x()</code>: Make a translatable string safe for printing as an HTML element attribute.  E.g.,<br />
<div class="filosofo-highlight-light php" style="font-family: monospace;"><br />
<span style="color: #66cc66;">&lt;</span>a href<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&quot;</span> title<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&lt;?php esc_attr_e('Translate me'); ?&gt;&quot;</span><span style="color: #66cc66;">&gt;</span><br />
&nbsp;</div>
</li>
<li><code>esc_html__()</code> and <code>esc_html_e()</code>: Like the last two, but for escaping HTML characters in general.</li>
</ul>
</li>
<li><strong><code>get_the_author_meta()</code></strong> User data is spread out between two database tables and has been accessed&#8212;until now&#8212;by a number of methods.  <a href="http://codex.wordpress.org/Template_Tags/the_author_meta"><code>get_the_author_meta()</code></a> retrieves user data with one easy-to-remember function.
</li>
<li><strong><code>the_post</code> Action Hook</strong> Called in <code>setup_postdata()</code>, the <code>the_post</code> action hook is one of those things that seems so obvious and so useful that you can&#8217;t believe it hasn&#8217;t existed until now.  At a crucial moment it passes the current global <code>$post</code> variable by reference: during <a href="http://codex.wordpress.org/The_Loop">the Loop</a> right after global variables are set but before they&#8217;re used in the template.
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://pressedwords.com/stuff-new-in-wp-2-8-for-coders/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Paged Comments and the SEO Problem: A Solution</title>
		<link>http://pressedwords.com/solving-wordpress-seo-paged-comments-problem/</link>
		<comments>http://pressedwords.com/solving-wordpress-seo-paged-comments-problem/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 00:26:03 +0000</pubDate>
		<dc:creator>Austin Matzko</dc:creator>
				<category><![CDATA[Pressed Words]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://pressedwords.com/solving-wordpress-seo-paged-comments-problem/</guid>
		<description><![CDATA[The paged comments feature new in WordPress 2.7 is handy for reducing page size, but it introduces the search engine optimization (SEO) problem of putting the same content on different permalinks, as some have pointed out. That&#8217;s because the complete post would appear at all of these permalinks: http://example.com/my-post-permalink/ http://example.com/my-post-permalink/comment-page-1/ http://example.com/my-post-permalink/comment-page-2/ My solution in this [...]]]></description>
			<content:encoded><![CDATA[<p>The paged comments feature new in WordPress 2.7 is handy for reducing page size, but it introduces the search engine optimization (SEO) problem of putting the same content on different permalinks, as <a href="http://comox.textdrive.com/pipermail/wp-hackers/2008-December/023189.html">some have pointed out</a>. That&#8217;s because the complete post would appear at all of these permalinks:</p>
<p><code>http://example.com/my-post-permalink/</code><br />
<code>http://example.com/my-post-permalink/comment-page-1/</code><br />
<code>http://example.com/my-post-permalink/comment-page-2/</code></p>
<p>My solution in this short plugin is to have all but the main permalink show an excerpt of the post, with a link back to the permalink page.</p>
<div class="filosofo-highlight-light php" style="font-family: monospace;"><br />
<br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<br />
<span style="color: #808080; font-style: italic;">/*<br />
&nbsp;Plugin Name: SEO for Paged Comments<br />
&nbsp;Version: 1.0<br />
&nbsp;Description: Reduce SEO problems when using WordPress's paged comments.<br />
&nbsp;Plugin URI: http://pressedwords.com/solving-wordpress-seo-paged-comments-problem/<br />
&nbsp;Author: Austin Matzko<br />
&nbsp;Author URI: http://www.pressedwords.com<br />
&nbsp;*/</span><br />
<br />
<span style="color: #000000; font-weight: bold;">function</span> seo_paged_comments_content_filter<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$t</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">''</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #ff0000">$cpage</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">intval</span><span style="color: #66cc66;">&#40;</span>get_query_var<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'cpage'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #66cc66;">!</span> <span style="color: #000066;">empty</span><span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000">$cpage</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;remove_filter<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'the_content'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'seo_paged_comments_content_filter'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span><br />
&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span style="color: #ff0000">$t</span> <span style="color: #66cc66;">=</span> get_the_excerpt<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span><br />
&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span style="color: #ff0000">$t</span> <span style="color: #66cc66;">.=</span> <span style="color: #000066;">sprintf</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'&lt;p&gt;&lt;a href=&quot;%1$s&quot;&gt;%2$s&lt;/a&gt;&lt;/p&gt;'</span><span style="color: #66cc66;">,</span> get_permalink<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> get_the_title<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">return</span> <span style="color: #ff0000">$t</span><span style="color: #66cc66;">;</span><br />
<span style="color: #66cc66;">&#125;</span><br />
<br />
add_filter<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'the_content'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'seo_paged_comments_content_filter'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span><br />
<br />
&nbsp;</div>
<p><strong>Download:</strong><br />
<a href='http://pressedwords.com/blog/uploads/2008/12/paged-comments-seo.zip'>paged-comments-seo.zip</a><br />
<a href='http://pressedwords.com/blog/uploads/2008/12/paged-comments-seo.tar.gz'>paged-comments-seo.tar.gz</a></p>
]]></content:encoded>
			<wfw:commentRss>http://pressedwords.com/solving-wordpress-seo-paged-comments-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Themes and Vagueness</title>
		<link>http://pressedwords.com/wordpress-themes-and-vagueness/</link>
		<comments>http://pressedwords.com/wordpress-themes-and-vagueness/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 18:05:35 +0000</pubDate>
		<dc:creator>Austin Matzko</dc:creator>
				<category><![CDATA[Pressed Words]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://pressedwords.com/wordpress-themes-and-vagueness/</guid>
		<description><![CDATA[Recently there&#8217;s been a kerfuffle in the WordPress blogosphere over the fact that WordPress.org suddenly removed 200 themes from the Extend repository, in order to make all themes comply with this apparently new stipulation: Themes for sites that support &#8220;premium&#8221; (non-GPL or compatible) themes will not be approved. Alister Cameron has written a post that&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Recently there&#8217;s been a kerfuffle in the WordPress blogosphere <a href="http://spectacu.la/wordpressorg-pull-200-gpl-themes/">over</a> <a href="http://justintadlock.com/archives/2008/12/11/automattic-putting-the-boot-to-premium-theme-developers">the</a> <a href="http://www.jeffro2pt0.com/why-were-200-wordpress-themes-removed">fact</a> that WordPress.org suddenly removed 200 themes from the Extend repository, in order to make all themes comply with <a href="http://wordpress.org/extend/themes/about/">this apparently new stipulation</a>:</p>
<blockquote><p>Themes for sites that support &#8220;premium&#8221; (non-GPL or compatible) themes will not be approved. </p>
</blockquote>
<p>Alister Cameron has written <a href="http://www.alistercameron.com/2008/12/14/matt-mullenweg-wordpress-gpl/">a post that&#8217;s excellent in describing the issue</a> (Matt Mullenweg, head of WordPress.org and the one who removed the themes, <a href="http://www.alistercameron.com/2008/12/14/matt-mullenweg-wordpress-gpl/#comment-19881">seems to like Cameron&#8217;s post too</a>). Here Cameron gets to the heart of the matter:</p>
<blockquote><p>If your theme was pulled and yet it was GPL licensed, there are only two options. Either it was a mistake (email Matt), or you were linking from it to a site that sold other themes that do contravene the GPL. If the latter is the case then you are in the awkward place of making the argument that Matt was wrong to defend the spirit of the GPL, beyond just the letter of it. </p>
</blockquote>
<p>Perhaps unintentionally Cameron highlights the problem with WordPress.org&#8217;s actions: the <a href="http://www.gnu.org/licenses/gpl-2.0.html">GPL</a> does not really have a spirit.  The GPL is a license&#8212;a license that makes possible wonderful things, but still just a legal document.  When you start trying to defend spirits, you stray from interpretation of a legal document into divination.</p>
<p>What that really means is making judgment calls based on vague or ineffable criteria.  WordPress.org can do that because it pays the bills.  Legally and perhaps ethically it&#8217;s justified in excluding themes that overuse the color blue, if the corporation wants.  But in practice, excluding good GPL&#8217;d themes because their authors have sites that &#8220;support&#8221; non-GPL&#8217;d stuff will foster ill-will.  It will seem just as arbitrary as excluding a too-blue theme because the criteria are just as vague, and that arbitrariness will always seem like capriciousness to those on the receiving end of the stick.</p>
<p>In other words, it&#8217;s unclear what constitutes &#8220;support.&#8221;  According to comments on the posts to which I linked above, &#8220;support&#8221; meant just an ad for a premium theme developer.  What about blog posts that promote or otherwise offer aid to premium theme developers&#8212;does that taint a site with &#8220;support&#8221;?  No one should have to parse answers to questions like that.</p>
<p>We don&#8217;t need more vagueness.  One of the main reasons we have more or less precise legal documents and legal systems for their interpretation is that we want to establish confidence in the stability of the system.  We won&#8217;t invest serious time, money, or other resources when we don&#8217;t have confidence about whether our work will be contravened by a subjective judgment call.  Subjective judgment calls are fine for our own lives or the businesses that are under our purview.  But when it comes to a community, when it means possibly hurting others, there should be greater transparency and specificity regarding the criteria.</p>
<p>So WordPress.org should remove that clause forbidding sites that &#8220;support&#8221; non-GPL&#8217;d stuff, not because as an independent, non-profit organization it doesn&#8217;t have the right to do so (it does).  WordPress.org should remove that clause because it harms the WordPress community by introducing unnecessary arbitrariness. </p>
<p>Besides, good GPL&#8217;d themes&#8212;no matter who creates theme&#8212;are a benefit to the community.  We the community get a free theme, and since we&#8217;re adults we&#8217;re capable of deciding whether the theme author&#8217;s site is one that we think worthy of our attention.</p>
<p>There is a good amount of talent in the WordPress themes business.  If the Extend repository becomes hostile to theme authors of quality themes, then the talent will go somewhere else.  That hurts non-technical WordPress users, who benefit from a central repository that they know is free from spammy links and back-door code, and home to top-notch themes. </p>
]]></content:encoded>
			<wfw:commentRss>http://pressedwords.com/wordpress-themes-and-vagueness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monthly Archives Idea</title>
		<link>http://pressedwords.com/tabular-wordpress-archives/</link>
		<comments>http://pressedwords.com/tabular-wordpress-archives/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 04:05:22 +0000</pubDate>
		<dc:creator>Austin Matzko</dc:creator>
				<category><![CDATA[Pressed Words]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://pressedwords.com/tabular-wordpress-archives/</guid>
		<description><![CDATA[Charles Stricklin, WordPress Podcast guru, had an interesting idea for arranging monthly WordPress archives, which is basically to make an archives page like this.]]></description>
			<content:encoded><![CDATA[<p>Charles Stricklin, WordPress Podcast guru, <a href="http://charlesstricklin.com/2008/11/12/crafting-a-different-archives-template/">had an interesting idea for arranging monthly WordPress archives</a>, which is basically to make an archives page like this:</p>
<table>
<tbody>
<tr>
<th>2005</th>
<td><a></td>
<td><a href="http://www.example.com/2005/02/">Feb</a></td>
<td><a></td>
<td><a href="http://www.example.com/2005/04/">Apr</a></td>
<td><a></td>
<td><a href="http://www.example.com/2005/06/">Jun</a></td>
<td><a href="http://www.example.com/2005/07/">Jul</a></td>
<td><a href="http://www.example.com/2005/08/">Aug</a></td>
<td><a href="http://www.example.com/2005/09/">Sep</a></td>
<td><a href="http://www.example.com/2005/10/">Oct</a></td>
<td><a href="http://www.example.com/2005/11/">Nov</a></td>
<td><a href="http://www.example.com/2005/12/">Dec</a></td>
</tr>
<tr>
<th>2006</th>
<td><a href="http://www.example.com/2006/01/">Jan</a></td>
<td><a href="http://www.example.com/2006/02/">Feb</a></td>
<td><a href="http://www.example.com/2006/03/">Mar</a></td>
<td><a href="http://www.example.com/2006/04/">Apr</a></td>
<td><a href="http://www.example.com/2006/05/">May</a></td>
<td><a href="http://www.example.com/2006/06/">Jun</a></td>
<td><a href="http://www.example.com/2006/07/">Jul</a></td>
<td><a href="http://www.example.com/2006/08/">Aug</a></td>
<td><a href="http://www.example.com/2006/09/">Sep</a></td>
<td><a href="http://www.example.com/2006/10/">Oct</a></td>
<td><a href="http://www.example.com/2006/11/">Nov</a></td>
<td><a></td>
</tr>
<tr>
<th>2007</th>
<td><a href="http://www.example.com/2007/01/">Jan</a></td>
<td><a></td>
<td><a></td>
<td><a></td>
<td><a></td>
<td><a></td>
<td><a></td>
<td><a></td>
<td><a></td>
<td><a></td>
<td><a></td>
<td><a></td>
</tr>
<tr>
<th>2008</th>
<td><a href="http://www.example.com/2008/01/">Jan</a></td>
<td><a></td>
<td><a></td>
<td><a href="http://www.example.com/2008/04/">Apr</a></td>
<td><a></td>
<td><a href="http://www.example.com/2008/06/">Jun</a></td>
<td><a></td>
<td><a></td>
<td><a></td>
<td><a href="http://www.example.com/2008/10/">Oct</a></td>
<td><a></td>
<td><a></td>
</tr>
</tbody>
</table>
<p>Here&#8217;s how to do it just using the WordPress API (instead of direct database queries):</p>
<div class="filosofo-highlight-light php" style="font-family: monospace;"><br />
<br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #66cc66;">!</span> <span style="color: #ff0000">$calendar</span> <span style="color: #66cc66;">=</span> wp_cache_get<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&amp;</span><span style="color: #808080; font-style: italic;">#39;year_month_archive&amp;#39;, &amp;#39;archive&amp;#39;) ) {</span><br />
     <span style="color: #ff0000">$calendar</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span><br />
     <span style="color: #ff0000">$year</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">date</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&amp;</span><span style="color: #808080; font-style: italic;">#39;Y&amp;#39;);</span><br />
     <span style="color: #ff0000">$mo_qry</span> <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">new</span> WP_Query<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span><br />
     <span style="color: #ff0000">$yr_qry</span> <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">new</span> WP_Query<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span><br />
     <span style="color: #b1b100;">do</span> <span style="color: #66cc66;">&#123;</span><br />
          <span style="color: #ff0000">$yr_qry</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">query</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&amp;</span><span style="color: #808080; font-style: italic;">#39;year&amp;#39; =&gt; $year, &amp;#39;showposts&amp;#39; =&gt; 1));</span><br />
          <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000">$yr_qry</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">have_posts</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
               <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000">$m</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">;</span> <span style="color: #ff0000">$m</span> <span style="color: #66cc66;">&lt;=</span> <span style="color: #cc66cc;">12</span><span style="color: #66cc66;">;</span> <span style="color: #ff0000">$m</span><span style="color: #66cc66;">++</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
                    <span style="color: #ff0000">$mo_qry</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">query</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&amp;</span><span style="color: #808080; font-style: italic;">#39;year&amp;#39; =&gt; $year, &amp;#39;monthnum&amp;#39; =&gt; $m, &amp;#39;showposts&amp;#39; =&gt; 1));</span><br />
                    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000">$mo_qry</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">have_posts</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
                         <span style="color: #ff0000">$calendar</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000">$year</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000">$m</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066;">date</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&amp;</span><span style="color: #808080; font-style: italic;">#39;M&amp;#39;, mktime(1,1,1, $m, 1, $year)), get_month_link($year, $m));</span><br />
                    <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span><br />
                         <span style="color: #ff0000">$calendar</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000">$year</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000">$m</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&amp;</span><span style="color: #808080; font-style: italic;">#39;&amp;#39;,&amp;#39;&amp;#39;);</span><br />
                    <span style="color: #66cc66;">&#125;</span><br />
               <span style="color: #66cc66;">&#125;</span><br />
          <span style="color: #66cc66;">&#125;</span><br />
          <span style="color: #ff0000">$year</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">intval</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$year</span> <span style="color: #66cc66;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span><br />
     <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">while</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000">$yr_qry</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">have_posts</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span><br />
     <span style="color: #000066;">ksort</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$calendar</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span><br />
     wp_cache_set<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&amp;</span><span style="color: #808080; font-style: italic;">#39;year_month_archive&amp;#39;, $calendar, &amp;#39;archive&amp;#39;);</span><br />
<span style="color: #66cc66;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span><br />
<span style="color: #66cc66;">&lt;</span>table<span style="color: #66cc66;">&gt;</span><br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">foreach</span><span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000">$calendar</span> <span style="color: #b1b100;">as</span> <span style="color: #ff0000">$year</span> <span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000">$m</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><br />
     <span style="color: #66cc66;">&lt;</span>tr<span style="color: #66cc66;">&gt;&lt;</span>th<span style="color: #66cc66;">&gt;&lt;</span>?php <span style="color: #000066;">echo</span> <span style="color: #ff0000">$year</span><span style="color: #66cc66;">;</span> ?<span style="color: #66cc66;">&gt;&lt;/</span>th<span style="color: #66cc66;">&gt;</span><br />
     <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">foreach</span><span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000">$m</span> <span style="color: #b1b100;">as</span> <span style="color: #ff0000">$data</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><br />
          <span style="color: #66cc66;">&lt;</span>td<span style="color: #66cc66;">&gt;&lt;</span>a href<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;&lt;?php echo $data[1]; ?&gt;&quot;</span><span style="color: #66cc66;">&gt;&lt;</span>?php <span style="color: #000066;">echo</span> <span style="color: #ff0000">$data</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">;</span> ?<span style="color: #66cc66;">&gt;&lt;/</span>a<span style="color: #66cc66;">&gt;&lt;/</span>td<span style="color: #66cc66;">&gt;</span>     <br />
     <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endforeach</span><span style="color: #66cc66;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><br />
     <span style="color: #66cc66;">&lt;/</span>tr<span style="color: #66cc66;">&gt;</span><br />
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endforeach</span><span style="color: #66cc66;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span><br />
<span style="color: #66cc66;">&lt;/</span>table<span style="color: #66cc66;">&gt;</span><br />
<br />
&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://pressedwords.com/tabular-wordpress-archives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Happy Halloween</title>
		<link>http://pressedwords.com/happy-halloween/</link>
		<comments>http://pressedwords.com/happy-halloween/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 01:38:56 +0000</pubDate>
		<dc:creator>Austin Matzko</dc:creator>
				<category><![CDATA[Pressed Words]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://pressedwords.com/happy-halloween/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><img src="http://pressedwords.com/blog/uploads/2008/10/wp-pumpkin2.jpg" alt="WordPress Pumpkin" width="500" height="398" class="size-full wp-image-115" /></p>
<p><img src="http://pressedwords.com/blog/uploads/2008/10/wp-pumpkin1.jpg" alt="WordPress Pumpkin" width="500" height="648" class="size-full wp-image-116" /></p>
]]></content:encoded>
			<wfw:commentRss>http://pressedwords.com/happy-halloween/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Does Google Discourage the use of WordPress Permalinks?</title>
		<link>http://pressedwords.com/google-not-attacking-wordpress-permalinks-per-se/</link>
		<comments>http://pressedwords.com/google-not-attacking-wordpress-permalinks-per-se/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 15:06:09 +0000</pubDate>
		<dc:creator>Austin Matzko</dc:creator>
				<category><![CDATA[Pressed Words]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://pressedwords.com/google-not-attacking-wordpress-permalinks-per-se/</guid>
		<description><![CDATA[A recent blog entry by Google&#8217;s Search Quality Team members Juliane Stiller and Kaspar Szymanski somewhat confusingly gives the impression that Google does not like WordPress-style permalinks. Does that mean I should avoid rewriting dynamic URLs at all? That&#8217;s our recommendation, unless your rewrites are limited to removing unnecessary parameters, or you are very diligent [...]]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://googlewebmastercentral.blogspot.com/2008/09/dynamic-urls-vs-static-urls.html">recent blog entry by Google&#8217;s Search Quality Team members Juliane Stiller and Kaspar Szymanski</a> somewhat confusingly gives the impression that Google does not like WordPress-style permalinks.  </p>
<blockquote><p><strong>Does that mean I should avoid rewriting dynamic URLs at all?</strong><br />
That&#8217;s our recommendation, unless your rewrites are limited to removing unnecessary parameters, or you are very diligent in removing all parameters that could cause problems. If you transform your dynamic URL to make it look static you should be aware that we might not be able to interpret the information correctly in all cases.</p>
</blockquote>
<p>A number of bloggers, including <a href="http://wordpressphilippines.org/blog/google-says-dont-use-pretty-permalinks/">Sophia Lucero at WordPress Philippines</a>, draw the conclusion that WordPress permalinks are harmful to PageRank.  However, the specific concerns mentioned by Stiller and Szymanski suggest they are not actually criticizing the standard use of WordPress permalinks.</p>
<p>Instead, the authors&#8217; overriding concern seems to be static URLs that &#8220;could cause [Google] to crawl the same piece of content needlessly via many different URLs,&#8221; and the examples they give are mainly of search queries.  </p>
<p>That&#8217;s not at all like a WordPress permalink for a blog post. A WordPress post has a one-to-one relationship with its permalink, meaning that only that content will be found at that permalink and that post will not appear at any other permalink.  Or at least that&#8217;s the way things should be on a WordPress blog: for a while <abbr title="search engine optimization">SEO</abbr> experts have recommended that the <em>complete</em> content for each blog post appear only at an individual post&#8217;s permalink.  In practice that means making sure that category archives, monthly archives, and the like should show only <em>excerpts</em> of a post, not the complete text.  Most modern WordPress themes do this, but some, especially older themes, do not.</p>
<p>The Google article gives a number of bad examples of &#8220;dynamic&#8221; URLs written as &#8220;static&#8221; URLs, including this one:<br />
<code>www.example.com/article/bin/answer.foo/en/3/98971298178906/URL</code><br />
The problem with this, say the authors, is that when crawling that link it is &#8220;difficult for us to understand that URL and 98971298178906 have nothing to do with the actual content which is returned via this URL.&#8221; (Here &#8220;98971298178906&#8243; is a session id).  The authors don&#8217;t even recommend simplifying the URL to something like <code>www.example.com/article/bin/answer.foo/en/3</code>:</p>
<blockquote><p>Although we are able to process this URL correctly, we would still discourage you from using this rewrite as it is hard to maintain and needs to be updated as soon as a new parameter is added to the original dynamic URL</p>
</blockquote>
<p>Again, the concern seems to be that the bad &#8220;permalink&#8221; example does not have a one-to-one relationship with the content.  &#8220;98971298178906&#8243; is particular to the site visitor, not the site&#8217;s content, and even &#8220;answer.foo/en/3&#8243; could change when that answer is no longer the third one.</p>
<p>So the main lesson a WordPress blogger should take from this is the old lesson of SEO: avoid duplicate content.  WordPress permalinks that are one-to-one with their content and have relevant keywords are good for SEO.  They combine the benefits of static URLs mentioned by the authors, such as higher click-through rate, without the deficits.</p>
]]></content:encoded>
			<wfw:commentRss>http://pressedwords.com/google-not-attacking-wordpress-permalinks-per-se/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Who&#8217;s Using WordPress 5 Years Later</title>
		<link>http://pressedwords.com/percentage-using-wordpress-five-year-anniversary/</link>
		<comments>http://pressedwords.com/percentage-using-wordpress-five-year-anniversary/#comments</comments>
		<pubDate>Tue, 27 May 2008 15:35:23 +0000</pubDate>
		<dc:creator>Austin Matzko</dc:creator>
				<category><![CDATA[Pressed Words]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://pressedwords.com/percentage-using-wordpress-five-year-anniversary/</guid>
		<description><![CDATA[In honor of WordPress&#8217;s fifth birthday, I&#8217;ve surveyed about 6000 blogs to see how many are running WordPress. This is the same group that I queried back in January, when I created a spider that harvested the blogs from all of Technorati&#8217;s main blogging categories. CMS Count Percentage WordPress 2178 34.3 Unknown 1523 23.98 Blogger [...]]]></description>
			<content:encoded><![CDATA[<p>In honor of <a href="http://wordpress.org/development/2008/05/birthday-party/">WordPress&#8217;s fifth birthday</a>, I&#8217;ve surveyed about 6000 blogs to see how many are running WordPress.  This is the same group that I queried back in <a href="http://pressedwords.com/how-many-bloggers-use-each-version-of-wordpress/">January</a>, when I created a spider that harvested the blogs from all of Technorati&#8217;s main blogging categories. </p>
<p><img src="http://pressedwords.com/blog/uploads/2008/05/may2008cmspiechart.png" alt="" width="500" height="319" class="alignnone size-full wp-image-81" /></p>
<table>
<tr>
<th>CMS</th>
<th>Count</th>
<th>Percentage</th>
</tr>
<tr>
<td>WordPress</td>
<td>2178</td>
<td>34.3</td>
</tr>
<tr>
<td>Unknown</td>
<td>1523</td>
<td>23.98</td>
</tr>
<tr>
<td>Blogger</td>
<td>1207</td>
<td>19.01</td>
</tr>
<tr>
<td>Typepad</td>
<td>340</td>
<td>5.35</td>
</tr>
<tr>
<td>Movable Type</td>
<td>338</td>
<td>5.32</td>
</tr>
<tr>
<td>WordPress.com</td>
<td>136</td>
<td>2.14</td>
</tr>
</table>
<p>As you can see, WordPress dominates the known blogging platform world.  From the numbers below, it looks as though most active WordPress users are keeping updated.  </p>
<p><img src="http://pressedwords.com/blog/uploads/2008/05/may2008minorversions.png" alt="" width="500" height="184" class="alignnone size-full wp-image-79" /></p>
<p><img src="http://pressedwords.com/blog/uploads/2008/05/may2008majorversions.png" alt="" width="478" height="317" class="alignnone size-full wp-image-80" /></p>
]]></content:encoded>
			<wfw:commentRss>http://pressedwords.com/percentage-using-wordpress-five-year-anniversary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Restoring Your WordPress 2.5 Password in the Database</title>
		<link>http://pressedwords.com/restore-wordpress-user-password-in-database/</link>
		<comments>http://pressedwords.com/restore-wordpress-user-password-in-database/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 03:39:31 +0000</pubDate>
		<dc:creator>Austin Matzko</dc:creator>
				<category><![CDATA[Pressed Words]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://pressedwords.com/restore-wordpress-user-password-in-database/</guid>
		<description><![CDATA[WordPress 2.5 introduced a much more thorough password-hashing algorithm with PHPass. That is great for security, but I was afraid that it would make restoring your WordPress password in the database almost impossible. You see, prior to 2.5, if you needed to reset your password, you could just hash it using md5 and put it [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress 2.5 introduced a much more thorough password-hashing algorithm with PHPass.  That is great for security, but I was afraid that it would make restoring your WordPress password in the database almost impossible.  You see, prior to 2.5, if you needed to reset your password, you could just hash it using md5 and put it directly in the wp_users table, as described <a href="http://codex.wordpress.org/Resetting_Your_Password">here</a>.</p>
<p>The good news&#8212;surprisingly&#8212;is that you can still do that in 2.5, as <a href="http://comox.textdrive.com/pipermail/wp-hackers/2008-April/019484.html">DD32 pointed out on the WordPress hackers mailing list</a>.  You can thank <code>wp_check_password()</code>, which checks to see if your stored password is still in md5 form, and if so, it lets you log in and then converts it.</p>
]]></content:encoded>
			<wfw:commentRss>http://pressedwords.com/restore-wordpress-user-password-in-database/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Right Way to Use JavaScript in Your WordPress Plugin</title>
		<link>http://pressedwords.com/wordpress-javascript-compatibility/</link>
		<comments>http://pressedwords.com/wordpress-javascript-compatibility/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 14:27:32 +0000</pubDate>
		<dc:creator>Austin Matzko</dc:creator>
				<category><![CDATA[Pressed Words]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://pressedwords.com/wordpress-javascript-compatibility/</guid>
		<description><![CDATA[Ozh explains how to properly use JavaScript in your WordPress plugins. There are two key parts: Use wp_enqueue_script() to load external libraries and standalone scripts, instead of generating your own script header tags. On admin pages, use the admin_print_scripts-[mypage] action hook to register the code on only your plugin&#8217;s page, not every admin page. Both [...]]]></description>
			<content:encoded><![CDATA[<p>Ozh explains how to <a href="http://planetozh.com/blog/2008/04/how-to-load-javascript-with-your-wordpress-plugin/">properly use JavaScript in your WordPress plugins</a>.  There are two key parts:</p>
<ol>
<li>Use <code>wp_enqueue_script()</code> to load external libraries and standalone scripts, instead of generating your own script header tags.</li>
<li>On admin pages, use the <code>admin_print_scripts-[mypage]</code> action hook to register the code on only your plugin&#8217;s page, not every admin page.</li>
</ol>
<p>Both of those techniques have been available since WordPress 2.1, so plugin authors can be pretty confident that there will be no backwards-compatibility issues in employing them.  (Despite the fact that WordPress is <a href="http://wordpress.org/download/legacy/">maintaining the 2.0.x version line until 2010</a>, my research suggests that the <a href="http://pressedwords.com/how-many-bloggers-use-each-version-of-wordpress/">number of users of that branch is insignificant</a>.) </p>
<p>I would add one more tip to Ozh&#8217;s: don&#8217;t pollute the global JavaScript namespace, especially with the over-used &#8220;$&#8221;.  A number of JavaScript libraries use the dollar sign in different ways, so you can run into problems if, for example, you&#8217;re using jQuery but another plugin has loaded Prototype. </p>
<p>Fortunately, jQuery makes it easy to <a href="http://docs.jquery.com/Using_jQuery_with_Other_Libraries">use &#8220;$&#8221; in a friendly way with other libraries</a>. My favorite is to wrap jQuery-based code in something like the following, which employs <code>$</code> outside of the global namespace <em>and</em> waits to execute the script until after the DOM has loaded. </p>
<p><code>jQuery(function($) { /* some code that uses $ */ });</code></p>
]]></content:encoded>
			<wfw:commentRss>http://pressedwords.com/wordpress-javascript-compatibility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Database Errors and the Post Hoc Fallacy</title>
		<link>http://pressedwords.com/instapundit-on-wordpress/</link>
		<comments>http://pressedwords.com/instapundit-on-wordpress/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 20:48:46 +0000</pubDate>
		<dc:creator>Austin Matzko</dc:creator>
				<category><![CDATA[Pressed Words]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://pressedwords.com/instapundit-on-wordpress/</guid>
		<description><![CDATA[Glenn Reynolds at Instapundit mentioned WordPress today in not-so-flattering terms (emphasis added): LIEBERMAN CAMPAIGN CRASHED OWN WEBSITE: &#8220;The server that hosted the joe2006.com Web site failed because it was overutilized and misconfigured.&#8221; That&#8217;s like when people send me a link to their underpowered WordPress blog, then it produces a &#8220;Database Error&#8221; message when too many [...]]]></description>
			<content:encoded><![CDATA[<p>Glenn Reynolds at <a href="http://instapundit.com/archives2/017681.php">Instapundit mentioned WordPress today</a> in not-so-flattering terms (emphasis added):</p>
<blockquote><p>LIEBERMAN CAMPAIGN <a href="http://www.stamfordadvocate.com/localnews/ci_8859029">CRASHED OWN WEBSITE</a>: &#8220;The server that hosted the joe2006.com Web site failed because it was overutilized and misconfigured.&#8221; That&#8217;s like when people send me a link to their underpowered WordPress blog, then it produces a &#8220;Database Error&#8221; message when too many people try to actually read it. I hate that. (<em>Yeah, this happens elsewhere sometimes, but low-power WordPress blogs seem particularly susceptible.</em>)</p>
</blockquote>
<p>Until WordPress version 2.5, a failed database would generate error screens like the one below:</p>
<p><img src="http://pressedwords.com/blog/uploads/2008/04/db_error.jpg" alt="" width="500" height="282" class="alignnone size-full wp-image-46" /></p>
<p>Note the nifty WordPress branding that appears at the top.  Thanks to that, <a href="http://en.wikipedia.org/wiki/Slashdot_effect">countless Diggers, Slashdotters, and the like</a> began to associate WordPress with failure.  This is a <a href="http://en.wikipedia.org/wiki/Post_hoc_ergo_propter_hoc">post hoc fallacy</a> of course: plenty of sites that buckle under the loads brought by Digg are not powered by WordPress, and many WordPress sites that survive a slashdotting are powered by WordPress.  But in both of those cases, it&#8217;s not obvious; no giant logo greets you to say &#8220;WordPress powers this site, which is staying up just fine!&#8221;</p>
<p>In my opinion, WordPress version 2.5 solved this problem the right way, by adding a non-branded database error message:</p>
<p><img src="http://pressedwords.com/blog/uploads/2008/04/db_error_new.jpg" alt="" width="500" height="92" class="alignnone size-full wp-image-47" /></p>
<p>Other people, including both WordPress <a href="http://technosailor.com/2008/04/10/solving-the-wordpress-traffic-overload-problem/">proponents</a> and <a href="http://www.movabletype.com/blog/2008/03/a-wordpress-25-upgrade-guide.html">opponents</a>, think WordPress lacks something by not allowing all of its users to handle heavy database stress.  I&#8217;m not so sure.  </p>
<p>Flexibility is a large part of what makes WordPress such a great application to write  code for.  If you let plugins do just about anything imaginable on every page load, there&#8217;s a good chance that a small host&#8217;s database won&#8217;t be able to handle all of that in the face of a slashdotting.  And that&#8217;s okay.  The vast majority of WordPress users won&#8217;t ever be slashdotted, and so they don&#8217;t need the extra complication, potential server problems, and plugin incompatibilities that built-in caching would produce.  </p>
<p>If yours is the type of site that&#8217;s going to suffer under the Digg effect, then you can install one of the caching plugins to help you endure, or you can count on superior server resources.  Everyone else will be just fine.</p>
]]></content:encoded>
			<wfw:commentRss>http://pressedwords.com/instapundit-on-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
