<?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>Zenovation's Blog &#187; Tools</title>
	<atom:link href="http://zenovations.com/blog/tag/tools/feed/" rel="self" type="application/rss+xml" />
	<link>http://zenovations.com/blog</link>
	<description>A blog about web design, programming, hosting, and virtualmin hacks</description>
	<lastBuildDate>Mon, 16 Jan 2012 15:01:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Project Management and Time Tracking</title>
		<link>http://zenovations.com/blog/2010/07/project-management-and-time-tracking/</link>
		<comments>http://zenovations.com/blog/2010/07/project-management-and-time-tracking/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 23:30:41 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[time tracking]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://zenovations.com/blog/?p=201</guid>
		<description><![CDATA[The world of Time Tracking and Project Management is a vast one. For small businesses like ours, there are seemingly endless time tracking solutions and a good number of project management answers.  I spent nearly two weeks evaluating options in my spare time, so hopefully this data will help save you some time. Here are [...]]]></description>
			<content:encoded><![CDATA[<p>The world of Time Tracking and Project Management is a vast one. For small businesses like ours, there are seemingly endless time tracking solutions and a good number of project management answers.  I spent nearly two weeks evaluating options in my spare time, so hopefully this data will help save you some time.</p>
<p><span id="more-201"></span></p>
<p>Here are the criteria I used to narrow down the possible project management and time tracking solutions:</p>
<ul>
<li>Web based application<br />
<span style="color: #888888;">Our devs use various platforms and it needs to run everywhere without install and upgrade headaches, I also considered Air and Flash apps</span></li>
<li>Support for 5 users<br />
<span style="color: #808080;">Because, yanno, we need five people to record time</span></li>
<li>Time tracking must include timer with start/stop capabilities<br />
<span style="color: #808080;">We are multi taskers and like accuracy; we considered products with timer widgets as well</span></li>
<li>Feature list and pricing prominent<br />
<span style="color: #888888;">Excluded all sites with vague details, no screenshots,  or &#8220;contact us for details and pricing&#8221; models, due to sheer volume and time needed to research</span></li>
<li>Must have a free trial evaluation<br />
<span style="color: #888888;">Yanno, so I could evaluate them</span></li>
<li>Professional and sharp web site<br />
<span style="color: #888888;">Attention to detail is critical to good software design and project management, how they run their site should reflect this</span></li>
</ul>
<p>After nearly ten hours of research, I narrowed the field to fifteen products. Then I evaluated each product by importing several of our current projects into it and using the time tracking tools for one day. After which I ran reports and recorded my findings in a spreadsheet. The final ratings were on a 1-5 scale, based on usability, project management capabilities, time tracking capabilities, invoicing features, reporting capabilities, and API and integration tools. Here&#8217;s what I came up with:</p>
<p><a href="http://zenovations.com/blog/wp-content/uploads/2010/07/product_quality.png"><img class="alignnone size-full wp-image-208" title="product_quality" src="http://zenovations.com/blog/wp-content/uploads/2010/07/product_quality.png" alt="" width="800" height="600" /></a></p>
<p>Once I had some numbers to work with, I weighted each product to meet our needs, based on the following criteria:</p>
<ul>
<li>Usability: Ease and speed of use is very important to us, as we have little time for project management (x2)</li>
<li>Time tracking capabilities: highly critical (x5)</li>
<li>Project management capabilities: highly critical (x5)</li>
<li>Low price:  we want to keep the price under $50 a month, so our value calculation was tweaked accordingly:  rating *3 &#8211; (price per month/10)</li>
<li>Invoicing, reports, and so on are nice, of course, but we can make due with our external, existing solutions</li>
</ul>
<p>So, using this data, here were my findings:</p>
<p><a href="http://zenovations.com/blog/wp-content/uploads/2010/07/value_to_us.png"><img class="size-full wp-image-206 alignnone" title="value_to_us" src="http://zenovations.com/blog/wp-content/uploads/2010/07/value_to_us.png" alt="" width="800" height="600" /></a></p>
<p>It should be apparent that ProWorkflow is, hands down, the best overall product on the market. It&#8217;s quality, well thought out, bug free, fast, and powerful. Skylight was by far the best for our needs, according to price versus quality. The rest of the data is interesting, but several of the products listed had a time tracking or project management rating less than three, which is insufficient for our needs. So the final choices for us were as follows:</p>
<ul>
<li><a href="http://www.skylightit.com">Skylight </a>&#8211; use this and put up with the slow, laborious interface; our preference for now</li>
<li><a href="http://www.basecamphq.com">Basecamp </a>+ <a href="http://www.myhours.com/">MyHours</a>/<a href="http://www.getharvest.com/">Harvest</a>/<a href="http://www.tickspot.com/pricing/">Tick </a>&#8211; together, these products are a complete package, but pricey</li>
<li><a href="http://www.proworkflow.com/">ProWorkflow </a>&#8211; very pricey, but we could bite the bullet on this and get the best quality product on the market.</li>
</ul>
<p>If you&#8217;d like to view or download the complete data, including links to all of the product sites, you can <a href="https://spreadsheets.google.com/pub?key=0Asi9t45zMwJJdEd6LVpGSHhsQndmbjN2RllyTEZwOFE&amp;single=true&amp;gid=0&amp;output=html" target="_blank">find all the gory details in the Google spreadsheet</a>. You can also view <a href="https://spreadsheets.google.com/pub?key=0Asi9t45zMwJJdGc4REdPZndfVTh6ZC1vT2FNdVZHUVE&amp;single=true&amp;gid=0&amp;output=html">the same data sorted by total quality</a> instead.</p>
]]></content:encoded>
			<wfw:commentRss>http://zenovations.com/blog/2010/07/project-management-and-time-tracking/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Mind Mapping Software: Mindomo</title>
		<link>http://zenovations.com/blog/2009/07/mind-mapping-software-mindomo/</link>
		<comments>http://zenovations.com/blog/2009/07/mind-mapping-software-mindomo/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 15:56:43 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[organization]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://zenovations.com/blog/?p=129</guid>
		<description><![CDATA[Mindomo is a great, free product for mind mapping. You can utilize it online for free to create some great looking and functional maps. There is also a pro version at the great price of $6/month, which provides a desktop version, allowing you to store the files locally and organize with folders and sharing capabilities. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mindomo.com" alt="visit mindomo site" title="visit mindomo site"><img src="http://zenovations.com/blog/wp-content/uploads/2009/07/mindomo_home_logo-300x159.gif" width="300" height="159" class="size-medium wp-image-131" /></a><a href="http://mindomo.com/comparison_chart.htm"></p>
<p>Mindomo</a> is a great, free product for <a href="http://en.wikipedia.org/wiki/Mind_map">mind mapping</a>. You can utilize it online for free to create some great looking and functional maps.</p>
<p>There is also a pro version at the great price of $6/month, which provides a desktop version, allowing you to store the files locally and organize with folders and sharing capabilities.</p>
<p>With the upcoming addition of collaboraiton, and there continual efforts to improve the product, it&#8217;s quickly becoming a great brainstorming and outlining tool.</p>
]]></content:encoded>
			<wfw:commentRss>http://zenovations.com/blog/2009/07/mind-mapping-software-mindomo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Extending the Windows Clipboard</title>
		<link>http://zenovations.com/blog/2009/06/extending-the-windows-clipboard/</link>
		<comments>http://zenovations.com/blog/2009/06/extending-the-windows-clipboard/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 13:54:50 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[clipboard]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://zenovations.com/blog/?p=57</guid>
		<description><![CDATA[For programmers and writers, being able to keep a history of copy/paste and access it with a hotkey is a serious boon. Here are some of the ways I use a clipboard tool daily (sometimes fifty times a day): Take notes quickly&#8211;store a url, email address, or command for reference later Reorganize a document&#8211;clip here, [...]]]></description>
			<content:encoded><![CDATA[<p>For programmers and writers, being able to keep a history of copy/paste and access it with a hotkey is a serious boon. Here are some of the ways I use a clipboard tool daily (sometimes fifty times a day):</p>
<ul>
<li>Take notes quickly&#8211;store a url, email address, or command for reference later</li>
<li>Reorganize a document&#8211;clip here, copy there, then paste it all together</li>
<li>Store commonly used commands and html strings for quick access</li>
<li>Passwords that I type more than ten times an hour</li>
<li>Storing things I use daily: IP addresses, dates, sql queries, urls</li>
</ul>
<p> </p>
<p>I&#8217;ve tried a few different tools, like <a href="http://www.comfort-software.com/clipboard-manager.html">Comfort Clipboard</a> and <a href="http://www.xneat.com/clipboard-manager/index.htm">XNeat Clipboard</a>. But nothing beats <a href="http://m8software.com/clipboards/spartan/tour/tour.htm">Spartan</a> for simple, direct, fast, and capable.</p>
<p>It allows you to store most any sort of formatted text, has 36 quick copy/paste slots, and multiple columns where you can drop text for different topics to store permanently and access them with a click.</p>
<p>If that wasn&#8217;t enough, it offers 10 different views, each with full hotkeys and columns. I&#8217;ve set mine up with CTRL+\ as a hotkey, so I have quick access to anything on the clipboard at the speed of typing.</p>
<p>It has a trial period, and is well worth the 20 bills for the full version.</p>
<p>For those with a little less robust needs, they also have a free version, <a href="http://101clips.com/freeclip.htm">101clips</a>, that is quite capable. Though I couldn&#8217;t live without the advanced capabilities of the full version.</p>
]]></content:encoded>
			<wfw:commentRss>http://zenovations.com/blog/2009/06/extending-the-windows-clipboard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Converting Agora to Kunena &#8211; Joomla Migration Tools</title>
		<link>http://zenovations.com/blog/2009/04/converting-agora-to-kunena-joomla-migration-tools/</link>
		<comments>http://zenovations.com/blog/2009/04/converting-agora-to-kunena-joomla-migration-tools/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 19:55:33 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[kunena]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://zenovations.com/blog/?p=13</guid>
		<description><![CDATA[I successfully converted our old Agora forum on zentrack.com to a shiny new Kunena forum. [edit]The Kunena version was 1.0.8; I have no idea what the Agora version was as this took place over two years ago. Since there weren&#8217;t any handy migration scripts, I broke out my trusty, quick and dirty db migrator, and [...]]]></description>
			<content:encoded><![CDATA[<p>I successfully converted our old <a href="http://www.joomlame.com/" target="_blank">Agora</a> forum on <a href="http://www.zentrack.com">zentrack.com</a> to a shiny new <a href="http://www.kunena.com/" target="_blank">Kunena</a> forum.</p>
<p>[edit]The Kunena version was 1.0.8; I have no idea what the Agora version was as this took place over two years ago.</p>
<p>Since there weren&#8217;t any handy migration scripts, I broke out my trusty, <a href="http://zenovations.com/blog/?p=16">quick and dirty db migrator</a>, and whipped one up.</p>
<p>Here&#8217;s what you&#8217;d need for these scripts to be useful for your install too:</p>
<ul>
<li>Existing Categories in your Kunena db that mirror the old Agora forums</li>
<li>Command Line Access to your server</li>
<li>Basic understanding of SQL and shell scripting</li>
</ul>
<p>Here&#8217;s what the scripts do:</p>
<ul>
<li>Works with or without <a href="http://www.joomlapolis.com/" target="_blank">CB</a></li>
<li>Import all posts from Agora to Kunena</li>
<li>Convert agora user ids to joomla ids (used by Kunena)</li>
<li>Updates post counts by category (Kunenas sync tool doesn&#8217;t do well)</li>
</ul>
<p>Here&#8217;s what to do:</p>
<ol>
<li>Make sure your categories are set up</li>
<li>Download the <a href="http://www.zenovations.com/misc/agora_to_kunena_converter.zip">zip file linked here</a></li>
<li>Open configure.php</li>
<li>Modify the connection info at the top</li>
<li>Set the forum ids to category ids</li>
<li>Set $fake_inserts = true</li>
<li>Run the script:  php ./converter.php (a test run)</li>
<li>Check out the printed results and make sure they look sensible</li>
<li>Set $fake_inserts = false</li>
<li>Have a go at the real data (you have a backup, right??)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://zenovations.com/blog/2009/04/converting-agora-to-kunena-joomla-migration-tools/feed/</wfw:commentRss>
		<slash:comments>50</slash:comments>
		</item>
		<item>
		<title>Quick and Dirty Database Conversion Tool</title>
		<link>http://zenovations.com/blog/2009/04/quick-and-dirty-database-conversion-tool/</link>
		<comments>http://zenovations.com/blog/2009/04/quick-and-dirty-database-conversion-tool/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 19:11:29 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://zenovations.com/blog/?p=16</guid>
		<description><![CDATA[I created a quick tool for importing database data and modifying structure and data as it goes. It populates a single table at a time, offers decent flexibility, and allows you to specify your own callback functions to deal with data conversion. It can handle inserts and allows you to specify customized queries if desired. [...]]]></description>
			<content:encoded><![CDATA[<p>I created a quick tool for importing database data and modifying structure and data as it goes. It populates a single table at a time, offers decent flexibility, and allows you to specify your own callback functions to deal with data conversion.  It can handle inserts and allows you to specify customized queries if desired. It allows any complexity of joins on the source data. Alas, it only works in mysql because that&#8217;s all I needed it for.  Use an adapt for any non-evil purpose you like &#8211; Creative Commons.  Usage:</p>
<ol>
<li>Open configure.php</li>
<li>Set $fake_inserts = true (for testing)</li>
<li>Probably want to set $max_rows (for testing)</li>
<li>Set up your table conversions using the $tablemap arrays</li>
<li>Call the script to test results: php ./converter.php</li>
<li>When satisfied, set $fake_inserts = false (got a backup??)</li>
<li>Whammo!</li>
</ol>
<p>Here is the <b>config.php</b> file you&#8217;ll need to tweak:</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p16code3'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p163"><td class="code" id="p16code3"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*************************************************************
   CONFIGURABLE PARAMETERS
**********************************************************/</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * These can also be configured per-query below, if more granularity is needed
 */</span>
<span style="color: #000088;">$from_db_connection</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'localhost'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'username'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'password'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'db-instance'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$to_db_connection</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'localhost'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'username'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'password'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'db-instance'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * We either output by printing insert statements to the screen for testing(true),
 * or by running the insert queries directly on the target db(false-default). Set this
 * to false when you're ready to import for real
 */</span>
<span style="color: #000088;">$fake_inserts</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Max rows allows you to only run a certain number of queries per table, for testing. Leave
 * this set to 0 for the real run
 */</span>
<span style="color: #000088;">$max_rows</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * If true, script will exist on any failed insert query.
 * If false, will continue to run even if queries fail and insert the other records.
 */</span>
<span style="color: #000088;">$stop_on_failed_query</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * $tablemap is an array containing one entry for each table to be converted.
 * Note that tables don't necessarily have to be 1:1 to make this work, since
 * the source query can use whatever sort of joins needed to set up the source
 * fields. There must, of course, be exactly one output table.
 *
 * &lt;p&gt;Here are the fields for each conversion element:
 * &lt;ul&gt;
 *   &lt;li&gt;connection info - an array containin the source database and target database. It contains two
 *       elements, each is an array containing array( host, username, password, db_instance )
 *   &lt;li&gt;source_query - the query to be run against source db, set it up however you like, the field names should correspond with the 'fields' array's keys
 *   &lt;li&gt;fields - see below
 *   &lt;li&gt;defaults - default values to apply to any fields in target table, overwritten by values in 'fields'
 * &lt;/ul&gt;
 *
 * &lt;p&gt;If you just want to create insert statements with the data, use dest_table. If you
 * need custom queries or updates to run, you can specify dest_query. Values for any output fields
 * can be substituted using {field_name} in the query.
 *
 * &lt;p&gt;The 'fields' element is an indexed array. The key is the source table's column name. The value is either a string indicating the name of hte column in the destination table, or an array containing exactly two elements: 1) a function to call, which will be passed the value from source table, 2) the destination column name
 *
 * &lt;p&gt;The function is passed a host of arguments, in order:
 * &lt;ol&gt;
 *  &lt;li&gt;value from originating column
 *  &lt;li&gt;entire data row
 *  &lt;li&gt;original column name
 *  &lt;li&gt;destination column name
 * &lt;/ol&gt;
 *
 * &lt;p&gt;To list the same field twice (since the keys would be identical) you can use an array index which will be stripped from the column name before querying, such as &quot;field_id[1]&quot;, &quot;field_id[2]&quot;, which both refer to a column named &quot;field_id&quot;
 */</span>
<span style="color: #000088;">$tablemap</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
* This example is a simple, straight copy from one table to another
*/</span>
<span style="color: #000088;">$tablemap</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>
	 <span style="color: #0000ff;">&quot;connection_info&quot;</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>
				    <span style="color: #0000ff;">&quot;source&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$from_db_connection</span><span style="color: #339933;">,</span>
				    <span style="color: #0000ff;">&quot;dest&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$to_db_connection</span>
	 <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	 <span style="color: #0000ff;">&quot;source_query&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'select * from source_table'</span><span style="color: #339933;">,</span>
	 <span style="color: #0000ff;">&quot;dest_table&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">&quot;destination_table&quot;</span><span style="color: #339933;">,</span>
	 <span style="color: #0000ff;">'fields'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>
            <span style="color: #0000ff;">'source1'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'dest1'</span><span style="color: #339933;">,</span>
            <span style="color: #0000ff;">'source2'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'dest2'</span><span style="color: #339933;">,</span>
			   <span style="color: #0000ff;">'posted'</span>  <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'toSqlDate'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'date'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// convert unix timestamp to sql date</span>
			   <span style="color: #0000ff;">'id[1]'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'id'</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// here we set two dest fields from &quot;id&quot;, using array index</span>
			   <span style="color: #0000ff;">'id[2]'</span>   <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'getParentId'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'parent'</span><span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">// another custom function</span>
	 <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	 <span style="color: #0000ff;">'defaults'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>
			   <span style="color: #0000ff;">'dest3'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'0'</span><span style="color: #339933;">,</span>
            <span style="color: #0000ff;">'dest4'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</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;">/*
 * This example runs a customized query instead of a normal insert
 */</span>
&nbsp;
<span style="color: #000088;">$tablemap</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>
	 <span style="color: #0000ff;">&quot;connection_info&quot;</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>
          <span style="color: #0000ff;">&quot;source&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$from_db_connection</span><span style="color: #339933;">,</span>
          <span style="color: #0000ff;">&quot;dest&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$to_db_connection</span>
	 <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	 <span style="color: #0000ff;">&quot;source_query&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'
         select 
            count(*) as src_total, category
         from 
            source_table_1 s1, source_table_2 s2
         where
            s1.id = s2.id AND s2.id &gt; 100
         group by
            category'</span><span style="color: #339933;">,</span>
	 <span style="color: #0000ff;">&quot;dest_query&quot;</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'update dest_table set total = {dest_total} where catid = {cat}'</span><span style="color: #339933;">,</span>
	 <span style="color: #0000ff;">'fields'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>
			   <span style="color: #0000ff;">'category'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'cat'</span><span style="color: #339933;">,</span>
			   <span style="color: #0000ff;">'src_total'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'dest_total'</span>
	 <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	 <span style="color: #0000ff;">'defaults'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">// these are still applicable, just didn't need any</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #666666; font-style: italic;">/*****************************************************************************
  USER FUNCTIONS (methods used by the 'fields' array to convert values)
***************************************************************************/</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Just an example function that creates a value by combining two cols from source table
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> getParentId<span style="color: #009900;">&#40;</span><span style="color: #000088;">$src_id</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data_row</span><span style="color: #339933;">,</span> <span style="color: #000088;">$src_col_name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dest_col_name</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> <span style="color: #000088;">$src_id</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #666666; font-style: italic;">// if it exists, use it</span>
      <span style="color: #b1b100;">return</span> <span style="color: #000088;">$src_id</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
   <span style="color: #666666; font-style: italic;">// otherwise, create one</span>
   <span style="color: #b1b100;">return</span> <span style="color: #000088;">$data_row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;number_1&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$data_row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;number_2&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Example function to create an incremental id for the result data
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> getIncrementalId<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;">$currentIncId</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">return</span> <span style="color: #339933;">++</span><span style="color: #000088;">$currentIncId</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000088;">$currentIncId</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Converts a unix timestamp to a sql datetime
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> toSqlDate<span style="color: #009900;">&#40;</span><span style="color: #000088;">$utime</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">return</span> <a href="http://www.php.net/date"><span style="color: #990000;">date</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Y-m-d H:i:s&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$utime</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>And here is the <b>convert.php</b> script you&#8217;ll be running:</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p16code4'); return false;">View Code</a> PHP</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p164"><td class="code" id="p16code4"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?</span>
<span style="color: #666666; font-style: italic;">/*********************************
 GO TO THIS FILE TO CONFIGURE
 ********************************/</span>
  <span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;config.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*********************************
 YOU WON'T NEED TO CHANGE ANYTHING BELOW HERE
 ********************************/</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Prints out contents and adds html chars if this isn't cli
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> printIt<span style="color: #009900;">&#40;</span><span style="color: #000088;">$txt</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$e</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/php_sapi_name"><span style="color: #990000;">php_sapi_name</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;cli&quot;</span>? <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;&lt;br&gt;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">print</span> <span style="color: #000088;">$txt</span><span style="color: #339933;">.</span><span style="color: #000088;">$e</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Generates a list of insertable values, escaped for sql
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> make_vals<span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$s</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$k</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$v</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> <span style="color: #000088;">$s</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000088;">$s</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;, &quot;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #000088;">$s</span> <span style="color: #339933;">.=</span> fixMySquirrelVal<span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$s</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Adds a data row to the dest table
 * @param resource $dbin the db connection
 * @param string $table dest table
 * @param array $row indexed array of (string)col =&gt; (mixed)value - do not escape these
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> addRow<span style="color: #009900;">&#40;</span><span style="color: #000088;">$dbin</span><span style="color: #339933;">,</span> <span style="color: #000088;">$table</span><span style="color: #339933;">,</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$vals</span> <span style="color: #339933;">=</span> make_vals<span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$cols</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'`'</span><span style="color: #339933;">.</span><a href="http://www.php.net/join"><span style="color: #990000;">join</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'`,`'</span><span style="color: #339933;">,</span><a href="http://www.php.net/array_keys"><span style="color: #990000;">array_keys</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'`'</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;INSERT INTO `<span style="color: #006699; font-weight: bold;">$table</span>` (<span style="color: #006699; font-weight: bold;">$cols</span>) VALUES(<span style="color: #006699; font-weight: bold;">$vals</span>)&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">return</span> runMySquirrelQuery<span style="color: #009900;">&#40;</span><span style="color: #000088;">$dbin</span><span style="color: #339933;">,</span> <span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Runs a custom query rather than a simple insert
 * @param resource $dbin the db connection
 * @param string $query the custom query, with {field_name} anywhere the field vals will be substituted
 * @param array $row indexed array of (string)col =&gt; (mixed)value - do not escape these
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> customQuery<span style="color: #009900;">&#40;</span><span style="color: #000088;">$dbin</span><span style="color: #339933;">,</span> <span style="color: #000088;">$query</span><span style="color: #339933;">,</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// substitute our new vals</span>
  <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$k</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/str_replace"><span style="color: #990000;">str_replace</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;{<span style="color: #006699; font-weight: bold;">{$k}</span>}&quot;</span><span style="color: #339933;">,</span> fixMySquirrelVal<span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #666666; font-style: italic;">// run query with custom vals</span>
  <span style="color: #b1b100;">return</span> runMySquirrelQuery<span style="color: #009900;">&#40;</span><span style="color: #000088;">$dbin</span><span style="color: #339933;">,</span> <span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> fixMySquirrelVal<span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</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><a href="http://www.php.net/is_null"><span style="color: #990000;">is_null</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">&quot;NULL&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">return</span> <a href="http://www.php.net/sprintf"><span style="color: #990000;">sprintf</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; '<span style="color: #009933; font-weight: bold;">%s</span>' &quot;</span><span style="color: #339933;">,</span> <a href="http://www.php.net/mysql_real_escape_string"><span style="color: #990000;">mysql_real_escape_string</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> runMySquirrelQuery<span style="color: #009900;">&#40;</span><span style="color: #000088;">$dbin</span><span style="color: #339933;">,</span> <span style="color: #000088;">$query</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;">$fake_inserts</span><span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$stop_on_failed_query</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$fake_inserts</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    printIt<span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><a href="http://www.php.net/mysql_query"><span style="color: #990000;">mysql_query</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dbin</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    printIt<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;!!ERROR!! Unable to insert record (<span style="color: #006699; font-weight: bold;">$query</span>): &quot;</span><span style="color: #339933;">.</span><a href="http://www.php.net/mysql_error"><span style="color: #990000;">mysql_error</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$stop_on_failed_query</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <a href="http://www.php.net/exit"><span style="color: #990000;">exit</span></a><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Given a row from the source table, converts field names and values
 * to be compatible for dest table
 * @param array $row indexed array of (string)col =&gt; (mixed)value - do not escape these
 * @param array $fields indexed array of (string)source_field =&gt; (mixed)dest_field
 * @param array $defaults indexed array of (string)dest_field =&gt; (mixed)value -- can be null
 * @return array indexed by column names for dest table
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> convertRow<span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span><span style="color: #339933;">,</span> <span style="color: #000088;">$fields</span><span style="color: #339933;">,</span> <span style="color: #000088;">$defaults</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// start by applying default values, these can be overwritten if fields contains same value</span>
  <span style="color: #000088;">$newrow</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/is_array"><span style="color: #990000;">is_array</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$defaults</span><span style="color: #009900;">&#41;</span>? <span style="color: #000088;">$defaults</span> <span style="color: #339933;">:</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fields</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$k</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// for multiple fields with same key, strips off the [n] from end</span>
    <span style="color: #000088;">$k</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/preg_replace"><span style="color: #990000;">preg_replace</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;@\[[0-9]+\]$@&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$k</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #666666; font-style: italic;">// run user functions as needed to modify values</span>
    <span style="color: #000088;">$key</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/is_array"><span style="color: #990000;">is_array</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span>? <span style="color: #000088;">$v</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$v</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$val</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/is_array"><span style="color: #990000;">is_array</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span>? <a href="http://www.php.net/call_user_func"><span style="color: #990000;">call_user_func</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$v</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$row</span><span style="color: #339933;">,</span> <span style="color: #000088;">$k</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><a href="http://www.php.net/is_null"><span style="color: #990000;">is_null</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$val</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;">// create the new column in data row</span>
      <span style="color: #000088;">$newrow</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$val</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$newrow</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> connectToDb<span style="color: #009900;">&#40;</span><span style="color: #000088;">$connection_info</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <a href="http://www.php.net/list"><span style="color: #990000;">list</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$host</span><span style="color: #339933;">,</span> <span style="color: #000088;">$user</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pass</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dbname</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$connection_info</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$dbh</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/mysql_connect"><span style="color: #990000;">mysql_connect</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$host</span><span style="color: #339933;">,</span> <span style="color: #000088;">$user</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pass</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$dbh</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    printIt<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Unable to connect to DB: &quot;</span> <span style="color: #339933;">.</span> <a href="http://www.php.net/mysql_error"><span style="color: #990000;">mysql_error</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <a href="http://www.php.net/exit"><span style="color: #990000;">exit</span></a><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><a href="http://www.php.net/mysql_select_db"><span style="color: #990000;">mysql_select_db</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dbname</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dbh</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    printIt<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Unable to select <span style="color: #006699; font-weight: bold;">$dbname</span>: &quot;</span> <span style="color: #339933;">.</span> <a href="http://www.php.net/mysql_error"><span style="color: #990000;">mysql_error</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <a href="http://www.php.net/exit"><span style="color: #990000;">exit</span></a><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$dbh</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> convertTable<span style="color: #009900;">&#40;</span><span style="color: #000088;">$map</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;">$max_rows</span><span style="color: #339933;">;</span>
&nbsp;
  printIt<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  printIt<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;-------------------------------------------------&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$map</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dest_query'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    printIt<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Running custom query: <span style="color: #006699; font-weight: bold;">{$map['dest_query']}</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    printIt<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Migrating values to <span style="color: #006699; font-weight: bold;">{$map['dest_table']}</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  printIt<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;-------------------------------------------------&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  printIt<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// we call this each time because we can't just store a separate connection for the from instance</span>
  <span style="color: #666666; font-style: italic;">// and to instance... chances are they point to the same server, so php/mysql will re-use the connection</span>
  <span style="color: #666666; font-style: italic;">// and just switch the instance being operated on... this will cause our queries to go on the fritz</span>
  <span style="color: #666666; font-style: italic;">// the upside is that it doesn't have to reconnect since it's reused, so there's no big cost to this approach</span>
  <span style="color: #000088;">$dbout</span> <span style="color: #339933;">=</span> connectToDb<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$map</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'connection_info'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'source'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// select the old data</span>
  <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/mysql_query"><span style="color: #990000;">mysql_query</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$map</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'source_query'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dbout</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    printIt<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Unable to load source data (<span style="color: #006699; font-weight: bold;">{$map['source_query']}</span>): &quot;</span> <span style="color: #339933;">.</span> <a href="http://www.php.net/mysql_error"><span style="color: #990000;">mysql_error</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <a href="http://www.php.net/exit"><span style="color: #990000;">exit</span></a><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><a href="http://www.php.net/mysql_num_rows"><span style="color: #990000;">mysql_num_rows</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    printIt<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;No rows found, that's weird so I'm exiting&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <a href="http://www.php.net/exit"><span style="color: #990000;">exit</span></a><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// here again, we call this right before use, because we're going to switch instances, but</span>
  <span style="color: #666666; font-style: italic;">// it's probably to the same mysql server, so connection will get reused</span>
  <span style="color: #000088;">$dbin</span> <span style="color: #339933;">=</span> connectToDb<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$map</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'connection_info'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dest'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// While a row of data exists, put that row in $row as an associative array</span>
  <span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$j</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/mysql_fetch_assoc"><span style="color: #990000;">mysql_fetch_assoc</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$vals</span> <span style="color: #339933;">=</span> convertRow<span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span><span style="color: #339933;">,</span> <span style="color: #000088;">$map</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'fields'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$map</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'defaults'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$map</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dest_query'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      customQuery<span style="color: #009900;">&#40;</span><span style="color: #000088;">$dbin</span><span style="color: #339933;">,</span> <span style="color: #000088;">$map</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dest_query'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vals</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$j</span><span style="color: #339933;">++;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
      addRow<span style="color: #009900;">&#40;</span><span style="color: #000088;">$dbin</span><span style="color: #339933;">,</span> <span style="color: #000088;">$map</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dest_table'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$vals</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$j</span><span style="color: #339933;">++;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000088;">$i</span><span style="color: #339933;">++;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$max_rows</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$max_rows</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #b1b100;">break</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;">// recover query memory</span>
  <a href="http://www.php.net/mysql_free_result"><span style="color: #990000;">mysql_free_result</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// show the user what we did</span>
  printIt<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Converted &quot;</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">-</span><span style="color: #000088;">$j</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; rows&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$j</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> printIt<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;!!!! <span style="color: #006699; font-weight: bold;">$j</span> errors !!!!!!&quot;</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;">// actually run the conversions</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tablemap</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$t</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  convertTable<span style="color: #009900;">&#40;</span><span style="color: #000088;">$t</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
printIt<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Finished without blowing up the planet&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://zenovations.com/blog/2009/04/quick-and-dirty-database-conversion-tool/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The ZDvorak Keyboard Layout</title>
		<link>http://zenovations.com/blog/2009/02/the-zdvorak-keyboard-layout/</link>
		<comments>http://zenovations.com/blog/2009/02/the-zdvorak-keyboard-layout/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 14:15:18 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[keyboard]]></category>

		<guid isPermaLink="false">http://zenovations.com/blog/?p=69</guid>
		<description><![CDATA[After learning dvorak, and trying several programmer variants, I decided to build my own flavor. I did this for several reasons: Regular dvorak doesn&#8217;t improve the symbol locations for programming, and makes some of them even harder to reach. I didn&#8217;t like the position of the U and I characters and read studies that show switching them [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>After learning dvorak, and trying several programmer variants, I decided to build my own flavor.</p>
<p><span id="more-69"></span></p>
<p>I did this for several reasons:</p>
<ul>
<li>Regular dvorak doesn&#8217;t improve the symbol locations for programming, and makes some of them even harder to reach.</li>
<li>I didn&#8217;t like the position of the U and I characters and read <a title="see the DDvorak notes" href="http://www.codeaxe.co.uk/dvorak/Default.aspx">studies</a> that show switching them improves finger travel.</li>
<li>For development, the placement of [], {}, and () were unbearable.</li>
<li>I write novels as well, and none of the developer variants place quote keys and dash in a convenient spot.</li>
</ul>
<p>So, using the <a href="http://www.microsoft.com/globaldev/tools/msklc.mspx">Microsoft Keyboard Layout Creator</a>, here&#8217;s what I grew over a month&#8217;s worth of tweaking (click for a larger view):</p>
<p><a href="http://michaelwulf.com/blog/wp-content/uploads/2009/02/zdvorak1.png"><img class="aligncenter size-medium wp-image-439" title="zdvorak1" src="http://michaelwulf.com/blog/wp-content/uploads/2009/02/zdvorak1-300x140.png" alt="zdvorak1" width="300" height="140" /></a></p>
<p>The highlights:</p>
<ul>
<li>U and I switched from classic dvorak</li>
<li>Number keys moved so most frequent used on strongest fingers</li>
<li>Number keys switched with symbols for easier development, assumes that long numbers would use the numeric keypad anyways</li>
<li>Caps lock key shifts number line, for easy numeric entry</li>
<li>; and : &#8211;used incessantly in programming, easier to reach instead of jammed on the old z key</li>
<li>&#8216; and &#8221; get their own keys (no shift to press for them &#8211; benefits programming and writing)</li>
<li>% and ^ symbol get the hardest to reach keys, but they are hardly used in writing or programming, so great</li>
</ul>
<p>You can <a title="Download ZDvorak Layout" href="/downloads/zdvorak.zip">download this layout</a>, including printable images and the source file (allowing for your own tweaks) as a zip file. Enjoy!</div>
]]></content:encoded>
			<wfw:commentRss>http://zenovations.com/blog/2009/02/the-zdvorak-keyboard-layout/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP Class for Accessing Twitter API</title>
		<link>http://zenovations.com/blog/2008/09/php-class-for-accessing-twitter-api/</link>
		<comments>http://zenovations.com/blog/2008/09/php-class-for-accessing-twitter-api/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 13:57:01 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://zenovations.com/blog/?p=63</guid>
		<description><![CDATA[I wrote up a quick class for interacting with the twitter API. Right now it returns everything as json, but that would be a five minute project to change out for anyone with m4d sk1&#124;&#124;z0rz. Example usage: Here&#8217;s the function api, which implements most of the commands in the twitter public api: static updateStatus() - update your [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote up a quick class for interacting with the twitter API. Right now it returns everything as json, but that would be a five minute project to change out for anyone with m4d sk1||z0rz.</p>
<p><span id="more-63"></span></p>
<p>Example usage:</p>
<p>Here&#8217;s the function api, which implements most of the commands in the <a href="http://apiwiki.twitter.com/REST+API+Documentation">twitter public api</a>:</p>
<ul>
<li><code>static updateStatus()</code> - update your status on twitter</li>
<li>getUpdates() &#8211; get the last <code>n</code> updates from twitter</li>
<li>getFollowers() &#8211; list your twitter friends (people following you)</li>
<li>getReplies() &#8211; return replies to your posts</li>
<li>getFriends() &#8211; list friends you follow on twitter</li>
<li>sendDirectMessage() &#8211; direct message a friend</li>
<li>etDirectMessages() &#8211; download your direct messages</li>
</ul>
<p>You&#8217;ll want to be sure to set $url_referer to something useful, so you can <a href="http://twitter.com/help/request_source">set the from text</a> for twitter (login required on twitter).</p>
<p>Here&#8217;s the whole <a href="http://zenovations.com/blog/TwitterUtils.phps">TwitterUtils.php</a> class, enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://zenovations.com/blog/2008/09/php-class-for-accessing-twitter-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

