<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Squarespace Site Server v5.11.81 (http://www.squarespace.com/) on Mon, 13 Feb 2012 19:11:01 GMT--><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rss="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:cc="http://web.resource.org/cc/"><rss:channel rdf:about="http://www.collectivenoodle.com/blog-articles/"><rss:title>Collective Noodle</rss:title><rss:link>http://www.collectivenoodle.com/blog-articles/</rss:link><rss:description></rss:description><dc:language>en-US</dc:language><dc:date>2012-02-13T19:11:01Z</dc:date><admin:generatorAgent rdf:resource="http://www.squarespace.com/">Squarespace Site Server v5.11.81 (http://www.squarespace.com/)</admin:generatorAgent><rss:items><rdf:Seq><rdf:li rdf:resource="http://www.collectivenoodle.com/blog-articles/2011/5/18/introduction-to-nodejs-packages-part-1-how-to-create-a-npm-p.html"/><rdf:li rdf:resource="http://www.collectivenoodle.com/blog-articles/2010/11/14/testing-your-rails-239-gem-plugin-with-rspec.html"/><rdf:li rdf:resource="http://www.collectivenoodle.com/blog-articles/2010/11/4/ruby-strings-over-multiple-lines.html"/><rdf:li rdf:resource="http://www.collectivenoodle.com/blog-articles/2010/11/4/bunder-problem-with-a-rails-gem-that-has-generators.html"/><rdf:li rdf:resource="http://www.collectivenoodle.com/blog-articles/2010/10/25/compiling-wings3d-from-source.html"/><rdf:li rdf:resource="http://www.collectivenoodle.com/blog-articles/2010/10/20/setting-up-multiple-rails-apps-on-os-x-using-apache-and-pass.html"/><rdf:li rdf:resource="http://www.collectivenoodle.com/blog-articles/2010/10/19/rails-23-gems-and-bundler-the-uninitialized-constant-railsra.html"/><rdf:li rdf:resource="http://www.collectivenoodle.com/blog-articles/2010/4/30/problem-installing-git-using-homebrew.html"/><rdf:li rdf:resource="http://www.collectivenoodle.com/blog-articles/2010/1/12/couchdb-makes-a-great-data-cache-with-help-from-ruby.html"/><rdf:li rdf:resource="http://www.collectivenoodle.com/blog-articles/2009/12/8/pgerror-error-permission-denied-ri_constrainttrigger_xxxxxxx.html"/></rdf:Seq></rss:items></rss:channel><rss:item rdf:about="http://www.collectivenoodle.com/blog-articles/2011/5/18/introduction-to-nodejs-packages-part-1-how-to-create-a-npm-p.html"><rss:title>Introduction to Node.js packages: Part 1- How to create a npm package and setup a test suite</rss:title><rss:link>http://www.collectivenoodle.com/blog-articles/2011/5/18/introduction-to-nodejs-packages-part-1-how-to-create-a-npm-p.html</rss:link><dc:creator>Brian Chamberlain</dc:creator><dc:date>2011-05-19T00:10:00Z</dc:date><dc:subject>Node.js Programming Testing jasmine javascript node npm package spec</dc:subject><content:encoded><![CDATA[<div style="text-align: right;">
Environment used for this post: <br/>
OS => OS X 10.6.7 <br/>
Node.js => v0.4.7 <br/>
npm => 1.0.6 <br/>
Terminal => bash
</div>

<p><strong>In this post I&#8217;ll explain how to create a node package complete with tests and documentation.</strong></p>

<h2>Step 0 - Install the pre-req&#8217;s</h2>

<p>Note the env stats above. I used Homebrew to install Nodejs v0.4.7 and then followed the manual git clone and &#8216;sudo make install&#8217; procedure for installing npm. I ran into some permission issues using the one liner on the nmp website. I&#8217;m not pro enough to tackle internal node install errors yet. The manual git checkout, sudo make install, worked just fine.</p>

<h2>Step 1 - Some background</h2>

<p>I suggest you take a look at this:
<a href=" http://howtonode.org/introduction-to-npm">http://howtonode.org/introduction-to-npm</a>
This is a good introduction to the node package management system. Pay close attention to the <strong>Development</strong> section. Note what the author says about creating an node package from the get-go, not as an after thought. I could not agree with this more. Let&#8217;s have some fun!</p>

<h2>Step 2 - Create your package.json file</h2>

<p>It&#8217;s a good idea to write most of your Node.js application as a node package. The node package system will help you manage dependencies and other project related tasks for you. You can reuse and share these packages through the npm registry. Also, a package is much easier to test than a full blown application. These points, plus the ease of the &#8216;npm link&#8217; which links your live development changes into your local node env, gives you no excuse not to go the app-as-a-package route right from the start.</p>

<p>Every package has to have a few things; a name, a version, a description, an author, a repo home, etc&#8230; All this info has to be in a special format inside your package.json file. Thankfully there is a simple tool to set this up for you (interactively) called &#8216;npm init&#8217;. </p>

<p>First we create a folder for our project:</p>

<pre>
mkdir filecore
cd filecore
</pre>

<p>Then we run the &#8216;npm init&#8217; command and answer some questions.</p>

<pre>
npm init
</pre>

<p>After you finish, it will create the following structure for you. Yours will be different if you answer the questions differently.</p>

<pre>
{
  "author": "Brian Chamberlain <blchamberlain@gmail.com>",
  "name": "filecore",
  "description": "Manages the files and directories of a Naccelle project",
  "version": "0.0.1",
  "repository": {
    "type": "git",
    "url": "git://github.com/breakpointer/filecore.git"
  },
  "main": "filecore.js",
  "engines": {
    "node": "~0.4.7" #<<== NOTE: There is no 'v' in this version number
  },
  "dependencies": {},
  "devDependencies": {}
}

</pre>

<p><em>Note: I had to tweak the output of the &#8216;npm init&#8217; script to remove the letter &#8216;v&#8217; it was putting in the the &#8220;node&#8221; attribute. Prior to my edit, the output for that section was &#8220;~v0.4.7&#8221; which is not correct. &#8220;~0.4.7&#8221; is the proper format.</em></p>

<p>This is just a start for this file&#8230; there are a number of other options you can configure. See this page for more info: <a href="https://github.com/isaacs/npm/blob/master/doc/json.md">https://github.com/isaacs/npm/blob/master/doc/json.md</a></p>

<h2>Step 3 - Basic package structure</h2>

<p>If you note from the package.json file above we&#8217;ve stated that our &#8220;main&#8221; is something called &#8220;filecore&#8221;. It doesn&#8217;t have to match the name of your project but it does have to be where you actually want to mount your app.</p>

<p>You should create a file with the name you specified as your &#8220;main&#8221;. In my example I&#8217;ll create one called &#8216;filecore.js&#8217;. In this file you&#8217;ll have to &#8220;export&#8221; the methods that you want available to the consumers of your package. In other words, when you do something like:</p>

<pre>
var fc = require('filecore');
</pre>

<p>The variable &#8216;fc&#8217; will have the methods attached to it which you export. See the code below.</p>

<pre>

// Requires go here
// var x = require('x');
// var y = require('y');
// ...etc..

exports.method_a = function(){
 // do stuff here
}

exports.method_b = function(){
  // do stuff here
}
</pre>

<h2>Step 4 - Test driven development</h2>

<p>I&#8217;m a big fan of test driven development. While I don&#8217;t always practice test-first development (because frankly, that kinda takes the fun out of hacking on some new code) but when I have solid idea of what I want a piece of code to do I&#8217;ll lay down some tests. A good test base can help propel your development and catch those &#8220;I swear I didn&#8217;t change anything and now it&#8217;s broke!&#8221; kinda errors that can pop up from time to time.</p>

<p>I&#8217;ve used Jasmine on other JS based projects and found it to have a nice syntax and having built in mocking is nice too. Here&#8217;s a link to the project: <a href="http://pivotal.github.com/jasmine/">http://pivotal.github.com/jasmine/</a></p>

<p>For a Node.js version of Jasmine, see this page: <a href="https://github.com/mhevery/jasmine-node">https://github.com/mhevery/jasmine-node</a>. It installs just like any other Node.js package. I installed it globally because I intend to use it on other projects (hence the &#8216;-g&#8217; option)</p>

<pre>
npm install jasmine-node -g
</pre>

<p>In the git repo for the jasmine-node package there are some example spec files to help you get going. 
Here&#8217;s my current project tree:</p>

<pre>
..README
..package.json
..filecore.js
..spec/filecore_spec.js
</pre>

<p>And as far as the code is concerned here are the filecore.js and the filecore_spec.js files:</p>

<pre>
//filecore.js

exports.method_a = function(){
 // do stuff here
 return('a');
}

exports.method_b = function(){
  // do stuff here
  return('b');
}
</pre>

<pre>
//filecore_spec.js

var fc = require('../filecore.js');
describe('jasmine-node', function(){

  it('should pass', function(){
    expect(fc.method_a()).toEqual('a');
  });

  it('should pass', function(){
    expect(fc.method_b()).toEqual('b');
  });

});
</pre>

<p>These tests and code are very trivial but they make sure we&#8217;ve setup our Node.js module properly and that our test suite works.</p>

<p>When you run the test suite you should see the following:</p>

<pre>
brian$ jasmine-node spec
Started
..

Finished in 0.002 seconds
1 test, 2 assertions, 0 failures

</pre>

<p><em>* That&#8217;s all for this part. In Part 2 I will go through fleshing out the filecore module and how to package and publish your Node.js package.</em>*</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.collectivenoodle.com/blog-articles/2010/11/14/testing-your-rails-239-gem-plugin-with-rspec.html"><rss:title>Testing your Rails 2.3.9 Gem plugin with rspec</rss:title><rss:link>http://www.collectivenoodle.com/blog-articles/2010/11/14/testing-your-rails-239-gem-plugin-with-rspec.html</rss:link><dc:creator>Brian Chamberlain</dc:creator><dc:date>2010-11-14T14:19:55Z</dc:date><dc:subject>Programming Rails Rails2.3.9 cucumber development gems rails rspec testing</dc:subject><content:encoded><![CDATA[<div style="text-align: right;">Environment Notes: <br/>   
OS: OS X 10.6.4  <br/> 
Ruby: ree-1.8.7-2010.01 [ x86_64 ] <br/>   
Terminal: bash    </div>

<p><strong>In this post I&#8217;m going to cover how to make a Rails specific gem using jeweler, how to embed a test rails app in the gem, and how to test your gem code with rspec.</strong></p>

<p>I have a gem that I&#8217;ve helped build. It&#8217;s called <a href="http://github.com/breakpointer/surveyor">Surveyor</a>. We&#8217;ve used it on several of our apps here at <a href="http://www.nucats.northwestern.edu/centers/nubic">NUBIC</a> and it&#8217;s been working out pretty well. </p>

<p>I&#8217;ve never been happy with our test suite. It&#8217;s very temperamental. For the longest time it had to run it inside of an app that had been built just for testing and development purposes which is annoying. Also, it is another barrier to having people in the budding <a href="http://groups.google.com/group/surveyor-dev">Surveyor user group</a> help out, add features, etc, etc&#8230; Not having a proper test suite is somewhat irresponsible, time to correct that problem so development can move forward at full speed.</p>

<p>Surveyor now is working fine as a standalone gem and the specs run inside the gem repo and use the Rails app context. </p>

<h2>Step 1 - Jeweler</h2>

<p>We started using Jeweler for Surveyor some time ago. It seems to work well. We&#8217;re going to use it here.</p>

<p>Get Jeweler from Rubygems. Here&#8217;s the github page with <a href="https://github.com/technicalpickles/jeweler">instructions on how to install</a> the gem. The version I use in this example is version 1.4.0. Follow the instructions in the Readme on the github page or the downloaded gem. Also remember to run <code>jeweler --help</code> to see all the params you can pass in. The gist of the process is:</p>

<pre><code>jeweler [options] &lt;name_of_gem&gt;
</code></pre>

<p>For this example I&#8217;ll pretend I&#8217;m creating a gem to help us have customized Rails log reporting. I&#8217;m going to call my gem &#8216;bclog&#8217; (bc is for bio-computing, though coincidentally &#8216;bc&#8217; are also my initials). This gem will be tested with cucumber and rspec so I&#8217;ve included those options when running the <code>jeweler</code> command. See below:</p>

<pre><code>brian$ jeweler --rspec --cucumber bclog
create  .gitignore
create  Rakefile
create  LICENSE
create  README.rdoc
create  .document
create  lib
create  lib/bclog.rb
create  spec
create  spec/spec_helper.rb
create  spec/bclog_spec.rb
create  spec/spec.opts
create  features
create  features/bclog.feature
create  features/support
create  features/support/env.rb
create  features/step_definitions
create  features/step_definitions/bclog_steps.rb
Jeweler has prepared your gem in bclog
</code></pre>

<p>Great! If you <code>cd</code> into your new gem dir you&#8217;ll be able to run <code>$ rake -T</code> and see all the neat things Jeweler can do for you. We won&#8217;t be covering any of those tasks here but it&#8217;s good to know that Jeweler has a lot of helpful features for your gem development.</p>

<h2>Step 2 - Our dev gemset with RVM</h2>

<p>Before we get going into modifying our gem we&#8217;ll need to set up our development gemset. To do this you&#8217;ll need RVM installed. I highly recommend using RVM for development. Even if you don&#8217;t have need for multiple ruby versions the ability to easily setup gemsets on a per-directory level is VERY helpful. </p>

<p>I&#8217;m assuming you&#8217;ve installed RVM, <a href="http://rvm.beginrescueend.com/rvm/install/">follow these instructions to install RVM</a> if you don&#8217;t have it. To create a gemset stand in our new gem directory and run the command below. For <a href="http://rvm.beginrescueend.com/gemsets/basics/">more info on RVM Gemsets see this page.</a></p>

<pre><code>rvm gemset create bclog
</code></pre>

<p>We&#8217;ll want to have this gemset being used every time we work on this project. Create an .rvmrc file in the project so that everytime you change to this directory the gemset is auto-loaded. One less thing to worry about. Here&#8217;s some more information on the RVM site about <a href="http://rvm.beginrescueend.com/workflow/projects/">the workflow</a>.</p>

<pre><code>echo 'rvm_gemset_create_on_use_flag=1; rvm gemset use bclog' &gt; .rvmrc
</code></pre>

<p>Now when we <code>cd</code> into the directory we&#8217;ll automatically start using this gemset. Give it a try now to make sure it&#8217;s working. <code>cd</code> up one dir and back into the project dir. You&#8217;ll see a warning message the first time you do this (say &#8216;yes&#8217; to the message).</p>

<h2>Step 3 - Bundler and Gemfile</h2>

<p>In the gemset for the gem, install Bundler (1.0.3 as of writing).</p>

<p>Running <code>gem list</code> should show two gems installed; bundler and rake. See below:</p>

<pre><code>brian$ gem list

*** LOCAL GEMS ***

bundler (1.0.3)
rake (0.8.7)
</code></pre>

<p>Create a file called <code>Gemfile</code> in your project directory. Load it up with the Gems we need at this point.</p>

<pre><code>source :rubygems

gem 'jeweler'
gem 'rspec', '~&gt; 1.3'
gem 'rspec-rails', '1.3.3'
gem 'cucumber', '~&gt; 0.8.0'
gem 'rails', '2.3.10'
</code></pre>

<p>Save this file and then run <code>bundle install</code></p>

<p>This should install some gems into your local gem bundle. </p>

<h2>Step 4 - First gem build and dev setup</h2>

<p>Now that your gems are installed (specifically jeweler at this point). Run <code>rake -T</code> to see the Jeweler tasks available to you. What we need to do at this point is setup the gem we&#8217;re building so when we include it in our Gemfile as a local, path specific gem, bundler will recognize it as a gem. This means, having a version number and a .gemspec file.</p>

<p>I opened up my Jeweler generated file <code>lib/bclog.rb</code> and added a module definition&#8230; it&#8217;s for fun at this point. We&#8217;ll be adding more to this file later.</p>

<pre><code>module Bclog
# Awesome code goes here...
end
</code></pre>

<p>Now run some commands!</p>

<pre><code>brian$ rake version:write
Updated version: 0.0.0

brian$ rake gemspec
Generated: bclog.gemspec
bclog.gemspec is valid.
</code></pre>

<p>Pop over to your Gemfile and add the line below. Substituting &#8216;bclog&#8217; with the name of your gem. This tells bundler to load up the gem your building into the gemset for the project. </p>

<pre><code>plugin_root = File.dirname(__FILE__)
gem 'bclog', :path =&gt; plugin_root
</code></pre>

<p>Run the install command for bundler</p>

<pre><code>bundle install
</code></pre>

<p>Look for your gem in what is printed to the command line. You should see something like this: <code>Using bclog (0.0.0) from source at /Users/brian/bclog</code>  </p>

<h2>Step 5 - Rake tasks for building test app</h2>

<p>Now we are going to create some rake tasks to handle the setting up and tearing down of the test Rails app we&#8217;re going to embed in our <code>spec</code> folder. In the <code>Rakefile</code> for this new gem add the following <a href="https://gist.github.com/667325">lines from this gist</a></p>

<p>If you run <code>Rake -T</code> now you should see these new tasks:</p>

<pre><code>rake testbed:build_app               # Install rails base app in spec dir
rake testbed:copy_files              # Copy in setup files to test app
rake testbed:install_surveyor        # Install surveyor in rails base app, runs migrations, preps for testing 
rake testbed:remove_app              # Remove rails base app in spec dir
rake testbed:setup                   # Setup for the test app (create)
rake testbed:teardown                # Teardown for the test app (remove)
</code></pre>

<p>There are a few files you&#8217;ll need to put in your gems spec directory. These are files that are specific to your development and bundler environment. There is a rake task called <code>testbed:copy_files</code> that will copy the files from the base of the spec folder to where they should belong inside your test rails app. Here are the files as gists: <a href="https://gist.github.com/667273">test<em>boot.rb</a>, <a href="https://gist.github.com/667279">test</em>preinitializer.rb</a>, <a href="https://gist.github.com/667278">test_Gemfile</a></p>

<p>After you have created these files in your <code>spec/</code> folder in the gem you can run the <code>rake testbed:setup</code> task to install the rails app in your spec folder.</p>

<p>Running this task should put a lot of output to the console, it&#8217;s running a Rails generator, installing a bundle, copying files, etc&#8230; When it&#8217;s done you should see a <code>test_app</code> folder in your spec directory. </p>

<h2>Step 6 - Start your testing!!</h2>

<p>At this point I&#8217;ve covered the basics and you should be ready to start writing and running tests on your gem as you would in a Rails app (ie <code>rake spec</code>, <code>rake features</code>). </p>

<p>Note:
For a good overview of Rakefiles and their usage see this <a href="http://jasonseifer.com/2010/04/06/rake-tutorial">blog post by Jason Seifer</a>.</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.collectivenoodle.com/blog-articles/2010/11/4/ruby-strings-over-multiple-lines.html"><rss:title>Ruby strings over multiple lines</rss:title><rss:link>http://www.collectivenoodle.com/blog-articles/2010/11/4/ruby-strings-over-multiple-lines.html</rss:link><dc:creator>Brian Chamberlain</dc:creator><dc:date>2010-11-04T23:06:34Z</dc:date><dc:subject>Programming Ruby</dc:subject><content:encoded><![CDATA[<p>This is the one thing in Ruby I <strong>always</strong> have to look up. This is the best post I&#8217;ve found on the topic. <a href="http://blog.jayfields.com/2006/12/ruby-multiline-strings-here-doc-or.html">http://blog.jayfields.com/2006/12/ruby-multiline-strings-here-doc-or.html</a></p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.collectivenoodle.com/blog-articles/2010/11/4/bunder-problem-with-a-rails-gem-that-has-generators.html"><rss:title>Bunder problem with a Rails gem that has generators</rss:title><rss:link>http://www.collectivenoodle.com/blog-articles/2010/11/4/bunder-problem-with-a-rails-gem-that-has-generators.html</rss:link><dc:creator>Brian Chamberlain</dc:creator><dc:date>2010-11-04T18:05:00Z</dc:date><dc:subject>Bundler Programming Rails Ruby gems problem rails</dc:subject><content:encoded><![CDATA[<p>I ran into this problem recently so I thought I&#8217;d share. </p>

<p>I have a gem that I am working on. For development I use bundler and have a hard coded :path to where the gem source code is located. This allows me to develop in the context of a Rails app and have any change I make to the gem immediately available it the app. This works fine except for the generators in the gem. </p>

<p>With a Gemfile like this
    source :rubygems</p>

<pre><code>gem 'rails', '2.3.10'
gem 'surveyor', :path =&gt; '/Users/brian/Rails/surveyor_for_dev'
</code></pre>

<p>I get &#8220;Couldn&#8217;t find &#8216;surveyor&#8217; generator&#8221; when I run <code>bundle exec script/generate surveyor</code> from the cmd line. </p>

<p>If I change that line in the Gemfile and remove everything after the &#8220;gem &#8216;surveyor&#8217;&#8221; part, bundle install, and run the same command, everything works fine. </p>

<p>What I&#8217;ve had to do is use the gem for running the generators, then remove the gem from the system (or gemset) and rebundle. This way I can work on the gem despite the issue bundler is causing.</p>

<p>This problem has something to do with how Rails looks up generators, bundler is not providing the gem generators for local gems to Rails in the proper way. </p>

<p>I don&#8217;t have a good solution at this time for the problem. It&#8217;s just something to keep in mind when doing Rails gem development using bundler.</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.collectivenoodle.com/blog-articles/2010/10/25/compiling-wings3d-from-source.html"><rss:title>Compiling Wings3D from source</rss:title><rss:link>http://www.collectivenoodle.com/blog-articles/2010/10/25/compiling-wings3d-from-source.html</rss:link><dc:creator>Brian Chamberlain</dc:creator><dc:date>2010-10-25T16:04:37Z</dc:date><dc:subject></dc:subject><content:encoded><![CDATA[<p>brian@cifra:~/3Ddev$ cd wings-1.3.1/
brian@cifra:~/3Ddev/wings-1.3.1$ sudo make
[sudo] password for brian: 
WINGS<em>VSN = 1.3.1
(cd intl</em>tools; make)
make[1]: Entering directory <code>/home/brian/3Ddev/wings-1.3.1/intl_tools'
make TYPE=opt common
make[2]: Entering directory</code>/home/brian/3Ddev/wings-1.3.1/intl<em>tools&#8217;
erlc  -W +debug</em>info +debug<em>info -o. tools.erl
make[2]: Leaving directory <code>/home/brian/3Ddev/wings-1.3.1/intl_tools'
make[1]: Leaving directory</code>/home/brian/3Ddev/wings-1.3.1/intl</em>tools&#8217;
(cd src; make)
make[1]: Entering directory <code>/home/brian/3Ddev/wings-1.3.1/src'
make TYPE=opt common
make[2]: Entering directory</code>/home/brian/3Ddev/wings-1.3.1/src&#8217;
erlc -pa /ebin  -I /include -I ../e3d -W +debug<em>info &#8216;-Dwings</em>version=&#8221;1.3.1&#8221;&#8217; -pa ../intl<em>tools  -o../ebin wings</em>lang.erl
erlc -pa /ebin  -I /include -I ../e3d -W +debug<em>info &#8216;-Dwings</em>version=&#8221;1.3.1&#8221;&#8217; -pa ../intl<em>tools  -o../ebin array.erl
erlc -pa /ebin  -I /include -I ../e3d -W +debug</em>info &#8216;-Dwings<em>version=&#8221;1.3.1&#8221;&#8217; -pa ../intl</em>tools  -o../ebin user<em>default.erl
erlc -pa /ebin  -I /include -I ../e3d -W +debug</em>info &#8216;-Dwings<em>version=&#8221;1.3.1&#8221;&#8217; -pa ../intl</em>tools  -o../ebin wings.erl
./wings.erl:316: undefined macro &#8216;KMOD<em>CTRL&#8217;
./wings.erl:341: undefined macro &#8216;KMOD</em>CTRL&#8217;
./wings.erl:1442: undefined macro &#8216;SDL<em>RELEASED&#8217;
./wings.erl:1461: undefined macro &#8216;SDL</em>RELEASED&#8217;
./wings.erl:1876: undefined macro &#8216;KMOD<em>CTRL&#8217;
./wings.hrl:17: can&#8217;t find include lib &#8220;esdl/include/sdl.hrl&#8221;
./wings.hrl:18: can&#8217;t find include lib &#8220;esdl/include/sdl</em>events.hrl&#8221;
./wings.hrl:19: can&#8217;t find include lib &#8220;esdl/include/sdl<em>video.hrl&#8221;
./wings.hrl:20: can&#8217;t find include lib &#8220;esdl/include/sdl</em>keyboard.hrl&#8221;
./wings.hrl:21: can&#8217;t find include lib &#8220;esdl/include/sdl<em>mouse.hrl&#8221;
./wings.hrl:22: can&#8217;t find include lib &#8220;esdl/src/sdl</em>util.hrl&#8221;
./wings.hrl:31: can&#8217;t find include lib &#8220;esdl/include/gl.hrl&#8221;
./wings.hrl:32: can&#8217;t find include lib &#8220;esdl/include/glu.hrl&#8221;
./wings.erl:311: function handle<em>event</em>0/2 undefined
./wings.erl:332: function handle<em>event</em>2/2 undefined
./wings.erl:363: record keyboard undefined
./wings.erl:375: record mousebutton undefined
./wings.erl:376: record mousemotion undefined
./wings.erl:382: record expose undefined
./wings.erl:448: function menu<em>toolbar</em>action/2 undefined
./wings.erl:449: record keyboard undefined
./wings.erl:1475: record mousebutton undefined
./wings.erl:1480: variable &#8216;X&#8217; is unbound
./wings.erl:1480: variable &#8216;Y&#8217; is unbound
./wings.erl:1515: record mousebutton undefined
./wings.erl:330: Warning: function handle<em>event</em>1/2 is unused
./wings.erl:363: Warning: function handle<em>event</em>3/2 is unused
./wings.erl:474: Warning: function do<em>hotkey/2 is unused
./wings.erl:517: Warning: function do</em>hotkey<em>1/2 is unused
./wings.erl:524: Warning: function highlight</em>sel<em>style/1 is unused
./wings.erl:555: Warning: function do</em>command/3 is unused
./wings.erl:623: Warning: function remember<em>command/2 is unused
./wings.erl:856: Warning: function popup</em>menu/3 is unused
./wings.erl:1004: Warning: function set<em>temp</em>sel/2 is unused
./wings.erl:1475: Warning: function do<em>use</em>command/3 is unused
./wings.erl:1690: Warning: function restore<em>windows</em>pos/0 is unused
./wings.erl:1697: Warning: function move<em>windows/1 is unused
./wings.erl:1705: Warning: function move</em>windows<em>1/2 is unused
./wings.erl:1846: Warning: function hotkey</em>select<em>setup/2 is unused
make[2]: <strong>* [../ebin/wings.beam] Error 1
make[2]: Leaving directory <code>/home/brian/3Ddev/wings-1.3.1/src'
make[1]: *** [opt] Error 2
make[1]: Leaving directory</code>/home/brian/3Ddev/wings-1.3.1/src&#8217;
make: *</strong> [all] Error 2
brian@cifra:~/3Ddev/wings-1.3.1$ echo $ESDL</em>PATH
/usr/local/lib/erlang/addons/esdl-1.0.1
brian@cifra:~/3Ddev/wings-1.3.1$</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.collectivenoodle.com/blog-articles/2010/10/20/setting-up-multiple-rails-apps-on-os-x-using-apache-and-pass.html"><rss:title>Setting up multiple Rails apps on OS X using Apache and Passenger</rss:title><rss:link>http://www.collectivenoodle.com/blog-articles/2010/10/20/setting-up-multiple-rails-apps-on-os-x-using-apache-and-pass.html</rss:link><dc:creator>Brian Chamberlain</dc:creator><dc:date>2010-10-20T23:15:58Z</dc:date><dc:subject>OSX Programming Rails Web apache passenger programming rails server</dc:subject><content:encoded><![CDATA[<p>This is a post I thought could benefit people who develop on a Mac and want to use the OS Apache and Passenger to host their Rails projects. You can use <a href="http://www.fngtps.com/passenger-preference-pane">passenger pref pane</a> but for some reason this kept crashing my OS pref pane. I couldn&#8217;t figure out why this was happening so I removed it and set up everything manually (old school). Turns out it&#8217;s not that hard. In general I don&#8217;t create new rails apps too often so configuring by hand is not a big deal. Also, it&#8217;s likely I&#8217;ll forget how to do this by the time I need to add another Rails app so this post will hopefully be beneficial to my future self!</p>

<p><strong>Step 1) Make sure you have installed Ruby, Rubygems, Passenger.</strong> </p>

