<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Citrusbyte Blog | Web Development &amp; Web Strategy</title>
	
	<link>http://blog.citrusbyte.com</link>
	<description>The Official Citrusbyte Blog</description>
	<pubDate>Fri, 19 Jun 2009 20:54:58 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Citrusbyte-Home" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Sharespost Launches!</title>
		<link>http://feedproxy.google.com/~r/Citrusbyte-Home/~3/dJAD3SMM5Ug/</link>
		<comments>http://blog.citrusbyte.com/2009/06/19/sharespost-launches/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 20:51:24 +0000</pubDate>
		<dc:creator>will</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.citrusbyte.com/?p=233</guid>
		<description><![CDATA[
Ok we&#8217;re a few days late, but http://www.sharespost.com has just launched. Citrusbyte helped the company get to an internal beta in only 6 weeks with a lean team of two. We then ramped in their new internal developer who pushed the site to live.
Check out more about the company here: http://www.crunchbase.com/company/sharespost
And the press: http://www.sharespost.com/pages/press
SharesPost makes [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm4.static.flickr.com/3659/3642214154_9622bfedfb.jpg?v=0" width="300px" style="float:left;margin:15px;"/></p>
<p>Ok we&#8217;re a few days late, but <a href="http://www.sharespost.com">http://www.sharespost.com</a> has just launched. Citrusbyte helped the company get to an internal beta in only 6 weeks with a lean team of two. We then ramped in their new internal developer who pushed the site to live.</p>
<p>Check out more about the company here: <a href="http://www.crunchbase.com/company/sharespost">http://www.crunchbase.com/company/sharespost</a></p>
<p>And the press: <a href="http://www.sharespost.com/pages/press">http://www.sharespost.com/pages/press</a></p>
<p>SharesPost makes private equity liquid by efficiently matching buyers, sellers of private company stock and giving them the information, tools and process to make transactions easy and safe. At SharesPost you can download research reports and corporate documents for hundred’s of private companies, including Facebook, Twitter and LinkedIn. Plus, see prices from previous transactions. When you’re ready, connect directly with buyers and sellers of private company shares without brokers or their commissions. SharesPost provides you with automated contracts and integrated e-signature and escrow services to handle transfer restrictions like company rights of first refusal and help process your transaction.</p>
<img src="http://feeds.feedburner.com/~r/Citrusbyte-Home/~4/dJAD3SMM5Ug" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.citrusbyte.com/2009/06/19/sharespost-launches/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.citrusbyte.com/2009/06/19/sharespost-launches/</feedburner:origLink></item>
		<item>
		<title>Long time no see, RubyForge</title>
		<link>http://feedproxy.google.com/~r/Citrusbyte-Home/~3/uqge3JFUKt4/</link>
		<comments>http://blog.citrusbyte.com/2009/06/03/long-time-no-see-rubyforge/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 19:22:48 +0000</pubDate>
		<dc:creator>Damian Janowski</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[gems labs]]></category>

		<guid isPermaLink="false">http://blog.citrusbyte.com/?p=216</guid>
		<description><![CDATA[So, you are a good citizen in the Ruby community. You like to find patterns, extract them to a gem and make everyone benefit from it. You release early and release often. But you’re only releasing to GitHub, and suddenly you realize why: releasing to RubyForge is a huge pain, completely outside of your workflow.
Meet [...]]]></description>
			<content:encoded><![CDATA[<p>So, you are a good citizen in the Ruby community. You like to find patterns, extract them to a gem and make everyone benefit from it. You release early and release often. But you’re only releasing to GitHub, and suddenly you realize why: releasing to RubyForge is a huge pain, completely outside of your workflow.</p>
<h2 id="meet_joe_the_gem_publisher">Meet Joe, the gem publisher</h2>
<p>Joe builds on top of <a href="http://yehudakatz.com/2008/05/12/by-thors-hammer">Thor</a>’s awesomeness to take you from a gem specification to world domination in a single step:</p>
<pre><code>$ thor joe:release</code></pre>
<p>Given that you have a gemspec in place, Joe will build your gem and release it to RubyForge right away. The necessary steps to achieve this are broken up as Thor tasks just in case you need any of them separately. Check out the <a href="http://labs.citrusbyte.com/projects/joe">README</a> to find out more.</p>
<h2 id="what_about_hoe">What about Hoe?</h2>
<p>Of course, there’s Hoe. But it introduces another level of indirection by adding a number of artifacts to circumvent actually writing a gemspec. If you want to have a code generator and a bunch of <tt>*.txt</tt> files instead of a simple and streamlined gemspec, by all means make sure to give Hoe a try. Chances are you already have it installed: <a href="http://www.ruby-forum.com/topic/159459">until recently</a>, Hoe used to produce gems that depended on Hoe itself. That’s why you’re likely to get something out of <tt>gem list hoe</tt> even if you’ve never used it to write a gem. Yeah, creepy.</p>
<p>Otherwise, spare yourself the hassle and try Joe, a guy that honors your gemspec and does the work for you. After all, maintaining your gemspec <a href="http://github.com/djanowski/joe/blob/a727008eeb00ea2761a0e513191ffb0e0ae614a7/sample.gemspec.erb">is not that hard</a>.</p>
<h2 id="getting_started">Getting started</h2>
<p>Check out <a href="http://labs.citrusbyte.com/projects/joe">Joe’s homepage</a> in our labs and start rolling.</p>
<img src="http://feeds.feedburner.com/~r/Citrusbyte-Home/~4/uqge3JFUKt4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.citrusbyte.com/2009/06/03/long-time-no-see-rubyforge/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.citrusbyte.com/2009/06/03/long-time-no-see-rubyforge/</feedburner:origLink></item>
		<item>
		<title>Stories</title>
		<link>http://feedproxy.google.com/~r/Citrusbyte-Home/~3/v4ddvSNdeGI/</link>
		<comments>http://blog.citrusbyte.com/2009/05/20/stories/#comments</comments>
		<pubDate>Thu, 21 May 2009 01:38:32 +0000</pubDate>
		<dc:creator>Michel Martens</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.citrusbyte.com/?p=210</guid>
		<description><![CDATA[With Cucumber, you write stories and user acceptance tests in plain English, something a lot of people seem to like.
Feature: Search
  As a user
  I want to find information
  So I can learn more

  Scenario: Find what I'm looking for
    Given I am on the Google search page
 [...]]]></description>
			<content:encoded><![CDATA[<p>With Cucumber, you write stories and user acceptance tests in plain English, something a lot of people seem to like.</p>
<pre><code>Feature: Search
  As a user
  I want to find information
  So I can learn more

  Scenario: Find what I'm looking for
    Given I am on the Google search page
    When I search for "rspec"
    Then I should see a link to RSpec-1.2.4: Home</code></pre>
<p>Then you need to write your “step” files, where you add blocks with regular expressions that must match your plain English user stories and user acceptance tests. Inside those blocks you add your actual Ruby code. If you are using Cucumber for testing Rails or Sinatra, then your step definitions will look like this:</p>
<pre><code>Given 'I am on the Google search page' do
  visit('http://www.google.com/')
end

When /I search for "(.*)"/ do |query|
  fill_in('q', :with =&gt; query)
  click_button 'Google Search'
  selenium.wait_for_page_to_load
end

Then /I should see a link to (.*)/ do |expected_url|
  click_link expected_url
end</code></pre>
<p>Now that you have your plain English features files and your step files, you can finally run your tests. As a result, you will get a nice output of the user stories and user acceptance tests in plain English. But just to clarify that: the output is the same plain English stories you wrote at the beginning. The cost for this is to keep in sync two files for mostly the same thing.</p>
<p>In Citrusbyte we have a different workflow. We agree on the user stories with the client, and we put into instructions the user acceptance tests. We do that using <a href="http://labs.citrusbyte.com/projects/stories">Stories</a>, which is a small add on for <a href="http://labs.citrusbyte.com/projects/contest">Contest</a>. It allows you to declare user stories, scenarios and steps using Webrat. The same example, this time with Stories, would look like this:</p>
<pre><code>class SearchStoriesTest &lt; ActionController::IntegrationTest
  story "As a user I want to find information so I can learn more" do
    scenario "Find what I'm looking for" do

      visit "http://www.google.com/"

      fill_in "q", :with =&gt; "Citrusbyte Stories"

      click_button "Google Search"

      assert_contain "citrusbyte's stories"

      click_link "citrusbyte's stories at master - GitHub"

      assert_contain "Stories and User Acceptance Tests"
    end
  end
end</code></pre>
<p>When you run that with the <strong>stories</strong> runner, you get this output:</p>
<pre><code>As a user I want to find information so I can learn more
  — Find what I'm looking for
      Go to “http://www.google.com”
      Fill in “q” with “Citrusbyte Stories”
      Click “Google Search”
      I should see “citrusbyte's stories”
      Click “citrusbyte's stories at master - GitHub”
      I should see “Stories and User Acceptance Tests”</code></pre>
<p>Now you can redirect that output to a text file and email it to your client, or you can use the <strong>stories-pdf</strong> runner, send the PDF straight to your client and get a delicious cake in return. Don’t believe me? Check <a href="http://blog.citrusbyte.com/2009/05/05/citrusbyte-turns-up-the-volume-with-musikontrol/">this post</a>.</p>
<p>You will have all your tests in one place, you will be writing Ruby, your clients will be happier than ever and the overhead will be minimal. Grab the gem from <a href="http://github.com/citrusbyte/stories">github</a> and start impressing your clients today!</p>
<img src="http://feeds.feedburner.com/~r/Citrusbyte-Home/~4/v4ddvSNdeGI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.citrusbyte.com/2009/05/20/stories/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.citrusbyte.com/2009/05/20/stories/</feedburner:origLink></item>
		<item>
		<title>Introducing Contest</title>
		<link>http://feedproxy.google.com/~r/Citrusbyte-Home/~3/IZka12bYd5M/</link>
		<comments>http://blog.citrusbyte.com/2009/05/19/introducing-contest/#comments</comments>
		<pubDate>Wed, 20 May 2009 01:46:45 +0000</pubDate>
		<dc:creator>Michel Martens</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.citrusbyte.com/?p=192</guid>
		<description><![CDATA[At Citrusbyte we&#8217;ve launched production websites with the major three Ruby testing frameworks: Test::Unit, RSpec, and Shoulda. In our experience using these libraries, we never felt like we found our ideal framework. We wanted to move the company toward a single testing platform, so we looked at what was out there realized none of the [...]]]></description>
			<content:encoded><![CDATA[<p>At Citrusbyte we&#8217;ve launched production websites with the major three Ruby testing frameworks: Test::Unit, RSpec, and Shoulda. In our experience using these libraries, we never felt like we found our ideal framework. We wanted to move the company toward a single testing platform, so we looked at what was out there realized none of the current offerings fit what we needed and ended up creating Contest.</p>
<h2>Test::Unit</h2>
<p>Test::Unit is old and well tested, comes with the standard library ,and is easy to pick. The downside is that after using Shoulda and RSpec we fell in love with nested contexts - without them the code gets too large and not DRY. It leads to pulling out lots of helpers to reuse in your tests, which in turn takes your context setup away from your tests (a similar problem to what occurs with fixtures). As a test suite grows larger, the helper suite grows in a different place and it leads to hard-to-maintain tests.</p>
<h2>RSpec</h2>
<p>RSpec adds a magic syntax for no good reason. For example, compare these two assertions:</p>
<p>With RSpec:</p>
<pre>@user.should have(4).friends</pre>
<p>With the rest, using plain old Ruby:</p>
<pre>assert @user.friends.size == 4</pre>
<p>Or using a helper assertion:</p>
<pre>assert_equal 4, @user.friends.size</pre>
<p>While the magic syntax is helpful for getting into the BDD mindset, once you get it you can do BDD with any similar tool.</p>
<p>Another point against RSpec is the fact that its codebase is big and somehow unstable. Even if the developers are fast at patching bugs, the testing framework is a place where you really don&#8217;t want to deal with bugs. A larger codebase also means that you need more time to understand its internals in case you need to patch it yourself. Finally, RSpec is the slowest of the lot, and with large test suites the difference can amount to many seconds.</p>
<h2>Shoulda</h2>
<p>Shoulda provides what we want, but also provides features we don&#8217;t want to use. We don&#8217;t want macros, before_* statements, Rails or ActiveRecord integration. We want our testing framework to test our code, not code from other libraries.</p>
<p>In the end, Shoulda and RSpec give us roughly the same power (in terms of testing, ignoring that spec/mocks is included in RSpec), and Shoulda provides it with far less overhead (code that might need debugging but is difficult to understand). Shoulda forgoes the `foo.should be_valid?` syntax in order to avoid a couple of code smells. See <a href="http://giantrobots.thoughtbot.com/2007/4/6/shoulda-coulda-woulda" target="_blank">the Shoulda announcement</a> for more information about these code smells and the differences with RSpec.</p>
<p>We found that we actually really like RSpec and Shoulda because of BDD, but not because of their particular functionality or DSLs.</p>
<h2>Our Ideal Framework</h2>
<p>Reflecting on all these facts, we agreed that our ideal framework should have nested contexts to suit our BDD needs, be as small as possible, stable, and have no unnecessary magic.</p>
<p>As we looked at our needs for a framework, we realized that while RSpec and Shoulda are powerful, we could just add nested contexts to Test::Unit and that would fulfill our criteria. We did that with less than 100 lines of very simple code and called it &#8220;Contest&#8221;.</p>
<p>Here&#8217;s a quick sample of how it looks like:</p>
<pre>require "rubygems"
require "contest"

class Array
  def rotate_left(n = 1)
    n.times { push(shift) }
    self
  end

  def rotate_right(n = 1)
    n.times { unshift(pop) }
    self
  end
end

class TestArray &lt; Test::Unit::TestCase
  context "Array" do
    should "rotate elements to the left when sent rotate_left" do
      assert_equal [2, 3, 4, 5, 1], [1, 2, 3, 4, 5].rotate_left
    end

    should "rotate elements to the right when sent rotate_right" do
      assert_equal [5, 1, 2, 3, 4], [1, 2, 3, 4, 5].rotate_right
    end

    should "rotate elements to the left 2 places when sent rotate_left(2)" do
      assert_equal [3, 4, 5, 1, 2], [1, 2, 3, 4, 5].rotate_left(2)
    end

    should "rotate elements to the right 2 places when sent rotate_right(2)" do
      assert_equal [4, 5, 1, 2, 3], [1, 2, 3, 4, 5].rotate_right(2)
    end
  end
end</pre>
<p>Contest is available in our <a href="http://labs.citrusbyte.com/projects/contest">labs</a> and at <a href="http://github.com/citrusbyte/contest/tree/master">github</a>. Feel free to use it!</p>
<img src="http://feeds.feedburner.com/~r/Citrusbyte-Home/~4/IZka12bYd5M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.citrusbyte.com/2009/05/19/introducing-contest/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.citrusbyte.com/2009/05/19/introducing-contest/</feedburner:origLink></item>
		<item>
		<title>Citrusbyte turns up the volume with MusiKontrol</title>
		<link>http://feedproxy.google.com/~r/Citrusbyte-Home/~3/fNBjDUAIXWU/</link>
		<comments>http://blog.citrusbyte.com/2009/05/05/citrusbyte-turns-up-the-volume-with-musikontrol/#comments</comments>
		<pubDate>Wed, 06 May 2009 01:27:00 +0000</pubDate>
		<dc:creator>David Appelbaum</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.citrusbyte.com/?p=177</guid>
		<description><![CDATA[Created by music industry professionals in Los Angeles, CA, MusiKontrol.com will soon launch a new artist development platform to help independent artists, writers and musicians succeed in the new music business.  Eric Galen, its founder and CEO, says “We’re really excited to be working with Citrusbyte as our technology partner.  We needed the [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_176" class="wp-caption aligncenter" style="width: 576px"><img class="size-full wp-image-176" title="Citrusbyte closes its deal with MusiKontrol" src="http://blog.citrusbyte.com/wp-content/uploads/2009/05/dealdone_fixed_optimized.jpg" alt="Left to right: Will Jessup (Citrusbyte CEO), Eric Galen (MusiKontrol CEO), David Appelbaum (Citrusbyte Project Manager)" width="566" height="424" /><p class="wp-caption-text">Left to right: Will Jessup (Citrusbyte CEO), Eric Galen (MusiKontrol CEO), David Appelbaum (Citrusbyte Project Manager)</p></div>
<p>Created by music industry professionals in Los Angeles, CA, MusiKontrol.com will soon launch a new artist development platform to help independent artists, writers and musicians succeed in the new music business.  Eric Galen, its founder and CEO, says “We’re really excited to be working with Citrusbyte as our technology partner.  We needed the best, and we found them.”</p>
<p>And in true Citrusbyte style, Eric and Will duked it out on their motorcycles in the Malibu canyons to see who would be baking who a cake.</p>
<p><object width="425" height="344" data="http://www.youtube.com/v/aA_YLP7STjI&amp;hl=en&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/aA_YLP7STjI&amp;hl=en&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /></object></p>
<p>And now, let&#8217;s see who won.</p>
<div id="attachment_185" class="wp-caption aligncenter" style="width: 576px"><img class="size-full wp-image-185" title="And the winner is..." src="http://blog.citrusbyte.com/wp-content/uploads/2009/05/photo2.jpg" alt="Thanks to MusiKontrol for the delicious cake!" width="566" height="557" /><p class="wp-caption-text">Thanks to MusiKontrol for the delicious cake!</p></div>
<img src="http://feeds.feedburner.com/~r/Citrusbyte-Home/~4/fNBjDUAIXWU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.citrusbyte.com/2009/05/05/citrusbyte-turns-up-the-volume-with-musikontrol/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.citrusbyte.com/2009/05/05/citrusbyte-turns-up-the-volume-with-musikontrol/</feedburner:origLink></item>
		<item>
		<title>Our client Causecast is hiring a web developer</title>
		<link>http://feedproxy.google.com/~r/Citrusbyte-Home/~3/Ceu0bDR7EnI/</link>
		<comments>http://blog.citrusbyte.com/2008/10/02/one-of-our-clients-is-hiring-web-developers/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 22:21:04 +0000</pubDate>
		<dc:creator>will</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[causecast]]></category>

		<category><![CDATA[jobs]]></category>

		<guid isPermaLink="false">http://blog.citrusbyte.com/?p=153</guid>
		<description><![CDATA[Causecast  -  Junior and Senior Web Application Developers
Ok folks, one of our clients is hiring their full-time team to take over the work that we&#8217;ve done for version 1 of Causecast. The Senior Developer position is a great opportunity to drive efforts to build their internal tech team and to get a chance to play [...]]]></description>
			<content:encoded><![CDATA[<p>Causecast  -  Junior and Senior Web Application Developers</p>
<p>Ok folks, one of our clients is hiring their full-time team to take over the work that we&#8217;ve done for version 1 of Causecast. The Senior Developer position is a great opportunity to drive efforts to build their internal tech team and to get a chance to play with the technology we put in place. The junior position provides a chance to be one of the FIRST developers at Causecast and learn from and work with CitrusByte&#8217;s first-class team.</p>
<p>About Causecast: Causecast CEO Ryan Scott is a developer himself who built and sold his last company NetCreations. He currently leads Causecast on a daily basis as well as invests in a number of great companies (Tesla Motors among them). Causecast provides a one stop shop for all things cause, giving nonprofits, leaders, and members opportunities to collaborate, share their experiences, and promote the causes they care about. Causecast launched at TechCrunch50 and received lots of praise, (&#8221;I would die to invest in Causecast&#8221; &#8212; VC Loic Le Meur). The mission they&#8217;re chasing down is good, being done the right way, and will make a nice business. Causecast is located in the Mahalo offices in Santa Monica, LA&#8217;s web hub.</p>
<p>Currently, there are 5 Citrusbyte guys working with Causecast on this. We&#8217;ve put in place some seriously robust technology. Initially, you&#8217;ll be working as part of our team while we ramp you into the code-base over the next few weeks/months.</p>
<p>Along with great technology ( RoR, RSpec, REST, jQuery, Alchemist, Sinatra, HAML, SASS and a slew of others), Causecast is using a full agile SCRUM process to run the project. The ideal candidate will be jumping into a well-built code-base and a great team.</p>
<p>Qualified candidates will:</p>
<p>* Have at least 2 years of web development experience<br />
* Understand and believe in Agile web development principles.<br />
* Be able to relocate to Los Angeles, with help from Causecast.</p>
<p>Please <a href='mailto:jobs@citrusbyte.com'>send</a> resume + relevant experience building web applications, if your resume is up to par we&#8217;ll be in touch shortly.</p>
<img src="http://feeds.feedburner.com/~r/Citrusbyte-Home/~4/Ceu0bDR7EnI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.citrusbyte.com/2008/10/02/one-of-our-clients-is-hiring-web-developers/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.citrusbyte.com/2008/10/02/one-of-our-clients-is-hiring-web-developers/</feedburner:origLink></item>
		<item>
		<title>October LA web dev meetup @ CAUSECAST</title>
		<link>http://feedproxy.google.com/~r/Citrusbyte-Home/~3/5FtYEQqVu-w/</link>
		<comments>http://blog.citrusbyte.com/2008/10/02/october-la-web-dev-meetup-causecast/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 22:18:22 +0000</pubDate>
		<dc:creator>will</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[meetup]]></category>

		<guid isPermaLink="false">http://blog.citrusbyte.com/?p=151</guid>
		<description><![CDATA[Our awesome clients, www.causecast.org , offered to host the next meetup we&#8217;ll be having. Check out the full details here:
http://web.meetup.com/34/calendar/8883832/
]]></description>
			<content:encoded><![CDATA[<p>Our awesome clients, <a href="http://www.causecast.org">www.causecast.org</a> , offered to host the next meetup we&#8217;ll be having. Check out the full details here:</p>
<p><a href="http://web.meetup.com/34/calendar/8883832/">http://web.meetup.com/34/calendar/8883832/</a></p>
<img src="http://feeds.feedburner.com/~r/Citrusbyte-Home/~4/5FtYEQqVu-w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.citrusbyte.com/2008/10/02/october-la-web-dev-meetup-causecast/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.citrusbyte.com/2008/10/02/october-la-web-dev-meetup-causecast/</feedburner:origLink></item>
		<item>
		<title>Los Angeles Web Application Developers 10th Meetup Rocked</title>
		<link>http://feedproxy.google.com/~r/Citrusbyte-Home/~3/IpDYV9lEXWQ/</link>
		<comments>http://blog.citrusbyte.com/2008/08/11/los-angeles-web-application-developers-10th-meetup-rocked/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 19:30:05 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[meetup]]></category>

		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blog.citrusbyte.com/?p=101</guid>
		<description><![CDATA[We had a great meetup this week on the 5th. There was an attendance of about eighty-five people this time. This meetup also marked the 10th meetup for us. We couldn&#8217;t have done it without your eagerness to be part of an evolving tech-community in Los Angeles.
We also have to thank Rubicon for hosting the [...]]]></description>
			<content:encoded><![CDATA[<p>We had a great <a href="http://web.meetup.com/34/">meetup</a> this week on the 5th. There was an attendance of about eighty-five people this time. This meetup also marked the 10th meetup for us. We couldn&#8217;t have done it without your eagerness to be part of an evolving tech-community in Los Angeles.</p>
<p>We also have to thank Rubicon for hosting the 10th meetup. They had an amazing looking location, and it even has a bit of Hollywoodesque history associated with it. Apparently, their space was used for the show 24, and we got to see Jack Bauer&#8217;s office which is pretty damn cool. We also overheard that Snoop Dogg laid some tracks down in one of the other rooms. Rubicon is definitely one of my favorite web-venues that I&#8217;ve seen.</p>
<p>The following was presented at the meetup:</p>
<blockquote><p>Ari Lerner - Auto-Scaling cloud-computing on amazon EC2 + S3</p>
<p>Nick Merwin - Rolling with Red5 (open source Flash server)</p>
<p>Erik Osterman - Faster Response Times By Using the Starling Queue Server</p></blockquote>
<p>To get the slides and example code, check out this <a href="http://web.meetup.com/34/messages/boards/thread/5200801">post</a> in the meetup boards.</p>
<p>Each presentation was equally entertaining and informative. Thanks for providing quality content to the community guys!</p>
<p>Here&#8217;s a photo I found off the meetup group for your enjoyment:</p>
<div class="wp-caption alignnone" style="width: 353px"><img src="http://photos2.meetupstatic.com/photos/event/7/4/c/0/event_5069888.jpeg" alt="" width="343" height="256" /><p class="wp-caption-text">Jack Bauer&#39;s office is the office on the top right in this image</p></div>
<p>Looking for some videos? Why of course!</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="403" id="viddler"><param name="movie" value="http://www.viddler.com/player/4a58d498/" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="wmode" value="transparent"/><embed src="http://www.viddler.com/player/4a58d498/" width="437" height="403" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" wmode="transparent" name="viddler" ></embed></object></p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="403" id="viddler"><param name="movie" value="http://www.viddler.com/player/803cb348/" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="wmode" value="transparent"/><embed src="http://www.viddler.com/player/803cb348/" width="437" height="403" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" wmode="transparent" name="viddler" ></embed></object></p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="403" id="viddler"><param name="movie" value="http://www.viddler.com/player/3cbce863/" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="wmode" value="transparent"/><embed src="http://www.viddler.com/player/3cbce863/" width="437" height="403" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" wmode="transparent" name="viddler" ></embed></object></p>
<p>What are people saying?</p>
<blockquote><p>The meeting was great, all the presentations were very informative and interesting, good choice of topics. The new format definitely work, let&#8217;s keep it. The Rubicon office was pretty fancy and served good food ;-) Thanks to Will for arranging this event, it was very well organized, like usual. - <a href="http://web.meetup.com/34/members/7276182/">Oleg Baranovsky</a></p>
<p>I enjoyed this event very much! Thanks Will for organizing this event! The presentations were engaging, and it was great meeting all of you web gurus! The food and beer was awesome too! :) - <a href="http://web.meetup.com/34/members/3282604/">Rob Stathem</a></p></blockquote>
<p>Take a look at our <a href="http://web.meetup.com/34/">meetup page</a> for more details.</p>
<p>Were you able to attend the meetup? What did you think of it?</p>
<img src="http://feeds.feedburner.com/~r/Citrusbyte-Home/~4/IpDYV9lEXWQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.citrusbyte.com/2008/08/11/los-angeles-web-application-developers-10th-meetup-rocked/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.citrusbyte.com/2008/08/11/los-angeles-web-application-developers-10th-meetup-rocked/</feedburner:origLink></item>
		<item>
		<title>TakeFive Interviews Ari Lerner</title>
		<link>http://feedproxy.google.com/~r/Citrusbyte-Home/~3/LnAhNFjEoTQ/</link>
		<comments>http://blog.citrusbyte.com/2008/07/28/takefive-interviews-ari-lerner/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 22:35:39 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[ari lerner]]></category>

		<category><![CDATA[interview]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=6</guid>
		<description><![CDATA[Ari Lerner, a Solutions Architect here at CitrusByte recently got interviewed by the guys at TakeFive.
Welcome to this week&#8217;s Rails TakeFive interview, our weekly discussion about Ruby on Rails with noted developers from throughout our community. This week, Ari Lerner of CitrusByte and among other things, creator of PoolParty, a framework for maintaining and running [...]]]></description>
			<content:encoded><![CDATA[<p>Ari Lerner, a Solutions Architect here at CitrusByte recently got interviewed by the guys at TakeFive.</p>
<blockquote><p>Welcome to this week&#8217;s Rails TakeFive interview, our weekly discussion about Ruby on Rails with noted developers from throughout our community. This week, Ari Lerner of CitrusByte and among other things, creator of PoolParty, a framework for maintaining and running auto-scalable applications on Amazon&#8217;s <span class="caps">EC2</span> cloud.</p></blockquote>
<p>&#8230;</p>
<blockquote><p><strong>FiveRuns:</strong> Amazon + Rails seems to be a prevalent choice right now, looking way back to the first instances as early as 2006, and seeing how far we have come. Can you talk a little bit about the benefits and challenges here?</p></blockquote>
<blockquote><p><strong>Ari Lerner:</strong> Amazon&#8217;s Web Services is probably the technology that excites me the most at the moment. The unprecedented flexibility enables developers to play, explore and harness the growing landscape of cloud computing. The last time I felt the joy of working with a new technology, I was writing &#8216;Drug Warz&#8217; on my Ti-83. If you have not yet looked into it, I highly suggest you take a peek.</p></blockquote>
<blockquote><p>Now to answer your question!</p></blockquote>
<blockquote><p>Cloud computing is all the rage today. Just as Rails revolutionized the web development framework, cloud computing is the next logical step in hosting, but it&#8217;s not going to solve all hosting issues. The non-technical challenge is to recognize it is just another weapon in your development tool-belt. The developer is the real secret sauce.</p></blockquote>
<blockquote><p>The largest technological challenges are configuration and maintenance of the <span class="caps">EC2</span> instances. there is software on all sides of the spectrum that can aid in automating this process, from my own open-source PoolParty to commercial RightScale that aids in support.</p></blockquote>
<blockquote><p>Amazon&#8217;s <span class="caps">EC2</span> makes it tempting to throw away proven techniques of deployment and management, but breaking the encapsulation of the methodologies just spells disaster. I am always in favor of using all the right tools available, but in their proper place.</p></blockquote>
<blockquote><p>I think it would be a mistake to have your application aware of its own hosting environment. You don&#8217;t want your software knowing it is running on a cloud, it should do what it does best&#8230; be the application.</p></blockquote>
<p>That’s just a snippet of the interview. Go ahead and take a look at the full interview <a href="http://blog.fiveruns.com/2008/7/28/rails-takefive-five-questions-with-ari-lerner">here.</a></p>
<img src="http://feeds.feedburner.com/~r/Citrusbyte-Home/~4/LnAhNFjEoTQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.citrusbyte.com/2008/07/28/takefive-interviews-ari-lerner/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.citrusbyte.com/2008/07/28/takefive-interviews-ari-lerner/</feedburner:origLink></item>
		<item>
		<title>Automate Your Rails Deployment</title>
		<link>http://feedproxy.google.com/~r/Citrusbyte-Home/~3/BZbzLaRsKEc/</link>
		<comments>http://blog.citrusbyte.com/2008/07/18/automate-your-rails-deployment/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 22:41:22 +0000</pubDate>
		<dc:creator>Mitchell Hashimoto</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[capistrano]]></category>

		<category><![CDATA[deployment]]></category>

		<category><![CDATA[passenger]]></category>

		<category><![CDATA[phusion]]></category>

		<category><![CDATA[Rails]]></category>

		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[sprinkle]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=10</guid>
		<description><![CDATA[I&#8217;m a big fan of researching and playing with new technologies (hey! I remember rails 0.7) so its no surprise that I&#8217;ve been playing a lot with Ruby Enterprise Edition and Phusion Passenger (mod_rails) and researching it as a viable rails deployment solution. For those of you who are staying with the tried and true [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a big fan of researching and playing with new technologies (hey! I remember rails 0.7) so its no surprise that I&#8217;ve been playing a lot with <a href="http://www.rubyenterpriseedition.com/">Ruby Enterprise Edition</a> and <a href="http://www.modrails.com/">Phusion Passenger (mod_rails)</a> and researching it as a viable rails deployment solution. For those of you who are staying with the tried and true Nginx + Mongrel, let me offer a brief introduction to Phusion Passenger (mod_rails). But first&#8230; let&#8217;s take a trip down memory lane:</p>
<p><img src="http://farm4.static.flickr.com/3137/2737015422_ca8c091f40_o.png" alt="Rails Deployment History" /></p>
<p>Phusion Passenger is super easy to install and setup as an Apache mod and immediately simplifies the deployment of rails. It allows you to deploy a rails application without splitting your attention between the web server and app server, such as Nginx and Mongrel. You literally upload a configuration which looks like the following block of code to Apache and it manages your rails application for you.</p>
<pre lang="apache"><VirtualHost *:80>
  ServerName  myrailssite.com
  ServerAlias www.myrailssite.com

  DocumentRoot /var/www/rails-project/current/public
</VirtualHost>
</pre>
<p>Passenger gives rails the same ease of deployment as mod_php and mod_perl. And when you want, it will automatically reload your app if you deploy changes.</p>
<p>But the real gem is using Phusion Passenger with Ruby Enterprise Edition, which is a rewrite of the Ruby <span class="caps">MRI</span> with optimization for mod_rails in mind. The <a href="http://www.rubyenterpriseedition.com/comparisons.html">initial benchmarks</a> show that using both together results in lower memory usage and increased requests per second. Since then, passenger has had a myriad of early adopters reporting their results. <a href="http://blog.dreamhost.com/2008/05/13/passenger-for-ruby-on-rails/">DreamHost praised Phusion</a> for finally solving their rails deployment, after <a href="http://blog.dreamhost.com/2008/01/10/rails-is-as-rails-does/">complaining only 4 months earlier of how rails deployment options were a joke.</a> Other <a href="http://lstoll.net/2008/04/12/passenger-a-k-a-mod-rails">websites</a> <a href="http://simpson.mine.nu/?tag=mod_rails">have</a> <a href="http://alloycode.com/2008/4/26/another-passenger-on-the-mod_rails">boarded</a> the Phusion Passenger train too, reporting easy setup and even easier deployment.</p>
<p>The results look good: <strong>Dead easy rails deployment with great performance.</strong></p>
<p>So how do you get started? For dead easy server provisioning, check out <a href="http://github.com/crafterm/sprinkle/tree/master">Sprinkle</a>, a gem which provisions servers for you. I&#8217;ve been hard at work implementing new features and patches to Sprinkle, which <a href="http://github.com/mitchellh/sprinkle/tree/master">you can see in my fork.</a> I have <a href="http://mitchellhashimoto.com/wp-content/movies/ree_passenger_rails/package.zip">already created the sprinkle scripts</a> to automatically setup this entire stack on a fresh ubuntu server:</p>
<ul>
<li>Rails (and Ruby, Rubygems)</li>
<li>sqlite3 or mySQL</li>
<li>Apache2</li>
<li>Phusion Passenger (mod_rails)</li>
<li>Ruby Enterprise Edition</li>
</ul>
<p>If you&#8217;re interested in the automatic setup solution, I recommend <a href="http://mitchellhashimoto.com/wp-content/movies/ree_passenger_rails/REE+Passenger.mov">checking out the screencast I made</a> detailing the entire process. It requires a <strong>custom version of the sprinkle gem</strong> (from my fork), which the screencast covers.</p>
<p>If you plan on trying it out and have any questions, leave a comment or feel free to contact me at <strong>mitchell.hashimoto [at] citrusbyte [dot] com</strong> and I&#8217;ll happily provide any assistance you may need.</p>
<img src="http://feeds.feedburner.com/~r/Citrusbyte-Home/~4/BZbzLaRsKEc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.citrusbyte.com/2008/07/18/automate-your-rails-deployment/feed/</wfw:commentRss>
<enclosure url="http://mitchellhashimoto.com/wp-content/movies/ree_passenger_rails/REE+Passenger.mov" length="50927657" type="video/quick" />
		<feedburner:origLink>http://blog.citrusbyte.com/2008/07/18/automate-your-rails-deployment/</feedburner:origLink></item>
	</channel>
</rss>
