<?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:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Engine Yard Developer Blog</title>
	
	<link>https://blog.engineyard.com</link>
	<description />
	<lastBuildDate>Wed, 22 May 2013 20:48:40 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=182</generator>
		<feedburner:info uri="engineyard" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://www.engineyard.com/feed/" /><feedburner:emailServiceId>engineyard</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://www.engineyard.com/feed/" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Fwww.engineyard.com%2Ffeed%2F" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>A Conversation About Testing in PHP</title>
		<link>http://feedproxy.google.com/~r/engineyard/~3/X-WFXo4W7dU/a-conversation-about-testing-in-php</link>
		<comments>https://blog.engineyard.com/2013/a-conversation-about-testing-in-php#comments</comments>
		<pubDate>Wed, 22 May 2013 20:45:41 +0000</pubDate>
		<dc:creator>Ed Finkler</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">https://blog.engineyard.com/?p=14400</guid>
		<description>&lt;p&gt;Our friends &lt;a href="https://twitter.com/funkatron"&gt;Ed Finkler&lt;/a&gt; and &lt;a href="https://twitter.com/grmpyprogrammer"&gt;Chris Hartjes&lt;/a&gt; recently had a chat about testing in PHP.  Read on to get the low down on different testing tools and their relative merits--check it out as Ed and Chris weep for the future, come to some interesting conclusions and get their hands dirty so you don't have to.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://twitter.com/funkatron"&gt;Ed&lt;/a&gt; and &lt;a href="https://twitter.com/grmpyprogrammer"&gt;Chris&lt;/a&gt; had a little chat about testing in PHP.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris&lt;/strong&gt;: Okay, so today's topic is PHP testing&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ed&lt;/strong&gt;: Word up&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris&lt;/strong&gt;: Now, Ed, I know that for the most part you are not a big fan of the mainstream PHP testing tools&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ed&lt;/strong&gt;: Yes, that's true&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris&lt;/strong&gt;: So what is it that you don't like about them&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ed&lt;/strong&gt;: I guess realistically my complaints are aimed at &lt;a href="http://phpunit.de"&gt;PHPUnit&lt;/a&gt; . It's very powerful and very complete from what I can tell, but I think it's difficult to pick up and I think that difficulty makes people less likely to use it. Because it's by far the best known testing tool, I think that tends to limit the use of unit testing, period, in PHP. That's not necessarily PHPUnit's fault per se. I just think it's the situation we're in. I think the documentation, the setup, and just obtaining PHPUnit is a challenge, particularly when compared to unit testing options I've seen in other languages. Python, for example, has a simple but effective &lt;a href="http://docs.python.org/2/library/unittest.html"&gt;unit testing library&lt;/a&gt; built into the core.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris&lt;/strong&gt;: So, when you say "difficult to pick up", is it because tests look like this?&lt;span id="more-14400"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre escaped="true"&gt;&amp;lt;?php 
class Labels
{
    public $db;

    /**
     * @param GrumpyDb $db
     */
    public function __construct($db)
    {
        $this-&amp;gt;db = $db;
    }

    /**
     * Turns label values like codingStandardsSuck into
     * CODING_STANDARDS_SUCK
     */
    public function screamingSnakeLabels()
    {
        $results = $db-&amp;gt;query("SELECT name FROM labels");
        $labels = array();
        foreach ($results as $result) {
            $labels[] = $this-&amp;gt;_camelToScreamingSnake($result);
        }
        return $labels;
    }

    /**
     * Method that takes a camelCase string into SCREAMING_SNAKE_CASE
     *
     * @param string $value
     */
    protected function _camelToScreamingSnake($value)
    {
        $result = preg_replace_callback(
            '/[A-Z]/',
            function ($match) {
                return "_" . strtolower($match[0]);
            },
            $value
        );
        return strtoupper($result);
    }
}

class DevhellTest extends PHPUnit_Framework_TestCase
{
    public function testShowEdHow()
    {
        $db = $this-&amp;gt;getMockBuilder('Foo')
            -&amp;gt;disableOriginalConstructor()
            -&amp;gt;setMethods(array('query'))
            -&amp;gt;getMock();
        $db-&amp;gt;expects($this-&amp;gt;once())
            -&amp;gt;method('query')
            -&amp;gt;will($this-&amp;gt;returnValue(array('devHell', 'camelCase'));
        $label = new Label($db);
        $expectedResults = array('DEV_HELL', 'CAMEL_CASE');
        $testResults = $label-&amp;gt;screamingSnakeLabels();
        $this-&amp;gt;assertEquals(
            $expectedResults,
            $testResults,
            "Labels were not correctly coverted to screaming snake case"
        );
    }
}&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Chris&lt;/strong&gt;: Maybe it's because I've worked with it a lot, all I see is some boilerplate and then a few statements that seem pretty intuitive to me.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ed&lt;/strong&gt;: I think boilerplate is part of the issue. I think that's intimidating. Tools can mitigate that to some extent, but I don't think it eliminates the problem entirely. I just don't think writing a simple test should be anything more than a couple lines of code. Then you can build upon that iteratively as you need. I think that approach of starting simply and building up your set of tests really helps you understand what's going on, and I think it makes testing a lot more accessible to people who haven't done it before. A lot of testing framework docs I see throw a ton of nomenclature out at the reader. I think if you don't already understand that nomenclature, you won't understand what's up.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris&lt;/strong&gt;: So when you say 'nomenclature', you're talking about things like what exactly? Assertions and mocks?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ed&lt;/strong&gt;: Knowing how to mock that stuff up is pretty complex. In my experience the majority of people who work with PHP don't have a lot of formal training and even if they do, it often doesn't cover testing concepts. Like, what's a "unit?" What's an assertion? What's a mock or a stub?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris&lt;/strong&gt;: I weep for the future, Ed. A unit is a small amount of code that you're trying to test&lt;/p&gt;
&lt;p&gt;In PHP, that's usually one object, An assertion is simply a statement that "I am saying that the following is true", whatever that assertion happens to be. I do agree that there is lots of confusion about what a mock or a stub is so in my &lt;a href="http://grumpy-phpunit.com"&gt;book&lt;/a&gt; I devote a chapter to explaining those things.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ed&lt;/strong&gt;: So I know what that stuff is (although I get confused about the diff between a mock and stub). But the real problem is that in order to write tests, you have to already know how to program, and that in itself is super-intimidating for people. PHP has a very shallow learning curve: the time between learning and becoming productive in some way is very short. That's certainly one of the reasons PHP is so popular. We need, I think, to mirror that in how we present testing, and make it easy to get into. It shouldn't be something that is terribly complex to set-up and do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris&lt;/strong&gt;: In that light, I understand the motivation to develop your own testing tools, but I still think PHPUnit is the way to go. So many people use it and there are so many resources available to learn it, that picking it up isn't as difficult as I think you're making it out to be. Alternately, I think the Behavior-Driven Development (BDD) model that &lt;a href="http://behat.org/"&gt;Behat&lt;/a&gt; offers is appealing, and easier to pick up than the xUnit style. Behat combined with &lt;a href="http://mink.behat.org/"&gt;Mink&lt;/a&gt; is a solid alternative to PHPUnit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ed&lt;/strong&gt;: If you are doing acceptance testing (meaning that you only care that the application as a whole is working) I don't&lt;br /&gt;
think you can go wrong with being able to write tests that look like this:&lt;/p&gt;
&lt;pre escaped="true"&gt;Feature:
    Scenario: Main page loads
    Given I am on "/index.php"
    Then I should see "Lies I Told My Kids"

    Scenario: Empty form fields trigger errors
    Given I am on "/index.php"
    When I press "submitButton"
    Then I should see "You submitted an invalid e-mail address"

    Scenario: Missing description triggers errors
    Given I am on "/index.php"
    When I fill in "email" with "test@domain.com"
    And I press "submitButton"
    Then I should see "You submitted a blank description"&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Chris&lt;/strong&gt;: The Behat and Mink combo can let you create some very interesting acceptance tests, and it even provides you with tools that will tell you when you when you will have to write your own helpers to supplement what they can provide you. It took me a few days to figure out Behat's own way of doing things but once I did I was able to create some very interesting tests, even ones where JavaScript (long the bane of automated acceptance testing) was being used.&lt;/p&gt;
&lt;p&gt;If your mind doesn't align well with unit testing, then something like Behat is definitely the way to go. There's something neat about watching PHP run Behat which in turn opens up a browser and starts acting like a user and hopefully using your application correctly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ed&lt;/strong&gt;: Ultimately, though, a lot of the problem with testing in PHP is that PHP's insane flexibility makes it super easy to write code that you cannot test. That and PHP is almost always working in concert with other systems, like a web server, so it can be tough to know what you can easily test inside the CLI and what you'd need to use a different approach.&lt;/p&gt;
&lt;p&gt;To write testable code, you really have to be thinking about testing when you write your code. It takes a bit of time to get used to that, but I think it's very doable. In much the same way, it's taken us a long time to make security a first-order concern in PHP development, but I think we've done a decent job of that. We need to do that for testing as well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chris&lt;/strong&gt;: If only, Ed. If only.
&lt;p&gt;&lt;a href="http://www.engineyard.com/blog"&gt;&lt;img height="98" width="61" title="logo-engineyard" alt="" class="attachment-post-thumbnail wp-post-image" src="http://www.engineyard.com/blog/wp-content/uploads/logo-engineyard.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/engineyard/~4/X-WFXo4W7dU" height="1" width="1"/&gt;</description>
		<wfw:commentRss>https://blog.engineyard.com/2013/a-conversation-about-testing-in-php/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>https://blog.engineyard.com/2013/a-conversation-about-testing-in-php</feedburner:origLink></item>
		<item>
		<title>May 17, 2013: This Week at Engine Yard</title>
		<link>http://feedproxy.google.com/~r/engineyard/~3/cHjY9pjjQK4/may-17-2013-this-week-at-engine-yard</link>
		<comments>https://blog.engineyard.com/2013/may-17-2013-this-week-at-engine-yard#comments</comments>
		<pubDate>Fri, 17 May 2013 18:36:50 +0000</pubDate>
		<dc:creator>Tasha Drew</dc:creator>
				<category><![CDATA[This week at Engine Yard]]></category>