<p>Also, make sure you have installed the Passenger apache module. Instructions are on the <a href="http://www.modrails.com/install.html">Phusion webpage</a>. The instructions that are generated in the terminal are not entirely correct with regards to how you should configure Apache for multiple apps. Don&#8217;t let this throw you off, do everything else except the Rails app configuration stuff. That part is described below.</p>

<p><em><strong>NOTE*</strong>
Before we get to the configuration stuff; just a reminder to create copies of the files before you start editing them. Name them http-conf.old and hosts-old (for example). Just make sure you don&#8217;t have the old conf file end in &#8220;.conf&#8221; Apache will read any .conf file and load it.</em></p>

<p><strong>Step 2) Configure Apache to handle named hosts and the one, or more apps your going to have it run.</strong> </p>

<p>To do this you&#8217;ll need to add a few configuration lines to your Apache httpd.conf file. You should find it under /etc/apache2/http.conf I always add the lines to the end of the file so it&#8217;s easy to locate. The file is quite long.</p>

<pre><code>#This allows apache to have name based virtual hosts. can listen on the same Ip. by defualt it does not do this 
NameVirtualHost *:80

&lt;VirtualHost *:80&gt;
  ServerName registar.dev
  DocumentRoot "/Users/brian/Rails/registar/public"
  RailsEnv development
  RailsAllowModRewrite off
  &lt;directory "/Users/brian/Rails/registar/public"&gt;
    Order allow,deny
    Allow from all
  &lt;/directory&gt;
