<?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>Web Architecture, Web Production, Web Marketing</title>
	<atom:link href="http://www.usercore.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.usercore.com</link>
	<description>Matt MacDougall - attempting to grok users, management, marketing, linux, subversion, coldfusion, os x and web geekery</description>
	<lastBuildDate>Tue, 11 Jan 2011 18:19:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Magento Templates</title>
		<link>http://www.usercore.com/magento-templates/</link>
		<comments>http://www.usercore.com/magento-templates/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 18:19:50 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.usercore.com/?p=87</guid>
		<description><![CDATA[I&#8217;ve been looking for a decent Magento template to get a new site up quickly.  There are many template designers that do not understand Magento.  While the template make look OK now if it is not created properly, a future ...]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been looking for a decent Magento template to get a new site up quickly.  There are many template designers that do not understand Magento.  While the template make look OK now if it is not created properly, a future upgrade will be costly.  I&#8217;ve been impressed with these guys at <a href=" http://www.emthemes.com/?ref=49">EmThemes</a>.  There templates are W3C html and css compliant which is big for search engines and a requirement if you decide to do some fancy javascript enhancements in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.usercore.com/magento-templates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>X-Cart 4.2 Product Title Only as HTML Title</title>
		<link>http://www.usercore.com/x-cart-4-2-product-title-only-as-html-title/</link>
		<comments>http://www.usercore.com/x-cart-4-2-product-title-only-as-html-title/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 16:24:24 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.usercore.com/?p=79</guid>
		<description><![CDATA[I just wanted to show the product title as the html title for product detail pages in x-cart 4.2.  There is an option for this under general settings, seo options but it is broken. To fix I needed to look ...]]></description>
			<content:encoded><![CDATA[<p><!--:en-->I just wanted to show the product title as the html title for product detail pages in x-cart 4.2.  There is an option for this under general settings, seo options but it is broken.</p>
<p>To fix I needed to look for the variable being set: $html_page_title in /include/func/func.core.php and add an extra foreach loop to only add the first location element to the title.  Otherwise the only options for automated titles are reversing the order of all the elements.</p>
<pre>		if ($config['SEO']['page_title_format'] == 'P') {
			foreach ($location as $k =&gt; $v) {
				if($k == 0)
					$tmp[] = strip_tags($v[0]);
			}
		}
		else {
			foreach ($location as $v) {
				$tmp[] = strip_tags($v[0]);
			}
		}</pre>
<p><!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.usercore.com/x-cart-4-2-product-title-only-as-html-title/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Professional Twitter Always Stay On Target</title>
		<link>http://www.usercore.com/professional-twitter-always-stay-on-target/</link>
		<comments>http://www.usercore.com/professional-twitter-always-stay-on-target/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 15:40:53 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Web Marketing]]></category>

		<guid isPermaLink="false">http://www.usercore.com/?p=75</guid>
		<description><![CDATA[Twitter is useful as either a conversation you have among friends to share common experiences OR a professional conversation where you only talk about one thing. I&#8217;ve been squatting on my personal twitter account for almost 3 years now.  I ...]]></description>
			<content:encoded><![CDATA[<p><strong>Twitter is useful as either a conversation you have among friends to  share common experiences OR a professional conversation where you only  talk about one thing.</strong></p>
<p>I&#8217;ve been squatting on my <a href="http://twitter.com/mattmac">personal twitter account</a> for almost 3 years now.  I finally hooked up a client to alert me to tweets in real time.  After hooking that up, I promptly dropped a whole pile of professional acocunts I had been following for products or services I was interested in.  I dropped them because Twitterrific would keep popping up with some company saying stuff like &#8220;Good morning Twitterverse&#8221;.  Are you kidding me?  How annoying.  I assume these companies think they need to keep talking to keep their name in my face.  Well, there isn&#8217;t a single company I kept following that does stuff like this.  I don&#8217;t care how much I liked your product or service.</p>
<p><strong>Don&#8217;t mix professional and personal tweets in your professional twitter account.</strong></p>
<p>People who follow you professionally will end up dropping you if you throw too much fluff in there.</p>
<p>I&#8217;m guilty of getting too technical in my personal account.  <strong>I&#8217;ve tweeted when the fedex and ups api&#8217;s have been down.  I&#8217;m confident that 99% of the 30 people following my personal account don&#8217;t care about that.</strong></p>
<p>So I&#8217;m going to stick to things on my personal account that may be of some interest to family and friends.  Any professional stuff needs to go elsewhere.</p>
<p>Personally I&#8217;ve started a twitter list for <a href="http://twitter.com/mattmac/unboringfoodie">professional food related stuff in the Chicago area</a>.  I&#8217;ve picked out mostly local folks who stick to talking about food almost all the time.  It&#8217;s something I&#8217;m passionate about and am excited to keep tabs on.  There&#8217;s some cool organizations and chefs which I&#8217;m not including in the list though because they&#8217;re mixing way too much personal in with the professional.  If half of my list is inside jokes and talk about what tv show they&#8217;re looking forward to, the list would get real boring, real quick.</p>
<p>I hope more and more professionals can catch on.  <strong>There&#8217;s some professional conversations I&#8217;m really interested in but don&#8217;t have the desire to put up with the noise that follows them.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.usercore.com/professional-twitter-always-stay-on-target/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manually Purge ColdFusion Client Sessions in Database</title>
		<link>http://www.usercore.com/manually-purge-coldfusion-client-sessions-in-database/</link>
		<comments>http://www.usercore.com/manually-purge-coldfusion-client-sessions-in-database/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 17:16:26 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.usercore.com/?p=73</guid>
		<description><![CDATA[ColdFusion will purge your client sessions for you on a schedule.  This schedule is dependent on when the CF engine starts.  If your purge schedule is OK now, a CF reboot will set a new schedule and cause problems.  if ...]]></description>
			<content:encoded><![CDATA[<p>ColdFusion will purge your client sessions for you on a schedule.  This schedule is dependent on when the CF engine starts.  If your purge schedule is OK now, a CF reboot will set a new schedule and cause problems.  if you use a database and your client variables table has hundred of thousands or millions of records, this can really kill performance.</p>
<p>I have disabled purge of client sessions in the CF Admin and do my purge during low load hours using a separate schedule.</p>
<p>I run 4 queries in a bash script.  You can write a CF script to run these in windows or any other scripting language that let&#8217;s you connect to your client variable database.</p>
<p>Here&#8217;s the MySQL versions of the queries:</p>
<p><code>delete from CDATA where CFID in (select CFID from CGLOBAL where CGLOBAL.lvisit &lt; date_sub(now(), interval 60 day));</code></p>
<p><code>delete from CGLOBAL where lvisit &lt; date_sub(now(), interval 60 day);</code></p>
<p><code>optimize table CDATA;</code></p>
<p><code>optimize table CGLOBAL;</code></p>
<p>Optimizing your tables after the purge will clean up the empty space in your db file left now that those records are gone.  This is helpful if you delete thousands of records at a time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.usercore.com/manually-purge-coldfusion-client-sessions-in-database/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>tfoot between thead and tbody for summary</title>
		<link>http://www.usercore.com/tfoot-between-thead-and-tbody-for-summary/</link>
		<comments>http://www.usercore.com/tfoot-between-thead-and-tbody-for-summary/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 20:05:56 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Web Architecture]]></category>

		<guid isPermaLink="false">http://www.usercore.com/?p=72</guid>
		<description><![CDATA[When insuring W3C validation on a website lately, I saw that the tfoot tag must come before the tbody tag.  From the W3C spec: &#8220;TFOOT must appear before TBODY within a TABLE definition so that user agents can render the ...]]></description>
			<content:encoded><![CDATA[<p>When insuring W3C validation on a website lately, I saw that the tfoot tag must come before the tbody tag.  From the <a href="http://www.w3.org/TR/html4/struct/tables.html#h-11.2.3" target="_blank">W3C spec</a>: &#8220;<a class="noxref" href="http://www.w3.org/TR/html4/struct/tables.html#edef-TFOOT"><samp class="einst">TFOOT</samp></a> must appear before <a class="noxref" href="http://www.w3.org/TR/html4/struct/tables.html#edef-TBODY"><samp class="einst">TBODY</samp></a> within a <a class="noxref" href="http://www.w3.org/TR/html4/struct/tables.html#edef-TABLE"><samp class="einst">TABLE</samp></a> definition so that user agents can render the foot before receiving all of the (potentially numerous) rows of data.&#8221;  That makes sense but it&#8217;s benefit just clicked today.  The foot should function as the summary of the table data and thus let the user agent decide if it cares about the body.  Screen readers make obvious benefit of this.  I can see how search enignes would appreciate useful tfoot summaries as well as mobile applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.usercore.com/tfoot-between-thead-and-tbody-for-summary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parse Plesk Maillog, Count Emails Per Domain</title>
		<link>http://www.usercore.com/parse-plesk-maillog-count-emails-per-domain/</link>
		<comments>http://www.usercore.com/parse-plesk-maillog-count-emails-per-domain/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 19:55:22 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Plesk]]></category>
		<category><![CDATA[Server Architecture]]></category>
		<category><![CDATA[Shell Script]]></category>

		<guid isPermaLink="false">http://www.usercore.com/?p=71</guid>
		<description><![CDATA[I wanted to get a quick count of messages being sent to and from all my domains in plesk.   I wrote this script to get the mail domains from the plesk database.  Then I loop through them and grep a ...]]></description>
			<content:encoded><![CDATA[<p>I wanted to get a quick count of messages being sent to and from all my domains in plesk.   I wrote this script to get the mail domains from the plesk database.  Then I loop through them and grep a regex against the maillog file.  Since I&#8217;m actually using zgrep to look decompress yesterday&#8217;s maillog file at the same time I get the counts, it&#8217;s a little processor intensive.  It takes about 10 seconds to run through 30 domains in a 5 meg gzipped file.  If I were to gunzip the file first and just grep it, this would go much quicker.  But I&#8217;m fine with a 10 second run time and the bonus of not having to trash a decompressed maillog file when I&#8217;m done.</p>
<p>Here&#8217;s the bash script I&#8217;ve saved as mailcount.sh:</p>
<p><code>#!/bin/sh</code></p>
<p><code>MYSQLPASS=`cat /etc/psa/.psa.shadow`</code></p>
<p><code>for DOMAIN in `mysql -uadmin -p$MYSQLPASS -e "select distinct domains.name from mail inner join domains on mail.dom_id=domains.id" -B -N psa`</code></p>
<p><code>do</code><br />
<code>echo $DOMAIN `zgrep -c -E "(to|from)=.+@$DOMAIN" /usr/local/psa/var/log/maillog.processed.1.gz`</code><br />
<code>done</code></p>
<p>Here&#8217;s a version that copies and gunzip&#8217;s the maillog before doing any processing.</p>
<p><code>#!/bin/sh</code></p>
<p><code>MYSQLPASS=`cat /etc/psa/.psa.shadow`</code></p>
<p><code># copy the log file before decompress</code><br />
<code>cp /usr/local/psa/var/log/maillog.processed.1.gz /usr/local/psa/var/log/maillog.processed.1-working.gz &#038;&#038;</code></p>
<p><code># decompress the log working file</code><br />
<code>gunzip /usr/local/psa/var/log/maillog.processed.1-working.gz</code></p>
<p><code>for DOMAIN in `mysql -uadmin -p$MYSQLPASS -e "select distinct domains.name from mail inner join domains on mail.dom_id=domains.id" -B -N psa`</code><br />
<code>do</code><br />
        <code>echo $DOMAIN `grep -c -E "(to|from)=.+@$DOMAIN" /usr/local/psa/var/log/maillog.processed.1-working`</code><br />
<code>done</code></p>
<p><code># remove the working log file</code><br />
<code>rm -f /usr/local/psa/var/log/maillog.processed.1-working &#038;&#038;</code><br />
<code>echo "file removed"</code><br />
<code>exit;</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.usercore.com/parse-plesk-maillog-count-emails-per-domain/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Search Engine Friendly Video</title>
		<link>http://www.usercore.com/search-engine-friendly-video/</link>
		<comments>http://www.usercore.com/search-engine-friendly-video/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 03:57:08 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Web Marketing]]></category>

		<guid isPermaLink="false">http://www.usercore.com/?p=70</guid>
		<description><![CDATA[Search Engines are often blind to the content of video or audio files but this is starting to change. The new google audio indexing service uses speech recognition to turn audio into text and then indexes that text. The ability ...]]></description>
			<content:encoded><![CDATA[<p>Search Engines are often blind to the content of video or audio files but this is starting to change.  The new <a href="http://labs.google.com/gaudi" target="_blank">google audio indexing</a> service uses speech recognition to turn audio into text and then indexes that text. The ability for a computer to understand what an audio file means has far reaching implications. This is something to think about for the future but is not anything to build your whole marketing message on. The google audio indexing service is helped by clear pronunciation of words and low background noise. This technology allows for identifying sounds to assign to known words.  As for the visual portion of the video, we do not have a clear definitions of all the movements that could occur.  It is not possible at this time to pull accurate information from potentially complex visual movements.</p>
<p>I posted some tips on <a href="http://www.aslaninteractive.com/articles/search_engine_friendly_web_design">making websites for search engines</a> at the office.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.usercore.com/search-engine-friendly-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDFFileNotFoundException Inside IsPDFFile and IsPDFObject</title>
		<link>http://www.usercore.com/pdffilenotfoundexception-inside-ispdffile-and-ispdfobject/</link>
		<comments>http://www.usercore.com/pdffilenotfoundexception-inside-ispdffile-and-ispdfobject/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 15:36:48 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[ColdFusion]]></category>

		<guid isPermaLink="false">http://www.usercore.com/?p=69</guid>
		<description><![CDATA[I&#8217;m having a heck of a time using pdf document variables in CF 8.0.1 on Mac OS X 10.5 and Redhat Linux ES 5.  Those are the only platforms I have to test cf with so perhaps this is a ...]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m having a heck of a time using pdf document variables in CF 8.0.1 on Mac OS X 10.5 and Redhat Linux ES 5.  Those are the only platforms I have to test cf with so perhaps this is a windows issue as well.</p>
<p>From Adobe&#8217;s IsPDFObject documentation, I&#8217;ve taken their example of reading in a file as a pdf object and writing it out.  I&#8217;ve even gone the extra step of making sure cf thinks the input file is a valid pdf.</p>
<p><code><br />
&lt;cfif IsPDFFile("filein.pdf")&gt;<br />
&lt;cfpdf source="filein.pdf" action="read" name="myPDFform"/&gt;<br />
&lt;cfif IsPDFObject(myPDFform)&gt;<br />
&lt;cfpdf source=#myPDFform# action="write" destination = "fileout.pdf"&gt;<br />
&lt;cfelse&gt;<br />
&lt;p&gt;This is not a PDF.&lt;/p&gt;<br />
&lt;/cfif&gt;<br />
&lt;/cfif&gt;<br />
</code></p>
<p>CF thinks the file is a pdf, it reads the file, it thinks the pdf document variable is valid, then when it tries to write, I get an error:</p>
<p><code><br />
The file or directory (/Library/WebServer/Documents/coldfusion.pdf.PDFDocWrapper@1547134d) specified in the source attribute in the CFPDF tag does not exist.</code></p>
<p><code>The error occurred in /Library/WebServer/Documents/test.cfm: line 4</code></p>
<p><code>2 :     &lt;cfpdf source="filein.pdf" action="read" name="myPDFform"/&gt;<br />
3 :     &lt;cfif IsPDFObject(myPDFform)&gt;<br />
4 :         &lt;cfpdf source=#myPDFform# action="write" destination = "fileout.pdf"&gt;<br />
5 :     &lt;cfelse&gt;<br />
6 :         &lt;p&gt;This is not a PDF.&lt;/p&gt;</code></p>
<p>Given where CF seems to be generating a temp file I could see this being a problem on my Linux box where cf can&#8217;t write to the webroot.  That would not be a problem on my local dev environment though where I can write to the webroot.  On both machines I can successfully access pdf files themselves and write to different files to add watermarks, get and set info, etc.  I just cannot work with the pdf document variable at all.  The last pdf file I tested with here was the CF 8.0.1 release notes from Adobe at around 250k.</p>
<p>When I get a solution to this issue, I&#8217;ll post it.  If anyone has any thoughts here I&#8217;m all ears.  Hopefully someone can point out that I&#8217;m doing something stupid and share a correction.  Otherwise I&#8217;ll submit a bug to Adobe.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.usercore.com/pdffilenotfoundexception-inside-ispdffile-and-ispdfobject/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SEO Web Design Templates</title>
		<link>http://www.usercore.com/seo-web-design-templates/</link>
		<comments>http://www.usercore.com/seo-web-design-templates/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 03:08:58 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Web Marketing]]></category>

		<guid isPermaLink="false">http://www.usercore.com/?p=67</guid>
		<description><![CDATA[A canned website doesn&#8217;t have to be horrible I&#8217;m putting together some new marketing websites and need to come up with a design.  I can either pay a designer or find a premade template.  In past years, website templates have ...]]></description>
			<content:encoded><![CDATA[<h2>A canned website doesn&#8217;t have to be horrible</h2>
<p>I&#8217;m putting together some new marketing websites and need to come up with a design.  I can either pay a designer or find a premade template.  In past years, website templates have looked very unprofessional.  I started looking around at the current state of website templates and am impressed with the stylish <a title="Template World" href="http://www.templateworld.com/1804.html" target="_self">xhtml/css options at Template World</a>.  They offer some solid free selections, I&#8217;m going ahead with the $50 bucks for the members section since the templates are so good.</p>
<h2>Adding some spices</h2>
<p>With any of the templates I pick here, I&#8217;m going to take a little time to tweek things.  <a href="http://www.templateworld.com/1804.html" target="_self">Template World </a>doesn&#8217;t take the same approach as other template sites.  They offer a relatively small number of higher end templates rather than countless thousands of low end templates like the other guys.  So I&#8217;m not going to be able to find a template that has everything where I want it but with a little css work and some istock photo shopping I&#8217;m get something really slick.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.usercore.com/seo-web-design-templates/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Recursively Remove Files By Extension</title>
		<link>http://www.usercore.com/recursively-remove-files-by-extension/</link>
		<comments>http://www.usercore.com/recursively-remove-files-by-extension/#comments</comments>
		<pubDate>Wed, 21 May 2008 05:50:13 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[OS X / Unix]]></category>
		<category><![CDATA[Server Architecture]]></category>
		<category><![CDATA[Shell Script]]></category>

		<guid isPermaLink="false">http://www.usercore.com/?p=66</guid>
		<description><![CDATA[I&#8217;m finally getting around to cleaning out dreamweaver LCK files from a large website. We have one developer that uses dreamweaver so these files are useless. So we&#8217;ve got these LCK files all over the place in this site. I&#8217;m ...]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m finally getting around to cleaning out dreamweaver LCK files from a large website.  We have one developer that uses dreamweaver so these files are useless.  So we&#8217;ve got these LCK files all over the place in this site.  I&#8217;m just sick of looking at them.</p>
<p>Enter a shell one liner &#8230;</p>
<pre>find . -name '*.LCK' -type f -print0 | xargs -0 /bin/rm -f</pre>
<p>That command recursively looks in and under the directory I&#8217;m in for any files with the LCK extension and removes them.</p>
<p>Here&#8217;s a shell script you can save that will prompt you for an extension name to remove.</p>
<pre>#!/bin/sh

echo "Enter Extension"
read filepattern
echo "Files matching *.$filepattern will be removed."
echo "Is this correct? y|n"
read confirmation

if  [ $confirmation = y ]; then
	find $PWD -name "*.$filepattern" -type f -print0 | xargs -0 /bin/rm -f
else
	echo "quitting"
	exit;
fi</pre>
<p>Or if you don&#8217;t want any confirmation of the file extensions you&#8217;re about to delete.</p>
<pre>#!/bin/sh

echo "Enter Extension"
read filepattern
find $PWD -name "*.$filepattern" -type f -print0 | xargs -0 /bin/rm -f</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.usercore.com/recursively-remove-files-by-extension/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

