<?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>buyco.ca</title>
	<atom:link href="http://www.buyco.ca/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.buyco.ca</link>
	<description>because someone stole my name</description>
	<lastBuildDate>Fri, 23 Jul 2010 21:35:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>JavaScript Essentials: Compatibility</title>
		<link>http://www.buyco.ca/2010/07/23/javascript-compatibility/</link>
		<comments>http://www.buyco.ca/2010/07/23/javascript-compatibility/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 21:30:05 +0000</pubDate>
		<dc:creator>Buyco</dc:creator>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[Weekly JavaScript Workshops]]></category>
		<category><![CDATA[compatibility]]></category>
		<category><![CDATA[ie6]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.buyco.ca/?p=200</guid>
		<description><![CDATA[It's one thing to create some amazing interactivity with JavaScript, it's another if you can get it to work with all modern browsers]]></description>
			<content:encoded><![CDATA[<h2>Week 3 &#8211; JavaScript Essentials: Compatibility</h2>
<h3>Compatibility</h3>
<h4>Who are you programming for?</h4>
<p>It&#8217;s one thing to create some amazing interactivity with JavaScript, it&#8217;s another if you can get it to work with all modern browsers, and it&#8217;s above and beyond when you also take into account the needs of browsers with JavaScript disabled.</p>
<p>Creating functionality to work on your site for one particular browser (and version) and for one particular operating system is easy. Getting it to work with other browsers on all operating systems is a more daunting task. Adding functionality to enable elegant error messages for browsers with JavaScript disabled is a work of art!</p>
<p>There are hundreds if not thousands of combinations of browser/operating system combinations. It&#8217;s our duty as web developers to ensure that our sites work with the most common browsers and operating systems, without sacrificing too much of the user&#8217;s experience. For this week&#8217;s session, we&#8217;re going to consider the following groups:</p>
<h5>Modern browsers with JavaScript enabled</h5>
<p>This group is going to be your best friend. These are the browsers which work exactly how you want them to, close to W3C spec and are compatible with almost every bit of modern JavaScript code&#8211;although their reliability can also be a big downfall in your habits. Always remember: Just because it works on Firefox on Windows, doesn&#8217;t mean it works for everything else.</p>
<h5>Older browsers with JavaScript enabled</h5>
<p>Although there are not too many users out there sporting the Internet Explorer 6.0 SP2, they shouldn&#8217;t be forgotten. It&#8217;s not difficult to test code for these types of browsers, you just have to not be lazy. But even if you are, there are alternatives to writing a completely different set of code just for compatibility&#8217;s sake.</p>
<h5>Any browser with JavaScript disabled</h5>
<p>This can include essentially any browser you can think of. This might be the easiest group to speak to because you can&#8217;t with JavaScript!</p>
<h4>Honorable Mentions</h4>
<p>There are some other types of browsers we are not going to consider for this particular week&#8217;s session, but it&#8217;s good to know that they exist.</p>
<h5>Mobile Browsers</h5>
<p>Here we enter the realm of mobile browsing. We are now dealing with even more platforms/operating systems, and types of mobile browsers. Now how many of them actually support JavaScript? This group I rarely worry about because I consider the demographic of my audience and this rarely falls within a project&#8217;s requirements. In the case of you having to build a site compatible with mobile devices, there are several emulators out there you can use on your computer to test the functionality of your site:</p>
<ul>
<li><a href="http://www.winwap.com/desktop_applications/browser_emulator" target="_blank">WinWAP Smartphone Browser Emulator</a></li>
<li><a href="http://www.marketcircle.com/iphoney/" target="_blank">iPhoney iPhone Web Simulator</a></li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C62D54A5-183A-4A1E-A7E2-CC500ED1F19A&#038;displaylang=en" target="_blank">Device Emulator 1.0 with Windows Mobile OS Images</a></li>
</ul>
<p>These are only a few of many emulators out there which you can use, but this is a good place to start.</p>
<h5>Internet Explorer</h5>
<p>Yes we will go over Internet Explorer, but IE should still be considered as a separate group only because of how easy it is to isolate this subset. Consider the following:</p>
<pre class="brush: xml;">
		&lt;html xmlns="http://www.w3.org/1999/xhtml">
		&lt;head>
		&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		&lt;title>Hello there&lt;/title>
		&lt;!--[if !IE]>-->
		&lt;!--&#038;lt![endif]>-->
		&lt;/head>
		&lt;body>
		&lt;/body>
		&lt;/html>
	</pre>
<p>IE is the only browser you can explicitly call out like this. When writing your code, whether it is JavaScript or even CSS, remember you have this in your arsenal.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.buyco.ca/2010/07/23/javascript-compatibility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Essentials: Event Handlers</title>
		<link>http://www.buyco.ca/2010/07/08/event-handlers/</link>
		<comments>http://www.buyco.ca/2010/07/08/event-handlers/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 01:11:03 +0000</pubDate>
		<dc:creator>Buyco</dc:creator>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[Weekly JavaScript Workshops]]></category>

		<guid isPermaLink="false">http://www.buyco.ca/?p=189</guid>
		<description><![CDATA[Week 2 &#8211; JavaScript Essentials: Event handlers Events What&#8217;s an event? Exactly what you think it is. They are occurrences of actions happening on a web page. They can be triggered by a user or by the webpage itself. Some of the most commonly known events are ONLOAD, ONCLICK, and ONMOUSEOVER. Certain elements on a [...]]]></description>
			<content:encoded><![CDATA[<h2>Week 2 &#8211; JavaScript Essentials: Event handlers</h2>
<h3>Events</h3>
<h4>What&#8217;s an event?</h4>
<p>Exactly what you think it is. They are occurrences of actions happening on a web page. They can be triggered by a user or by the webpage itself. Some of the most commonly known events are ONLOAD, ONCLICK, and ONMOUSEOVER. Certain elements on a page can trigger any or many of these events. JavaScript has the ability to detect these events and may be utilized to execute functions based on these triggers.</p>
<h4>List of common events</h4>
<p>This is not comprehensive, but I&#8217;ve included several common events based on the element.</p>
<div class="tabs">
<ul>
<li>A
<div class="tabcontent">
<dl>
<dt>onMouseOver</dt>
<dd>Trigger: when you move your mouse over </dd>
<dt>onMouseOut</dt>
<dd>Trigger: user moves mouse off of element</dd>
<dt>onClick</dt>
<dd>Trigger: user clicks on the element</dd>
</dl></div>
</li>
<li>IMG
<div class="tabcontent">
<dl>
<dt>onMouseOver</dt>
<dd>Trigger: when you move your mouse over </dd>
<dt>onMouseOut</dt>
<dd>Trigger: user moves mouse off of element</dd>
<dt>onClick</dt>
<dd>Trigger: user clicks on the element</dd>
<dt>onLoad</dt>
<dd>Trigger: when the element is loaded</dd>
</dl></div>
</li>
<li>INPUT
<div class="tabcontent">
<dl>
<dt>onMouseOver</dt>
<dd>Trigger: when you move your mouse over </dd>
<dt>onMouseOut</dt>
<dd>Trigger: user moves mouse off of element</dd>
<dt>onFocus</dt>
<dd>Trigger: user focuses on an element</dd>
<dt>onBlur</dt>
<dd>Trigger: element loses focus</dd>
<dt>onKeyUp</dt>
<dd>Trigger: user is typing and after a key press</dd>
<dt>onKeyDown</dt>
<dd>Trigger: user is typing and on key press</dd>
</dl></div>
</li>
<li>SELECT
<div class="tabcontent">
<dl>
<dt>onChange</dt>
<dd>Trigger: user changes the selected value</dd>
<dt>onFocus</dt>
<dd>Trigger: user focuses on an element</dd>
<dt>onBlur</dt>
<dd>Trigger: element loses focus</dd>
</dl></div>
</li>
<li>FORM
<div class="tabcontent">
<dl>
<dt>onSubmit</dt>
<dd>Trigger: user attempts to submit a form</dd>
</dl></div>
</li>
<li>BODY
<div class="tabcontent">
<dl>
<dt>onLoad</dt>
<dd>Trigger: when the page is completely loaded</dd>
<dt>onUnLoad</dt>
<dd>Trigger: user leaves the page</dd>
</dl></div>
</li>
</ul></div>
<p>A list of events can be found on the W3C website: <a href="http://www.w3.org/TR/DOM-Level-2-Events/events.htm" target="_blank">http://www.w3.org/TR/DOM-Level-2-Events/events.htm</a>. It is also important to understand that not all browsers handle events the same. An example reference can be found here: <a href="http://www.quirksmode.org/dom/events/index.html" target="_blank">http://www.quirksmode.org/dom/events/index.html</a>.</p>
<h3>Event Handling</h3>
<p>There are several ways to handle these events. Now that you have an understanding of what can trigger these events, we&#8217;re going to attempt to catch them and do something. For the sake of simplicity, we will just execute <em>alert(&#8216;Hello World&#8217;);</em> for the next exercise. Each time an event is triggered, we will pop up a JavaScript dialog box which says &#8220;Hello World.&#8221;</p>
<h4>Example: Anchor Events</h4>
<p>Consider the following markup:</p>
<pre class="brush: xml;">
		&lt;html xmlns="http://www.w3.org/1999/xhtml">
		&lt;head>
		&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		&lt;title>Hello there&lt;/title>
		&lt;/head>
		&lt;body>
		&lt;h1>This is the title&lt;/h1>
		&lt;p>This is a paragraph &lt;a href="#">with a link&lt;/a>&lt;/p>
		&lt;/body>
		&lt;/html>
	</pre>
<p>We are going to change line 8 and add some event handlers:</p>
<pre class="brush: xml; first-line: 8">
		&lt;p>This is a paragraph &lt;a href="#" onclick="alert('Hello World');">with a link&lt;/a>&lt;/p>
	</pre>
<pre class="brush: xml; first-line: 8">
		&lt;p>This is a paragraph &lt;a href="#" onmouseover="alert('Hello World');">with a link&lt;/a>&lt;/p>
	</pre>
<pre class="brush: xml; first-line: 8">
		&lt;p>This is a paragraph &lt;a href="#" onmouseout="alert('Hello World');">with a link&lt;/a>&lt;/p>
	</pre>
<p>Try it for yourself. In the first example, when you click &#8220;with a link,&#8221; the dialog box should pop up. In the next, as soon as you move your mouse over the link, the dialog box should pop up. In the final example, when you move your mouse off the link (after it being over it), the dialog box should pop up.</p>
<p>The same method can be used with other event handlers where we directly input the JavaScript code in a new attribute in the element defined by the event handler name. For the most part this works just fine, but there are several reasons why we don&#8217;t want to do it this way:</p>
<ol>
<li>
<h5>Designers aren&#8217;t developers</h5>
<p>A designer doesn&#8217;t always understand how the functionality of the page works. If he/she makes a change to a link with explicit event handlers defined, unexpected errors may occur.</p>
</li>
<li>
<h5>Content management systems</h5>
<p>Not all CMSs honor inline JavaScript and may remove it from the HTML. </p>
</li>
<li>
<h5>Page overhead</h5>
<p>Adding inline code adds additional overhead to your markup. </p>
</li>
<li>
<h5>Coding standards</h5>
<p>There are no real coding standards for JavaScript, except for the peace of mind knowing your logic is separated from your view. It makes things easier down the road if you need to make updates to your code. (ref: <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller" target="_blank">MVC architecture</a>)</p>
</li>
</ol>
<p>With browsers being updated very frequently, and functionality for JavaScript compatibility always on the bend, consolidating your code into one place makes things easier to update and makes your code much more scalable. The MVC concept works well with respect to JavaScript and although not completely necessary, it can make your life a lot easier in the long run.</p>
<h4>Example: Unobtrusive Anchor Events</h4>
<p>When we separate our JavaScript code from our HTML markup, we still need to listen to those event triggers. Unobtrusive JavaScript is centered around the idea of separating functionality and form; behavior and presentation; controller and view; etc. We will continue with our example with anchors, and do the same with unobtrusive JavaScript.</p>
<p>In the previous week&#8217;s topic, <a href="../week-1">we discussed element selection</a>. We are going to use the same ideas and incorporate event listening.</p>
<p>Consider the following markup:</p>
<pre class="brush: xml;">
		&lt;html xmlns="http://www.w3.org/1999/xhtml">
		&lt;head>
		&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		&lt;title>Hello there&lt;/title>
		&lt;/head>
		&lt;body>
		&lt;h1>This is the title&lt;/h1>
		&lt;p>This is a paragraph &lt;a href="#" id="mylink">with a link&lt;/a>&lt;/p>
		&lt;/body>
		&lt;/html>
	</pre>
<p>To simplify this example, we are going to take into consideration the pure JavaScript &#8220;domload&#8221; function which is called on the dom load referred to in <a href="../week-1/#2-4-where-should-the-code-be-">Week 1&#8242;s workshop</a>. For our prototype and jQuery examples, we are going to use their respective &#8220;domload&#8221; functions. We are then assuming this code will be placed in the document&#8217;s HEAD.</p>
<p>We will also be calling the following function when these events are triggered:</p>
<pre class="brush: jscript">

					// our hello world function
					function helloWorld(e) {
						alert('Hello World');
					}
	</pre>
<h5>Example: Listening to &#8220;onClick&#8221;</h5>
<div class="tabs">
<ul>
<li>Pure Javascript
<div class="tabcontent">
<pre class="brush: jscript;">
					// our domload function from Week 1
					initDOMLoad(function() {

						// check what kind of event listener function we need to call
						var m;
						window.addEventListener ? m = true : m = false;

						// select the link
						if (document.getElementById) {
							var objLink = document.getElementById('mylink');

							// use appropriate event listener
							if (m) {
								objLink.addEventListener('click', helloWorld, false);
							}
							else {
								objLink.attachEvent('onclick', helloWorld);
							}
						}
					});
				</pre>
</p></div>
</li>
<li>Prototype
<div class="tabcontent">
<pre class="brush: jscript;">
					// listen on dom load
					document.observe('dom:loaded',function() {

						// select the link and listen on click
						$('mylink').observe('click', helloWorld);
					});
				</pre>
</p></div>
</li>
<li>jQuery
<div class="tabcontent">
<pre class="brush: jscript;">
					// listen on dom load
					$(document).ready(function() {

						// select the link and listen on click
						$('a#mylink').click(helloWorld);
					});
				</pre>
</p></div>
</li>
</ul></div>
<h5>Example: Listening to &#8220;onMouseOver&#8221;</h5>
<div class="tabs">
<ul>
<li>Pure Javascript
<div class="tabcontent">
<pre class="brush: jscript;">
					// our domload function from Week 1
					initDOMLoad(function() {

						// check what kind of event listener function we need to call
						var m;
						window.addEventListener ? m = true : m = false;

						// select the link
						if (document.getElementById) {
							var objLink = document.getElementById('mylink');

							// use appropriate event listener
							if (m) {
								objLink.addEventListener('mouseover', helloWorld, false);
							}
							else {
								objLink.attachEvent('onmouseover', helloWorld);
							}
						}
					});
				</pre>
</p></div>
</li>
<li>Prototype
<div class="tabcontent">
<pre class="brush: jscript;">
					// listen on dom load
					document.observe('dom:loaded',function() {

						// select the link and listen on click
						$('mylink').observe('mouseover', helloWorld);
					});
				</pre>
</p></div>
</li>
<li>jQuery
<div class="tabcontent">
<pre class="brush: jscript;">

					// listen on dom load
					$(document).ready(function() {

						// select the link and listen on click
						$('a#mylink').mouseover(helloWorld);
					});
				</pre>
</p></div>
</li>
</ul></div>
<h5>Example: Listening to &#8220;onMouseOut&#8221;</h5>
<div class="tabs">
<ul>
<li>Pure Javascript
<div class="tabcontent">
<pre class="brush: jscript;">
					// our domload function from Week 1
					initDOMLoad(function() {

						// check what kind of event listener function we need to call
						var m;
						window.addEventListener ? m = true : m = false;

						// select the link
						if (document.getElementById) {
							var objLink = document.getElementById('mylink');

							// use appropriate event listener
							if (m) {
								objLink.addEventListener('mouseout', helloWorld, false);
							}
							else {
								objLink.attachEvent('onmouseout', helloWorld);
							}
						}
					});
				</pre>
</p></div>
</li>
<li>Prototype
<div class="tabcontent">
<pre class="brush: jscript;">
					// listen on dom load
					document.observe('dom:loaded',function() {

						// select the link and listen on click
						$('mylink').observe('mouseout', helloWorld);
					});
				</pre>
</p></div>
</li>
<li>jQuery
<div class="tabcontent">
<pre class="brush: jscript;">
					// listen on dom load
					$(document).ready(function() {

						// select the link and listen on click
						$('a#mylink').mouseout(helloWorld);
					});
				</pre>
</p></div>
</li>
</ul></div>
]]></content:encoded>
			<wfw:commentRss>http://www.buyco.ca/2010/07/08/event-handlers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Essentials: Execution Order, Selectors, DOM manipulation</title>
		<link>http://www.buyco.ca/2010/07/07/javascript-essentials-execution-order-selectors-dom-manipulation/</link>
		<comments>http://www.buyco.ca/2010/07/07/javascript-essentials-execution-order-selectors-dom-manipulation/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 00:33:47 +0000</pubDate>
		<dc:creator>Buyco</dc:creator>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[Weekly JavaScript Workshops]]></category>

		<guid isPermaLink="false">http://www.buyco.ca/?p=172</guid>
		<description><![CDATA[Execution order When does the script get executed? It&#8217;s important to understand that JavaScript code will be run at different times during the page&#8217;s loading process, or even after. You can place code in a number of areas of a page: within the HEAD tag, the BODY tag or explicitly in elements within the BODY. [...]]]></description>
			<content:encoded><![CDATA[<h3>Execution order</h3>
<h4>When does the script get executed?</h4>
<p>It&#8217;s important to understand that JavaScript code will be run at different times during the page&#8217;s loading process, or even after. You can place code in a number of areas of a page: within the HEAD tag, the BODY tag or explicitly in elements within the BODY. </p>
<p>Consider the following markup:</p>
<pre class="brush: xml;">
		&lt;html xmlns="http://www.w3.org/1999/xhtml">
		&lt;head>
		&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		&lt;title>Hello there&lt;/title>
		&lt;script>
		// you can put your script here in the HEAD
		&lt;/script>
		&lt;/head>
		&lt;body>
		&lt;script>
		// you can put your script here in the BODY
		&lt;/script>
		&lt;p>Or you can put it in an element like this &lt;a href="http://www.buyco.ca" onclick="javascript:void(0);">link&lt;/a>&lt;/p>
		&lt;/body>
		&lt;/html>
	</pre>
<h4>Order of script execution</h4>
<ol>
<li>&lt;HEAD> tag</li>
<li>&lt;BODY> tag</li>
<li>on DOM load</li>
<li>on PAGE load</li>
</ol>
<p>This is most simply the order of script execution on your page. Before we get too deep into the mechanics of event handling, I will explain in the simplest terms what DOM load and PAGE load is. They are not specific areas where you can drop your code, rather they are points in time during the process of a browser loading the page and it&#8217;s contents. You can write scripts in the HEAD and BODY which tells your browser to execute scripts at those two points in time.</p>
<p>The moment at which the document is loaded and ready, but before any external references are even downloaded yet, is DOM load. By external references, I am talking about images, referenced style sheets, etc. After the document is ready, your browser starts to download those external resources (images, stylesheets, etc). When those resources are completely downloaded and displayed, this is the point in time when the PAGE is loaded.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.buyco.ca/2010/07/07/javascript-essentials-execution-order-selectors-dom-manipulation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utada In The Flesh Experience</title>
		<link>http://www.buyco.ca/2010/01/26/utada-in-the-flesh-experience/</link>
		<comments>http://www.buyco.ca/2010/01/26/utada-in-the-flesh-experience/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 22:33:29 +0000</pubDate>
		<dc:creator>Buyco</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[concert]]></category>
		<category><![CDATA[Hikaru]]></category>
		<category><![CDATA[Hikki]]></category>
		<category><![CDATA[In the Flesh]]></category>
		<category><![CDATA[Kuma]]></category>
		<category><![CDATA[Seattle]]></category>
		<category><![CDATA[Utada]]></category>
		<category><![CDATA[Utada Hikaru]]></category>

		<guid isPermaLink="false">http://www.buyco.ca/?p=144</guid>
		<description><![CDATA[My feet were so sore, my legs were numb, and I was tired as hell. The trip started off with a drive to Seattle, WA leaving from Vancouver, BC at around 9:30am. Seems pretty early to me especially if we wanted to be at the Showbox by 4, but it gave us a chance to [...]]]></description>
			<content:encoded><![CDATA[<p>My feet were so sore, my legs were numb, and I was tired as hell. The trip started off with a drive to Seattle, WA leaving from Vancouver, BC at around 9:30am. Seems pretty early to me especially if we wanted to be at the Showbox by 4, but it gave us a chance to stop by the outlets on the way—where I got an awesome Burberry sweater for the low discounted price of $200. After explaining to Will we’d be late, and laughing at the picture of his reaction when we told him, we made our way downtown.</p>
<p><a href="http://www.buyco.ca/wp-content/uploads/2010/01/20655_265940616774_507796774_3426743_7230388_n.jpg" rel="shadowbox[En-Route]" title="On our way!"><img src="http://www.buyco.ca/wp-content/uploads/2010/01/20655_265940616774_507796774_3426743_7230388_n-150x150.jpg" alt="toad" title="toad" width="150" height="150" class="alignnone size-thumbnail wp-image-146" /></a> <a href="http://www.buyco.ca/wp-content/uploads/2010/01/m1_414426.jpg" rel="shadowbox[En-Route]" title="New Cardigan"><img src="http://www.buyco.ca/wp-content/uploads/2010/01/m1_414426-150x150.jpg" alt="New Sweater" title="New Sweater" width="150" height="150" class="alignnone size-thumbnail wp-image-149" /></a> <a href="http://www.buyco.ca/wp-content/uploads/2010/01/photo.jpg" rel="shadowbox[En-Route]" title="Will's reaction"><img src="http://www.buyco.ca/wp-content/uploads/2010/01/photo-150x150.jpg" alt="will" title="will" width="150" height="150" class="alignnone size-thumbnail wp-image-157" /></a></p>
<p>It was only 2:30pm when we circled 1st and Union, so we thought we were doing fairly well in terms of timing for the show. 10 mins of debating on parking was followed by a stroll by the Showbox just to check out the scenery. Unfortunately the scenery included a lineup on the street for the show. There were only about 10 people there, but we didn’t want to take any chances and waited in line anyways.</p>
<p><a href="http://www.buyco.ca/wp-content/uploads/2010/01/20655_265940631774_507796774_3426744_7623039_n.jpg" rel="shadowbox[Lineup]"><img src="http://www.buyco.ca/wp-content/uploads/2010/01/20655_265940631774_507796774_3426744_7623039_n-150x150.jpg" alt="Lineup at 3" title="Lineup at 3" width="150" height="150" class="alignnone size-thumbnail wp-image-151" /></a></p>
<p>While standing in line with Will, hours before the show even started, I saw one of my old coworkers lining up to go to the same show. What a coincidence! Later on in the evening I ended up seeing another coworker there too. After a quick exchange of our expectations on how awesome the show was going to be, we went back to our spots in line.</p>
<p>At around 4:30pm we got the option to go into the bar (Green Room) beside the venue where we’d get even better priority over those in line. Interesting way of doing things actually—instead of waiting in the line, they offer you a seat in the bar and give you a number (1-5 based on priority). When they start letting people in for the show, they first allow those at the bar in based on their number. It’s a nice way to keep those, who show up early, nice and comfortable before the show. So, for the next 2 and a half hours we had some drinks, talked about how awesome the night is going to be, and played a bastardized version of Chai Mui.</p>
<p><a href="http://www.buyco.ca/wp-content/uploads/2010/01/green_room.jpg" rel="shadowbox[Drinking]" title="The Green Room"><img src="http://www.buyco.ca/wp-content/uploads/2010/01/green_room-150x150.jpg" alt="Green Room" title="Green Room" width="150" height="150" class="alignnone size-thumbnail wp-image-152" /></a></p>
<p>They finally started letting people in at around 7pm, starting with us in the Green Room. After the quick frisk, and ticket check, there was a mad rush to the front of the stage to get the best spots. Lucky us, we found spots just off center and behind a couple midgets (not literally, but rather—hilariously). The four of us had a strategy of creating empty space in the middle of us, allowing room for crumple during the concert—which eventually worked well! After the first hour of waiting, we started getting impatient.</p>
<p>My feet were so sore, my legs were numb, and I was tired as hell.</p>
<p>DJ Mike Rizzo jumped on stage and started amping up the crowd. Unfortunately, it didn’t work on me because I don’t listen to the radio and reason being: top 40 doesn’t entertain me. An hour later I could feel the tension in the crowd and within me. We were already waiting for 5 hours and still no sign of her. At about 9:15pm, Mike blurts out—she’ll be out in 15 minutes! The whole venue goes crazy!</p>
<p>15 minutes later he says: “She’ll be here in 15 minutes!”</p>
<p>Another uproar, but I stood there pouting. At this point in my head I’m thinking, holy crap we’re going through a lot for this show. After 15 minutes of an internal debacle with myself, Mike leaves the stage and the roadies start setting up! My resting heart rate just jumped from 75 to 100!</p>
<p>For about 15 minutes, I worry that I’m going to pass out from all the excitement—then the music starts, and then Utada Hikaru kicks off with On and on! I can’t even explain how I felt, how it was like to be arms length away from her, to look in her eyes and receive the most beautiful smile back!</p>
<p>The show only got better and better. After a few English songs, she starts some dialogue and even at the introduction to her Japanese songs, the crowd went nuts! I went nuts! She did a few songs while on the keyboard as well. And I quote, “This is a keyboard!” When she started singing First Love I was afraid I wouldn’t hear her because of all the crowd singing along, but her voice of course broke through and was amazing! Every song she sang brought chills down my spine. Hikki’s voice was perfect all night, and every song sounded as beautiful as the first time I heard them.</p>
<p>Throughout the concert, cameras were disallowed, and I’m okay with that. There’s no way I’d forget those memories! There was, although, someone between us and the stage beside the bouncer taking photos. In between songs I looked… and it was Keiko Fuji aka Utada Junko, Hikki’s mom! I was in the presence of greatness! Being in such an intimate setting is beyond words. The venue was not very big, but it was packed! I’d compare it to about double the size of the venue stages during her United tour. We were up at the front with our eyes glued to Hikki, but I did get a chance to take a glance behind us and there wasn’t an inch of unmanned/unwomaned floor!</p>
<p>As the concert was coming to a close, she said her goodbyes and left the stage. Then we kept screaming for an encore. After about 2 minutes of screaming her name they came back on stage! Hikki ended off with Simple and Clean (with the awesome la da da da da da da ending). It looked like she grabbed her bag to leave, but it was actually a bag of 6-8 signed kumabucks balls! She began throwing them into the crowd and I was afraid I’d get trampled by other frantic fans.</p>
<p>So, you can think otherwise, but this is how it played out: she had a few left, and came back to the mid-left side of the stage (where we were). As she was grabbing a ball I was looking directly at her and she looked up, saw me and smiled, then tossed me the ball. It was all in slow motion in my brain and I’ll never forget those 5 seconds of my life (I sound like a creep right now lol). I couldn’t believe it, but it happened… and now my friends and gbones beside me at the concert hate me forever.</p>
<p><a href="http://www.buyco.ca/wp-content/uploads/2010/01/20655_265940651774_507796774_3426746_4188476_n.jpg" rel="shadowbox[Ball]" title="Boku wa kuma!"><img src="http://www.buyco.ca/wp-content/uploads/2010/01/20655_265940651774_507796774_3426746_4188476_n-150x150.jpg" alt="kumabucks" title="kumabucks" width="150" height="150" class="alignnone size-thumbnail wp-image-153" /></a> <a href="http://www.buyco.ca/wp-content/uploads/2010/01/20655_265940661774_507796774_3426747_4401024_n.jpg" rel="shadowbox[Ball]" title="EEEE!!!!"><img src="http://www.buyco.ca/wp-content/uploads/2010/01/20655_265940661774_507796774_3426747_4401024_n-150x150.jpg" alt="utadaball" title="utadaball" width="150" height="150" class="alignnone size-thumbnail wp-image-154" /></a></p>
<p>It was the most amazing night ever! I had so much fun, and couldn’t have asked for more (well, I could but that’d just be greedy). I don’t think I could ever go to another concert and have the same connection or feeling of bliss like I did at this one.</p>
<p>My feet were so sore, my legs were numb, and I was tired as hell.</p>
<p>…3 hours with Utada’s voice was well worth it</p>
<hr noshade size="1" color="#cccccc" />
<p>Links:<br />
<a href="http://www.utada.com/photos/default.aspx?fid=6385" target="_blank">Official Tour Photos</a><br />
Video clips and audio (removed these links, I guess you had to be there)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.buyco.ca/2010/01/26/utada-in-the-flesh-experience/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Leveraging JavaScript Frameworks to Make Your Life Easier</title>
		<link>http://www.buyco.ca/2009/08/28/leveraging-javascript-frameworks-to-make-your-life-easier/</link>
		<comments>http://www.buyco.ca/2009/08/28/leveraging-javascript-frameworks-to-make-your-life-easier/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 09:51:44 +0000</pubDate>
		<dc:creator>Buyco</dc:creator>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web Dev Tips and Tricks]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://www.buyco.ca/?p=132</guid>
		<description><![CDATA[Are you all about programming in JavaScript? Save yourself some time and try implementing a scripting framework. ]]></description>
			<content:encoded><![CDATA[<h4>Framework Preface</h4>
<p>Are you a hardcore JavaScript/AJAX programmer who knows no bounds? Do you spend meticulous hours perfecting your code so it works on all browsers? I used to be like that. I still am, but the only difference is that I now don&#8217;t spend hours testing my code. This is mostly attributed to the Prototype framework. Today I&#8217;m going to go through a few features and benefits of using a JavaScript framework over writing custom code yourself which may require testing and re-testing. Of course there is still the need for testing even when using a framework, but the difference is that there will be a lot of cross-browser compliance which is no longer needed.
<p>There are other frameworks out there like jQuery and MooTools, but today we&#8217;ll start with what I&#8217;m more familiar with and with what I first started with. The documentation for Prototype is very thorough and I don&#8217;t want to explain everything, so I&#8217;ll start off with the major items which will change your JavaScript programming life!</p>
<h4>JavaScript Framework? Double you tee eff?</h4>
<p>You&#8217;re asking the right question. For the longest time I was always stuck in my own little JavaScript world where everything I coded was job-specific, customized, and with my own techniques. There were also little quirks which JavaScript had when rendering/running under different browsers/operating systems&#8211;these too were also solved using my own super secret techniques. What Prototype does, as well as other JavaScript frameworks, is give you the simple building-blocks which solve those quirks without you even needing to address them specifically. For example, if you want a <em>div</em> element to show or hide, you simply select the element and program the action. Sounds simple, but selecting that element requires some browser detection and compatibility verification. Let&#8217;s make a couple comparisons..</p>
<h4>Make your life easier</h4>
<p>Continuing on with the previous example, let&#8217;s select that <em>div</em> element given the following markup:</p>
<pre class="brush: xml">
&lt;div id="copy">
	&lt;p>Lorem ipsom dolor sit amet&lt;/p>
&lt;/div>
</pre>
<p>We&#8217;re not going to think of any invokers right now, let&#8217;s just try to hide the <em>div</em>. Here is what the JavaScript may have looked like prior to using Prototype:</p>
<pre class="brush: jscript;">
var objDivId = 'copy';
objDiv = document.layers ? document.layers[objDivId] : document.all ? document.all[objDivId] : document.getElementById ? document.getElementById(objDivId) : null;
objDiv != null ? objDiv.style.display = 'none' : '';
</pre>
<p>Obviously this isn&#8217;t the most efficient way of doing this, ideally I would create a function, but this is the shortest of shorthands to select and hide the <em>div</em> element while respecting all web browsers. Now let&#8217;s have a look at how this would look using the Prototype framework:</p>
<pre class="brush: jscript;">
var objDivId = 'copy';
objDiv = $(objDivId);
$(objDivId) ? $(objDivId).style.display = 'none' : '';
</pre>
<p>For this example, the difference is quite apparent. By using the $() utility method we can quickly select that <em>div</em> element without the worry of what browser is being used. Now, let&#8217;s see what happens when we try to hide more than one element. First here&#8217;s the HTML markup:</p>
<pre class="brush: xml">
&lt;div id="copy">
	&lt;p>Lorem ipsom dolor sit amet&lt;/p>
&lt;/div>
&lt;div id="button">
	&lt;p>This is a button&lt;/p>
&lt;/div>
&lt;div id="preview">
	&lt;p>This is a preview section&lt;/p>
&lt;/div>
</pre>
<p>I&#8217;m going to create a function to hopefully help the cause of the traditional JavaScript code and see how it compares to using Prototype. First the oldschool method:</p>
<pre class="brush: jscript;">
function getObject(id) {
	return document.layers ? document.layers[id] : document.all ? document.all[id] : document.getElementById ? document.getElementById(id) : null;
}
var objDivIds = new Array('copy','button','preview');
for (var i=0; i&lt;objDivIds.length; i++) {
	objDiv = getObject(objDivIds[i]);
	objDiv.style.display = 'none';
}
</pre>
<p>And now the code for doing the same thing using Prototype:</p>
<pre class="brush: jscript;">
$('copy','button','preview').invoke('hide');
</pre>
<p>Say what!? Yeah, it&#8217;s that easy. The traditional method utilizes a function which will return the object instance. We then iterate through the three <em>div</em> elements and update each one individually.</p>
<p>In the Prototype version, we&#8217;re using a couple of included extensions. First, the selector $() utility method returns an Enumerable list of objects, and the <em>hide</em> function is invoked across all of those objects. Easy fo-sheezy.</p>
<p>There are also other ways of selecting multiple elements within a page. You can do this by applying some CSS knowledge. For example, let&#8217;s attach a tracking script to all of the links within a page. We want to first select all of the <em>A</em> elements, then iterate through them by adding a short querystring tag to it&#8217;s <em>href</em> attribute.</p>
<pre class="brush: jscript;">
var _TAG = '?source=buyco.ca';
$$('a').each(function(objA) {
	var url = objA.getAttribute('href');
	objA.setAttribute('href',url+_TAG);
});
</pre>
<p>This time I&#8217;m using the $$() utility method which will select a collection of elements. It takes in CSS-style selectors, such as: &#8216;a.external&#8217; (select all a elements with the classname external), or &#8216;div#nav ul li&#8217; (select all list items in the div with the id of &#8216;nav&#8217;). The full documentation on this can be found on the <a href="http://www.prototypejs.org/api/utility" title="Prototype API" target="_blank">Prototype API documentation website</a>.</p>
<h4>Post face?</h4>
<p>These are two short examples of a few things you can do (quicker) by utilizing a JavaScript framework. You will spend less time focused on browser compliance and more on the functionality and interactivity of your websites. It&#8217;s not a quick transition, but practice does make perfect! The documentation on the <a href="http://www.prototypejs.org/" target="_blank" title="Prototype JS">Prototype website</a> is awesome, and I still find myself going back to learn new things. The main point I&#8217;m trying to get across here is that there are tools out there to make our lives (as web developers) a whole lot easier. Don&#8217;t get stuck in a place where you&#8217;re too comfortable or you&#8217;ll end up writing IE6-compliant code forever. Spend your time on more important things like user-experience, and wicked-awesome-flashy-effects. Your site visitors will thank you:)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.buyco.ca/2009/08/28/leveraging-javascript-frameworks-to-make-your-life-easier/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimizing with Image Sprites and CSS for Beginners (Part 2)</title>
		<link>http://www.buyco.ca/2009/08/27/optimizing-with-image-sprites-and-css-for-beginners-part-2/</link>
		<comments>http://www.buyco.ca/2009/08/27/optimizing-with-image-sprites-and-css-for-beginners-part-2/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 09:34:02 +0000</pubDate>
		<dc:creator>Buyco</dc:creator>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[beginner]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[optimize]]></category>
		<category><![CDATA[sprites]]></category>

		<guid isPermaLink="false">http://www.buyco.ca/?p=118</guid>
		<description><![CDATA[I know what a sprite is. Now what do I do?!]]></description>
			<content:encoded><![CDATA[<h4>I know what a sprite is, now what?</h4>
<p>In Part 1 of <a title="Optimizing with Image Sprites and CSS for Beginners" href="http://www.buyco.ca/2009/06/30/optimizing-with-image-sprites-and-css-for-beginners-part-1/">Optimizing with Image Sprites and CSS for Beginners</a> I went through an explanation of what sprites are, how they work, and why to even bother. This time around we&#8217;re going to jump into some implementation of these sprites. I am still calling this Beginner stuff (only so that I can hit everyone with some hardcore code in the future), but if you happen to get confused follow me on <a title="Follow Jonathan Buyco on Twitter" href="http://twitter.com/jonathanbuyco" target="_blank">Twitter</a> and ask away!</p>
<h4>What am I going to use the sprite for?</h4>
<p>First let&#8217;s figure out what we&#8217;re even going to use the sprite for. When you&#8217;re ready to start slicing up your design, use your intuition and think of the graphical elements which will be used and reused on your site; this usually includes your navigation and maybe some buttons. In this example I&#8217;m going to use a sprite to create a &#8220;close&#8221; button and a textual navigation bar (SEO FTW). Here&#8217;s what I&#8217;ll be working with:</p>
<p><img src="/images/sprites.gif" alt="sprites" /></p>
<h4>Let&#8217;s open with a close</h4>
<p>This is the close button which I want sprite-ized:</p>
<p><a id="close" title="Close this badboy" href="#">Close</a></p>
<p>Your processes may be different, but I always start off with the HTML markup. The reason is because I want it as clean as possible and easily accessible for our search crawler friends. With a few quick keystrokes and a little touch of magic, this is what my markup for the close button looks like:</p>
<pre class="brush: xml;">&lt;a href="/close" title="Close this badboy" id="close"&gt;Close&lt;/a&gt;</pre>
<p>That was easy! Now let&#8217;s fancy this up with a bit of CSS magic and add the graphical close icon:</p>
<pre class="brush: css;">a#close {
	display: block;
	height: 14px;
	line-height: 14px;
	font: 11px 'Verdana','Arial',sans-serif;
	padding-left: 20px;
	background: url(sprites.gif) -32px -100px no-repeat;
}
a#close:hover {
	background-position: -32px -114px;
}
a#close:active {
	background-position: -32px -128px;
}</pre>
<h4>Wait.. what?</h4>
<p>I skipped about 20 steps there, so let&#8217;s go through this line by line:</p>
<pre class="brush: css; first-line: 2">	display: block;</pre>
<p>We need to give our link element layout so the graphic doesn&#8217;t get cropped. Display as <em>block</em>, kablammo problem solved! Almost..</p>
<pre class="brush: css; first-line: 3">	height: 14px;</pre>
<p>The close button consists of a 14&#215;14 area on our sprite map. We need to set the <em>height</em> so we don&#8217;t get any cropping.</p>
<pre class="brush: css;first-line: 4">	line-height: 14px;
	font: 11px 'Verdana','Arial',sans-serif;</pre>
<p>This part is a bit arbitrary. I set the <em>line-height</em> just so the text is vertically positioned evenly, and the font is a tribute to <a title="Ikea says Goodbye to Futurea" href="http://www.idsgn.org/posts/ikea-says-goodbye-to-futura/" target="_blank">Ikea</a> (don&#8217;t hurt me <img src='http://www.buyco.ca/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ).</p>
<pre class="brush: css;first-line: 6">	padding-left: 20px;
	background: url(sprites.gif) -32px -100px no-repeat;</pre>
<p>The fun part! The <em>padding</em> is there so that the text for &#8220;close&#8221; is shifted to the right and not disturbing the space for the graphic. But where the hell did I get the -32px -100px from? It&#8217;s the sprite&#8217;s position! 32 pixels from the left, and 100 pixels from the top. An easy way of finding your graphic positions in your sprite map is to open up the file in Photoshop, use the rectangular marquee tool (M), then start a selection from the top left of the document and end at the topmost and leftmost of the graphic. Check your Info window (F8) and take note of the width and height of your selection&#8211; and there are your positioning coordinates!</p>
<pre class="brush: css;first-line: 9">a#close:hover {
	background-position: -32px -114px;
}
a#close:active {
	background-position: -32px -128px;
}</pre>
<p>These modifiers are just added to give a hover and click effect to the button. The only style changing here is the position of the background which then points to the coordinates of the hover and active states. Put this all together and you have yourself a close button!</p>
<p>I obviously geared the markup for this single example, not taking into account that you may want to reuse the code. With just a small change to select the class of the elements instead of styling based on ID, you can have multiple instances of this button:</p>
<pre class="brush: css;">a.close {
	display: block;
	height: 14px;
	line-height: 14px;
	font: 11px 'Verdana','Arial',sans-serif;
	padding-left: 20px;
	background: url(sprites.gif) -32px -100px no-repeat;
}
a.close:hover {
	background-position: -32px -114px;
}
a.close:active {
	background-position: -32px -128px;
}</pre>
<p>For you newbies: it&#8217;s the dot.</p>
<h4>Navigation Sprite&#8217;ing</h4>
<div id="navigation">
<ul>
<li><a href="#1"><span id="nav-first"> </span><span>Link 1</span></a></li>
<li class="splitter"></li>
<li><a href="#2"><span>Link 2</span></a></li>
<li class="splitter"></li>
<li><a href="#3"><span>Link 3</span></a></li>
<li class="splitter"></li>
<li><a href="#4"><span>Link 4</span></a></li>
<li class="splitter"></li>
<li><a href="#5"><span id="nav-last"> </span><span>Link 5</span></a></li>
</ul>
</div>
<p><br style="clear: both;" /></p>
<p>This may seem a bit more advanced, but I am using very similar techniques as the example above. Once again, I&#8217;ll start off with the markup:</p>
<pre class="brush: xml;">
&lt;div id="navigation"&gt;
	&lt;ul title="Jon's awesome navigation"&gt;
		&lt;li&gt;&lt;a href="link1" title="link 1"&gt;&lt;span id="nav-first"&gt;&lt;/span&gt;&lt;span&gt;Link 1&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li class="splitter"&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="link2" title="link 1"&gt;&lt;span&gt;Link 2&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li class="splitter"&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="link3" title="link 1"&gt;&lt;span&gt;Link 3&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li class="splitter"&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="link4" title="link 1"&gt;&lt;span&gt;Link 4&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;li class="splitter"&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="link5" title="link 1"&gt;&lt;span id="nav-last"&gt;&lt;/span&gt;&lt;span&gt;Link 5&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
&lt;/div&gt;</pre>
<p>Wow that looks like some dirty code. Forgive me for the empty <em>span</em> tags, it&#8217;s getting late. I&#8217;m assuming everyone&#8217;s navigation markup looks pretty similar to this, so it shouldn&#8217;t be much of a stretch to update your style sheets. Speaking of which, here they are for this example:</p>
<pre class="brush: css;">div#navigation {
	font: 11px 'Verdana','Arial',sans-serif;
}
div#navigation ul {
	margin: 0;
	padding: 0;
	height: 50px;
	background: url(sprites.gif) 0 0 repeat-x;
	float: left;
	list-style-type: none;
}
div#navigation ul li {
	float: left;
	display: block;
	width: 50px;
}
div#navigation ul li.splitter {
	width: 2px;
	height: 50px;
	background: url(sprites.gif) -7px -100px no-repeat;
	float: left;
}
div#navigation ul li a {
	display: block;
	height: 50px;
	line-height: 50px;
	color: #606;
	text-decoration: none;
}
div#navigation ul li a:hover {
	background: url(sprites.gif) 0 -50px repeat-x;
	color: #404
}
div#navigation ul li a span	{
	display: block;
	padding: 0 5px;
}
div#navigation ul li a span#nav-first {
	display: block;
	position: absolute;
	padding: 0 !important;
	width: 6px;
	height: 50px;
	background: url(sprites.gif) 0 -100px no-repeat;
}
div#navigation ul li a:hover span#nav-first {
	background: url(sprites.gif) -16px -100px
}
div#navigation ul li a span#nav-last {
	display: block;
	position: absolute;
	margin: 0 0 0 44px;
	padding: 0 !important;
	width: 6px;
	height: 50px;
	background: url(sprites.gif) -10px -100px no-repeat;
}
div#navigation ul li a:hover span#nav-last {
	background: url(sprites.gif) -26px -100px;
}</pre>
<p>Quite a bit of styles. It&#8217;s okay though, you&#8217;ve obviously gone through the first example a million times already, so this should be a breeze.</p>
<p>Now, a lot of the styling is there just for aesthetics so we&#8217;ll skip all of that. Let&#8217;s just jump to the areas where we&#8217;re using sprites:</p>
<pre class="brush: css;first-line: 4">div#navigation ul {
	margin: 0;
	padding: 0;
	height: 50px;
	background: url(sprites.gif) 0 0 repeat-x;
	float: left;
	list-style-type: none;
}</pre>
<p>Here we are actually going to be repeating the sprite as the background in the x direction because I want this navigation bar to expand in the event of new sections. When creating a sprite with the intention of repeating it as a background, keep in mind that they can only be repeated in one direction: x or y. You cannot repeat a slice of a sprite in both directions, otherwise you may have other graphics in the sprite included in the repetition. Looking back at the original sprite, this background can be repeated in the x direction since there are no other slices to the left or right of that area.</p>
<pre class="brush: css;first-line: 30">div#navigation ul li a:hover {
	background: url(sprites.gif) 0 -50px repeat-x;
	color: #404
}</pre>
<p>Skipping all the positioning and font styles, I want to add a hover effect. Once again I&#8217;m utilizing a repeating background in the x-direction. The position is found using my marquee technique above.</p>
<pre class="brush: css;first-line: 17">div#navigation ul li.splitter {
	width: 2px;
	height: 50px;
	background: url(sprites.gif) -7px -100px no-repeat;
	float: left;
}</pre>
<p>I thought the navigation bar would look a little weird without having some kind of splitter between each option, so the styles above should take care of that. Here I am actually specifying the width because I do not want the background to repeat.</p>
<pre class="brush: css;first-line: 38">div#navigation ul li a span#nav-first {
	display: block;
	position: absolute;
	padding: 0 !important;
	width: 6px;
	height: 50px;
	background: url(sprites.gif) 0 -100px no-repeat;
}
div#navigation ul li a:hover span#nav-first {
	background: url(sprites.gif) -16px -100px
}
div#navigation ul li a span#nav-last {
	display: block;
	position: absolute;
	margin: 0 0 0 44px;
	padding: 0 !important;
	width: 6px;
	height: 50px;
	background: url(sprites.gif) -10px -100px no-repeat;
}
div#navigation ul li a:hover span#nav-last {
	background: url(sprites.gif) -26px -100px;
}</pre>
<p>Here I&#8217;m just being a little fancy and adding the smooth bits at each end of the navigation bar. Essentially the same techniques used above.</p>
<h4>Holy Crap!</h4>
<p>Yeah, it&#8217;s a lot to take in but I didn&#8217;t lie when I said this was a beginner guide because I assume everyone reading this is an expert with CSS.</p>
<p>The examples above are merely examples. I hope no one copy-and-pastes the markup because it won&#8217;t work for your site (figuratively speaking). I hope you learn from what was presented above, test out your own techniques, and apply it in your daily web development ventures. The best way of learning is to do it yourself, this guide is only here as a guide and also because I have nothing better to do at 2:00AM on a Wednesday morning <img src='http://www.buyco.ca/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.buyco.ca/2009/08/27/optimizing-with-image-sprites-and-css-for-beginners-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Day out in Victoria</title>
		<link>http://www.buyco.ca/2009/08/17/day-out-in-victoria/</link>
		<comments>http://www.buyco.ca/2009/08/17/day-out-in-victoria/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 00:22:15 +0000</pubDate>
		<dc:creator>Buyco</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[dragonboat]]></category>
		<category><![CDATA[ferry]]></category>
		<category><![CDATA[museum]]></category>
		<category><![CDATA[parliament]]></category>
		<category><![CDATA[rubik]]></category>
		<category><![CDATA[trip]]></category>
		<category><![CDATA[vacation]]></category>
		<category><![CDATA[Victoria]]></category>

		<guid isPermaLink="false">http://www.buyco.ca/?p=95</guid>
		<description><![CDATA[A day trip to Victoria. The ups, the downs, and the treacherous ferry rides. All photos taken were from my iPhone 3G. Too lazy to bring my DSLR.]]></description>
			<content:encoded><![CDATA[<p>This weekend it was suggested to spend some time in Victoria and do a bit of local touristing. It&#8217;s a pretty close destination and therefore I didn&#8217;t think through the planning so much. I should have.</p>
<p>A bit of a preface: to get to Victoria it&#8217;s about a half an hour drive from Vancouver to Tsawwassen (/teh&#8217;wa:sehn/, /seh&#8217;wa:sehn/ or /tseh&#8217;wa:sen/) then an hour and 30 minute ferry ride to Swartz Bay, then another half hour drive to get to Downtown Victoria. Totalling to approximately 2 and a half hours of travel. Wrong.</p>
<p>The day before we left I attempted to reserve a spot on the 10am ferry so we wouldn&#8217;t have to worry about any waits. This didn&#8217;t work because the ferry reservation site was down&#8211;of course. I figured it shouldn&#8217;t be too busy getting to Victoria on a Sunday since it&#8217;s usually the day everyone comes back to Vancouver. Turns out I was right&#8230; but that only helped half of my cause (since we had to take a ferry back to Vancouver later that night).</p>
<p>Jumping ahead about 3 hours, we found ourselves in the middle of downtown Victoria. It had an old town feel, with city parking. No damn parking anywhere! For about half an hour we were trying to find street parking, and finally gave up and proceeded to search for underground pay parking. The first parkade we found was a diamond in the rough&#8230; free parking on Sundays! After settling in, we began the day&#8230;</p>
<p>We went to eat at the first cafe we saw and hot damn it was good. Ham and cheese omelette for me, veggie omelette for her. When eating under the hot sun, I do not recommend eating cheese. Take that advice with you and learn from my mistakes. After breakfast we walked around for a bit. There was a marketplace which was like Richmond nightmarket minus all the asian people, the horrific stage performers and food. Pretty bland if you ask me. From there we went around and took some pictures of the dragonboat festival, the parliament building and the Fairmont hotel.</p>
<p><a href="http://www.buyco.ca/wp-content/uploads/2009/08/02.jpg" rel="shadowbox[Tourists]" title="Dragonboat Festival"><img class="alignnone size-thumbnail wp-image-96" title="dragonboat" src="http://www.buyco.ca/wp-content/uploads/2009/08/02-150x150.jpg" alt="dragonboat" width="150" height="150" /></a><a href="http://www.buyco.ca/wp-content/uploads/2009/08/03.jpg" rel="shadowbox[Tourists]" title="Fairmont Empress Hotel"><img class="alignnone size-thumbnail wp-image-97" title="fairmont" src="http://www.buyco.ca/wp-content/uploads/2009/08/03-150x150.jpg" alt="fairmont" width="150" height="150" /></a><a href="http://www.buyco.ca/wp-content/uploads/2009/08/01.jpg" rel="shadowbox[Tourists]" title="Parliament Building"><img class="alignnone size-thumbnail wp-image-98" title="parliament" src="http://www.buyco.ca/wp-content/uploads/2009/08/01-150x150.jpg" alt="parliament" width="150" height="150" /></a></p>
<p>After a short debate, we went to the museum. I haven&#8217;t been to a museum in about 20 years and I don&#8217;t know why. It was amazing! To stand in the presence of artifacts dating several millennia ago set me aback. These were all from the <a href="http://www.royalbcmuseum.bc.ca/Treasures/" target="_blank">British Museum&#8217;s &#8220;Treasures&#8221; exhibit</a>, featured in the <a href="http://www.royalbcmuseum.bc.ca" target="_blank">Royal BC Museum</a>. I think my favorite pieces were from ancient Egypt and ancient Rome. To see these artifacts so close and personal was an experience to me. I never thought I&#8217;d enjoy a visit to the museum so much. Easily on the top of my list for this visit.</p>
<p>We then did a bit of walking around, ran into some street performers and I found myself a replacement 4x4x4 Rubik&#8217;s cube (<a href="http://en.wikipedia.org/wiki/Rubik%27s_Revenge" target="_blank">Rubik&#8217;s Revenge</a>). The last one was demolished by my mom. I&#8217;ve never seen anything explode in someone&#8217;s hands like that before..</p>
<p><a href="http://www.buyco.ca/wp-content/uploads/2009/08/05.jpg" rel="shadowbox[Walking]" title="Street Performers"><img class="alignnone size-thumbnail wp-image-99" title="street-performers" src="http://www.buyco.ca/wp-content/uploads/2009/08/05-150x150.jpg" alt="street-performers" width="150" height="150" /></a><a href="http://www.buyco.ca/wp-content/uploads/2009/08/04-crop.jpg"  rel="shadowbox[Walking]" title="Rubik's Revenge"><img class="alignnone size-thumbnail wp-image-100" title="rubiks" src="http://www.buyco.ca/wp-content/uploads/2009/08/04-crop-150x150.jpg" alt="rubiks" width="150" height="150" /></a></p>
<p>Finally it was time to make our last runs and stopped by the winery. This was a first for me and I had the biggest urge to just run through the grape field. No reasoning at all&#8230; I just want to do it. If I had to be somewhere fast, I would imagine myself surrounded by grapes.</p>
<p>Anyways&#8230;</p>
<p>The trip home wasn&#8217;t very awesome. Like I said above, &#8220;I figured it shouldn&#8217;t be too busy getting to Victoria on a Sunday since it&#8217;s usually the day everyone comes back to Vancouver.&#8221; We waited in the car for about an hour before we got to the actual toll to pay for the ride back home. From there we waited in line for about another two hours waiting for our ferry. Two hours later, we made it into Vancouver.</p>
<p>Putting this all together, there was about 8 and a half hours of transit in this day trip. We spent less time being tourists than we did traveling. How sick is that? But in the end, I thought it was a nice trip out of the city and I got to enjoy a beautiful view on the ride back.</p>
<p><a href="http://www.buyco.ca/wp-content/uploads/2009/08/06.jpg" rel="shadowbox[Ferry]" title="View from the Ferry"><img class="alignnone size-thumbnail wp-image-101" title="view" src="http://www.buyco.ca/wp-content/uploads/2009/08/06-150x150.jpg" alt="view" width="150" height="150" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.buyco.ca/2009/08/17/day-out-in-victoria/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Off to the city of bright lights and indecent acts of debauchery: Las Vegas</title>
		<link>http://www.buyco.ca/2009/07/28/viva-las-vegas/</link>
		<comments>http://www.buyco.ca/2009/07/28/viva-las-vegas/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 04:46:01 +0000</pubDate>
		<dc:creator>Buyco</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.buyco.ca/?p=87</guid>
		<description><![CDATA[Writing about random nothings is awesome. Reading about random nothings is not as great.]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t written anything personal on this blog of mine, but right now I have a few minutes to sit down and kill so why not.</p>
<p>I hardly get excited about going on any trips, especially to those destinations within continental North America. It&#8217;s weird that I was more excited about going to Calgary to visit some of my close friends, than I am leaving to the city that never stops partying. Why is that?</p>
<p>I&#8217;ve travelled quite frequently on business trips, and this is one of the few where I don&#8217;t have to speak about web development, and I don&#8217;t have to be at an 8am meeting, and I don&#8217;t have to set up a booth, and I specifically don&#8217;t have to give a damn about how I behave. So why do I not feel excited? I think work ruined it&#8230; I think it&#8217;s because I still have that routine mentality that as soon as I land, I&#8217;m going to have to do work. I&#8217;d like to say, this time I don&#8217;t, but unfortunately I promised some slides and estimates by tomorrow morning. What was I thinking lol.</p>
<p>Geez, 4 hours into my vacation and I&#8217;m already talking about work. Anyways&#8230;</p>
<p>I&#8217;m heading to Vegas in the morning and I expect to be in full party mode by 11AM. There should be quite a few of us down there, and by some miracle my sister will be down there too. Have you ever partied with your sibling? Have you ever partied with your sibling in Vegas? I expect no good to come out of this&#8230;</p>
<p>I am going absolutely nowhere with this entry lol, and it could be quite possibly be because of the heat&#8230; or the hair dye seeping into my brain. Yes, I dyed my hair on Saturday and again today&#8230; 3 days later. Don&#8217;t judge.</p>
<p>Note to self: do not start a blog post without thinking about what to say first.</p>
<p>And my final note&#8230; things to remember to not bring:</p>
<ol>
<li>a camera</li>
<li>my inhibitions</li>
<li>a sense of self-respect</li>
<li>responsibility</li>
<li>decision making skills</li>
</ol>
<p>That is all. Peace out, INTERNET.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.buyco.ca/2009/07/28/viva-las-vegas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimizing with Image Sprites and CSS for Beginners (Part 1)</title>
		<link>http://www.buyco.ca/2009/06/30/optimizing-with-image-sprites-and-css-for-beginners-part-1/</link>
		<comments>http://www.buyco.ca/2009/06/30/optimizing-with-image-sprites-and-css-for-beginners-part-1/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 00:20:59 +0000</pubDate>
		<dc:creator>Buyco</dc:creator>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web Dev Tips and Tricks]]></category>
		<category><![CDATA[beginner]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[optimize]]></category>
		<category><![CDATA[sprites]]></category>

		<guid isPermaLink="false">http://www.buyco.ca/?p=70</guid>
		<description><![CDATA[Image Sprites and fancy CSS code-work can save your website visitors' download time.
]]></description>
			<content:encoded><![CDATA[<h4>What the hell is an image sprite? Why do I care? How do I use it?!</h4>
<p>That&#8217;s probably the same thought process I had when I first started reading about image sprites. After a few minutes of investigation via Google, I wanted to try to implement this technique every and anywhere possible on my websites. This isn&#8217;t necessarily a required method of implementation of a web site but it is still something that every web developer should at least have an understanding of.</p>
<p>In this 2-part series I&#8217;ll go over what an image sprite is, when to use them, how to use them, as well as provide a few examples.</p>
<h4>What is an image sprite?</h4>
<p>Back in the olden days (circa 90s), multiple images were merged into a single graphic file to quickly composite 2D games. <a href="http://upload.wikimedia.org/wikipedia/commons/0/03/Sprite-example.gif" target="_blank">Here is an example</a> [source: wikipedia]. Certain parts of this single graphic would be extracted and used to animate objects, characters, etc. We can utilize the same methodology with our websites and optimize load times (as well as provide an easy means of updating graphics when the times come).</p>
<h4>How does an image sprite work in the web-world?</h4>
<p>One of the greatest things to happen to a web developer / designer is the invention of Cascading Style Sheets. We can use CSS to pick certain coordinates within a sprite and display those areas on our websites. It may sound a bit tedious to have to find the pixel by pixel locations of every sprite you want to use, but in doing this you may be able to shave off precious load times of your web page.</p>
<h4>Decreasing load times? Wtf?</h4>
<p>When you want to increase the performance of a website, one of your key objectives is to reduce the amount of time it takes for a particular page (or pages) to load. One way is to keep the number of HTTP requests to a minimum. Any time you insert an image, or include a JavaScript file, or any other file for that matter, it is an additional HTTP request. In the nature of a sprite, you are making a single HTTP request for that graphic, then referencing different parts of it to be displayed on a web page. This works great granted that the size of the single graphic is less than the size of all it&#8217;s containing graphics individually (we&#8217;re talking bits and bytes here, not lengths and widths).</p>
<p>Another potential advantage is browser caching. Take, for example, this navigation bar:</p>
<p><a href="http://www.buyco.ca/wp-content/uploads/2009/06/an-nav.jpg"><img class="alignnone size-full wp-image-71" title="an-nav" src="http://www.buyco.ca/wp-content/uploads/2009/06/an-nav.jpg" alt="an-nav" width="610" height="33" /></a></p>
<p>In this case we assume that this navigation bar is split up into 8 images: 4 for the &#8220;default state&#8221;, and 4 for the &#8220;hover state&#8221;. When the user hovers their mouse over a particular image, the &#8220;hover state&#8221; image is loaded on the fly. That&#8217;s a single HTTP request for that extra image. If a user does not hover over all the graphics, not all of them will load, so basically this page will only load the additional images if it *really* needs to. But still not the best situation&#8230;</p>
<p>Each graphic is around 1.097Kb &#8211; 0.997Kb totaling 8.11Kb. In actuality, I used a single sprite totaling 3.292Kb. By loading even only the &#8220;default state&#8221; images, we are still reaching a size larger than the single sprite.</p>
<h4>Applications</h4>
<p>That is only one situation where you can really utilize the benefits of using a sprite. Using them for navigation bars with hover states is probably the most common use, but some sites have taken it a step further.</p>
<p>Take Google for example. Shaving off a single millisecond of load time of their site can translate into some amazing results (probably because they get millions of hits a day). You may not see this type of traffic, but in either case you still don&#8217;t want to have a slow website.</p>
<p>Back to my point, lets have a look at a screenshot of my iGoogle homepage:</p>
<p><a href="http://www.buyco.ca/wp-content/uploads/2009/06/igoogle.gif"><img class="alignnone size-full wp-image-72" title="igoogle" src="http://www.buyco.ca/wp-content/uploads/2009/06/igoogle.gif" alt="igoogle" width="621" height="135" /></a></p>
<p>Looks like a simple logo right? In actuality, the logo is a part of an image sprite:</p>
<p><a href="http://www.buyco.ca/wp-content/uploads/2009/06/ico_sprite_classic.gif"><img class="alignnone size-full wp-image-73" title="ico_sprite_classic" src="http://www.buyco.ca/wp-content/uploads/2009/06/ico_sprite_classic.gif" alt="ico_sprite_classic" width="167" height="68" /></a></p>
<p>All those smaller icons are used as elements within the page. With some fancy CSS code-work, only a single image is used on this page! (That&#8217;s actually a lie since I have multiple gadgets running with external image sources).</p>
<p>Other high-volume sites like Yahoo and eBay also use image sprites so why don&#8217;t you!?</p>
<p>Tune in next time as I go through a few implementation examples: Optimizing with Image Sprites and CSS for Beginners (Part 2)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.buyco.ca/2009/06/30/optimizing-with-image-sprites-and-css-for-beginners-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Another Review: MadCatz SF4 FightStick Tournament Edition</title>
		<link>http://www.buyco.ca/2009/05/04/another-review-madcatz-sf4-fightstick-tournament-edition/</link>
		<comments>http://www.buyco.ca/2009/05/04/another-review-madcatz-sf4-fightstick-tournament-edition/#comments</comments>
		<pubDate>Tue, 05 May 2009 03:57:33 +0000</pubDate>
		<dc:creator>Buyco</dc:creator>
				<category><![CDATA[Features]]></category>
		<category><![CDATA[FightStick]]></category>
		<category><![CDATA[MadCatz]]></category>
		<category><![CDATA[Sanwa]]></category>
		<category><![CDATA[SF4]]></category>
		<category><![CDATA[Street Fighter 4]]></category>
		<category><![CDATA[Street Fighter IV]]></category>
		<category><![CDATA[TE]]></category>
		<category><![CDATA[Tournament Edition]]></category>

		<guid isPermaLink="false">http://www.buyco.ca/?p=56</guid>
		<description><![CDATA[How do you expand on describing the PS3 MadCatz SF4 FightStick Tournament Edition as.. AWEEEEEEESSSOMMMMEEEEE!!!?! Hmm&#8230; I&#8217;ll try&#8230; I still have yet to personally own one of these badboys, but I did get a chance to go a few hours on one (more like 10 hours of Street Fighter 4). I can&#8217;t really comment much [...]]]></description>
			<content:encoded><![CDATA[<p>How do you expand on describing the PS3 MadCatz SF4 FightStick Tournament Edition as.. AWEEEEEEESSSOMMMMEEEEE!!!?! Hmm&#8230; I&#8217;ll try&#8230;</p>
<p>I still have yet to personally own one of these badboys, but I did get a chance to go a few hours on one (more like 10 hours of Street Fighter 4). I can&#8217;t really comment much on the packaging, or the experience of opening it, which I&#8217;m sure will be the most fulfilling thing you do this year, but I&#8217;ll do my best to give some first thoughts on using it.</p>
<p>I must preface this with the fact that up until maybe 6 years ago I was more comfortable using a game pad rather than an arcade stick. But needless to say, I&#8217;ve been around the block for the last few years and have had a chance to play with North American-style as well as Japanese-style arcade joysticks. Purely based on my experience, and not expertise, will I give the most unbiased review on the FightStick.</p>
<h4>Build</h4>
<p>When you first pick this puppy up, you&#8217;ll realize immediately that it&#8217;s no lightweight. The FightStick can be described as sturdy. I wont say that it&#8217;s heavy, but even if it was then it would be for good reason. When you play Street Fighter in an arcade, you dont expect the console to move when you jerk at the joystick. Same goes with this stick&#8211;it doesn&#8217;t move.</p>
<p>A really cool feature for this controller is that there is a compartment in the front where you can hide the cord when travelling (handy for taking to tournaments like <a href="http://hgc.buyco.ca/" target="_blank">HGC</a>). It also is nice for when you just put it away when not in use. Ideally it would be wireless, but I won&#8217;t complain.</p>
<p>The top surface of the control is very smooth and very similar to an actual arcade machine. It also helps that the joystick itself is a true Sanwa stick! The only oddity would be the two extra buttons, but I&#8217;ll get to that. The fact that this stick is easily moddable, no one should have complaints with the build or the components.</p>
<h4>Experience</h4>
<p>It&#8217;s an arcade in your livingroom (with the addition of the 3P and 3K buttons).</p>
<h3>Buttons</h3>
<p>Speaking of buttons, that would be my first complaint. Yes, a complaint. I&#8217;m complaining because the buttons are perfect. They are extremely sensitive and even with a slight press will the input be processed. This is something which I am not used to and frequently had issues with. I&#8217;m used  to resting my fingers in the divets of the buttons and pressing as I see fit. With the FightStick you&#8217;re not given such convenience. This is a player preference, so I can&#8217;t really say this is something I would deter me from buying it.</p>
<h3>Sanwa &lt;3</h3>
<p>The stick is also perfect. The Sanwa stick sits in a square gate which may take some getting used to if you have only played on the common North American-style octo-gate. The throw is really short with this stick and allows for quicker execution, or if you have fat hands and horrible dexterity&#8211;a lot of random jumping. I don&#8217;t have fat hands or horrible dexterity, but it still took a few rounds to really get used to the sensitivity. I just found it really weird using a joystick that actually worked.</p>
<p>Each direction in the gate has a difinitive clicking sound. I personally love this. No guessing if you <strong>actually</strong> moved in a direction. With the input clicks sound, you have no excuse. Play with this stick and put away your joystick excuses.</p>
<h3>3P/3K</h3>
<p>I always liked having a 3P/3K button because I&#8217;m a lazy ass. If you&#8217;ve ever used an X-Arcade stick, you&#8217;ll know that the 3P/3K buttons were easily accessible with your right thumb and somewhat out of the way of the other buttons. With the FightStick TE, this is not the case. The 3P/3K buttons are right beside your HP/HK buttons. I can&#8217;t tell you how many times I accidentally 3K&#8217;d randomly because of the way my right hand sits. That&#8217;s just because I suck. Some people might have the same issue, so keep that in mind.</p>
<h3>Connectivity</h3>
<p>Yep, it&#8217;s wired. Should it bug you? No. It&#8217;s a joystick which should be on a sturdy foundation. If you got complaints, shut the fuck up. In no way, shape or form should this affect your gameplay&#8211;that is unless you&#8217;re one of 3 people in the world who have a 100ft wide screen and need to sit 300ft away from the screen..in that case, buy an extension.</p>
<h4>Final Thoughts</h4>
<p>I only have one final thought&#8230; if you can somehow get your hands on one of these puppies, don&#8217;t waste any time and pick one of these bad boys up. You won&#8217;t find a setup like this anywhere else unless you make it yourself. Even then, this FightStick is fully customizable. Every button, the faceplate, even the Sanwa stick can be replaced with replacement parts.</p>
<p>It&#8217;s like build a bear&#8230;except it&#8217;s build a stick. It&#8217;s sick to think a stuffed bear would make a grown man happy, but adversely any time I use a TE I&#8217;m more than proud to have a FightStick wood.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.buyco.ca/2009/05/04/another-review-madcatz-sf4-fightstick-tournament-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