&lt;/VirtualHost&gt;

&lt;VirtualHost *:80&gt;
  ServerName enotis.dev
  DocumentRoot "/Users/brian/Rails/enotis/public"
  RailsEnv development
  RailsAllowModRewrite off
  &lt;directory "/Users/brian/Rails/enotis/public"&gt;
    Order allow,deny
    Allow from all
  &lt;/directory&gt;
&lt;/VirtualHost&gt;
</code></pre>

<p>The first line tells Apache to accept named based virtual hosts. This will allow your apps to be accessible at http://myapp.dev instead of the usual http://localhost:3000. Much shorter, and more descriptive. You can see from the code above that I&#8217;ve got two apps I&#8217;m serving from here, one called Registar and the other called eNOTIS. The ServerName in the VirtualHost block configures how I refer to the app in the browser, the DocumentRoot sets where the apps public folder lives on my filesystem, RailsEnv sets the running environment, and I&#8217;m not too sure what the other lines do. I will have to do some more research and update the post. I&#8217;m guessing it&#8217;s got something to do with access permissions and such and where the request can originate from. Here&#8217;s the <a href="http://httpd.apache.org/docs/current/vhosts/name-based.html">Apache docs on the config settings.</a></p>

<p><strong>Step 3) Modify your host file</strong></p>

