<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title> &#187; Uncategorized</title>
	<atom:link href="http://blog.blazingcloud.net/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.blazingcloud.net</link>
	<description></description>
	<lastBuildDate>Wed, 16 May 2012 00:38:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>Paid Design Internship</title>
		<link>http://blog.blazingcloud.net/2012/05/15/paid-design-internship/</link>
		<comments>http://blog.blazingcloud.net/2012/05/15/paid-design-internship/#comments</comments>
		<pubDate>Wed, 16 May 2012 00:36:34 +0000</pubDate>
		<dc:creator>sarah</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.blazingcloud.net/?p=3125</guid>
		<description><![CDATA[Blazing Cloud creates innovative mobile products to clients ranging from startups to Fortune 500 companies. At the core of our success is a continuous appetite for becoming experts at new techniques and technologies, paired with our willingness to pay it forward. Over the past year, our classes and events were the main outlet for sharing [...]]]></description>
			<content:encoded><![CDATA[<p>Blazing Cloud creates innovative mobile products to clients ranging from startups to Fortune 500 companies.  At the core of our success is a continuous appetite for becoming experts at new techniques and technologies, paired with our willingness to pay it forward.  Over the past year, our classes and events were the main outlet for sharing our knowledge with the community. Today, we are happy to announce our Design Mentorship program. </p>
<p>We are ready to take one design trainee under our wing, opening up a full time, paid internship for a junior designer who can show good design sense and the drive to become great in this profession. </p>
<p>To benefit fully from what we have to teach, you&#8217;ll need to be very comfortable in Photoshop or other graphics software, familiar with HTML + CSS, and a good writer.  In addition, you will demonstrate the ability to think critically and show a true passion for products and design. These required building blocks will allow you, under our mentorship, to develop into a full stack product designer capable of tackling UX problems in a cross-disciplinary way.</p>
<p><strong>The Program</strong><br />
From Day 1 you will be involved in design activities for client projects, under the guidance of one of our lead designers. You will be expected to learn and contribute to all aspects of product design, from research and brainstorming to visual design and asset production.<br />
Given the focus of the company, you will learn mobile design from the inside out. You will have insight into methodologies like Agile and Lean UX, and you will learn what types of activities and deliverables are suitable to fast-paced, iterative design. </p>
<p>At the end of the program, we hope to graduate you into a full time design position with our team, perhaps the best indicator that we take our investment in you very seriously. </p>
<p><strong>To Respond</strong><br />
* <a href="http://www.captainrecruiter.com/jobs/318">Captain Recruiter</a> will be the first point of contact.<br />
* All applications will receive a response.<br />
* To apply, <a href="http://www.captainrecruiter.com/jobs/318">click here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blazingcloud.net/2012/05/15/paid-design-internship/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>orientationchange and resize events on the iPhone</title>
		<link>http://blog.blazingcloud.net/2012/05/08/orientationchange-and-resize-events-on-the-iphone/</link>
		<comments>http://blog.blazingcloud.net/2012/05/08/orientationchange-and-resize-events-on-the-iphone/#comments</comments>
		<pubDate>Tue, 08 May 2012 13:51:31 +0000</pubDate>
		<dc:creator>judy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.blazingcloud.net/?p=2987</guid>
		<description><![CDATA[Changing the orientation of your mobile device triggers a resize event. Here&#8217;s a very simple page showing that both orientationchange and resize events are triggered when you change the orientation of your mobile device. I used the following viewport meta tag in my html because of the iPhone Safari viewport scaling bug: &#60;meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0"&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Changing the orientation of your mobile device <a href="http://www.quirksmode.org/dom/events/resize_mobile.html"> triggers a resize event</a>. Here&#8217;s <a href="http://evening-ice-9603.herokuapp.com/orientation">a very simple page</a> showing that both orientationchange and resize events are triggered when you change the orientation of your mobile device. I used the following viewport meta tag in my html because of the <a href="http://webdesignerwall.com/tutorials/iphone-safari-viewport-scaling-bug">iPhone Safari viewport scaling bug</a>:</p>
<p><code><br />
&lt;meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0"&gt;<br />
</code><br />
Using this tag prevents the browser from zooming in, and ensures that the user will not have to pinch or zoom to get back to full page view when changing orientation.</p>
<p>I used this javascript to popup an alert whenever an &#8216;orientationchange&#8217; or &#8216;resize&#8217; events happen:</p>
<pre><code>
$(document).ready(function(){
  $(window).bind('resize', function() {
    alert('resize event triggered!');
  });
  $(window).bind('orientationchange', function() {
    alert('orientationchange event triggered!');
  });
});
</code></pre>
<p>I used <a href="http://api.jquery.com/resize/">jQuery&#8217;s resize()</a>, and I found the orientationchange event in <a href="https://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html">table 6-1 of Apple&#8217;s Safari Web Content Guide on handling events</a>.</p>
<p>So if you <a href="http://evening-ice-9603.herokuapp.com/orientation">visit it on your iPhone</a>, and turn it back and forth, you&#8217;ll see alerts on each orientation change saying that &#8216;orientationchange&#8217; and &#8216;resize&#8217; events are getting fired.</p>
<p>In my project, I had a div that I wanted to be the full size of the window and it acted as a container for other objects. On window resize the height and width of the div was set to that of the window.</p>
<p>As a result, when I turned the iPhone to landscape, the width of my div got set to 480px. It turns out that if the width of something in your webpage gets set to 480px or more, weird stuff happens:<br />
- If you start in portrait and go to landscape, both resize and orientationevents are triggered.<br />
- Then if you go from landscape back to portrait, an orientationchange event is triggered, but a resize event is not!<br />
- After that, no more orientation changes trigger resize events (though orientationchange events do continue to go off).</p>
<p>Similar problems happen when starting in landscape:<br />
- If you start in landscape and go to portrait, both resize and orientationchange events are triggered.<br />
- Then if you switch from portrait to landscape, only an orientationchange event goes off.</p>
<p>In the end I had to bind the resize of my div to the &#8216;orientationchange&#8217;, not &#8216;resize&#8217;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blazingcloud.net/2012/05/08/orientationchange-and-resize-events-on-the-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>About.me for iOS: 50k downloads in 3 days</title>
		<link>http://blog.blazingcloud.net/2012/05/07/about-me-for-ios-50k-downloads-in-first-3-days/</link>
		<comments>http://blog.blazingcloud.net/2012/05/07/about-me-for-ios-50k-downloads-in-first-3-days/#comments</comments>
		<pubDate>Mon, 07 May 2012 22:44:15 +0000</pubDate>
		<dc:creator>bill</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.blazingcloud.net/?p=3081</guid>
		<description><![CDATA[We are very pleased about the buzz around the release of AOL&#8217;s new about.me iPhone app. Blazing Cloud engineers worked collaboratively with the sumptuous designs of Aaron Martin and the fabulous David Brock of the about.me server team within the media giant. Founder Tony Conrad tweeted that there were 50k downloads in the first 3 [...]]]></description>
			<content:encoded><![CDATA[<p>We are very pleased about the buzz around the release of AOL&#8217;s new about.me iPhone app. Blazing Cloud engineers worked collaboratively with the sumptuous designs of <a href="http://about.me/iamaaronmartin">Aaron Martin</a> and the fabulous <a href="http://about.me/david.brock">David Brock</a> of the about.me server team within the media giant.</p>
<p>Founder <a href="http://about.me/tonyconrad">Tony Conrad</a> <a href="https://twitter.com/#!/tonysphere/status/190233675839979521">tweeted</a> that there were 50k downloads in the first 3 days of its release. Around the same time, the about.me team released a mobile web version of their popular site to format profiles for mobile devices. In addition to the browsing features available on the web, the iPhone app enables you to search Twitter, Facebook and the Address Book on your phone to see about.me pages. There&#8217;s also a fun location-based feature which allows you to see profiles of about.me users nearby who are also using the app.</p>
<p>The iPhone App has received rave reviews in several outlets, including the <a href="link: http://bits.blogs.nytimes.com/2012/04/05/about-me-releases-mobile-app/">New York Times</a> which highlighted the app&#8217;s sensible approach to privacy:</p>
<blockquote><p>&#8220;The about.me team put privacy at the forefront of this experience, Mr. Freitas said, asking people to opt in to share their location or personal information. It is different from an app like Girls Around Me because both sides have to opt in to have their location displayed.&#8221;</p></blockquote>
<p><strong>What other sites are saying about the app:</strong></p>
<blockquote><p>&#8220;Now, about.me iPhone app users can make pages on-the-go as well as connect with people on the street with the mobile app. The ‘Who’s Nearby’ feature — unique to the app — is something that will appeal to people watchers, co-founder Ryan Freitas told Mashable&#8230;.The app brings many pieces of the successful web platform to the iPhone.&#8221; &#8212; <a href="http://mashable.com/2012/04/07/about-me-iphone-app/">Mashable</a></p></blockquote>
<blockquote><p>&#8220;AOL-owned about.me website launched an iPhone app, helping you take your online identity with you, no matter where you happen to go. Aside from bundling many of the web service’s functionalities, the mobile app also allows you to “Check Out” nearby users’ pages presuming they’ve enabled the option&#8230;So if you’re into about.me and you also happen to own an iPhone, grab the app now and take it from there.&#8221; &#8211;<a href="http://www.intomobile.com/2012/04/10/aboutme-launches-iphone-app-allows-you-check-out-nearby-users/">IntoMobile.com</a></p></blockquote>
<blockquote><p>&#8220;About.me just released their official iPhone application for searching through each and every About.me profile. No matter whether you’re looking for a potential new hire or trying to find a specific details about a new contact you made – about.me should prove quite useful.&#8221; &#8211;<a href="http://www.domain.me/blog/about-me-iphone-4334">.Me</a></p></blockquote>
<p>About.me has done a fabulous job of gaining a lot of users since its launch in Dec 2010, combined with great SEO and its aggressive integration of services where people publish data about themselves, it has emerged as a key player in an ecosystem which allows us to connect and keep in touch with an astounding number of individuals.  The native iOS app which leverages your contacts and social networks is just the beginning of how about.me can enable us to tap into a deep reservoir of information available on the Web.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blazingcloud.net/2012/05/07/about-me-for-ios-50k-downloads-in-first-3-days/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>REPL Mocks in Rspec 2.9</title>
		<link>http://blog.blazingcloud.net/2012/04/14/repl-mocks-in-rspec-2-9/</link>
		<comments>http://blog.blazingcloud.net/2012/04/14/repl-mocks-in-rspec-2-9/#comments</comments>
		<pubDate>Sat, 14 Apr 2012 21:06:04 +0000</pubDate>
		<dc:creator>Curtis Jennings Schofield</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.blazingcloud.net/?p=2978</guid>
		<description><![CDATA[REPL (Read-Eval-Print-Loop) is a great way to learn. Sarah Allen has a great post on REPL and rspec. Sarah&#8217;s Post on REPL Rspec In Rspec 2.9 there is a nice way to get the standalone way working $ irb 1.9.2p290 :001 > require 'rspec/mocks/standalone' 1.9.2p290 :002 > Time.stub(:now) {1} 1.9.2p290 :003 > Time.now => 1]]></description>
			<content:encoded><![CDATA[<h3>REPL (Read-Eval-Print-Loop) is a great way to learn.</h3>
<p>
Sarah Allen has a great post on REPL and rspec.<br />
<a  href='http://www.ultrasaurus.com/sarahblog/2011/04/repl-rspec-mocks/'>Sarah&#8217;s Post on REPL Rspec</a>
</p>
<p>
In <a href='https://www.relishapp.com/rspec'>Rspec 2.9</a> there is a nice way to get the standalone way working
</p>
<p><code><br />
$ irb<br />
1.9.2p290 :001 >  require 'rspec/mocks/standalone'<br />
1.9.2p290 :002 > Time.stub(:now) {1}<br />
1.9.2p290 :003 > Time.now<br />
 => 1<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blazingcloud.net/2012/04/14/repl-mocks-in-rspec-2-9/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Installing RSpec and  Sinatra with Rake</title>
		<link>http://blog.blazingcloud.net/2012/04/04/installing-rspec-and-sinatra-with-rake/</link>
		<comments>http://blog.blazingcloud.net/2012/04/04/installing-rspec-and-sinatra-with-rake/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 03:54:06 +0000</pubDate>
		<dc:creator>Curtis Jennings Schofield</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.blazingcloud.net/?p=2929</guid>
		<description><![CDATA[Installing Rspec into Sinatra with Rake This will give you a friendly &#8216;rails-like&#8217; interface to running your automation tests. Sinatra doesn&#8217;t come with any test harness by default and so you&#8217;ll find yourself needing to integrate something. As a bonus I include a way to gain access to an instance of your sinatra module while [...]]]></description>
			<content:encoded><![CDATA[<h2>Installing Rspec into Sinatra with Rake</h2>
<h3>This will give you a friendly &#8216;rails-like&#8217; interface to running your automation tests.</h3>
<p> Sinatra doesn&#8217;t come  with  any  test  harness by default and so  you&#8217;ll find yourself needing to integrate something. </p>
<p>As a bonus I include a  way to gain access to an instance of your sinatra module while the test is running. This allows you to do unit style testing on  the Module object itself as it moves through the request  life-cycle. </p>
<ol>
<li>Open the Gist <a href="https://gist.github.com/2176510">GIST with complete instructions and files</a></li>
<li>Update the Gemfile</li>
<li>Update the Rakefile</li>
<li>Create a .rspec file</li>
<li>Follow the Instructions</li>
</ol>
<h4>Instructions</h4>
<pre># run the bundle command
$ bundle</pre>
<pre># .rspec file
$ echo "--color" &gt;&gt; .rspec
$ echo "--backtrace" &gt;&gt; .rspec</pre>
<pre># .rspec file
$ echo "--color" &gt;&gt; .rspec
$ echo "--backtrace" &gt;&gt; .rspec</pre>
<pre># spec directory
$ mkdir spec
$ touch spec/spec_helper.rb
# Update spec/spec_helper.rb to match file in gist.
# mkdir spec/sample
$ touch spec/sample/instance_variable_spec.rb
# update spec/sample/instance_variable_spec.rb to match file in gist</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.blazingcloud.net/2012/04/04/installing-rspec-and-sinatra-with-rake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>looking for great developers (mobile &amp; web)</title>
		<link>http://blog.blazingcloud.net/2012/04/03/looking-for-great-developers/</link>
		<comments>http://blog.blazingcloud.net/2012/04/03/looking-for-great-developers/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 22:42:31 +0000</pubDate>
		<dc:creator>sarah</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.blazingcloud.net/?p=2914</guid>
		<description><![CDATA[Blazing Cloud isn&#8217;t your typical startup or consulting agency. We&#8217;re a bunch of startup people who work together to deliver products for hire, creating a structure to give us freedom to pursue our own entrepreneurial ideas or other life plans. I&#8217;ve been intentionally slow to grow the company over the past year, as we settled [...]]]></description>
			<content:encoded><![CDATA[<p>Blazing Cloud isn&#8217;t your typical startup or consulting agency.  We&#8217;re a bunch of startup people who work together to deliver products for hire, creating a structure to give us freedom to pursue our own entrepreneurial ideas or other life plans.</p>
<p>I&#8217;ve been intentionally slow to grow the company over the past year, as we settled into a groove, focusing on mobile apps (native and web).  We&#8217;ve defined some great processes and techniques for agile product development that are our own mix of XP and Lean Startup, and we&#8217;re always learning.  In fact, learning and teaching are part of everything we do.  In addition to the formal instruction we do in our classes and events, we all love to learn new APIs and languages, and getting really good at the best techniques.  We always aspire to create beautiful, usable products and we collaborate with our clients in making that happen.</p>
<p>I&#8217;m excited that we&#8217;re ready to grow the company just a little bit more. Our last few awesome engineers were hired opportunistically thru the grapevine, but I strongly believe that the best practice in hiring is to post a job description and have an open process.</p>
<p>We&#8217;re looking for someone excited about native and/or mobile web development &#8212; we usually work with Objective-C for iOS, Java for Android, and Ruby/Rails/JavaScript for mobile web. You can be a generalist or specialize in a specific area. On Day 1 you&#8217;ll be coding on a customer facing project appropriate to your skill level. We are optimized to teach you whatever you don&#8217;t know. We are open to full-time employees or project-based contractors.</p>
<p>As a full-time employee you can look forward to:</p>
<ul>
<li><strong>Opportunity for advancement</strong>. We&#8217;re small and growing. You&#8217;ll be instrumental in shaping the company and we encourage you to pursue a leadership role.</li>
<li><strong>Flexibility</strong>. In addition to paid vacation, we&#8217;ll allow you to take a sabbatical or incubate your own startup. Last summer, one of our engineers took of 6 weeks, spending most of her time learning Spanish in Guatemala. Another of our engineers took a few weeks off to develop an idea for his startup. Other engineers have spent extra time off farming, studying dance, and working on a mobile game.</li>
<li><strong>Mentorship</strong>. We believe in helping each other.  You can leverage our deep experience to learn what it takes to build and ship successful software products, and we expect we&#8217;ll learn a lot from you.</li>
<li><strong>Transparency</strong>. You&#8217;ll have visibility into all aspects of the business, from how decisions are made to the financial health of the company.</li>
<li><strong>Benefits</strong>. We offer full medical, dental, vision and paid vacation. We&#8217;ll pay for one SmartPhone expense (monthly plan + device) and provide a top-of-the-line MacBook if you need one. Also, you can take any of our classes for free.</li>
</ul>
<p>Equality Opportunity Employer: we welcome applicants from diverse backgrounds. We currently have 50% women/men and engineers with and without CS degrees.  We welcome ninjas, rockstars, and pirates, but you also need to be able to write great code and work well in a team.</p>
<p>Feel free to contact me or anyone else at Blazing Cloud directly, but also apply with <a href="http://captainrecruiter.com/jobs/296">Captain Recruiter</a> &#8212; they&#8217;ll make sure we don&#8217;t lose track of anyone.  Github and LinkedIn profiles are a fine substitute for a resume if they are up to date.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blazingcloud.net/2012/04/03/looking-for-great-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pivotal Labs acquired by EMC</title>
		<link>http://blog.blazingcloud.net/2012/03/27/pivotal-labs-acquired-by-emc/</link>
		<comments>http://blog.blazingcloud.net/2012/03/27/pivotal-labs-acquired-by-emc/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 16:01:18 +0000</pubDate>
		<dc:creator>sarah</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.blazingcloud.net/?p=2864</guid>
		<description><![CDATA[Last week EMC acquired Pivotal Labs. Pivotal Labs anticipates accelerated growth, which, along with the EMC relationship, will position them well for going after even bigger enterprise customers. While they still plan to work with startups, an interview with Pivotal&#8217;s Eduard Hiatt highlights the opportunity presented by the acquisition to &#8220;spread our message faster.&#8221; The [...]]]></description>
			<content:encoded><![CDATA[<p>Last week <a href="http://www.emc.com">EMC</a> acquired <a href="http://pivotallabs.com/">Pivotal Labs</a>.  Pivotal Labs anticipates accelerated growth, which, along with the EMC relationship, will position them well for going after even bigger enterprise customers.  While they still plan to work with startups, an <a href="http://www.betabeat.com/2012/03/21/emc-acquires-pivotal-labs-agile-development-startups-03212012/">interview with Pivotal&#8217;s Eduard Hiatt</a> highlights the opportunity presented by the acquisition to &#8220;spread our message faster.&#8221;   The Pivotal process is their message, which helps their clients increase software development velocity by introducing agile techniques as well as cultural change.  Pivotal Lab&#8217;s founder, <a href="http://pivotallabs.com/users/rob/blog/articles/2053-a-new-chapter-for-pivotal-labs">Rob Mee writes</a> how they &#8220;challenged conventional methods of software development, and &#8230;built a culture that encourages discipline while fostering creativity.&#8221;  </p>
<p>By creating Pivotal Labs, Rob Mee has been successful in bringing agile techniques to hundreds of companies.  The impact has been more dramatic than if he had written a book or created a training course.  When Blazing Cloud was just starting, Rob was supportive in offering advice and referring smaller clients, but even more importantly, Pivotal Labs had set a tone in San Francisco of how good software development was done.  Since those values aligned with mine, it was easy to create a consulting business that followed similar software development practices, providing a firm foundation to innovate complementary product development techniques.</p>
<p>In addition to agile techniques, Pivotal Labs culture also embraces open source as an effective means of achieving velocity.  They have created and contribute to many open source test frameworks and tools.  They have a culture of supporting the community and sharing knowledge.  In addition to publishing their <a href="http://pivotallabs.com/talks">tech talks</a>, they have hosted countless <a href="http://www.sfruby.info/">SFRuby Meetups</a> and the San Francisco office has committed to hosting <a href="http://workshops.railsbridge.org/">RailsBridge workshops</a> quarterly.</p>
<p>Acquisitions are always challenging, but Pivotal Labs is well-practiced in working with larger companies while retaining their culture and instigating positive change.  I expect they&#8217;ll have a positive impact on EMC, as well as current and future clients.  We wish Pivotal Labs all the best in their future expansion.  </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blazingcloud.net/2012/03/27/pivotal-labs-acquired-by-emc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>many heroku apps? try &#8211;remote</title>
		<link>http://blog.blazingcloud.net/2012/03/26/my-favorite-heroku-trick/</link>
		<comments>http://blog.blazingcloud.net/2012/03/26/my-favorite-heroku-trick/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 21:51:21 +0000</pubDate>
		<dc:creator>Curtis Jennings Schofield</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.blazingcloud.net/?p=2868</guid>
		<description><![CDATA[I love how I can use the &#8216;&#8211;remote&#8217; flag with heroku gem to tell heroku to use the application that is refereed to by my git remote name &#8216;production&#8217; This way i don&#8217;t have to remember the name of the app all the time for every project and i can easily work with heroku the [...]]]></description>
			<content:encoded><![CDATA[<p>I love how I can use the &#8216;&#8211;remote&#8217; flag with heroku gem to tell heroku to use the application<br />
that is refereed to by my git remote name &#8216;production&#8217;</p>
<p>This way i don&#8217;t have to remember the name of the app all the time for every project and i can<br />
easily work with heroku the way i work with git for pushing to heroku :D</p>
<p><code><br />
$ git remote  show production<br />
</code><br />
<code><br />
* remote production<br />
  Fetch URL: git@heroku.com:XXXY.git<br />
  Push  URL: git@heroku.com:XXXY.git<br />
  HEAD branch: master<br />
  Remote branch:<br />
    master new (next fetch will store in remotes/production)<br />
  Local ref configured for 'git push':<br />
    master pushes to master (fast-forwardable)<br />
</code></p>
<p>Here is an example of running a heroku command with this option<br />
<code><br />
heroku pgbackups:capture --remote production<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blazingcloud.net/2012/03/26/my-favorite-heroku-trick/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Started With Google Closure in Sinatra</title>
		<link>http://blog.blazingcloud.net/2012/03/08/getting-started-with-google-closure-in-sinatra/</link>
		<comments>http://blog.blazingcloud.net/2012/03/08/getting-started-with-google-closure-in-sinatra/#comments</comments>
		<pubDate>Thu, 08 Mar 2012 23:32:14 +0000</pubDate>
		<dc:creator>chromaticbum</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blazingcloud.net/?p=2817</guid>
		<description><![CDATA[Recently, we&#8217;ve been experimenting with Google Closure which includes both a Javascript library and a compiler to optimize your Javascript. Oddly, the getting started tutorial doesn&#8217;t include how to setup a project with Closure. I also ran into some issues with the compiler using advanced optimizations with very standard Javascript code. So, how can you avoid all [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, we&#8217;ve been experimenting with Google Closure which includes both a Javascript library and a compiler to optimize your Javascript. Oddly, the getting started tutorial doesn&#8217;t include how to setup a project with Closure. I also ran into some issues with the compiler using advanced optimizations with very standard Javascript code. So, how can you avoid all of these problems I just went through? Read this tutorial! We&#8217;ll go through how to setup Closure quick and dirty running in a Sinatra application so you can start exploring. After that, I&#8217;ll tell you one of the major pitfalls I happened to fall into on my way to compiling my code with advanced optimizations, a key feature of Closure.</p>
<p><strong>tl;dr;</strong> A little impatient, are we? Just go to the <a title="Godzilla likes Mothra for nom nom nom" href="https://github.com/blazingcloud/closure_sinatra_example" target="_blank">git repository</a>.</p>
<p><strong>Step 1. How the #!@% do I setup Closure?</strong></p>
<p>I&#8217;m glad you asked. Follow these steps.</p>
<p>1. <em>mkdir godzilla</em> # why not? godzilla will hold your HTML and JS files for experimenting with Closure</p>
<p>2. <em>cd godzilla</em> # I know it&#8217;s scary going near godzilla, but be brave</p>
<p>3. <em>gem install sinatra</em> # install the sinatra web server, a lightweight web framework for Ruby</p>
<p>4. <em>echo &#8220;require &#8216;sinatra&#8217;&#8221; &gt; server.rb </em># create the file used to run our sinatra server</p>
<p>5. <em>mkdir public</em> # create a public directory for all of our static HTML, JS, and CSS</p>
<p>6. <em>mkdir public/javascripts</em> # holds application javascript files</p>
<p>7. <em>svn checkout http://closure-library.googlecode.com/svn/trunk/ closure-library</em> # grab a copy of Google Closure</p>
<p>8. <em>cp -R closure-library/closure/* public/</em> # copy the static assets that you need to write Closure JS, also grabbing the Python scripts needed to eventually compile your javascripts</p>
<p><strong>Step 2. Write a very simple Javascript application with Closure.</strong></p>
<p>The application we will be creating simply writes messages to the viewer by appending elements to the document body. The godzilla.test.MessageWriter class is responsible for writing to the DOM.</p>
<p>1. Create a file public/test.html with this source:</p>
<pre><code>&lt;!DOCTYPE html&gt;

&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Testing Closure&lt;/title&gt;

    &lt;!-- Include the Closure base.js file, responsible for bootstrapping the Closure runtime --&gt;
    &lt;script type="text/javascript" src="/goog/base.js"&gt;&lt;/script&gt;
    &lt;!-- This is our application-specific javascript file --&gt;
    &lt;script type="text/javascript" src="/javascripts/test.js"&gt;&lt;/script&gt;
  &lt;/head&gt;

  &lt;body onload="execute()"&gt;
    &lt;h1&gt;Messages&lt;/h1&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>2. Create a file public/javascripts/test.js with this source:</p>
<pre><code>// This file provides this namespace to other code
// that may reference this namespace.
// This information is used by the compiler to
// optimize your code.
goog.provide("godzilla.test");
goog.provide("godzilla.test.MessageWriter");

// We want to use some functionality defined in this module.
goog.require("goog.dom");

// A simple object constructor.
// MessageWriter will append messages to our document body with a given prefix
godzilla.test.MessageWriter = function(prefix) {
  this.prefix = prefix;
}

// Append a message to our document's body
godzilla.test.MessageWriter.prototype.write = function(message) {
  var m = goog.dom.createDom("div", null, this.prefix + message);
  goog.dom.appendChild(document.body, m);
}

// Let's write some messages
function execute() {
  var writer = new godzilla.test.MessageWriter("Info: ");
  writer.write("Mothra is coming!!!");
  writer.write("I see your Schwartz is as big as mine.");
}

// Feel free to write more awesome messages
</code></pre>
<p><strong>Step 3. Watch your uncompiled script run beautifully.</strong></p>
<p>1. <em>ruby server.rb</em> # start up your sinatra server</p>
<p>2. Navigate to http://localhost:4567/test.html # see that your messages made it onto the page</p>
<p><strong>Step 4. Cry when your script fails to compile properly with advanced optimizations.</strong></p>
<p>1. Download the latest compiler jar here: http://closure-compiler.googlecode.com/files/compiler-latest.zip</p>
<p>2. Extract it and move compiler.jar into public/compiler.jar</p>
<p>3. <em>cd public</em></p>
<p>4. <em>bin/build/closurebuilder.py &#8211;root=../closure-library/ &#8211;root=javascripts/ &#8211;namespace=godzilla.test &#8211;output_mode=compiled &#8211;compiler_jar=compiler.jar &#8211;compiler_flags=&#8221;&#8211;compilation_level=ADVANCED_OPTIMIZATIONS&#8221; &gt; javascripts/test.compiled.js</em></p>
<p>5. Notice the warnings :(</p>
<p>6. Modify your test.html file to point to the compiled javascript.</p>
<pre><code>&lt;!-- Include the Closure base.js file, responsible for bootstrapping the Closure runtime --&gt;
&lt;!-- &lt;script type="text/javascript" src="/goog/base.js"&gt;&lt;/script&gt; --&gt;

&lt;!-- This is our application-specific javascript file --&gt;
&lt;!-- &lt;script type="text/javascript" src="/javascripts/test.js"&gt;&lt;/script&gt; --&gt;

&lt;script type="text/javascript" src="/javascripts/test.compiled.js"&gt;&lt;/script&gt;
</code></pre>
<p>7. Browse to your page again: http://localhost:4567/test.html</p>
<p>8. Notice that nothing happens, and the Javascript error is &#8220;Uncaught ReferenceError: execute is not defined&#8221; (at least in Chrome this is what you will see)</p>
<p>9. What happened? Move on to <strong>Step 5</strong> to find out.</p>
<p><strong>Step 5. Export your execute function and let Closure know that MessageWriter is a constructor.</strong></p>
<p>1. Add this line to the end of test.js: window["execute"] = execute;</p>
<p>2. Recompile your javascript and note you still have some warnings</p>
<p>3. Navigate to your test page and see that everything is working again! This is because the Closure compiler renames your execute function to a shorter name in order to reduce the size of the final output file. In order for your old references to the function to work, you need to export the function to window.</p>
<p>4. To get rid of the compiler warnings, we need to tell closure that our MessageWriter function is actually a constructor. To do this, add the following lines directly above &#8220;godzilla.test.MessageWriter = function(prefix) {&#8221;</p>
<pre><code>/**
* @constructor
*/
</code></pre>
<p>5. Recompile your javascript, and look… You have no warnings or errors!</p>
<p><strong>Step 6. Eat a cookie and ponder what just happened. Nom nom nom.</strong></p>
<p>Also, after you are done eating your cookie, you could view the <a title="Closure, Sinatra Example Application" href="https://github.com/blazingcloud/closure_sinatra_example" target="_blank">git repository</a>.</p>
<p>For a list of compiler warnings that Closure could give you, go to: <a href="https://developers.google.com/closure/compiler/docs/error-ref">https://developers.google.com/closure/compiler/docs/error-ref</a></p>
<p>A final note. If you are looking for a method that you are sure should exist in Closure, but you can&#8217;t find it in the API docs (I was looking for a filter method for arrays), then search in Google for it: &#8220;google closure array filter&#8221;. You may find what you are looking for in the source code, even though I couldn&#8217;t find anything on goog.array in the online docs.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blazingcloud.net/2012/03/08/getting-started-with-google-closure-in-sinatra/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Started with Jasmine and Rails 3.2</title>
		<link>http://blog.blazingcloud.net/2012/03/03/getting-started-with-jasmine-and-rails-3-2/</link>
		<comments>http://blog.blazingcloud.net/2012/03/03/getting-started-with-jasmine-and-rails-3-2/#comments</comments>
		<pubDate>Sat, 03 Mar 2012 17:55:57 +0000</pubDate>
		<dc:creator>sarah</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blazingcloud.net/?p=2797</guid>
		<description><![CDATA[tldr; check out the git repo Some good folks have been putting together gems that really help getting started with Javascript testing in Rails, which became somewhat more challenging with the Rails 3.1 asset pipeline.  I decided to dig through some of this and get up to speed with a fresh install of Rails 3.2.2 [...]]]></description>
			<content:encoded><![CDATA[<p>tldr; check out the <a href="https://github.com/blazingcloud/jasmine-rails32-example">git repo</a></p>
<p>Some good folks have been putting together gems that really help getting started with Javascript testing in Rails, which became somewhat more challenging with the Rails 3.1 asset pipeline.  I decided to dig through some of this and get up to speed with a fresh install of Rails 3.2.2 using my favorite JS testing framework, the BDD-style Jasmine.</p>
<p>I started with <a href="http://www.derekhammer.com/2012/02/18/testing-coffeescript-for-rails-with-jasmine.html">Derek Hammer&#8217;s testing coffeescript tutorial</a> &#8212; I&#8217;m not sold on coffeescript, so I reimplemented the first &#8220;sanity&#8221; spec in plain old javascript.</p>
<p>Note: do not name your .coffee files the same root name as your .js file &#8212; only one of them will be executed twice.  Here&#8217;s a comparison of the syntax:</p>
<p>Coffeescript Jasmine Spec:</p>
<pre>
describe "sanity", ->
  it "1 should == 1", ->
    expect(1).toBe(1)

  it "says hello", ->
    expect(helloWorld()).toEqual("Hello!")
</pre>
<p>Javascript Jasmine Spec:</p>
<pre>
describe("sanity js", function() {
  it("2 equals 2", function() {
    expect(2).toEqual(2);
  });

  it("says hello", function() {
    expect(helloWorld()).toEqual("Hello!");
  });

});
</pre>
<p>Ok, I&#8217;m almost won over to coffeescript by this example &#8212; it&#8217;s nice that I can write my specs in coffeescript and code in Javascript (and I assume vice versa), so I can experiment without having to make a binary decision.</p>
<p>I can see failing specs by running <code>rails s</code> and going to http://localhost:3000/jasmine and it looks like this (when I&#8217;ve defined the helloWorld() function but it returns the wrong thing):<br />
<img src="https://img.skitch.com/20120303-dgmr4me12d7fit6s5gphicqcuk.png"/></p>
<p>Even better, using jasmine-guard, I can see this on the command line:<br />
<img src="https://img.skitch.com/20120303-bigwtntpyc1tp3sw18jh5wymhi.png"/></p>
<p>Summary of getting this all working:</p>
<p>Using rails 3.2.2&#8230;</p>
<pre>
$rails new jasminerice-example
$cd jasminerice-example
</pre>
<p>add the following to your Gemfile</p>
<pre>
group :development, :test do
  gem "jasminerice"
  gem "guard-jasmine"
end
</pre>
<pre>
bundle
brew install phantomjs
</pre>
<p>I got a &#8220;SHA1 mismatch&#8221; error, fixed with</p>
<pre>
  brew update
  brew install phantomjs
</pre>
<p>Then</p>
<pre>
bundle exec guard init jasmine
mkdir -p spec/javascripts
touch spec/javascripts/spec.js
touch spec/javascripts/spec.css
</pre>
<p>in spec/javascripts/spec.js</p>
<pre>
//= require application
//= require_tree .
</pre>
<p>in spec/javascripts/spec.css</p>
<pre>
/*
 *= require application
 */
</pre>
<p>Now any coffee or js you put in spec/javascripts will be executed when you <code>rails s</code> and go to <a href="http://localhost:3000/jasmine">http://localhost:3000/jasmine</a> or see your specs run on the command line with:</p>
<pre>
bundle exec guard
</pre>
<p>Happy Testing!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.blazingcloud.net/2012/03/03/getting-started-with-jasmine-and-rails-3-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