		<guid isPermaLink="false">https://blog.engineyard.com/?p=14379</guid>
		<description>&lt;p dir="ltr"&gt;I spent this week with the team of engineers who made Riak on Engine Yard Cloud possible, attending &lt;a href="http://ricon.io/east.html"&gt;RICON East&lt;/a&gt;: all Distributed Systems, all the time. Later in the week we took advantage of being in New York City to visit local customers and discuss the various features we’re working on and field any technical, product, and data questions.&lt;/p&gt;
&lt;p dir="ltr"&gt;Both our engineering and product teams love incorporating customer feedback into our direction. Speaking of which -- if you’re in San Francisco, I’m organizing customer UX feedback sessions! Hit me up :)&lt;/p&gt;
&lt;p dir="ltr"&gt;--&lt;a href="https://twitter.com/TashaDrew"&gt;Tasha Drew&lt;/a&gt;, Product Manager&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;Engineering Updates&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;PHP is now GA on Engine Yard Cloud! Per Product Manager &lt;a href="https://twitter.com/nslater"&gt;Noah Slater&lt;/a&gt;: “PHP has been an important part of Engine Yard’s growing family since the acquisition of Orchestra in 2011. And now, PHP on Engine Yard Cloud represents the culmination of our efforts to deliver the industry’s best Platform as a Service for PHP developers. The result of this work is a unified service offering for PHP, Node.js, and Ruby applications.” Read all about the &lt;a href="https://blog.engineyard.com/2013/announcing-php-on-engine-yard-cloud"&gt;GA launch&lt;/a&gt; announced by &lt;a href="https://twitter.com/dshafik"&gt;Davey Shafik&lt;/a&gt; at php[tek] in Chicago this week!&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;Data Data Data&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;Riak and Clusters are live! See our blog post for more info - &lt;a href="https://blog.engineyard.com/2013/riak-is-ga-engine-yard"&gt;https://blog.engineyard.com/2013/riak-is-ga-engine-yard&lt;/a&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;A cluster is a new way to organize and manage instances that share a specific function.  Clusters take much of the functionality that was once placed at the environment level, and moves it down to the cluster level. One environment can have many clusters, and each cluster can run different cookbooks and be in different regions.&lt;/p&gt;
&lt;p dir="ltr"&gt;We drove the cluster model hand in hand with our productization of Riak on Cloud because the distributed model of Riak paired perfectly with where we wanted to drive the future of our platform. We can now take this underlying work and begin to re-productize other offerings to take advantage of its flexibility in many ways.&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;Social Calendar (Come say hi!)&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;Tuesday May 20th: Engine Yard Dublin hosts the PHP meetup where &lt;a href="https://twitter.com/eugeneius"&gt;Eugene Kenny&lt;/a&gt;, Adverts.ie discusses his "Developer Toolbox", and then &lt;a href="https://twitter.com/mwop"&gt;Matthew Weier O'Phinney&lt;/a&gt; of Zend Framework &amp;amp; &lt;a href="https://twitter.com/nateabele"&gt;Nate Abele&lt;/a&gt; of Lithium go head to head on the subject of Frameworks.&lt;/p&gt;
&lt;p dir="ltr"&gt;Wednesday May 21st: Engine Yard’s San Francisco HQ will be hosting the monthly &lt;a href="http://www.meetup.com/San-Francisco-Riak-Meetup/events/118840422/"&gt;Riak meetup&lt;/a&gt;! Lead data engineer and fan favorite &lt;a href="https://twitter.com/randommood"&gt;Ines Sombra&lt;/a&gt; will be presenting about Riak on Engine Yard Cloud, followed by Basho’s &lt;a href="https://twitter.com/pharkmillups"&gt;Mark Phillips&lt;/a&gt; discussing Riak CS.&lt;/p&gt;
&lt;p dir="ltr"&gt;Wednesday May 21st: Our PDX office will be hosting Coder Dojo for students K-12 to learn about software! &lt;a href="https://coderdojopdx.eventbrite.com/"&gt;Grab a ticket&lt;/a&gt; and bring your parents for some software fun.&lt;/p&gt;
&lt;p dir="ltr"&gt;Thursday May 22nd: Engine Yard Dublin plays host to &lt;a href="https://groups.google.com/forum/?fromgroups#!topic/open-data-ireland/lmI9mAy3Yqc"&gt;Open Data Ireland&lt;/a&gt;, “Give us our health data!”&lt;/p&gt;
&lt;p dir="ltr"&gt;Friday May 23rd: In which I talk about myself in the 3rd person? &lt;a href="https://www.twitter.com/tashadrew"&gt;Tasha Drew&lt;/a&gt; will be speaking at &lt;a href="http://www.cloudeast.net/ce2013/index.php"&gt;Cloud East&lt;/a&gt; in Cambridge, UK, about deployments in the cloud, including various strategies we at Engine Yard see for environments of different sizes -- and concluding with sharing our own deployment strategy.&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;Articles of Interest &lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;Lightweight screenshot and annotation tool &lt;a href="http://glui.me/"&gt;http://glui.me/&lt;/a&gt; has gained some fans in our office!&lt;/p&gt;
&lt;p&gt;Engine Yard friend &lt;a href="https://twitter.com/darraghcurran"&gt;Daragh Curran&lt;/a&gt;, Head of Product Engineering, &lt;a href="https://www.intercom.io/"&gt;Intercom&lt;/a&gt; shared an awesome blog &lt;a href="http://insideintercom.io/shipping-is-your-companys-heartbeat"&gt;here&lt;/a&gt;. “Shipping brings life to your team, to your product, and to your customers. Shipping is your company’s heartbeat.”
&lt;p&gt;&lt;a href="http://www.engineyard.com/blog"&gt;&lt;img height="98" width="61" title="logo-engineyard" alt="" class="attachment-post-thumbnail wp-post-image" src="http://www.engineyard.com/blog/wp-content/uploads/logo-engineyard.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/engineyard/~4/cHjY9pjjQK4" height="1" width="1"/&gt;</description>
		<wfw:commentRss>https://blog.engineyard.com/2013/may-17-2013-this-week-at-engine-yard/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>https://blog.engineyard.com/2013/may-17-2013-this-week-at-engine-yard</feedburner:origLink></item>
		<item>
		<title>Shipping is your company’s heartbeat</title>
		<link>http://feedproxy.google.com/~r/engineyard/~3/DhJSLoefaIM/shipping-is-your-companys-heartbeat</link>
		<comments>https://blog.engineyard.com/2013/shipping-is-your-companys-heartbeat#comments</comments>
		<pubDate>Thu, 16 May 2013 11:38:34 +0000</pubDate>
		<dc:creator>Darragh Curran</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">https://blog.engineyard.com/?p=14361</guid>
		<description>&lt;p class="opening_paragraph"&gt;&lt;b&gt;Note&lt;/b&gt;: Engine Yard friend &lt;a href="https://twitter.com/darraghcurran"&gt;Daragh Curran&lt;/a&gt;, Head of Product Engineering, &lt;a href="https://www.intercom.io/"&gt;Intercom&lt;/a&gt; has graciously let us post this great piece about code deployment on our blog. Check it out on their own blog &lt;a href="http://insideintercom.io/shipping-is-your-companys-heartbeat"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p class="opening_paragraph"&gt;Software only becomes valuable when you ship it to customers. Before then it's just a costly accumulation of hard work and assumptions.&lt;/p&gt;