<p>The hosts file is located in /etc/hosts on your OS X file system. This file is what is used by the OS to figure out where to find http://enotis.dev (in my case) on the network. There isn&#8217;t a DNS server out there telling the computer to that this is on my computer (nor should there be). The hosts file is a DNS shortcut to resolve the location (i.e. the IP) of named hosts. Here&#8217;s what mine looks like after editing it for the two apps I want to run.</p>

<pre><code>##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1 localhost enotis.dev registar.dev
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0 localhost
</code></pre>

<p>You can keep adding apps to the end of the 127.0.0.1 line, just follow the formatting above. I think the other lines are used by BonJour and such. More can be read about this file on the <a href="http://support.apple.com/kb/TA27291?viewlocale=en_US">Apple webpage</a> or by typing &#8216;man hosts&#8217; in the terminal</p>

<p><strong>Step 4) Restart Apache</strong></p>

<p>We made some pretty big changes so you&#8217;ll need to restart Apache before they&#8217;ll take effect. To do that from the terminal type </p>

<pre><code>sudo /usr/sbin/apachectl restart
</code></pre>

<p><em>note: see the update below if this causes an error when you run it</em></p>

<p><strong>Step 5) View your Rails apps</strong></p>

<p>At this point you&#8217;ve restarted Apache, and told it where to find your Rails apps. If you go to http://<what_ever_you_typed_in_the_config_file>.dev you should see your app. If not, see below.</p>

