<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title><![CDATA[StoreFront Consulting Blog]]></title>
    <link>http://www.storefrontconsulting.com/blog/</link>
    <description><![CDATA[StoreFront Consulting Blog]]></description>
    <pubDate>Wed, 22 Feb 2012 17:41:58 +0000</pubDate>
    <generator>Zend_Feed</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <item>
      <title><![CDATA[StoreFront to attend X.commerce Conference]]></title>
      <link>http://www.storefrontconsulting.com/blog/storefront-to-attend-magento-ebay-innovate-conference/</link>
      <description><![CDATA[<p><img src="http://www.storefrontconsulting.com/media/blog/paypal_theme_logo.png" alt="X.commerce Innovate Developer Conference 2011" style="padding: 0 10px 10px 0;"/></p>
<p>
StoreFront Consulting is excited to be attending the upcoming X.commerce Innovate conference in San Francisco.  We're looking forward to Blake Mycoskie of TOMS Shoes, The Shins and of course, finding out what crazy plans Magento and eBay have for the future.  Contact us if you would like to setup a meeting while we're in the bay area.
</p>
<p>
<a href="http://innovate-conference.com/">http://innovate-conference.com/</a>
</p>
]]></description>
      <pubDate>Mon, 29 Aug 2011 23:29:42 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[eBay / Magento Now a Reality]]></title>
      <link>http://www.storefrontconsulting.com/blog/ebay-magento-deal-completed/</link>
      <description><![CDATA[<p>
Well, eBay's acquisition of Magento is now complete.  What will this mean for the future of the Magento platform?  We can only assume good things in the short term as eBay's deep pockets are used to continue filling in Magento the company.  Long term, we are waiting to see how things shape up.  StoreFront Consulting plans to attend the x.commerce Innovate conference to catch Magento / eBay's big announcement.  Looking forward to seeing what they come up with!
</p>
]]></description>
      <pubDate>Thu, 18 Aug 2011 19:22:02 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Buzz Around Forrester Report on "Agile Commerce"]]></title>
      <link>http://www.storefrontconsulting.com/blog/buzz-forrester-agile-commerce/</link>
      <description><![CDATA[<p>
Brian Walker of Forrester research has declared "Multichannel commerce no longer makes sense...  Welcome to the Era of Agile Commerce."  Of course we love "agile" anything here at StoreFront, but typically I am not a fan when journalists decide to declare the new eras.  Its really difficult to have the perspective necessary for such declarations without the benefit hindsight.  In my experience, when journalists make these type of over the top pronouncements, its intended to generate hype and promote their own agenda.  And I do believe there is some of that going on here.  However, underneath that hype, there is definitely something to what Brain is saying.
</p>
<h4>Brian Walker Says:</h4>
<blockquote>
"As consumers are increasingly connected through a wide array of Internet-connected devices, the traditional multichannel commerce experience is becoming obsolete. Customers no longer interact with companies from a “channel” perspective; instead, they interact through touchpoints. These touchpoints include channels such as stores, branches, call centers, and websites, but also emerging interactions such as apps, social media, mobile sites, SMS messages, and interactive advertising -- across a wide range of devices such as smartphones, tablets, Internet TVs, cars, and even appliances."
</blockquote>
<p></p>
<p>I have to admit I agree with this.  For many consumers now, social media, the web, the mobile web excursions to their local retailer are all part of one continuous shopping experience.  Does it really make sense to treat customers differently when they show in the store, versus when they show up on the web site?</p>
<h4>Checkout The Blog Post:</h4>
<p>
<a href="http://blogs.forrester.com/brian_walker/11-03-11-welcome_to_the_era_of_agile_commerce">http://blogs.forrester.com/brian_walker/11-03-11-welcome_to_the_era_of_agile_commerce</a>
</p>
<p>

</p>
]]></description>
      <pubDate>Sat, 12 Mar 2011 19:06:49 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[StoreFront Consulting to Attend Magento Imagine]]></title>
      <link>http://www.storefrontconsulting.com/blog/sfc-to-attend-magento-imagine/</link>
      <description><![CDATA[<p>I'm excited to be attending the upcoming Magento Imagine in LA this Febuary. &nbsp;This will be the inaugural Imagine conference and Magento has lofty goals for the event. &nbsp;They say: "the event will bring together eCommerce leaders for two days of discussion, learning, networking, inspiration... and of course &ndash; imagination!" &nbsp;Well I'm headed on the road to see what all the fuss is about.</p>
<p><a href="http://www.magentocommerce.com/imagine">http://www.magentocommerce.com/imagine</a></p>]]></description>
      <pubDate>Mon, 17 Jan 2011 17:24:22 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Fell's Point Spin-a-Thon:14 Hours of Biking to Fight Cancer]]></title>
      <link>http://www.storefrontconsulting.com/blog/fells-point-spin-a-thon-14-hours-biking-to-fight-cancer/</link>
      <description><![CDATA[<div style="float:left; padding: 4px 20px 10px 0;"><img src="http://www.storefrontconsulting.com/media/blog/fells-spin-a-thon-garth-n-chris-1.jpg" alt="Chris and Garth at Fell's Point Spin-a-thon" width="340" height="255" /></div>
<p><span>Garth and I turned our road bikes into stationery attention getters and spun for 14 hours at the Fells Point Fun Festival in Baltimore, Maryland this past weekend. &nbsp;We raised over $1600 for cancer research and education. &nbsp;We gave out lots of LIVESTRONG bracelets, CDs with uplifting music, and a few t-shirts. &nbsp;Our efforts were i<span id="internal-source-marker_0.13063023472204804">nspired and supported by GIVETOLIVE (</span><a  target="_blank" href="http://www.givetolive.ca/">http://www.givetolive.ca</a>)<span>, an all-volunteer non-profit that organizes an annual bike ride (this year from Vancouver, British Columbia to Austin, Texas) to participate in the LIVESTRONG Challenge. &nbsp;</span></span><span>One hundred percent of the donations we collected were given to LIVESTRONG Foundation. &nbsp;LIVESTRONG has one of the highest rates of funds that actually go to research, and to helping those who struggle with the disease. &nbsp;</span></p>
<p><span>Many people know that LIVESTRONG (</span><a href="http://www.livestrong.org/">http://www.livestrong.org</a>)<span> was founded by Lance Armstrong; however it's also interesting to note that LIVESTRONG's President and CEO is Maryland's own Doug Ulman. &nbsp;Doug is a three time cancer survivor, and the founder of "The Ulman Cancer Fund for Young Adults" which was organized to </span><span>support, educate, connect and empower young adult cancer survivors</span><span> </span><a href="http://www.ulmanfund.org/"><span>http://www.ulmanfund.org/</span></a><span>. </span></p>
<p><span>We were touched by the number of people that stopped by to share how their life had been affected by cancer. &nbsp;While we were tired and sore, the effort was worth it.</span></p>]]></description>
      <pubDate>Mon, 04 Oct 2010 00:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[The Minimum Merchants Should Know About PCI Compliance]]></title>
      <link>http://www.storefrontconsulting.com/blog/minimum-pci-compliance-knowledge-for-merchants/</link>
      <description><![CDATA[<p><span>PCI Compliance is an often misunderstood topic. &nbsp;This is no surprise considering how complex and nuanced the standard is, the general lack of knowledge (even among those enforcing PCI compliance) and how little clear explanation is available for the topic. &nbsp;The following is our attempt to clarify this issue.</span></p>
<h4><span>What is PCI Compliance?</span></h4>
<p><span>As an eCommerce service provider, we find the most common misunderstanding our clients have is thinking that they can purchase PCI compliance from someone like us. &nbsp;Unfortunately, the PCI standard covers not only the technology which runs a website or shopping cart, but also the organization&rsquo;s entire IT infrastructure and all policies and procedures which related to payments and the storage of cardholder data. &nbsp;It&rsquo;s worth reiterating this point:</span></p>
<blockquote>
<span class="font-weight:bold;">PCI compliance requirements apply to an entire organization, not just to the technology behind a website.</span>
</blockquote>
A particular data center or piece of infrastructure provided by a third party may be audited and deemed PCI compliant. &nbsp;Many merchants believe that simply hosting an eCommerce website in a PCI compliant data center will mean that their organization is automatically PCI compliant. &nbsp;This is not the case, though it will make achieving compliance an easier task.
<h4><span>PCI Enforcement</span></h4>
<span><span> </span>We also see a lot of misunderstanding around the enforcement of the PCI standards. &nbsp;The first thing to understand is that the PCI Council has no authority to enforce the PCI standards.</span><br /><span><span> </span>Each payment card brand has its own standards around compliance and enforcement. &nbsp;Furthermore, it is left up to individual merchant account providers to implement any measure of enforcement.</span><br />
<blockquote>
<p><span>From </span><a href="http://www.pcicomplianceguide.org/pcifaqs.php"><span>http://www.pcicomplianceguide.org/pcifaqs.php</span></a><span>:</span></p>
<p><span><strong>Q:</strong> What if a merchant refuses to cooperate?</span></p>
<p><span><strong>A:</strong> </span><span>PCI is not, in itself, a law. The standard was created by the major card brands such as Visa, MasterCard, Discover, AMEX, and JCB. At their acquirers/service providers discretion, merchants that do not comply with PCI DSS may be subject to fines, card replacement costs, costly forensic audits, brand damage, etc., should a breach event occur. </span></p>
<p><span>For a little upfront effort and cost to comply with PCI, you greatly help reduce your risk from facing these extremely unpleasant and costly consequences.</span></p>
</blockquote>
<h4><span>Levels and Types, Oh My</span></h4>
<span><span> </span>Depending on the size of your business and the degree to which you store cardholder data, you may be subject to highly varying degrees of compliance requirements from your merchant account provider. &nbsp;These range from being required to fill out a questionnaire and run some scanning software against your network up to being required to hire an auditor who will come to your offices and spend days audited processes, people, paperwork and computers. &nbsp;</span><br />
<p><span>A Self Assessement Questionnaire (SAQ) is required at all merchant levels and validation types, though the content varies. &nbsp;The minimum you will be required to provide otherwise are the results of a network vulnerability scan (for example from the McAfee Secure service).</span></p>
<p><span>It is important to understand which Merchant Level and which SAQ Validation Type your organization will fall under. &nbsp;The following tables outline the basics and give you an idea of what your merchant account provider will be requiring of you.</span></p>
<div>
	<table style="margin: 0pt 22px; border: 1px solid #e2e2e2" cellpadding="6" cellspacing="0" border="0">
	<colgroup><col width="82"></col><col width="418"></col></colgroup>
		<tbody>
			<tr>
				<th style="border: 1px solid #e2e2e2; background-color: #f5f5f5; font-weight: bold; padding: 2px 6px;"><span>Merchant Level</span></th>
				<th style="border: 1px solid #e2e2e2; background-color: #f5f5f5; font-weight: bold; padding: 2px 6px;"><span>Description</span></th>
			</tr>
			<tr>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>1</span></td>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>Any merchant -- regardless of acceptance channel -- processing over 6M Visa transactions per year. Any merchant that Visa, at its sole discretion, determines should meet the Level 1 merchant requirements to minimize risk to the Visa system.</span></td>
			</tr>
			<tr>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>2</span></td>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>Any merchant -- regardless of acceptance channel -- processing 1M to 6M Visa transactions per year.</span></td>
			</tr>
			<tr>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>3</span></td>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>Any merchant processing 20,000 to 1M Visa e-commerce transactions per year.</span></td>
			</tr>
			<tr>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>4</span></td>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>Any merchant processing fewer than 20,000 Visa e-commerce transactions per year, and all other merchants -- regardless of acceptance channel -- processing up to 1M Visa transactions per year.</span></td>
			</tr>
		</tbody>
	</table>
</div>
<br />
<div>
	<table style="margin: 0pt 22px; border: 1px solid #e2e2e2" cellpadding="6" cellspacing="0" border="0">
	<colgroup><col width="84"></col><col width="353"></col><col width="65"></col></colgroup>
		<tbody>
			<tr>
				<th style="border: 1px solid #e2e2e2; background-color: #f5f5f5; font-weight: bold; padding: 2px 6px;"><span>SAQ Validation Type</span></th>
				<th style="border: 1px solid #e2e2e2; background-color: #f5f5f5; font-weight: bold; padding: 2px 6px;"><span>Description</span></th>
				<th style="border: 1px solid #e2e2e2; background-color: #f5f5f5; font-weight: bold; padding: 2px 6px;"><span>SAQ</span></th>
			</tr>
			<tr>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>1</span></td>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>Card-not-present (eCommerce or mail / telephone order) merchants, all cardholder data functions outsourced. &nbsp;</span><span>This would never apply to face-to-face merchants.</span></td>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>A</span></td>
			</tr>
			<tr>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>2</span></td>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>Imprint-only merchants with no cardholder data storage.</span></td>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>B</span></td>
			</tr>
			<tr>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>3</span></td>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>Stand-alone dial-up terminal merchants, no cardholder data storage.</span></td>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>B</span></td>
			</tr>
			<tr>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>4</span></td>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>Merchants with payment application systems connected to the Internet, no cardholder data storage.</span></td>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>C</span></td>
			</tr>
			<tr>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>5</span></td>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>All other merchants (not included in descriptions for SAQs A-C above) and all service proivders defined by a payment brand as eligble to complete an SAQ</span></td>
				<td  style="border: 1px solid #e2e2e2; padding: 2px 6px;"><span>D</span></td>
			</tr>
		</tbody>
	</table>
</div>
<br /><h4><span>Where does this leave us?</span></h4>
<p><span>Most StoreFront Consulting clients fall into SAQ Validation Type 1 and Merchant Levels 3 or 4. &nbsp;This means that generally the compliance requirements you will see all close to the minimum outlined above (Fill out an SAQ-A and complete a vulnerability scan once per quarter).</span></p>
]]></description>
      <pubDate>Fri, 03 Sep 2010 09:15:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[How to Fix New Magento Google Base Issue]]></title>
      <link>http://www.storefrontconsulting.com/blog/how-to-fix-new-magento-google-base-issue/</link>
      <description><![CDATA[<div style="padding: 0 0 10px 0;"><img src="http://www.storefrontconsulting.com/media/blog/merchant_center_logo.gif" alt="Google Merchant Center Logo" width="298" height="40"/></div>
<p>Due to some changes in the public Google Base / Google Merchant Center attributes feeds, an issue with Magento&#8217;s Google Base functionality has popped up.  As far as I can tell, this issue will affect all versions of Magento.  I have personally verified that the issue affects 1.4.0.1 and 1.3.2.4 and made the fix for several clients. I have put together this post with detailed instructions about fixing the error in the hopes that it will save some others time in dealing with the issue.</p> 
<p>If you are receiving the following error message, then this fix is for you.  The error occurs when trying to edit Google Base attributes in the Magento backend.  It can be duplicated by navigating to the <strong>Catalog > Google Base > Manage Attributes</strong> screen in the Magento backend and clicking the <strong>Add Attribute Mapping</strong> button.</p> 
<blockquote><p><strong><em>Notice: Undefined offset: 1 in app/code/core/Mage/GoogleBase/Model/Service/Feed.php on line 120</em></strong></p></blockquote> 
<p><br/></p> 
<h3>How to Fix Magneto Google Base Error (Short Version)</h3> 
<ol> 
<li>Connect to your server via FTP, SFTP, SSH, your web control panel or some means which will allow you to replace PHP code files.</li> 
<li>Navigate to your Magento base folder.  This is typically something like <em>&#8216;/var/www/magento&#8217;</em> or <em>&#8216;/home/mageuser/public_html/magento&#8217;</em>.</li> 
<li>Find the correct Google Base core module code file.  You will looking for <em>&#8216;app/code/core/Mage/GoogleBase/Model/Service/Feed.php&#8217;</em>. </li> 
<li>Replace the <em>Feed.php</em> file with this download. We are making this download available to make it possible for non-technical users to patch their Magento systems. Presumably this patch or equivalent will be included in the next releases of Magento. <a onclick="javascript:pageTracker._trackPageview('/media/downloads/GoogleBaseFix_5_14_2010.zip');"  href="http://www.storefrontconsulting.com/media/downloads/GoogleBaseFix_5_14_2010.zip">Download the patched <em>Feed.php</em> file from here, enclosed in a .zip file</a>.</li> 
<li>Logout and login to the Magento Admin GUI and navigate to the <strong>Catalog > Google Base > Manage Attributes</strong> screen in the Magento backend and click the <strong>Add Attribute Mapping</strong> button to verify that the fix has worked.</li> 
</ol> 
<p><br/></p> 
<h3>How to Fix Magneto Google Base Error (Full Details)</h3> 
<ol> 
<li>Connect to your server via FTP, SFTP, SSH, your web control panel or some means which will allow you to edit PHP code files.</li> 
<li>Navigate to your Magento base folder.  This is typically something like <em>&#8216;/var/www/magento&#8217;</em> or <em>&#8216;/home/mageuser/public_html/magento&#8217;</em>.</li> 
<li>Find the correct Google Base core module code file.  You will looking for <em>&#8216;app/code/core/Mage/GoogleBase/Model/Service/Feed.php&#8217;</em>.  Open this file with a text editor.  You can download the file locally, edit it and re-upload to the server or you can use an editor which runs directly on the server through SSH or your web control panel.</li> 
<li>Find lines 120 to 132 in the original version of <em>Feed.php</em>.  They should look like this:
<ol start="117" class="codeblock"> 
<li><code> $item-&gt;setLocation($entry-&gt;id-&gt;text);</code></li> 
<li><code> $itemTypes[$type] = $item;</code></li> 
<li></li> 
<li><code> $typeAttributes = $entry-&gt;extensionElements[1]-&gt;extensionElements;</code></li> 
<li><code> $attributes = array();</code></li> 
<li><code> if  (is_array($typeAttributes)) {</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;foreach($typeAttributes as $attr) {</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$name = $attr-&gt;extensionAttributes['name']['value'];</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$type = $attr-&gt;extensionAttributes['type']['value'];</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$attribute = new Varien_Object();</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$attribute-&gt;setId($name);</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$attribute-&gt;setName($name);</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$attribute-&gt;setType($type);</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$attributes[$name] = $attribute;</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;}</code></li> 
<li><code> }</code></li> 
<li><code> ksort($attributes);</code></li> 
<li><code> $item-&gt;setAttributes($attributes);</code></li> 
</ol> 
</li> 
<li>Replace the old lines 120 to 132 in <em>Feed.php</em> with the lines 120 to 138 from the below code example.  The result should look like this:
<ol start="117" class="codeblock"> 
<li><code> $item-&gt;setLocation($entry-&gt;id-&gt;text);</code></li> 
<li><code> $itemTypes[$type] = $item;</code></li> 
<li></li> 
<li><code> // GOOGLE BASE FIX</code></li> 
<li><code> $attributes = array();</code></li> 
<li><code> // Error: Notice: Undefined offset: 1 in ...</code></li> 
<li><code> // Add extra test to make sure this </code></li> 
<li><code> // extensionElements array element exists</code></li> 
<li><code> if(count($entry-&gt;extensionElements) &gt;= 2) {</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;$typeAttributes = $entry-&gt;extensionElements[1]-&gt;extensionElements;</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;if  (is_array($typeAttributes)) {</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach($typeAttributes as $attr) {</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$name = $attr-&gt;extensionAttributes['name']['value'];</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$type = $attr-&gt;extensionAttributes['type']['value'];</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$attribute = new Varien_Object();</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$attribute-&gt;setId($name);</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$attribute-&gt;setName($name);</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$attribute-&gt;setType($type);</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$attributes[$name] = $attribute;</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</code></li> 
<li><code> &nbsp;&nbsp;&nbsp;&nbsp;}</code></li> 
<li><code> }</code></li> 
<li><code> // END GOOGLE BASE FIX</code></li> 
<li><code> ksort($attributes);</code></li> 
<li><code> $item-&gt;setAttributes($attributes);</code></li> 
</ol> 
</li> 
<li>Save the resulting <em>Feed.php</em> file.</li> 
<li>Logout and login to the Magento Admin GUI and navigate to the <strong>Catalog > Google Base > Manage Attributes</strong> screen in the Magento backend and click the <strong>Add Attribute Mapping</strong> button to verify that the fix has worked.</li> 
</ol> ]]></description>
      <pubDate>Fri, 14 May 2010 00:00:00 +0000</pubDate>
    </item>
    <item>
      <title><![CDATA[Book Review: PHP In a Nutshell]]></title>
      <link>http://www.storefrontconsulting.com/blog/book-review-php-in-a-nutshell/</link>
      <description><![CDATA[<div style="float:right; padding: 4px 40px 20px 40px;"><a href="http://search.barnesandnoble.com/PHP-in-a-Nutshell/Paul-Hudson/e/9780596100674/?itm=2&USRI=php+nutshell" target="_blank"><img src="http://www.storefrontconsulting.com/media/blog/php-in-a-nutshell-book-cover-1_107_160.jpg" alt="PHP In A Nutshell Book Cover" width="107" height="160" /></a></div>
<p>I found myself getting into the PHP game rather late and needed a book to go to for the basics. I have been programming in languages derived from C syntax for over a decade and a half now (C/C++, Java, C#), so I figured I could come up to speed with PHP rather quickly. My assumption turned out to be correct and PHP In a Nutshell turned out to be my guide book and go to reference for basic syntax.</p>
<p>Last summer I began customizing some eCommerce sites built on the Magento open source eCommerce platform. Magento is implemented in PHP and makes heavy use of the Zend Framework. I purchased Practical Web 2.0 Applications with PHP to learn about the Zend Framework and integrating PHP with spiffy Ajax enabled interfaces. After reading this, tinkering with some code and a bit of googling I found I was able to read and modify your basic PHP code. PHP does borrow most of its syntax from C/C++, so this wasn&rsquo;t too much of a challenge.</p>
<p>So PHP is not hard to read / write if you are already familiar with HTML and some C-derived language. That said, there are quite a few bits of syntax which are new and unique in PHP. New operators, variable variables, etc. Plus PHP is a dynamic language (see&nbsp;<a title="Wikipedia's Entry for Dynamic Programming Language" href="http://en.wikipedia.org/wiki/Dynamic_programming_language">Wikipedia&rsquo;s entry for Dynamic programming language</a>&nbsp;for more information), so the semantics don&rsquo;t work quite like C/C++ either. What I needed was a quick reference to all of these little details. Of course I tried the official PHP docs first. These definitively cover the material I was after and the User Contributed Notes are great to get some tips about real world applications or read some in depth posts about fine details about some particular language feature. But I didn&rsquo;t find the online docs easy to skim quickly and they weren&rsquo;t clear and concise enough for my needs and my taste.</p>
<p>Essentially I wanted to spend a few hours one afternoon skimming some resource and dump 90% of the PHP language into my brain. The resource I ultimately settled on was PHP In a Nutshell and I was quite pleased with the result. To say this book is clear and concise hits the nail on the head. I was in and out in a few hours and was well on my way to being a PHP expert.</p>
<p>All of this is not to say that the book is perfect, however. I usually have no problem finding fault, even in things I love, and I had no problem doing so here. The chapter devoted to object oriented programming (OOP) in PHP tried to be all things to all people. That is, it tried to introduce OOP from scratch, show the differences between PHP 4 and PHP 5 and also to provide a reference to the object oriented features of PHP. All three of these goals were comprised, and I believe the end result is not of much use for any of the three purposes. Given the overall scope of the book, I believe it would have been best to assume anyone reading the chapter was already familiar with OOP and to provide a reference for these folks. Those seeking to learn OOP in general will be much better served by other books.</p>
<p><strong>Overall rating:</strong> 8 out of 10</p>]]></description>
      <pubDate>Tue, 24 Feb 2009 00:00:00 +0000</pubDate>
    </item>
  </channel>
</rss>