&lt;p&gt;Shipping unlocks a feedback loop that confirms or challenges those assumptions. It makes new things possible for your customers, and gives you the opportunity to focus on the next thing.&lt;/p&gt;
&lt;p&gt;Shipping brings life to your team, to your product, and to your customers. &lt;strong&gt;Shipping is your company's heartbeat.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Shipping will try to kill you&lt;/h2&gt;
&lt;p&gt;The scramble to get that one last feature done, the late nights, the compromises, the sinking feeling when we realise something major is broken, the post-mortems… It's agony, but if it was easy everyone would do it. Shipping exposes mistakes. We're nervous about it, and our natural reaction is to do it reluctantly and infrequently, which actually carries higher risk, causing more reluctance in the future.&lt;/p&gt;
&lt;h2&gt;The cost of shipping is approaching zero&lt;/h2&gt;
&lt;p&gt;Not too long ago, shipping software involved actual ships, disks, and printed manuals. It happened perhaps once a year. Bug fixes weren't automatic over the internet like today. Everything was slower and more controlled. The cost of shipping was massive, the consequence of a mistake was large. Today, the cost of shipping has approached zero. Most people can deploy in seconds or minutes with a single command or button click. With a little thought you can do that without your customers noticing, and with automated monitoring you'll find out immediately if something goes wrong.&lt;/p&gt;
&lt;p&gt;Despite the cost of shipping approaching zero, many people still ship software guided by very old habits.&lt;/p&gt;
&lt;h2&gt;Shipping cadence defines your company&lt;/h2&gt;
&lt;p&gt;The cadence at which you ship defines your company. A yearly cadence results in a very structured approach to the design-&amp;gt;build-&amp;gt;test cycle. A few months of building, while the rest is spend fixing. Engineers can join and leave before seeing their hard work end up in the hands of customers. The approach to design becomes one of anticipating all possible needs, rather than focusing and iterating on the important ones.&lt;/p&gt;
&lt;h3&gt;Obstacles downstream propagate upstream&lt;/h3&gt;
&lt;blockquote cite="http://www.paulgraham.com/boss.html"&gt;&lt;p&gt;An obstacle downstream propagates upstream. If you're not allowed to implement new ideas, you stop having them.&lt;br /&gt;
&lt;cite&gt;- &lt;a href="http://www.paulgraham.com/boss.html"&gt;Paul Graham&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The right approach to shipping has a positive influence on your company's productivity and your team's happiness &amp;amp; job satisfaction. Shipping infrequently is an obstacle. Ship slow, and you'll introduce challenges that push you to ship even slower. Ship frequently, and see positive effects everywhere in your company. For example, lets examine how behaviour changes along with shipping frequency, while handling a simple request from a customer.&lt;/p&gt;
&lt;div class="post_image_wrapper"&gt;&lt;img class="wp-image-2134" title="time-to-production-behavior" alt="Time to production behavior" src="http://insideintercom.io/wp-content/uploads/2013/05/time-to-production-behavior.png" width="600" height="521" /&gt;&lt;/div&gt;
&lt;p&gt;Lets say a customer gets in touch to say "&lt;em&gt;No matter what I do, I cannot save my name correctly, I think it doesn't like hyphens&lt;/em&gt;". In a company where you ship continuously, you see this and think Simple — I'll tweak a test and a regex pattern, get a quick code review from my buddy beside me, merge to mainline, and 1 minute later when it's deployed to production, reply to the customer: "&lt;em&gt;Sorry about this, it's fixed now, thanks for letting us know&lt;/em&gt;". They'll reply: "&lt;em&gt;Wow, thanks for fixing so quickly&lt;/em&gt;". High fives all around!&lt;/p&gt;
&lt;p&gt;If we stretch the time to production (TTP) out a little, even to 10 minutes, the behaviour changes. You either do the same, but reply saying it'll be fixed with our next deploy (probably 10 minutes) - or you wait, so that you can communicate with certainty. The waiting is time where you'll shift focus to something else, but have the baggage of having to follow up. Perhaps you'll think, I'll have a quick coffee, then move on to something else afterwards. Even though your deployments are entirely automated, you lose time because of waiting and losing focus.&lt;/p&gt;
&lt;div class="post_image_wrapper"&gt;&lt;img class="wp-image-2144" title="customer-support-shipping" alt="Customer support shipping" src="http://insideintercom.io/wp-content/uploads/2013/05/customer-support-shipping.png" width="600" height="687" /&gt;&lt;/div&gt;
&lt;p&gt;If TTP is hours, the behaviour changes again. No longer can you say with certainty when the change will be out there, so you're tempted to batch up with other similar small changes. You postpone replying until you get time to do it, sometimes forgetting about it. You're less likely to take prompt action, wow'ing the customer, and you pay some mental cost for having it on a todo list. Since getting to production takes hours now, your team will start restricting to morning only deploys, so miss that slot and it's further delays.&lt;/p&gt;
&lt;p&gt;If TTP is days, it exacerbates that further - perhaps you'll reply "Thanks for letting us know. We'll fix this in our next sprint". It gets bundled in with a whole load of other small low, priority items, you spend more time debating estimates, and priorities, than the first guy took to fix it and reply to the customer. Miss the beginning of week deploy window and further slippage. The larger releases bring higher risk, you'll tell your customer it's fixed, only to later require rolling back because of a separate change. Your bug database gets bigger and bigger, with little details that you'll probably never fix.&lt;/p&gt;
&lt;p&gt;When TTP is weeks, it exaggerates that even further - perhaps you'll reply "&lt;em&gt;Sorry about this, I'll let the development team know&lt;/em&gt;" or something equally lame from your customer’s standpoint. Deep down you realise nothing will be fixed, and the job of talking to customers becomes a cost or hassle, rather than an opportunity to improve your product and nurture happy loyal customers.&lt;/p&gt;
&lt;h2&gt;Shipping continuously&lt;/h2&gt;
&lt;p&gt;Better approaches to writing or testing software help us iterate more quickly and confidently, but the benefits are quite local to engineering teams. Continuous shipping on the other hand, touches all parts of your company, as do the benefits, and the behaviours it enables and encourages.&lt;/p&gt;
&lt;p&gt;Linkedin's transition to continuous deployment &lt;a href="http://www.wired.com/business/2013/04/linkedin-software-revolution/"&gt;is linked to their recent financial success&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Good products, are a side effect of combining good people with an idea in an environment that helps those people to kick ass. Your attitude to shipping is a big part of that environment you create.&lt;/p&gt;
&lt;p&gt;Shipping breathes life into how we think. The feedback loop helps us learn, gain confidence in making quick decisions, and build momentum. Momentum in product improvements excites and engages our customers. Seeing quickly the benefits of our hard work, motivates us to do more. Building a team where people can work hard and move fast attracts others to join you - hiring gets easier.&lt;/p&gt;
&lt;div class="post_image_wrapper"&gt;&lt;/div&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="https://blog.engineyard.com/wp-content/uploads/shipping-brings.png"&gt;&lt;img class="size-medium wp-image-14366 aligncenter" alt="shipping-brings" src="https://blog.engineyard.com/wp-content/uploads/shipping-brings-300x296.png" width="300" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Shipping continuously isn't an achievement you unlock and then move on. You've got to constantly obsess about it. If you believe in the benefits it brings, you'll be driven to shrink 20 minutes down to 1 minute or less, you'll consider '&lt;em&gt;ability to ship&lt;/em&gt;' as an equal to '&lt;em&gt;does it scale&lt;/em&gt;' when building new systems. And you'll do that because of all the life it breathes into your company and your product.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Shipping is your company's heartbeat.&lt;/strong&gt;
&lt;p&gt;&lt;a href="http://www.engineyard.com/blog"&gt;&lt;img height="98" width="61" title="logo-engineyard" alt="" class="attachment-post-thumbnail wp-post-image" src="http://www.engineyard.com/blog/wp-content/uploads/logo-engineyard.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/engineyard/~4/DhJSLoefaIM" height="1" width="1"/&gt;</description>
		<wfw:commentRss>https://blog.engineyard.com/2013/shipping-is-your-companys-heartbeat/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>https://blog.engineyard.com/2013/shipping-is-your-companys-heartbeat</feedburner:origLink></item>
		<item>
		<title>Riak is GA on Engine Yard Cloud</title>
		<link>http://feedproxy.google.com/~r/engineyard/~3/EtVqudKxj_Q/riak-is-ga-engine-yard</link>
		<comments>https://blog.engineyard.com/2013/riak-is-ga-engine-yard#comments</comments>
		<pubDate>Tue, 14 May 2013 19:56:52 +0000</pubDate>
		<dc:creator>Ines Sombra</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[Riak]]></category>

		<guid isPermaLink="false">https://blog.engineyard.com/?p=14350</guid>
		<description>&lt;p dir="ltr"&gt;Hello from NYC! We stopped by &lt;a href="http://ricon.io/east.html"&gt;RICON East&lt;/a&gt; to &lt;a href="https://speakerdeck.com/randommood/ricon-east-2013-lightning-talk"&gt;share great news&lt;/a&gt;. We are thrilled to announce the General Availability of Riak on Engine Yard Cloud.&lt;/p&gt;
