<?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>Flowdock &#187; Rails</title>
	<atom:link href="http://blog.flowdock.com/category/rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.flowdock.com</link>
	<description></description>
	<lastBuildDate>Thu, 19 Jan 2012 16:12:18 +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>Rails 3.1 Asset Pipeline in the Real World</title>
		<link>http://blog.flowdock.com/2011/06/14/rails-3-1-asset-pipeline-in-the-real-world/</link>
		<comments>http://blog.flowdock.com/2011/06/14/rails-3-1-asset-pipeline-in-the-real-world/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 13:07:10 +0000</pubDate>
		<dc:creator>Ville Lautanala</dc:creator>
				<category><![CDATA[Flowdock]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[sprockets]]></category>

		<guid isPermaLink="false">http://blog.nodeta.com/?p=992</guid>
		<description><![CDATA[The new asset pipeline is the single most important new feature in Rails 3.1. DHH used most of his keynote at RailsConf 2011 to explain its new features. In this blog post, I&#8217;ll go through its implications to an existing application and explain how we integrated it to our workflow at Flowdock. The Rails 3.1 [...]]]></description>
			<content:encoded><![CDATA[<p>The new asset pipeline is the single most important new feature in Rails 3.1. DHH used most of his <a href="http://www.farbeyondprogramming.com/2011/05/64-rails-david-heinemeier-hansson-explaining-the-asset-pipeline">keynote at RailsConf 2011</a> to explain its new features. In this blog post, I&#8217;ll go through its implications to an existing application and explain how we integrated it to our workflow at <a href="http://flowdock.com">Flowdock</a>.</p>
<p>The Rails 3.1 asset pipeline integrates well with CDNs like Amazon&#8217;s <a href="http://aws.amazon.com/cloudfront/">CloudFront</a>: just point your distribution to your web server. Most likely, you won&#8217;t need your old hacks for assets.</p>
<h3 id="what8217s_new">What&#8217;s new</h3>
<p>The new asset pipeline in Rails 3.1 makes assets first class citizens in Rails. Assets are moved from public directory under <tt>apps/assets</tt> and they receive much more attention from Rails. Asset files can inline other asset files using requires and gem dependencies can provide asset files for the application to use.</p>
<p>This means that you don&#8217;t have to include jquery.js to your repository. Generators don&#8217;t have to worry about creating proper static assets under your public folder. Assets from other sources work just like those which are under your <tt>app/assets</tt> folder.</p>
<p>The static asset URL scheme has changed. Compiled assets are served under <tt>/assets</tt>. In production mode, generated files include an MD5 hash as part of the file name, which is a better cache buster than the previous timestamp scheme. Asset pipeline also generates URLs inside stylesheets so that they can link to generated files.</p>
<p>A stylesheet stored at <tt>app/assets/application.css</tt> will be served as <tt>/assets/application.css</tt>. Most likely, this layout will contain dependency declarations such as inclusion of CSS reset. Thus, your new <tt>application.css</tt> would become</p>
<div class="codecolorer-container css default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">/*<br />
&nbsp;*= require blueprint/reset<br />
&nbsp;*= require blueprint/typography<br />
&nbsp;*/</span><br />
body <span style="color: #00AA00;">&#123;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span>&lt;%<span style="color: #00AA00;">=</span> asset_path <span style="color: #ff0000;">&quot;sunshine-rainbows-and-lollipops.png&quot;</span> %<span style="color: #00AA00;">&gt;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span><br />
&nbsp; <span style="color: #808080; font-style: italic;">/* You have to use ERB to link to asset pipelined resource */</span><br />
<span style="color: #00AA00;">&#125;</span><br />
<span style="color: #808080; font-style: italic;">/* Rest of stylesheet */</span></div></div>
<p>At the heart of the pipeline is <a href="https://github.com/sstephenson/sprockets">Sprockets 2.0</a>. In addition to dependency management, Sprockets will allow any number of filters to be used with asset files. By adding extensions to the files names one can control which filters are used. For example, it is possible to run a file through SASS and ERB by naming it <tt>stylesheet.css.scss.erb</tt>. JS files can also be filtered using both CoffeeScript and ERB.</p>
<p>Among the more controversial changes, <a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a> and <a href="http://sass-lang.com/">SASS</a> are now included in the default template. It is possible to use both CoffeeScript and SASS with old style assets. Not much has changed in this respect, DHH just is more vocal about what you should use.</p>
<p><img src="http://i.imgur.com/FQK8e.gif" alt="Deal with it" /></p>
<p>Additionally, support for JS minification comes built-in with Rails. The default is to use <a href="https://github.com/mishoo/UglifyJS/">UglifyJS</a> via the <a href="https://github.com/lautis/uglifier">Uglifier</a> gem. Existing apps can use this by adding it in their Gemfile and setting the minificator in the (production) environment configuration.</p>
<p><tt>Gemfile</tt>:</p>
<div class="codecolorer-container ruby default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">gem <span style="color:#996600;">&quot;uglifier&quot;</span></div></div>
<p><tt>config/enfironments/production.rb</tt>:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">config.assets.js_compressor &nbsp;= :uglifier</div></div>
<h3 id="upgrading_existing_application">Upgrading existing application</h3>
<p>Running rake rails:update will show how your configuration files should be updated for them to work with new asset pipeline. At a bare minimum, you&#8217;ll only need to add</p>
<div class="codecolorer-container ruby default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">config.<span style="color:#9900CC;">assets</span>.<span style="color:#9900CC;">enabled</span> = <span style="color:#0000FF; font-weight:bold;">true</span></div></div>
<p>to your application.rb. After that stylesheets, javascripts and images can be moved under <tt>app/assets</tt>.</p>
<p>There are a few things to change to make your assets work. All absolute paths to images in <em>stylesheets</em> and <em>asset helpers</em> are broken and should be replaced with call to relative helpers, e.g. <tt>image_path /images/subdir/rails.png</tt> should be <tt>asset_path "subdir/rails.png"</tt>. This way Sprockets will be able to figure out where the asset is served. It is especially neat in production where file names will have MD5 hash suffix for more efficient caching.</p>
<p>You&#8217;ll also want to put this to your <tt>.gitignore</tt> file:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">.sass-cache/<br />
public/assets/</div></div>
<h3 id="serving_assets_in_production">Serving assets in production</h3>
<p>Serving assets in production environment is much more pleasant with the new pipeline. First of all, instead of a timestamp, an MD5 hash is used to bust caches. Second, this is not part of the query string but used as suffix in file name. These MD5 suffixed files really exist and you can have multiple versions coexist at the same time.</p>
<p>Because the URIs are unique not only by query string but also file name, CloudFront can be easily used to serve your assets. Create a new custom origin distribution with your host as origin DNS and use the CloudFront domain as your asset hosts. That&#8217;s really all you need barring some web server configuration: check <a href="http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/index.html?CustomOriginBestPractices.html">CloudFront custom origin best practices</a>.</p>
<p>One thing to notice is that the assets should be precompiled before your site goes live to reduce load. There is a rake task for this, @rake assets:precompile@. We put this in our <tt>deploy.rb</tt>:</p>
<div class="codecolorer-container ruby default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">before :<span style="color:#996600;">&quot;deploy:symlink&quot;</span>, :<span style="color:#996600;">&quot;deploy:assets&quot;</span>;<br />
<br />
desc <span style="color:#996600;">&quot;Compile asets&quot;</span><br />
task <span style="color:#ff3333; font-weight:bold;">:assets</span> <span style="color:#9966CC; font-weight:bold;">do</span><br />
&nbsp; run <span style="color:#996600;">&quot;cd #{release_path}; RAILS_ENV=#{rails_env} bundle exec rake assets:precompile&quot;</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span></div></div>
<p>If you have multiple CSS and JS files, you might have to specify manually which of them are precompiled by adding them to the <tt>config.assets.precompile</tt> array.</p>
<p>Compiling your assets require that you have a JS runtime available if you use either CoffeeScript or Uglifier. We use <a href="https://github.com/cowboyd/therubyracer">therubyracer</a>, but your mileage may vary. Installing node.js is also a good alternative.</p>
<h3 id="retrospective">Retrospective</h3>
<p>Is this really better than the old setup? Did we learn anything?</p>
<p>First, the development and production setups are now more similar. Previously multiple JS files containing our application code were loaded in development, but now they&#8217;re concatenated to one big file. We are more likely to run into weird bugs before code is deployed to QA, but on the other hand line numbers aren&#8217;t meaningful for debugging purposes. When using CoffeeScript, this point is moot.</p>
<p>Second, we are happy that we could remove our old hacks to get <a href="http://flowdock.com">Flowdock</a> deployed. Instead of the combination of patched cloudfront_asset_host gem and some other hacks, we can compile our assets to be served via CloudFront using the built-in rake task.</p>
<p>Third, our deployment times were reduced by over a minute as we don&#8217;t need to sync our asset files with the S3 bucket.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flowdock.com/2011/06/14/rails-3-1-asset-pipeline-in-the-real-world/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Avoiding Rails session race conditions &#8211; now with PostgreSQL</title>
		<link>http://blog.flowdock.com/2009/03/27/avoiding-rails-session-race-conditions-postgresql/</link>
		<comments>http://blog.flowdock.com/2009/03/27/avoiding-rails-session-race-conditions-postgresql/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 19:04:35 +0000</pubDate>
		<dc:creator>Otto Hilska</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[session]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[store]]></category>

		<guid isPermaLink="false">http://blog.nodeta.fi/?p=87</guid>
		<description><![CDATA[Long story short: Ruby on Rails session handling does have some concurrency problems. Especially with AJAX requests this is a very potential scenario: Request 1 loads user session Request 2 loads user session Request 1 stores something to the session Request 2 stores something to the session Request 1 writes its session data to the [...]]]></description>
			<content:encoded><![CDATA[<p>Long story short: Ruby on Rails session handling <a href="http://www.texperts.com/2007/05/01/race-conditions-in-rails-sessions-and-how-to-fix-them/">does have some concurrency problems</a>. Especially with AJAX requests this is a very potential scenario:</p>
<ol>
<li>Request 1 loads user session</li>
<li>Request 2 loads user session</li>
<li>Request 1 stores something to the session</li>
<li>Request 2 stores something to the session</li>
<li>Request 1 writes its session data to the database</li>
<li>Request 2 writes its session data to the database</li>
</ol>
<p>Now, of course whatever request 1 wrote there is pretty much lost. These bugs are hard to find, and in my case the site had been in production use for 18 months before this really became a problem.</p>
<p>I soon found out that <a href="http://www.spacevatican.org/">Frederick Cheung</a> had already written a plugin called <a href="http://github.com/fcheung/smart_session_store/tree">Smart Session Store</a> to handle these race conditions by locking the session row when needed. However, it didn&#8217;t work with the latest PostgreSQL drivers.</p>
<p>I&#8217;ve fixed this to work with combinations of the pg/postgers driver and Rails 2.2/2.3 <a href="http://github.com/mutru/smart_session_store/tree/master">in my smart_session_store fork</a>. The tests are also now actually testing something. I&#8217;ve sent a pull request, so everyone should be able to enjoy it soon.</p>
<p>It&#8217;s really a good practice to somehow handle session concurrency even before it&#8217;s a problem, because these kinds of bugs tend to appear when you least expect it.</p>
<p>We can test this by adding two actions to our controller. They should both write something to the session, and the other one should <a href="http://apidock.com/ruby/Kernel/sleep">sleep</a> a while to make sure that its changes are likely to be lost.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flowdock.com/2009/03/27/avoiding-rails-session-race-conditions-postgresql/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>APIdock 1.4 with Rails 2.3</title>
		<link>http://blog.flowdock.com/2009/03/16/apidock-14-with-rails-23/</link>
		<comments>http://blog.flowdock.com/2009/03/16/apidock-14-with-rails-23/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 19:51:44 +0000</pubDate>
		<dc:creator>Mikael Roos</dc:creator>
				<category><![CDATA[APIdock]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://blog.nodeta.fi/?p=84</guid>
		<description><![CDATA[APIdock 1.4 (IRON STEVE) was deployed a few minutes ago. The release consists of mostly bug fixes and some minor stuff. The docs for the new Ruby on Rails 2.3.2 with Rack and Metal and all kinds of other awesomeness are being imported as I&#8217;m writing this. Check the new docs here. Update: RSpec 1.2 was [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://apidock.com">APIdock</a> 1.4 (IRON STEVE) was deployed a few minutes ago. The release consists of mostly bug fixes and some minor stuff.</p>
<p>The docs for the new <a href="http://weblog.rubyonrails.org/2009/3/16/rails-2-3-templates-engines-rack-metal-much-more">Ruby on Rails 2.3.2</a> with Rack and Metal and all kinds of other awesomeness are being imported as I&#8217;m writing this. Check the new docs <a href="http://apidock.com/rails">here</a>.</p>
<p><strong>Update: </strong><a href="http://rspec.info/documentation/changes-rspec.html">RSpec 1.2</a> was just imported as well. <a href="http://apidock.com/rspec">To the docs</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flowdock.com/2009/03/16/apidock-14-with-rails-23/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Stopping your Rails application with Phusion Passenger</title>
		<link>http://blog.flowdock.com/2009/03/11/stopping-your-rails-application-with-phusion-passenger/</link>
		<comments>http://blog.flowdock.com/2009/03/11/stopping-your-rails-application-with-phusion-passenger/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 14:38:15 +0000</pubDate>
		<dc:creator>Otto Hilska</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[mod_rails]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[stop]]></category>

		<guid isPermaLink="false">http://blog.nodeta.fi/?p=83</guid>
		<description><![CDATA[I must not be the only one who occasionally wants to stop a Ruby on Rails application. There are long-running and risky database schema migrations and data migrations, and you don&#8217;t want users fiddling the system in the middle of the deployment. With a Mongrel-based setup it was easy to set up a 503 (Service [...]]]></description>
			<content:encoded><![CDATA[<p>I must not be the only one who occasionally wants to stop a Ruby on Rails application. There are long-running and risky database schema migrations and data migrations, and you don&#8217;t want users fiddling the system in the middle of the deployment.</p>
<p>With a Mongrel-based setup it was easy to set up a 503 (Service unavailable) error page and then just shut down all the Mongrels, so that Apache could give users a maintenance page. Using <a href="http://www.modrails.com/">mod_rails</a> (Phusion Passenger), only restart is supported out-of-the-box.</p>
<p>However, it&#8217;s possible to use mod_rewrite to prevent users from accessing your site during the deployment. Try this in your Apache virtual host configuration file:</p>
<pre>
# This option is not needed with Passenger >=2.1.1.
RailsAllowModRewrite on

ErrorDocument 503 /503.html

RewriteEngine on

RewriteCond %{DOCUMENT_ROOT}/../tmp/stop.txt -f
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /$1 [R=503,L]
</pre>
<p>Basically the last three lines mean:</p>
<ol>
<li>If there is a <i>tmp/stop.txt</i> file</li>
<li>and user is requesting a file that does not directly exist in the file system</li>
<li>then return error 503 and render the appropriate maintenance page</li>
</ol>
<p>It doesn&#8217;t actually stop your Rails processes, though. They will die when Passenger times out.</p>
<p>Now it&#8217;s also easy to incorporate this to your Capistrano configuration:</p>
<pre>
namespace :passenger do
  desc "Restart Passenger"
  task :restart, :roles => :app do
    run "touch #{current_path}/tmp/restart.txt"
  end

  desc "Stop Passenger"
  task :stop, :roles => :app do
    run "touch #{current_path}/tmp/stop.txt"
  end

  desc "Start (or un-stop) Passenger"
  task :start, :roles => :app do
    run "rm -f #{current_path}/tmp/stop.txt"
  end
end
</pre>
<p>After this it&#8217;s safe to deploy big new releases without completely taking down your Apache.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flowdock.com/2009/03/11/stopping-your-rails-application-with-phusion-passenger/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>APIdock to be built-in in the Rails Textmate bundle?</title>
		<link>http://blog.flowdock.com/2009/03/05/apidock-to-be-built-in-in-the-rails-textmate-bundle/</link>
		<comments>http://blog.flowdock.com/2009/03/05/apidock-to-be-built-in-in-the-rails-textmate-bundle/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 11:05:24 +0000</pubDate>
		<dc:creator>Mikael Roos</dc:creator>
				<category><![CDATA[APIdock]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[drnic]]></category>
		<category><![CDATA[lautis]]></category>
		<category><![CDATA[Textmate]]></category>

		<guid isPermaLink="false">http://blog.nodeta.fi/?p=81</guid>
		<description><![CDATA[In addition to all kinds of general Ruby fame, Dr. Nic is the creator and maintainer of the Ruby on Rails Textmate bundle. Now, it seems that just a few hours ago he noticed that our Ville Lautanala aka Lautis had written a few good bugfixes and changes to the bundle. He then went ahead [...]]]></description>
			<content:encoded><![CDATA[<p>In addition to all kinds of general Ruby fame, <a href="http://drnicwilliams.com/">Dr. Nic</a> is the <span style="text-decoration: line-through;">creator and</span> maintainer of the Ruby on Rails Textmate bundle. Now, it seems that just a few hours ago he noticed that our Ville Lautanala aka <a href="http://github.com/lautis">Lautis</a> had written a few good bugfixes and changes to the bundle. He then went ahead and <a href="http://github.com/drnic/ruby-on-rails-tmbundle/commit/9f8336addeab500c69d30023eddf0a3f92b3e099">merged them to the master branch</a>.  And the real kicker here is, that among those changes was the <a href="http://github.com/drnic/ruby-on-rails-tmbundle/commit/b8c5f160014112a4afa5a90ca92505b1b8ab0bc2">change</a> that adds <a href="http://apidock.com">APIdock</a>-powered documentation macros. Let&#8217;s hope that this change sticks so all Rails codin&#8217; Textmate users will be able to enjoy the rich documentation browsing that APIdock provides.</p>
<p>Will the <a href="http://github.com/drnic/ruby-tmbundle/tree/master">Ruby bundle</a>, which is also maintained by Dr. Nic, follow next?</p>
<p><strong>Update:</strong> Origin of the bundle can be changed using following commands:</p>
<p>% cd ~/Library/Application\ Support/Textmate/Bundles/Ruby\ On\ Rails.tmbundle<br />
% git remote rm origin<br />
% git remote add -f -t master -m master origin git://github.com/drnic/ruby-on-rails-tmbundle.git</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flowdock.com/2009/03/05/apidock-to-be-built-in-in-the-rails-textmate-bundle/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>APIdock in Textmate</title>
		<link>http://blog.flowdock.com/2009/02/23/apidock-in-textmate/</link>
		<comments>http://blog.flowdock.com/2009/02/23/apidock-in-textmate/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 17:21:16 +0000</pubDate>
		<dc:creator>Mikael Roos</dc:creator>
				<category><![CDATA[APIdock]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Rails-doc]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.nodeta.fi/?p=77</guid>
		<description><![CDATA[First came Vim, and next Gaizka added APIdock integration to Emacs. Now perhaps the biggest favorite of most Ruby and Rails developers, myself included: Textmate! Courtesy of one of Nodeta&#8217;s own, Ville Lautanala aka Lautis, you can get the Textmate bundles with APIdock goodness for Ruby and Rails from github with just a couple of [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://blog.nodeta.fi/wp-content/uploads/2009/02/textmate-bundle.png'><img src="http://blog.nodeta.fi/wp-content/uploads/2009/02/textmate-bundle-300x114.png" alt="" title="Textmate with APIdock" width="300" height="114" style="float: right; margin: 1em;" /></a></p>
<p>First came <a href="http://blog.nodeta.fi/2009/02/19/apidock-vim-integration/">Vim</a>, and next <a href="http://github.com/gaizka">Gaizka</a> added <a href="http://github.com/gaizka/misc-scripts/blob/3a60c2cd41ba1e331e4fa6539d0c70b522a64dd4/dot-emacs/rails-apidock.el">APIdock integration to Emacs</a>. Now perhaps the biggest favorite of most Ruby and Rails developers, myself included: Textmate! Courtesy of one of Nodeta&#8217;s own, <a href="http://github.com/lautis">Ville Lautanala aka Lautis</a>, you can get the Textmate bundles with APIdock goodness for <a href="http://github.com/lautis/ruby-tmbundle/tree">Ruby</a> and <a href="http://github.com/lautis/ruby-on-rails-tmbundle/tree">Rails</a> from github with just a couple of simple git commands:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">% mkdir -p ~/Library/Application\ Support/Textmate/Bundles<br />
% cd ~/Library/Application\ Support/Textmate/Bundles<br />
% git clone git://github.com/lautis/ruby-on-rails-tmbundle.git &quot;Ruby on Rails.tmbundle&quot;<br />
% git clone git://github.com/lautis/ruby-tmbundle.git &quot;Ruby.tmbundle&quot;<br />
% osascript -e 'tell app &quot;TextMate&quot; to reload bundles'</div></div>
<p>Now, the keyboard shortcut</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Control+h</div></div>
<p>gets you the page for the current word from APIdock.</p>
<p><img src="http://blog.nodeta.fi/wp-content/uploads/2009/02/apidock-textmate.png" alt="" title="APIdock Textmate Integration" class="alignnone size-medium wp-image-79" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flowdock.com/2009/02/23/apidock-in-textmate/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Presenting at UraTiKAS, TKK</title>
		<link>http://blog.flowdock.com/2009/02/22/presenting-at-uratikas-tkk/</link>
		<comments>http://blog.flowdock.com/2009/02/22/presenting-at-uratikas-tkk/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 14:20:06 +0000</pubDate>
		<dc:creator>Otto Hilska</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[sponsor]]></category>
		<category><![CDATA[tkk]]></category>
		<category><![CDATA[uratikas]]></category>

		<guid isPermaLink="false">http://blog.nodeta.fi/?p=76</guid>
		<description><![CDATA[Even though some companies have publicly announced not to hire summer trainees, that&#8217;s definitely not the case at Nodeta. Our APIdock team from the last year is continuing also this summer, but in a bit different project (to be announced!). We also plan to hire a couple of new developers and designers. We have a [...]]]></description>
			<content:encoded><![CDATA[<p>Even though some companies have publicly announced not to hire summer trainees, that&#8217;s definitely not the case at Nodeta. Our APIdock team from the last year is continuing also this summer, but in a bit different project (to be announced!). We also plan to hire a couple of new developers and designers.</p>
<p>We have a long track record of sponsoring the university student organizations here in Finland. You can already find our logo from the websites of <a href="http://tietoteekkarikilta.fi/">Computer Science students at Tampere University of Technology</a>, <a href="http://m0.tietokilta.fi/">Computer Science students at Helsinki University of Technology</a>, <a href="http://tko-aly.fi/">Computer Science students at Helsinki University</a> and the <a href="http://kyykka.fi/">World Championships of Academic Kyykkä</a>.</p>
<p>Next week we&#8217;re once again having some great time with our long-time partner, <a href="http://tietokilta.fi/">Tietokilta</a>. On February 25th they&#8217;re hosting a recruiting event at Helsinki University of Technology (TKK), auditorium TU2.</p>
<p>We have a very tight 30 min. slot, but I&#8217;m trying to cover some interesting details about our own Scrum implementation, trying to explain the students why they should be spending their spare time with Ruby on Rails instead of something else, and I&#8217;m also going to present a small case study about one of our projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flowdock.com/2009/02/22/presenting-at-uratikas-tkk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>APIdock + vim integration</title>
		<link>http://blog.flowdock.com/2009/02/19/apidock-vim-integration/</link>
		<comments>http://blog.flowdock.com/2009/02/19/apidock-vim-integration/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 12:32:58 +0000</pubDate>
		<dc:creator>Otto Hilska</dc:creator>
				<category><![CDATA[APIdock]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://blog.nodeta.fi/?p=75</guid>
		<description><![CDATA[I&#8217;m a vim user myself, and I was very happy to find that the guys at Akita On Rails had put together a small vim helper that allows you to jump directly to the APIdock page of the given Rails keyword. You can find it from their Github dotfiles commit. Keep these contributions coming. :) [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a <a href="http://www.vim.org/">vim</a> user myself, and I was very happy to find that the guys at <a href="http://www.akitaonrails.com/">Akita On Rails</a> had put together a small vim helper that allows you to jump directly to the APIdock page of the given Rails keyword. You can find it from their <a href="http://github.com/fabiokung/vimfiles/commit/6723ec056282f4d2d66d214c921111f57fa48035">Github dotfiles commit</a>.</p>
<p>Keep these contributions coming. :)</p>
<p><strong>UPDATE:</strong> There&#8217;re now <a href="http://imaginateaqui.net/blog/2009/02/apidock-emacs-integration/">emacs bindings</a> available as well.</p>
<p><strong>UPDATE 2:</strong> One of our own guys also implemented a <a href="http://github.com/lautis/ruby-on-rails-tmbundle/tree/master">TextMate command</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flowdock.com/2009/02/19/apidock-vim-integration/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>APIdock about to roll out&#8230; with Ruby and RSpec!</title>
		<link>http://blog.flowdock.com/2008/08/14/apidock-about-to-roll-out-with-ruby-and-rspec/</link>
		<comments>http://blog.flowdock.com/2008/08/14/apidock-about-to-roll-out-with-ruby-and-rspec/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 11:54:21 +0000</pubDate>
		<dc:creator>Mikael Roos</dc:creator>
				<category><![CDATA[APIdock]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Rails-doc]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.nodeta.fi/?p=55</guid>
		<description><![CDATA[As the Rails documentation discourse is really bubbling, our schedule has given us the sweet chance of taking a few steps back and let us concentrate on the first release of APIdock. APIdock will be deployed today and we&#8217;ll import different versions of the included projects slowly for the next couple of days. The app [...]]]></description>
			<content:encoded><![CDATA[<p>As the Rails documentation discourse is really bubbling, our schedule has given us the sweet chance of taking a few steps back and let us concentrate on the first release of <a href="http://apidock.com">APIdock</a>.</p>
<p>APIdock will be deployed today and we&#8217;ll import different versions of the included projects slowly for the next couple of days. The app will be completely usable during the version roll-out. Here are some of the most important changes from Rails-Doc.</p>
<h3>Multiple projects</h3>
<p><img style="float: right; margin: 1.4em 0 0 1.6em;" title="Multiple Projects" src="http://blog.nodeta.fi/wp-content/uploads/2008/08/multiple_projects.png" alt="Multiple Projects" width="241" height="112" /><br />
The most important difference of APIdock in relation to Rails-doc is of course multiple projects. You will be able to surf your way to <a href="http://www.apidock.com">APIdock.com</a> and search and browse Ruby and RSpec documentation (in addition to Rails) with the same (except for the improvements that we&#8217;ve made) interface that you have been able to use in Rails-Doc. To begin with, the newest patch level of Ruby 1.8.6 will be included as we slowly roll older versions in. Ruby 1.9 will follow later if there proves to be a demand for it. Users wont yet be able to add their own projects, but we&#8217;ll provide an easy way to suggest new ones to be added.</p>
<p>In this first release, all the included projects will be listed in tabs, but later on when more projects are added, the idea is that users will be able to choose their &#8220;favorite&#8221; projects that will be shown as tabs. This way the app will be custom-made for each user.</p>
<p><img style="margin: 1em 0 0.3em 0; text-align: center;" title="Project Versions" src="http://blog.nodeta.fi/wp-content/uploads/2008/08/project_history.png" alt="Project Versions" width="499" height="93" /><br />
We&#8217;ve added some project specific stuff like extensive project details and version history of the added versions. Behind the curtains the importing of new versions is done with a web interface.</p>
<h4>Cross-project searching</h4>
<p>When developing Rails applications, you are often faced with situations where you can&#8217;t be completely sure, whether a certain method comes from Ruby or Rails or somewhere else (like RSpec when writing tests). To help with this situation, in APIdock, after you have filled in a search term, you can simply click on another project to get the results for that same search term from that other project.</p>
<h3>Moderators</h3>
<p><img style="float: right; margin: 1.4em 0 0 1.6em;" title="Moderators!" src="http://blog.nodeta.fi/wp-content/uploads/2008/08/moderator_badge.png" alt="Moderators!" width="99" height="84" /><br />
We have also made our ACL more complex under the hood. We can now have moderators that have some extra rights like editing other users&#8217; notes. This way we can give moderator rights to other people including some of our most active collaborators. If you&#8217;re interested in becoming a moderator, please contact us at <a href="mailto:team@apidock.com">team@apidock.com</a>.</p>
<h3>Rails-Doc =&gt; APIdock migration</h3>
<p><img style="float: right; margin: 0 0 0 1.8em;" title="Project details" src="http://blog.nodeta.fi/wp-content/uploads/2008/08/project_details.png" alt="Project details" width="218" height="162" /></p>
<p>Your Rails-Doc accounts will be preserved in APIdock, the notes will be where you wrote them and the thanks you&#8217;ve got won&#8217;t disappear either. Any URIs to the <span style="white-space: nowrap;">rails-doc.org</span> domain will redirect to the correct page under <a href="apidock.com">apidock.com</a>. There aren&#8217;t any drawbacks to the migration – no functionality is lost. The app was designed to support multiple projects right from the get-go and now that decision is paying off.<br />
<br style="clear: right;" /></p>
<h3>APIdock: what&#8217;s to come?</h3>
<p>Rails-doc and APIdock has been our first Summer on Rails project, something we hope to be an annual feat. The general idea behind SOR is to hire young<br />
talented developers to develop something cool and not-too-business-critical over the summer under the mentorship of some senior developers. We think<br />
APIdock is a pretty awesome result and huge thanks go to our team of emerging Rails superstars:</p>
<ul style="list-style-type: none;">
<li><a href="http://www.hannu.biz">Hannu Pelkonen</a></li>
<li><a href="http://www.jyrituulos.com">Jyri Tuulos</a></li>
<li>Ville Lautanala</li>
</ul>
<p>who did a great job even when the so-called mentors were often nowhere to be found. :)</p>
<p>The summer is starting to be over and that means the super-active development cycle of APIdock will slow down. We will continue to maintain the app, fix any bugs that are found and concentrate only on absolute key features.</p>
<p>Hopefully you&#8217;ll enjoy this first installment of <a href="http://apidock.com">APIdock</a>. In any case, let us know what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flowdock.com/2008/08/14/apidock-about-to-roll-out-with-ruby-and-rspec/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Rails-doc 2.0 is live!</title>
		<link>http://blog.flowdock.com/2008/07/18/rails-doc-20-is-live/</link>
		<comments>http://blog.flowdock.com/2008/07/18/rails-doc-20-is-live/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 12:06:57 +0000</pubDate>
		<dc:creator>Mikael Roos</dc:creator>
				<category><![CDATA[APIdock]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Rails-doc]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[documentation]]></category>

		<guid isPermaLink="false">http://blog.nodeta.fi/?p=49</guid>
		<description><![CDATA[Our planned schedule and features held! Rails API documentation with versions support! Full search! OpenId support! Gravatarrrrs! Check it out! Or install the Firefox Search plugin rrrright here and fire up that cracker! Seriously though, the deployment was delayed by a small surge of bugs found right before the intended deployment window, so we are [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://rails-doc.org"><img class="alignnone size-full wp-image-52" title="Rails-doc 2.0" src="http://blog.nodeta.fi/wp-content/uploads/2008/07/rails-doc-2_0.png" alt="Rails-doc 2.0" width="500" height="80" /></a></p>
<p>Our <a href="http://blog.nodeta.fi/2008/07/07/schedule-and-features-of-rails-doc-20/">planned schedule and features</a> held! Rails API documentation with versions support! Full search! OpenId support! Gravatarrrrs! <a href="http://rails-doc.org">Check it out!</a></p>
<p><a id="addSearch" style="display: none;" onclick="window.external.AddSearchProvider('http://rails-doc.org/rails/search/opensearch.xml'); return false;">Or install the Firefox Search plugin rrrright here and fire up that cracker!</a></p>
<p><script type="text/javascript"><!--
if(window.external.AddSearchProvider) {
console.log('in');
var link = document.getElementById('addSearch');
link.style.display = "inline";
}
// --></script><br />
Seriously though, the deployment was delayed by a small surge of bugs found right before the intended deployment window, so we are about 20 hours late. It took about four hours because of all the version-specific documentation generation. We are sorry for any inconveniences you may have experienced and we hope you&#8217;ll enjoy this installment of <a href="http://rails-doc.org">Rails-doc</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flowdock.com/2008/07/18/rails-doc-20-is-live/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

