Notes from Alex Cruikshank

C5 Labs: Daily Ascent

By on in C5 Labs, Design, Development, Mobile


There is plenty of research to show that taking stairs is one of the best ways to work out without taking time out to exercise. Taking the elevator wastes electricity, and the stairs are a great opportunity to improve overall health. With this in mind, we wanted to encourage people to start thinking about using the stairs over elevators.

Though there are lots of great social health tracking apps out there, we wanted to try using wellness as an excuse to build community around a physical location (the Edney building staircase).

Continue reading …

Iron Gaming Launches Rezli

By on in Everything Else

Our client, Iron Gaming, announced the release of Rezli today at the 2050 Events Daytona Conference. Iron Gaming is a major player in eSports tournaments, offering live streaming of gaming events that have developed a massive following in the gaming community. They came to Carbon Five looking to develop an online product that would suit the needs of their existing user base. Rezli fills that gap by connecting gamers to each other and gaming organizations, much like LinkedIn does for job seekers.

Continue reading …

RethinkDB: a Qualitative Review

By on in Database, Ops, Web

RethinkDB Evaluation
At Carbon Five we install and use many different database engines. Document-oriented databases are proving to be a good fit for more and more of our projects. MongoDB is the most popular of these and provides a powerful set of tools to store and query data, but it’s been plagued by performance problems when used with very large databases or large cluster sizes. Riak is another interesting option that is built from the ground up to perform at scale. But Riak is difficult to set up and has a minimal API that requires a lot more work to manage the data. RethinkDB is a relative newcomer that wants to fill the gap between these.

The trade-off between developer friendliness and high performance is unavoidable, but I’ve been looking for something in the middle. RethinkDB claims to solve the 1-15 problem, which is a database that is reasonable to use as a single node, but can scale up to around 15 nodes with minimal configuration and no changes to the application. Whether or not this claim holds up remains to be seen. In this post I take it for a test drive and provide a qualitative assessment (i.e. no benchmarks) of its ease of use and effectiveness for application development. The question is, what do developers have to give up for the peace of mind of knowing they won’t have to rip out the persistence layer when the app gains popularity (tldr; not much).

Continue reading …

Using Redis sorted sets to build a scalable real-time web waiting list.

By on in Database, Web

As websocket communication makes large real-time web experiences more common, we are increasingly faced with the problem of how to build apps that work just as well with many concurrent users as they do with a few. redis_waiting_list The problem touches both the technical limits of the server infrastructure and the design of the user experience. This post argues that imposing an artificial constraint on concurrent users and then designing around that constraint will lead to better real-time apps. It then describes a scalable waiting list implementation (with a working demonstration project) built around Redis sorted sets.

Continue reading …

Interactivity in HTML5 Canvas Visualizations

By on in Design, Web

In the last canvas visualization post I discussed the canvas API’s transform functionality and how it greatly simplifies drawing complex visualizations.  In this post, I’ll talk a little about making canvas visualizations interactive and about problems you might encounter when mixing transforms and interactivity in a canvas application.

Examples: (an HTML5 compatible browser is required to view these)
Interest Map ApplicationTree ApplicationInteractive Tree ApplicationAnimated Interactive Tree

Continue reading …

Taming 2D Transforms in HTML5 Canvas

By on in Web

This is the second post in a series on creating custom interactive visualizations in canvas.  The first post is here.

The canvas API contains five methods (rotate, scale, translate, transform, and setTransform) used to transform the drawing context. We typically use the transform API when we want to rotate or scale some element of the visualization (especially text). In canvas, we don’t actually move the elements. Instead we transform into a new coordinate system where the element is no longer scaled, rotated or translated and then draw normally. The difference is subtle, and you can get by with ignoring it so long as you remember to execute the transforms before you draw.   But, once you embrace this way of thinking, transformed coordinates can be a powerful way to break down complicated drawing tasks into simple steps. In the remainder of the post I’ll describe how to use transforms effectively and how to overcome the difficulties involved in making transformed objects interactive.

Examples: (an HTML5 browser is required to view these)
Interest Map ApplicationTree Application

Continue reading …

Visualizing Skillsets in HTML5 Canvas: Part 1

By on in Design, Web

As Courtney chronicled in the journal, Carbon Five recently engaged in a group exercise to create a physical diagram of our skills and interests.  The activity was entertaining and produced a rather attractive artifact on the wall, but we soon realized that (aside from noting that some skills were more popular than others) there was little useful information that could be drawn from the visualization.  If we were going to find any kind of message among the splatter of paint chips, we were going to need to reorganize the data.

Our goal was to create a visualization that would focus in on individual and collective patterns in the skills and interests chosen while still inviting people to explore and draw new conclusions.  It was important to leave some aspects of the interpretation to the group that created it, so we knew we needed an interactive visualization (the opportunity to explore new HTML5 influenced me here).

The result of this effort (this page requires an HTML5 compatible browser) is a single page canvas application that plots Carbon Fives skills and interests along various axes.  In the rest of the article I’ll explain how we converted the data to something more meaningful. Continue reading …

A 3D Flocking Simulation using HTML5 Canvas

By on in Design, Web

Birds on a Power Line applicationI recently unearthed an old Java applet that I had written many years ago and decided to see what it would look like as a single page canvas application (an HTML5 compatible browser is required to view this page). The applet was inspired by the way blackbirds roost on power lines in San Francisco (and probably everywhere else).  I started with something close to Craig Reynold’s classic Boids algorithm, which is remarkable for generating motion resembling a flock of birds by giving each particle only 3 relatively simple mathematical constraints.  I had to add 6 more rules to incorporate the power line behavior (2 for landing, 1 for hopping on the line, and 3 for launching off the line).

Continue reading …

A few experiments with HTML 5 applications

By on in Web

I’ve had a long-standing interest in taking client-side programming beyond display logic and input validation. The new HTML 5 technologies are making full-scale application development in the browser increasingly practical. Unfortunately, the needs of Carbon Five’s clients generally exceed the capabilities of purely client-side solutions, so I don’t get to spend as much time developing JavaScript as I’d like. Consequently, I challenged myself to solve as many of my day-to-day issues as possible by writing applications that require only a single HTML page and a modern browser to run. So far, this has resulted in five applications; they’re available — with some additional thoughts on this style of development — below the fold.

Continue reading …