&lt;p dir="ltr"&gt;Riak is &lt;a href="https://blog.engineyard.com/2013/welcoming-riak-now-hosted-on-engine-yard"&gt;our first highly available, non-relational database&lt;/a&gt; and the first component of our stack to use a new cluster provisioning model. Riak exemplifies the future of Engine Yard and you should totally check it out! Here’s why.&lt;/p&gt;
&lt;h2 dir="ltr"&gt;Highlights of Using Riak on Engine Yard Cloud&lt;/h2&gt;
&lt;p dir="ltr"&gt;Riak’s use case primarily fits applications with loosely structured data where even seconds of downtime are unacceptable. Riak has a key/value data model and is completely data agnostic, meaning you can store anything you want in a value (media, json, xml, text, etc.).&lt;/p&gt;
&lt;p dir="ltr"&gt;Riak is masterless. You can send writes to any node in the cluster and data will be appropriately stored, even in the case of individual node failures. Riak also supports &lt;a href="http://docs.basho.com/riak/1.1.4/tutorials/fast-track/Tunable-CAP-Controls-in-Riak/"&gt;tunable consistency&lt;/a&gt;, allowing you to make the datastore more strict on certain types of data and more responsive on others.&lt;/p&gt;
&lt;h3 dir="ltr"&gt;Painless Installation, Management, and Support&lt;/h3&gt;
&lt;p dir="ltr"&gt;We have invested in simplifying Riak's installation and configuration to make the learning curve less steep. In one easy step you can define the flavor and size of your cluster, the location of your data (EBS, ephemeral, etc.), optimize your cluster by selecting desired backends, and even enable full text search.&lt;/p&gt;
&lt;p dir="ltr"&gt;Once your cluster is up and running you can painlessly grow it if you need to add capacity. Removing nodes is also a trivial operation. If for any reason you want to archive your entire cluster, you can easily do this, too.&lt;/p&gt;
&lt;p dir="ltr"&gt;Riak clusters come with the fantastic support you have come to expect from Engine Yard. As partners of Riak's makers, Basho, we can quickly escalate tickets on your behalf when they require extra engineering insight.&lt;/p&gt;
&lt;h2 dir="ltr"&gt;A Whole New (Clustered) World&lt;/h2&gt;
&lt;p dir="ltr"&gt;The &lt;a href="https://support.cloud.engineyard.com/entries/22990793-Clusters-Redefined"&gt;cluster model&lt;/a&gt; used by Riak evolves the deployment topology of  environments. Environments become more flexible with the ability to specify zero to many clusters per environment, and have all clusters properly deployed and balanced within availability zones in your region. We are also working on the ability to have clusters within a single environment provisioned in a different region.&lt;/p&gt;
&lt;p dir="ltr"&gt;As of today, clusters are exposed to all customers.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;img alt="" src="https://lh5.googleusercontent.com/mtrY1w1WHFGOvcBAa3e6PzUiw4XeDwhcy01JDZRH-HeoumxPut3DdAI94asq9broBWRwCrVo51TZfJkk2rPzya370drW56waUPWoKq7JOSa4c4J847AKMuBOmw" width="415px;" height="226px;" /&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;We will be migrating individual stack components to our new cluster model. All supported databases will be re-done and acquire the provisioning features you see in Riak. We are very excited about what we'll be releasing over the next few months.&lt;/p&gt;
&lt;h3 dir="ltr"&gt;Introducing Cluster Behaviors&lt;/h3&gt;
&lt;p dir="ltr"&gt;The cluster provisioning model also allow us to express cluster-specific behaviors and act upon them in a scheduled way (or on demand). For example: all Riak clusters have access to rolling backups as their first supported behavior.&lt;/p&gt;
&lt;p dir="ltr"&gt;With rolling backups we can archive the entire contents of a cluster one node at a time without compromising its overall performance and ability to respond to requests.  We will be introducing new behaviors (like rolling snapshots) very soon.&lt;/p&gt;
&lt;h2 dir="ltr"&gt;Things You Must Know&lt;/h2&gt;
&lt;p dir="ltr"&gt;To prepare for the migration of legacy components to clusters we have decided to change the way environments update. We have pushed stack responsibilities down to the cluster level. This means that clusters are now responsible for managing their stacks and updates which gives us greater granularity and flexibility (it’s a great thing, we promise!).&lt;/p&gt;
&lt;p dir="ltr"&gt;An important thing to note is that environment-wide custom Chef runs will no longer be applied to cluster instances. Clusters are isolated from system-wide versions of Chef as they carry their own stack and updates.&lt;/p&gt;
&lt;h2 dir="ltr"&gt;What Comes Next?&lt;/h2&gt;
&lt;p dir="ltr"&gt;Here are a few things we have in store as we continue to evolve Riak and clusters:&lt;/p&gt;
&lt;p dir="ltr"&gt;We want to make Riak’s management tasks more intuitive than ever, so we will roll out enhancements to the environment page and overall cluster user experience.  We are also working towards improve cluster monitoring and alerting.&lt;/p&gt;
&lt;p dir="ltr"&gt;Enhancements to instance booting times are in the pipeline. You will be able to go from zero to a fully running cluster faster than ever!&lt;/p&gt;
&lt;h2 dir="ltr"&gt;Where Can I Learn More?&lt;/h2&gt;
&lt;p dir="ltr"&gt;Our &lt;a href="https://support.cloud.engineyard.com/forums/21712121-Riak-Database"&gt;documentation&lt;/a&gt; has been updated and it’s a great place to get started. We will be leveraging &lt;a href="https://support.cloud.engineyard.com/forums/21728297-Manage-Your-Clusters"&gt;Basho’s&lt;/a&gt; excellent Riak documentation, too.&lt;/p&gt;
&lt;p dir="ltr"&gt;If you are in San Francisco we will be giving a tour of Riak on Engine Yard on May 22nd. Come ask questions! We’ll hand out a few gifts to the best ones&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;a href="http://www.meetup.com/San-Francisco-Riak-Meetup/events/118840422/"&gt;http://www.meetup.com/San-Francisco-Riak-Meetup/events/118840422/&lt;/a&gt;&lt;/p&gt;
&lt;h2 dir="ltr"&gt;Still Have Not Tried Riak?&lt;/h2&gt;
&lt;p dir="ltr"&gt;Riak is available on all trial accounts. Simply sign up, boot up a cluster, and you’ll be able to experiment with it.&lt;/p&gt;
&lt;p dir="ltr"&gt;Also feel free to open a Support ticket if you are wondering if Riak is a good fit for your application.  We love hearing from our customers and want your feedback.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.engineyard.com/blog"&gt;&lt;img height="98" width="61" title="logo-engineyard" alt="" class="attachment-post-thumbnail wp-post-image" src="http://www.engineyard.com/blog/wp-content/uploads/logo-engineyard.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/engineyard/~4/EtVqudKxj_Q" height="1" width="1"/&gt;</description>
		<wfw:commentRss>https://blog.engineyard.com/2013/riak-is-ga-engine-yard/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>https://blog.engineyard.com/2013/riak-is-ga-engine-yard</feedburner:origLink></item>
		<item>
		<title>Announcing PHP on Engine Yard Cloud</title>
		<link>http://feedproxy.google.com/~r/engineyard/~3/H8cjhUxGwU4/announcing-php-on-engine-yard-cloud</link>
		<comments>https://blog.engineyard.com/2013/announcing-php-on-engine-yard-cloud#comments</comments>
		<pubDate>Tue, 14 May 2013 14:45:19 +0000</pubDate>
		<dc:creator>Noah Slater</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">https://blog.engineyard.com/?p=14323</guid>
		<description>&lt;p&gt;We’re excited to announce the general availability of PHP on Engine Yard Cloud.&lt;/p&gt;
