<?xml version="1.0" encoding="utf-8" ?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <id>http://thinkingconcurrently.com/</id>
  <title>http://thinkingconcurrently.com</title>
  <updated>2013-07-22T21:39:23-04:00</updated>
  <link href="http://thinkingconcurrently.com/blog.atom" rel="self" type="application/atom+xml" />
  <link href="http://thinkingconcurrently.com/" rel="alternate" type="text/html" />
  <entry>
    <id>http://thinkingconcurrently.com/blog/2013/07/21/fedora-19-vmware-tools/</id>
    <title>Installing VMware Tools on Fedora 19</title>
    <updated>2013-07-22T21:39:23-04:00</updated>
    <published>2013-07-21T00:00:00+00:00</published>
    <link href="http://thinkingconcurrently.com/blog/2013/07/21/fedora-19-vmware-tools/" rel="alternate" type="text/html" />
    <summary>
      
      A freshly installed Fedora 19 guest comes preinstalled with
      open-vm-tools, an open-source version of the VMware tools for guest
      operating systems. However, these tools can't do everything the
      proprietary version can, at least on VMware Fusion, so here's the
      steps required to swap things out.
      
      First, we need to remove open-vm-tools from the system:
      
      sudo yum remove open-vm-tools open-vm-tools-desktop
      
      
      Next we need to install the kernel header files required for compiling
      VMware tools:
      
      sudo yum install -y kernel-devel-$(uname -r)
      
      
      Normally this would be the last step before starting the tools
      installation, but Fedora 19 (and RHEL 6.4) have a version.h file
      that's not where the tools installer expects it. So, copy it...
    </summary>
    <content type="html">
      
      &lt;p&gt;A freshly installed Fedora 19 guest comes preinstalled with
      open-vm-tools, an open-source version of the VMware tools for guest
      operating systems. However, these tools can't do everything the
      proprietary version can, at least on VMware Fusion, so here's the
      steps required to swap things out.&lt;/p&gt;
      
      &lt;p&gt;First, we need to remove open-vm-tools from the system:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;sudo yum remove open-vm-tools open-vm-tools-desktop
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Next we need to install the kernel header files required for compiling
      VMware tools:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;sudo yum install -y kernel-devel-$(uname -r)
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Normally this would be the last step before starting the tools
      installation, but Fedora 19 (and RHEL 6.4) have a version.h file
      that's not where the tools installer expects it. So, copy it to where
      it's needed:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;sudo cp /usr/src/kernels/$(uname -r)/include/generated/uapi/linux/version.h \
        /lib/modules/$(uname -r)/build/include/linux/
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Now, initiate the VMware tools install - on VMware Fusion this is the
      menu item Virtual Machine -&amp;gt; Reinstall VMware Tools. After the virtual
      CD is mounted, proceed with the install:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;cd /tmp/
      cp /run/media/bbrowning/VMware\ Tools/VMwareTools-*.tar.gz .
      tar xzf VMwareTools-*.tar.gz
      sudo vmware-tools-distrib/vmware-install.pl
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;I just accepted all the defaults for every prompt, including allowing
      the installer to run vmware-config-tools.pl.&lt;/p&gt;
      
      &lt;p&gt;Hope that helps - having to copy the &lt;code&gt;version.h&lt;/code&gt; file is the biggest
      thing that will trip up experienced VMware users.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <id>http://thinkingconcurrently.com/blog/2013/07/17/fedora-19-amazon-instant-video/</id>
    <title>Fedora 19 and Amazon Instant Video</title>
    <updated>2013-07-22T21:39:23-04:00</updated>
    <published>2013-07-17T00:00:00+00:00</published>
    <link href="http://thinkingconcurrently.com/blog/2013/07/17/fedora-19-amazon-instant-video/" rel="alternate" type="text/html" />
    <summary>
      
      Amazon Instant Video and other DRM-laden flash websites don't work out
      of the box with flash on Fedora 19. Below is the list of steps I took
      to get this working in case it helps anyone else. The majority of
      these instructions were pieced together from the post and comments at
      http://wtogami.blogspot.com/2012/12/amazon-instant-video-on-fedora-16.html. The
      linked RPMs were originally taken from that post and recompiled for
      Fedora 19. These steps have only been tested in Firefox and 64 bit
      Fedora 19 - I don't think they'll work for Chrome.
      
      First, head to http://get.adobe.com/flashplayer/ and download the
      &quot;YUM for Linux (YUM)&quot; RPM. Then:
      
      # Install Adobe Flash and its browser plugin
      sudo yum install...
    </summary>
    <content type="html">
      
      &lt;p&gt;Amazon Instant Video and other DRM-laden flash websites don't work out
      of the box with flash on Fedora 19. Below is the list of steps I took
      to get this working in case it helps anyone else. The majority of
      these instructions were pieced together from the post and comments at
      &lt;a href=&quot;http://wtogami.blogspot.com/2012/12/amazon-instant-video-on-fedora-16.html&quot;&gt;http://wtogami.blogspot.com/2012/12/amazon-instant-video-on-fedora-16.html&lt;/a&gt;. The
      linked RPMs were originally taken from that post and recompiled for
      Fedora 19. These steps have only been tested in Firefox and 64 bit
      Fedora 19 - I don't think they'll work for Chrome.&lt;/p&gt;
      
      &lt;p&gt;First, head to &lt;a href=&quot;http://get.adobe.com/flashplayer/&quot;&gt;http://get.adobe.com/flashplayer/&lt;/a&gt; and download the
      &quot;YUM for Linux (YUM)&quot; RPM. Then:&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;# Install Adobe Flash and its browser plugin
      sudo yum install -y adobe-release-x86_64-1.0-1.noarch.rpm
      sudo yum install -y flash-plugin
      
      # Install a simple SELinux policy file for Flash
      sudo yum install -y policycoreutils-devel
      wget http://togami.com/~warren/archive/2012/adobedrm.te
      checkmodule -M -m -o adobedrm.mod adobedrm.te
      sudo semodule_package -o adobedrm.pp -m adobedrm.mod
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Download the fakehal RPMs for Fedora 19 at
      &lt;a href=&quot;http://thinkingconcurrently.com/files/f19_flash/fakehal-0.5.14-7.fc19.x86_64.rpm&quot;&gt;http://thinkingconcurrently.com/files/f19_flash/fakehal-0.5.14-7.fc19.x86_64.rpm&lt;/a&gt;
      and
      &lt;a href=&quot;http://thinkingconcurrently.com/files/f19_flash/fakehal-libs-0.5.14-7.fc19.x86_64.rpm&quot;&gt;http://thinkingconcurrently.com/files/f19_flash/fakehal-libs-0.5.14-7.fc19.x86_64.rpm&lt;/a&gt;&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;# Install the fakehal RPMs
      sudo yum install -y fakehal-0.5.14-7.fc19.x86_64.rpm \
        fakehal-libs-0.5.14-7.fc19.x86_64.rpm
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;At this point, make sure all Firefox windows are closed.&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;rm -rf ~/.adobe/Flash_Player/
      sudo mkdir -p /usr/share/hal/fdi/preprobe \
        /usr/share/hal/fdi/information \
        /usr/share/hal/fdi/policy/20thirdparty \
        /var/cache/hald/
      sudo ln -s /usr/share/hal /etc/hal
      sudo touch /var/cache/hald/fdi-cache
      sudo systemctl start haldaemon.service
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Now start up Firefox and watch your favorite Amazon Instant Video. Let me know if it works for you!&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <id>http://thinkingconcurrently.com/blog/2011/08/24/jrubyconf-preso/</id>
    <title>JRubyConf Presentation</title>
    <updated>2013-07-22T21:39:23-04:00</updated>
    <published>2011-08-24T00:00:00+00:00</published>
    <link href="http://thinkingconcurrently.com/blog/2011/08/24/jrubyconf-preso/" rel="alternate" type="text/html" />
    <summary>
      
      I had a blast at JRubyConf 2011 this year, and not just
      because of the whisky tasting. It was fun to finally put faces to all
      the people I interact with over the internet and to meet a few new
      ones.
      
      Video and slides from my presentation are below:
      
      
      
      
      
      
      
       
      ...
    </summary>
    <content type="html">
      
      &lt;p&gt;I had a blast at &lt;a href=&quot;http://jrubyconf.com/&quot;&gt;JRubyConf 2011&lt;/a&gt; this year, and not just
      because of the whisky tasting. It was fun to finally put faces to all
      the people I interact with over the internet and to meet a few new
      ones.&lt;/p&gt;
      
      &lt;p&gt;Video and slides from my presentation are below:&lt;/p&gt;
      
      &lt;iframe frameborder=&quot;0&quot; height=&quot;375&quot; src=&quot;http://player.vimeo.com/video/27494052&quot; width=&quot;500&quot;&gt;&lt;/iframe&gt;
      
      &lt;p&gt;&lt;br&gt;
      &lt;br&gt;
      &lt;br&gt;&lt;/p&gt;
      
      &lt;div id=&quot;__ss_8765738&quot; style=&quot;width:425px&quot;&gt;&lt;iframe frameborder=&quot;0&quot; height=&quot;355&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://www.slideshare.net/slideshow/embed_code/8765738&quot; width=&quot;425&quot;&gt;&lt;/iframe&gt; &lt;div style=&quot;padding:5px 0 12px&quot;&gt;&lt;/div&gt;&lt;/div&gt;
    </content>
  </entry>
  <entry>
    <id>http://thinkingconcurrently.com/blog/2011/06/17/scaling-rails-with-torquebox/</id>
    <title>Scaling Rails Applications with TorqueBox</title>
    <updated>2013-07-22T21:39:23-04:00</updated>
    <published>2011-06-17T00:00:00+00:00</published>
    <link href="http://thinkingconcurrently.com/blog/2011/06/17/scaling-rails-with-torquebox/" rel="alternate" type="text/html" />
    <summary>
      
      Below are video and slides from my Scaling Rails Applications with
      TorqueBox presentation given at JUDCon:2011 Boston on May
      3rd, 2011. This was my first opportunity to speak at a conference and
      I thoroughly enjoyed and learned a lot from it. That's one of the
      great things about having a video of the presentation; I see plenty of
      things I can improve upon for next time.
      
      Despite my critiques, I feel the talk went well and look forward to
      bringing Ruby to more JBoss users and developers at next year's
      JUDCon!
      
      
       
      
      Scaling Rails With Torquebox Presented at JUDCon:2011 Boston
      ...
    </summary>
    <content type="html">
      
      &lt;p&gt;Below are video and slides from my &lt;em&gt;Scaling Rails Applications with
      TorqueBox&lt;/em&gt; presentation given at &lt;a href=&quot;http://www.jboss.org/events/JUDCon.html&quot;&gt;JUDCon:2011 Boston&lt;/a&gt; on May
      3rd, 2011. This was my first opportunity to speak at a conference and
      I thoroughly enjoyed and learned a lot from it. That's one of the
      great things about having a video of the presentation; I see plenty of
      things I can improve upon for next time.&lt;/p&gt;
      
      &lt;p&gt;Despite my critiques, I feel the talk went well and look forward to
      bringing Ruby to more JBoss users and developers at next year's
      JUDCon!&lt;/p&gt;
      
      &lt;iframe frameborder=&quot;0&quot; height=&quot;281&quot; src=&quot;http://player.vimeo.com/video/24777987?title=0&amp;amp;byline=0&amp;amp;portrait=0&quot; width=&quot;500&quot;&gt;&lt;/iframe&gt;
      &lt;p&gt; &lt;/p&gt;
      
      &lt;div id=&quot;__ss_7820753&quot; style=&quot;width:425px&quot;&gt;&lt;strong style=&quot;display:block;margin:12px 0 4px&quot;&gt;&lt;a href=&quot;http://www.slideshare.net/benbrowning/scaling-rails-with-torquebox-presented-at-judcon2011-boston&quot; title=&quot;Scaling Rails With Torquebox Presented at JUDCon:2011 Boston&quot;&gt;Scaling Rails With Torquebox Presented at JUDCon:2011 Boston&lt;/a&gt;&lt;/strong&gt;&lt;object height=&quot;355&quot; id=&quot;__sse7820753&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scalingrailswithtorquebox-110503130555-phpapp01&amp;amp;stripped_title=scaling-rails-with-torquebox-presented-at-judcon2011-boston&amp;amp;userName=benbrowning&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot; height=&quot;355&quot; name=&quot;__sse7820753&quot; src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scalingrailswithtorquebox-110503130555-phpapp01&amp;amp;stripped_title=scaling-rails-with-torquebox-presented-at-judcon2011-boston&amp;amp;userName=benbrowning&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;425&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
    </content>
  </entry>
  <entry>
    <id>http://thinkingconcurrently.com/blog/2010/09/19/updated-deltacloud-virtualbox-driver/</id>
    <title>Updated Deltacloud VirtualBox Driver</title>
    <updated>2013-07-22T21:39:23-04:00</updated>
    <published>2010-09-19T00:00:00+00:00</published>
    <link href="http://thinkingconcurrently.com/blog/2010/09/19/updated-deltacloud-virtualbox-driver/" rel="alternate" type="text/html" />
    <summary>
      
      The SteamCannon project uses Deltacloud to abstract away the
      details of specific cloud providers when launching instances. For
      local development, it's nice to be able to launch a cluster of virtual
      machines in VirtualBox instead of actually starting and stopping
      instances on a public cloud like Amazon EC2.
      
      Michal Fojtik created a deltacloud-virtualbox-driver many months
      ago to add VirtualBox support to Deltacloud. However, Deltacloud has
      evolved quite a bit since it was initially released and that driver no
      longer works with the current implementation.
      
      I've taken Michal's great start and updated it to work with the latest
      Deltacloud release, giving it a few other changes in the process.
      
      
        
      ...
    </summary>
    <content type="html">
      
      &lt;p&gt;The &lt;a href=&quot;http://steamcannon.org&quot;&gt;SteamCannon&lt;/a&gt; project uses &lt;a href=&quot;http://deltacloud.org&quot;&gt;Deltacloud&lt;/a&gt; to abstract away the
      details of specific cloud providers when launching instances. For
      local development, it's nice to be able to launch a cluster of virtual
      machines in &lt;a href=&quot;http://www.virtualbox.org&quot;&gt;VirtualBox&lt;/a&gt; instead of actually starting and stopping
      instances on a public cloud like Amazon EC2.&lt;/p&gt;
      
      &lt;p&gt;Michal Fojtik created a &lt;a href=&quot;http://gitorious.org/deltacloud-devel/deltacloud-virtualbox-driver&quot;&gt;deltacloud-virtualbox-driver&lt;/a&gt; many months
      ago to add VirtualBox support to Deltacloud. However, Deltacloud has
      evolved quite a bit since it was initially released and that driver no
      longer works with the current implementation.&lt;/p&gt;
      
      &lt;p&gt;I've taken Michal's great start and updated it to work with the latest
      Deltacloud release, giving it a few other changes in the process.&lt;/p&gt;
      
      &lt;ul&gt;
        &lt;li&gt;
          &lt;p&gt;Switched to the excellent &lt;a href=&quot;http://github.com/mitchellh/virtualbox&quot;&gt;virtualbox gem&lt;/a&gt; which uses the
      VirtualBox COM API instead of shelling out to the VBoxManage
      process. The COM API is substantially faster and should allow this
      driver to work on Windows instead of just Linux/Mac (but it hasn't
      been tested on Windows).&lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;p&gt;Networking settings of the launched instance are now copied from the
      parent image instead of being hardcoded to a specific value.&lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;p&gt;The driver now works under JRuby. There are still some optimizations
      to be made in the code based on which environment it's running in,
      but it will at least run in JRuby and MRI.&lt;/p&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
      
      &lt;h3 id=&quot;installing-the-virtualbox-driver&quot;&gt;Installing the VirtualBox Driver&lt;/h3&gt;
      
      &lt;p&gt;The driver is very new and still needs to mature a bit before I submit
      it to the upstream Deltacloud project. Until then, if you're
      comfortable living on the edge, read below for installation
      instructions.&lt;/p&gt;
      
      &lt;ul&gt;
        &lt;li&gt;
          &lt;p&gt;Install VirtualBox 3.2.x (might work with 3.1.x but has not been
      tested) - &lt;a href=&quot;http://www.virtualbox.org/wiki/Downloads&quot;&gt;http://www.virtualbox.org/wiki/Downloads&lt;/a&gt;&lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;p&gt;Install bbrowning-virtualbox gem (temporary fork of upstream
      implementing some missing features)&lt;/p&gt;
      
          &lt;pre&gt;&lt;code&gt;  $ gem install bbrowning-virtualbox --pre
      &lt;/code&gt;&lt;/pre&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;p&gt;Install bbrowning-deltacloud-core gem&lt;/p&gt;
      
          &lt;pre&gt;&lt;code&gt;  $ gem install bbrowning-deltacloud-core
      &lt;/code&gt;&lt;/pre&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;p&gt;Launch deltacloud-core with the VirtualBox driver&lt;/p&gt;
      
          &lt;pre&gt;&lt;code&gt;  $ deltacloudd -i virtualbox
      &lt;/code&gt;&lt;/pre&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
      
      &lt;p&gt;If all goes well, you should be able to go to &lt;a href=&quot;http://localhost:3001&quot;&gt;http://localhost:3001&lt;/a&gt;
      in your browser and see the Deltacloud web interface. Clicking the
      Images link should display all virtual machines you have setup inside
      VirtualBox - if you don't see any, try creating a new virtual machine
      in VirtualBox and then come back to play around.&lt;/p&gt;
      
      &lt;p&gt;The instances launched from an image clone the hard drive of the image
      but any changes made in the instance are not reflected in the parent
      image. If you don't have a lot of free hard drive space, make sure to
      go to the Instances page and destroy stopped instances that you no
      longer need.&lt;/p&gt;
      
      &lt;p&gt;Enjoy!&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <id>http://thinkingconcurrently.com/blog/2010/09/17/moving-from-github-pages-to-awestruct/</id>
    <title>Moving From GitHub Pages to Awestruct</title>
    <updated>2013-07-22T21:39:23-04:00</updated>
    <published>2010-09-17T00:00:00+00:00</published>
    <link href="http://thinkingconcurrently.com/blog/2010/09/17/moving-from-github-pages-to-awestruct/" rel="alternate" type="text/html" />
    <summary>
      
      I'm switching the site over from GitHub Pages to Awestruct. I was
      turned on to Awestruct by Bob McWhirter and am really digging the
      compass / blueprint integration and ease of writing extensions.
      
      As part of the transition, I'm also switching web hosts. It should go
      pretty smoothly but because of a poor IntenseDebate implementation on
      my old site I'm having a hard time pulling all the previous blog
      comments over. There weren't many to begin with, but I apologize in
      advance if I can't get them all to show up on the new site.
      ...
    </summary>
    <content type="html">
      
      &lt;p&gt;I'm switching the site over from GitHub Pages to &lt;a href=&quot;http://awestruct.org&quot;&gt;Awestruct&lt;/a&gt;. I was
      turned on to Awestruct by &lt;a href=&quot;http://bob.mcwhirter.org&quot;&gt;Bob McWhirter&lt;/a&gt; and am really digging the
      compass / blueprint integration and ease of writing extensions.&lt;/p&gt;
      
      &lt;p&gt;As part of the transition, I'm also switching web hosts. It should go
      pretty smoothly but because of a poor IntenseDebate implementation on
      my old site I'm having a hard time pulling all the previous blog
      comments over. There weren't many to begin with, but I apologize in
      advance if I can't get them all to show up on the new site.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <id>http://thinkingconcurrently.com/blog/2010/07/08/torquebox-vagrant-box-updated-to-beta20/</id>
    <title>TorqueBox Vagrant Box Updated to Beta20</title>
    <updated>2013-07-22T21:39:23-04:00</updated>
    <published>2010-07-08T00:00:00+00:00</published>
    <link href="http://thinkingconcurrently.com/blog/2010/07/08/torquebox-vagrant-box-updated-to-beta20/" rel="alternate" type="text/html" />
    <summary>
      
      Hot on the heels of the TorqueBox Beta20 release, I've pushed an updated version of the TorqueBox Vagrant box. The box is now 1.6GB in size - I'm not entirely sure why it's larger than last time but if I figure it out I'll upload a smaller version.
      
      Grab it here:
      
      http://bbrowning-boxes.s3.amazonaws.com/torquebox-1.0.0.Beta20.box?torrent (bittorrent)
      
      http://bbrowning-boxes.s3.amazonaws.com/torquebox-1.0.0.Beta20.box (direct download)
      
      Refer to my previous post for details on getting started with TorqueBox and Vagrant.
      
      ...
    </summary>
    <content type="html">
      
      &lt;p&gt;Hot on the heels of the &lt;a href=&quot;http://torquebox.org/news/2010/07/07/torquebox-1-0-0-beta20-finally/&quot;&gt;TorqueBox Beta20 release&lt;/a&gt;, I've pushed an updated version of the TorqueBox Vagrant box. The box is now 1.6GB in size - I'm not entirely sure why it's larger than last time but if I figure it out I'll upload a smaller version.&lt;/p&gt;
      
      &lt;p&gt;Grab it here:&lt;/p&gt;
      
      &lt;p&gt;&lt;a href=&quot;http://bbrowning-boxes.s3.amazonaws.com/torquebox-1.0.0.Beta20.box?torrent&quot;&gt;http://bbrowning-boxes.s3.amazonaws.com/torquebox-1.0.0.Beta20.box?torrent&lt;/a&gt; (bittorrent)&lt;/p&gt;
      
      &lt;p&gt;&lt;a href=&quot;http://bbrowning-boxes.s3.amazonaws.com/torquebox-1.0.0.Beta20.box&quot;&gt;http://bbrowning-boxes.s3.amazonaws.com/torquebox-1.0.0.Beta20.box&lt;/a&gt; (direct download)&lt;/p&gt;
      
      &lt;p&gt;Refer to my &lt;a href=&quot;http://thinkingconcurrently.com/2010/06/06/developing-rails-apps-with-torquebox-and-vagrant.html&quot;&gt;previous post&lt;/a&gt; for details on getting started with TorqueBox and Vagrant.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <id>http://thinkingconcurrently.com/blog/2010/06/06/developing-rails-apps-with-torquebox-and-vagrant/</id>
    <title>Developing Rails Apps with TorqueBox and Vagrant</title>
    <updated>2013-07-22T21:39:23-04:00</updated>
    <published>2010-06-06T00:00:00+00:00</published>
    <link href="http://thinkingconcurrently.com/blog/2010/06/06/developing-rails-apps-with-torquebox-and-vagrant/" rel="alternate" type="text/html" />
    <summary>
      
      The TorqueBox project does a great job of bringing together the best parts of Ruby, Rails, JBoss, and the JVM. However, I've recently started using Vagrant for all my development work and couldn't find anyone that had used the two together. So, after hacking around a bit, I've created a Vagrant box anyone can use to easily get up and running with TorqueBox.
      
      The rest of this post assumes a basic level of familiarity with TorqueBox and Vagrant - things will make more sense if you browse some of their documention before reading further.
      
      What's Included in the Box
      
        Ubuntu 8.04
      ...
    </summary>
    <content type="html">
      
      &lt;p&gt;The &lt;a href=&quot;http://torquebox.org/&quot;&gt;TorqueBox&lt;/a&gt; project does a great job of bringing together the best parts of Ruby, Rails, JBoss, and the JVM. However, I've recently started using &lt;a href=&quot;http://vagrantup.com&quot;&gt;Vagrant&lt;/a&gt; for all my development work and couldn't find anyone that had used the two together. So, after hacking around a bit, I've created a Vagrant box anyone can use to easily get up and running with TorqueBox.&lt;/p&gt;
      
      &lt;p&gt;&lt;em&gt;The rest of this post assumes a basic level of familiarity with TorqueBox and Vagrant - things will make more sense if you browse some of their documention before reading further.&lt;/em&gt;&lt;/p&gt;
      
      &lt;h3 id=&quot;whats-included-in-the-box&quot;&gt;What's Included in the Box&lt;/h3&gt;
      &lt;ul&gt;
        &lt;li&gt;Ubuntu 8.04&lt;/li&gt;
        &lt;li&gt;OpenJDK 1.6.0_0-b11&lt;/li&gt;
        &lt;li&gt;TorqueBox 1.0.0.Beta19&lt;/li&gt;
      &lt;/ul&gt;
      
      &lt;p&gt;Because it contains a full TorqueBox binary and a Java runtime, the box is 1.2GB in size.&lt;/p&gt;
      
      &lt;h3 id=&quot;creating-your-first-project&quot;&gt;Creating Your First Project&lt;/h3&gt;
      
      &lt;ul&gt;
        &lt;li&gt;&lt;a href=&quot;http://vagrantup.com/docs/getting-started/index.html&quot;&gt;Install Vagrant&lt;/a&gt; if you haven't already&lt;/li&gt;
      &lt;/ul&gt;
      
      &lt;ul&gt;
        &lt;li&gt;
          &lt;p&gt;Add the TorqueBox Box to Vagrant&lt;/p&gt;
      
          &lt;p&gt;&lt;strong&gt;Preferred Method - Bittorrent&lt;/strong&gt;&lt;/p&gt;
      
          &lt;p&gt;Use your favorite Bittorrent client to download &lt;a href=&quot;http://bbrowning-boxes.s3.amazonaws.com/torquebox.box?torrent&quot;&gt;http://bbrowning-boxes.s3.amazonaws.com/torquebox.box?torrent&lt;/a&gt; and then run&lt;/p&gt;
      
          &lt;pre&gt;&lt;code&gt;  $ vagrant box add torquebox path_to_downloaded_file/torquebox.box 
      &lt;/code&gt;&lt;/pre&gt;
      
          &lt;p&gt;&lt;strong&gt;Alternate Method - Direct Download&lt;/strong&gt;&lt;/p&gt;
      
          &lt;p&gt;The direct download will be faster (but cost me more money) unless several nice people help me seed the torrent.&lt;/p&gt;
      
          &lt;pre&gt;&lt;code&gt;  $ vagrant box add torquebox http://bbrowning-boxes.s3.amazonaws.com/torquebox.box
      &lt;/code&gt;&lt;/pre&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;p&gt;Create and initialize a sample application&lt;/p&gt;
      
          &lt;pre&gt;&lt;code&gt;  $ mkdir sample_app
        $ cd sample_app
        $ vagrant init torquebox
      &lt;/code&gt;&lt;/pre&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;p&gt;Run the box&lt;/p&gt;
      
          &lt;pre&gt;&lt;code&gt;  $ vagrant up
      &lt;/code&gt;&lt;/pre&gt;
      
          &lt;p&gt;This step may take a few minutes.&lt;/p&gt;
        &lt;/li&gt;
        &lt;li&gt;
          &lt;p&gt;Create a Rails project&lt;/p&gt;
      
          &lt;p&gt;To simplify things, all rails/rake commands should be run from inside the TorqueBox VM.&lt;/p&gt;
      
          &lt;p&gt;Log into the VM and cd to the shared vagrant folder.&lt;/p&gt;
      
          &lt;pre&gt;&lt;code&gt;  $ vagrant ssh
        $ cd /vagrant
      &lt;/code&gt;&lt;/pre&gt;
      
          &lt;p&gt;Follow the steps from the &lt;a href=&quot;http://torquebox.org/documentation/1.0.0.Beta19/web.html#rails-support&quot;&gt;TorqueBox Rails documentation&lt;/a&gt; for creating our Rails application with the TorqueBox template:&lt;/p&gt;
      
          &lt;pre&gt;&lt;code&gt;  $ rails -m $TORQUEBOX_HOME/share/rails/template.rb .
      &lt;/code&gt;&lt;/pre&gt;
      
          &lt;p&gt;If you look on your host machine, you'll see the Rails application files were created in your sample_app directory. The /vagrant directory inside your VM is a bidirectional shared-folder with the sample_app directory on your host.&lt;/p&gt;
      
          &lt;p&gt;After creating a new project, you'll need to redeploy your Rails app into TorqueBox. You only have to do this once - the VM will automatically pick up on the project the next time it's started.&lt;/p&gt;
      
          &lt;pre&gt;&lt;code&gt;  $ rake torquebox:rails:deploy
      &lt;/code&gt;&lt;/pre&gt;
      
          &lt;p&gt;Wait 15-30 seconds and point your browser to &lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt;. You should see the familiar Rails &quot;Welcome aboard&quot; page.&lt;/p&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
      
      &lt;p&gt;&lt;strong&gt;Congratulations, you're now running a Rails application inside TorqueBox.&lt;/strong&gt;&lt;/p&gt;
      
      &lt;h3 id=&quot;next-steps&quot;&gt;Next Steps&lt;/h3&gt;
      
      &lt;p&gt;If you've made it this far, you've done the hard part. Use your favorite editor on your host machine to develop your Rails application like you always have. The only thing to remember is to run &lt;code&gt;script/generate&lt;/code&gt;, &lt;code&gt;rake db:migrate&lt;/code&gt;, etc from inside the Vagrant VM. If you try to run these on the host you most likely won't have the right version of Rails or JRuby installed.&lt;/p&gt;
      
      &lt;p&gt;Changes made to your Rails project should be visible on the next page refresh just like regular Rails development. To try this, generate a simple Posts scaffold.&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;$ ./script/generate scaffold post title:string body:text
      $ rake db:migrate
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Point your browser to &lt;a href=&quot;http://localhost:3000/posts&quot;&gt;http://localhost:3000/posts&lt;/a&gt; and your should see the scaffolded post index.&lt;/p&gt;
      
      &lt;p&gt;When you've finished working on this project or need to switch to another one, issue a &lt;code&gt;vagrant halt&lt;/code&gt; or &lt;code&gt;vagrant destroy&lt;/code&gt; from the sample_app directory on your host. The next time you need to work on this project again, issue a &lt;code&gt;vagrant up&lt;/code&gt; to boot everything back up. See the Vagrant docs for more details on these commands.&lt;/p&gt;
      
      &lt;p&gt;Let's try it.&lt;/p&gt;
      
      &lt;p&gt;If you're still logged into the VM via ssh, log out.&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;$ exit
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Destroy the VM&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;$ vagrant destroy
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Now re-create the VM and start it back up (will take several minutes)&lt;/p&gt;
      
      &lt;pre&gt;&lt;code&gt;$ vagrant up
      &lt;/code&gt;&lt;/pre&gt;
      
      &lt;p&gt;Wait 15-30 seconds for TorqueBox to start up and then point your browser to &lt;a href=&quot;http://localhost:3000/posts&quot;&gt;http://localhost:3000/posts&lt;/a&gt; - your app is back right where we left off.&lt;/p&gt;
      
      &lt;p&gt;If you have any feedback, requests, or problems with the TorqueBox box, contact me on Twitter (@bbrowning). Enjoy!&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <id>http://thinkingconcurrently.com/blog/2009/05/21/running-bespin-on-the-couch-pt1/</id>
    <title>Running Bespin on the Couch</title>
    <updated>2013-07-22T21:39:23-04:00</updated>
    <published>2009-05-21T00:00:00+00:00</published>
    <link href="http://thinkingconcurrently.com/blog/2009/05/21/running-bespin-on-the-couch-pt1/" rel="alternate" type="text/html" />
    <summary>
      
      Sparked by a thread on the CouchDB Users mailing list with promises of beer and internet groupies, I've started a project to get Bespin running as a CouchApp on CouchDB. The long-term goal is to allow you to create and edit CouchApps from within Bespin, which is itself a CouchApp.
      
      My first goal was to get Bespin's UI functioning as a CouchApp. Except for a few small things, that's already finished.
      
      Here's a few screenshots of Bespin running as a CouchApp on my local CouchDB:
      
      
      Index Page
      
      
      Help Menu
      
      
      Dashboard
      
      
      Editor
      
      Over the next few days I'll be focusing on porting their filesystem implementation to CouchDB and...
    </summary>
    <content type="html">
      
      &lt;p&gt;Sparked by a &lt;a href=&quot;http://mail-archives.apache.org/mod_mbox/couchdb-user/200905.mbox/%3Ce2111bbb0905201618u76a2ca5s464e9d22a1ac7004@mail.gmail.com%3E&quot;&gt;thread&lt;/a&gt; on the CouchDB Users mailing list with promises of beer and internet groupies, I've started a project to get &lt;a href=&quot;https://bespin.mozilla.com&quot;&gt;Bespin&lt;/a&gt; running as a CouchApp on CouchDB. The long-term goal is to allow you to create and edit CouchApps from within Bespin, which is itself a CouchApp.&lt;/p&gt;
      
      &lt;p&gt;My first goal was to get Bespin's UI functioning as a CouchApp. Except for a few small things, that's already finished.&lt;/p&gt;
      
      &lt;p&gt;Here's a few screenshots of Bespin running as a CouchApp on my local CouchDB:&lt;/p&gt;
      
      &lt;p&gt;&lt;a href=&quot;http://thinkingconcurrently.com/blog/assets/bespin/index.png&quot;&gt;&lt;img alt=&quot;Index&quot; src=&quot;http://thinkingconcurrently.com/blog/assets/bespin/index_small.png&quot;&gt;&lt;/a&gt;
      &lt;em&gt;Index Page&lt;/em&gt;&lt;/p&gt;
      
      &lt;p&gt;&lt;a href=&quot;http://thinkingconcurrently.com/blog/assets/bespin/help.png&quot;&gt;&lt;img alt=&quot;Help&quot; src=&quot;http://thinkingconcurrently.com/blog/assets/bespin/help_small.png&quot;&gt;&lt;/a&gt;
      &lt;em&gt;Help Menu&lt;/em&gt;&lt;/p&gt;
      
      &lt;p&gt;&lt;a href=&quot;http://thinkingconcurrently.com/blog/assets/bespin/dashboard.png&quot;&gt;&lt;img alt=&quot;Dashboard&quot; src=&quot;http://thinkingconcurrently.com/blog/assets/bespin/dashboard_small.png&quot;&gt;&lt;/a&gt;
      &lt;em&gt;Dashboard&lt;/em&gt;&lt;/p&gt;
      
      &lt;p&gt;&lt;a href=&quot;http://thinkingconcurrently.com/blog/assets/bespin/editor.png&quot;&gt;&lt;img alt=&quot;Editor&quot; src=&quot;http://thinkingconcurrently.com/blog/assets/bespin/editor_small.png&quot;&gt;&lt;/a&gt;
      &lt;em&gt;Editor&lt;/em&gt;&lt;/p&gt;
      
      &lt;p&gt;Over the next few days I'll be focusing on porting their filesystem implementation to CouchDB and CouchApp conventions. If you'd like to get involved, fork my &lt;a href=&quot;http://github.com/bbrowning/bespin_couch/tree/master&quot;&gt;bespin_couch&lt;/a&gt; project and have at it! Also, if anyone knows how I can make the GitHub repo track upstream changes from Bespin's Mercurial repo I'd like to get that setup so I'm not just working off of a snapshot.&lt;/p&gt;
      
      &lt;p&gt;I haven't had time to integrate Disqus with the blog yet so for now if you have any comments please send me a message on &lt;a href=&quot;http://github.com/bbrowning&quot;&gt;GitHub&lt;/a&gt; or a reply to &lt;a href=&quot;http://twitter.com/bbrowning&quot;&gt;@bbrowning&lt;/a&gt; on Twitter.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <id>http://thinkingconcurrently.com/blog/2009/05/17/scribbish-and-jekyll/</id>
    <title>Scribbish and Jekyll</title>
    <updated>2013-07-22T21:39:23-04:00</updated>
    <published>2009-05-17T00:00:00+00:00</published>
    <link href="http://thinkingconcurrently.com/blog/2009/05/17/scribbish-and-jekyll/" rel="alternate" type="text/html" />
    <summary>
      
      I really wanted a minimalistic, simple theme for my blog. After looking around a bit I settled on Scribbish, a popular theme in the Ruby world with packages for Typo, Mephisto, and WordPress. Unfortunately there's no package for Jekyll so I decided to try and port it myself.
      
      Both Mephisto and Jekyll use the Liquid templating engine so the port was pretty straightforward. It's still a work-in-progress but the basics are finished.
      
      Jekyll has an include tag to create reusable components but, unlike Mephisto's, you can't directly pass variables to the included file. This is fairly easy to workaround by using Liquid's...
    </summary>
    <content type="html">
      
      &lt;p&gt;I really wanted a minimalistic, simple theme for my blog. After looking around a bit I settled on &lt;a href=&quot;http://quotedprintable.com/pages/scribbish&quot;&gt;Scribbish&lt;/a&gt;, a popular theme in the Ruby world with packages for Typo, Mephisto, and WordPress. Unfortunately there's no package for Jekyll so I decided to try and port it myself.&lt;/p&gt;
      
      &lt;p&gt;Both Mephisto and Jekyll use the Liquid templating engine so the port was pretty straightforward. It's still a work-in-progress but the basics are finished.&lt;/p&gt;
      
      &lt;p&gt;Jekyll has an include tag to create reusable components but, unlike Mephisto's, you can't directly pass variables to the included file. This is fairly easy to workaround by using Liquid's &lt;code&gt;assign&lt;/code&gt; tag or explicitly looping over a collection of objects instead of using Mephisto's shortcuts. For example:&lt;/p&gt;
      
      &lt;p&gt;&lt;strong&gt;Jekyll&lt;/strong&gt;
          {% for post in site.posts %}
            {% include post.html %}
          {% endfor %}&lt;/p&gt;
      
      &lt;p&gt;&lt;strong&gt;Mephisto&lt;/strong&gt;
          {% include 'article' with articles %}&lt;/p&gt;
      
      &lt;p&gt;The Jekyll include tag looks for an &lt;code&gt;_includes&lt;/code&gt; directory at the root source directory. However, if you try to use the include tag from an already included file there's a bug where it looks for &lt;code&gt;_includes/_includes/included_file.html&lt;/code&gt;. To workaround this for now I just created a symlink in the &lt;code&gt;_includes&lt;/code&gt; directory to itself.
          cd _includes &amp;amp;&amp;amp; ln -s . _includes&lt;/p&gt;
      
      &lt;p&gt;Take a look at this blog's &lt;a href=&quot;http://github.com/bbrowning/bbrowning.github.com/tree/master&quot;&gt;source&lt;/a&gt;, particularly the _layouts and _includes directories, if you'd like to use the Scribbish theme for your own Jekyll-based blog.&lt;/p&gt;
    </content>
  </entry>
  <entry>
    <id>http://thinkingconcurrently.com/blog/2009/05/16/blogging-with-github-pages/</id>
    <title>Blogging With GitHub Pages</title>
    <updated>2013-07-22T21:39:23-04:00</updated>
    <published>2009-05-16T00:00:00+00:00</published>
    <link href="http://thinkingconcurrently.com/blog/2009/05/16/blogging-with-github-pages/" rel="alternate" type="text/html" />
    <summary>
      
      I've always wanted a place to talk about the projects I'm working on but a traditional blog just didn't feel right. A few weeks ago I stumbled across GitHub Pages and my inner geek was instantly aroused. GitHub Pages is really just free static site hosting coupled with a tool called Jekyll to generate your site's contents based on layouts and Markdown or Textile formatted text. This is both simple and powerful. It removes the distractions and lets me focus on what really matters - the content.
      
      ...
    </summary>
    <content type="html">
      
      &lt;p&gt;I've always wanted a place to talk about the projects I'm working on but a traditional blog just didn't feel right. A few weeks ago I stumbled across &lt;a href=&quot;http://pages.github.com&quot;&gt;GitHub Pages&lt;/a&gt; and my inner geek was instantly aroused. GitHub Pages is really just free static site hosting coupled with a tool called &lt;a href=&quot;http://github.com/mojombo/jekyll/tree/master&quot;&gt;Jekyll&lt;/a&gt; to generate your site's contents based on layouts and Markdown or Textile formatted text. This is both simple and powerful. It removes the distractions and lets me focus on what really matters - the content.&lt;/p&gt;
    </content>
  </entry>
</feed>
