<?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>BKWLD › Buk Life &#187; Development</title>
	<atom:link href="http://bkwld.com/blog/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://bkwld.com/blog</link>
	<description>The blog from the staff of BKWLD</description>
	<lastBuildDate>Thu, 19 Jan 2012 19:32:56 +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>HTML5 Video Web Server Configuration Gotcha</title>
		<link>http://bkwld.com/blog/2011/08/html5-video-web-server-configuration-gotcha/</link>
		<comments>http://bkwld.com/blog/2011/08/html5-video-web-server-configuration-gotcha/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 06:37:30 +0000</pubDate>
		<dc:creator>Garrett Bjerkhoel</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[mime]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=1324</guid>
		<description><![CDATA[While finishing up a project over the weekend I ran into an issue where the video player just displayed an infinite loading screen rather than actually playing. Odd. I checked the JavaScript console to see if there were any JavaScript errors or if there was a 404 request for the video, which neither of those [...]]]></description>
			<content:encoded><![CDATA[<p>While finishing up a project over the weekend I ran into an issue where the video player just displayed an infinite loading screen rather than actually playing. Odd. I checked the JavaScript console to see if there were any JavaScript errors or if there was a 404 request for the video, which neither of those were actually the case. I tried to visit the file directly, and what do you know, it&#8217;s asking me to download the video, it didn&#8217;t start playing in the browser like it should&#8217;ve. After realizing the only reason this would happen would be because the server must not be returning the correct Content-Type header and the browser didn&#8217;t know what to do with it, I gathered the MIME types for the few videos formats we were using and updated the <a href="http://nginx.org/">nginx</a> <strong>mime.types</strong> file and restarted the server. What do you know, that solved the problem and after refreshing it displayed the video and it played as expected. So to help anyone else who may have ran into this issue and not really sure what to do, I have both the nginx and Apache solutions for you. Hopefully soon all web servers include these new MIME types to their default configuration files, but until then be sure to include these in your server setups for future projects.</p>
<p><a href="http://nginx.org">nginx</a><br />
<script src="https://gist.github.com/1176319.js?file=nginx_mime.types"></script></p>
<p>Apache<br />
<script src="https://gist.github.com/1176319.js?file=apache_mime.types"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2011/08/html5-video-web-server-configuration-gotcha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to fix CSS 3D transforms that flicker</title>
		<link>http://bkwld.com/blog/2011/04/how-to-fix-css-3d-transforms-that-flicker/</link>
		<comments>http://bkwld.com/blog/2011/04/how-to-fix-css-3d-transforms-that-flicker/#comments</comments>
		<pubDate>Sat, 16 Apr 2011 20:34:00 +0000</pubDate>
		<dc:creator>Garrett Bjerkhoel</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[css 3d]]></category>
		<category><![CDATA[css transform]]></category>
		<category><![CDATA[safari]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=1311</guid>
		<description><![CDATA[While working on a client project today, I decided to add some nice CSS transforms to add a richer experience for those who choose to use one of the more up to date browsers (Safari, Chrome, Firefox 4). I chose to use the hardware accelerated 3D transforms for both Safari and Chrome, and the standard [...]]]></description>
			<content:encoded><![CDATA[<p>While working on a client project today, I decided to add some nice CSS transforms to add a richer experience for those who choose to use one of the more up to date browsers (Safari, Chrome, Firefox 4). I chose to use the hardware accelerated 3D transforms for both Safari and Chrome, and the standard 2D for Firefox 4. Only to be stumped as whenever the animations started to take place, the header and footer for the site would flicker like a broken down TV throughout the animation until it was done in Safari, but not in Chrome. Not cool. So the first thing I did was <a href="http://www.google.com/search?client=safari&#038;rls=en&#038;q=css+3d+flicker&#038;ie=UTF-8&#038;oe=UTF-8">search Google</a> for an answer, clicking right away on the first <a href="http://stackoverflow.com/questions/2975217/how-to-fix-flicker-when-using-webkit-transforms-transitions">Stack Overflow</a> post I saw.</p>
<p>The first answer seemed like the wrong approach, having to add <strong>-webkit-transform-style: preserve-3d</strong> to every element and having the browser transform all the elements to a 3D state which would seemingly add more work for the browser. Not good, next answer.</p>
<p>The next answer was thought out more and seemed a bit more logical. Although for my build, both the header and footer have a fixed position. Header to the top, footer to the bottom, both of them pinned to the full width of the browser, no wider so it didn&#8217;t make sense as to why it was still flickering when the answer said it will happen if the elements are wider than the window itself.</p>
<p>The first approach I took was just to take out the header and footer CSS to see if it&#8217;d still flicker. It stopped! So something within the CSS must be causing this. I added the styles back in and only kept the styles for the actual wrapper for both the header and footer, still no flickering, so I was on the right path. After adding all the CSS back in and digging some more, I noticed the navigation, logo and some footer links had <strong>text-indent: -999em;</strong>. Taking this out preserved the header and footer completely during the animation and had no flickering. So I found the problem, the text itself was adding onto the headers width in the browsers eyes.</p>
<p>In the end, the simple fix was to add span tags around the text that I was negative indenting and hide that specifically rather than using text-indent all together. You probably wonder why I go into great depth on such a simple problem, but this has happened to be quite a few times before, and it is great relief that I know now what was causing it and how to fix it. I hope anyone who has had this problem before or are currently dealing with it find this article so you can move forward in your development and keep on making awesome things.</p>
<p>I&#8217;ve created a <a href="http://bkwld.com/blog/labs/css_flicker/">simple example</a> for you to check out and see what happens. Simply roll over the rounded square in the middle of the page and let the flickering begin. Remember, only for Safari does this happen.</p>
<p>Another thing to keep in mind, is it also only happens if you have z-index on the parent element where the text is overflowing. I created another <a href="http://bkwld.com/blog/labs/css_flicker/no-zindex.html">example</a> to demonstrate this, the only difference between the 2 examples is this one doesn&#8217;t set a z-index on the header, which prevents it from flickering. Although for this build, heavy z-indexing is required.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2011/04/how-to-fix-css-3d-transforms-that-flicker/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Application Settings For Your Rails Project</title>
		<link>http://bkwld.com/blog/2011/04/application-settings-for-your-rails-project/</link>
		<comments>http://bkwld.com/blog/2011/04/application-settings-for-your-rails-project/#comments</comments>
		<pubDate>Sat, 16 Apr 2011 04:39:43 +0000</pubDate>
		<dc:creator>Garrett Bjerkhoel</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[settings]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=1310</guid>
		<description><![CDATA[For an internal project I am working on I need the ability to set environment specific configuration settings, and I&#8217;d rather not set them with a file full of constants. So I came up with a way to have a simple YAML file for configuration, and then an initializer to load it and apply it [...]]]></description>
			<content:encoded><![CDATA[<p>For an internal project I am working on I need the ability to set environment specific configuration settings, and I&#8217;d rather not set them with a file full of constants. So I came up with a way to have a simple YAML file for configuration, and then an initializer to load it and apply it to a single constant being <strong>Setting</strong>.</p>
<p>Just copy the <strong>settings.yml</strong> file to <strong>config/settings.yml</strong>, then copy the <strong>settings.rb</strong> file to <strong>config/initializers/settings.rb</strong>. Once you&#8217;ve done that, restart your server and you&#8217;ll have access to all your settings.</p>
<p>You have your default configuration that you setup, then all your environments listed below that override any settings set in defaults. You&#8217;ll also need to create additional environment keys for any for other environments you may have.</p>
<p><script src="https://gist.github.com/922868.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2011/04/application-settings-for-your-rails-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Load multiple images in AS3 by storing loader information in an object</title>
		<link>http://bkwld.com/blog/2011/03/load-multiple-images-in-as3-by-storing-loader-information-in-an-object/</link>
		<comments>http://bkwld.com/blog/2011/03/load-multiple-images-in-as3-by-storing-loader-information-in-an-object/#comments</comments>
		<pubDate>Sat, 12 Mar 2011 00:25:33 +0000</pubDate>
		<dc:creator>matt.aebersold</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=1309</guid>
		<description><![CDATA[It&#8217;s easy to store images in an array, and loop through that array to access those images. The code is very clean, and easy to manage. My concept is to try and load images from an array by looping through the array, and reusing one loader method multiple times. I would instantiate a new loader [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s easy to store images in an array, and loop through that array to access those images. The code is very clean, and easy to manage. My concept is to try and load images from an array by looping through the array, and reusing one loader method multiple times. I would instantiate a new loader instance each iteration through the loop, and then load the image. The problem, however, is by the time the image is actually loaded, the for loop is complete, and my call <strong>addChild(l)</strong> is referring to the last time <strong>Loader</strong> was instantiated, so all of the images loaded were the last one in the array.</p>
<p>I&#8217;ve found an elegant solution to this (in my opinion) by creating an object for each image, and to store information about the image in that object, including an instance of the loader. Let me show you.</p>
<h2>Example</h2>
<pre>
<code>
//counter to keep track of unique items in the array
var counter:Number = 0;

//base array with paths to the images
var images:Array = ["img1.jpg", "img2.jpg", "img3.jpg", "img4.jpg"];

//blank array which will be filled with objects that contain image data
var imageObjectArray = [];

for(var i:uint = 0; i < images.length; i++) {

	//create blank object with appropriate properties
	var imgMeta:Object = {imgPath: null, holder:null, loaderInst: null};

	//push the object into imageObjectArray so we can access it later
	imgObjectArray.push(imgMeta);

	//set the properties we know
	imgMeta.imgPath = images[i];
	var imgHolder:Sprite = new Sprite();
	imgMeta.holder = imgHolder;	

	//load the image here
	var l:loader = new Loader();
	l.contentLoaderInfo.addEventListener(Event.COMPLETE, onDoneLoading);
	l.load(new URLRequest(imgMeta.imgPath));
}

//function called when each image is done loading
function onLoadComplete(e:Event) {

	//use counter here to make sure we're getting the correct imageObject
	//we need to call each unique loaderInst here, so each image is unique
	addChild(imgObjectArray[counter].loaderInst);
	counter++;
}
</code>
</code></pre>
<p>This of course can be classed out and abstracted, but the basic principal here is being able to reuse the loader code each time through the for loop, and displaying each unique image when it&#8217;s done being loaded.</p>
<p>An additional benefit to this is being able to use the object again anywhere in your code, since all the information for all of the images is stored in <strong>imgObjectArray</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2011/03/load-multiple-images-in-as3-by-storing-loader-information-in-an-object/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Testing sites in mobile browsers</title>
		<link>http://bkwld.com/blog/2010/09/testing-sites-in-mobile-browsers/</link>
		<comments>http://bkwld.com/blog/2010/09/testing-sites-in-mobile-browsers/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 23:19:25 +0000</pubDate>
		<dc:creator>Robert Reinhard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[feature]]></category>
		<category><![CDATA[featured]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=1304</guid>
		<description><![CDATA[On a project we have in development now, we&#8217;re deploying a site that must work across mobile devices.  Not just iPhone, but Android, Nokia, Blackberry, and Palm.  Rather than purchasing a bunch of test devices, you can install emulators for each platform and then run the phone&#8217;s web browser.  Here&#8217;s some places to look and [...]]]></description>
			<content:encoded><![CDATA[<p>On a project we have in development now, we&#8217;re deploying a site that must work across mobile devices.  Not just iPhone, but Android, Nokia, Blackberry, and Palm.  Rather than purchasing a bunch of test devices, you can install emulators for each platform and then run the phone&#8217;s web browser.  Here&#8217;s some places to look and some instructions about how to build up your own testing suite.  These are instructions are for Mac.  Except for where they&#8217;re not.</p>
<div id="_mcePaste"><strong>iOS</strong></div>
<div id="_mcePaste">1. Install the iPhone SDK which you can get from developer.apple.com.  You&#8217;ll need to signup for a developer account.</div>
<div id="_mcePaste">2. After install, it will be at /Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator</div>
<div><strong><br />
Android</strong></div>
<div id="_mcePaste">1. First, download the Android SDK from their site for your particular platform (developer.android.com/sdk) and unpack it.</div>
<div id="_mcePaste">2. Open the Android SDK and AVD Manager. On the Mac, this is done by opening the directory where you unpacked the SDK in Terminal (cd/path/ to/sdk) and running tools/android. On Windows, just launch SDK Setup. exe within the SDK directory. The result is the same – the Android ADK and AVD Manager application opens up.</div>
<div id="_mcePaste">3. Click the Available Packages link.</div>
<div id="_mcePaste">4. Tick the checkboxes that are for packages with SDK Platform in the name.</div>
<div id="_mcePaste">5. Click Install Selected and confirm that choice in the dialog that opens up on your screen next.</div>
<div id="_mcePaste">6. After installing, in the manager, go to Virtual Devices and click new.  Choose a name (I typically choose name them after the skin (or resolution), so HVGA, for example.  Choose a target (SDK version).  I&#8217;ve been doing 1.6 for browser testing.  Click create.</div>
<div id="_mcePaste">7. Launch by running `tools/emulator @&lt;NAME&gt;` from the sdk directory, where &lt;NAME&gt; is the name you chose in step 6 (such as HVGA).</div>
<div><strong><br />
Palm</strong></div>
<div id="_mcePaste">1. Go here and follow instructions: http://developer.palm.com/index.php?option=com_content&amp;view=article&amp;layout=page&amp;id=1545&amp;Itemid=55</div>
<div id="_mcePaste">2. The Palm Emulator will be installed in your Applications directory</div>
<div>
<div><em>FYI, I found the Palm browser the least web standards friendly</em></div>
</div>
<div><em><br />
</em></div>
<div id="_mcePaste"><strong>Blackberry</strong></div>
<div id="_mcePaste">1. Go to http://na.blackberry.com/eng/developers/resources/simulators.jsp and download.  Choose the Torch phone.  It must run their OS version 6.0</div>
<div id="_mcePaste">2. Fill out form</div>
<div id="_mcePaste">3. Download</div>
<div id="_mcePaste">4. It is a windows executable, so put it in a location that is accessible by Windows.</div>
<div id="_mcePaste">5. Run the executable and the subsequent steps.  Eventually you have an emulator app you can run.</div>
<div id="_mcePaste">6. Go to setup within the phone in the emulator and turn on it&#8217;s wifi.  I had to do that to test web pages.</div>
<div><em><br />
</em></div>
<div id="_mcePaste"><strong>Nokia</strong></div>
<div id="_mcePaste">1. Go to http://developer.symbian.org/wiki/index.php/Symbian_Emulator and follow the install instructions, which require installing several supporting layers onto a windows machine.  I used Windows XP, which seems like the most likely to be supported.</div>
<div id="_mcePaste">2. It took awhile to install everything, but the instructions worked as promised</div>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2010/09/testing-sites-in-mobile-browsers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How many images will fit in my DOM?</title>
		<link>http://bkwld.com/blog/2010/07/how-many-images-will-fit-in-my-dom/</link>
		<comments>http://bkwld.com/blog/2010/07/how-many-images-will-fit-in-my-dom/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 18:52:43 +0000</pubDate>
		<dc:creator>Robert Reinhard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=1301</guid>
		<description><![CDATA[On a project we&#8217;re working on now, we need to place &#8220;pins&#8221; on a map.  There are some advantages for us not implementing the map with Flash.  Namely, the project has a Facebook app component and Facebook requires users to click to activate Flash on profile tabs.  I was curious to see [...]]]></description>
			<content:encoded><![CDATA[<p>On a project we&#8217;re working on now, we need to place &#8220;pins&#8221; on a map.  There are some advantages for us not implementing the map with Flash.  Namely, the project has a Facebook app component and Facebook requires users to click to activate Flash on profile tabs.  I was curious to see how many pins I could instantiate in the DOM before there was noticeable chug.  I made a test script that creates a bunch of img elements in the DOM.  You can try it out here: <a href="http://bkwld.com/blog/labs/dom_capacity">DOM Capacity Test</a>.</p>
<p><a rel="attachment wp-att-1302" href="http://bkwld.com/blog/2010/07/how-many-images-will-fit-in-my-dom/screen-shot-2010-07-13-at-11-12-36-am/"><img class="aligncenter size-medium wp-image-1302" title="Screen shot 2010-07-13 at 11.12.36 AM" src="http://bkwld.com/blog/wp-content/uploads/Screen-shot-2010-07-13-at-11.12.36-AM-590x426.png" alt="" width="590" height="426" /></a></p>
<p>Through some not very scientific testing, I found that 100-300 DOM elements is my sweet spot (though IE really needs it towards the low end of that range).  Any higher and the browser noticeably chugs during rendering. I was surprised that once rendered, the browser didn&#8217;t seem to perform any worse during scrolling or resizing.  Another thing I noticed was that Firefox visually added each element to the page iteratively (taking much more time), whereas all other browsers immediately showed all of them after the initial CPU churn.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2010/07/how-many-images-will-fit-in-my-dom/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Web Typography Roundup</title>
		<link>http://bkwld.com/blog/2010/06/web-typography-roundup/</link>
		<comments>http://bkwld.com/blog/2010/06/web-typography-roundup/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 22:09:42 +0000</pubDate>
		<dc:creator>matt.aebersold</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[@font-face]]></category>
		<category><![CDATA[cufón]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[sIFR]]></category>
		<category><![CDATA[Typography]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=1294</guid>
		<description><![CDATA[This subject matter is far from new, but quality typography on the web is such an important issue that it  deserves attention. There many resources and tutorials out there, but I rarely come across a top-level view of all the typography-related techniques. Therefore, I&#8217;ve compiled a roundup of the most popular methods for rendering [...]]]></description>
			<content:encoded><![CDATA[<p>This subject matter is far from new, but quality typography on the web is such an important issue that it  deserves attention. There many resources and tutorials out there, but I rarely come across a top-level view of all the typography-related techniques. Therefore, I&#8217;ve compiled a roundup of the most popular methods for rendering high-quality typography on the screen.</p>
<h2>Images</h2>
<p><img src="http://bkwld.com/blog/wp-content/uploads/although-590x26.png" alt="Although it seems archaic and old school," title="although" width="590" height="26" class="alignnone size-medium wp-image-1295" style="padding: 0px;" /></p>
<p>using images for custom typography doesn&#8217;t necessarily have a negative impact on a site&#8217;s performance and search engine optimization. If file size is carefully considered, and the proper alt text is used, typographic images can be a good solution. Of course, this technique should only be used for short bits of text, like page headings, pull quotes, and drop caps. I will argue that there are better options available today, but at the end of the day, images are a perfectly valid option.</p>
<h2>Flash</h2>
<p>The value of embedding fonts in your SWF files cannot be overlooked. Although it would be considered bad practice to utilize flash for only this purpose, if Flash is going to be used anyways, one of it&#8217;s major benefits is the cross-browser pixel perfection and ability to embed dynamic type.</p>
<h2>Web Safe Fonts &amp; the Font Matrix</h2>
<p>The list of &#8220;web-safe&#8221; fonts is very limited. Normally, most web designers don&#8217;t stray too far away from Helvetica, Verdana, and Georgia. <a href="http://24ways.org/2007/increase-your-font-stacks-with-font-matrix">This list from 24 Ways</a> helps expand that list to fonts that are common across many computers, operating systems, and installed software. Used correctly in font stacks, developers can target most computers that have software like Office and Creative Suite. Check out the list, you might be surprised by how many fonts are available.</p>
<p><a href="http://24ways.org/2007/increase-your-font-stacks-with-font-matrix"><img src="http://bkwld.com/blog/wp-content/uploads/Thumbnail-of-font-matrix.png" alt="" title="Thumbnail of font matrix" width="511" height="152" class="alignnone size-full wp-image-1300" /></a></p>
<h2>sIFR</h2>
<p><a href="http://www.mikeindustries.com/blog/sifr"><img src="http://bkwld.com/blog/wp-content/uploads/Screen-shot-2010-06-23-at-2.39.49-PM.png" alt="" title="Screen shot 2010-06-23 at 2.39.49 PM" width="199" height="121" class="alignnone size-full wp-image-1296" /></a></p>
<p>It&#8217;s worth mentioning <a href="http://www.mikeindustries.com/blog/sifr">sIFR</a> here, although many developers have abandoned this technology in favor of Cufon, which I will talk about later. sIFR (which stands for Scalable Inman Flash Replacement) is a flash replacement technology. The philosophy here is creating the ability to bring rich typography to web pages without compromising accessibility or semantics. Additionally, one of the great advantages of sIFR was it&#8217;s fallback to plain text if Flash is not supported. Although it&#8217;s been criticized as hard to implement and somewhat buggy, this was the first real jump forward for web typography, and is still very popular to this day. sIFR laid the foundation for many great resources for custom web typography. </p>
<h2>Cufon</h2>
<p><a href="http://cufon.shoqolate.com/generate/"><img src="http://bkwld.com/blog/wp-content/uploads/Screen-shot-2010-06-23-at-2.40.13-PM.png" alt="" title="Screen shot 2010-06-23 at 2.40.13 PM" width="188" height="59" class="alignnone size-full wp-image-1297" /></a></p>
<p>The best way to describe <a href="http://cufon.shoqolate.com/generate/">Cufon</a> is a next generation sIFR which is built with Javascript rather than Flash. This method has it&#8217;s benefits like not requiring the Flash plugin &#8211; good news for Apple devices. It&#8217;s also extremely easy to implement, and has very good performance, even for large amounts of text. You upload font files (with the proper licensing) through the Cufon site, and convert&#8217;s the file to SVG format. Then, the SVG file is converted to JSON which can be added to your site through simple Javascript. One downside to using Cufon is that many custom font licenses do not permit usage on web pages, so check the license or use a great free or open source typeface. There are many good ones out there. </p>
<p>If you&#8217;re looking for some high quality free fonts, <a href="http://www.smashingmagazine.com/category/design/">Smashing Magazine</a> is a great place to start your search.</p>
<h2>Font-Face</h2>
<p>This is by far the easiest method to integrate custom typography on the web. Using the @font-face property allows you to access fonts via CSS, and host the files on your web server. Of course, the same licensing issues remain, so make sure to chose a good typeface with no constraints. From there, you can use @font-face to access that font file for use with any CSS property. Add the font name on the top of your font stacks, and that&#8217;s it. There are a few hoops to jump through, mainly to accommodate Internet Explorer. IE requires a .eot file (Embed-able Open Type) to render custom fonts. Luckily, there are a few good online converters that will take common font files (.ttf and .oft) and convert the fonts to .eot. On a side note, I <a href="http://www.mattaebersold.net/blog/?p=1213">wrote a recent blog post</a> about getting @font-face to work correctly in all major browsers.</p>
<h2>TypeKit</h2>
<p><a href="http://typekit.com/"><img src="http://bkwld.com/blog/wp-content/uploads/Screen-shot-2010-06-23-at-2.40.45-PM.png" alt="" title="Screen shot 2010-06-23 at 2.40.45 PM" width="167" height="43" class="alignnone size-full wp-image-1298" /></a></p>
<p><a href="http://typekit.com/">TypeKit</a> aims to take all of the hassle out of setting up @font-face, and they do a killer job at it. For as little as $25 per year, you can use fully-licensed fonts which are hosted on TypeKit. All of the licensing issues as well as the compatability woes are taken care of, and in turn you get an incredibly easy-to-use and extremely large font library at your fingertips. It&#8217;s definitely work a second look.</p>
<h2>Google Font API &#038; Font Directory (beta)</h2>
<p><a href="http://code.google.com/apis/webfonts/"><img src="http://bkwld.com/blog/wp-content/uploads/Screen-shot-2010-06-23-at-2.41.08-PM-590x70.png" alt="" title="Screen shot 2010-06-23 at 2.41.08 PM" width="590" height="70" class="alignnone size-medium wp-image-1299" /></a></p>
<p>In the same veins as TypeKit, Google recently introduced their <a href="http://code.google.com/apis/webfonts/">font API and font directory</a>. Google hosts fonts that are licensed and ready to go, you just have to target these fonts on your site, and Google will do the rest. Their library is currently very conservative, but hopefully this will grow in the near future.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2010/06/web-typography-roundup/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>&#8220;These are a few of our favorite&#8230; Apps&#8221;.</title>
		<link>http://bkwld.com/blog/2010/06/our-favorite-apps/</link>
		<comments>http://bkwld.com/blog/2010/06/our-favorite-apps/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 18:11:04 +0000</pubDate>
		<dc:creator>Jeff Toll</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[feature]]></category>
		<category><![CDATA[featured]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=1172</guid>
		<description><![CDATA[

Here at BKWLD we like to keep things such as our everyday work flow and culture as transparent as possible. I thought it would be a fun idea for everyone whom wanted to take part to list their top 5 or so most used apps. 
Some of the apps listed are pretty standard and some [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://bkwld.com/blog/2010/06/our-favorite-apps/bkwld_apps/" rel="attachment wp-att-1277"><img src="http://bkwld.com/blog/wp-content/uploads/bkwld_apps.jpg" alt="" title="bkwld_apps" width="580" height="348" class="alignnone size-full wp-image-1277" /></a><br />
<br />
Here at BKWLD we like to keep things such as our everyday work flow and culture as transparent as possible. I thought it would be a fun idea for everyone whom wanted to take part to list their top 5 or so most used apps. </p>
<p>Some of the apps listed are pretty standard and some not so much. We are always interested in exploring new apps so, please recommend away!<br />
</p>
<hr style="background-color:#CCC;height:1px;border:none;"/>
</p>
<div class="clearfix">
	<img class="size-full wp-image-1194 alignleft" title="jeff" src="http://bkwld.com/blog/wp-content/uploads/jeff.png" alt="" width="70" height="92" /><br />
	<a href="http://bkwld.com/blog/author/jeff/">Jeff Toll &#8211; Creative Director</a>
</div>
<p><span style="color: #808080;"><a href="http://www.adobe.com/products/photoshop/family/"><strong>Photoshop</strong></a> - “Open and running every day, all day.”<br />
<strong>TextEdit</strong> &#8211; “I get grief for using this but it&#8217;s lightweight and simple, simple, simple. I&#8217;ll start using a more robust text editor sometime soon. I use it for writing quick storyboards and concept explanation etc. ʻPagesʼ is upon the horizon…”<br />
<a href="http://iconfactory.com/software/xscope"><strong>xScope</strong></a>- “Covers my ass for screen resolution guides at the very least.”<br />
<strong>iChat</strong>- “Communicating with our Seattle office and random jackasses.”<br />
<strong>iCal</strong> -“I&#8217;ve been getting better and better with my organization.</p>
<hr style="background-color:#CCC;height:1px;border:none;"/>
<div class="clearfix">
<img class="size-full wp-image-1210 alignleft" title="robert" src="http://bkwld.com/blog/wp-content/uploads/robert.png" alt="" width="70" height="92" /><br />
<a href="http://bkwld.com/blog/author/robert/">Robert Reinhard- CTO &amp; Partner</a>
</div>
<p><a href="http://www.apple.com/iwork/pages/"><span style="text-decoration: none;"><strong>Pages</strong></span></a> - “I haven&#8217;t touched MS Word in over 2 years and haven&#8217;t looked back. I love how it handles styles, it&#8217;s like easy CSS in a word processor.”<br />
<a href="http://www.omnigroup.com/products/omnioutliner/"><span style="text-decoration: none;"><strong>OmniOutliner</strong></span></a><strong> </strong>- “For taking notes on conference calls.”<br />
<a href="http://www.mamp.info/en/index.html"><span style="text-decoration: none;"><strong>MAMP Pro</strong></span></a> - <span style="font-weight: normal;">“Powers My LAMP dev environment. Makes it easy to setup additional testing vhosts (test dev rather than local host).”<br />
</span><a href="http://macromates.com/"><span style="text-decoration: none;"><strong>TextMate</strong></span></a> &#8211; <span style="font-weight: normal;">“When is 2.0 gonna come out?! I&#8217;ve been flirting with switching to Coda, but I miss some of the hotkeys.”</span><br />
<a href="http://www.realmacsoftware.com/socialite/"><span style="text-decoration: none;"><strong>Socialite</strong></span></a> -<span style="font-weight: normal;">“Aggregates feeds from Facebook, Twitter, Google Reader, and Digg all in one place, plus allows me to post comments/tweets.”<br />
</span></p>
<hr style="background-color:#CCC;height:1px;border:none;"/>
<div class="clearfix">
<img class="size-full wp-image-1212 alignleft" title="scott" src="http://bkwld.com/blog/wp-content/uploads/scott.png" alt="" width="70" height="92" /><br />
<a href="http://bkwld.com/blog/author/scott.thiessen/">Scott Thiessen &#8211; Flash Developer</a>
</div>
<p><a href="http://apple.com/safari"><strong>Safari</strong></a> -<span style="font-weight: normal;">“The Activity Window and Web Inspector alone are enough to make me feel like the king of the Internet.”</span><br />
<a href="http://macromates.com/"><strong>TextMate</strong></a> - <span style="font-weight: normal;">“Lots of power for so little toolbar.”</span><br />
<a href="http://www.sequelpro.com/"><strong>Sequel Pro</strong></a> &#8211; <span style="font-weight: normal;">“This is phpMyAdmin&#8217;s gorgeous, sophisticated sister. Unbelievable that this app is free!”</span><br />
<strong><a href="http://zachwaugh.com/spotcolor/">Spot Color </a>+ <a href="http://www.panic.com/~wade/picker/">Developer Color Picker</a></strong> - <span style="font-weight: normal;">“Slick way to grab colors from the screen, tweak them in your favorite gamut, and spit out hexadecimals.”</span><br />
<strong>Quick Look</strong> - <span style="font-weight: normal;">“Not really a stand-alone app, but I&#8217;ve definitely forgotten what it&#8217;s like to use a computer without it.”</span></p>
<hr style="background-color:#CCC;height:1px;border:none;"/>
<div class="clearfix">
<img class="size-full wp-image-1231 alignleft" title="matt" src="http://bkwld.com/blog/wp-content/uploads/matt.png" alt="" width="70" height="92" /> <a href="http://bkwld.com/blog/author/matt.aebersold/"></a><br />
<a href="http://bkwld.com/blog/author/matt.aebersold/">Matt Aebersold &#8211; Flash Developer</a>
</div>
<p><strong><a href="http://www.adobe.com/products/flash/?promoid=BPDEE">Flash + AS3</a></strong> - <span style="font-weight: normal;">“Although thereʼs a steep learning curve, learning object-oriented AS3 has opened up so many doors, and is such an intricate and expansive programming language. Itʼs allowed me to create some kick-ass web designs.”<br />
<a href="http://panic.com/coda"><strong>Coda</strong></a> &#8211; <span style="font-weight: normal;">“Once a site project is completely set up, the complete integration is incredible, and so intuitive. Once I made the switch I&#8217;ve never looked back.”<br />
<a href="http://www.mamp.info/en/index.html"><strong>MAMP</strong></a> - <span style="font-weight: normal;">“Helped me do PHP dev on my local machine. Extremely helpful in every way.”<br />
<a href="http://culturedcode.com/things/"><strong>Things</strong></a> <span style="font-weight: normal;">-</span><span style="font-weight: normal;"> “Awesome to-do app. Easy to set up and manage. So simple, and It&#8217;s what&#8217;s not included that makes it great. plus syncing over dropbox has make this invaluable. That said&#8230;”<br />
<a href="http://dropbox.com"><strong>DropBox</strong></a> &#8211; <span style="font-weight: normal;">“Awesome cloud storage. If I point my apps there, than they sync on all my computers (iTunes, Things, etc&#8230;). Plus online file recovery is very easy.”</span></span></span></span></span></p>
<hr style="background-color:#CCC;height:1px;border:none;"/>
<div class="clearfix">
<img class="size-full wp-image-1213 alignleft" title="sean" src="http://bkwld.com/blog/wp-content/uploads/sean.png" alt="" width="70" height="92" /><br />
<a href="http://bkwld.com/blog/author/sean/">Sean Monahan &#8211; Flex Developer</a>
</div>
<p><strong><a href="http://www.eclipse.org/">Eclipse</a> w/<a href="https://www.adobe.com/cfusion/tdrc/index.cfm?product=flash_builder">Flash Builder 4 Plugin</a></strong> - <span style="font-weight: normal;">“Paraphrasing a Josh Reddin-ism, ʻItʼs a text editor for fully grown men.ʼ Upgraded from Flex Builder 3 stand alone and my opinion of Eclipse has greatly increased. Eclipse also has plugins for PHP dev, Unfuddle (our ticket tracking software) and Ant (for oneclick builds)- all this allows for a one-step development environment for Elastic.</span><br />
<strong>Calculator</strong> -  <span style="font-weight: normal;">“Boring, I know, but good for doing quick math. I use this a lot when programming Uls. Bonus: it has a “programmer” view for doing fancy binary math.”</span><br />
<strong>Last.fm</strong> &#8211;  <span style="font-weight: normal;">“I like its music picks better than Pandora and the artist bios and photo streams are freaking sweet.”</span><br />
<a href="http://www.adobe.com/products/photoshop/family/"><strong>Photoshop</strong></a> &#8211; <span style="font-weight: normal;">“What doesnʼt it do?”</span><br />
<a href="http://adium.im/"><strong>Adium</strong></a> - “A slick IM client that supports just about every IM service in existence.”</p>
<hr style="background-color:#CCC;height:1px;border:none;"/>
<div class="clearfix">
<img class="size-full wp-image-1173 alignleft" title="aaron" src="http://bkwld.com/blog/wp-content/uploads/aaron.png" alt="" width="70" height="92" /><br />
<a href="http://bkwld.com/blog/author/aaron/">Aaron Egaas &#8211; Web Applications Lead</a>
</div>
<p><a href="http://www.chromium.org/Home"><strong>Chromium</strong></a> - <span style="font-weight: normal;">“Browser of choice, nightly version of web inspector is as good as firebug without the performance hit.”</span><br />
<a href="http://macromates.com/"><strong>TextMate</strong></a> - “Code keeps me paid, and TextMate keeps me sane.”<br />
iChat - “Remote communication, PM requests.”<br />
<a href="http://mailplaneapp.com/"><strong>MailPlane</strong></a> - “Multiple Gmail accounts? Like to keep ‘em separate? Notifications? Native web app feel with label and everything? Gets me into GCal, too.”<br />
<strong>Terminal</strong> - “I gotta ssh into servers to push code, so I use some sweet aliases to keep it all organized.”</p>
<hr style="background-color:#CCC;height:1px;border:none;"/>
<div class="clearfix">
<img class="size-full wp-image-1184 alignleft" title="dave" src="http://bkwld.com/blog/wp-content/uploads/dave.png" alt="" width="70" height="92" /><br />
<a href="http://bkwld.com/blog/author/dave/">Dave Brown &#8211; Senior Interactive Producer</a>
</div>
<p><a href="http://adium.im/"><strong>Adium</strong></a><br />
<a href="http://www.omnigroup.com/products/omnioutliner/"><strong>OmniOutliner</strong></a> - “Great for taking notes.”<br />
<a href="http://www.fontlab.com/font-editor/fontlab-studio/"><strong>FontLab Studio</strong></a> - “Converting fonts.”<br />
<a href="http://www.justinmind.com/"><strong>Justinmind Prototyper</strong></a> - “Havenʼt really used this yet, but Iʼve heard great things.”<br />
<a href="http://www.adobe.com/products/mediaplayer/"><strong>Adobe Media Player</strong></a> - “Checking/watching native flv.”</span></p>
<hr style="background-color:#CCC;height:1px;border:none;"/>
<div class="clearfix">
<img class="size-full wp-image-1190 alignleft" title="george" src="http://bkwld.com/blog/wp-content/uploads/george.png" alt="" width="70" height="92" /><br />
<a href="http://bkwld.com/blog/author/george.pendl/">George Plendl &#8211; Front End Developer</a>
</div>
<p><a href="http://conceitedsoftware.com/products/linkinus"><strong>Linkinus</strong></a> - “Best IRC client for a mac. irc.freenode.net, #jquery is a great place to learn and ask questions.”<br />
<a href="http://www.alfredapp.com/"><strong>Alfred</strong></a> - “Quicklaunch application for which aims to save you time in searching your local computer and the web. Replaced ancient Quicksilver app!”<br />
<a href="http://code.google.com/p/snippely/"><strong>Snippley</strong></a> - “Basic text and organization app.”<br />
<a href="http://www.scootersoftware.com/"><strong>Beyond Compare</strong></a> - “Easily compare files, folders, images, anything. Itʼs great!”<br />
<a href="http://macromates.com/"><strong>TextMate</strong></a> - “The best text editor for Mac and a powerful abbreviation engine for HTML and CSS. Saves hours!”</p>
<hr style="background-color:#CCC;height:1px;border:none;"/>
<div class="clearfix">
<img class="size-full wp-image-1215 alignleft" title="shelby" src="http://bkwld.com/blog/wp-content/uploads/shelby.png" alt="" width="70" height="92" /><br />
<a href="http://bkwld.com/blog/author/shelby/">Shelby White &#8211; Design Intern</a>
</div>
<p><a href="https://www.dropbox.com/"><strong>DropBox</strong></a> - “Best app for managing projects between projects. I also use it for freelance in getting assets.”<br />
<strong><a href="http://adium.im/">Adium</a>/iChat</strong> - “Adium manages contacts better but iChat actually sends files.”<br />
<a href="http://panic.com/coda"><strong>Coda</strong></a> - “My favorite app with FTP for html/css.”<br />
<a href="http://wordpress.org"><strong>Wordpress</strong></a> - “ Where I&#8217;ve spent most of my last year and a half.”<br />
<a href="http://www.tweetdeck.com/desktop/"><strong>TweetDeck</strong></a> - “Nice for managing my tweets&#8230;”</p>
<hr style="background-color:#CCC;height:1px;border:none;"/>
<div class="clearfix">
<img class="size-full wp-image-1195 alignleft" title="joe" src="http://bkwld.com/blog/wp-content/uploads/joe.png" alt="" width="70" height="92" /><br />
<a href="http://bkwld.com/blog/author/joe/">Joe Leoni &#8211; Producer</a>
</div>
<p><a href="http://www.tweetdeck.com/desktop/"><strong>TweetDeck</strong></a> - “Best way to stay informed of Chad Ochocincoʼs daily workouts or Snoop Doggʼs ʻbreakfast activitiesʼ.”<br />
<strong>iChat</strong> - “Instant messaging: extreme convenience and extreme inconvenience all wrapped up into one.”<br />
<a href="http://www.apple.com/ilife/garageband/"><strong>Garageband</strong></a> - “Now anyone can be a MC, and youʼll probably be better than 99% of radio hip-hop.”<br />
<a href="http://www.apple.com/iwork/pages/"><strong>Pages</strong></a> - “Iʼd rather be using Word, but close enough.”<br />
<a href="http://www.apple.com/downloads/macosx/games/cards_puzzle/classicsolitaire.html"><strong>Solitaire</strong></a> - “The best way to play with yourself.”</p>
<hr style="background-color:#CCC;height:1px;border:none;"/>
<div class="clearfix">
<img class="alignleft size-full wp-image-1228" title="veronica" src="http://bkwld.com/blog/wp-content/uploads/veronica.png" alt="" width="70" height="92" /><br />
<a href="http://bkwld.com/blog/author/veronica/">Veronica Skarshaug &#8211; Administrative Assistant</a>
</div>
<p><strong>Stickies</strong> - “Nice way to save on physical sticky pads, and info that I need on a daily basis is easily accessible.”<br />
<a href="http://gettaskmate.com/download"><strong>TaskMate</strong></a> - “Great for keeping my to-do’s in order.”<br />
<a href="http://apple.com/iwork/numbers"><strong>Numbers</strong></a> - “I like to make spreadsheets, I’m a total nerd.”<br />
<strong>Preview</strong> - “Makes things easy, easy, lemon squeezy.”<br />
<strong>iChat</strong> - “Because, duh.”</p>
<hr style="background-color:#CCC;height:1px;border:none;"/>
<div class="clearfix">
Chad Taffolla &#8211; Art Director
</div>
<p><a href="http://www.potionfactory.com/thehitlist/"><strong>The Hit List</strong></a> &#8211; “Awesome and free GTD app to keep my days/life organized.”<br />
<a href="http://panic.com/transmit"><strong>Transmit</strong></a> &#8211; “Gorgeous UI and experience to easily upload my files.”<br />
<a href="http://adium.im/"><strong>Adium</strong></a> &#8211; “My favorite chat client especially when used with the iPhone message style.”<br />
<a href="http://www.rahji.com/wordpress/2005/10/25/cicero-dashboard-widget/"><strong>Cicero</strong></a> &#8211; “Dashboard widget that fulfills my Lorem Ipsum needs. Used and abused daily.”<br />
<a href="http://www.adobe.com/products/photoshop/family/"><strong>Photoshop</strong></a> &#8211; “There is a light on under this icon all day. Content aware fill has come in handy on more than 1 occasion.”</p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2010/06/our-favorite-apps/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Get SSL working on MAMP Pro</title>
		<link>http://bkwld.com/blog/2010/05/get-ssl-working-on-mamp-pro/</link>
		<comments>http://bkwld.com/blog/2010/05/get-ssl-working-on-mamp-pro/#comments</comments>
		<pubDate>Tue, 25 May 2010 22:58:09 +0000</pubDate>
		<dc:creator>Robert Reinhard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[mamp]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=1171</guid>
		<description><![CDATA[Here&#8217;s what I did to get MAMP Pro working so I could test the HTTPS pages of the site I&#8217;m working on.
1) Follow these instructions from Rocket Theme to the letter.  I didn&#8217;t need to deal with any of the &#8220;Possible Issues&#8221; section.
2) Go into &#8220;/Applications/MAMP/conf/apache/ssl.conf&#8221; and add a new vhost within the &#60;IfDefine&#62; blocks [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s what I did to get MAMP Pro working so I could test the HTTPS pages of the site I&#8217;m working on.</p>
<p>1) Follow <a href="http://www.rockettheme.com/blog/coding/310-getting-ssl-to-work-with-mamp-pro">these instructions</a> from Rocket Theme to the letter.  I didn&#8217;t need to deal with any of the &#8220;Possible Issues&#8221; section.<br />
2) Go into &#8220;/Applications/MAMP/conf/apache/ssl.conf&#8221; and add a new vhost within the &lt;IfDefine&gt; blocks at the end of the page.  This vhost will mirror the settings of the vhost you would have already setup in MAMP:</p>
<p><code>&lt;VirtualHost test.dev:443&gt;<br />
DocumentRoot "/Path/to/document/root"<br />
ServerName test.dev<br />
SSLEngine on<br />
SSLCertificateFile /Applications/MAMP/conf/apache/ssl_crt/server.crt<br />
SSLCertificateKeyFile /Applications/MAMP/conf/apache/ssl_key/server.key<br />
&lt;Directory "/Path/to/document/root"&gt;<br />
Options All<br />
AllowOverride All<br />
Order allow,deny<br />
Allow from all<br />
&lt;/Directory&gt;<br />
&lt;/VirtualHost&gt;</code></p>
<p>3) That&#8217;s really it.  Restart MAMP and you&#8217;re good to go.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2010/05/get-ssl-working-on-mamp-pro/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flash SEO</title>
		<link>http://bkwld.com/blog/2010/05/flash-seo/</link>
		<comments>http://bkwld.com/blog/2010/05/flash-seo/#comments</comments>
		<pubDate>Tue, 11 May 2010 18:49:37 +0000</pubDate>
		<dc:creator>matt.aebersold</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=1150</guid>
		<description><![CDATA[Flash has a strong reputation for creating visually stunning websites, and rightfully so. Just head over to The FWA to see some of the best flash-based websites ever designed. As good as flash is at delivering rich media to the web, there are some serious downsides to consider.
One of the largest drawbacks to flash content [...]]]></description>
			<content:encoded><![CDATA[<p>Flash has a strong reputation for creating visually stunning websites, and rightfully so. Just head over to <a href="http://www.thefwa.com">The FWA</a> to see some of the best flash-based websites ever designed. As good as flash is at delivering rich media to the web, there are some serious downsides to consider.</p>
<p>One of the largest drawbacks to flash content is it&#8217;s relative invisibility to search engines and accessibility programs. The criticism is true when talking about Flash as a closed platform. The code written is compiled into a SWF, and then embedded online. This makes searching an indexing flash content extremely difficult for most search engines. Accessing Flash content is also a problem for screen readers and other accessibility programs. </p>
<p>These issues, combined with the popularity of the Apple devices, create a lot of hesitancy for companies to fully embrace  Flash content in their projects and sirs. I&#8217;m going to talk about a few key principals that will help Flash gain visibility and accessibility across multiple platforms, and at the same time make Flash content easier to update and maintain.</p>
<h2>Does it need to be Flash?</h2>
<p>The first step, of course, is to figure out what content needs to be in Flash, and what does not. There&#8217;s no point to constructing a site using flash if the same design can be achieved using more open, standards-compliant code. Once the decisions have been made as to what content will be built in Flash, than it&#8217;s time to start thinking along the same lines as proponents of web standards.</p>
<h2>Use the Principals of Web Standards</h2>
<p>The primary rule in web development today is the separation of content from presentation. The same principal can be applied to Flash projects. Separating the content from the design means updating and maintaining the Flash site will be much easier if the code doesn&#8217;t need to be recompiled and edited every time a change needs to be made. Making things like the navigation, links, and photos flexible and external are all great steps to create clean, smart, and flexible projects.</p>
<h2>Smart Degradation</h2>
<p>If the Flash content and design are properly separated, than re-purposing the content is extremely easy. If the content is in XML format, it can be applied to an XML site-map which will help search engines index the site&#8217;s content much easier. In addition, there are browser and platform detection scripts which could allow you to display the XML content in regular HTML format if the browser or device isn&#8217;t compatible with Flash. (iPad anyone?) You can also detect older browsers and Flash players. Content can then be delivered in the most efficient way possible to all users.</p>
<p>For example, head over to the <a href="http://www.bkwld.com">BKWLD</a> site on an iPad or iPhone, and you will see that the features on the homepage are still visible and interactive. This helps serve the most people possible the site&#8217;s content, no matter what environment they are using to visit the site.</p>
<h2>Hybrids</h2>
<p>There is also the option of creating hybrid sites, which are very popular because they combine flash elements with standard HTML markup. This allows the user to have a rich experience, as well as giving search engines easy access to the site&#8217;s content. Making use of flashvars and XML/JSON add to the flexibility of the site by allowing Flash to communicate directly with the rest of the site.</p>
<h2>SWFObject &#038; Deep Linking</h2>
<p><a href="http://www.asual.com/swfaddress/"><img src="http://bkwld.com/blog/wp-content/uploads/swfa.jpg" alt="" title="swfa" width="471" height="55" class="alignnone size-full wp-image-1151" /></a></p>
<p>Making use of programs like <a href="http://www.asual.com/swfaddress/">SWFAddress</a> and <a href="http://code.google.com/p/swfobject/">SWFObject</a> allow the Flash content to be more transparent and visible to search engines. SWFAddress will create a specific URL for each page in a full-browser Flash experience. Knowing what section the user is on, and showing that section in the browser&#8217;s address bar allow search engines to look at specific pages, and create extremely accurate analytical reports.</p>
<p><img src="http://bkwld.com/blog/wp-content/uploads/swfo.jpg" alt="" title="swfo" width="418" height="76" class="alignnone size-full wp-image-1152" /></p>
<p>SWFObject is a way to create valid code though the W3C Validation tools. Also, SWFObject has the ability to replace Flash content with a static image, which maintains the visual design if the user doesn&#8217;t have flash enabled.</p>
<h2>Conclusion</h2>
<p>It&#8217;s ultimately about choosing the right tool for the right project. Flash has many advantages, which need to be carefully weighed against the areas in which Flash falls short. The ideas described here can certainly help Flash communicate better with browsers, search engines, analytical tools, and accessibility programs. </p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2010/05/flash-seo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>It&#8217;s the Idea, Not the Technology</title>
		<link>http://bkwld.com/blog/2010/04/its-the-idea-not-the-technology/</link>
		<comments>http://bkwld.com/blog/2010/04/its-the-idea-not-the-technology/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 18:14:53 +0000</pubDate>
		<dc:creator>matt.aebersold</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Planning]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=1020</guid>
		<description><![CDATA[There are so many arguments happening now about this technology and that development language. The battle for supremacy has led to some fairly bad blood between some amazing companies. Listening to the recent debates between Adobe and Apple about flash on the iPad and iPhone has got me thinking. It seems like no matter what, [...]]]></description>
			<content:encoded><![CDATA[<p>There are so many arguments happening now about this technology and that development language. The battle for supremacy has led to some fairly bad blood between some amazing companies. Listening to the recent debates between Adobe and Apple about flash on the iPad and iPhone has got me thinking. It seems like no matter what, there will be a problem and a battle until we as designers and developers get our heads in the right place.</p>
<p>This is because the debate is centered around technologies and programming languages. This strife is very prevalent in all areas of the web design industry. Should you use Flash or Javascript for that slideshow? Should we connect to this MySQL database, or this SQL server over here? .NET or PHP? There are some very opinionated groups, which is too bad because all of these technologies are amazing in their own right.</p>
<p>At the core of every project is an idea, and that is by far the most important thing to consider. Once the creative idea has been set, realizing that idea can happen any number of unique and innovative ways.</p>
<p>When figuring out how to produce the project, it&#8217;s all about what technology is best suited for the design. How much interactivity will it have? Of course you&#8217;re not going to utilize Flash for a site that is just plain, static text, and you&#8217;re not going to link up to a database when your site consists of two pages.</p>
<p>After these things have been sorted out, then pick the technology that you are most comfortable and efficient with. For example, I work really well in Flash and Actionscript. I am very comfortable with the language, and it comes naturally to me. That doesn&#8217;t mean that Flash should be used for everything, but in at the end of the day it&#8217;s all about the idea being produced, —not what technology was used to make it. If you need a slideshow, it can be written in Javascript, Flash, or hell even Lingo, as long as you end up with a killer slideshow.</p>
<p>It&#8217;s also not about the newest technology; it&#8217;s it&#8217;s about the best technology. My old college instructor is a professional type designer for a 1st-class graphic design agency. She stands by Freehand as the best tool out there for type and letterform design. It&#8217;s not a new program by any measure, but it works for her, and she produces some incredible work.</p>
<p>So we need to relax about the technology debates, and focus on making kick- ass designs, and have fun doing it.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2010/04/its-the-idea-not-the-technology/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Surprises with implementing Open Graph and the Like button</title>
		<link>http://bkwld.com/blog/2010/04/implementing-like-button/</link>
		<comments>http://bkwld.com/blog/2010/04/implementing-like-button/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 22:04:17 +0000</pubDate>
		<dc:creator>Robert Reinhard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[feature]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=995</guid>
		<description><![CDATA[I tried out some of the newly announced Facebook features today, specifically the Open Graph markup and the Like social plugin.  They were both technically simple to deploy, as promised.  You have less control over the appearance of the Like button than I&#8217;d like.  For instance, they don&#8217;t have an option to ONLY display the [...]]]></description>
			<content:encoded><![CDATA[<p>I tried out some of the <a href="http://apps.facebook.com/feightlive/">newly announced</a> Facebook features today, specifically the <a href="http://developers.facebook.com/docs/opengraph">Open Graph</a> markup and the <a href="http://developers.facebook.com/docs/reference/plugins/like">Like </a>social plugin.  They were both technically simple to deploy, as promised.  You have less control over the appearance of the Like button than I&#8217;d like.  For instance, they don&#8217;t have an option to ONLY display the like button without a list of total likes.  You can work around this by reducing the width of the iframe, but it was an unexpected restriction.  For us, the goal was to provide a handy way to Like us on Facebook; we don&#8217;t care to give screen real estate to showing your friends who have also Liked us (for the majority of visitors, I expect there would be none).</p>
<p>I initially went about including the Like button the wrong way.  In the demos they showed at the F8, it appeared that they would expect each deep linked article page in a blog to have a unique Like button, like how <a href="http://www.cnn.com/2010/POLITICS/04/23/obama.immigration/index.html">CNN is implemented</a>.  So I did this:</p>
<p style="text-align: center;"><a rel="attachment wp-att-1006" href="http://bkwld.com/blog/2010/04/implementing-like-button/attachment/2/"><img class="size-full wp-image-1006    aligncenter" title="2" src="http://bkwld.com/blog/wp-content/uploads/2.jpg" alt="" width="433" height="40" /></a></p>
<p>However, when you click Like, it adds a link in your profile section on Facebook for that specific deep link.  For example, check out the article link added here from CNN:</p>
<p style="text-align: center;"><a rel="attachment wp-att-999" href="http://bkwld.com/blog/2010/04/implementing-like-button/screen-shot-2010-04-23-at-2-30-58-pm/"><img class="size-full wp-image-999  aligncenter" title="Screen shot 2010-04-23 at 2.30.58 PM" src="http://bkwld.com/blog/wp-content/uploads/Screen-shot-2010-04-23-at-2.30.58-PM.png" alt="" width="559" height="141" /></a></p>
<p>You could imagine that very quickly this area would be cluttered with all the articles a person had liked on news sites and blogs.  Then I noticed this suggestion from the <a href="http://developers.facebook.com/docs/opengraph">Open Graph Best Practices</a>:</p>
<blockquote><p>Make only real-life things into objects. Users don&#8217;t want news articles and other transient content as objects on their profile.</p></blockquote>
<p>This advice makes sense, though it&#8217;s inconsistent that Facebook would tout their partner (CNN) whose implementation contradicts this.  Thus, I moved the Like button into the footer, making it site wide, and added a Digg link in it&#8217;s place.</p>
<p>Ideally, users clicking the Like button would be added to the <a href="http://www.facebook.com/pages/BKWLD/115935728430378?ref=ts">BKWLD Facebook page</a> (we previously had a group, which we&#8217;re deprecating).  So far, I&#8217;m not seeing this happen; users who Like our Facebook page and users who Like us on the BKWLD site appear to be dropped into separate buckets.  The Social Graph markup doesn&#8217;t have a field to specifically relate the object (our site) with a Facebook Page.  I assume that Facebook uses some black magic to join the references to BKWLD in the Social Graph metas with the BKWLD references in our Facebook Page.  Possibly this isn&#8217;t working because our Facebook page is so new.  Or possibly something got confused during my initial implementation that was per blog article.  It also doesn&#8217;t appear that the &#8220;fb:admins&#8221; meta tag is having any effect.  I&#8217;m curious to see if <a href="http://www.facebook.com/pages/BKWLD/110499588973708?ref=ts">this generated page</a> will be automatically merged into the official BKWLD Facebook Page in the next few days.  Or if a person Likes a site on the Facebook site and that site has Open Graph markup on the home page, does Facebook read it and pull that info in?</p>
<p>In sum, I think the social plugin and Open Graph standard are pretty great in terms of functionality for users that can be added with minimal effort by developers.  I hope some clarification comes from Facebook about how (or if) merging works between different pages.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2010/04/implementing-like-button/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Restoring a Minimized AIR App From the Mac OS Dock</title>
		<link>http://bkwld.com/blog/2009/11/restoring-a-minimized-air-app-from-the-mac-os-dock/</link>
		<comments>http://bkwld.com/blog/2009/11/restoring-a-minimized-air-app-from-the-mac-os-dock/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 23:02:55 +0000</pubDate>
		<dc:creator>Sean Monahan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Dock]]></category>
		<category><![CDATA[Mac OS]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=859</guid>
		<description><![CDATA[Those familiar with the Mac OS dock will know that clicking the dock icon of a minimized application will restore that application to it&#8217;s pre-minimized state.  This is a nice little feature as the minimize/tray area of the dock can quickly become a disorganized mess if you keep a lot of apps open.  [...]]]></description>
			<content:encoded><![CDATA[<p>Those familiar with the Mac OS dock will know that clicking the dock icon of a minimized application will restore that application to it&#8217;s pre-minimized state.  This is a nice little feature as the minimize/tray area of the dock can quickly become a disorganized mess if you keep a lot of apps open.  Those familiar with developing AIR apps will also know that AIR apps don&#8217;t do this out of the box.  This kinda sucks.</p>
<p>Fortunately there is a fairly easy way to implement this feature for yourself.  All you need to do is setup two event listeners and two properties.</p>
<p>The two properties you need are &#8220;isMinimized&#8221; and &#8220;isMaximized&#8221;.  Both are booleans, the first indicating the application is &#8230; drumroll &#8230; minimized and the section maximized.  While you could get away with just one of these having both offers more flexibility in the future should you need it.  For example: it is possible for an app to be neither maximized nor minimized.</p>
<p>The two events you need to listen for are NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING and InvokeEvent.INVOKE.  The first event is dispatched when the application&#8217;s display state changes (i.e., when maximized or minimized).  The second is dispatched when the dock icon is clicked.</p>
<p>With those few things all you need to do now is a few start up things:</p>
<pre>
<code>

/**
 * Event handler for the application's creationComplete event
 */
private function init():void
{
         // Check to see if we have a dock available for clicking
         if (NativeApplication.supportsDockIcon)
         {
               // Wire up a listener for the dock icon's invoke event
               NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onDockIconClick);
         }

         // Effectively, listen for minimize and maximize event.
         this.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING, onChanging);
}

/**
 * Event handler for display state change events
 */
private function onChanging(event:NativeWindowDisplayStateEvent):void
{
      switch (event.afterDisplayState) // &lt;-- our new state
      {
	case &quot;minimized&quot;:
		isMaximized = false;
		isMinimized = true;
		break;

	case &quot;maximized&quot;:
		isMaximized = true;
		isMinimized = false;
		break;
	}
}

/**
  * Called when the dock icon is clicked.
  */
private function onDockIconClick(event:InvokeEvent):void
{
	if (isMinimized)
	{
		// If the app is minimized call this
		stage.nativeWindow.restore();
		isMaximized = true;
		isMinimized = false;
	}
}

</code>
</pre>
<p>In the above code it&#8217;s assumed that <tt>init</tt> will be called by the app&#8217;s creationComplete event.  <tt>init</tt> then checks to see if the platform on which the app is running supports dock icons (that is, is Mac OS).  If it is we add an event listener for the InvokeEvent which is dispatched when the app&#8217;s dock icon is clicked.  After that <tt>init</tt> wires up a second event listener, this time listening for the NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING event.  This event is dispatched when the app is minimized or maximized.</p>
<p><tt>onChanging</tt> is our event handler for the display state change event.  We use this method to keep track of whether our app is maximized or minimized.  <tt>onDockIconClick</tt> is our event handler for the app&#8217;s InvokeEvent that will be dispatched when the dock icon is clicked.  This method checks to see if the app is currently minimized, and if it is it calls the window&#8217;s <tt>restore</tt> method.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2009/11/restoring-a-minimized-air-app-from-the-mac-os-dock/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Creating Application Menus in Mac OSX with Adobe AIR</title>
		<link>http://bkwld.com/blog/2009/11/creating-application-menus-in-mac-osx-with-adobe-air/</link>
		<comments>http://bkwld.com/blog/2009/11/creating-application-menus-in-mac-osx-with-adobe-air/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 21:19:55 +0000</pubDate>
		<dc:creator>Sean Monahan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Application Menu]]></category>
		<category><![CDATA[mac osx]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=826</guid>
		<description><![CDATA[Adobe AIR is a great tool for quickly creating cross platform desktop applications.  For the most part you can code once and deploy on any OS that AIR supports and you app will look and feel like a native app.  There are a few caveats of course and one of them is working with menus. [...]]]></description>
			<content:encoded><![CDATA[<p>Adobe AIR is a great tool for quickly creating cross platform desktop applications.  For the most part you can code once and deploy on any OS that AIR supports and you app will look and feel like a native app.  There are a few caveats of course and one of them is working with menus.  In particular menus are handled somewhat differently in Mac OS than they are in Windows.  This post won&#8217;t get into the nitty gritty of actually creating and modifying menu items as that is <a href="http://livedocs.adobe.com/flex/3/html/help.html?content=Menus_3.html" title="Creating Native Menus">covered</a> quite nicely in Adobe&#8217;s documentation on the subject, but I will tell you how to create native menus on Mac OS that are indistinguishable from those of native Mac apps.</p>
<p></p>
<h3>First, the Differences</h3>
<p>In Windows menus belong to each window.  So File, Edit, View and such are items in each open window of an application.  In AIR this corresponds to the <tt><a href="http://livedocs.adobe.com/flex/3/langref/flash/display/NativeWindow.html#menu" title="Flex 3.4 Docs">menu</a></tt> property of a <tt>NativeWindow</tt>.</p>
<p><img src="http://bkwld.com/blog/wp-content/uploads/windows_menus.png" alt="Windows menu example" width="405" height="175" class="aligncenter size-full wp-image-827" /></p>
<p>In Mac OS the corresponding menu is called an application menu and there is only one for all windows of the application.  In AIR this corresponds to the <tt>NativeApplication</tt>&#8217;s <tt><a href="http://livedocs.adobe.com/flex/3/langref/flash/desktop/NativeApplication.html#menu" title="Flex 3.4 Docs">menu</a></tt> property.</p>
<p><img src="http://bkwld.com/blog/wp-content/uploads/macos_menus.png" alt="Mac OS Application Menu" width="322" height="126" class="aligncenter size-full wp-image-833" /></p>
<p>So what you say? AIR has features that let you handle Windows vs. Mac menu differences quite easily.  This is true, a <a href="http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS5b3ccc516d4fbf351e63e3d118666ade46-7de8.html" title="Creating Native Menus">quick check of the docs</a> will reveal how quickly this can be accomplished.  However, you&#8217;ll notice in the above screen grab that application menus on Mac OS list the application name in bold.  There is nothing in the AIR docs about how to accomplish this.</p>
<p></p>
<h3>What To Do?</h3>
<p>You can just ignore this and create a menu like the (quite nice) SQLite administration tool <a href="http://www.dehats.com/drupal/?q=node/58" title="Lita">Lita</a>.  Note Lita has &#8220;Lita&#8221; in the menu but it&#8217;s not bolded.</p>
<p><img src="http://bkwld.com/blog/wp-content/uploads/lita_menu.png" alt="Lita&#39;s Mac OS Menu" width="314" height="122" class="aligncenter size-full wp-image-836" /></p>
<p>Or you can not even bother with the application name like the (also extremely useful) <a href="http://demonsterdebugger.com/" title="MonsterDebugger">MonsterDebugger</a>.</p>
<p><img src="http://bkwld.com/blog/wp-content/uploads/monsterdebugger_menu.png" alt="MonsterDebugger&#39;s Mac OS Menu" width="334" height="107" class="aligncenter size-full wp-image-837" /></p>
<p>Both of these approaches are completely valid.  After all both Lita and MonsterDebugger are incredibly useful applications that make my life as a developer much easier and lacking a proper Mac OS application menu doesn&#8217;t detract from their utility in any way.  However it&#8217;s also quite simple to create application menus that look identical to a true native application.</p>
<p></p>
<h3>Creating Seamless Application Menus For Mac OS</h3>
<p>It&#8217;s so simple to create seamless application menus on Mac OS that you don&#8217;t even have to do anything!  That&#8217;s right, just create an application and AIR makes one for you:</p>
<p><img src="http://bkwld.com/blog/wp-content/uploads/default_air_macos_menu.png" alt="Default AIR Application Menu on Mac OS" width="262" height="52" class="aligncenter size-full wp-image-840" /></p>
<p>Everything you see above you get for free (note: adl is the AIR debugger.  If I were to publish a release build and install the application you&#8217;d see the name set in the application descriptor xml file).  You might now be saying that this is all good and well but what if you want to customize the menu at all?  The good news is you can, it just take a tad more work.  </p>
<p>To start you&#8217;ll need to note that AIR gives us three menu items in addition to the &#8220;Application Name&#8221; item (the bold one).  For this example I&#8217;ll assume you&#8217;re only interested in keeping the app name item so we&#8217;ll just get rid of everything but that one.</p>
<p>First you&#8217;ll need to get a reference to the application&#8217;s menu:</p>
<p><code><br />
// Get a reference to the NativeApplication's menu, if this is Mac OS<br />
// Note: you'll need to handle menus differently if you are on Mac OS or Windows.<br />
// See the AIR docs related to creating native menus for details.<br />
if (NativeApplication.nativeApplication.supportsMenu)<br />
{<br />
    var appMenu:NativeMenu = NativeApplication.nativeApplication.menu;<br />
}<br />
</code></p>
<p>If you were to loop over this you&#8217;d see all of the menu items from the above screen grab.  You&#8217;ll also notice that each of the items is a NativeMenuItem (more on this later).  Since we only want the first one we can now remove all the others:</p>
<p><code><br />
// Get rid of our unwanted menu items<br />
// The app name item is the first one<br />
while (appMenu.items.length &gt; 1)<br />
{<br />
   menu.removeItemAt(menu.items.length - 1);<br />
}<br />
</code></p>
<p>At this point our menu consists of one item: the application name menu item.  This menu item is pre-populated with some standard elements like &#8220;About&#8221; and &#8220;Quit&#8221;.  If you&#8217;re happy with this as-is, you can now freely add your own menu items.  If you need to customize this application name menu item a bit simply take advantage of the fact that it&#8217;s a <a href="http://livedocs.adobe.com/flex/3/langref/flash/display/NativeMenuItem.html" title="Flex 3.4 Docs for NativeMenuItem">NativeMenuItem</a> and go nuts.</p>
<p>Using this method you&#8217;ll now see your application&#8217;s name (that is, the name you set in the application descriptor xml file) up in bold when you publish a release build and install.  Here at BKWLD we&#8217;ve recently used this technique and here are the results:</p>
<p><img src="http://bkwld.com/blog/wp-content/uploads/spyder_menu.png" alt="Spyder Elastic Sales Application Menu on Mac OS" width="366" height="134" class="aligncenter size-full wp-image-844" /></p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2009/11/creating-application-menus-in-mac-osx-with-adobe-air/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Two requests per subdomain</title>
		<link>http://bkwld.com/blog/2009/11/two-requests-per-subdomain/</link>
		<comments>http://bkwld.com/blog/2009/11/two-requests-per-subdomain/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 20:35:13 +0000</pubDate>
		<dc:creator>Robert Reinhard</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=823</guid>
		<description><![CDATA[I recently learned that  the http spec suggests browsers only open two simultaneous connections to a given subdomain at a time.  I haven&#8217;t tested to see how widely adopted this is.  Though I have noticed in Safari, looking at the activity viewer, that if the page requests many large assets (like a flash audio player [...]]]></description>
			<content:encoded><![CDATA[<p>I <a href="http://www.websiteoptimization.com/speed/tweak/parallel/">recently learned</a> that  the http spec suggests browsers only open two simultaneous connections to a given subdomain at a time.  I haven&#8217;t tested to see how widely adopted this is.  Though I <strong>have</strong> noticed in Safari, looking at the activity viewer, that if the page requests many large assets (like a flash audio player where the user has advanced through tracks quickly), file requests start to queue up.  In a <a href="http://www.campaignmonitor.com/blog/post/2889/huge-speed-improvements-to-campaign-monitor/?utm_medium=email&amp;utm_source=Email%20marketing%20software&amp;utm_content=425305307&amp;utm_campaign=OctoberNews-VersionA+_+urhlti">recent blog</a> by Campaign Monitor, they mention that they server images from multiple subdomains at a time so the web browser opens up more connections at time.  You don&#8217;t even need multiple servers.  You could wildcard the subdomains on your webserver and serve up a unique subdomain.  As pointed out on <a href="http://stackoverflow.com/questions/989513/routing-image-requests-to-separate-subdomains/989596#989596">Stack Overflow,</a> you don&#8217;t want to choose a completely random subdomain on every request or the browser can&#8217;t cache the image.  It&#8217;s a pretty extreme optimization technique , though something to keep in your toolbox.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2009/11/two-requests-per-subdomain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Polymorphic Associations</title>
		<link>http://bkwld.com/blog/2009/10/using-polymorphic-associations/</link>
		<comments>http://bkwld.com/blog/2009/10/using-polymorphic-associations/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 20:24:59 +0000</pubDate>
		<dc:creator>Garrett Bjerkhoel</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=798</guid>
		<description><![CDATA[One thing that has always impressed me with websites is how they present you with the most important information when you login. This could be a deadline, some updates from other users, or just general announcements.
Some of the sites I use at work and on a personal level are perfect examples, GitHub and Basecamp.


But how [...]]]></description>
			<content:encoded><![CDATA[<p>One thing that has always impressed me with websites is how they present you with the most important information when you login. This could be a deadline, some updates from other users, or just general announcements.</p>
<p>Some of the sites I use at work and on a personal level are perfect examples, GitHub and Basecamp.</p>
<p><img src="http://bkwld.com/blog/wp-content/uploads/github.png" border="0" alt="github.png" width="600" height="100" /><br />
<img src="http://bkwld.com/blog/wp-content/uploads/basecamp.png" border="0" alt="basecamp.png" width="600" height="100" /></p>
<p>But how is this technically feasible? Sure, you are probably thinking just gather all the data you need and loop through it. Right? No, I will explain why. I didn&#8217;t understand this for the longest time, and I hope to help solve any your questions about using them.</p>
<p><img style="margin: 0 15px 10px 0;" src="http://bkwld.com/blog/wp-content/uploads/Blog-Post.png" border="0" alt="Diagram" width="176" height="278" align="left" /><br />
With <span style="color: #000;">Garrett</span> and <span style="color: #000;">Larry</span> both having many comments, messages and connections, we already have the data we need.</p>
<p>Problem is we need to sort them accordingly (by date) and keep all associations tied. It is harder than it sounds.</p>
<p>In this case we have 3 datasets, some comments, some messages and some connections. If we were to put all 3 collections in a list in order of when we gather them, they will be out of order. What we need to do is make one collection that references any type of data we need to list out. What makes this useful is we can also track other information that is helpful to users and not possible if we loop through the actual data. That is what a <a href="http://en.wikipedia.org/wiki/Polymorphic_association">Polymorphic Association</a> is.</p>
<p>Within the Feed model we need to keep track of the model it will reference, the actual reference to the specific item within that model, and any other information you would like to have. I like to keep track of it&#8217;s action, as well as the user who performed that action.</p>
<p><img src="http://bkwld.com/blog/wp-content/uploads/reference1.png" border="0" alt="reference.png" width="600" height="265" /></p>
<p>How would this look like in the database?</p>
<p><script src="http://gist.github.com/222699.js"></script></p>
<p>For this example I will use Ruby to try to show you how easy it is to display a dashboard like interface for your users.</p>
<p><script src="http://gist.github.com/222701.js"></script></p>
<p>Within the view you can loop and render a custom template for each item, this will give you the desired look that simulates the dashboard feel.</p>
<p><script src="http://gist.github.com/222698.js"></script></p>
<p>I am going to leave this here, you can create the views however you want. I have this repo stored on <a href="http://github.com/dewski/polly">GitHub</a> so you can clone it and mess with it however you like. I have uploaded a demo on <a href="http://polly.heroku.com/">Heroku</a> for you to see as well. </p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2009/10/using-polymorphic-associations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VPN through PHP on (MT)</title>
		<link>http://bkwld.com/blog/2009/10/vpn-through-php-on-mt/</link>
		<comments>http://bkwld.com/blog/2009/10/vpn-through-php-on-mt/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 17:12:02 +0000</pubDate>
		<dc:creator>Robert Reinhard</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=754</guid>
		<description><![CDATA[It&#8217;s been a two day quest, but I&#8217;ve finally gotten our web server to talk to a remote SQL server over VPN.  I wish I could document the steps as a how to (I&#8217;d like it for myself if I have have to do this again), but I&#8217;ve tried so many things I&#8217;m not sure [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a two day quest, but I&#8217;ve finally gotten our web server to talk to a remote SQL server over VPN.  I wish I could document the steps as a how to (I&#8217;d like it for myself if I have have to do this again), but I&#8217;ve tried so many things I&#8217;m not sure which steps are true dependencies and which are extraneous.  First, the server in question is a LAMP server, running Plesk, hosted at Media Temple.  For the most part, it&#8217;s a vanilla configuration.  Here&#8217;s some of the things I learned in the process of getting this up:</p>
<ul>
<li>The VPN is of the Cisco type, but using their linux software was a dead end.  I couldn&#8217;t get it to compile, it needed kernel headers and patches and on and on.  Eventually, I was <a href="http://www.kbrandt.com/2007/07/how-to-connect-to-cisco-vpn-with-ubuntu.html">directed to using VPNC</a>.  There are scripts that convert pcf files to the format VPNC uses.  Also, you can store the VPN password within the config file, which is perfect for my situation.  If I feel like enduring further pain, it may be useful to <a href="http://www.macosxhints.com/article.php?story=20090625012729678">get this working locally</a> and stop using the Cisco Mac client altogether.</li>
<li>It turns out you need to be running as root to use VPNC.  Thus, for the users that would be running this, I had to add entries <a href="http://itg.chem.indiana.edu/inc/wiki/software/165.html">to the sudoers</a> file.  I made it passwordless because I knew I&#8217;d be calling it from PHP.</li>
</ul>
<ul>
<li>I had to allow /usr/local/sbin as an open_basedir in php so that I could call VPNC.</li>
<li>From exec(), I needed to use the full path to VPNC.</li>
</ul>
<ul>
<li>Lastly, and this was particularly painful because I knew I was sooo close at this point, I had to comment out &#8220;<a href="http://www.gratisoft.us/sudo/man/sudoers.html">Defaults requiretty</a>&#8221; within sudoers.  When this is on, it prevents you from running sudo outside of the command line.</li>
</ul>
<p>This was a very frustrating journey so hopefully this helps someone else.  Or me in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2009/10/vpn-through-php-on-mt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Digital: Where the Wild Things Are &#8211; A day of reflection at SODA&#8217;s Click 2009</title>
		<link>http://bkwld.com/blog/2009/10/digital-where-the-wild-things-are-a-day-of-reflection-at-sodas-click-2009/</link>
		<comments>http://bkwld.com/blog/2009/10/digital-where-the-wild-things-are-a-day-of-reflection-at-sodas-click-2009/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 23:38:29 +0000</pubDate>
		<dc:creator>Ryan Vanni</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=728</guid>
		<description><![CDATA[We have the luxury of working in an industry that is defining itself each day, and that works for me.]]></description>
			<content:encoded><![CDATA[<div id="attachment_737" class="wp-caption alignnone" style="width: 343px"><img class="size-medium wp-image-737" src="http://bkwld.com/blog/wp-content/uploads/photo11-333x445.jpg" alt="SODA's Click 2009 - 10/01/2009" width="333" height="445" /><p class="wp-caption-text">SODA&#39;s Click 2009 - 10/01/2009</p></div>
<p>This past thursday (10/1/09) our creative directors, Jeff Toll and Demetre Agres and I had the pleasure of attending the Click 2009 SODA event at the Art Directors Club in NYC.  There we got to hear from amazing boutiques like Unit9 (particularly loved them), Syrup, and Poke, as well as from some of the agency juggernauts like Goodby, CP+B, JWT, and Ogilvy, all introduced and hosted by the after-hearing-him-talk-I-truly-get-why-he&#8217;s-such-a-likable-force-in-the-industry Michael Lebowitz (which I am pretty sure I learned is &#8220;lEbowitz, not lEEBowitz) from the infamous Big Spaceship.</p>
<p>The topic and discussion points varied from more granular subjects like &#8220;Branding with numbers&#8221; (which I found surprisingly intriguing) to more general monsters like &#8220;What is the future of entertainment&#8221;.</p>
<p>First off I have to say what a pleasure it is to hear from such talent in one room, on one day, and in person.  I mean Jason Zada, Lebowitz, and Mike Geiger to name a few&#8230;truly a pleasure.</p>
<p>Of all the nuggets of wisdom I can take away from the discussions, what is interesting to me is that despite agency head-counts, annual billings, specific focus, country of origin, or AOR vs. project-based orientation, we are all facing similar issues; digital agencies finding their autonomy from the traditional ones, an ever-changing set of tools, an even more-changing option of techniques and services we have the option to render should we decide to, and a myriad of ways we can manage the whole damn thing.  But here in-lies the beauty, though facing the same obstacles and issues, the lot of us are choosing completely different approaches to the hurdles, and its working.</p>
<p>We have the luxury of working in an industry that is defining itself each day, and that works for me.  After all, what are we if we are not problem solvers?  At the end of the day we are simply choosing what tool we want to solve the problem with.  So I welcome and embrace the luxury of being able to re-define, re-shape, and re-focus. What fun it is after all.</p>
<p>So after a wonderful day with our peers, and a couple others enjoying an amazing city with good colleagues and friends, I am glad our industry is a kid.  It has many options, and oh so much potential.  Im not sure if its the couple cups of coffee, or the Where the Wild Things Are soundtrack I am listening to as I type this, but I love this kid and want what&#8217;s best for him too.  So let&#8217;s keep talking.</p>
<div id="attachment_734" class="wp-caption alignnone" style="width: 343px"><img class="size-medium wp-image-734" src="http://bkwld.com/blog/wp-content/uploads/photo3-333x445.jpg" alt="Art Directors Club NYC" width="333" height="445" /><p class="wp-caption-text">Art Directors Club NYC</p></div>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2009/10/digital-where-the-wild-things-are-a-day-of-reflection-at-sodas-click-2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Alphabetize a mysql table</title>
		<link>http://bkwld.com/blog/2009/09/alphabetize-a-mysql-table/</link>
		<comments>http://bkwld.com/blog/2009/09/alphabetize-a-mysql-table/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 01:51:26 +0000</pubDate>
		<dc:creator>Robert Reinhard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[feature]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=704</guid>
		<description><![CDATA[Say you have a table of names that you want to alphabetize.  Of course you could SELECT and ORDER BY name ASC.  Lets assume that&#8217;s not an option and you want to save their alphabetical order in a special column so then you can ORDER BY this column.  This might be useful if you have [...]]]></description>
			<content:encoded><![CDATA[<p>Say you have a table of names that you want to alphabetize.  Of course you could SELECT and ORDER BY name ASC.  Lets assume that&#8217;s not an option and you want to save their alphabetical order in a special column so then you can ORDER BY this column.  This might be useful if you have an application where users can manually order their items but you give them them option to reset to alphabetical.  Here&#8217;s what your table looks like:</p>
<p><code>people<br />
- id (int)<br />
- name (varchar)<br />
- sort (int)</code></p>
<p>Here&#8217;s how you can populate that sort column with integers that, when ordered by, put the results in alphabetical order:</p>
<p><code>SET @i=0;<br />
UPDATE people<br />
INNER JOIN (<br />
SELECT id, @i:=@i+1 AS i FROM people ORDER BY name ASC<br />
) counter ON counter.id = people.id<br />
SET people.sort = counter.i;</code></p>
<p>The SET command initializes a variable.  The subquery orders the list and adds a new column (i) that counts off each row effectively.  Then the outer query joins on this by the PRIMARY id so that we match the ordered row from the subquery with the outer query.  And lastly, we store the i value back in the table.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2009/09/alphabetize-a-mysql-table/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Batch change collation</title>
		<link>http://bkwld.com/blog/2009/09/batch-change-collation/</link>
		<comments>http://bkwld.com/blog/2009/09/batch-change-collation/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 17:24:26 +0000</pubDate>
		<dc:creator>Robert Reinhard</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://bkwld.com/blog/?p=694</guid>
		<description><![CDATA[I&#8217;ve never understood (well, I&#8217;ve never looked into) why MySQL defaults to that swedish collation.  If your tables are a mix of collations, here is a nice php script that will convert all the tables to the collation of your choosing.  It even has a nice GUI you use in the web browser.  Download the [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-699" title="Picture 1" src="http://bkwld.com/blog/wp-content/uploads/Picture-12-75x75.png" alt="Picture 1" width="75" height="75" />I&#8217;ve never understood (well, I&#8217;ve never looked into) why MySQL defaults to that swedish collation.  If your tables are a mix of collations, <a href="http://www.phoca.cz/phoca-changing-collation/">here is a nice php script</a> that will convert all the tables to the collation of your choosing.  It even has a nice GUI you use in the web browser.  Download the script <a href="http://www.phoca.cz/phoca-changing-collation/">here</a> (courtesy of phoca.cz).</p>
]]></content:encoded>
			<wfw:commentRss>http://bkwld.com/blog/2009/09/batch-change-collation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