&lt;p&gt;PHP has been an important part of Engine Yard’s growing family since the acquisition of Orchestra in 2011. And now, PHP on Engine Yard Cloud represents the culmination of our efforts to deliver the industry’s best Platform as a Service for PHP developers. The result of this work is a unified service offering for PHP, Node.js, and Ruby applications.&lt;/p&gt;
&lt;p&gt;With PHP on Engine Yard Cloud, users get a proven, robust platform on which they can both horizontally and vertically scale applications – including content, media, e-commerce, and more. As a highly configurable PaaS, Engine Yard Cloud gives PHP developers – from enterprises to digital agencies to SMBs – a wider range of instance sizes, a fully curated PHP stack, and advanced automation and orchestration features such as database replication and failover.&lt;/p&gt;
&lt;p&gt;Whether deploying a simple Wordpress blog or an advanced MySQL-backed web application, developers get a range of control over configuration, deployment and management of their application environments, including full root access on virtual servers and the flexibility of using custom Chef recipes to control and automate entire environments, regardless of size.&lt;/p&gt;
&lt;h4&gt;Get Started With Our Lowest Entry-Level Cost Ever&lt;/h4&gt;
&lt;p&gt;We &lt;a href="https://blog.engineyard.com/2013/announcing-lower-pricing"&gt;recently announced&lt;/a&gt; several big price reductions including a new entry level price that gives you a dedicated EC2 small instance for $0.05 per hour. That's an average of $36.50 per month — almost 50 percent less than the original price! This means you can immediately start using Engine Yard Cloud to deploy your PHP applications at an entry level cost so low, it's less than the cost of a basic application on Orchestra.&lt;/p&gt;
&lt;p&gt;What’s more, if you haven't already made use of the free trial, you can login to Engine Yard Cloud with your existing login and claim your free 500 hours to get started!&lt;/p&gt;
&lt;p&gt;Want to try it out? Head over to our &lt;a href="https://support.cloud.engineyard.com/entries/23505431-Use-PHP-with-Engine-Yard-Cloud"&gt;documentation&lt;/a&gt; and give things a whirl.&lt;/p&gt;
&lt;h4&gt;What Does This Mean for Orchestra Customers?&lt;/h4&gt;
&lt;p&gt;We plan to retire Orchestra later this year, as we have already communicated to our Orchestra customers. In fact, we are already working with some customers to help them migrate to Cloud. And if you haven't already migrated, there are several reasons why you might want to try PHP on Engine Yard Cloud right away.&lt;/p&gt;
&lt;p&gt;Some of the benefits of PHP on Engine Yard Cloud:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Choose the dedicated instance sizes you need&lt;/li&gt;
&lt;li&gt;Run your database in your environment. No more third party providers required!&lt;/li&gt;
&lt;li&gt;More control over your deployments&lt;/li&gt;
&lt;li&gt;SSH access. Logs. Debugging.&lt;/li&gt;
&lt;li&gt;Automated backups and snapshots of your environment&lt;/li&gt;
&lt;li&gt;Stop and start environments&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you haven't migrated yet, and you can&lt;a href="https://support.cloud.engineyard.com/tickets/new"&gt; open a support ticket&lt;/a&gt; and we will work with you on the migration. Or you can read more about our plans in &lt;a href="https://support.cloud.engineyard.com/entries/23392331-Unifying-Orchestra-PHP-Cloud-and-Engine-Yard-Cloud-FAQs"&gt;the unification FAQ&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Thanks&lt;/h4&gt;
&lt;p&gt;We know we couldn’t have gotten this far without the support from this community, so we’d like to say a big “THANK YOU” to everyone involved. The whole Orchestra team is now working on Engine Yard Cloud. And we hope you’re as excited as we are about the expanded PHP service with more deployment choices, increased flexibility, better management, and — as always — the industry’s best support included.&lt;/p&gt;
&lt;p&gt;Please note: GA features will go live at 1 pm PST today.
&lt;p&gt;&lt;a href="http://www.engineyard.com/blog"&gt;&lt;img height="98" width="61" title="logo-engineyard" alt="" class="attachment-post-thumbnail wp-post-image" src="http://www.engineyard.com/blog/wp-content/uploads/logo-engineyard.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/engineyard/~4/H8cjhUxGwU4" height="1" width="1"/&gt;</description>
		<wfw:commentRss>https://blog.engineyard.com/2013/announcing-php-on-engine-yard-cloud/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>https://blog.engineyard.com/2013/announcing-php-on-engine-yard-cloud</feedburner:origLink></item>
		<item>
		<title>Mobile Application Privacy:  10 Tips to Protect Your Brand, Reputation and Customer Data</title>
		<link>http://feedproxy.google.com/~r/engineyard/~3/DvXLS1bC-fw/mobile-application-privacy</link>
		<comments>https://blog.engineyard.com/2013/mobile-application-privacy#comments</comments>
		<pubDate>Mon, 13 May 2013 16:23:27 +0000</pubDate>
		<dc:creator>Himanshu Dwivedi</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tips & Tricks]]></category>

		<guid isPermaLink="false">https://blog.engineyard.com/?p=14313</guid>
		<description>&lt;p dir="ltr"&gt;&lt;strong&gt;Note&lt;/strong&gt;: Engine Yard friend Himanshu Dwivedi, CEO/Founder, &lt;a href="http://datatheorem.com/"&gt;Data Theorem&lt;/a&gt; has graciously let us post this great piece about mobile security on our blog.&lt;/p&gt;
&lt;p dir="ltr"&gt;Mobile privacy is one of those hot topics lately. Every week there seems to be another article about a mobile app or platform having a privacy issue. Indeed, Path was recently hit with a $800,000 fine by the FTC for breaches in privacy. The focus on privacy extends across application platforms to even BlackBerry which have been well regarded for their security measures. The tricky part of providing privacy for your customers on your mobile application is that there are many kinds of data stored as well as places this data can be stored.  Here are the top 10 tips to ensure privacy for your customers as you develop your mobile application.&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;Please Don't:&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;1) Use UDID and equivalents&lt;/p&gt;
&lt;p dir="ltr"&gt;This feature has been deprecated in iOS 6.0 but still largely pulled. This is an advertiser's dream but it tracks without the users knowledge which raises concerns with privacy advocates.&lt;/p&gt;
&lt;p dir="ltr"&gt;Recommendation: Generate an app-specific random session ID that can't be cross-linked by other applications.&lt;/p&gt;
&lt;p dir="ltr"&gt;2) Be careless with geo-location&lt;/p&gt;
&lt;p dir="ltr"&gt;Treat geo-location tags and data as sensitive. This means that you don't want to send information over the network in clear-text. Another thing to watch for is storing this information client side where there's a cross-link with identifiers, making it vulnerable to hackers.&lt;/p&gt;
&lt;p dir="ltr"&gt;Recommendation: If you're going to use geo-location, be sure to store it server side but remove it from these systems over time. Long-term storage can imply that you are tracking your customers over a long period of time including where they have been which is a big no-no from a privacy perspective.&lt;/p&gt;
&lt;p dir="ltr"&gt;3) Do not access contact lists without permission&lt;/p&gt;
&lt;p dir="ltr"&gt;While Contact lists are a great way to get more users, especially with a "cold start" applications, unfortunately privacy advocates don't like it. The case of Path demonstrates that storing contact list server side and cross-linking is a bad idea and one that may get you slapped with a  fine.&lt;/p&gt;
&lt;p dir="ltr"&gt;Recommendation: Accessing contact list is one thing but strong server-side is a a big no-no. Do not access a user’s contact list without permission, even if it means for a better user experience.&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;Watch Out for…&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;4) The Copy/Paste function&lt;/p&gt;
&lt;p dir="ltr"&gt;In iOS you want to be aware of the UI paste board as information stored in the clipboard (aka UI Pasteboard) is accessible to all other applications on the device. This is important because applications have been written specifically to monitor the clipboard.&lt;/p&gt;
&lt;p dir="ltr"&gt;Recommendation: Even though it's a UX trade-off, disable the UI Pasteboard especially for sensitive fields: username. passwords, phone numbers, addresses.&lt;/p&gt;
&lt;p dir="ltr"&gt;5) Cache.db&lt;/p&gt;
&lt;p dir="ltr"&gt;The cache.db file was introduced between iOS 4.x and 5. The information stored on cache. db database file is not encrypted and accessible to anyone who has access to the device. There isn't a great deal of documentation on this so often developers don't realize what information the cache.db is collected.&lt;/p&gt;
&lt;p dir="ltr"&gt;Recommendation:Turn off caching using NSURLCache settings.&lt;/p&gt;
&lt;p dir="ltr"&gt;6) Auto-Correct&lt;/p&gt;
&lt;p dir="ltr"&gt;The iOS caches each non-numeric keyboard tap of the user for the auto-correction feature to work, which cannot be disabled by any application. Since almost every non-numeric  is stored, it's important to disable auto-complete for confidential fields such as address, mother's maiden name, city of birth, etc.&lt;/p&gt;
&lt;p dir="ltr"&gt;Recommendation: Set atuocorrectionType prperty to UITExtAutocorrection NO.&lt;/p&gt;
&lt;p dir="ltr"&gt;7) Backgrounded Screen&lt;/p&gt;
&lt;p dir="ltr"&gt;A backgrounded screen is when a screenshot is taken with a state change, such as an incoming call. All applications on the device have access to the screen shot which may include confidential data. Luckily this is an easy fix.&lt;/p&gt;
&lt;p dir="ltr"&gt;Recommendations: Detect state decision of the application specially applicationDidEnterBackground. When the app is backgrounded, enable a splash screenshot that consists only of nonsensitive data such as the organization's logo.&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;Remember&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;8) Keychain&lt;/p&gt;
&lt;p dir="ltr"&gt;There are keychain dumper tools to dump everything out of the keychain. If you want data that is secure at all costs you shouldn't put it in the keychain.&lt;/p&gt;
&lt;p dir="ltr"&gt;Recommendation: Many items in the KeyChain are accessible, but just not of the box.&lt;/p&gt;
&lt;p dir="ltr"&gt;9) Encryption&lt;/p&gt;
&lt;p dir="ltr"&gt;If the key to decrypt data is stored client side on the device, it only slows attackers with physical but does not protect the data 100%. For offline mode, decryption keys are often stored on the device itself.&lt;/p&gt;
&lt;p dir="ltr"&gt;Recommendation: To truly encrypt data, ensure the decryption key (private key) is stored server side only&lt;/p&gt;
&lt;p dir="ltr"&gt;10) SD Cards&lt;/p&gt;
&lt;p dir="ltr"&gt;External storage (e.g. SD cards) have no file permission protection which means the data is accessible to all applications (copy, tamper, etc).&lt;/p&gt;
&lt;p&gt;Recommendation: Do not store any private/confidential data on external SD cards. If data needs to be shared between device apps, store the data server-side  and allow access to the storage using client-side authentication/authorization tokens. Be aware that the Sandbox model does not apply on the SD card either the Android or Windows phone.&lt;/p&gt;
&lt;p&gt;With these tips, your application will definitely be up-to-date with the latest in mobile security and privacy.&lt;/p&gt;
&lt;p&gt;With the widespread adoption of mobile applications, ensuring the security and privacy of your application and customer data is paramount. By applying these tips, you will help ensure your application is up-to-date with the latest in mobile security and privacy.
&lt;p&gt;&lt;a href="http://www.engineyard.com/blog"&gt;&lt;img height="98" width="61" title="logo-engineyard" alt="" class="attachment-post-thumbnail wp-post-image" src="http://www.engineyard.com/blog/wp-content/uploads/logo-engineyard.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/engineyard/~4/DvXLS1bC-fw" height="1" width="1"/&gt;</description>
		<wfw:commentRss>https://blog.engineyard.com/2013/mobile-application-privacy/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>https://blog.engineyard.com/2013/mobile-application-privacy</feedburner:origLink></item>
		<item>
		<title>May 10, 2013: This Week at Engine Yard</title>
		<link>http://feedproxy.google.com/~r/engineyard/~3/TuNBP2i758c/this-week-may-10</link>
		<comments>https://blog.engineyard.com/2013/this-week-may-10#comments</comments>
		<pubDate>Sat, 11 May 2013 00:53:09 +0000</pubDate>
		<dc:creator>Tasha Drew</dc:creator>
				<category><![CDATA[This week at Engine Yard]]></category>

		<guid isPermaLink="false">https://blog.engineyard.com/?p=14306</guid>
		<description>&lt;p&gt;I’m heading to Ricon East with our lead data engineer, &lt;a href="https://www.google.com/url?q=https%3A%2F%2Ftwitter.com%2Frandommood&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNERfgv2H9rei7bTIgSfyj3ujdub_A"&gt;Ines&lt;/a&gt;, and dapper platform engineers &lt;a href="https://www.google.com/url?q=https%3A%2F%2Ftwitter.com%2FLaneJoshLane&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEOZTcyYSpD9y3lVT6_8Ygj2kzp8A"&gt;Josh&lt;/a&gt; and &lt;a href="https://www.google.com/url?q=https%3A%2F%2Ftwitter.com%2Fthommahoney&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEpd4IOtc52x56mypO5N8QRvZ5L2w"&gt;Thom&lt;/a&gt;! Come say hi!&lt;/p&gt;