<p><strong>HELP it doesn&#8217;t work!!!!</strong> </p>

<p>Well, this does happen from time-to-time. When I was figuring all this stuff out I ran into lots of problems. For a while Apache was serving up one app instead of two, Passenger started crashing, Apache started crashing and failing to restart, etc&#8230; etc&#8230; Use the logs on the system to help you figure out what is going on. Tail them as you make http requests in the browser to your apps URLs. There are two logs, access<em>log and error</em>log. Use them well.</p>

<pre><code>tail -n 100 -f /var/log/apache2/error_log
</code></pre>

<p>Also take a look at any console message if you&#8217;ve hosed your config so bad it&#8217;s not doing anything at all. The app is called &#8220;Console&#8221;, spotlight search for it or look in your Apps/Utilities folder.</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.collectivenoodle.com/blog-articles/2010/10/19/rails-23-gems-and-bundler-the-uninitialized-constant-railsra.html"><rss:title>Rails 2.3.*, Gems, and Bundler. The uninitialized constant Rails::Railtie error</rss:title><rss:link>http://www.collectivenoodle.com/blog-articles/2010/10/19/rails-23-gems-and-bundler-the-uninitialized-constant-railsra.html</rss:link><dc:creator>Brian Chamberlain</dc:creator><dc:date>2010-10-20T03:44:50Z</dc:date><dc:subject>Bundler Error Gemfile Programming Rails Rails2.3.9</dc:subject><content:encoded><![CDATA[<p>I just spent a good deal of time trying to figure out why I was getting an error on a newly generated Rails 2.3.9 app with Bundler 1.0.3 when running a <code>script/generate</code> command from the base of my app. Here is the error:</p>

