Notes on designing, developing and delivering great products

Communication between collaborating directives in Angular

By on in Web

Directives man! While the they’re literally the entry point into Angular development (every application contains a call to ng-app), many people starting out with Angular are hesitant to write their own because of the complexity associated with them. And directives are complex. Even a simple directive requires understanding complicated concepts like restrict, scope and link. But when you figure it out, the value of a directive as a reusable component becomes indispensable.

But what about when a directive isn’t self contained? What if a complicated component comes along that is naturally modeled by multiple directives? This group of directives, as a whole, form a single self contained component. None of directives in the group can stand alone because they only make sense when used together; they collaborate; they are aware of each other and need to communicate with each other.

This post will discuss best practices for managing communication among collaborating directives and illustrate these practices with an example.

Continue reading …

Delivering value, Making money

By on in Process

When I begin working on a new product, I’m always looking for ways to optimize the interactions for business and user value. I believe the best way to accomplish that is to get to market as early as possible with the proposed value. By getting to market, I mean everything from talking with customers about the value proposition to releasing the smallest version of the product. You may know this method as Lean Startup. Even if you don’t, read on.

At Carbon Five, we don’t often use the word lean, but it’s not because we don’t believe in it. It’s because we don’t believe in being dogmatic about it.

flexibility sustainability reason

Our process values flexibility, sustainability and reason. We aim for a middle ground — building what our clients think they want to build, while providing ways to learn along the way. Continue reading …

Docker, Rails, & Docker Compose together in your development workflow

By on in Docker, Ops, Rails, Web

Docker on Rails

We’ve been trialing the usage of Docker and Docker Compose (previously known as fig) on a Rails project here at Carbon Five. In the past, my personal experience with Docker had been that the promise of portable containerized apps was within reach, but the tooling and development workflow were still awkward – commands were complex, configuration and linking steps were complicated, and the overall learning curve was high.

My team decided to take a peek at the current landscape of Docker tools (primarily boot2docker and Docker Compose) and see how easily we could spin up a new app and integrate it into our development workflow on Mac OS X.

In the end, I’ve found my experience with Docker tools to be surprisingly pleasant; the tooling easily integrates with existing Rails development workflows with only a minor amount of performance overhead. Docker Compose offers a seamless way to build containers and orchestrate their dependencies, and helps lower the learning curve to build Dockerized applications. Read on to find out how we built ours. Continue reading …

Product Management For Agile Teams: Why Oh Why

By on in Process, Product Management

At Carbon Five, we build software. We build it using Agile methods. This has worked out well for us and our clients for a long time. We recently added product management as a discipline to our team. There are some common challenges we see at C5 and we’ve been deliberately experimenting with different activities and practices around product development, some of which we will be sharing in this series of blog posts.

Picture this:

Our team is working in a startup environment. Our product owner–let’s call him Alex–while business savvy, has no product management experience. He has a very clear and detailed vision of the product in its finished state. Complete with comps. Those designs, while beautiful, were not created in response to specific user problems; they’re a product of Alex’s brain alone. When our team begins work, questions arise. User stories are written against the comps, instead of against problem statements generated by research with real users. The comps are referenced, but a picture doesn’t necessarily speak the same 1000 words to everybody.

Continue reading …

Happenings in March

By on in Events

We have a medley of different events this month! Whether you are interested in finding like-minded people or need a space to work on some projects, we have an event worth attending. All events are at a Carbon Five office unless otherwise specified.

Continue reading …

Composing Synchronous and Asynchronous Functions in JavaScript

By on in Web

Our example application implements a function createEmployee that is used to create an employee from a personId.

To create an employee, our system loads some data from our database, validates that data, and then performs an insert. Some of our functions are written in continuation-passing style (they accept a callback) and some are written in a direct style (they return values and/or throw exceptions). We’d like to compose these functions in such a way that they succeed or fail as a single unit – that any error in any segment of the sequence will cause subsequent steps to be skipped with a failure – but with some of our validations happening synchronously and some asynchronously, this can be difficult to do.

Continue reading …

C5 On the Go – February

By on in Events

An event at Carbon Five

We have so many events going on this coming month that we thought it would be helpful to round them up in a post. If you’ll be in any of these cities, come say hello.

For anyone who is new to our hack nights, we gather a diverse mix of developers and designers who want to code and collaborate for a couple of hours after work. You can bring a project or enthusiasm for working on someone else’s. If you want to give a short presentation or run a workshop, we have the facilities and completely welcome ad-hoc organization.

Los Angeles

Wed, Feb 4 @ 6pm // Hack Night

Wed, Feb 18 @ 6pm // Hack Night

Continue reading …

Gettin’ Freaky Functional w/Curried JavaScript

By on in Web

Partial application refers to the practice of filling in a functions parameters with arguments, deferring others to be provided at a later time. JavaScript libraries like Underscore facilitate partial function application – but the API isn’t for everyone. I, for one, feel icky sprinkling calls to _.partial and _.bind throughout my application.

Curried functions (found in Haskell and supported by Scala, among others) can be partially-applied with little ceremony; no special call format is required. In this blog post, I’ll demonstrate an approach to currying JavaScript functions at the time of their definition in a way that enables partial function application without introducing lots of annoying parens and nested function expressions.

Continue reading …

Vintage Terminal Effect in CSS3

By on in Web

Recently I revamped my personal website. For the most part I kept it simple, having it generated by Middleman with styling and layout provided by Bootstrap. However, I wanted my header to reflect my love of the command-line and 80s nostalgia by having it act like a vintage terminal similar to Cathode app: scanlines, screen burn, green glow, with blinking cursor. Most importantly, I wanted to do it with CSS3 animations and no Javascript to minimize the impact on browsers. Building on the work of Lea Verou and Anders Evenrud, here’s how I did it. Continue reading …