<?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>Abrahm Coffman</title>
	<atom:link href="http://abecoffman.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://abecoffman.com</link>
	<description>Personal &#38; Professional Meanderings</description>
	<lastBuildDate>Mon, 30 Jul 2012 18:24:00 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Javascript Frameworks and Libraries</title>
		<link>http://abecoffman.com/2011/javascript-libraries-and-frameworks/</link>
		<comments>http://abecoffman.com/2011/javascript-libraries-and-frameworks/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 05:57:40 +0000</pubDate>
		<dc:creator>abecoffman</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://abecoffman.com/?p=478</guid>
		<description><![CDATA[The modern browser is now the most intriguing development platform and runtime environment (personal opinion), especially when you consider that many mobile browsers ship with broad support for HTML5 and related technologies.  As browsers and javascript have matured, so have the libraries available to developers for building client side web applications.  Here&#8217;s an attempt at organizing [...]]]></description>
			<content:encoded><![CDATA[<p>The modern browser is now the most intriguing development platform and runtime environment (personal opinion), especially when you consider that <a title="Graded Mobile Browser Support" href="http://jquerymobile.com/gbs/" target="_blank">many mobile browsers</a> ship with broad support for <a title="Modern Browser Technologies" href="http://abecoffman.com/2011/modern-browser-technologies/">HTML5 and related technologies</a>.  As browsers and <a title="ECMAScript Language Specification 262" href="http://www.ecma-international.org/publications/standards/Ecma-262.htm" target="_blank">javascript</a> have matured, so have the libraries available to developers for building client side web applications.  Here&#8217;s an attempt at organizing my javascript bookmarks that hopefully can be of use to somebody else.</p>
<h3>Some Basic Resources</h3>
<ul>
<li>New to javascript?  Have a look at the <a title="MDN Javascript Guide" href="https://developer.mozilla.org/en/JavaScript/Guide" target="_blank">Javascript Guide</a> from the <a title="Mozilla Developer Network" href="https://developer.mozilla.org/en-US/" target="_blank">Mozilla Developer Network</a></li>
<li>Interested in browser support?  Read <a title="Browser Patches Shims &amp; Polyfills" href="http://abecoffman.com/2011/browser-patches-shims-polyfills/">this post</a> and checkout <a title="Quirksmode - Browser Compatibility" href="http://www.quirksmode.org/compatibility.html" target="_blank">Quirksmode</a>, <a title="Modernizr" href="http://www.modernizr.com/" target="_blank">Modernizr</a>, <a title="HTML5 Cross Browser Polyfills" href="https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills" target="_blank">HTML5 Polyfills</a></li>
<li>Looking for coding standards and best practices?  Checkout <a title="Isobar Code Standards &amp; Best Practices" href="http://na.isobar.com/standards/" target="_blank">Isobar</a></li>
<li>Not a fan of the javascript syntax?  Checkout <a title="CoffeeScript" href="http://jashkenas.github.com/coffee-script/" target="_blank">CoffeeScript</a></li>
<li>Want to write a html5 mobile app that can run natively?  Checkout <a title="Phonegap" href="http://www.phonegap.com/" target="_blank">Phonegap</a></li>
<li>Wondering where the core libraries are hiding?  Checkout the <a title="CommonJS" href="http://www.commonjs.org/" target="_blank">CommonJS</a> project</li>
<li>Want to write code in the cloud?  Checkout the <a title="Cloud9 IDE" href="http://c9.io/" target="_blank">Cloud9 IDE</a> from <a title="Ajax.org" href="http://www.ajax.org/" target="_blank">Ajax.org</a></li>
<li>Already an expert?  Maybe you&#8217;ll find <a title="CouchDB" href="http://couchdb.apache.org/" target="_blank">CouchDB</a>, <a title="Nodejs" href="http://nodejs.org/" target="_blank">Nodejs</a>, and <a title="jslibs" href="http://code.google.com/p/jslibs/" target="_blank">jslibs</a> interesting</li>
</ul>
<p>Those links lead you to some really cool javascript projects and communities and I highly recommend exploring the ones that interest you.  However, if you&#8217;re like me and you&#8217;re looking for a solid foundation for building client side applications then read on.  I&#8217;ve assembled a list of some of the most common and/or most intriguing frameworks and libraries that I&#8217;ve come across, in no particular order.</p>
<h3>Frameworks</h3>
<ul>
<li><a title="jQuery" href="http://jquery.com/" target="_blank">jQuery</a> + <a title="jQuery Plugins" href="http://plugins.jquery.com/" target="_blank">jQuery Plugins</a> + <a title="jQuery User Interface" href="http://jqueryui.com/" target="_blank">jQueryUI</a> (see: <a title="jQuery's Best Friends" href="http://jquerysbestfriends.com/#slide1" target="_blank">jQuery&#8217;s Best Friends</a>, <a title="jQuery Startr" href="https://github.com/mklabs/jquery-startr" target="_blank">jquery-startr</a>)</li>
<li><a title="Dojo Toolkit" href="http://dojotoolkit.org/" target="_blank">Dojo Toolkit</a> (see also: <a title="Cujo Js" href="http://cujojs.com/" target="_blank">Cujojs</a>, <a title="Dojo Foundation" href="http://dojofoundation.org/" target="_blank">Dojo Foundation</a>)</li>
<li><a title="Moo Tools" href="http://mootools.net/" target="_blank">Moo Tools</a></li>
<li><a title="Sprout Core" href="http://www.sproutcore.com/" target="_blank">Sprout Core</a></li>
<li><a title="Google Web Toolkit" href="http://code.google.com/webtoolkit/" target="_blank">Google Web Toolkit</a></li>
<li><a title="Yahoo User Interface Library" href="http://developer.yahoo.com/yui/3/" target="_blank">Yahoo User Interface (YUI3)</a></li>
<li><a title="Sencha" href="http://www.sencha.com/" target="_blank">Sencha</a></li>
<li><a title="Backbone" href="http://documentcloud.github.com/backbone/" target="_blank">Backbone</a></li>
<li><a title="Javascript MVC" href="http://javascriptmvc.com/" target="_blank">JavascriptMVC</a></li>
<li><a title="Prototype" href="http://www.prototypejs.org/" target="_blank">Prototype</a></li>
<li><a title="Echo Web Framework - Core JS" href="http://echo.nextapp.com/site/corejs" target="_blank">Echo Web Framework</a></li>
</ul>
<h3>Libraries</h3>
<p>There are a vast number of plugins for jQuery and other frameworks that I encourage you to explore. I&#8217;m not going to list any of them here.  However I have listed a somewhat random assortment of stand alone libraries that are useful to know about.</p>
<div class="three-columns">
<div class="column">
<p><strong>Script Loaders</strong></p>
<ul>
<li><a title="Require JS" href="http://requirejs.org/" target="_blank">Requirejs</a></li>
<li><a title="Yepnopejs" href="http://yepnopejs.com/" target="_blank">Yepnopejs</a></li>
<li><a title="Labjs" href="http://labjs.com/" target="_blank">Labjs</a></li>
</ul>
</div>
<div class="column">
<p><strong>Visualizations</strong></p>
<ul>
<li><a title="Raphael" href="http://raphaeljs.com/" target="_blank">Raphael</a></li>
<li><a title="Highcharts" href="http://www.highcharts.com/" target="_blank">Highcharts</a></li>
<li><a title="Simile Projects" href="http://simile.mit.edu/" target="_blank">Simile</a></li>
</ul>
</div>
<div class="column">
<p><strong>Utilities</strong></p>
<ul>
<li><a title="Underscore Javascript Utility Library" href="http://documentcloud.github.com/underscore/" target="_blank">Underscore</a></li>
<li><a title="js Lint" href="http://www.jslint.com/" target="_blank">js Lint</a></li>
<li><a title="Javascript Lint" href="http://www.javascriptlint.com/" target="_blank">Javascript Lint</a></li>
</ul>
</div>
</div>
<p>If you&#8217;re interested in testing frameworks, checkout <a title="Javascript Unit Testing" href="http://stackoverflow.com/questions/300855/looking-for-a-better-javascript-unit-test-tool" target="_blank">stackoverflow</a> for a great discussion on your options.</p>
<p>These lists are absolutely a work in progress so if you&#8217;ve got any suggestions for me please post in comments.  I&#8217;ll also continue to add to them as I discover new and interesting libraries.</p>
]]></content:encoded>
			<wfw:commentRss>http://abecoffman.com/2011/javascript-libraries-and-frameworks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modern Browser Technologies</title>
		<link>http://abecoffman.com/2011/modern-browser-technologies/</link>
		<comments>http://abecoffman.com/2011/modern-browser-technologies/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 18:59:30 +0000</pubDate>
		<dc:creator>abecoffman</dc:creator>
				<category><![CDATA[notes]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[infoarch]]></category>
		<category><![CDATA[w3c]]></category>
		<category><![CDATA[webarch]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://abecoffman.com/?p=404</guid>
		<description><![CDATA[Sites like html5test and html5rocks are great resources for getting a quick overview of html5 and related technologies.  Motivated primarily by my own desire to verse myself in these new technologies, I&#8217;ve decided to create yet another outline/ontology.  I&#8217;ve attempted to link to the working specification or the organization overseeing it&#8217;s development for most of the technologies.  Hopefully this [...]]]></description>
			<content:encoded><![CDATA[<p>Sites like <a title="HTML5 Browser Test" href="http://html5test.com/" target="_blank">html5test</a> and <a title="HTML5 Rocks" href="http://www.html5rocks.com/" target="_blank">html5rocks</a> are great resources for getting a quick overview of html5 and related technologies.  Motivated primarily by my own desire to verse myself in these new technologies, I&#8217;ve decided to create yet another outline/ontology.  I&#8217;ve attempted to link to the working specification or the organization overseeing it&#8217;s development for most of the technologies.  Hopefully this can also be a useful reference for others navigating this space.</p>
<p><strong>Core</strong></p>
<ul>
<li><a title="ECMA Script Specification" href="http://www.ecma-international.org/publications/standards/Ecma-262.htm" target="_blank">ECMAScript</a> (<a title="List of ECMAScript Engines" href="http://en.wikipedia.org/wiki/List_of_ECMAScript_engines" target="_blank">engines</a>, <a title="John Resig on Javascript Benchmarks" href="http://ejohn.org/blog/javascript-benchmark-quality/" target="_blank">benchmarks</a>)</li>
</ul>
<p><strong>Markup, Animation, Media</strong></p>
<ul>
<li><a title="W3C HTML5 Spec" href="http://dev.w3.org/html5/spec/Overview.html" target="_blank">HTML5</a> (semantic markup, <a title="W3C HTML5 Canvas Element Spec" href="http://dev.w3.org/html5/spec/Overview.html#the-canvas-element" target="_blank">canvas</a>, <a title="W3C HTML5 Audio Element Spec" href="http://dev.w3.org/html5/spec/Overview.html#audio" target="_blank">audio</a>, <a title="W3C HTML5 Video Element Spec" href="http://dev.w3.org/html5/spec/Overview.html#video" target="_blank">video</a>, <a title="W3C HTML5 Form Element Spec" href="http://dev.w3.org/html5/spec/Overview.html#forms" target="_blank">forms</a>, etc&#8230;)</li>
<li><a title="W3C CSS3 Roadmap" href="http://www.w3.org/TR/css3-roadmap/" target="_blank">CSS3</a> (advanced selectors, transitions, transforms, animations, etc&#8230;)</li>
<li><a title="W3C SVG Spec" href="http://www.w3.org/TR/SVG/" target="_blank">SVG</a></li>
<li><a title="W3C SVG Spec" href="http://www.w3.org/TR/SVG/" target="_blank"></a><a title="W3C MathML Spec" href="http://www.w3.org/TR/MathML3/" target="_blank">MathML</a></li>
<li><a title="Khronos WebGL Spec" href="https://www.khronos.org/registry/webgl/specs/1.0/" target="_blank">WebGL</a></li>
</ul>
<p><strong>Interaction</strong></p>
<ul>
<li><a title="W3C Document Object Model Events Spec" href="http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html" target="_blank">DOM3 Events</a> (state/history, mouse, keyboard)</li>
<li><a title="W3C Device Orientation Event Spec" href="http://dev.w3.org/geo/api/spec-source-orientation.html" target="_blank">Device Orientation</a></li>
<li><a title="W3C Web Events Working Group" href="http://www.w3.org/2010/webevents/" target="_blank">Web Events</a> (multi-touch support)</li>
<li><a title="W3C Speech Input API Spec" href="http://lists.w3.org/Archives/Public/public-xg-htmlspeech/2011Feb/att-0020/api-draft.html" target="_blank">Speech Input</a> (<a title="Talking to Your Computer with HTML5" href="http://chrome.blogspot.com/2011/03/talking-to-your-computer-with-html5.html" target="_blank">Google blog</a>)</li>
</ul>
<p><strong>Process Threads</strong></p>
<ul>
<li><a title="W3C Web Workers Spec" href="http://dev.w3.org/html5/workers/" target="_blank">Web Workers</a> (map/reduce library?)</li>
</ul>
<p><strong>Storage</strong></p>
<ul>
<li><a title="W3C Webstorage Spec" href="http://dev.w3.org/html5/webstorage/" target="_blank">Web Storage</a> (session storage, local storage)</li>
<li><a title="W3C Web Sequel Database Spec" href="http://www.w3.org/TR/webdatabase/" target="_blank">Web SQL Database</a></li>
<li><a title="W3C Indexed Database Spec" href="http://www.w3.org/TR/IndexedDB/" target="_blank">Indexed Database</a></li>
</ul>
<p><strong>Network Interface</strong></p>
<ul>
<li><a title="W3C XMLHttpRequest Spec" href="http://www.w3.org/TR/XMLHttpRequest/" target="_blank">XMLHttpRequest</a> (<a title="W3C Cross-Origin Resource Sharing Spec" href="http://dev.w3.org/2006/waf/access-control/" target="_blank">cross-origin resource sharing</a>)</li>
<li><a title="W3C Websockets Spec" href="http://dev.w3.org/html5/websockets/" target="_blank">Web Sockets</a></li>
<li><a title="W3C Web Notifications Spec" href="http://www.w3.org/TR/notifications/" target="_blank">Web Notifications</a></li>
</ul>
<p><strong>Sensors, Awareness</strong></p>
<ul>
<li><a title="W3C Geolocation Spec" href="http://dev.w3.org/geo/api/spec-source.html" target="_blank">Geolocation</a></li>
</ul>
<p><strong>Widgets</strong></p>
<ul>
<li><a title="W3C Widgets Spec" href="http://www.w3.org/TR/widgets/" target="_blank">Widgets</a></li>
</ul>
<p>I will probably continue to make edits to this so continue to check back if it interests you, or post in comments if you&#8217;ve got feedback or things you think I should add.</p>
]]></content:encoded>
			<wfw:commentRss>http://abecoffman.com/2011/modern-browser-technologies/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Browser Patches, Shims, and Polyfills</title>
		<link>http://abecoffman.com/2011/browser-patches-shims-polyfills/</link>
		<comments>http://abecoffman.com/2011/browser-patches-shims-polyfills/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 08:42:41 +0000</pubDate>
		<dc:creator>abecoffman</dc:creator>
				<category><![CDATA[notes]]></category>
		<category><![CDATA[infoarch]]></category>
		<category><![CDATA[webarch]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://abecoffman.com/?p=367</guid>
		<description><![CDATA[I&#8217;ve noticed that the jQuery community has started using the term Polyfill recently so here&#8217;s a brief post that helped me in thinking through this topic. It&#8217;s largely inspired by the awesome list of HTML5 Cross Browser Polyfills assembled by the Modernizr folks. Graded Browser Support Yahoo has published their Graded Browser Support for the last [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve noticed that the jQuery community has started using the term Polyfill recently so here&#8217;s a brief post that helped me in thinking through this topic. It&#8217;s largely inspired by the awesome list of <a title="HTML5 Cross Browser Polyfills" href="https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills" target="_blank">HTML5 Cross Browser Polyfills</a> assembled by the <a title="Modernizr" href="http://www.modernizr.com/" target="_blank">Modernizr</a> folks.</p>
<p><strong>Graded Browser Support</strong></p>
<p>Yahoo has published their <a title="YUI Graded Browser Support" href="http://developer.yahoo.com/yui/articles/gbs/" target="_blank">Graded Browser Support</a> for the last 3 years and it makes a great starting point for any web application project.  More recently <a title="jQuery Mobile Framework" href="http://jquerymobile.com/" target="_blank">jQuery Mobile</a> published their <a title="Mobile Graded Browser Support" href="http://jquerymobile.com/gbs/" target="_blank">Mobile Graded Browser Support</a> which emulates Yahoo&#8217;s approach. Both of them have divided browsers into tiers, Yahoo choosing to provide different experiences to users in different tiers, and jQuery Mobile choosing to only support the top tier.</p>
<p>The tiered approach is a great way of thinking about the browser landscape and outlining a strategy for <a title="Progressive Enhancement" href="http://en.wikipedia.org/wiki/Progressive_enhancement" target="_blank">Progressive Enhancement</a> or <a title="Graceful Degradation (Fault-Tolerant Systems)" href="http://en.wikipedia.org/wiki/Fault-tolerant_system" target="_blank">Graceful Degradation</a>.  However there are still significant variances in the APIs of the browsers within a single tier, especially if you want to use any of the newer technologies.  Developers address this variance by writing <a title="Patch (computing)" href="http://en.wikipedia.org/wiki/Patch_(computing)" target="_blank">Patches</a>, <a title="Shim (computing)" href="http://en.wikipedia.org/wiki/Shim_(computing)" target="_blank">Shims</a>, and <a title="Polyfills" href="http://remysharp.com/2010/10/08/what-is-a-polyfill/" target="_blank">Polyfills</a>(?) in the hopes of creating a baseline API on which to build the rest of their application or library.  Generally your baseline API should target current W3C and related specs.</p>
<p><strong>Building Patches, Shims, and Polyfills</strong></p>
<p>If you&#8217;re Google and you have unlimited engineering resources you can write sophisticated browser plugins like <a title="Chrome Frame Browser Plugin" href="http://www.google.com/chromeframe" target="_blank">Chrome Frame</a> and <a title="Google Gears Browser Plugin" href="http://gears.google.com/" target="_blank">Google Gears</a> to update older browsers.  For the rest of us, the best way to go about writing patches, shims, and polyfills is to use feature detection (as opposed to user-agent detection). Peter Michaux has a <a title="Feature Detection: State of the Art Browser Scripting" href="http://peter.michaux.ca/articles/feature-detection-state-of-the-art-browser-scripting" target="_blank">great article</a> on how feature detection balances false positives and false negatives.  You can also learn about feature detection techniques from <a title="Dive Into HTML5 - Feature Detection" href="http://diveintohtml5.org/detect.html" target="_blank">Dive Into HTML5</a>.  There are a number of feature detection libraries such as <a title="jQuery.support - jQuery Feature Detection" href="http://api.jquery.com/jQuery.support/" target="_blank">jQuery.support</a> and <a title="Modernizr - Javascript Feature Detection" href="http://www.modernizr.com/" target="_blank">Modernizr</a>.</p>
<p>So once you write a feature test that returns a meaningful boolean, the question is how you address the lack of a feature (a false).  If you can implement the feature using javascript and other supported technologies then you&#8217;ve got yourself a shim!  If your shim conforms to a W3C or related standard, even better!  People will disagree on what they consider &#8220;implementing&#8221; a feature, and often times shims don&#8217;t perform as well as a native browser implementation would, but even bad performance is usually preferred to no performance.</p>
<div class="post-update"><span class="red">Update: March 18, 2011</span> &#8211; Polyfill Definition, thx <a href="http://abecoffman.com/2011/browser-patches-shims-polyfills/#comment-9">Paul</a>.  See also: <a href="http://abecoffman.com/2011/browser-patches-shims-polyfills/#comment-9">Remy Sharp</a>, <a href="http://blog.reybango.com/2010/10/11/how-polyfills-fill-in-the-gaps-to-make-html5-and-css3-usable-today/">Rey Bango</a></div>
<p>A Polyfill is essentially a shim that replicates the real API as defined by the standard/spec.</p>
]]></content:encoded>
			<wfw:commentRss>http://abecoffman.com/2011/browser-patches-shims-polyfills/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Advanced WordPress Like Button Integration</title>
		<link>http://abecoffman.com/2011/advanced-wordpress-like-button-integration/</link>
		<comments>http://abecoffman.com/2011/advanced-wordpress-like-button-integration/#comments</comments>
		<pubDate>Thu, 10 Mar 2011 01:27:34 +0000</pubDate>
		<dc:creator>abecoffman</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[socialmedia]]></category>

		<guid isPermaLink="false">http://abecoffman.com/?p=190</guid>
		<description><![CDATA[The Facebook Like Button has become one of the easiest and most prolific ways of publishing content to a Facebook users friend feed.  This form of publication creates value in three ways: It generates traffic back to the publisher of the content It generates brand awareness from the text and images in the feed It [...]]]></description>
			<content:encoded><![CDATA[<p>The Facebook Like Button has become one of the easiest and most prolific ways of publishing content to a Facebook users friend feed.  This form of publication creates value in three ways:</p>
<ul>
<li>It generates traffic back to the publisher of the content</li>
<li>It generates brand awareness from the text and images in the feed</li>
<li>It enables rich demographic analytics</li>
</ul>
<p>I&#8217;m going to walk you through how I&#8217;ve implemented the Like Button on the popular fashion blog <a title="Honestly WTF Project" href="http://abecoffman.com/project/honestly-wtf/">Honestly WTF</a> so that you can publish something like the following to a users feed:</p>
<p><a href="http://abecoffman.com/wp-content/uploads/2011/03/Like-Button-Feed-Entry.png"><img class="aligncenter size-full wp-image-332" title="Like Button Feed Entry" src="http://abecoffman.com/wp-content/uploads/2011/03/Like-Button-Feed-Entry.png" alt="" width="523" height="162" /></a></p>
<p>The <a title="Facebook Like Button" href="http://developers.facebook.com/docs/reference/plugins/like/" target="_blank">Like Button</a> interacts with Facebook&#8217;s graph based API using a protocol they call the <a title="Facebook Open Graph" href="http://developers.facebook.com/docs/opengraph/" target="_blank">Open Graph Protocol</a>.  The quickest integration is to use their little code generator widget that spits out a snippet of javascript.  However this approach doesn&#8217;t allow for the second and third values listed above.</p>
<p>We&#8217;re going to use the second approach which requires that you <a href="http://developers.facebook.com/setup/">register a Facebook Application</a>.  Once you&#8217;ve registered your application and gotten an <em>appid</em> you can load Facebook&#8217;s <a title="Facebook Javascript SDK" href="http://developers.facebook.com/docs/reference/javascript/" target="_blank">Javascript SDK</a> into the page and turn on Facebook&#8217;s markup language <a title="Facebooko XFBML Parser" href="http://developers.facebook.com/docs/reference/javascript/fb.xfbml.parse/" target="_blank">XFBML</a>.  Let&#8217;s go ahead and walk through how that&#8217;s done.<span id="more-190"></span></p>
<h4><strong>Facebook XFBML Setup</strong></h4>
<p>First let&#8217;s start with a little theme organization.  I put all of my javascript in a theme subdirectory called /js so if your theme doesn&#8217;t already have this directory, I suggest you add it now.  Once you&#8217;ve added the js directory, create a file in it called <em>init.facebook.js</em> and just leave it empty for now.  In order to get the Like Button working we&#8217;re going to need to load the following three scripts:</p>
<ul>
<li>jquery.js</li>
<li>http://connect.facebook.net/en_US/all.js</li>
<li>/js/init.facebook.js</li>
</ul>
<p>WordPress provides two useful methods for loading scripts called <em><a title="Wordpress Register Script Function" href="http://codex.wordpress.org/Function_Reference/wp_register_script" target="_blank">wp_register_script()</a></em> and <em><a title="Wordpress Enqueue Script Function" href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script" target="_blank">wp_enque_script()</a>.</em> Add the following code to the <em>functions.php</em> file in your theme to get these scripts loaded:</p>
<p><script src="https://gist.github.com/868544.js"> </script></p>
<p>Now let&#8217;s walk through what&#8217;s going on here.  First we load the jQuery script which is often already loaded anyway since a lot of plugins use it.  Then we check to make sure we&#8217;re not in the admin screen because chances are we won&#8217;t need to add Like Buttons there.  We then register and enqueue our Facebook scripts.  Finally we add our <em>facebook_sdk_init()</em> method to the WordPress <em>init()</em> callback.</p>
<p>The Facebook SDK requires that you add namespaces and an anchor in every page you want to use it.  I&#8217;m going to add them using WordPress callbacks which requires that your theme calls both the <em><a title="Wordpress language_attributes Function" href="http://codex.wordpress.org/Function_Reference/language_attributes" target="_blank">language_attributes()</a></em> function and the <em><a title="Wordpress wp_footer Function" href="http://codex.wordpress.org/Function_Reference/wp_footer" target="_blank">wp_footer()</a></em> callback.  If your theme doesn&#8217;t call these functions I would highly recommend adding them.  With those in place, here&#8217;s what we add to our <em>functions.php</em> file.</p>
<p><script src="https://gist.github.com/868547.js"> </script></p>
<p>Now that we&#8217;ve got these functions added we&#8217;re ready to move on to initializing the app itself. We have to wait until the document is ready to call the <em>FB.init()</em> function to ensure the script dependencies have been loaded and the anchor markup has been added. So open up the <em>init.facebook.js</em> file that we created earlier and add the code below. Make sure to add your <em>appId</em> to the script, otherwise it won&#8217;t work.</p>
<p><script src="https://gist.github.com/868562.js"> </script></p>
<p>Once you&#8217;ve done that, you can start adding <a title="Facebook XFBML Parser" href="http://developers.facebook.com/docs/reference/javascript/fb.xfbml.parse/" target="_blank">XFBML</a> tags into your theme.  In order to add the like button, try adding this within the loop on the index page:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!-- Add to any loop in your theme --&gt;

&lt;fb:like href=&quot;&lt;?php the_permalink() ?&gt;&quot;&gt;&lt;/fb:like&gt;
</pre>
<p>You can find all of the attributes to customize the button on the <a title="Facebook Like Button" href="http://developers.facebook.com/docs/reference/plugins/like/" target="_blank">Like Button</a> page.  Now that we&#8217;ve got <a title="Facebook XFBML Parser" href="http://developers.facebook.com/docs/reference/javascript/fb.xfbml.parse/" target="_blank">XFBML</a> parsing working, it&#8217;s time for <a title="Facebook Open Graph" href="http://developers.facebook.com/docs/opengraph/" target="_blank">Facebook Open Graph</a> optimization.</p>
<h4><strong>Facebook Open Graph Setup</strong></h4>
<p><span style="color: #000000;">When a user clicks a like button on a page, Facebook needs to determine what it is that the user is &#8220;Liking&#8221; in order to build the feed entry they publish to the users feed.  You provide Facebook with this information by adding special <em>meta</em> tags to the header of your html document.  Information on these meta tags can be found on the <a title="Facebook Open Graph Protocol" href="http://developers.facebook.com/docs/opengraph/" target="_blank">Open Graph Protocol</a> page.</span></p>
<p><span style="color: #000000;">There are probably a lot of ways to configure these meta tags for blogs, and I don&#8217;t know if there&#8217;s a right way.  That being said, here were the things that I wanted to accomplish:</span></p>
<ul>
<li>Add individual like buttons to every article (post) on every page</li>
<li>Include a thumbnail image, the article title, the blog url, and a short excerpt when posting to a users feed</li>
<li>Use default metadata for pages that don&#8217;t represent a specific article (post)</li>
</ul>
<p><span style="color: #000000;"><a title="Wordpress Post Thumbnails" href="http://codex.wordpress.org/Post_Thumbnails" target="_blank">Post thumbnails</a> have only been supported since WordPress 2.9 and need to be explicitly turned on in your theme (see next code snippet). </span>In order to generate thumbnail images for every post on the blog, I used a great WordPress plugin called <a title="Auto Post Thumbnail WordPress Plugin" href="http://wordpress.org/extend/plugins/auto-post-thumbnail/" target="_blank">Auto Post Thumbnail</a>.  There are other plugins that also generate thumbnails, and you can always add them manually to your posts from the create/edit post screen.  You do this by setting the featured image:</p>
<p><a href="http://abecoffman.com/wp-content/uploads/2011/03/Wordpress-Featured-Image.png"><img class="aligncenter size-full wp-image-355" title="Wordpress Featured Image" src="http://abecoffman.com/wp-content/uploads/2011/03/Wordpress-Featured-Image.png" alt="" width="295" height="80" /></a></p>
<p>I decided to write a function that would create the Facebook graph meta tags for me.  That way I could automatically add them to all of the pages on the blog.  So here are the last two functions and callbacks we need to add to <em>functions.php</em>:</p>
<p><script src="https://gist.github.com/868578.js"> </script></p>
<p>This function first defines the default attributes for your blog.  It then overwrites the page specific attributes if it detects that you&#8217;re on a single post page.  Finally it generates all of the meta tags and echos them into the page. We attach it to the <em>wp_head()</em> callback function to insert it into our documents.</p>
<p>And that&#8217;s it folks, you&#8217;ve essentially built yourself a WordPress plugin that does a proper integration of the Facebook Like Button.  Hopefully you&#8217;ve found this tutorial useful.  If you have any questions or feedback, please feel free to post in the comments.  If you want to download the test theme click on the github link below.</p>
]]></content:encoded>
			<wfw:commentRss>http://abecoffman.com/2011/advanced-wordpress-like-button-integration/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Personal Site</title>
		<link>http://abecoffman.com/2011/personal-site/</link>
		<comments>http://abecoffman.com/2011/personal-site/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 19:51:16 +0000</pubDate>
		<dc:creator>abecoffman</dc:creator>
				<category><![CDATA[webdev]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://abecoffman.com/?post_type=project&#038;p=186</guid>
		<description><![CDATA[My personal website is an excuse for me to experiment with all of the amazing features of WordPress.  On top of just themeing, I&#8217;ve been playing around with some of the new CMS features of WordPress including the ability to define custom types of posts and pages.  I&#8217;ve also been giving plugin development a try. [...]]]></description>
			<content:encoded><![CDATA[<p>My personal website is an excuse for me to experiment with all of the amazing features of WordPress.  On top of just themeing, I&#8217;ve been playing around with some of the new CMS features of WordPress including the ability to define <a href="http://codex.wordpress.org/Post_Types#Custom_Types">custom types</a> of posts and pages.  I&#8217;ve also been giving plugin development a try.  I&#8217;ll try to document some of the things I learn in blog posts as I go.</p>
]]></content:encoded>
			<wfw:commentRss>http://abecoffman.com/2011/personal-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Honestly WTF</title>
		<link>http://abecoffman.com/2011/honestly-wtf/</link>
		<comments>http://abecoffman.com/2011/honestly-wtf/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 22:38:29 +0000</pubDate>
		<dc:creator>abecoffman</dc:creator>
				<category><![CDATA[webdev]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[socialmedia]]></category>

		<guid isPermaLink="false">http://abecoffman.com/?post_type=project&#038;p=138</guid>
		<description><![CDATA[I currently manage the technology side of the popular fashion blog HonestlyWTF which is penned by my wife and her friend.  Through a combination of great content and search engine and social media optimization, we&#8217;ve been able to grow the site to 1,000,000 pageviews a month in less than a year.  Most of my work on [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>I currently manage the technology side of the popular fashion blog <a title="Honestly WTF" href="http://honestlywtf.com/" target="_blank">HonestlyWTF</a> which is penned by my wife and her friend.  Through a combination of great content and search engine and social media optimization, we&#8217;ve been able to grow the site to 1,000,000 pageviews a month in less than a year.  Most of my work on this project continues to be WordPress theming and optimization.  This has included the following:</p>
<ul>
<li>Intelligent social media integrations (i.e. <a title="Advanced WordPress Like Button Integration" href="http://abecoffman.com/2011/advanced-wordpress-like-button-integration/">Facebook Like Button</a>)</li>
<li>Advanced server side caching using the <a title="Wordpress Super Cache Plugin" href="http://wordpress.org/extend/plugins/wp-super-cache/" target="_blank">WP Super Cache</a> plugin</li>
<li>General search engine optimization</li>
<li>Implementation and optimization of ad units</li>
<li>Feed and Newsletter management (integration with Feedburner)</li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://abecoffman.com/2011/honestly-wtf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Birthday Picker Form Plugin</title>
		<link>http://abecoffman.com/2011/jquery-birthday-picker/</link>
		<comments>http://abecoffman.com/2011/jquery-birthday-picker/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 21:02:54 +0000</pubDate>
		<dc:creator>abecoffman</dc:creator>
				<category><![CDATA[jquery]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://abecoffman.com/?p=10</guid>
		<description><![CDATA[I recently had a need to create a form where somebody entered their birthday and decided it would be a good idea to explore various ways of solving this.  I essentially had the following requirements: Make the data entry as easy as possible Do as many validations as I could on the client side Use [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had a need to create a form where somebody entered their birthday and decided it would be a good idea to explore various ways of solving this.  I essentially had the following requirements:</p>
<ul>
<li>Make the data entry as easy as possible</li>
<li>Do as many validations as I could on the client side</li>
<li>Use jQuery</li>
</ul>
<p>Date&#8217;s are always tricky for people to enter into forms and the best solution really depends on the situation.  Birthdays present their own unique features:</p>
<ul>
<li>You always know the exact date you&#8217;re entering</li>
<li>The date is always in the past, and often many years in the past</li>
</ul>
<p>Because of this a common date picker such as the <a title="jQuery Datepicker" href="http://jqueryui.com/demos/datepicker/" target="_blank">jQuery Datepicker</a>, which works great for things like airline reservations, isn&#8217;t quite as suited for choosing a birthday.  Instead most people end up creating an empty text field and adding validation to it, either on the client, on the server, or both (I strongly recommend both).</p>
<pre class="brush: xml; title: ; notranslate">&lt;form id=&quot;myForm&quot; method=&quot;post&quot;&gt;
  &lt;input id=&quot;birthday&quot; name=&quot;birthday&quot; type=&quot;text&quot; /&gt;
  &lt;input type=&quot;submit&quot; value=&quot;submit&quot; /&gt;
&lt;/form&gt;</pre>
<p><span id="more-10"></span></p>
<p>This is where something like the <a title="jQuery Validation Plugin" href="http://docs.jquery.com/Plugins/validation" target="_blank">jQuery Validation plugin</a> comes in really handy.  With very little effort you can ask it to ensure a valid date is entered.</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;#myForm&quot;).validate({
  rules: {
    birthday: {
      required: true,
      date: true
    }
  }
});
</pre>
<p>This is a pretty easy solution, and probably sufficient in almost all cases.  If you go this route I would suggest adding a placeholder to the input field to show the user a sample date in the format you&#8217;re expecting.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input id=&quot;birthday&quot; name=&quot;birthday&quot; placeholder=&quot;10/17/1980&quot; type=&quot;text&quot; /&gt;
</pre>
<p>However if you want to be especially picky, this solution does allow invalid birthdays because you can enter a future date.</p>
<p>So I decided to continue my search to see how other people had solved this. The first place I looked was Facebook, and behold, they had their own implementation. If you&#8217;re interested you can have a look at their homepage (you must be signed out). The basic markup is as follows (with slight modifications and option menus omitted):</p>
<pre class="brush: xml; title: ; notranslate">
&lt;select name=&quot;birthday[month]&quot;&gt;&lt;/select&gt;
&lt;select name=&quot;birthday[day]&quot;&gt;&lt;/select&gt;
&lt;select name=&quot;birthday[year]&quot;&gt;&lt;/select&gt;
</pre>
<p>I think if you were a user interaction purist you&#8217;d quickly find the faults with this solution. It requires three different fields, all of which are dropdowns, ugghh! That being said, it does have some things going for it. The format is forced which means the user should almost always get it right on the first try. It also allows you to restrict the date range which can solve the future date issue.</p>
<p>So I decided I might give Facebook&#8217;s implementation a try and quickly realized it is not without some complexity.  For it to be worth anything it requires that the dropdown menus dynamically update themselves in the following ways:</p>
<ul>
<li>The number of days in the day select menu should reflect the chosen month</li>
<li>The number of days in February should account for leap years</li>
<li>The dropdowns should selectively reset to prevent display of an invalid date</li>
</ul>
<p>After giving it some thought, I decided this would be a good opportunity for me to learn how to write a jQuery plugin to mimic this implementation.  While writing the plugin I decided it would be fun to add some additional options which are all outlined on the <a title="jQuery Birthday Picker Form Plugin" href="http://plugins.jquery.com/project/birthdaypicker" target="_blank">plugin page</a>, <a title="jQuery Birthday Picker Form Plugin" href="https://github.com/abecoffman/jquery.birthdaypicker" target="_blank">github</a>, and the <a href="http://abecoffman.com/stuff/birthdaypicker/">demo page</a>.  But as a quick guide to how it works, you can make the following call on any block element in the page:</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;div#birthday-picker&quot;).birthdaypicker();
</pre>
<p>By default this will generate the following markup (with option menus of course):</p>
<pre class="brush: xml; title: ; notranslate">
&lt;fieldset class=&quot;birthday-picker&quot;&gt;
  &lt;select class=&quot;birth-year&quot; name=&quot;birth[year]&quot;&gt;&lt;/select&gt;
  &lt;select class=&quot;birth-month&quot; name=&quot;birth[month]&quot;&gt;&lt;/select&gt;
  &lt;select class=&quot;birth-day&quot; name=&quot;birth[day]&quot;&gt;&lt;/select&gt;
&lt;/fieldset&gt;
</pre>
<p>I believe that I&#8217;ve solved the requirements I listed above.  And, as mentioned, there are a number of options that give the plugin some flexibility, both in the range of dates it will support, and the markup it will generate.  I think there are still many ways it could be improved, but I&#8217;m going to hold off on those until/unless people ask for them.</p>
<p>As a final thought, this is probably not the best solution.  In fact I would lean toward using the basic text field with client side form validation.  However I have to assume that Facebook takes a critical look at their usability, and since they&#8217;re still using this implementation it must be working.  Post in comments if there are any implementations that you particularly like.  I&#8217;d love to find more.</p>
<div class="post-update"><span class="red">Update: March 21, 2011</span> &#8211; <a href="http://plugins.jquery.com/project/birthdaypicker">Birthday Picker Version 1.2 Released</a></div>
<p>I updated the plugin to include support for a default date. I also added a hidden text field called &#8220;birthdate&#8221; that gets updated as the select lists change. This single date field is easier to handle on the server.</p>
<div class="post-update"><span class="red">Update: July 30, 2012</span> &#8211; <a href="https://github.com/abecoffman/birthdaypicker">Moved to Github</a></div>
<p>Please visit the <a href="https://github.com/abecoffman/birthdaypicker">Github</a> repository for the latest discussion on this plugin. There you can clone the repo and submit fixes. Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://abecoffman.com/2011/jquery-birthday-picker/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Welcome</title>
		<link>http://abecoffman.com/2011/welcome/</link>
		<comments>http://abecoffman.com/2011/welcome/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 18:56:11 +0000</pubDate>
		<dc:creator>abecoffman</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://abecoffman.com/?p=1</guid>
		<description><![CDATA[Hello and welcome to my home on the web.  I hope to use this site as a repository for projects, inspirations, code samples, and anything else that I think deserves to be indexed by those crazy search robots, or spiders, or web crawlers, or whatever you want to call them.  Feel free to take a [...]]]></description>
			<content:encoded><![CDATA[<p>Hello and welcome to my home on the web.  I hope to use this site as a repository for projects, inspirations, code samples, and anything else that I think deserves to be indexed by those crazy search robots, or spiders, or web crawlers, or whatever you want to call them.  Feel free to take a look around, but don&#8217;t spend too long, otherwise I might be prompted to throw up some ads.  And really, who needs to see another ad?</p>
]]></content:encoded>
			<wfw:commentRss>http://abecoffman.com/2011/welcome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The 2 Bandits</title>
		<link>http://abecoffman.com/2011/the-2-bandits/</link>
		<comments>http://abecoffman.com/2011/the-2-bandits/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 22:41:18 +0000</pubDate>
		<dc:creator>abecoffman</dc:creator>
				<category><![CDATA[webdev]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[googlecheckout]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://abecoffman.com/?post_type=project&#038;p=144</guid>
		<description><![CDATA[On this project I worked with the founders of The 2 Bandits to design and build their website, blog, and online store. They wanted a minimalist aesthetic so that the primary focus would be their products.  The project included the following key components: A custom PHP / MySQL backend to manage their product catalog Advanced integration of Google [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>On this project I worked with the founders of <a href="http://the2bandits.com/">The 2 Bandits</a> to design and build their website, blog, and online store. They wanted a minimalist aesthetic so that the primary focus would be their products.  The project included the following key components:</p>
<ul>
<li>A custom PHP / MySQL backend to manage their product catalog</li>
<li>Advanced integration of <a href="http://checkout.google.com/seller/integrate.html">Google Checkout</a> to allow online purchases worldwide</li>
<li>A custom WordPress theme so that their blog matched the website</li>
<li>Heavy use of jQuery and jQuery plugins for image browsing</li>
</ul>
<p><strong>Project Notes</strong></p>
<ul>
<li>The collection page is a custom jQuery script that loads each of the images via ajax before displaying them on the page.</li>
<li>The stores page makes use of Paul Irish&#8217;s <a href="http://paulirish.com/2009/bulletproof-font-face-implementation-syntax/">Bulletproof @font-face: Smiley variation</a> for using custom fonts</li>
<li>The product pages make use of the <a href="http://www.magictoolbox.com/magiczoom/">MagicZoom script</a> for zooming in on images</li>
<li>The Google Checkout integration included setting up different shipping costs based on the shipping address</li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://abecoffman.com/2011/the-2-bandits/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rebecca Coffman Landscape Architects</title>
		<link>http://abecoffman.com/2010/rebecca-coffman-landscape-architects/</link>
		<comments>http://abecoffman.com/2010/rebecca-coffman-landscape-architects/#comments</comments>
		<pubDate>Wed, 06 Oct 2010 22:39:51 +0000</pubDate>
		<dc:creator>abecoffman</dc:creator>
				<category><![CDATA[webdev]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://abecoffman.com/?post_type=project&#038;p=141</guid>
		<description><![CDATA[This project focused on creating an online portfolio that would effectively communicate the design aesthetics of Rebecca Coffman Landscape Architects.  Most of the site&#8217;s design and layout was done by Erica (my wife), while I focused on usability and implementation.  My energies were primarily directed towards the portfolio section which implemented the following: A client side json [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>This project focused on creating an online portfolio that would effectively communicate the design aesthetics of <a href="http://rebeccacoffman.com">Rebecca Coffman Landscape Architects</a>.  Most of the site&#8217;s design and layout was done by Erica (my wife), while I focused on usability and implementation.  My energies were primarily directed towards the portfolio section which implemented the following:</p>
<ul>
<li>A client side <a href="http://www.rebeccacoffman.com/js/db.js">json database</a> of project information</li>
<li>A convenient method of loading project images via ajax</li>
<li>Back button support using hashtags and Ben Alman&#8217;s <a href="http://benalman.com/projects/jquery-bbq-plugin/">Back Button and Query Library</a></li>
</ul>
<p><strong>Project Notes</strong></p>
<ul>
<li>I made use of Kevin Luck&#8217;s <a href="http://jscrollpane.kelvinluck.com/">jScrollPane plugin</a> for the custom scrollbars on the portfolio page</li>
<li>I used simple ModRewrite rules to make the urls prettier (remove file extensions)</li>
<li>All of the custom fonts were implemented using Dave Shea&#8217;s <a href="http://www.alistapart.com/articles/sprites">CSS Sprites Method</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://abecoffman.com/2010/rebecca-coffman-landscape-architects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
