<?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>Peak Studios</title>
	<atom:link href="http://peakstudios.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://peakstudios.com</link>
	<description>Peak Studios - Internet marketing - Web design - web development</description>
	<lastBuildDate>Fri, 30 Sep 2011 18:35:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Fixing Flash Player and External API sandbox issues using PHP &amp; AS3</title>
		<link>http://peakstudios.com/fixing-flash-player-and-externa-api-sandbox-issues-using-php-as3/</link>
		<comments>http://peakstudios.com/fixing-flash-player-and-externa-api-sandbox-issues-using-php-as3/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 18:19:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Peak Studios]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://peakstudios.com/?p=568</guid>
		<description><![CDATA[Create a simple PHP bridge so Flash can comunicate with external API's.]]></description>
			<content:encoded><![CDATA[<p>When we created the mobile QR code creator for <a title="Mobile Qr Code" href="http://scanourbusiness.com" target="_blank">Scan Our Business, Inc</a> we ran into some complications with Flash player&#8217;s security settings.  After looking around the web I didn&#8217;t find any good explanation on how to fix this except for one post tell me to basically bridge the api from my own server.  It was actually very easy to do once I figured out what needed to be done.  In this example I was working with the charts api, but it would work the same way on any external sites api that is missing a cross domain file.</p>
<p>This is the error code I was getting back from Flash, *** Security Sandbox Violation ***Connection to https://&#8230; halted &#8211; not permitted from http://&#8230;swfError: Request for resource at https://&#8230; by requestor from http://&#8230;swf is denied due to lack of policy file permissions.</p>
<p>I did not make sample files for you since this tutorial is very simple.  You will need to create each of these files for your specific use.  </p>
<p>The First file we will create is bridge.php  This is a very simple file it just passes vars to the external api and echos the results back to flash.<br />
<code>if(isset($_GET[external_url])){<br />
		echo file_get_contents('https://chart.googleapis.com/chart?chs=500x500&#038;cht=qr&#038;chl=http://your-domain/'.$_GET[external_url]);<br />
	}else{<br />
		echo "url not provided.";<br />
	}</code><br />
Upload bridge.php to your web server.  Instead of  &#8230;googleapis.com you could use any api that returns results based on a url string.  Notice we hardcode http://your-domain/upload-location/bridge.php so others can&#8217;t use the bridge for their site.  You can test this file by passing the needed $_GET vars to it.  Once you&#8217;re happy with the returned result of the bridge now we can start working with Flash.</p>
<p>In this example the bridge will return a image.  Your use may be different so handling of the data may need to be done by loading a xml file or send and receive vars rather than the simple urlLoader we are using.</p>
<p>So we don&#8217;t get any errors we use a crossdomain.xml.<br />
Non-SSL:<br />
<code>&lt;?xml version="1.0"?&gt;<br />
&lt;cross-domain-policy&gt;<br />
	&lt;site-control permitted-cross-domain-policies="all"/&gt;<br />
	&lt;allow-access-from domain="http://your-domain" /&gt;<br />
&lt;/cross-domain-policy&gt;</code></p>
<p>SSL:<br />
<code>&lt;?xml version="1.0"?&gt;<br />
&lt;cross-domain-policy&gt;<br />
	&lt;site-control permitted-cross-domain-policies="all"/&gt;<br />
	&lt;allow-access-from domain="https://your-domain" secure="true" /&gt;<br />
&lt;/cross-domain-policy&gt;<br />
</code><br />
Upload crossdomain.xml to your web server.  Cross domain files tell flash player what flash can access on your server. Check <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/Security.html?filter_flash=cs5&#038;filter_flashplayer=10.2&#038;filter_air=2.6" title-"Adobe CS 5.5 AS3 cross-domain documentation" target="_blank" rel="nofollow">Adobe&#8217;s documentation</a> for more info on security policies and cross domain files.</p>
<p>Now we are ready to write some action script.  Create both the .FLA and .AS file.  On the FLA file it just point to our class &#8220;api_bridge.as&#8221; in the document properties tab.  We only create the FLA for publishing the SWF file.  Now you only need to edit 2 lines in this class to see everything working. Find the two lines that say your-domain and place your domain name in there.  Use http or https for your specific requirements.<br />
<code>package  {<br />
	import flash.display.*;<br />
	import flash.events.*;<br />
	import flash.net.*;<br />
	import flash.system.*;</p>
<p>	public class api_bridge extends MovieClip {<br />
		private var imageLoader:Loader;<br />
		private var imageRequest:URLRequest;<br />
		private var bitmapData:BitmapData;<br />
		private var bm:Bitmap;</p>
<p>		public function api_bridge() {<br />
			Security.loadPolicyFile("your-domain/crossdomain.xml");<br />
			imageLoader = new Loader();<br />
			theURL = "your-domain/bridge.php?external_url="test";<br />
			var loaderContext:LoaderContext = new LoaderContext();<br />
			loaderContext.checkPolicyFile = true;<br />
			imageRequest = new URLRequest(theURL);<br />
			imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);<br />
			imageLoader.load(imageRequest,loaderContext);<br />
		}</p>
<p>		private function onComplete(evt:Event):void {<br />
			bitmapData = new BitmapData(460, 460, true, 0x00000000);<br />
			bitmapData.draw(evt.target.loader.content.bitmapData);<br />
			bm = new Bitmap(bitmapData);<br />
			addChild(bm);<br />
			imageLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);<br />
     	     	}<br />
	}<br />
}</code><br />
This will return a image and add it to the stage.  It&#8217;s that simple.</p>
<p>Hope you enjoy the tutorial.</p>
]]></content:encoded>
			<wfw:commentRss>http://peakstudios.com/fixing-flash-player-and-externa-api-sandbox-issues-using-php-as3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exclude a city from your Google Adwords campaign</title>
		<link>http://peakstudios.com/how-to-exclude-a-city-from-your-google-adwords-campaign/</link>
		<comments>http://peakstudios.com/how-to-exclude-a-city-from-your-google-adwords-campaign/#comments</comments>
		<pubDate>Thu, 09 Dec 2010 20:28:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://peakstudios.com/?p=524</guid>
		<description><![CDATA[Instructions on how to exclude cities from your Google Adwords campaign.]]></description>
			<content:encoded><![CDATA[<p>If you are worried about not showing in another area you can always check if you will be, by selecting that city in your campaign settings search. If you notice Boulder and Broomfield do not have any areas that are in common, so you would not have to exclude anything. However Broomfield and Denver do have some common area and there is the potential that you could show in the other area.</p>
<p>If your campaign is showing in a city you don’t want it to you can exclude the city by using negative keywords.  In this map we selected 3 areas (Boulder, Broomfield and Denver). As you can see the area Google uses for the cities is not exact so you may have to exclude cities you don’t’ want to show up in. For example if you only wanted to show in Denver but not Broomfield you would want to exclude it. For every ad group within the campaign for the Denver area you will want to add a negative keyword, you can do this simply by selecting add keywords and before the keyword using the – symbol. For the example they would want to use the keyword  –Broomfield. By doing this your ad will not show in their area when they are searching for a generic term like carpet cleaning, however if they were to search for carpet cleaning Denver from that area you would still show up.</p>
<div id="attachment_525" class="wp-caption alignnone" style="width: 440px"><a href="http://peakstudios.com/wp-content/uploads/2010/12/google_ads_words_4.jpg"><img class="size-full wp-image-525" title="google_ads_words_4" src="http://peakstudios.com/wp-content/uploads/2010/12/google_ads_words_4.jpg" alt="Exclude city from Google Adwords" width="430" height="418" /></a><p class="wp-caption-text">Exclude cities from Google Adwords</p></div>
]]></content:encoded>
			<wfw:commentRss>http://peakstudios.com/how-to-exclude-a-city-from-your-google-adwords-campaign/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Adwords IP exclusion tool</title>
		<link>http://peakstudios.com/how-to-use-google-adwords-ip-exclusion-tool/</link>
		<comments>http://peakstudios.com/how-to-use-google-adwords-ip-exclusion-tool/#comments</comments>
		<pubDate>Thu, 09 Dec 2010 20:19:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://peakstudios.com/?p=515</guid>
		<description><![CDATA[Instructions on how to use Google Adwords IP exclusion tool.]]></description>
			<content:encoded><![CDATA[<p>1.       log into your Google Adwords account, when you are logged in you will need to click on the campaign tab.</p>
<div id="attachment_516" class="wp-caption alignnone" style="width: 539px"><a href="http://peakstudios.com/wp-content/uploads/2010/12/google_ads_words.jpg"><img class="size-full wp-image-516" title="google_ads_words" src="http://peakstudios.com/wp-content/uploads/2010/12/google_ads_words.jpg" alt="" width="529" height="87" /></a><p class="wp-caption-text">Google adwords campaign tab</p></div>
<p>2.       Next you will need to click on the networks tab.</p>
<div id="attachment_517" class="wp-caption alignnone" style="width: 554px"><a href="http://peakstudios.com/wp-content/uploads/2010/12/google_ads_words_1.jpg"><img class="size-full wp-image-517" title="google_ads_words_1" src="http://peakstudios.com/wp-content/uploads/2010/12/google_ads_words_1.jpg" alt="google adwords networks tab" width="544" height="131" /></a><p class="wp-caption-text">google adwords networks tab</p></div>
<p>3.       Once you are on the Networks tab scroll down the page and you will see exclusions on the left hand side click on the word exclusions.</p>
<div id="attachment_518" class="wp-caption alignnone" style="width: 473px"><a href="http://peakstudios.com/wp-content/uploads/2010/12/google_ads_words_2.jpg"><img class="size-full wp-image-518" title="google_ads_words_2" src="http://peakstudios.com/wp-content/uploads/2010/12/google_ads_words_2.jpg" alt="Google adwords exclusions link" width="463" height="338" /></a><p class="wp-caption-text">Google adwords exclusions link</p></div>
<p>4.       Now you will need to click on Manage excluded IP address in the lower right hand corner and it will bring up the exclusion tool.</p>
<div id="attachment_519" class="wp-caption alignnone" style="width: 566px"><a href="http://peakstudios.com/wp-content/uploads/2010/12/google_ads_words_3.jpg"><img class="size-full wp-image-519" title="google_ads_words_3" src="http://peakstudios.com/wp-content/uploads/2010/12/google_ads_words_3.jpg" alt="Google adwords manage excluded IP address " width="556" height="88" /></a><p class="wp-caption-text">Google adwords manage excluded IP address </p></div>
<p>5.       Now that you have the tool up select the campaign you want to exclude the IP from, insert the full IP address in the second box and click save.</p>
<p>You can only exclude 100 IP address and so far that has not been an issue for us but could be in the future. When you exclude the IP address that specific IP address will not see your ads in that campaign anymore. By doing this you will help reduce the amount of click fraud you are getting from your competitors.</p>
]]></content:encoded>
			<wfw:commentRss>http://peakstudios.com/how-to-use-google-adwords-ip-exclusion-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reporting competitors for spam at Google</title>
		<link>http://peakstudios.com/reporting-competitors-for-spam-at-google/</link>
		<comments>http://peakstudios.com/reporting-competitors-for-spam-at-google/#comments</comments>
		<pubDate>Sat, 30 Oct 2010 16:56:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://peakstudios.com/?p=497</guid>
		<description><![CDATA[The reasons for and how tos of reporting spam at Google.]]></description>
			<content:encoded><![CDATA[<p>1st of all we need to look at what you can report a competitor for at Google.</p>
<ul>
<li><strong>Hidden text or links</strong>
<p>Because Google cares so much about the content of the page people will add a bunch of content that would make a page ugly and sentences that are incoherent.  Rather than show this content to the public they use Cascading Style Sheets(CSS) or JavaScript(JS) to hide the content.  Google has done a good job catching this content on it&#8217;s own and not indexing information that is hidden before the page is done loading(aka the DOM is returned).
</p>
<p>Rather than hiding the text by using a display trick designers will use CSS to move the content above the viewable area of the page.  This is much harder for Google to detect and when you report the problem it helps Google.  A great way to see this is to view the web site in question with your browser.  Now open a new browser tab and view the search in question at Google.  You will see a link for cached below the Google result most of the time, click on that link.  Google will show you a very basic view of the page.  If you see additional content on the cached view then they are hiding content.  Please take note that if it&#8217;s a small sentence or one link Google probably won&#8217;t care, but if it&#8217;s anymore than that you can report the site.
</p>
</li>
<li><strong>Misleading or repeated words</strong>
<p>The issue of repeated words is easily detected by Google, but misleading words are really up to the users of Google to bring up.</p>
<p>I have a great real life example that you see all the time in search results.  There are a ton of Steam cleaning companies that are trying to pick up on the keywords for organic or green.  They will advertise that they are an organic cleaner, when by all means they are putting a petroleum based cleaner on your carpet.</p>
<p>check out this site, they are claiming organic carpet cleaning (<a href="http://www.colorado-carpet-masters.com/carpetcleaningBoulder.php" target="_blank" rel="nofollow">misleading site</a>).  If you look around you will see this is not the case they actually are using a hypoallergenic petroleum based cleaner.  This is very misleading to the consumer and should be reported to Google.</p>
</li>
<li><strong>Page does not match Google&#8217;s description</strong>
<p>
This is very easy to see.  Most likely the website is writing a meta tag description that doesn&#8217;t match the content of the page or they are hiding content/links to make this happen.
</p>
</li>
<li><strong>Cloaked page</strong>
<p>This is basically a duplicate site, but done in the easiest possible way either using frames or JS that acts like frames. The JS code below will make a cloaked page of Google.<br />
<code><br />
if (parent.location.href == self.location.href) {<br />
if (window.location.replace)<br />
window.location.replace('http://www.google.com');<br />
else<br />
window.location.href = 'http://www.google.com';<br />
}<br />
</code>
</p>
</li>
<li><strong>Deceptive redirects</strong>
<p>A deceptive redirect automatically redirects a user from the initial web page to a page with different content on it.  People use these pages to get keywords at Google that don&#8217;t really relate to their site.  Normally I see this done when a competitor is trying to get a keyword with another companies name or services in it.</p>
</li>
<li><strong>Doorway pages</strong>
<p>
Normally a generic page that is used to get keywords or phrases at a search engines.  When you come ot the page it links the user into the real site.  I have seen doorway pages that were useful back in the day.</p>
<p>A very cool site that had a doorway page for a long time is called <a href="http://heavy.com" target="_blank">heavy.com</a>  They were like the MTV of the internet back in about 2000.  They used a entrance page(on the same site) because they needed about 30 seconds to load the site in the background.  For me that was a valid reason and good fix at the time.  Today with much faster internet speeds a doorway page is not needed for the site.</p>
<p>Since 2000 many people thought it would be more effective for them to make many doorway pages that link into a site. Normally using many different domains rather than the main site.  These are the kind of sites I would report to Google for doorway pages, not a site with one single entrance page at the front.</p>
</li>
<li><strong>Duplicate site or pages</strong>
<p>
Now you see Duplicate pages and sites also known as duplicate content as the major issue for Google to fight against.  Google is doing a good job at catching this for the most part, but as Google gets smarter so do the spammers.  I see this all the time where a competitor will use multiple sites and link them together making duplicate pages, but trying to change the content just enough for Google not to catch it.</p>
<p>A good example of <a href="http://cleanercarpet.net" target="_blank" rel="nofollow">duplicate pages</a>.  Just click on the cities across the top and you will see duplicate pages of the home page. It&#8217;s very easy to report this site because of this.</p>
</li>
<li><strong>Other (specify)</strong>
<p>
Other can be used for many things, but most of all we use it for reporting false advertisement, hate, slander, vulgar language, adult content, copy right or trademark infringement.
</p>
</li>
</ul>
<p>In the webmaster tools at Google you will see the report spam link on the left side menu or you can follow this link <a href="https://www.google.com/webmasters/tools/spamreport?hl=en">https://www.google.com/webmasters/tools/spamreport?hl=en</a> and fill out the simple form on Google then you&#8217;re are all done. It can take a long time for Google to do anything so please be patient and don&#8217;t make multiple complaints on the same site or then your spamming Google too.</p>
]]></content:encoded>
			<wfw:commentRss>http://peakstudios.com/reporting-competitors-for-spam-at-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Places Dos &amp; don&#8217;ts</title>
		<link>http://peakstudios.com/google-places-dos-donts/</link>
		<comments>http://peakstudios.com/google-places-dos-donts/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 04:12:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://peakstudios.com/?p=490</guid>
		<description><![CDATA[A step by step guide to optimizing your Google Places listing.]]></description>
			<content:encoded><![CDATA[<p>There are many informational websites out there about how you can optimize your Google places business listing. Here are the key components that they all mention. These are listed in the order as you would enter them in your <a href="http://Google.com/places" title="Google places">Google Places</a> account.</p>
<ul>
<li>Claim your listing it is easy to do and is very important.</li>
<li>Everyone knows that the name of your business is very important by adding keywords to the name you will get higher placement, however Google has guidelines against using a fake name so make sure the name you or your marketing company are using is your exact business name. If your business (a custom paper and printing company) is called “Acme Paper” list it as that name not “Acme printing and custom paper” don’t break Google’s guidelines thinking you will get ahead. If you get caught and banned it can take months or even longer to even have a listing let alone showing up on the first page of Google.</li>
<li>Make sure you use your correct business address, many companies try to tell you that they want to setup  fake business address if you get caught they will not only remove that one incorrect listing they will actually remove all of the listings for your business regardless if they are the correct business information or not.</li>
<li>Input your correct local phone number for the office you are creating the listing for you can add your 800 number as one of your additional phone numbers.</li>
<li>Input your URL, if you don’t have a website leave this blank don’t make up a fake URL. This URL needs to go directly to your website no fake redirect URLs.</li>
<li>Write a compelling description of your business write it for your customers to see don’t make it too keyword heavy.</li>
<li>Create business categories that relate to your business.</li>
<li>Are you a business that services clients at their home or do they come to you?
<ul>
<li>If they come to you leave the box with the no checked.</li>
<li>If you service your clients at their homes then please check the yes box and fill in the service area where you service your customers.</li>
</ul>
</li>
<li>If you don’t want to put in the hours of operations you don’t have to and you will not be penalized for doing so.</li>
<li>Select the type of payments you accept; no matter what type of business you have there is an option that will work for your business.</li>
<li>Add photos of your business this is simple just browse your computer for images of your business, logo’s pictures of your office, etc.. some companies think this doesn’t matter but it actually does cause you need to get your to be to 100% and without pictures it never will.</li>
<li>Add related videos if you don’t have any videos and can’t create a digital video and upload it to YouTube see if there are other videos that relate to your business on YouTube.</li>
<li>Additional details.  Add additional details that might be helpful to consumers, and be sure to include one that says contact us and create a direct link including the http:// to your contact us page.</li>
</ul>
<p><strong>Additional items that will help</strong></p>
<ul>
<li>Make sure that all websites that have your information are using the correct contact information exactly as it appears in your Google places account.</li>
<li>Add coupons  when you are running a special.</li>
<li>Add a tag, this is a paid service in Google place and is well worth the money if you are showing up on page one.</li>
</ul>
<p><strong>Choosing a local internet marketing company</strong></p>
<ul>
<li>Make sure they are following all of the rules set by Google’s guidelines.</li>
<li>Make sure that you own the listing and that they will not take it away from you, you are paying for them to do work make sure you get to keep what they do.</li>
<li>Most local internet marketing companies charge from $150 to $350 a month if you are paying more look for another company.</li>
<li>Stay away from IYP (internet yellow page companies) they charge you to direct people to the listing on their website.</li>
<li>Find out exactly what they are going to do for you, if they say they will get you to page one find out where on the page and for what cities and keywords.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://peakstudios.com/google-places-dos-donts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PR Rank leak</title>
		<link>http://peakstudios.com/pr-rank-leak/</link>
		<comments>http://peakstudios.com/pr-rank-leak/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 18:24:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://peakstudios.com/?p=481</guid>
		<description><![CDATA[A few simple ways to insure minimal PR rank leakage using HTML or CSS and JavaScript.]]></description>
			<content:encoded><![CDATA[<p>The other day we had a 3rd party complain about possible PR rank leaking issues from a link. PR rank leak is when a keyword is losing PR rank on a page or site due to an external link(s) on the site. I thought I would show a couple of simple ways to fix this possible issue.</p>
<p>The easiest way to fix this is by using <code>rel="nofollow"</code> on your anchor tag.  This will tell the search engine robot not to follow the link.  since the robot doesn&#8217;t follow the link your are fixing 99% of the possible issue this way.  The reason I only give it a 99% fix is that Google still tracks where the user click through the Google cookie that is set every time you go to Google.</p>
<p><small><em> note: one might think that a simple JavaScript could delete the cookie, but I haven&#8217;t yet tested to see if Google might find that as malicious code.</em></small></p>
<p>Fix this issue is using JavaScript to display the link with <code>document.write</code>.  Google has a hard time indexing Java Script content so this will help make it difficult for Google to index the content of the link.</p>
<p>Another way to fix this issue is by using JavaScript to display the link <code>onComplete</code>.  If you use <code>display:none;</code> on the link until the page is loaded Google will most likely not index the link.  This is because an old Black Hat SEO technique was to hide a huge list of links that only the search engine robots will see. To fight against this Google stopped indexing page content that is set to display none.</p>
<p>Last of all you can make the link an image rather than text so Google has less content to index the link with.</p>
]]></content:encoded>
			<wfw:commentRss>http://peakstudios.com/pr-rank-leak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Digital Download Shortcode for PHPurchase</title>
		<link>http://peakstudios.com/digital-download-short-codes-for-phpurchase/</link>
		<comments>http://peakstudios.com/digital-download-short-codes-for-phpurchase/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 17:50:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://peakstudios.com/?p=460</guid>
		<description><![CDATA[Install a couple files into the PHPurchase plugin and have shortcode for your digital download links.]]></description>
			<content:encoded><![CDATA[<p>1st let me say <a href="http://www.phpurchase.com?ap_id=peakstudios" rel="nofollow" target="_blank" title="wordpress shopping cart">PHPurchase</a> is my favorite shopping cart plugin for WordPress.  When implementing a custom cart in WordPress there&#8217;s nothing like the flexibility and ease of integration that <a href="http://www.phpurchase.com?ap_id=peakstudios"  rel="nofollow" target="_blank" title="wp ecommerce">PHPurchase</a> offers.  One thing I found that was missing is a shortcode that will create the download link for a purchased product.  I spent a few hours last night and created the shortcode for digital download links.</p>
<p><strong>Requirments:</strong></p>
<ul>
<li><a href="http://www.phpurchase.com?ap_id=peakstudios" title="WordPress cart"  rel="nofollow" target="_blank">PHPurchase Pro</a> installed</li>
<li><a href="http://www.cdgcommerce.com/">Quantum Gateway</a> installed</li>
</ul>
<h2>Step 1:</h2>
<p><span><a href="http://peakstudios.com/shortcode.zip">Download</a> the code unzip the files and upload them to wp-content/plugins/phpurchase/pro.</span></p>
<h2>Step 2:</h2>
<p><span>Open wp-content/plugins/phpurchase/pro/hook.php to edit.</span></p>
<h2>Step 3:</h2>
<p><span>At the end of the file add this code just before php is closed(<code>?></code>).</span><br />
<code><br />
function phpurchaseDownloadLink($attrs, $content='null') {<br />
 	global $wpdb;<br />
	$order_items = PHPurchaseCommon::getTableName('order_items');<br />
	$recurring_items = PHPurchaseCommon::getTableName('recurring_items');<br />
	$phproducts = PHPurchaseCommon::getTableName('products');<br />
	$mylink = $wpdb->get_results("SELECT a.*,c.download_path FROM ".$order_items." AS a, ".$recurring_items." AS b, ".$phproducts." as c WHERE b.account_id= '".$_SESSION['PHPurchaseMember']."' AND a.id = b.order_item_id AND a.product_id = c.id", ARRAY_A);<br />
	$attrs['mylink'] = $mylink;<br />
 	$view = PHPurchaseCommon::getView('pro/digital-download.php', $attrs);<br />
 	return $view;<br />
}<br />
add_shortcode('digital-download', 'phpurchaseDownloadLink');</p>
<p>function phpurchaseDownloader() {<br />
 	$view = PHPurchaseCommon::getView('pro/digital-downloader.php');<br />
 	return $view;<br />
}<br />
add_shortcode('digital-downloader', 'phpurchaseDownloader');<br />
</code></p>
<h2>Step 4:</h2>
<p>Login to WordPress.  Once logged in create a new page named &#8220;Purchased Downloads&#8221;(you can rename it after publishing just don&#8217;t change the link).  Add <code>[digital-downloader]</code> to the content on the page and nothing else.</p>
<h2>Step 5:</h2>
<p>Now you can add <code>[digital-download item-number=""]</code> to any page or post with this shortcode.  If you add an item number(s) it will check to see if the current customer has purchased that product.  If the user has purchased the product then it will show the link if they have not the link will be blank.  If they have purchased the product, but there in no download for the product it will return a message, &#8220;No download currently available&#8221;.</p>
<p>If you want to display all downloads purchased by a user simply leave item-number blank.  If you want to show more than one specific download at a time you can use a comma separated list(<code>[item-number="1,2,3"]</code>.</p>
<p>To Change the way items are displayed check out the digital-download.php file. You will see a couple loops that format the links.</p>
]]></content:encoded>
			<wfw:commentRss>http://peakstudios.com/digital-download-short-codes-for-phpurchase/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Find Peak Studios Boulder, CO on the web</title>
		<link>http://peakstudios.com/find-peak-studios-on-the-web/</link>
		<comments>http://peakstudios.com/find-peak-studios-on-the-web/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 20:16:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Peak Studios]]></category>

		<guid isPermaLink="false">http://peakstudios.com/?p=428</guid>
		<description><![CDATA[Pages that link to Peak Studios.]]></description>
			<content:encoded><![CDATA[<p>A simple list of some other places you can find Peak Studios, Boulder CO on the web.
<p/>
<ul>
<li>
<a href="http://local.yahoo.com/info-43992440-peak-studios-boulder">Peak Studios</a> local listing at yahoo.
</li>
<li>
<a href="http://maps.google.com/maps/place?cid=11836473099819007696&#038;q=303+819+3968&#038;gl=us&#038;view=feature&#038;mcsrc=web_references&#038;num=10&#038;start=0&#038;ved=0CM8BELUF&#038;ei=HBp4TMHQAYyWoAS4sqSJAQ&#038;ie=UTF8&#038;ll=39.973947,-105.258121&#038;spn=0,0&#038;t=h&#038;z=16&#038;iwloc=A">Peak Studios</a> local listing at google.
</li>
<li>
<a href="http://local.yahoo.com/info-43992440-peak-studios-boulder">Peak Studios</a> local listing at yahoo.
</li>
<li>
<a href="http://www.aboutus.org/peakstudios.com">peakstudios.com</a> wiki page at aboutus.org.
</li>
<li>
<a href="http://child-dna.com/web-design-development-by-peak-studios/">Peak Studios</a> credits page at child-dna.
</li>
<li>
<a href="http://cdcarpetcleaning.com/peak-studios/">Peak Studios</a> about us page at cdcarpetcleaning.com.
</li>
<li>
<a href="http://www.facebook.com/pages/Peak-Studios/109363119097739">Peak Studios</a> FaceBook page.
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://peakstudios.com/find-peak-studios-on-the-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dynamic Flash Slide Show in WordPress</title>
		<link>http://peakstudios.com/flash-php-mysql-slideshow-in-wordpress/</link>
		<comments>http://peakstudios.com/flash-php-mysql-slideshow-in-wordpress/#comments</comments>
		<pubDate>Wed, 12 May 2010 03:32:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://peakstudios.com/?p=349</guid>
		<description><![CDATA[This tutorial will go over how to create a dynamic Flash slide show in WordPress using Peak Studios Flash Php MySQL extension.]]></description>
			<content:encoded><![CDATA[
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_flash-videoplayer_1081339523"
			class="flashmovie"
			width="585"
			height="490">
	<param name="movie" value="../flash/flash-videoplayer.swf" />
	<param name="flashvars" value="video_url=mp4%3Awp_slideShow.f4v&title=Videos%20by%20Peak%20Studios" />
	<param name="salign" value="t" />
	<param name="wmode" value="transparent" />
	<param name="allowscriptaccess" value="always" />
	<param name="allownetworking" value="all" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="../flash/flash-videoplayer.swf"
			name="fm_flash-videoplayer_1081339523"
			width="585"
			height="490">
		<param name="flashvars" value="video_url=mp4%3Awp_slideShow.f4v&title=Videos%20by%20Peak%20Studios" />
		<param name="salign" value="t" />
		<param name="wmode" value="transparent" />
		<param name="allowscriptaccess" value="always" />
		<param name="allownetworking" value="all" />
	<!--<![endif]-->
		<br />
<a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a><br />

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>This tutorial will go over how to create a dynamic Flash slide show in WordPress using Peak Studios Flash Php MySQL extension.</p>
<p>You can follow along on the video or simply follow the steps below.   You will see <em>(sv:some time)</em> at the start each section.  This lets you know where to cue the video tutorial to if you want to learn more about the function.</p>
<p><strong>Set up your Flash file</strong> | <em>(sv:0:25)</em></p>
<ul>
<li>Create .fla and save as anything you want.</li>
<li>Add slideshow_mc to library.
<ol>
<li>Export for AS and in 1st frame.</li>
<li>Bassclass should be &#8220;slideshow&#8221;.</li>
</ol>
</li>
<li>Set up publish settings
<ol>
<li> AS3 settings > import Flash Php MySQL classes</li>
<li> Set access to network only</li>
</ol>
</li>
<li>Set document class to &#8220;slideshowtostage&#8221;</li>
</ul>
<p><strong>Set up slide show in WordPress</strong> | <em>(sv:7:45)</em></p>
<ul>
<li>Add custom field.
<ol>
<li>Name it &#8220;home_pics&#8221;.</li>
<li>Make a comma separated list of your images</li>
</ol>
</li>
<li>Upload images to WordPress root in a folder named &#8220;home-slides&#8221;.  Also have this folder next to your Flash file on your computer.</li>
<li>Create and upload the PHP create by the Flash PHP MySQL extension.</li>
</ul>
<p><strong>Create slideshowtostage.as</strong> | <em>(sv:3:05)</em><br />
<code><br />
package{<br />
	import flash.display.MovieClip;</p>
<p>	public class slideshowtostage extends MovieClip{</p>
<p>		private var ss:MovieClip = new slideshow_mc();</p>
<p>		public function slideshowtostage(){<br />
			//add your stuff to the stage.<br />
			ss.cacheAsBitmap = true;<br />
			addChild(ss);<br />
		}<br />
	}<br />
}<br />
</code><br />
<strong>Create slideshow.as</strong> | <em>(sv:4:50)</em><br />
<code><br />
package{<br />
	import flash.display.MovieClip;<br />
	import flash.net.URLVariables;<br />
	import flash.utils.Timer;<br />
	import flash.events.*;<br />
	import fl.transitions.*;<br />
	import fl.transitions.easing.*;<br />
	//custom classes<br />
	import FP9.flash.com.ps.php.as3.*;<br />
	import MyLoader;</p>
<p>	public class slideshow extends MovieClip{<br />
		private var DB_loc:String;<br />
		private var slideshow_select:SelectDB;<br />
		private var pics:Array;<br />
		private var slideshowPlaying:Boolean;<br />
		private var t:Timer;<br />
		public var pics_count:int;<br />
		public var pics_length:int;<br />
		public var showingChild:int;<br />
		public var displayArray:Array = new Array();</p>
<p>		public function slideshow(){<br />
			//set your db loc<br />
			DB_loc = "";<br />
			slideshowselect();<br />
		}<br />
		//-------------Flash PHP MySQL-------------<br />
		private function slideshowselect():void{<br />
			var slideshow_table = "wp_postmeta";<br />
			//--Array should be the table row names you wish to pull from<br />
			var slideshow_tableRow:Array = new Array();<br />
			slideshow_tableRow[0] = "meta_value";<br />
			//where to look<br />
			var slideshow_where:Array = new Array();<br />
			slideshow_where[0] = "meta_key";<br />
			/*values can be = <> > < <= >= BETWEEN LIKE IN  You can put TABLE (i.e =TABLE)after any of the operators to use a table field in the what array value*/<br />
			var slideshow_like:Array = new Array();<br />
			slideshow_like[0] = "=";<br />
			//What to look for<br />
			var slideshow_what:Array = new Array();<br />
			slideshow_what[0] = "home_pics";<br />
			//What to look for<br />
			var slideshow_functionStrings:Array = new Array();<br />
			slideshow_functionStrings[0] = "";<br />
			//orderBy and ASC arrays must have the same amount of items in the array.<br />
			//What to look for<br />
			var slideshow_orderBy:Array = new Array();<br />
			slideshow_orderBy[0] = "";<br />
			//What to look for<br />
			var slideshow_ASC:Array = new Array();<br />
			slideshow_ASC[0] = "";<br />
			slideshow_select = new SelectDB(slideshow_table, slideshow_tableRow, slideshow_where, slideshow_like, slideshow_what, slideshow_orderBy, slideshow_ASC, slideshow_returnFunction, slideshow_functionStrings, DB_loc);<br />
		}<br />
		private function slideshow_returnFunction(vars:URLVariables, selectRows:Array, functionStrings:Array):void{<br />
			pics = vars.meta_value0.split(",",20);<br />
			pics_length = pics.length;<br />
			if(pics_length > 0){<br />
				loadPics(pics_count);<br />
			}<br />
		}</p>
<p>		//-------------start loading images--------------<br />
		private function loadPics(n:int):void{<br />
			var mypic:String = pics[n];<br />
			var myl:MyLoader = new MyLoader("home-slides/"+mypic, picloaded);<br />
			myl.alpha = 0;<br />
			addChild(myl);<br />
		}<br />
		private function picloaded():void{<br />
			if (pics_count == 0){<br />
				fadeIn(0);<br />
				loadTimer();<br />
			}<br />
			pics_count++;<br />
			if(pics_count
<pics_length){<br />
				loadPics(pics_count);<br />
			}<br />
		}<br />
		//-------------fade in-------------<br />
		private function fadeIn(n:int):void{<br />
			var myTweenAlpha:Tween = new Tween(getChildAt(n), "alpha", Strong.easeOut, 0, 1, 1, true);<br />
			if(showingChild != 0){<br />
				fadeOut(showingChild);<br />
			}<br />
			showingChild = n;<br />
		}<br />
		//-------------fade out-------------<br />
		private function fadeOut(n:int):void{<br />
			var myTweenAlpha:Tween = new Tween(getChildAt(n), "alpha", Strong.easeOut, 1, 0, 1, true);<br />
		}<br />
		//-------------timer functions-------------<br />
		private function loadTimer():void{<br />
			t = new Timer(3500);<br />
			t.addEventListener(TimerEvent.TIMER, timerComplete);<br />
			t.start();<br />
		}	</p>
<p>		private function timerComplete(e:TimerEvent):void{<br />
			if((pics_length - 1) == showingChild){<br />
				fadeIn(0);<br />
			}else{<br />
				fadeIn(showingChild + 1);<br />
			}<br />
		}<br />
	}<br />
}<br />
</code><br />
<strong>Create MyLoader.as</strong> | <em>(sv:12:55)</em><br />
<code><br />
package {<br />
    import flash.display.Loader;<br />
    import flash.events.ProgressEvent;<br />
	import flash.events.Event;<br />
    import flash.net.URLRequest;<br />
	import flash.display.MovieClip;</p>
<p>    public class MyLoader extends MovieClip {</p>
<p>		private var ldr:Loader;<br />
		private var func:Function;</p>
<p>        public function MyLoader(argFile:String, f:Function) {<br />
			func = f;<br />
            ldr = new Loader();<br />
            ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoadProgressEvent);<br />
			ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);<br />
            ldr.load(new URLRequest(argFile));<br />
			addChild(ldr);<br />
        }</p>
<p>        private function onLoadProgressEvent(e:ProgressEvent):void {<br />
			//var percent:int =  Math.round((e.bytesLoaded / e.bytesTotal) * 100);<br />
        }<br />
        private function loaded(e:Event):void{<br />
			e.target.removeEventListener(ProgressEvent.PROGRESS, onLoadProgressEvent);<br />
			e.target.removeEventListener(Event.COMPLETE, loaded);<br />
			func();<br />
		}<br />
    }</p>
<p>}<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://peakstudios.com/flash-php-mysql-slideshow-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Show Off Your Work</title>
		<link>http://peakstudios.com/show-off-your-work/</link>
		<comments>http://peakstudios.com/show-off-your-work/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 13:59:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Show off your work]]></category>

		<guid isPermaLink="false">http://peakstudios.com/?p=344</guid>
		<description><![CDATA[This section is for users of the Flash PHP MySQL extension as a place to show off their work using the extension.
]]></description>
			<content:encoded><![CDATA[<p>This section is for users of the Flash PHP MySQL extension as a place to show off their work using the extension.</p>
]]></content:encoded>
			<wfw:commentRss>http://peakstudios.com/show-off-your-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Join tables using Flash PHP MySQL</title>
		<link>http://peakstudios.com/join-tables-using-flash-php-mysql-extension/</link>
		<comments>http://peakstudios.com/join-tables-using-flash-php-mysql-extension/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 18:17:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://peakstudios.com/?p=307</guid>
		<description><![CDATA[This tutorial will go over how to JOIN tables using the Flash Php MySQL extension.]]></description>
			<content:encoded><![CDATA[
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_flash-videoplayer_105673245"
			class="flashmovie"
			width="585"
			height="490">
	<param name="movie" value="../flash/flash-videoplayer.swf" />
	<param name="flashvars" value="video_url=mp4%3Ajoin.f4v&title=Videos%20by%20Peak%20Studios" />
	<param name="salign" value="t" />
	<param name="wmode" value="transparent" />
	<param name="allowscriptaccess" value="always" />
	<param name="allownetworking" value="all" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="../flash/flash-videoplayer.swf"
			name="fm_flash-videoplayer_105673245"
			width="585"
			height="490">
		<param name="flashvars" value="video_url=mp4%3Ajoin.f4v&title=Videos%20by%20Peak%20Studios" />
		<param name="salign" value="t" />
		<param name="wmode" value="transparent" />
		<param name="allowscriptaccess" value="always" />
		<param name="allownetworking" value="all" />
	<!--<![endif]-->
		
<p><a href="http://adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>

	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>This tutorial will go over how to JOIN tables using the Flash Php MySQL extension.</p>
<p>This tutorial explains the Join process so you can really grasp the power of MySQL through Flash.  Helping you provide more required information with less queries and faster load times as a result.</p>
<p>The <a href="http://peakstudios.com/products/">Flash PHP MySQL</a> extension is required to preform the queries shown in this tutorial.</p>
]]></content:encoded>
			<wfw:commentRss>http://peakstudios.com/join-tables-using-flash-php-mysql-extension/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Large Format Digital</title>
		<link>http://peakstudios.com/large-format-digital/</link>
		<comments>http://peakstudios.com/large-format-digital/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 19:13:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Showcase]]></category>

		<guid isPermaLink="false">http://173.203.200.81/?p=200</guid>
		<description><![CDATA[A user-friendly splash introduction is contained within the website. The splash screen provides easy navigation to the correct sub websites. This website utilizes HTML, XML, PHP and Flash. ]]></description>
			<content:encoded><![CDATA[<p>A user-friendly splash introduction is contained within the website. The splash screen provides easy navigation to the correct sub websites. This website utilizes HTML, XML, PHP and Flash. <a href="http://www.largeformatdigital.com/mainindex.php" target="_blank">Large format digital</a></p>
]]></content:encoded>
			<wfw:commentRss>http://peakstudios.com/large-format-digital/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