<pre><code>home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/activesupport-2.3.9/lib/active_support/dependencies.rb:466:in `load_missing_constant': uninitialized constant Rails::Railtie (NameError)
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/activesupport-2.3.9/lib/active_support/dependencies.rb:106:in `const_missing'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/rspec-rails-2.0.1/lib/rspec-rails.rb:3
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/bundler-1.0.3/lib/bundler/runtime.rb:64:in `require'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/bundler-1.0.3/lib/bundler/runtime.rb:64:in `require'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/bundler-1.0.3/lib/bundler/runtime.rb:62:in `each'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/bundler-1.0.3/lib/bundler/runtime.rb:62:in `require'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/bundler-1.0.3/lib/bundler/runtime.rb:51:in `each'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/bundler-1.0.3/lib/bundler/runtime.rb:51:in `require'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/bundler-1.0.3/lib/bundler.rb:112:in `require'
from /home/brian/Rails/base_app_for_surveyor239/config/boot.rb:119:in `load_gems'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/rails-2.3.9/lib/initializer.rb:164:in `process'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/rails-2.3.9/lib/initializer.rb:113:in `send'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/rails-2.3.9/lib/initializer.rb:113:in `run'
from /home/brian/Rails/base_app_for_surveyor239/config/environment.rb:9
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/rails-2.3.9/lib/commands/generate.rb:1:in `require'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/rails-2.3.9/lib/commands/generate.rb:1
from script/generate:3:in `require'
from script/generate:3
</code></pre>

