Pivotal Labs

Main menu

Skip to primary content
Skip to secondary content
  • About
  • Case Studies
  • Team
    • Executives
    • Locations
      • San Francisco (HQ)
      • Boston
      • Boulder
      • Denver
      • London
      • Los Angeles
      • New York
  • Community
    • Blogs
    • Tech Talks
    • Events
  • Careers
    • Lifestyle
    • Principles & Practices
    • Benefits
    • FAQ
    • Apply
  • Contact
    • Press Room
    • Press Releases
    • In The News
    • Press Kit
  • All
  • Labs
  • Standup
  • Tracker

Monthly Archives: September 2012

Tonya Podkuiko

Live Streaming without a YouTube Partner Account

Tonya Podkuiko
Monday, September 10, 2012

The need to live stream across multiple platforms is becoming a necessity with everyone having different preferences of web tools. At our company we are trying to reach as many people as possible for Tech Talks (short half hour sessions focused on a particular topic). In order to broaden our audience we decided we wanted to use YouTube without the burden of becoming a YouTube Partner.

The way to do this is to use Google+ Hangouts to stream live directly to YouTube. Below are the Google+ Hangouts and YouTube steps to stream live.

Prerequisites

You must have a Google Plus and YouTube account. Both are free.

Procedure

Perform the YouTube settings before moving to Google+ Hangouts.

YouTube

  1. Go to YouTube

  2. Make sure you are logged in to your account and click on My channel on the left nav bar next to your profile icon.

  3. Click the Channel Settings button at the top above your name and profile icon.

  4. Choose the Tabs tab at the top of the grey box, then choose the Featured tab along the left side. In the center you will see five different layout choices, click Live Broadcaster. When you have made your choice of layout click Done Editing at the top in the blue section of the page.

Before your broadcast begins (in the countdown stage) your YouTube page will have a black video with the words Hangouts on it. Once you go live your video will show up.

Google+ Hangouts

  1. Go to Google Hangouts

  2. Click the red Start A Hangout button

  3. Enter the name of your Hangout and check Enable Hangouts On Air (you can also add specific people, or circles from Google+ or by email). Click the blue Hangout button.

  4. A box will pop up letting you know that it will show up on your Google+ stream and on your YouTube channel. Click Okay, got it if you wan to stream on your YouTube channel.

    • If this is your first time using Google+ Hangouts and YouTube, you will be asked by YouTube Gadget for permission to use Google+ Hangouts. Click “Allow access”)
  5. Your webcam will show up in Google+ Hangouts, here you choose the tab YouTube and you will get a box with some things to remember. Click OK.

  6. If you wish to send someone the YouTube link or post it on other social media sites you will need to click on the Embed link and you will get the URL. You can also copy the HTML and embed it into a webpage or blog. You should do this before you start your broadcast, but you can certainly do it at any time during the broadcast.

  7. Next, make sure you are still on the YouTube tab and click the red Start broadcast button.

  8. Before your broadcast can begin a box will pop up alerting you that you will be broadcasting publicly. Click OK.

  9. Once you click the OK button on the ‘Broadcast Publicly’ pop-up you will see the red button say Posting in and start to count down from 10. It will post to YouTube and Google+ Stream once the countdown is over. If you want to make sure everything is broadcasting correctly you should go to your YouTube channel.

  10. When you are ready to end your broadcast you click the End broadcast button and a message will pop up stating your broadcast has been successfully terminated.

NOTE: Once you have ended your broadcast the video will automatically upload to YouTube and be available on your channel. If you do not want it to stay on your channel you
MUST go in and delete it.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Danny Gagne

[Standup][NY] 9/10/12: Debugging CoffeeScript in Chrome

Danny Gagne
Monday, September 10, 2012

Interestings

Debugging CoffeeScript in Chrome

When you go to “Sources” in web inspector for a web page that includes test.js it will now show your CoffeeScript source files where you can set break points, hover variables to see their values, etc.

http://ryanflorence.com/2012/coffeescript-source-maps/

Events

  • Monday: CTO School
  • Tuesday: NYC.rb Presentation Night http://www.meetup.com/NYC-rb/
  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Bleicke Petersen

09/10/12: "We need it to work differently"

Bleicke Petersen
Monday, September 10, 2012

Helps

  • SQLite gem on Heroku

Don’t even try, or any other ideas?

  • Caching individual files on nginx

Seems you can only set one regex to match cached files, not individual files.

Events

  • SF DevOps Meetup – Thursday 9/13

OpenStack, DevOps Experience Report and a little Bash TDD

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Austin Vance

[Standup][Boulder] 9/10/2012: Net::Http left me hangin’

Austin Vance
Monday, September 10, 2012

