<?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>Justin Leitgeb</title>
	<atom:link href="http://justinleitgeb.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://justinleitgeb.com</link>
	<description>Perspectives on Ruby and OOP from a developer in NY</description>
	<lastBuildDate>Tue, 27 Sep 2011 15:40:17 +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>Easy application-wide SSL configuration in Rails 3.2</title>
		<link>http://justinleitgeb.com/2011/09/easy-application-wide-ssl-configuration-in-rails-3-2/</link>
		<comments>http://justinleitgeb.com/2011/09/easy-application-wide-ssl-configuration-in-rails-3-2/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 15:38:46 +0000</pubDate>
		<dc:creator>Justin Leitgeb</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://justinleitgeb.com/?p=148</guid>
		<description><![CDATA[Rails 3.1 offers a handy way to secure your entire application behind https: just add config.force_ssl = true in your environment configuration file, and all requests will be directed to https.  Under the covers this handy snippet of code is loading the Rack::SSL middleware.  What happens if you want to exclude certain URL patterns from this restriction? [...]]]></description>
			<content:encoded><![CDATA[<p>Rails 3.1 offers a handy way to secure your entire application behind https: just add config.force_ssl = true in your environment configuration file, and all requests will be directed to https.  Under the covers this handy snippet of code is loading the <a href="https://github.com/josh/rack-ssl" target="_blank">Rack::SSL</a> middleware.  What happens if you want to exclude certain URL patterns from this restriction?  The Rack::SSL middleware accepts options that allow you to do this &#8211; you can pass it a Proc containing a regular expression which will alter the behavior of Rack::SSL on particular requests.</p>
<p>For example, if instead of using config.force_ssl = true, you used the following snippet your code it would not force ssl on pages under the path /public:</p>
<blockquote>
<pre>require "rack/ssl"
config.middleware.insert_before ActionDispatch::Static, Rack::SSL, :exclude =&gt; proc { |env| env['PATH_INFO'].start_with?('/public') }</pre>
</blockquote>
<p>Instead of jumping through these hoops in your configuration file, I thought that Rails should allow you to pass options to Rack::SSL. <a href="https://github.com/rails/rails/pull/3141" target="_blank"> I submitted a pull request</a> with my changes which was promptly accepted by José Valim, so if you&#8217;re either using edge Rails or 3.2 when it comes out you&#8217;ll be able to do the following to configure SSL in your application:</p>
<blockquote>
<pre>config.force_ssl = true
config.ssl_options = { :exclude =&gt; proc { |env| env['PATH_INFO'].start_with?('/public') } }</pre>
</blockquote>
<p>I hope that this change makes configuring your application to be safe a bit easier. Happy SSL&#8217;ing!</p>
]]></content:encoded>
			<wfw:commentRss>http://justinleitgeb.com/2011/09/easy-application-wide-ssl-configuration-in-rails-3-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing &#8216;propel&#8217;: push to your project the right way</title>
		<link>http://justinleitgeb.com/2011/05/introducing-propel-push-to-your-project-the-right-way/</link>
		<comments>http://justinleitgeb.com/2011/05/introducing-propel-push-to-your-project-the-right-way/#comments</comments>
		<pubDate>Tue, 17 May 2011 16:05:41 +0000</pubDate>
		<dc:creator>Justin Leitgeb</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://justinleitgeb.com/?p=140</guid>
		<description><![CDATA[At Stack Builders, we&#8217;re big on following best practices in our projects.  We use continuous integration, and pushing to a remote repository generally involves the following steps: Check to see if the continuous integration build is passing Pull any upstream changes Run the local test suite Push to the remote repository if the local tests [...]]]></description>
			<content:encoded><![CDATA[<p>At <a href="http://stackbuilders.com" target="_blank">Stack Builders</a>, we&#8217;re big on following best practices in our projects.  We use continuous integration, and pushing to a remote repository generally involves the following steps:</p>
<ol>
<li>Check to see if the continuous integration build is passing</li>
<li>Pull any upstream changes</li>
<li>Run the local test suite</li>
<li>Push to the remote repository if the local tests are passing</li>
</ol>
<p>Often, we skipped the first step, since it was annoying to check the CI server manually, and running the local test suite is generally a good enough indication that the world is OK before pushing.  However, when the local build takes upwards of 20 minutes you may not want to wait to see a local failure to find out that CI was failing.  Ideally, you want to check if the remote build is failing, and if it is, wait until it passes before pulling and running the build.</p>
<p>I wrote a gem, <a href="http://rubygems.org/gems/propel" target="_blank">propel</a>, that encapsulates this logic into a single command.  It currently works with Jenkins, CI Joe, and Team City, and support for other CI servers is easy to add.  You can have it abort if the CI build is failing, or have it wait for you while someone else fixes the build.</p>
<p>Additionally, it tries to be helpful if you encounter anomalous situations while pushing your changes &#8211; if you ended up with a detached HEAD, it aborts with a helpful message before any harm is done to the repository.</p>
<p>Installation is easy &#8211; just &#8216;gem install propel&#8217;.  You can run it by simply typing &#8216;propel&#8217; inside of your local project repository.  Configuring the url of the CI server can be done via the command line, or it can be saved in a .propel file at your project root.</p>
<p>Propel is still pretty new, but it has been working well for us on a few projects.  Check it out and let us know what you think.  Happy propelling!</p>
]]></content:encoded>
			<wfw:commentRss>http://justinleitgeb.com/2011/05/introducing-propel-push-to-your-project-the-right-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NYC Amazon Web Services Meetup Talk</title>
		<link>http://justinleitgeb.com/2010/11/nyc-amazon-web-services-meetup-talk/</link>
		<comments>http://justinleitgeb.com/2010/11/nyc-amazon-web-services-meetup-talk/#comments</comments>
		<pubDate>Thu, 11 Nov 2010 03:56:04 +0000</pubDate>
		<dc:creator>Justin Leitgeb</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://justinleitgeb.com/?p=131</guid>
		<description><![CDATA[I just finished giving a talk to the NYC Amazon Web Services meetup.  I enjoyed talking with those attending, and learning from Matt Tavis, an AWS Solutions Architect, who also presented on AWS&#8217; offerings and application scaling on the cloud in general.  My slides from the talk (with just a few additions to the NYC.rb [...]]]></description>
			<content:encoded><![CDATA[<p>I just finished <a href="http://www.meetup.com/AWSnewyork/calendar/14940424/" target="_blank">giving a talk</a> to the <a href="http://www.meetup.com/AWSnewyork" target="_blank">NYC Amazon Web Services meetup</a>.  I enjoyed talking with those attending, and learning from Matt Tavis, an AWS Solutions Architect, who also presented on AWS&#8217; offerings and application scaling on the cloud in general.  My slides from the talk (with just a few additions to the <a href="http://nycruby.org/wiki/" target="_self">NYC.rb</a> talk I gave yesterday evening) are <a href="http://justinleitgeb.com/wp-content/uploads/2010/11/Scalable_web_site_antipatterns_AWS_Meetup.ppt">available for download</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://justinleitgeb.com/2010/11/nyc-amazon-web-services-meetup-talk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NYC.rb talk: Scalable web site anti-patterns</title>
		<link>http://justinleitgeb.com/2010/11/nyc-rb-talk-scalable-web-site-anti-patterns/</link>
		<comments>http://justinleitgeb.com/2010/11/nyc-rb-talk-scalable-web-site-anti-patterns/#comments</comments>
		<pubDate>Wed, 10 Nov 2010 03:21:10 +0000</pubDate>
		<dc:creator>Justin Leitgeb</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://justinleitgeb.com/?p=123</guid>
		<description><![CDATA[This evening I gave a brief talk on &#8216;Scalable web site anti-patterns&#8217; to the NYC.rb meetup.  You can download the slides from the discussion.  Tomorrow, I&#8217;ll be giving the full version of this talk on problematic web architectures at the AWS meetup.  I&#8217;ll post the slides from that talk, and I hope to see some [...]]]></description>
			<content:encoded><![CDATA[<p>This evening I gave a brief talk on &#8216;Scalable web site anti-patterns&#8217; to the NYC.rb meetup.  <a title="slides from nyc.rb talk on scalability anti-patterns" href="http://justinleitgeb.com/wp-content/uploads/2010/11/Scalable_web_site_antipatterns_nyc_rb.ppt" target="_blank">You can download the slides from the discussion</a>.  <a href="http://www.meetup.com/AWSnewyork/calendar/14940424/" target="_blank">Tomorrow, I&#8217;ll be giving the full version of this talk on problematic web architectures at the AWS meetup</a>.  I&#8217;ll post the slides from that talk, and I hope to see some Rubyists in the crowd as well if you can make it!</p>
]]></content:encoded>
			<wfw:commentRss>http://justinleitgeb.com/2010/11/nyc-rb-talk-scalable-web-site-anti-patterns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails 3.0 upgrade: Watch out for differences in mass assignment checks on has_many :through associations</title>
		<link>http://justinleitgeb.com/2010/09/rails-3-0-upgrade-watch-out-for-differences-in-mass-assignment-checks-on-has_many-through-associations/</link>
		<comments>http://justinleitgeb.com/2010/09/rails-3-0-upgrade-watch-out-for-differences-in-mass-assignment-checks-on-has_many-through-associations/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 04:43:23 +0000</pubDate>
		<dc:creator>Justin Leitgeb</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://justinleitgeb.com/?p=115</guid>
		<description><![CDATA[Please see comment below &#8211; looks like this has been taken care of in Rails 3.0.1. While porting a small Rails application, Listable, to Rails 3.0, I found an interesting difference in the behavior of the two frameworks: attr_accessible on a model used for a join relation between two entities works when using &#8216;&#60;&#60;&#8217; to [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Please see comment below &#8211; looks like this has been taken care of in Rails 3.0.1.</strong></p>
<p>While porting a small Rails application, Listable, to Rails 3.0, I found an interesting difference in the behavior of the two frameworks: attr_accessible on a model used for a join relation between two entities works when using &#8216;&lt;&lt;&#8217; to add records in Rails 3.0, while in Rails prior to 3.0 it is silently ignored.   It took me a moment to figure out what was happening, so I figured I&#8217;d leave a note here in case it helps someone else in porting their app to the newest Rails framework.</p>
<p>Taking a step back, here is a simple case that demonstrates the difference between Rails version 2 and Rails version 3 with respect to &lt;&lt; (aliased as &#8216;concat&#8217; and &#8216;push&#8217; in the ActiveRecord framework) when adding to a collection established using has_many :through.  Given three models: User, List, and UserListLink (which has foreign keys for user and list):</p>
<pre>class User &lt; ActiveRecord::Base</pre>
<pre style="padding-left: 30px;">has_many :user_list_links, :dependent =&gt; :destroy</pre>
<pre style="padding-left: 30px;">has_many :lists, :through =&gt; :user_list_links</pre>
<pre>end</pre>
<pre>class List &lt; ActiveRecord::Base</pre>
<pre style="padding-left: 30px;">has_many :user_list_links, :dependent =&gt; :destroy</pre>
<pre style="padding-left: 30px;">has_many :users, :through =&gt; :user_list_links</pre>
<pre>end</pre>
<pre>class UserListLink &lt; ActiveRecord::Base</pre>
<pre style="padding-left: 30px;">belongs_to :user</pre>
<pre style="padding-left: 30px;">belongs_to :list</pre>
<pre>end</pre>
<p>In both Rails 2 and 3, the following works:</p>
<pre>u = User.create</pre>
<pre>l = List.create</pre>
<pre>u.lists &lt;&lt; l</pre>
<p>However, if you add attr_accessible [] to UserListLink, under Rails 3 the UserListLink that is automatically generated will have nil/null values for both list_id and user_id. You&#8217;ll see the expected message in the Rails log, &#8220;WARNING: Can&#8217;t mass-assign protected attributes: list_id, user_id&#8221;, which indicates that Rails uses mass assignment to create this intermediary object. In my case, removing the attr_accessible line in my code allowed &#8216;&lt;&lt;&#8217; to work as it did before upgrading to Rails 3.</p>
<p>I&#8217;m not sure how I feel about the change in behavior in ActiveRecord 3 where mass assignment protection is triggered by the &#8216;concat&#8217; method on a has_many :through relationship.  I suppose whether or not this is &#8216;correct&#8217; behavior depends on whether there is a chance for user-generated data to be passed into the attribute hash used to construct the intermediary object.  If so, this is probably a nice fix in ActiveRecord 3.    Otherwise, though, it may help to bypass the mass assignment check when saving intermediary objects using concat.</p>
]]></content:encoded>
			<wfw:commentRss>http://justinleitgeb.com/2010/09/rails-3-0-upgrade-watch-out-for-differences-in-mass-assignment-checks-on-has_many-through-associations/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>In the Kitchen: What&#8217;s behind Clean.ly</title>
		<link>http://justinleitgeb.com/2009/12/in-the-kitchen-whats-behind-clean-ly/</link>
		<comments>http://justinleitgeb.com/2009/12/in-the-kitchen-whats-behind-clean-ly/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 12:13:40 +0000</pubDate>
		<dc:creator>Justin Leitgeb</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://justinleitgeb.com/?p=103</guid>
		<description><![CDATA[The App that I submitted for the NYC BigApps contest has been getting some attention after it was mentioned in Wired and I wanted to write about the technology that I used to create it.  The core of the application is built using Ruby on Rails, and it talks to a MySQL database using ActiveRecord. [...]]]></description>
			<content:encoded><![CDATA[<p>The App that I submitted for <a href="http://www.nycbigapps.com/" target="_blank">the NYC BigApps contest</a> has been getting some attention after <a href="http://www.wired.com/epicenter/2009/12/new-york-citys-best-apps/" target="_blank">it was mentioned in Wired</a> and I wanted to write about the technology that I used to create it.  The core of the application is built using Ruby on Rails, and it talks to a MySQL database using ActiveRecord.  More interestingly, though, I added some other technologies to make pages load fast and to help scale the searching engine beyond what MySQL is able to achieve.  For this, I leveraged <a href="http://www.sphinxsearch.com/" target="_blank">Sphinx search</a> as well as <a href="http://varnish.projects.linpro.no/" target="_blank">varnish page caching</a>.</p>
<p>First, my goal in creating <a href="http://clean.ly" target="_blank">Clean.ly</a> was to add a layer of information on top of the NYC restaurant data to make them more interesting and useful.  Geocoding the restaurant addresses was a first step in this process, which was easily accomplished using the Google API.  Next, I grabbed some other information about the restaurants, including type of food, from other freely available sources on the web.</p>
<p>For these data mining tasks, I needed to serialize a bunch of operations to make sure I didn&#8217;t go over API quotas.  I also wanted to create a system that could accept data from different inputs without much trouble later.  To meet these needs, I used a Kestrel queue to serialize HTTP retrievals from various providers.</p>
<p>Once I had the necessary data in place, Sphinx was an obvious choice to bring these data in front of the user on demand.</p>
<p>For those of you who have used the fulltext searching engine in Sphinx, it&#8217;s easy to envision how restaurant searching based on name or &#8220;tag&#8221; (such as type of food) would work.  A lesser known fact about Sphinx is that in the newest releases, simple geodistance calculations are supported.  The only real trick in implementing this part of the Clean.ly was that the latitude and longitude obtained from Google had to be converted to radians before piping them to the Sphinx indexer.  After that, I had near-instant results with distance calculations from an input address, making it possible for users to search for restaurants close to where they want to eat.</p>
<p>Once I had geodist calculations in Sphinx working, I wanted to make sure that pages loaded quickly.  Since Clean.ly doesn&#8217;t really have user-modifiable content, I immediately thought of page caching.  In other work that I&#8217;ve done scaling high-performance web sites, I had implemented Varnish, a reverse page caching daemon, and had great success.  It&#8217;s an extremely elegant and easy-to-use program which I&#8217;d highly recommend checking out for anyone interested in scaling high volume web sites.</p>
<p>Implementing Varnish for Clean.ly turned out to be a fairly straight-forward task. Clean.ly only has one server, a small instance on EC2 that I also use to host a variety of other small Rails projects.  Varnish proxies port 80 on this instance to another port where Apache is listening, and it short-circuits and returns results for pages stored in the page cache.</p>
<p>In another post, I&#8217;d like to go into more detail on using Varnish with Rails applications.  For now, though, I hope that you enjoy using <a href="http://clean.ly" target="_blank">Clean.ly</a>.  Be sure to check it out, as well as <a href="http://www.nycbigapps.com/application-gallery" target="_blank">the other great submissions</a> to the NYC BigApps contest.</p>
]]></content:encoded>
			<wfw:commentRss>http://justinleitgeb.com/2009/12/in-the-kitchen-whats-behind-clean-ly/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Free Listable iPhone App Available in App Store</title>
		<link>http://justinleitgeb.com/2009/11/free-listable-iphone-app-available-in-app-store/</link>
		<comments>http://justinleitgeb.com/2009/11/free-listable-iphone-app-available-in-app-store/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 15:36:23 +0000</pubDate>
		<dc:creator>Justin Leitgeb</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[listable]]></category>

		<guid isPermaLink="false">http://justinleitgeb.com/?p=97</guid>
		<description><![CDATA[My latest iPhone app, Listable, is now available on the App Store.  I started working on Listable a couple of months ago after I looked all over the App store for a shared ToDo list application that was elegant and simple.  When I didn&#8217;t find anything that met my standards, I started writing my own. [...]]]></description>
			<content:encoded><![CDATA[<p>My latest iPhone app, Listable, is now <a href="http://itunes.apple.com/app/listable/id340207373?mt=8">available on the App Store</a>.  I started working on Listable a couple of months ago after I looked all over the App store for a shared ToDo list application that was elegant and simple.  When I didn&#8217;t find anything that met my standards, I started writing my own.</p>
<p>My wife, Lori, and I have been using Listable, both on our iPhone devices and on the Web for the last month, and we have lists of groceries, tasks, movies that we want to watch, and wines that we like. It has been helpful for both Lori and I professionally, as I found out that Lori had been keeping a list of things that needed to be done on her dissertation, and I used it to keep track of bugs that needed to be fixed in Listable.</p>
<p>In our personal lives, it has been helpful as well, as Lori and I are keeping a list of possible baby names for our first, a girl, due on December 30th.  Names we like more get re-arranged to the top, and we mark as &#8220;completed&#8221; names that we&#8217;ve considered and discarded.  Maybe we&#8217;ll even share that list with our daughter when she&#8217;s old enough to appreciate the collaborative process that went into giving her a name!</p>
<p>We use the Listable web site, <a href="http://listableapp.com" target="_blank">listableapp.com</a>, to manage lists when we&#8217;re on our computers, and the iPhone app when we&#8217;re not at home.  The iPhone app includes push notifications so that you know immediately when a collaborator makes a change to one of your lists.</p>
<p>Listable for the iPhone is <a href="http://itunes.apple.com/app/listable/id340207373?mt=8">a free download in the App Store</a>.</p>
<p>Have you tried Listable?  Let me know what you think in the comments!</p>
]]></content:encoded>
			<wfw:commentRss>http://justinleitgeb.com/2009/11/free-listable-iphone-app-available-in-app-store/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Users of SubwayDelay iPhone app now able to see scheduled advisory information along with up-to-the-minute service alerts</title>
		<link>http://justinleitgeb.com/2009/10/subwaydelay-update-adds-mta-advisories/</link>
		<comments>http://justinleitgeb.com/2009/10/subwaydelay-update-adds-mta-advisories/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 13:00:56 +0000</pubDate>
		<dc:creator>Justin Leitgeb</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[subwaydelay]]></category>

		<guid isPermaLink="false">http://justinleitgeb.com/?p=93</guid>
		<description><![CDATA[A newly released update makes SubwayDelay the only iPhone application to integrate both service alerts and scheduled advisory information available in an easy-to-read format for NYC subway riders.]]></description>
			<content:encoded><![CDATA[<p>An update to <a href="http://subwaydelay.com" target="_blank">SubwayDelay</a> is now <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=330045779&amp;mt=8" target="_blank">available in the App Store</a>.  Now users are able to see scheduled advisories from the MTA alongside recent service alerts.  I decided to add this feature based on user feedback and my own testing, which quickly showed that advisories on scheduled services, which include notices that trains are &#8220;going express&#8221; or being re-routed because of scheduled maintenance, are as important as alerts on things like mechanical failures causing trains to run more slowly than usual.</p>
<p>This release makes SubwayDelay the only iPhone application to integrate both service alerts and scheduled advisory information available in an easy-to-read format for NYC subway riders.</p>
<p>More information is available at <a href="http://subwaydelay.com" target="_blank">SubwayDelay.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://justinleitgeb.com/2009/10/subwaydelay-update-adds-mta-advisories/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recent post featured on Rails Envy</title>
		<link>http://justinleitgeb.com/2009/10/recent-post-featured-on-rails-envy/</link>
		<comments>http://justinleitgeb.com/2009/10/recent-post-featured-on-rails-envy/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 13:13:18 +0000</pubDate>
		<dc:creator>Justin Leitgeb</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://justinleitgeb.com/?p=91</guid>
		<description><![CDATA[Those of you who do Ruby development are probably familiar with the popular podcast &#8220;Rails Envy&#8220;.  A recent episode featured a blog post that I wrote on iPhone development with the lightweight Ruby web framework &#8220;Sinatra&#8221;.  Check it out when you get a chance, as it has some good information on other up-and-coming Ruby libraries.]]></description>
			<content:encoded><![CDATA[<p>Those of you who do Ruby development are probably familiar with the popular podcast &#8220;<a href="http://railsenvy.com" target="_blank">Rails Envy</a>&#8220;.  A recent episode featured a blog post that I wrote on iPhone development with the lightweight Ruby web framework &#8220;Sinatra&#8221;.  <a href="http://railsenvy.com/2009/10/16/episode-096" target="_blank">Check it out</a> when you get a chance, as it has some good information on other up-and-coming Ruby libraries.</p>
]]></content:encoded>
			<wfw:commentRss>http://justinleitgeb.com/2009/10/recent-post-featured-on-rails-envy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SubwayDelay iPhone app released</title>
		<link>http://justinleitgeb.com/2009/10/subwaydelay-iphone-app-released/</link>
		<comments>http://justinleitgeb.com/2009/10/subwaydelay-iphone-app-released/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 13:04:28 +0000</pubDate>
		<dc:creator>Justin Leitgeb</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://justinleitgeb.com/?p=80</guid>
		<description><![CDATA[The SubwayDelay iPhone application provides NYC subway riders with up-to-the-minute information on which trains might be running late based on  MTA-provided service alerts.]]></description>
			<content:encoded><![CDATA[<p>Last night my iPhone app &#8220;<a href="http://subwaydelay.com" target="_blank">SubwayDelay</a>&#8221; was released.  SubwayDelay provides NYC subway riders with up-to-the-minute information on which trains might be running late, based on the MTA-provided service alerts.  Debating  if you should jump on the C train instead of waiting for the A?  Open up SubwayDelay as you&#8217;re headed to the station and you&#8217;ll see the latest service alerts from the lines you&#8217;re interested in.  SubwayDelay allows you to keep a list of &#8220;favorite&#8221; lines so that they&#8217;re close at hand as you&#8217;re headed to the station near your apartment or work place.</p>
<p>SubwayDelay is not affiliated with the MTA.  Unfortunately, the MTA has yet to release easy access to data on service alerts.  This application rests on <a href="http://mtafeeds.com" target="_blank">MTA Feeds</a> (another site that I created), which provides free access to the MTA data in an easy-to-consume format for transit software developers and subway riders.</p>
]]></content:encoded>
			<wfw:commentRss>http://justinleitgeb.com/2009/10/subwaydelay-iphone-app-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

