<?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>johnbender.us</title>
	<atom:link href="http://johnbender.us/feed/" rel="self" type="application/rss+xml" />
	<link>http://johnbender.us</link>
	<description>articles on software</description>
	<lastBuildDate>Thu, 01 Dec 2011 20:16:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>jQuery is just a browser API</title>
		<link>http://johnbender.us/2011/11/25/jquery-is-just-a-browser-api/</link>
		<comments>http://johnbender.us/2011/11/25/jquery-is-just-a-browser-api/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 17:35:32 +0000</pubDate>
		<dc:creator>John Bender</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[jquery javascript prototype objects]]></category>

		<guid isPermaLink="false">http://johnbender.us/?p=1429</guid>
		<description><![CDATA[[Update] Thanks to Charlie in the comments for pointing me to jQuery&#8217;s $.fn.proxy method. Developers have traditionally used JavaScript for relatively simple DOM manipulations and XHR, but as more functionality moves to the client, the techniques used by those developers have been slow to evolve. One consequence of this slow evolution is systems comprised entirely [...]]]></description>
		<wfw:commentRss>http://johnbender.us/2011/11/25/jquery-is-just-a-browser-api/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>You got your type class in my jQuery: Applicative Functors</title>
		<link>http://johnbender.us/2011/07/20/you-got-your-type-class-in-my-jquery-applicative-functors/</link>
		<comments>http://johnbender.us/2011/07/20/you-got-your-type-class-in-my-jquery-applicative-functors/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 21:27:45 +0000</pubDate>
		<dc:creator>John Bender</dc:creator>
				<category><![CDATA[functional programming]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://johnbender.us/?p=1364</guid>
		<description><![CDATA[Previously we saw how jQuery&#8217;s $() can behave like Haskell&#8217;s Functor typeclass, when it wraps raw DOM objects and how provides its own version of fmap ($.map) for lifting functions into that wrapper to work with those DOM objects. In this post I&#8217;ll explain Haskell&#8217;s Applicative typeclass, how it&#8217;s slightly different from the Functor, and [...]]]></description>
		<wfw:commentRss>http://johnbender.us/2011/07/20/you-got-your-type-class-in-my-jquery-applicative-functors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You got your type class in my jQuery: Functors</title>
		<link>http://johnbender.us/2011/07/08/you-got-your-type-class-in-my-jquery-functors/</link>
		<comments>http://johnbender.us/2011/07/08/you-got-your-type-class-in-my-jquery-functors/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 09:12:39 +0000</pubDate>
		<dc:creator>John Bender</dc:creator>
				<category><![CDATA[functional programming]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[haskell functional jquery javascript learning]]></category>

		<guid isPermaLink="false">http://johnbender.us/?p=1190</guid>
		<description><![CDATA[I have previously described practical applications of common functional programming concepts in earlier posts: Rack&#8217;s Middleware and Vagrant&#8217;s Middleware. Next in this series I&#8217;ll cover how jQuery&#8217;s design leverages abstractions similar to Haskell&#8217;s better-known type classes: Functor, Applicative, and Monad. It draws heavily from Brent Yorgey&#8217;s Typeclassopedia from [PDF] The Monad Reader 13 (which was [...]]]></description>
		<wfw:commentRss>http://johnbender.us/2011/07/08/you-got-your-type-class-in-my-jquery-functors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Snap setup from scratch the Vagrant way</title>
		<link>http://johnbender.us/2011/03/05/snap-setup-from-scratch-the-vagrant-way/</link>
		<comments>http://johnbender.us/2011/03/05/snap-setup-from-scratch-the-vagrant-way/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 06:57:26 +0000</pubDate>
		<dc:creator>John Bender</dc:creator>
				<category><![CDATA[functional programming]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[vagrant]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://johnbender.us/?p=1119</guid>
		<description><![CDATA[A large group of web developers, otherwise ambivalent to Haskell, have recently found reason to learn the language thanks in part to the Snap web framework. Its really no surprise given Haskell&#8217;s brilliance as an all purpose programming language and the effort the Snap team has put into providing great documentation. For those interested in [...]]]></description>
		<wfw:commentRss>http://johnbender.us/2011/03/05/snap-setup-from-scratch-the-vagrant-way/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Contributing to jQuery Mobile</title>
		<link>http://johnbender.us/2011/02/08/contributing-to-jquery-mobile/</link>
		<comments>http://johnbender.us/2011/02/08/contributing-to-jquery-mobile/#comments</comments>
		<pubDate>Tue, 08 Feb 2011 14:16:30 +0000</pubDate>
		<dc:creator>John Bender</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[oss]]></category>
		<category><![CDATA[vagrant]]></category>

		<guid isPermaLink="false">http://johnbender.us/?p=1053</guid>
		<description><![CDATA[UPDATE: I&#8217;ve updated the vagrant branch used below to support the newest version of Vagrant. This is more substantial version of the lightning talk I gave at LA RubyConf last Saturday. If you&#8217;re a Vagrant user already, this will be familiar. If not, don&#8217;t worry, you&#8217;re about to get a quick introduction to its power [...]]]></description>
		<wfw:commentRss>http://johnbender.us/2011/02/08/contributing-to-jquery-mobile/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Haskell and Vagrant’s Middleware</title>
		<link>http://johnbender.us/2010/10/18/haskell-and-vagrants-middleware/</link>
		<comments>http://johnbender.us/2010/10/18/haskell-and-vagrants-middleware/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 16:34:19 +0000</pubDate>
		<dc:creator>John Bender</dc:creator>
				<category><![CDATA[functional programming]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[rack]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[haskell ruby]]></category>

		<guid isPermaLink="false">http://nickelcode.com/?p=898</guid>
		<description><![CDATA[As a follow up to my last post on middleware and monads I&#8217;ll be going over how the Warden class, as implemented inside Vagrant, uses concepts derived from some of the basic monad combinators to achieve a rescuable middleware stack. As before, this article assumes you have some knowledge of the Haskell language and middleware [...]]]></description>
		<wfw:commentRss>http://johnbender.us/2010/10/18/haskell-and-vagrants-middleware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Middleware, Composition, and Monads</title>
		<link>http://johnbender.us/2010/07/22/middleware-composition-and-monads/</link>
		<comments>http://johnbender.us/2010/07/22/middleware-composition-and-monads/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 02:54:00 +0000</pubDate>
		<dc:creator>John Bender</dc:creator>
				<category><![CDATA[functional programming]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[rack]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[haskell ruby rack composition monads]]></category>

		<guid isPermaLink="false">http://nickelcode.com/?p=747</guid>
		<description><![CDATA[This article pre-supposes that you have some basic knowledge of Haskell, Rack/PEP 333, and middleware. Middleware Middleware, as a plugin architecture for creating custom web stacks, is an amazing tool (the fact that it makes web servers interchangeable is equally important but not useful for this discussion). By simplifying and standardizing the interface used by [...]]]></description>
		<wfw:commentRss>http://johnbender.us/2010/07/22/middleware-composition-and-monads/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bebop: resource routing for Sinatra/Monk</title>
		<link>http://johnbender.us/2010/01/10/bebop-resource-routing-for-sinatramonk/</link>
		<comments>http://johnbender.us/2010/01/10/bebop-resource-routing-for-sinatramonk/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 21:31:27 +0000</pubDate>
		<dc:creator>John Bender</dc:creator>
				<category><![CDATA[monk]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[sinatra]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[monkrb]]></category>
		<category><![CDATA[sinatrarb]]></category>

		<guid isPermaLink="false">http://nickelcode.com/?p=715</guid>
		<description><![CDATA[Motivation I&#8217;ve been using Monk with the armonk skeleton for the last couple of weeks to build a little app that monitors Craig&#8217;s List searches. Bebop aside, I&#8217;ve found it to be a really refreshing experience, but I knew when I started building the app that the vanilla routing DSL wasn&#8217;t going to meet my [...]]]></description>
		<wfw:commentRss>http://johnbender.us/2010/01/10/bebop-resource-routing-for-sinatramonk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using a haskell dfa type to match strings</title>
		<link>http://johnbender.us/2009/11/08/using-a-haskell-dfa-type-to-match-strings/</link>
		<comments>http://johnbender.us/2009/11/08/using-a-haskell-dfa-type-to-match-strings/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 22:15:28 +0000</pubDate>
		<dc:creator>John Bender</dc:creator>
				<category><![CDATA[functional programming]]></category>
		<category><![CDATA[haskell]]></category>

		<guid isPermaLink="false">http://nickelcode.com/?p=661</guid>
		<description><![CDATA[A friend of mine recently covered deterministic and non-deterministic finite state machines (automata for the cool kids) in one of his classes and passed along a sample problem for me to figure out. Informally, build a dfa that will match a given string against another string in the provided alphabet. An example of this class [...]]]></description>
		<wfw:commentRss>http://johnbender.us/2009/11/08/using-a-haskell-dfa-type-to-match-strings/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ruby Cons</title>
		<link>http://johnbender.us/2009/10/28/ruby-cons/</link>
		<comments>http://johnbender.us/2009/10/28/ruby-cons/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 03:55:27 +0000</pubDate>
		<dc:creator>John Bender</dc:creator>
				<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://nickelcode.com/?p=640</guid>
		<description><![CDATA[I think technically this counts as an application of my readings from Algebra of Programming. Satisfied. class Cons include Enumerable attr_accessor :child, :value def self.[](value, child=:empty) new(value, child) end def initialize(value, child) @value, @child = value, child end def each x = self while( x != :empty) yield x x = x.child end end end [...]]]></description>
		<wfw:commentRss>http://johnbender.us/2009/10/28/ruby-cons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