Interesting

  • If you would like to return a value from an ensure block you must explicitly return it

  • Net::Http#request does not leave a tcp connection open unless one is already started before calling request.

  • To make a BigInt in with a migration (at least with postgres) use limit: 8, anything higher will be ignored and a regular Int will be created

  • To make a BigInt in with a migration (at least with postgres) use limit: 8, anything higher will be ignored and a regular Int will be created

Events

  • Boulder Ruby Group @ Pivotal Boulder: tomorrow 7pm
  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Matthew Parker

Open Source Roundup: Rails, Rubygems.org, and LicenseFinder

Matthew Parker
Friday, September 7, 2012

Having just come off a project, Ian Lesperance and I spent the week working on some open source initiatives. We also spent the week showing new pivot David Edwards the ropes.

We started the week with a feature request to rails for customized STI (Single Table Inheritance) type serialization. On the project we just finished, we needed to model a legacy database that serialized integers instead of class names for the STI type, and unfortunately we found that Rails had no real API for overriding the type serialization, so we added the following:

class Foo < ActiveRecord::Base
  self.inheritance_serializer = ->(klass) do
    # Map the class to the appropriate type identifier.
    # Defaults to `klass.name`.
  end

  self.inheritance_deserializer = ->(type_before_cast) do
    # Map the type identifier back into the appropriate class.
    # Defaults (approximately) to `type_before_cast.constantize`.
  end
end

Ian also contributed a bug fix to ActiveRecord, fixing the pluck method when the column name plucked is a reserved word.

We then continued with a pull request to rubygems.org for adding license information to gem version pages and version api requests. In our line of work, we have to keep a vigilant eye on the software licenses of our dependencies; adding more exposure of licenses can’t hurt.

This segued nicely into some much needed work on LicenseFinder, an open source project Pivotal Labs created and maintains to automate the process of keeping track of your project’s license dependencies. We’ve added detection for two more license types (”LGPL” and “ISC”), added proper integration tests to the project, put the project on Travis-CI, and refactored some of the code along the way. In the future, we’d like to create a proper command line interface for license_finder so that you can use it without rake.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Ross Hale

[Standup][SF] 09/07/12: The Clap Keeps Coming Back

Ross Hale
Friday, September 7, 2012

Interestings

  • Ruby Gotcha: Extending non-existent class displays confusing error message

class Foo < DontExist
end

describe Foo
it “works” do
Foo.new
end
end

this raises:

uninitialized constant Foo (NameError)

very confusing to say the least. I would have expected the NameError to show that DontExist didn’t exist.

–Glenn

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Paul Meskers

09/07/12: Comedy Hackfest

Paul Meskers
Friday, September 7, 2012

Interestings

  • Open Shift now supports Rails 3.2, Sinatra, MRI 1.9.3, MySQL, Postgres, and MongoDB

They even have a wizard for bootstrapping a Rails application.

https://openshift.redhat.com/community/developers/get-started

Or signup/login here to try out the wizard: https://openshift.redhat.com/app/login?redirectUrl=%2Fapp%2Fconsole

Events

  • Saturday: Comedy Hackfest

All weekend.

partner comedians and developers together to see who can come up with funny apps.

http://comedyhackday.eventbrite.com/?access=4thelulz

  • Sunday: Comedy Hackfest

All weekend.

partner comedians and developers together to see who can come up with funny apps.

http://comedyhackday.eventbrite.com/?access=4thelulz

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Dan Podsedly

Tracker now on CloudFront

Dan Podsedly
Thursday, September 6, 2012

For the 3rd time this week, we experienced more CDN issues this morning, causing images and CSS to not load properly for users in places like Toronto, New York, and others. We did everything we could to get our CDN provider to resolve the issue, but at the same began investigating other options.

Based on positive feedback, and it’s simplicity, we chose Amazon’s CloudFront. We got it configured, pointing at our static assets, and by around 11am Pacific had Tracker up and running on it. So far, everything seems smooth, and we’ve seen no complaints.

We’ll keep a close eye on things, but at this point we’re calling this issue resolved. If you were affected by it, please accept our apology, and don’t hesitate to get in touch if you have any questions or see any other issues.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Austin Vance

[Standup][Boulder] 09/06/2012: If nothings going on call me.

Austin Vance
Thursday, September 6, 2012

Interesting

  • action_dispatch.show_exceptions = true will show exceptions in test.log for server exceptions with capybara.

  • Don’t stub object under test… it is normally bad.

  • Enumerable#Detect will take a proc/lambda and call it if nothing is found. The same is true for Enumerable#find.

Events

  • Ruby group meet up next Tuesday.
  • 0 Shares
  • Share on Facebook
  • Share on Twitter
John Barker

The Healthy Gemfile

John Barker
Thursday, September 6, 2012

Often when working on ruby projects that use Bundler, I see Gemfiles that look like this:

