<?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>warpedvisions.org &#187; tagging</title>
	<atom:link href="http://warpedvisions.org/tag/tagging/feed/" rel="self" type="application/rss+xml" />
	<link>http://warpedvisions.org</link>
	<description>A technical tumblelog of links and articles on programming, design, and other geek interests</description>
	<lastBuildDate>Sat, 12 Jun 2010 21:20:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Simple-tags, a plugin for tag management in WordPress</title>
		<link>http://warpedvisions.org/2008/05/04/simple-tags-a-plugin-for-tag-management-in-wordpress/</link>
		<comments>http://warpedvisions.org/2008/05/04/simple-tags-a-plugin-for-tag-management-in-wordpress/#comments</comments>
		<pubDate>Sun, 04 May 2008 18:28:51 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[tagging]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/?p=1884</guid>
		<description><![CDATA[WordPress&#8217;s tagging feature is good, but it lacks mass-editing.  Healthy taxonomies need regular maintenance too, so I went hunting through tag plugins compatible with 2.5.1.   I found Simple-tags, which is proving handy for nudging around the tags on my 2,000 or so posts.

Useful features:


Bulk tag delete and rename, including tags listed by <a rel="tag" target="_new" href="http://google.com/search?q=\%20&#38;btnI=">...</a>]]></description>
			<content:encoded><![CDATA[<p>WordPress&#8217;s tagging feature is good, but it lacks mass-editing.  Healthy taxonomies need regular maintenance too, so I went hunting through tag plugins compatible with 2.5.1.   I found <a href="http://code.google.com/p/simple-tags/wiki/ThemeIntegration">Simple-tags</a>, which is proving handy for nudging around the tags on my 2,000 or so posts.</p>

<p>Useful features:</p>

<ul>
<li>Bulk tag delete and rename, including tags listed by popularity</li>
<li>Tag grouping, which allows you to add a tag that encompasses other tags</li>
<li>Auto-tagging, on post-save or en-mass</li>
</ul>

<p>While it takes some time to clean up a tag space, it&#8217;s at least <a href="http://warpedvisions.org/tags/">possible now</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2008/05/04/simple-tags-a-plugin-for-tag-management-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Listing categories using WordPress 2.3&#8217;s new taxonomy system</title>
		<link>http://warpedvisions.org/2007/10/06/listing-categories-using-wordpress-23s-new-taxonomy-system/</link>
		<comments>http://warpedvisions.org/2007/10/06/listing-categories-using-wordpress-23s-new-taxonomy-system/#comments</comments>
		<pubDate>Sat, 06 Oct 2007 23:59:43 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[Micro Blog]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[tagging]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/2007/10/06/listing-categories-using-wordpress-23s-new-taxonomy-system/</guid>
		<description><![CDATA[I upgraded to Wordpress 2.3 today, which broke a few of my hacked plugins.  The code broke as it relied on the old category system, which was replaced by a new, more flexible, taxonomy system.  The new schema is well designed too, and the new queries are much cleaner as a result.  <a rel="tag" target="_new" href="http://google.com/search?q=\%20&#38;btnI=">...</a>]]></description>
			<content:encoded><![CDATA[<p>I upgraded to <a href="http://codex.wordpress.org/Version_2.3">Wordpress 2.3</a> today, which broke a few of my hacked plugins.  The code broke as it relied on the old category system, which was replaced by a new, more flexible, <a href="http://boren.nu/archives/2007/08/26/wordpress-23-taxonomy-schema/">taxonomy system</a>.  The new schema is well designed too, and the new queries are much cleaner as a result.  Here&#8217;s an example of how to get a list of categories<sup>1</sup>:</p>

<pre>SELECT *
    FROM wp_terms AS t 
JOIN wp_term_taxonomy AS tx 
    ON t.term_id = tx.term_id 
JOIN wp_term_relationships AS tr 
    ON tr.term_taxonomy_id = tx.term_taxonomy_id 
WHERE taxonomy = 'category' 
GROUP BY t.term_id
ORDER BY count DESC, t.term_id;</pre>

<p>The new taxonomy approach introduces the possibility of displaying better clusters of categories, by including tags in the mix.  It also cleans up the SQL from the previous releases with simpler ways of getting <code>count</code> and a clearer relationship mechanism.  The table design is clean too, a big improvement over <a href="http://warpedvisions.org/2005/11/06/wordpress-schema/">past schemas</a>.</p>
<ol class="footnotes"><li id="footnote_0_1605" class="footnote">Of course, you would use the public category/taxonomy APIs if this was all you needed</li></ol>]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2007/10/06/listing-categories-using-wordpress-23s-new-taxonomy-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shifting UI gears</title>
		<link>http://warpedvisions.org/2007/06/22/shifting-ui-gears/</link>
		<comments>http://warpedvisions.org/2007/06/22/shifting-ui-gears/#comments</comments>
		<pubDate>Fri, 22 Jun 2007 22:56:56 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[Ideas]]></category>
		<category><![CDATA[tagging]]></category>
		<category><![CDATA[thought]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/2007/06/22/shifting-ui-gears/</guid>
		<description><![CDATA[I realized something today: I&#8217;ve been tagging slick site layouts as user interface inspiration.  My thinking has shifted from thinking about user interfaces as buttons and boxes, to thinking of it as how information is presented: the aesthetics, the flow, and the grokability.   Interfaces aren&#8217;t just facades for tools, but a face <a rel="tag" target="_new" href="http://google.com/search?q=\%20&#38;btnI=">...</a>]]></description>
			<content:encoded><![CDATA[<p>I realized something today: I&#8217;ve been <a href="http://del.icio.us/madmaxx/ui_inspiration">tagging</a> slick site layouts as <em>user interface inspiration</em>.  My thinking has shifted from thinking about user interfaces as buttons and boxes, to thinking of it as how information is presented: the aesthetics, the flow, and the <a rel="tag" target="_new" href="http://google.com/search?q=grokability&amp;">grokability</a>.   Interfaces aren&#8217;t just facades for tools, but a face for the flow of information between people via the machine.</p>
]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2007/06/22/shifting-ui-gears/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Business cards 2.0</title>
		<link>http://warpedvisions.org/2007/05/26/business-cards-20/</link>
		<comments>http://warpedvisions.org/2007/05/26/business-cards-20/#comments</comments>
		<pubDate>Sat, 26 May 2007 22:13:16 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[tagging]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/2007/05/26/business-cards-20/</guid>
		<description><![CDATA[A great business card idea: using a tag cloud on the back side.
]]></description>
			<content:encoded><![CDATA[<p>A great business card idea: <a href="http://www.abduzeedo.com/creating-new-business-card">using a tag cloud on the back side</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2007/05/26/business-cards-20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The tagged path to success</title>
		<link>http://warpedvisions.org/2007/05/17/the-tagged-path-to-success/</link>
		<comments>http://warpedvisions.org/2007/05/17/the-tagged-path-to-success/#comments</comments>
		<pubDate>Thu, 17 May 2007 20:29:16 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[Ideas]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[tagging]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/2007/05/17/the-tagged-path-to-success/</guid>
		<description><![CDATA[Tags are one of two things that make web tools better than client-side applications (the other being the possibilities in social linking).  But for tags to really stick, they need to do more than group things together.  Tags need to be shared between people, which makes the things they tag more useful.  <a rel="tag" target="_new" href="http://google.com/search?q=\%20&#38;btnI=">...</a>]]></description>
			<content:encoded><![CDATA[<p>Tags are one of two things that make web tools better than client-side applications (the other being the possibilities in social linking).  But for tags to really stick, they need to do more than group things together.  Tags need to be shared between people, which makes the things they tag more useful.  Tags also need to somehow underscore the essence of the grouping, so the groups themselves can be compared and related.  This is where the power of tags really shines.</p>
]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2007/05/17/the-tagged-path-to-success/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox plugin of the year (or howto make del.icio.us personally useful)</title>
		<link>http://warpedvisions.org/2007/04/07/firefox-plugin-of-the-year-or-howto-make-delicious-personally-useful/</link>
		<comments>http://warpedvisions.org/2007/04/07/firefox-plugin-of-the-year-or-howto-make-delicious-personally-useful/#comments</comments>
		<pubDate>Sat, 07 Apr 2007 17:40:13 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[Howto]]></category>
		<category><![CDATA[make]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[tagging]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[zen]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/2007/04/07/firefox-plugin-of-the-year-or-howto-make-delicious-personally-useful/</guid>
		<description><![CDATA[I love the concept of del.icio.us, but because it&#8217;s separate from the browser it&#8217;s a pain to use.  Enter the del.icio.us Firefox plugin, which replaces Firefox&#8217;s weak bookmark tool with taglicious zen.  Most excellent.
]]></description>
			<content:encoded><![CDATA[<p>I love the concept of del.icio.us, but because it&#8217;s separate from the browser it&#8217;s a pain to use.  Enter the <a href="https://addons.mozilla.org/en-US/firefox/addon/3615">del.icio.us Firefox plugin</a>, which replaces Firefox&#8217;s weak bookmark tool with taglicious zen.  Most excellent.</p>
]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2007/04/07/firefox-plugin-of-the-year-or-howto-make-delicious-personally-useful/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vista on the home stretch</title>
		<link>http://warpedvisions.org/2006/11/08/vista-on-the-home-stretch/</link>
		<comments>http://warpedvisions.org/2006/11/08/vista-on-the-home-stretch/#comments</comments>
		<pubDate>Wed, 08 Nov 2006 23:57:36 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Art]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tagging]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/2006/11/08/vista-on-the-home-stretch/</guid>
		<description><![CDATA[Vista&#8217;s last mile, a report on the time crunch leading up to the impending release.  The article has a few tidbits on how Vista is being tested:


  With each day&#8217;s build, Microsoft is running a battery of automated tests against around 1,000 of the leading software programs. It has written 750,000 lines of <a rel="tag" target="_new" href="http://google.com/search?q=\%20&#38;btnI=">...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://news.com.com/Vistas+last+mile/2009-1016_3-6133357.html?tag=st.num">Vista&#8217;s last mile</a>, a report on the time crunch leading up to the impending release.  The article has a few tidbits on how Vista is being tested:</p>

<blockquote>
  <p>With each day&#8217;s build, Microsoft is running a battery of automated tests against around 1,000 of the leading software programs. It has written 750,000 lines of code just to create the test patterns, which take 355 servers the better part of the day to run.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2006/11/08/vista-on-the-home-stretch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gnome&#8217;s F-spot</title>
		<link>http://warpedvisions.org/2006/11/01/gnomes-f-spot/</link>
		<comments>http://warpedvisions.org/2006/11/01/gnomes-f-spot/#comments</comments>
		<pubDate>Thu, 02 Nov 2006 04:31:39 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[tagging]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/2006/11/01/gnomes-f-spot/</guid>
		<description><![CDATA[Check out Gnome&#8217;s newest photo management tool, F-spot.  It&#8217;s written in C#/GTK# with Mono, and is easy to use.  It imported 15k of photos in just a few minutes, making it fun/easy/quick to browse, tag, edit, and upload the shots to Flickr.  The Free tools just keep on getting better and better.
]]></description>
			<content:encoded><![CDATA[<p>Check out Gnome&#8217;s newest photo management tool, <a href="http://f-spot.org/Main_Page">F-spot</a>.  It&#8217;s written in C#/<a href="http://gtk-sharp.sourceforge.net/">GTK#</a> with <a href="http://www.mono-project.com/Main_Page">Mono</a>, and is easy to use.  It imported 15k of photos in just a few minutes, making it fun/easy/quick to browse, tag, edit, and upload the shots to <a href="http://www.flickr.com/photos/warpedvisions/">Flickr</a>.  The Free tools just keep on getting better and better.</p>
]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2006/11/01/gnomes-f-spot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML/XML Vim extensions</title>
		<link>http://warpedvisions.org/2006/10/18/htmlxml-vim-extensions/</link>
		<comments>http://warpedvisions.org/2006/10/18/htmlxml-vim-extensions/#comments</comments>
		<pubDate>Wed, 18 Oct 2006 20:23:02 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[automatic]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[tagging]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/2006/10/18/htmlxml-vim-extensions/</guid>
		<description><![CDATA[Here&#8217;s a plugin to automatically close XML/HTML tags in Vim, and some general Vim HTML/XML tools and mappings.
]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a <a href="http://www.vim.org/scripts/script.php?script_id=13">plugin to automatically close XML/HTML tags</a> in Vim, and <a href="http://www.infynity.spodzone.com/vim/HTML/">some general Vim HTML/XML tools and mappings</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2006/10/18/htmlxml-vim-extensions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flickr tagging</title>
		<link>http://warpedvisions.org/2006/09/03/flickr-tagging/</link>
		<comments>http://warpedvisions.org/2006/09/03/flickr-tagging/#comments</comments>
		<pubDate>Sun, 03 Sep 2006 18:08:30 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[tagging]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/2006/09/03/flickr-tagging/</guid>
		<description><![CDATA[A Flickr tagging game, in the spirit of the new Google image tagging game.  Isn&#8217;t tagging fun?
]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://randomchaos.com/games/fastr/">Flickr tagging game</a>, in the spirit of the new <a href="http://images.google.com/imagelabeler/">Google image tagging game</a>.  Isn&#8217;t tagging fun?</p>
]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2006/09/03/flickr-tagging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Google game</title>
		<link>http://warpedvisions.org/2006/09/01/a-google-game/</link>
		<comments>http://warpedvisions.org/2006/09/01/a-google-game/#comments</comments>
		<pubDate>Fri, 01 Sep 2006 19:16:11 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[tagging]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/2006/09/01/a-google-game/</guid>
		<description><![CDATA[Google has made a game out of getting people to taggify their vast image repository.
]]></description>
			<content:encoded><![CDATA[<p>Google has made a <a href="http://images.google.com/imagelabeler/">game out of getting people to taggify their vast image repository</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2006/09/01/a-google-game/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Concurrent programming on Windows and multi-core</title>
		<link>http://warpedvisions.org/2006/09/01/concurrent-programming-on-windows-and-multi-core/</link>
		<comments>http://warpedvisions.org/2006/09/01/concurrent-programming-on-windows-and-multi-core/#comments</comments>
		<pubDate>Fri, 01 Sep 2006 17:28:52 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Art]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[cpu]]></category>
		<category><![CDATA[oss]]></category>
		<category><![CDATA[tagging]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/2006/09/01/concurrent-programming-on-windows-and-multi-core/</guid>
		<description><![CDATA[Taking Advantage of Concurrent Programming for Windows (part 1 and part 2).    The shift to multiple core CPUs changes what&#8217;s possible for application scalability.
]]></description>
			<content:encoded><![CDATA[<p>Taking Advantage of Concurrent Programming for Windows (<a href="http://www.devx.com/amd/Article/32246">part 1</a> and <a href="http://www.devx.com/amd/Article/32301">part 2</a>).    The shift to multiple core CPUs changes what&#8217;s possible for application scalability.</p>
]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2006/09/01/concurrent-programming-on-windows-and-multi-core/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flickr Web2.0 parody page</title>
		<link>http://warpedvisions.org/2006/07/26/flickr-web20-parody-page/</link>
		<comments>http://warpedvisions.org/2006/07/26/flickr-web20-parody-page/#comments</comments>
		<pubDate>Wed, 26 Jul 2006 17:08:11 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[interesting]]></category>
		<category><![CDATA[logos]]></category>
		<category><![CDATA[tagging]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/2006/07/26/flickr-web20-parody-page/</guid>
		<description><![CDATA[A Flickr summary of the Web2.0-ization parody of company logos linked by Kottke yesterday.
]]></description>
			<content:encoded><![CDATA[<p>A <a rel="tag" target="_new" href="http://google.com/search?q=flickr&amp;btnI=">Flickr</a> <a href="http://www.flickr.com/photos/tags/yay2dot0logoparody/interesting/">summary of the Web2.0-ization parody of company logos</a> linked by <a rel="tag" target="_new" href="http://google.com/search?q=kottke&amp;btnI=">Kottke</a> yesterday.</p>
]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2006/07/26/flickr-web20-parody-page/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scaling Ruby</title>
		<link>http://warpedvisions.org/2006/03/16/scaling-ruby/</link>
		<comments>http://warpedvisions.org/2006/03/16/scaling-ruby/#comments</comments>
		<pubDate>Fri, 17 Mar 2006 02:33:13 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[adventure]]></category>
		<category><![CDATA[Art]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scale]]></category>
		<category><![CDATA[tagging]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/2006/03/16/scaling-ruby/</guid>
		<description><![CDATA[The adventures of scaling, a story about a successful, large scale Ruby site.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://poocs.net/articles/2006/03/13/the-adventures-of-scaling-stage-1">The adventures of scaling</a>, a story about a successful, large scale Ruby site.</p>
]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2006/03/16/scaling-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Regex of the day: Optional HTML tags</title>
		<link>http://warpedvisions.org/2005/11/11/regex-of-the-day-optional-html-tags/</link>
		<comments>http://warpedvisions.org/2005/11/11/regex-of-the-day-optional-html-tags/#comments</comments>
		<pubDate>Fri, 11 Nov 2005 22:19:28 +0000</pubDate>
		<dc:creator>mx</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Weblog]]></category>
		<category><![CDATA[Art]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[oss]]></category>
		<category><![CDATA[parsers]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[self]]></category>
		<category><![CDATA[simplicity]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[tagging]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[wiki]]></category>
		<category><![CDATA[wikipedia]]></category>

		<guid isPermaLink="false">http://warpedvisions.org/2005/11/11/regex-of-the-day-optional-html-tags/</guid>
		<description><![CDATA[It&#8217;s one of those regex-laden days, and I&#8217;m really starting to grok more complicated expressions:

^(?:\s+&#124;)&#60;(\w+)(?:\s+&#124;)((?:.*?&#124;))&#62;(.*?)(?:&#60;\/(.*?)&#62;&#124;)(?:\s+&#124;)$

This expression parses a line that contains HTML tags based on the following logic, expecting that:


There will be a start tag near the beginning of the line, possibly padded on the left with spaces that are ignored
The opening tag may contain <a rel="tag" target="_new" href="http://google.com/search?q=\%20&#38;btnI=">...</a>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s one of those <a rel="tag" target="_new" href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?query=regex&amp;action=Search">regex</a>-laden days, and I&#8217;m really starting to <a rel="tag" target="_new" href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?query=grok&amp;action=Search">grok</a> more complicated expressions:</p>

<pre style="font-size: 80%">^(?:\s+|)&lt;(\w+)(?:\s+|)((?:.*?|))&gt;(.*?)(?:&lt;\/(.*?)&gt;|)(?:\s+|)$</pre>

<p>This expression parses a line that contains <a rel="tag" target="_new" href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?query=html&amp;action=Search">HTML</a> tags based on the following logic, expecting that:</p>

<ol>
<li>There will be a start tag near the beginning of the line, possibly padded on the left with spaces that are ignored</li>
<li>The opening tag may contain some HTML parameters</li>
<li>There may be a closing tag on the line</li>
<li>There may be spaces on the right of the closing tag that will be ignored</li>
</ol>

<p>The expression will parse the following example into 4 parts:</p>

<pre>&lt;h1 id="test"&gt;This is a test&lt;/h1&gt;</pre>

<ol>
<li>h1</li>
<li>id=&#8221;test&#8221;</li>
<li>This is a test</li>
<li>h1</li>
</ol>

<p>Learning regex to the point of being able to write complex expressions has taken a couple of years, but has been well worth the effort.  To define the same parsing logic in C or C++ (using standard mechanisms) would take 20-30 minutes, and would occupy a page of code.  You just have to remember that a regex is a small script, and that it should be tested (and documented) like one.</p>

<p>Regex is like a lot of <a href="http://en.wikipedia.org/wiki/Domain-specific_language">little languages</a> too (like SQL, bash, m4).  It&#8217;s terribly useful, succinct, and worth having in your toolkit.  It&#8217;s not something to hide in layers of abstraction either, rather it&#8217;s something that deserves use alongside your &#8216;real&#8217; tools.  I find that developers are in the habit of hiding (or hiding from) little languages, something that results in the too-many-elbows syndrome: insulating yourself from the real power of your tools, making things more complicated in the process.</p>

<p>Simple, in the end, is in the knowledge of the beholder.  If you understand regex, code that contains it can be simpler.</p>
]]></content:encoded>
			<wfw:commentRss>http://warpedvisions.org/2005/11/11/regex-of-the-day-optional-html-tags/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