&lt;p&gt;For our php friends, my counterpart, &lt;a href="https://www.google.com/url?q=https%3A%2F%2Ftwitter.com%2Fjoshbhamilton&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNE-WsRzN4D7xfLvAGud-q5V56wUAg"&gt;Josh Hamilton&lt;/a&gt;, will be at php[tek] with &lt;a href="https://www.google.com/url?q=https%3A%2F%2Ftwitter.com%2Fdshafik&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFIgvPlFp2FIwp4qH6qA6nXjPGrWQ"&gt;Davey&lt;/a&gt; and &lt;a href="https://www.google.com/url?q=https%3A%2F%2Ftwitter.com%2Faspleenic&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNHh0IAjbe3l4U3P65Q8vdjJew59pw"&gt;PJ&lt;/a&gt;, who would also enjoy a friendly “wassup!”&lt;/p&gt;
&lt;p&gt;--&lt;a href="https://www.google.com/url?q=https%3A%2F%2Ftwitter.com%2FTashaDrew&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNHd4VI-ACBQYFxO7c6HgG7wYqOL-w"&gt;Tasha Drew&lt;/a&gt;, Product Manager&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Engineering Updates&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Application &lt;a href="https://www.google.com/url?q=https%3A%2F%2Fsupport.cloud.engineyard.com%2Fentries%2F23720758-Use-Application-Takeover-Preference-on-Engine-Yard-Cloud&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNECug4uMVZi9YQufd8cuhfFwQJuog"&gt;takeover preferences&lt;/a&gt; are now in Early Access. For customers who need a non-standard application takeover scenario, you can now select between boot-options, or disable entirely within the UI.&lt;/p&gt;
&lt;p&gt;We have made great progress towards availability of provisioned IOPs on volumes for legacy instances (Riak clusters have had this feature for a while).  We are making the feature available to customers in Limited Access this week. We do have some more work to do  on improving the UX and providing documentation before making it more widely available -- please open a ticket with support if you are interested in checking it out before its Early Access release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Data Data Data&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We continue to enhance the behavior of new Clusters. Rolling backups will be the way to permanently archive data stored in a Riak cluster.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="https://lh4.googleusercontent.com/AUgP2vqFXFHTnsAsd2_cb_9NxL8NMSLm1aUBut-bOULsvjxZCm5zI9Rk7unk_ob7hrNqjuMU21PT-HwSYCpIb3rFHHamny1thAjyPVRxguu5f1yLdjV4Ueo1sw=s320" width="624" height="334" /&gt;&lt;/p&gt;
&lt;p&gt;Rolling backups extract data one node at a time while your cluster continues to server requests. You will be able to manage the extracted backup files from the UI and even see which nodes they came from!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Social Calendar (Come say hi!)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Monday May 13 - Tuesday May 14th: Engine Yard is sponsoring the lightning talks at &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fricon.io%2Feast.html&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFI4fq_CxjTCmpjejBSvK9Wnj2NYg"&gt;Ricon East 2013&lt;/a&gt;! We will also have a bunch of people in attendance. Come say hi!&lt;/p&gt;
&lt;p&gt;Tuesday May 14th - Friday May 17th:&lt;a href="http://www.google.com/url?q=http%3A%2F%2Ftek.phparch.com%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFfAOOrjuUJ8dIpl8rhi9AhcKUhGg"&gt; php[tek]!!!&lt;/a&gt; Davey Shafik will be giving a talk, and we will have a product manager and engineers on hand to join in the festivities.&lt;/p&gt;
&lt;p&gt;Tuesday May 14th, San Francisco Office:&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fwww.meetup.com%2FProductLovers%2Fevents%2F112682302%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEgvO1af7E3MQeq8gffLMO3_SZ1cg"&gt;Product Lover’s:&lt;/a&gt; PM Fast-Track: What do Product Managers really do?&lt;/p&gt;
&lt;p&gt;Tuesday May 14th, Buffalo Office: &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fwww.meetup.com%2FWestern-New-York-Ruby%2Fevents%2F115932912%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEFqVCBuENgYpg5XZKTifzmHDzeaQ"&gt;WNY Ruby:&lt;/a&gt; May we all enjoy our Rubies!&lt;/p&gt;
&lt;p&gt;Tuesday May 14th, Dublin, Ireland Office:&lt;a href="https://www.google.com/url?q=https%3A%2F%2Ftito.io%2Fcrafthouse%2F003&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFU773Cwp2YETBmzFZvXo7b7zXJUA"&gt;Crafthouse #003&lt;/a&gt;&lt;a href="https://www.google.com/url?q=https%3A%2F%2Ftito.io%2Fcrafthouse%2F003&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFU773Cwp2YETBmzFZvXo7b7zXJUA"&gt;:&lt;/a&gt; looking at the various ways in which we learn web design and investigate ways to improve upon them.&lt;/p&gt;
&lt;p&gt;Wednesday May 15th, PDX Office: &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcalagator.org%2Fevents%2F1250464193&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFPiKBaRqxpbP_2GzegYtkt1DzvPg"&gt;Coder Dojo PDX&lt;/a&gt;, K-12 Coder Night&lt;/p&gt;
&lt;p&gt;Wednesday May 15th, Buffalo Office: &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fwww.meetup.com%2FGirl-Develop-It-Buffalo%2Fevents%2F115082552%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGiez0TFTOPTGOtHK9Fq42GDSUAtA"&gt;Girl Develop It&lt;/a&gt; Meetup: Code &amp;amp; Coffee Night!&lt;/p&gt;
&lt;p&gt;Thursday May 16th, Buffalo Office: &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fwww.meetup.com%2Fbuffalolab%2Fevents%2F115647522%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGoqrqVCqf2wGkRxXnIxEEo5wEKiw"&gt;Database Seminar&lt;/a&gt;, May is for MongoDB&lt;/p&gt;
&lt;p&gt;Thursday May 16th - Friday May 17th:&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fnodepdx.org%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNH2k_KuGBlJlWJsFW9mYdHeNLwwCQ"&gt;NodePDX&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thursday May 16th: Dublin, Ireland Office:&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fuxpaireland.org%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNErPeY1OG31UoOk-Er7LbcJoA1s2g"&gt;UXPA Ireland&lt;/a&gt;: My favorite UX tool!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Articles of Interest&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Did you miss Chef Conf? Check out all the videos here! &lt;a href="http://www.youtube.com/playlist?list=PLrmstJpucjzXNMLcI5X-EjirpDd-SITd3"&gt;http://www.youtube.com/playlist?list=PLrmstJpucjzXNMLcI5X-EjirpDd-SITd3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The East Coast of the USA is about to overrun with&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fm.apnews.com%2Fap%2Fdb_289563%2Fcontentdetail.htm%3Fcontentguid%3DNEF4JyUZ&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNHB3PCerPkznKuDOHCzbq6n8Xfpjw"&gt; billions of cicadas&lt;/a&gt;. Humans will be outnumbered approximately 600:1.&lt;/p&gt;
&lt;p&gt;Davey Shafik does a dive into &lt;a href="https://www.google.com/url?q=https%3A%2F%2Fblog.engineyard.com%2F2013%2Fauthentication-social&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNGhoKxH7umT5nwQMsYo7Y4HLAlulA"&gt;authentication choices&lt;/a&gt; he investigated as he built out the &lt;a href="https://www.google.com/url?q=https%3A%2F%2Fdistill.engineyard.com%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFh8RDAsTUu4-MOHdL9TsTWg_R6rg"&gt;Distill website.&lt;/a&gt;
&lt;p&gt;&lt;a href="http://www.engineyard.com/blog"&gt;&lt;img height="98" width="61" title="logo-engineyard" alt="" class="attachment-post-thumbnail wp-post-image" src="http://www.engineyard.com/blog/wp-content/uploads/logo-engineyard.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/engineyard/~4/TuNBP2i758c" height="1" width="1"/&gt;</description>
		<wfw:commentRss>https://blog.engineyard.com/2013/this-week-may-10/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>https://blog.engineyard.com/2013/this-week-may-10</feedburner:origLink></item>
		<item>
		<title>Authentication: Not necessarily a social activity</title>
		<link>http://feedproxy.google.com/~r/engineyard/~3/XxEolP7gAzM/authentication-social</link>
		<comments>https://blog.engineyard.com/2013/authentication-social#comments</comments>
		<pubDate>Thu, 09 May 2013 20:18:58 +0000</pubDate>
		<dc:creator>Davey Shafik</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">https://blog.engineyard.com/?p=14297</guid>
		<description>&lt;p&gt;For &lt;a href="distill.engineyard.com"&gt;Distill&lt;/a&gt;, Engine Yard's developer conference, we chose to use social authentication to reduce the barrier to entry for our call for papers. We supported Twitter, Facebook and Github.&lt;/p&gt;