<p>Turns out, if you have gems in your Gemfile that are not locked to a know version that works in 2.3.9 you may get this error. It won&#8217;t make any sense because the error is inside Bundler and looks like it starts in your config/boot.rb file. Comment out all your gems except Rails and try, one at a time, uncommenting each gem, running <code>bundle install</code>  until you find out which gem is causing the problem. It goes to show that you should pay attention to which versions of the gems you have installed and be explicit about them. Even if you are just starting a new app. </p>

<p>Here were the gems I had in my apps Gemfile. </p>

<pre><code>gem "cucumber"
gem "rspec"
gem "rspec-rails"
gem "factory_girl"
</code></pre>

<p>Commenting them out stopped the error. Now I have to figure out which versions of these work with Rails 2.3.9 and lock them down to those versions.</p>

<p>Note: I tried rolling back to earlier versions of rails and bundler. It also happens in Bundler 0.9.* and Rails 2.3.5-8</p>

<pre><code>/home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/activesupport-2.3.9/lib/active_support/dependencies.rb:466:in `load_missing_constant': uninitialized constant Rails::Railtie (NameError)
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/activesupport-2.3.9/lib/active_support/dependencies.rb:106:in `const_missing'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/rspec-rails-2.0.1/lib/rspec-rails.rb:3
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/bundler-0.9.26/lib/bundler/runtime.rb:46:in `require'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/bundler-0.9.26/lib/bundler/runtime.rb:46:in `require'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/bundler-0.9.26/lib/bundler/runtime.rb:41:in `each'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/bundler-0.9.26/lib/bundler/runtime.rb:41:in `require'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/bundler-0.9.26/lib/bundler/runtime.rb:40:in `each'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/bundler-0.9.26/lib/bundler/runtime.rb:40:in `require'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/bundler-0.9.26/lib/bundler.rb:89:in `require'
from /home/brian/Rails/base_app_for_surveyor239/config/boot.rb:119:in `load_gems'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/rails-2.3.9/lib/initializer.rb:164:in `process'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/rails-2.3.9/lib/initializer.rb:113:in `send'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/rails-2.3.9/lib/initializer.rb:113:in `run'
from /home/brian/Rails/base_app_for_surveyor239/config/environment.rb:9
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/rails-2.3.9/lib/commands/generate.rb:1:in `require'
from /home/brian/.rvm/gems/ree-1.8.7-2010.02/gems/rails-2.3.9/lib/commands/generate.rb:1
from script/generate:3:in `require'
from script/generate:3
</code></pre>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.collectivenoodle.com/blog-articles/2010/4/30/problem-installing-git-using-homebrew.html"><rss:title>Problem installing git using homebrew</rss:title><rss:link>http://www.collectivenoodle.com/blog-articles/2010/4/30/problem-installing-git-using-homebrew.html</rss:link><dc:creator>Brian Chamberlain</dc:creator><dc:date>2010-04-30T19:29:57Z</dc:date><dc:subject>Programming Ruby git homebrew install problem programming</dc:subject><content:encoded><![CDATA[<p>In file included from /usr/local/include/curl/curl.h:36,
                     from http.h:6,
                     from remote-curl.c:5:
    /usr/local/include/curl/curlrules.h:134: error: size of array ‘<strong>curl<em>rule</em>01</strong>’ is negative
    make: <em>*</em> [remote-curl.o] Error 1</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.collectivenoodle.com/blog-articles/2010/1/12/couchdb-makes-a-great-data-cache-with-help-from-ruby.html"><rss:title>CouchDB makes a great data cache (with help from Ruby)</rss:title><rss:link>http://www.collectivenoodle.com/blog-articles/2010/1/12/couchdb-makes-a-great-data-cache-with-help-from-ruby.html</rss:link><dc:creator>Brian Chamberlain</dc:creator><dc:date>2010-01-12T22:02:40Z</dc:date><dc:subject>CouchDB CouchRest Ruby Ruby code example bulk_docs bulk_save trick</dc:subject><content:encoded><![CDATA[<p>I was working on pulling in some data from this nasty web service (slow, complex, unreliable) where the data is not structured the way I want it to be (oh yeah, and there&#8217;s that too&#8230;). To get all the data I need there&#8217;s about seven or so queries I have to make. Not wanting to have my main app deal with all these queries and storing the data in its relational (and rigid) structure I thought this seemed like a good use case for CouchDB. The semi-structured data format in CouchDB allows me to layer data on top of existing documents as need. Each query adding more data to the existing data and in the end giving me the full picture of the end objects I am after. &#8220;Progressive data enhancement&#8221; if you will. Once I&#8217;ve got this full picture of the data I can sit my CouchDB database between my main app and this ugly, awful web service. My main app will hit CouchDBs nice, clean RESTful!!!, interface for the data I want. A small Ruby script (on a chron perhaps) deals with all the aforementioned nastiness, grabs data from the web service and loads it into CouchDB. This setup encapsulates the idiosyncrasies of the outside world in one place and allows my main app to operate in reality distortion field of my own design. Sweet!</p>

