<?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>Josh Schumacher: A PHP Developer</title>
	<atom:link href="http://blog.joshschumacher.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.joshschumacher.com</link>
	<description>The biggest and the best in the Northwest</description>
	<lastBuildDate>Thu, 29 Oct 2009 21:54:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Remove .svn directories from Zend Studio 7</title>
		<link>http://blog.joshschumacher.com/2009/10/29/remove-svn-directories-from-zend-studio-7/</link>
		<comments>http://blog.joshschumacher.com/2009/10/29/remove-svn-directories-from-zend-studio-7/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 21:53:49 +0000</pubDate>
		<dc:creator>Josh Schumacher</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP Development]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Zend Studio]]></category>

		<guid isPermaLink="false">http://blog.joshschumacher.com/?p=38</guid>
		<description><![CDATA[I recently upgraded from Zend Studio 6 to the Zend Studio 7.1 beta. During the upgrade, all of my .svn folders showed up in the file browser (who would ever want to see their .svn folders in the file browser&#8230;).

To remove these svn folders from your project, right click on the project > Build Path [...]]]></description>
			<content:encoded><![CDATA[<p>I recently upgraded from Zend Studio 6 to the <a href="http://www.zend.com/en/products/studio/studio-71-whats-new">Zend Studio 7.1 beta</a>. During the upgrade, all of my .svn folders showed up in the file browser (who would ever want to see their .svn folders in the file browser&#8230;).
<div style="text-align: center;padding-bottom:14px;"><a href="http://blog.joshschumacher.com/wp-content/uploads/2009/10/Project_File_Browser.png"><img src="http://blog.joshschumacher.com/wp-content/uploads/2009/10/Project_File_Browser.png" alt="Project_File_Browser" title="Project_File_Browser" width="270" height="115" class="aligncenter size-full wp-image-40" /></a></div>
<p>To remove these svn folders from your project, right click on the project > Build Path > Configure Inclusion / Exclusion Filters&#8230;
<div style="text-align: center;padding-bottom:14px;"><a href="http://blog.joshschumacher.com/wp-content/uploads/2009/10/Configure_Inclusion_Exclusion_Filters.png"><img src="http://blog.joshschumacher.com/wp-content/uploads/2009/10/Configure_Inclusion_Exclusion_Filters.png" alt="Configure_Inclusion_Exclusion_Filters" title="Configure_Inclusion_Exclusion_Filters" width="500" class="aligncenter size-full wp-image-41" /></a></div>
<p>Click &#8220;Add&#8230;&#8221; next to the &#8220;Exclusion patterns:&#8221; box.  Add the rule &#8220;**/.svn/&#8221;.  The &#8220;**/&#8221; will make it a recursive rule.  Click Finish and your annoying .svn folders should now be hidden in the file browser.
<div style="text-align: center;padding-bottom:14px;"><a href="http://blog.joshschumacher.com/wp-content/uploads/2009/10/Add_rule_to_remove_svn_folders_from_zend_studio_project.png"><img src="http://blog.joshschumacher.com/wp-content/uploads/2009/10/Add_rule_to_remove_svn_folders_from_zend_studio_project.png" alt="Add_rule_to_remove_svn_folders_from_zend_studio_project" title="Add_rule_to_remove_svn_folders_from_zend_studio_project" width="500" class="aligncenter size-full wp-image-42" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.joshschumacher.com/2009/10/29/remove-svn-directories-from-zend-studio-7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Enable Samba Access For A User (Linux)</title>
		<link>http://blog.joshschumacher.com/2009/10/23/enable-samba-access-for-a-user-linux/</link>
		<comments>http://blog.joshschumacher.com/2009/10/23/enable-samba-access-for-a-user-linux/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 21:59:44 +0000</pubDate>
		<dc:creator>Josh Schumacher</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[manage]]></category>
		<category><![CDATA[root]]></category>
		<category><![CDATA[samba]]></category>
		<category><![CDATA[smb]]></category>
		<category><![CDATA[users]]></category>

		<guid isPermaLink="false">http://blog.joshschumacher.com/?p=34</guid>
		<description><![CDATA[If you are attempting to connect to a samba (smb) share and you are denied, there&#8217;s a high probability your user account hasn&#8217;t been granted access to the samba server yet.  To grant a user access use the smbpasswd command line tool.

SSH to the samba server
Log in as root
smbpasswd -a username
Enter password (twice) &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>If you are attempting to connect to a samba (smb) share and you are denied, there&#8217;s a high probability your user account hasn&#8217;t been granted access to the samba server yet.  To grant a user access use the <code>smbpasswd</code> command line tool.</p>
<ol>
<li>SSH to the samba server</li>
<li>Log in as root</li>
<li><code>smbpasswd -a <i>username</i></code></li>
<li>Enter password (twice) &#8211; no characters will appear on the screen</li>
</ol>
<p>Interesting note: if you aren&#8217;t logged in as root, the <code>smbpasswd</code> command line tool can be used to change you samba password.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joshschumacher.com/2009/10/23/enable-samba-access-for-a-user-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Advanced iPhone Web Development</title>
		<link>http://blog.joshschumacher.com/2009/05/06/advanced-iphone-web-development/</link>
		<comments>http://blog.joshschumacher.com/2009/05/06/advanced-iphone-web-development/#comments</comments>
		<pubDate>Wed, 06 May 2009 19:06:06 +0000</pubDate>
		<dc:creator>Josh Schumacher</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mobile Development]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[iPhone SDK]]></category>

		<guid isPermaLink="false">http://blog.joshschumacher.com/?p=26</guid>
		<description><![CDATA[Yesterday (May 5th, 2009), I gave a presentation at the Seattle iPhone App Developers and Designers Meetup titled, &#8220;Advanced iPhone Web Development.&#8221;  This presentation focused on the unique capabilities available in WebKit on the iPhone and on possibilities for utilizing UIWebViews inside of your native applications.
You can download a pdf version of the presentation [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday (May 5th, 2009), I gave a presentation at the <a href="http://www.meetup.com/The-Seattle-iPhone-Development-Meetup-Group/">Seattle iPhone App Developers and Designers Meetup</a> titled, &#8220;Advanced iPhone Web Development.&#8221;  This presentation focused on the unique capabilities available in WebKit on the iPhone and on possibilities for utilizing UIWebViews inside of your native applications.</p>
<p>You can download a pdf version of the presentation here: <a href='http://blog.joshschumacher.com/wp-content/uploads/2009/05/advanced-iphone-web-development.pdf'>Advanced iPhone Web Development</a> <img src="http://joshschumacher.com/images/pdf.png" alt="[PDF]" /></p>
<div style="width:500px;text-align:left" id="__ss_1395729"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/joshs633/advanced-iphone-web-development?type=powerpoint" title="Advanced iPhone Web Development">Advanced iPhone Web Development Slideshow</a> (Best Viewed In Fullscreen)<object style="margin:0px" width="500" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=advancediphonewebdevelopment-090506130756-phpapp02&#038;rel=0&#038;stripped_title=advanced-iphone-web-development" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=advancediphonewebdevelopment-090506130756-phpapp02&#038;rel=0&#038;stripped_title=advanced-iphone-web-development" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/joshs633">Josh Schumacher</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.joshschumacher.com/2009/05/06/advanced-iphone-web-development/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The future of mobile web applications</title>
		<link>http://blog.joshschumacher.com/2009/03/18/the-future-of-mobile-web-applications/</link>
		<comments>http://blog.joshschumacher.com/2009/03/18/the-future-of-mobile-web-applications/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 19:07:26 +0000</pubDate>
		<dc:creator>Josh Schumacher</dc:creator>
				<category><![CDATA[Mobile Development]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[iPhone Development]]></category>

		<guid isPermaLink="false">http://blog.joshschumacher.com/?p=21</guid>
		<description><![CDATA[Thinking back three years ago, I was starting to play around with developing web applications for mobile devices.  The hot device of the time was the Palm Treo.  The default browser that came with the Treo, Blazer, really sucks.  It was rough trying to write pages that worked perfectly in Blazer.  Sure, simple, basic HTML [...]]]></description>
			<content:encoded><![CDATA[<p><span>Thinking back three years ago, I was starting to play around with developing web applications for mobile devices.  The hot device of the time was the Palm Treo.  The default browser that came with the Treo, Blazer, really sucks.  It was rough trying to write pages that worked perfectly in Blazer.  Sure, simple, basic HTML rendered just fine but I had a background in developing for the traditional desktop web experience and I wanted to write awesome sites utilizing CSS and Javascript.  I wanted to write an AJAX application for mobile devices.  It would be icing on the cake if I could get it to work on lower end devices as well, but that seemed pretty pie in the sky at the time.</span></p>
<p><span>Webkit will be the future rendering engine of the mobile web (at least I hope it is).  It’s an amazing, full featured engine with bleeding edge web standards implementations of HTML 5 and CSS 3.  Webkit has been getting some great traction lately with some amazing devices implementing it as their default browser engine, Android, Palm Pre and of course the iPhone (and iPod Touch) have all fully embraced Webkit.  I want to see that list get a lot longer; I hope to start seeing Webkit on lower end mobile devices.</span></p>
<p><span>What makes Webkit so awesome?  How about CSS effects, blazing fast javascript execution (especially in their new Nitro engine in Safari 4), HTML offline support &#8211; including offline data storage and support for offline cache manifests, CSS gradients, CSS border radius and border images, CSS transforms, and a lot more.  On the iPhone, it now even has custom events to pass down gesture events to the DOM.  You can now do most things you could once only dream of doing in flash in straight HTML, CSS and Javascript on small devices stored in someone’s pocket.</span></p>
<p><span>The future of mobile web applications are social, location aware, providing a tailored experience based on user preferences.  Future mobile web applications will morph based on user behavior.  The will provide a graphically rich experience with beautiful design elements enhancing every aspect of the application.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joshschumacher.com/2009/03/18/the-future-of-mobile-web-applications/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Reading Common and Custom Values From Your Info.plist</title>
		<link>http://blog.joshschumacher.com/2009/02/19/reading-common-and-custom-values-from-your-infoplist/</link>
		<comments>http://blog.joshschumacher.com/2009/02/19/reading-common-and-custom-values-from-your-infoplist/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 00:35:21 +0000</pubDate>
		<dc:creator>Josh Schumacher</dc:creator>
				<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[iPhone SDK]]></category>

		<guid isPermaLink="false">http://blog.joshschumacher.com/?p=20</guid>
		<description><![CDATA[It seems like a pretty simple, common thing you would want to do in objective-c right?  All applications have an Info.plist (or a different plist file as defined in your "Info.plist File" property of your build target).  I've been pretty frustrated with the quality of google search results when trying to figure out how to [...]]]></description>
			<content:encoded><![CDATA[<p>It seems like a pretty simple, common thing you would want to do in objective-c right?  All applications have an Info.plist (or a different plist file as defined in your "Info.plist File" property of your build target).  I've been pretty frustrated with the quality of google search results when trying to figure out how to do more or less mundane things with the iPhone SDK.  I'm going to start writting posts, especially when I have a hard time trying to find what I was looking for in search results.</p>
<p>Here's the quick and dirty: I have a game that we're building here at <a href="http://treemolabs.com">Treemo Labs</a>, <a href="http://www.ticatacgames.net">Tic A Tac Poker</a>.  We're working on getting a lite version out the door.  I wanted to read a custom value out of the Info.plist to tell if it's the lite version or not.  I couldn't figure out how to read a simple value from the default property list file.  Here's some sample code to get the bundleIdentifier, bundle version and custom values from your Info.plist</p>
<div class="igBar"><span id="lcode-2"><a href="#" onclick="javascript:showPlainTxt('code-2'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-2">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#FF9933; font-style:italic;">// Create a new NSBundle pointer</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">NSBundle* mainBundle;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#FF9933; font-style:italic;">// The Info.plist is considered the mainBundle.</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mainBundle = <span style="color:#006600; font-weight:bold;">&#91;</span>NSBundle mainBundle<span style="color:#006600; font-weight:bold;">&#93;</span>;&nbsp; </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#FF9933; font-style:italic;">// Reads the value of the custom key I added to the Info.plist</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#91;</span>mainBundle objectForInfoDictionaryKey:@<span style="color:#CC0000;">"myCustomKey"</span><span style="color:#006600; font-weight:bold;">&#93;</span> </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#FF9933; font-style:italic;">// Another handy thing I had to search around for a little</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#FF9933; font-style:italic;">// Get the value for the &quot;Bundle version&quot; from the Info.plist</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#91;</span>mainBundle objectForInfoDictionaryKey:@<span style="color:#CC0000;">"CFBundleVersion"</span><span style="color:#006600; font-weight:bold;">&#93;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#FF9933; font-style:italic;">// Need the bundle identifier? (probably something like com.mycorp.product)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#91;</span>mainBundle bundleIdentifier<span style="color:#006600; font-weight:bold;">&#93;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>For more information about the NSBundle, view the <a href="http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSBundle_Class/Reference/Reference.html#//apple_ref/doc/uid/20000214">NSBundle Reference Documentation</a>.</p>
<p>To see an alphabetical list of the standard keys you can use in an information property list file, along with a brief description and the platforms to which they apply (Mac OS X or iPhone) check out the <a href="http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/PListKeys.html">Property List Key Reference</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joshschumacher.com/2009/02/19/reading-common-and-custom-values-from-your-infoplist/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Strategic Analysis: Google Presentation</title>
		<link>http://blog.joshschumacher.com/2008/06/03/strategic-analysis-google-presentation/</link>
		<comments>http://blog.joshschumacher.com/2008/06/03/strategic-analysis-google-presentation/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 09:39:27 +0000</pubDate>
		<dc:creator>Josh Schumacher</dc:creator>
				<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[pestel]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[strategic analysis]]></category>
		<category><![CDATA[swot]]></category>

		<guid isPermaLink="false">http://blog.joshschumacher.com/?p=18</guid>
		<description><![CDATA[Important: This presentation was created in December of 2006, the information most likely is out of date.  I am posting this in response to the demand from slideshare.
During my senior year at Western Washington University, for a final project in my Management 495 class, I did group presentation, performing a strategic analysis of Google [...]]]></description>
			<content:encoded><![CDATA[<p><b>Important: This presentation was created in December of 2006, the information most likely is out of date.  I am posting this in response to the demand from slideshare.</b></p>
<p>During my senior year at <a href="http://www.wwu.edu/">Western Washington University</a>, for a final project in my Management 495 class, I did group presentation, performing a strategic analysis of Google and the positioning in the search engine market.  I posted this slideshow to <a href="http://slideshare.net">slideshare</a> and received an incredible amount of comments and messages asking for the presentation.  The presentation currently has over 25,000 views and over 100 favorites.</p>
<p>Like I said in the disclaimer, this slideshow is a year and a half old so a lot of the information is out dated.  Also, looking back at the slideshow, there are some formatting issues that I would resolve if I had to go back and do it again.  The presentation, was put together using Apple's <a href="http://www.apple.com/iwork/keynote/">Keynote</a> software.  This was a group presentation so I was not the only contributer.  The other contributers were: Charity Thomas, Frieder Mack and Jennifer Bell.</p>
<p>You can download a pdf version of the presentation here: <a href='http://blog.joshschumacher.com/wp-content/uploads/2008/06/google-presentation.pdf'>Google Strategic Analysis Presentation</a> <img src="http://joshschumacher.com/images/pdf.png" alt="[PDF]" /> (December 2006)</p>
<div style="width:425px;text-align:left" id="__ss_32219"><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=strategic-analysis-google-15381&#038;rel=0"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=strategic-analysis-google-15381&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"><a href="http://www.slideshare.net/?src=embed"><img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/></a> | <a href="http://www.slideshare.net/joshs633/strategic-analysis-google?src=embed" title="View Strategic Analysis: Google on SlideShare">View</a> | <a href="http://www.slideshare.net/upload?src=embed">Upload your own</a></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.joshschumacher.com/2008/06/03/strategic-analysis-google-presentation/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Standardizing a way to represent an object in PHP</title>
		<link>http://blog.joshschumacher.com/2008/04/23/standardizing-a-way-to-represent-an-object-in-php/</link>
		<comments>http://blog.joshschumacher.com/2008/04/23/standardizing-a-way-to-represent-an-object-in-php/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 06:20:04 +0000</pubDate>
		<dc:creator>Josh Schumacher</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://blog.joshschumacher.com/2007/08/04/standardizing-a-way-to-represent-an-object-in-php/</guid>
		<description><![CDATA[During the process of designing our API at Treemo, one of the first major design implementation hurdles we had to overcome was how to standardize a way to define what data in an object was "exportable" and can later be transformed into XML.  The solution that I came up with defines a Node and [...]]]></description>
			<content:encoded><![CDATA[<p>During the process of designing our API at <a href="http://treemo.com">Treemo</a>, one of the first major design implementation hurdles we had to overcome was how to standardize a way to define what data in an object was "exportable" and can later be transformed into XML.  The solution that I came up with defines a Node and a NodeCollection object.</p>
<p>When deciding what the data structure should look like, I wrote some pseudo XML that we need to be able to model.</p>
<div class="igBar"><span id="lxml-5"><a href="#" onclick="javascript:showPlainTxt('xml-5'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">XML:</span>
<div id="xml-5">
<div class="xml">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;channel<span style="font-weight: bold; color: black;">&gt;</span></span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;owner</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"testuser"</span> <span style="color: #000066;">email</span>=<span style="color: #ff0000;">"test@test.com"</span> <span style="font-weight: bold; color: black;">/&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;list</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"foo"</span><span style="font-weight: bold; color: black;">&gt;</span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;item</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">"123"</span><span style="font-weight: bold; color: black;">&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;files<span style="font-weight: bold; color: black;">&gt;</span></span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;image</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"http://foo.bar.com"</span> <span style="font-weight: bold; color: black;">/&gt;</span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;3gp</span> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">"http://3gp.foo.bar.com"</span> <span style="font-weight: bold; color: black;">/&gt;</span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/files<span style="font-weight: bold; color: black;">&gt;</span></span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/item<span style="font-weight: bold; color: black;">&gt;</span></span></span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/list<span style="font-weight: bold; color: black;">&gt;</span></span></span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/channel<span style="font-weight: bold; color: black;">&gt;</span></span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>A Node has a <tt>(string) $type</tt>, <tt>(mixed) $attributes</tt> and <tt>(NodeCollection) $children</tt>.  Using the above XML as a reference, our root node (let's call it <tt>$root</tt>) would have <tt>$type</tt> = 'channel' and no attributes.  You would then add two nodes to the NodeCollection <tt>$children</tt>, owner and list.  Owner would have <tt>$attributes</tt> of <tt>array('name'=&gt;'testuser', 'email'=&gt;'test@test.com')</tt> and <tt>$children</tt> would be an empty NodeCollection.</p>
<p>The biggest design decision made about NodeCollection was that <tt>NodeCollection implements Iterator</tt>.  By implementing Iterator, you can later foreach over <tt>$children</tt> and it can loop through the elements with no problem.  Implementing Iterator is a pretty cool design pattern - I'll have to write a post about it in the near future.  The ability to foreach over <tt>$children</tt> helps tremendously when writing ExportNodeToXml.</p>
<p>Wrapping up, pseudo code to export and object to a Node that can later be transformed to XML would look like this:</p>
<div class="igBar"><span id="lphp-6"><a href="#" onclick="javascript:showPlainTxt('php-6'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-6">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">class</span> Channel implements iExportable <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; public <span style="color:#000000; font-weight:bold;">function</span> toExportable<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$root</span> = <span style="color:#000000; font-weight:bold;">new</span> Node<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'channel'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$root</span>-&gt;<span style="color:#006600;">children</span>-&gt;<span style="color:#006600;">addNode</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#000000; font-weight:bold;">new</span> Node<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'list'</span>, <a href="http://www.php.net/array"><span style="color:#000066;">array</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'name'</span>=&gt;<span style="color:#FF0000;">'testuser'</span>, <span style="color:#FF0000;">'email'</span>=&gt;<span style="color:#FF0000;">'test@test.com'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$root</span>-&gt;<span style="color:#006600;">children</span>-&gt;<span style="color:#006600;">addNode</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#000000; font-weight:bold;">new</span> Node<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'list'</span>, <a href="http://www.php.net/array"><span style="color:#000066;">array</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'id'</span>=&gt;<span style="color:#FF0000;">'123'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$root</span>-&gt;<span style="color:#006600;">children</span>-&gt;<span style="color:#006600;">getNode</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC66CC;color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span>-&gt;<span style="color:#006600;">children</span>-&gt;<span style="color:#006600;">addNode</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#000000; font-weight:bold;">new</span> Node<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'files'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$root</span>-&gt;<span style="color:#006600;">children</span>-&gt;<span style="color:#006600;">getNode</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC66CC;color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span>-&gt;<span style="color:#006600;">children</span>-&gt;<span style="color:#006600;">getNode</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC66CC;color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>-&gt;<span style="color:#006600;">children</span>-&gt;<span style="color:#006600;">addNode</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'image'</span>, <a href="http://www.php.net/array"><span style="color:#000066;">array</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'href'</span>=&gt;<span style="color:#FF0000;">'http://foo.bar.com'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000FF;">$root</span>-&gt;<span style="color:#006600;">children</span>-&gt;<span style="color:#006600;">getNode</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC66CC;color:#800000;">2</span><span style="color:#006600; font-weight:bold;">&#41;</span>-&gt;<span style="color:#006600;">children</span>-&gt;<span style="color:#006600;">getNode</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC66CC;color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span>-&gt;<span style="color:#006600;">children</span>-&gt;<span style="color:#006600;">addNode</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'3gp'</span>, <a href="http://www.php.net/array"><span style="color:#000066;">array</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'href'</span>=&gt;<span style="color:#FF0000;">'http://3gp.foo.bar.com'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joshschumacher.com/2008/04/23/standardizing-a-way-to-represent-an-object-in-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>I love public radio in Seattle</title>
		<link>http://blog.joshschumacher.com/2007/08/03/i-love-public-radio-in-seattle/</link>
		<comments>http://blog.joshschumacher.com/2007/08/03/i-love-public-radio-in-seattle/#comments</comments>
		<pubDate>Sat, 04 Aug 2007 00:37:57 +0000</pubDate>
		<dc:creator>Josh Schumacher</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://blog.joshschumacher.com/2007/08/03/i-love-public-radio-in-seattle/</guid>
		<description><![CDATA[For the majority of my life, my dad worked for a public radio station in Spokane, KPBX, so I've always had an affinity for public radio.  Since moving to the Seattle area and spending a lot of time in my car commuting to and from work (usually about 35 min - 1 hour each [...]]]></description>
			<content:encoded><![CDATA[<p>For the majority of my life, my dad worked for a public radio station in Spokane, <a href="http://kpbx.org/">KPBX</a>, so I've always had an affinity for public radio.  Since moving to the Seattle area and spending a lot of time in my car commuting to and from work (usually about 35 min - 1 hour each way) I've been listening to a lot of radio.  When I first started commuting, I listened to a lot of commercial radio but I find that stuff gets really old, really fast.  I can only listen to <a href="http://www.youtube.com/watch?v=mrTUhkN7RFA">Umbrella by Rihanna</a> so many times before my head wants to explode.</p>
<p>Recently, I've rediscovered my love for public radio. With the trio of eclectic music from <a href="http://kexp.org">KEXP 90.9</a>, dance and techno from <a href="http://www.c895worldwide.com">C89.5</a> and local, national and international news from <a href="http://www.kuow.org/">KUOW 94.9</a> I can always find something good to listen to. Not only am I aurally satisfied, listening to public radio often seems to put me in a civically minded mood - encouraging me to soaking up as much information and culture as my brain can handle.</p>
<p>On another note, I haven't posted in a while - after graduating, I started at a company called <a href="http://ascentium.com/">Ascentium</a>.  They are an interactive technical marketing and consulting firm.  I worked there as a web developer for about 2.5 months and then I decided I wasn't really being challenged enough and I missed writing PHP a lot.  So I left to start working at a startup that I had looked at during my initial job search right after graduating, <a href="http://treemo.com">Treemo</a>.</p>
<p>I've been at Treemo since the middle of June and I'm loving it.  We have some really cool stuff coming down the pipe in the near future.  Right now, I'm working on writing an API - very exciting work.  Now that I'm working back in the PHP biz, I'm going to start writing about developing PHP again.  Stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joshschumacher.com/2007/08/03/i-love-public-radio-in-seattle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP &#8211; Delete selected items from an array</title>
		<link>http://blog.joshschumacher.com/2007/03/22/php-delete-selected-items-from-an-array/</link>
		<comments>http://blog.joshschumacher.com/2007/03/22/php-delete-selected-items-from-an-array/#comments</comments>
		<pubDate>Fri, 23 Mar 2007 01:01:12 +0000</pubDate>
		<dc:creator>Josh Schumacher</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.joshschumacher.com/2007/03/22/php-delete-selected-items-from-an-array/</guid>
		<description><![CDATA[I was enlightened the day I discovered array_filter.  You may find yourself with an array of values and you want to delete some of those values from the array.  There is no 'delete element from array' function built into php but you can use an even more powerful function, array_filter.
Let's look at a [...]]]></description>
			<content:encoded><![CDATA[<p>I was enlightened the day I discovered <code>array_filter</code>.  You may find yourself with an array of values and you want to delete some of those values from the array.  There is no 'delete element from array' function built into php but you can use an even more powerful function, <code>array_filter</code>.</p>
<p>Let's look at a simple example.  I have an array containing values, some are numeric, some might not be.  I only want my array to contain the valid numeric entries and I want to delete the other values.  PHP has a helper function we are going to be utilizing, <code>is_numeric</code>.</p>
<div class="igBar"><span id="lphp-9"><a href="#" onclick="javascript:showPlainTxt('php-9'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-9">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$data</span> = <a href="http://www.php.net/array"><span style="color:#000066;">array</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC66CC;color:#800000;">42</span>, <span style="color:#FF0000;">"foo"</span>, <span style="color:#CC66CC;color:#800000;">96</span>, <span style="color:#FF0000;">""</span>, <span style="color:#CC66CC;color:#800000;">100</span>.<span style="color:#CC66CC;color:#800000;">96</span>, <span style="color:#FF0000;">"php"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#FF9933; font-style:italic;">// Filter each value of $data through the function is_numeric</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$numeric_data</span> = <a href="http://www.php.net/array_filter"><span style="color:#000066;">array_filter</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$data</span>, <span style="color:#FF0000;">"is_numeric"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#FF9933; font-style:italic;">// Re-key the array so the keys are sequential and numeric (starting at 0)</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$numeric_data</span> = <a href="http://www.php.net/array_values"><span style="color:#000066;">array_values</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$numeric_data</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#FF9933; font-style:italic;">// Print out the new, filtered data</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/print_r"><span style="color:#000066;">print_r</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$numeric_data</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>The output from above is:</p>
<pre>
Array
(
    [0] => 42
    [1] => 96
    [2] => 100.96
)
</pre>
<p>Pretty handy function.  Notice how I ran my data through the function <code>array_values</code>, before that function was run, the keys were <code>(0,2,4)</code>.</p>
<p>Another example with a user defined function.  I have defined a collection of tags and I want my tag collection to only contain tags that match the criteria the user has requested.</p>
<div class="igBar"><span id="lphp-10"><a href="#" onclick="javascript:showPlainTxt('php-10'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-10">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$tagCollection</span> = <a href="http://www.php.net/array"><span style="color:#000066;">array</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">"AJAX"</span>, <span style="color:#FF0000;">"Analytics"</span>, <span style="color:#FF0000;">"CSS"</span>, <span style="color:#FF0000;">"Javascript"</span>, <span style="color:#FF0000;">"JoshSchumacher.com"</span>, <span style="color:#FF0000;">"PHP"</span>, <span style="color:#FF0000;">"Prototype"</span>, <span style="color:#FF0000;">"Web 2.0"</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#FF9933; font-style:italic;">// Custom function used to filter the $tagCollection based on query sent to page</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">function</span> strTagMatch<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$val</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#0000FF;">$query</span> = <a href="http://www.php.net/isset"><span style="color:#000066;">isset</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$_REQUEST</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#FF0000;">'Tags'</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span> ? <span style="color:#0000FF;">$_REQUEST</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#FF0000;">'Tags'</span><span style="color:#006600; font-weight:bold;">&#93;</span> : <span style="color:#FF0000;">''</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#616100;">return</span> <span style="color:#006600; font-weight:bold;">&#40;</span>stripos<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$val</span>, <span style="color:#0000FF;">$query</span><span style="color:#006600; font-weight:bold;">&#41;</span> !== <span style="color:#000000; font-weight:bold;">false</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$tags</span> = <a href="http://www.php.net/array_filter"><span style="color:#000066;">array_filter</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$tagCollection</span>, <span style="color:#FF0000;">"strTagMatch"</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Voila! Deleting elements from an array has never been easier.</p>
<p>For more information, see the <a href="http://us3.php.net/manual/en/function.array-filter.php">php documentation on array_filter</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joshschumacher.com/2007/03/22/php-delete-selected-items-from-an-array/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Howto: Exclude developer hits in Analytics</title>
		<link>http://blog.joshschumacher.com/2007/03/16/howto-not-track-developer-hits-in-analytics/</link>
		<comments>http://blog.joshschumacher.com/2007/03/16/howto-not-track-developer-hits-in-analytics/#comments</comments>
		<pubDate>Fri, 16 Mar 2007 18:25:29 +0000</pubDate>
		<dc:creator>Josh Schumacher</dc:creator>
				<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.joshschumacher.com/2007/03/16/howto-not-track-developer-hits-in-analytics/</guid>
		<description><![CDATA[When developing a site, I visit it a lot - OK Josh, that was an obvious.  Point is, I was tired of tracking my visits to sites that I maintain.  I really care about tracking significant users and how they navigate the site and what pages they find valuable but I don't care [...]]]></description>
			<content:encoded><![CDATA[<p>When developing a site, I visit it a lot - OK Josh, that was an obvious.  Point is, I was tired of tracking my visits to sites that I maintain.  I really care about tracking significant users and how they navigate the site and what pages they find valuable but I don't care about my hits.</p>
<p>I put together a quick page that I can navigate to that will install a cookie for the browser. I can then check for the cookie in my standard header include so the <a href='http://analytics.google.com'>Google Analytics</a> tracking code isn't sent to the browser.</p>
<p><strong>The code to set the cookie</strong> (and make sure it's installed correctly)</p>
<div class="igBar"><span id="lphp-13"><a href="#" onclick="javascript:showPlainTxt('php-13'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-13">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><a href="http://www.php.net/setcookie"><span style="color:#000066;">setcookie</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">"hideAnalytics"</span>, <span style="color:#FF0000;">'true'</span>, <a href="http://www.php.net/time"><span style="color:#000066;">time</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>+<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC66CC;color:#800000;">3600</span>*<span style="color:#CC66CC;color:#800000;">24</span>*<span style="color:#CC66CC;color:#800000;">365</span>*<span style="color:#CC66CC;color:#800000;">30</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#616100;">if</span><span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/isset"><span style="color:#000066;">isset</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$_COOKIE</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#FF0000;">'hideAnalytics'</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span> &amp;&amp; <span style="color:#0000FF;">$_COOKIE</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#FF0000;">'hideAnalytics'</span><span style="color:#006600; font-weight:bold;">&#93;</span> == <span style="color:#FF0000;">'true'</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <a href="http://www.php.net/print"><span style="color:#000066;">print</span></a> <span style="color:#FF0000;">"Cookie installed"</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><strong>Similar (but inverse) code is then inserted in my header</strong></p>
<div class="igBar"><span id="lphp-14"><a href="#" onclick="javascript:showPlainTxt('php-14'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-14">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">&lt;?</span> <span style="color:#616100;">if</span><span style="color:#006600; font-weight:bold;">&#40;</span>!<a href="http://www.php.net/isset"><span style="color:#000066;">isset</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$_COOKIE</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#FF0000;">'hideAnalytics'</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span> || <span style="color:#0000FF;">$_COOKIE</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#FF0000;">'hideAnalytics'</span><span style="color:#006600; font-weight:bold;">&#93;</span> != <span style="color:#FF0000;">'true'</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#000000; font-weight:bold;">?&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ANALYTICS TRACKING CODE</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">&lt;?</span> <span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#000000; font-weight:bold;">?&gt;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Analytics is a great tool and it's going to be even more useful now that I won't be tracking my own hits.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joshschumacher.com/2007/03/16/howto-not-track-developer-hits-in-analytics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