&lt;p&gt;While developing the site, my concern was that the registration flow be simple, and that it actually work. Once we launched the site, I realized that I had trouble remembering which provider I had signed up with.&lt;/p&gt;
&lt;p&gt;Maybe that's just me (I am terribly forgetful!), but I imagine at least a few other people had this issue. Sure, on the backend we can link multiple accounts, but that means users went through the registration process multiple times. This is not optimal.&lt;/p&gt;
&lt;p&gt;For those interested in the numbers, here is how the providers stacked up:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;Github: 59%&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;Twitter: 38%&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;Facebook: 3%&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why did we make this choice? Probably the same reason everyone else does:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Users don't want, or need another fricken login to remember, just use Facebook/Twitter/Google+/LinkedIn/Github/Yahoo!/...&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is the primary argument for using social auth. And lets be honest, who wants to be in charge of Yet Another Login System?&lt;/p&gt;
&lt;p&gt;But is social auth the best option? Lets explore that.&lt;/p&gt;
&lt;p&gt;In favor of social auth for our users, we have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;One less password to remember&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;Possible to revoke access&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;Automagic integration with my online social presence (that I can control… if I know how!)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;Users are often always logged into their social sites, so they don't even see a login screen — a few redirects and it can be avoided entirely.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In favor of our bespoke system... it's the same thing we've been doing for years.&lt;/p&gt;
&lt;h2&gt;What does Social Auth mean to our users?&lt;/h2&gt;
&lt;p&gt;Let's break down what all of these things really mean.&lt;/p&gt;
&lt;h3&gt;One Less Password&lt;/h3&gt;
&lt;p&gt;Is this a good thing? Just like using the same password for everything, using the same social account for everything is not necessarily a good thing.&lt;/p&gt;
&lt;p&gt;Sure, we can use an 80 character, expanded charset password on that social account, but "guessing" your username and password isn't necessarily the only way in. Server security breaches, man-in-the-middle attacks (negated by proper application of SSL), fishing or social attacks are still out there! Just like with a bespoke system.&lt;/p&gt;
&lt;p&gt;I personally use 1Password as a tool to maintain a list of the literally hundreds of accounts I have, and their respective login credentials. I generate a random password for every site I sign up for, and never even think about remembering it.&lt;/p&gt;
&lt;p&gt;I have my password database stored in Dropbox (which, yes, means I'm trusting Dropbox's security) so it's available on all my devices, and it can even function standalone with a built-in web interface!&lt;/p&gt;
&lt;p&gt;There are plenty of other free tools even that will allow you to do the same thing (e.g. &lt;a href="http://keepass.info/"&gt;KeePass Password Safe&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For me&lt;/strong&gt; the one-less-password argument holds little water.&lt;/p&gt;
&lt;h3&gt;Possible to revoke access&lt;/h3&gt;
&lt;p&gt;This one is an argument I rarely hear, but is quite important. &lt;strong&gt;Most&lt;/strong&gt; websites (though it's changing, as people get on the free-data bandwagon) do not allow you to delete your account. And there's a good reason for this: Your data is valuable to the website, even if you're not using it! (Remember: if something is free, you [and your data] are what brings value to the business.)&lt;/p&gt;
&lt;p&gt;With social auth, you can not only revoke permissions entirely (denying access to your social data that they haven't yet collected), you can revoke permissions partially (assuming the social site implements that).&lt;/p&gt;
&lt;p&gt;I think this is quite important.&lt;/p&gt;
&lt;h3&gt;Automatic Integration with Social Presence&lt;/h3&gt;
&lt;p&gt;Social integration is arguable the main reason for even using social authentication (other than the lazy factor), and it can definitely bring value to our experience.&lt;/p&gt;
&lt;p&gt;The point of being social, is sharing things with people, and &lt;strong&gt;good&lt;/strong&gt; online experiences are things we want to share. Making that quick and easy is beneficial to both the user, and the business — it's word of mouth advertising, and is priceless.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;However&lt;/strong&gt;, a lot of users don't want to be social. Either with your site in particular ("I don't know this site, why would I want it to see my stuff?") or in general ("I'm a grumpy curmudgeon" or "I don't want the government to spy on me!").&lt;/p&gt;
&lt;p&gt;The general answer to this problem, is to make social auth optional. Users can sign up for a bespoke account, or signup via social auth. Or Both.&lt;/p&gt;
&lt;p&gt;Unfortunately, I find that when multiple signup options are available — be that bespoke + one social auth, bespoke + multiple social auths, or just multiple social auths — I forget which one I've used. Did I sign in with Github? Or did I create a new account?&lt;/p&gt;
&lt;p&gt;1Password does help me in some regard here, because it would have my bespoke credentials available, but with multiple social auth options? It's no help.&lt;/p&gt;
&lt;h3&gt;Automatic Login&lt;/h3&gt;
&lt;p&gt;Automatic login is arguably a good thing — it can allow anyone with access to the computer to not only access the social platform (because you're already logged in), but who knows what else.&lt;/p&gt;
&lt;p&gt;Think about the people who leave their Facebook logged in at the Apple Store, apparently nobody has yet realized you can look at the list of Apps they have authenticated with and then can simply visit that site and choose to login with Facebook. Suddenly you now have access to their Pandora, Instagram, Klout, and 100 other apps you've authorized!&lt;/p&gt;
&lt;p&gt;Now, it is possible as a developer to require login, at least with Facebook auth — but we usually want it to be easy for our users and don't bother with it!&lt;/p&gt;
&lt;h2&gt;What about a middle ground?&lt;/h2&gt;
&lt;p&gt;Is there a middle ground? We've already discussed the pitfalls of providing bespoke + social auth(s), so what else can we do?&lt;/p&gt;
&lt;p&gt;I think the best middle ground, is to provide bespoke authentication, and then behind that, allow for social connection expressly for the purpose of being social. That is, make it optional.&lt;/p&gt;
&lt;p&gt;We can get some of the benefits of social authentication, by allowing users who have connected their social accounts to use them for password resets, rather than email. Simply ask them to re-verify their social account and once they have, you can direct them straight to the password reset form — no emails getting lost, no tokens, simple.&lt;/p&gt;
&lt;p&gt;One final option, is that you can use social authentication &lt;strong&gt;without&lt;/strong&gt; getting access to more than the users basic information — especially, you can do it without requesting write permissions. Then, later, you can ask for write permissions should the user wish to utilize that aspect of your site.&lt;/p&gt;
&lt;h2&gt;Being Socially Responsible — A Social Contract&lt;/h2&gt;
&lt;p&gt;I have, over the course of thinking about these things, decided how I'm going to interact with my users socially.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;Social integration is always &lt;strong&gt;optional&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&lt;strong&gt;Permissions are granted only as-needed&lt;/strong&gt;. Ask for the minimum permissions to do the requested action, and no more. When more permissions are needed, ask again.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&lt;strong&gt;Always give the user the final say&lt;/strong&gt; on what gets posted — I will always allow my users to edit the message, and never insert automated text on the end — except the URL to thing they are sharing.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: 13px; line-height: 19px;"&gt;&lt;strong&gt;Never automatically post &lt;em&gt;anything&lt;/em&gt;&lt;/strong&gt;. This is really part of the previous one, but it's better to be explicit.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is my social contract, it will be publicly posted on my site, and presented when users look at the option to connect their social accounts. I think this is the responsible way to interact with my users, and allow them to interact with folks who will hopefully become my users.&lt;/p&gt;
&lt;p&gt;What about you? What's your social contract look like?&lt;/p&gt;
&lt;div&gt;We recently announced the Distill speaker lineup and first batch ticket sales.  To learn more, visit &lt;a href="http://distill.engineyard.com/" target="_blank"&gt;distill.engineyard.com&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://www.engineyard.com/blog"&gt;&lt;img height="98" width="61" title="logo-engineyard" alt="" class="attachment-post-thumbnail wp-post-image" src="http://www.engineyard.com/blog/wp-content/uploads/logo-engineyard.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/engineyard/~4/XxEolP7gAzM" height="1" width="1"/&gt;</description>
		<wfw:commentRss>https://blog.engineyard.com/2013/authentication-social/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>https://blog.engineyard.com/2013/authentication-social</feedburner:origLink></item>
		<item>
		<title>Identify and Resolve Issues through Proactive Log Management</title>
		<link>http://feedproxy.google.com/~r/engineyard/~3/tYNqgS2MM1o/identify-and-resolve-issues-through-proactive-log-management</link>
		<comments>https://blog.engineyard.com/2013/identify-and-resolve-issues-through-proactive-log-management#comments</comments>
		<pubDate>Tue, 07 May 2013 19:47:09 +0000</pubDate>
		<dc:creator>Mal Knox</dc:creator>
				<category><![CDATA[Partners]]></category>

		<guid isPermaLink="false">https://blog.engineyard.com/?p=14288</guid>
		<description>&lt;p dir="ltr"&gt;Proactively managing logs can be critical to identifying and resolving issues within an application environment. We're excited to announce that Logentries is now available as an Engine Yard Add-on. Engine Yard customers can &lt;a href="https://cloud.engineyard.com/addons/logentries"&gt;try it now for free&lt;/a&gt;. More &lt;a href="https://www.engineyard.com/partner/logentries"&gt;information about Logentries on Engine Yard Cloud can be found here&lt;/a&gt;.&lt;/p&gt;
&lt;p dir="ltr"&gt;Through Logentries, users can monitor logs in real-time and get an easy to understand view across their entire application logs. Logs are analysed and visualised so that you can make sense of large volumes of log data, to quickly see and resolve system warnings or errors. Logentries can also be applied from a business analytics perspective to understand how many users registered, logged in, made payments and more over particular time periods.&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
&lt;img alt="" src="https://lh4.googleusercontent.com/ZUYGgaOxn5YP-2ANKuydX18wwkVqkubH4xo5XzVm1wK9VTx4_gFO7prJmStKP9i_ag8Z9sOA0voePOGOOF9Kk6j0L8US2Qe1jJ0bW12cfEOFqG4dSrXOx5bj" width="632px;" height="280px;" /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p dir="ltr"&gt;Engine Yard Cloud customers can get started for free today, including 7 days of storage and a 1GB indexing limit.&lt;/p&gt;
&lt;p dir="ltr"&gt;Logging metrics is vital to checking the heartbeat of your business. When it comes to logging, it helps to know what you should be looking for. For a more complete explanation of the individual logs you should be concerned with when monitoring your Engine Yard setup, view our blog post &lt;a href="https://blog.engineyard.com/2012/digging-into-engine-yard-logs"&gt;Digging Into Engine Yard Logs&lt;/a&gt;.&lt;/p&gt;
&lt;p dir="ltr"&gt;If you are an Engine Yard customer, follow these steps to setup Logentries on your Engine Yard apps:&lt;/p&gt;
&lt;p dir="ltr"&gt;1. Head to &lt;a href="https://cloud.engineyard.com/addons/logentries"&gt;https://cloud.engineyard.com/addons/logentries&lt;/a&gt; (login required) or navigate to "Logentries" under “Add-ons” in Engine Yard Cloud&lt;/p&gt;
&lt;p dir="ltr"&gt;2. Click "Set it up"&lt;/p&gt;
&lt;p dir="ltr"&gt;3. Sign up and follow the instructions for updating your code and deploying&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;b id="docs-internal-guid-429904d1-8021-69a5-9d7e-e2fab7ec8049"&gt;&lt;br /&gt;
&lt;img alt="" src="https://lh5.googleusercontent.com/WcKTKeG6vctOj2gPD5jt8C82NdQ9hi785Oe2nA1voo-ruwuq90Y4Wor8fjvuR7BHWgYtWzVC9ivjdC6GTeTkVdZzGn0mOhCSK75c4o3ODx8JG3MeszVjMlhegg" width="20px;" height="8px;" /&gt;&lt;img alt="" src="https://lh5.googleusercontent.com/AKYS8vJImlzYINK0Iogso2FXVTlmXJ8LJNSfdlW1OcNVHUBsViGMFd9Spp3VC-i84XVJNB4qBH-Gv4lPIk5Ypk1cGpS59ZAwxir9uEjeJ4A1hksD07bJHvL_" width="597px;" height="413px;" /&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;And that’s it! Get ready to enjoy all the benefits that come with getting more insight into your application through proactive log management.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.engineyard.com/blog"&gt;&lt;img height="98" width="61" title="logo-engineyard" alt="" class="attachment-post-thumbnail wp-post-image" src="http://www.engineyard.com/blog/wp-content/uploads/logo-engineyard.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/engineyard/~4/tYNqgS2MM1o" height="1" width="1"/&gt;</description>
		<wfw:commentRss>https://blog.engineyard.com/2013/identify-and-resolve-issues-through-proactive-log-management/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>https://blog.engineyard.com/2013/identify-and-resolve-issues-through-proactive-log-management</feedburner:origLink></item>
		<item>
		<title>May 3, 2013: This Week at Engine Yard</title>
		<link>http://feedproxy.google.com/~r/engineyard/~3/pnYyhSPX4Oo/may-3-2013-this-week-at-engine-yard</link>
		<comments>https://blog.engineyard.com/2013/may-3-2013-this-week-at-engine-yard#comments</comments>
		<pubDate>Fri, 03 May 2013 19:29:03 +0000</pubDate>
		<dc:creator>Tasha Drew</dc:creator>
				<category><![CDATA[This week at Engine Yard]]></category>

		<guid isPermaLink="false">https://blog.engineyard.com/?p=14281</guid>
		<description>&lt;p dir="ltr"&gt;We’ve finalized some major under-the-hood upgrades at Engine Yard this week that should start showing themselves in public facing features within the next few months! In the meantime, this is what you can actively check out.&lt;/p&gt;
&lt;p dir="ltr"&gt;--&lt;a href="https://twitter.com/TashaDrew"&gt;Tasha Drew&lt;/a&gt;, Product Manager&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;Engineering Updates&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;Improvements to ELB handling are live and in production! Updates include better error handling for a smoother integration and experience.&lt;/p&gt;
&lt;p dir="ltr"&gt;We have removed Passenger 2 as an option for customers booting new environments because it’s really old. Any customers with an environment assigned to the Passenger 2 application server stack has the feature flag enabled and will continue to see it as an option. You are also encouraged to upgrade for all the awesome benefits of Passenger 3.&lt;/p&gt;
&lt;p&gt;Engine Yard Cloud customers can now file tickets &lt;a href="https://support.cloud.engineyard.com/entries/23714576-Announcement-File-tickets-from-Engine-Yard-Cloud-Dashbaord"&gt;directly through the Cloud dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;p dir="ltr"&gt;We had a bunch of other minor bumps you can read about in our &lt;a href="https://support.cloud.engineyard.com/entries/23461962-Engine-Yard-Release-Updates-April-2013"&gt;release notes&lt;/a&gt;.&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;Data Data Data&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;a href="https://support.cloud.engineyard.com/entries/22856323-engine-yard-release-updates-january-2013/#EARiak"&gt;Riak&lt;/a&gt; has been bumped to 1.3.1 as it reaches the last few weeks of its early access phase!&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;Social Calendar (Come say hi!)&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;Tuesday, May 7th: Engine Yard’s Dublin, Ireland office will be hosting the&lt;a href="http://www.meetup.com/PostgreSQL-user-group-Ireland-ie-pug/events/112631602/"&gt; second Postgres User Group meetup&lt;/a&gt; with Greg Stark, a long-time Postgres contributor and committer as the speaker.&lt;/p&gt;
&lt;p dir="ltr"&gt;Thursday, May 9th: &lt;a href="http://coderdojopdx.com/"&gt;Coder Dojo in PDX&lt;/a&gt; continues to plan how to help teach kids and their parents about how to learn about and explore coding and software. Everyone is encouraged to grab a laptop and jump in!&lt;/p&gt;
&lt;p&gt;Thursday, May 9th: &lt;a href="http://pubstandards.ie/"&gt;Pub Standards&lt;/a&gt; in Dublin, Ireland welcomes any and all in-town developers, designers, founders, and people-who-like-to-build-stuff to stop by the Bull &amp;amp; Castle for a beer and a chat.&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;strong&gt;Articles of Interest&lt;/strong&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;a href="https://blog.engineyard.com/2013/announcing-lower-pricing"&gt;Pricing updates&lt;/a&gt; went live, and customers can expect to take advantage of reduced instance pricing on their April bill!&lt;/p&gt;
&lt;p dir="ltr"&gt;Our friends at TMX &lt;a href="https://blog.engineyard.com/2013/in-search-of-software-quality"&gt;posted a thoughtful piece,&lt;/a&gt; “In Search of Software Quality.”&lt;/p&gt;
&lt;p dir="ltr"&gt;Pacific Coast Support team lead and all around awesome guy Ralph Bankston (who sadly has no twitter handle for me to link to) has gone in-depth about &lt;a href="https://blog.engineyard.com/2013/cron-jobs"&gt;how to troubleshoot cron jobs.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.engineyard.com/blog"&gt;&lt;img height="98" width="61" title="logo-engineyard" alt="" class="attachment-post-thumbnail wp-post-image" src="http://www.engineyard.com/blog/wp-content/uploads/logo-engineyard.png"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/engineyard/~4/pnYyhSPX4Oo" height="1" width="1"/&gt;</description>
		<wfw:commentRss>https://blog.engineyard.com/2013/may-3-2013-this-week-at-engine-yard/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>https://blog.engineyard.com/2013/may-3-2013-this-week-at-engine-yard</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 1.309 seconds. --><!-- Cached page generated by WP-Super-Cache on 2013-05-23 08:18:07 -->