<p>Ultimately, this data will end up (at least part of it) in a relational DB but setting up the needed tables, columns, etc&#8230; require a lot upfront to build out the all that good relational-ness. At this point, it&#8217;s pretty exploratory. As I add more webservice calls I&#8217;d like to immediately see that data and use it in my app. Not have to write a migration that I may or may not have to roll back if the additional data element is wrong or not needed. I&#8217;m trying to keep it agile over here!</p>

<p>So, I have my code query the remote web service and I get back a hash for each object I want to put in my CouchDB database (conveniently I designed this code to turn ugly SOAP mapping objects into plain old arrays of hashes). The initial web service query returned over 12,000 objects so iterating over each one to stuff into the CouchDB seemed silly. Luckily CouchDB can handle bulk document creation (using the CouchRest gen this is exposed as &#8216;bulk_save&#8217;). The first time I did this it worked fine and returned all the new id&#8217;s it created. After some thought about how to get the rest of my data in there I decided to use custom document IDs instead of the autogenerated UUIDs in couch assigns. Using the default id would mean I&#8217;d have to hit Couch to look up the id on each web service returned object just to get the document. This is an extra lookup in CouchDB which is fine because Couch is very fast but there&#8217;s no need for this.</p>

<p>CouchDB bulk create allows you to specify your own unique id to use instead of the auto assigned/generated one. In my situation this would allow me to just blindly post to Couch with my own ID in the URL and have the new data from my other queries go directly to the document. The progressive data enhancement I was after without the redundant lookup to get the right document first.</p>

<p>What I needed to do was wipe out my database that held the CouchDB created document with the CouchIDs, modify the hashes I get back from the web services to have &#8220;<em>id&#8221;=>&#8221;</em>my<em>unique</em>id<em>&#8221; in there so when I did my bulk</em>save CouchDB would not create IDs for me but just use the ones given to it.</p>

<p>Here&#8217;s (finally) where Ruby comes in.</p>

<p>Let&#8217;s say that here is the array of hashes I get back from the webservice:</p>

<pre><code>vals =[{:a =&gt; "1"},{:a =&gt; "2"},{:a =&gt; "3"}]
</code></pre>

<p>(where :a is the key for the web service unique id value)</p>

<p>I need to modify each hash in this array to add {&#8220;<em>id&#8221; => &#8220;</em>value<em>of</em>&#8216;a&#8217;_&#8221;} so we want the first element to look like:</p>

<pre><code>{"_id" =&gt; "1",:a =&gt; "1"}
</code></pre>

<p>for example&#8230;</p>

<p>Ruby #map to the rescue!</p>

<pre><code>vals.map{|v| v["_id"]=v[:a]}
</code></pre>

<p>Gives us:</p>

<pre><code>vals.inspect
=&gt; "[{"_id"=&gt;"1", :a=&gt;"1"}, {"_id"=&gt;"2", :a=&gt;"2"}, {"_id"=&gt;"3", :a=&gt;"3"}]"
</code></pre>

<p>With our hash formatted the right way to use our web service given ID as the CouchDB ID bulk_save will create all the documents we need so that we can access them (using this sample data) like:</p>

<pre><code>curl -X GET 'http://127.0.0.1:5984/test_db/1'
</code></pre>

<p>Should give you:</p>

<pre><code>{"_id":"1","_rev":"1-10085f96b70ddbb6155710a391194304","a"=&gt;"1"}
</code></pre>

<p>(your rev id will be different of course)</p>

<p>That&#8217;s all there is to it!</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.collectivenoodle.com/blog-articles/2009/12/8/pgerror-error-permission-denied-ri_constrainttrigger_xxxxxxx.html"><rss:title>PGError: ERROR: permission denied: "RI_ConstraintTrigger_xxxxxxx" is a system trigger</rss:title><rss:link>http://www.collectivenoodle.com/blog-articles/2009/12/8/pgerror-error-permission-denied-ri_constrainttrigger_xxxxxxx.html</rss:link><dc:creator>Brian Chamberlain</dc:creator><dc:date>2009-12-08T16:25:19Z</dc:date><dc:subject>Postgres Programming Rails errors programming rails</dc:subject><content:encoded><![CDATA[<p>This was a fun one.</p>

<p>Today I set out to get one of my apps setup on the CI server we have use at work when I ran into this problem. It occurred only for a few of the remaining specs in the test suite that still use fixtures. The error looked something like this:</p>

<pre><code>ActiveRecord::StatementInvalid in 'RegistryController should show the current registry for the current user - no params sent'
PGError: ERROR:  permission denied: "RI_ConstraintTrigger_2681229" is a system trigger: ALTER TABLE "schema_migrations" ENABLE TRIGGER ALL;ALTER TABLE "users" ENABLE TRIGGER ALL;ALTER
......
ALL;ALTER TABLE "master_answers" ENABLE TRIGGER ALL;ALTER TABLE "questions" ENABLE TRIGGER ALL;ALTER TABLE "answers" ENABLE TRIGGER ALL;ALTER TABLE "people" ENABLE TRIGGER ALL
</code></pre>

<p>Turns out this is a permission issue with the how Postgres handles triggers. Triggers belong to the superuser and if you&#8217;ve set up your DB permissions properly your test user on your DB should NOT be a super user. </p>

<p><a href="http://blogs.law.harvard.edu/djcp/2009/01/rails-22-postgres-and-testing/">This author</a> correctly identifies the problem but suggests the solution is to change the permissions on your test user: </p>

<p><a href="http://kopongo.com/2008/7/25/postgres-ri_constrainttrigger-error">Here is a better approach</a> to addressing the actual problem (and thorough explanation):</p>

<p>I deviated from this approach slightly in that I only added the &#8216;require&#8217; statement to pull in the hack in my CI environment (not for all the environments as the author suggests). I thoughts are that this change only needs to solve a problem in the CI env, so that is where it should live. This <em>could</em> bite me in the butt because it introduces an inconsistency in the adapter behavior across envs. To be honest, I&#8217;m not sure which is worse. We&#8217;ll see how it plays out.</p>
]]></content:encoded></rss:item></rdf:RDF>