gem 'rails',          '3.0.15'
gem 'rest-client',    '1.3.0'
gem 'subexec',        '0.0.4'
gem 'uuidtools',      '2.1.1'

The string on the right hand side of each gem specification is a fixed version specification. If you ask bundler to update any of these gems, it will make a bit of noise but those gems listed will essentially stay the same.

The typical reason for structure a Gemfile like this is to prevent changes in dependent software from causing compatibility issues or to reduce the chance of bugs or unexpected behaviour.

This strategy is problematic for several reasons: it keeps your project stale, makes it difficult to maintain overall project security and worse yet, can provide a false sense of security. There is a much better and simpler way of writing a Gemfile that will preserve the health and consistency of your dependencies.

Problems with this approach

The first and most obvious problem is that your application will quickly become out of date. The Ruby community moves very quickly and introduces changes quite frequently which means that if you freeze your gems, you may find it very difficult to upgrade later. This problem can be compounded when a security patch is made and the version of the gem you’re using is no longer supported.

A more subtle problem is that the gems listed in your Gemfile have dependencies, and those dependencies may not necessarily be required with as strict a version specification. If you do a bundle update, some of those dependencies could change and break your application.

If you’re the more conservative type, and you’re developing an application that might be in use for some time, you may also be aware that the gems you depend on might not be available forever. They could be removed from the repository, or even altered in a way that breaks your app. If this concerns you there is a much better solution.

A better way of managing your gems

Use Gemfile.lock to document required versions

The true manifest of gem versions is the file Gemfile.lock which is updated by bundler any time your gemset is changed. This should be kept in source control, so that whenever you or your collaborators run bundler install, the exact versions of every gem are installed.

Document dependency problems

If a particular gem version breaks your project, by introducing a bug or a change to it’s API, lock it using the appropriate modifier.

Typically an API change is only introduced in a major version change (e.g: 3.x.x becomes 4.x.x). You can make sure your gem stays reasonably up to date but doesn’t change to the next major revision using a pessimistic restriction like so: '~> 3.1.1'.

If the next minor version introduces a bug which breaks your project, lock the gem version with a specific revision (e.g '3.1.1').

Whenever you restrict a gem version, document why! Sometimes the errors causes by a dependency change can be quite obscure and waste significant time. I like to leave a comment like so:

# TODO: Remove version lock when this bug http://github.com/project/issues/311
# is fixed. It breaks the transmogrification adaptor because of a missing method.
gem 'descartes', '3.1.1'

Use tests to drive out dependency issues

The best indication that a gem has broken your project or needs to be managed more carefully is a test suite with good coverage. With good coverage, particularly integrations tests you can be confident that whenever you do a bundle update everything still works.

If your gems are kept up to date most of the time and you use source control it will be quickly obvious which version changes introduced a bug.

Be hesitant to specify a version restriction

And finally, don’t specify a version restriction in your Gemfile without a very specific and well understood reason. It can often be tempting to simply list the version of the gem available at the time or to lock the version if you come from a more conservative background. A healthy Gemfile has few version restrictions, explains clearly the ones it has and comes attached with a lockfile for quick deployment and development.

This was cross posted from my personal blog.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter

Topics

  • agile (780)
  • rails (113)
  • testing (88)
  • ruby (83)
  • ruby on rails (70)
  • jobs (62)
  • javascript (55)
  • techtalk (44)
  • rspec (38)
  • ironblogger (32)
  • productivity (30)
  • activerecord (29)
  • gogaruco (29)
  • git (28)
  • nyc (27)
  • rubymine (26)
  • bloggerdome (23)
  • mobile (22)
  • process (21)
  • pivotal tracker (20)
  • cucumber (20)
  • jasmine (19)
  • design (18)
  • ios (18)
  • webos (17)
  • objective-c (17)
  • android (16)
  • palm (16)
  • "soft" ware (16)
  • fun (15)
  • tracker ecosystem (15)
  • ci (15)
  • cedar (15)
  • rails3 (14)
  • performance (14)
  • bdd (14)
  • gem (13)
  • css (13)
  • tdd (13)
  • selenium (12)
  • goruco (12)
  • bundler (12)
  • meetup (11)
  • railsconf (11)
  • nyc-standup (11)
  • capybara (10)
  • mac (10)
  • mojo (10)
  • chef (10)
  • api (10)
Subscribe to Community Feed
  1. ←
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. →
  • About
  • Case Studies
  • Team
  • Community
  • Careers
  • Contact
  • Labs
  • Events

Contact Us

contact@pivotallabs.com
+1 415-77-PIVOT
TwitterLinkedInFacebook

Pivotal Tracker

Tracker is the award-winning agile project management tool that enables real-time collaboration around a shared, prioritized backlog.
Visit pivotaltracker.com >