Category Archives: Code

Timeshifting in HBase

For our HBase table layout, we are following an entity-centric model, evangelized to us by our friends at WibiData. The idea is to put all of the data about a single entity into a single row in HBase. When you need to run a computation that involves that entity’s data, you have quick access to [...]

Upgrading from Spring 3.0.x to Spring 3.1.x

I recently had the pleasure of upgrading our Java code base from a Spring-3.0.6 base to the latest Spring-3.1.2 libraries.  There were a couple unexpected hiccups I encountered that didn’t have a ton of solutions on stackoverflow or the google, so I thought I’d capture some of them here. Additionally, it’s pretty useful to look [...]

Spring Configuration and Library Decomposition

Opower’s evolved rapidly in the last 24 months and nowhere is that more true than in our code base.  Two years ago we had 2 flagship applications that shared model objects, DAOs and a handful of utility classes with one common JAR.  Since then we’ve expanded to the point where (not even counting all the [...]

Our Scala DSL for testing our web product

This is actually a fairly old bit of tech for us, but I’ve been reading Martin Fowler’s DSL Book, and thought it might be good to talk about what we’ve done. Our Domain-Specific Language is probably more domain-specific than you might be used to. Frameworks like Ruby-on-Rails or ScalaTest are DSLs for very broad domains [...]

Attentive Programming

Attentive Programming I’m currently reading Matthew Crawford’s Shop Class as Soulcraft who writes about how manual labor can make you spiritually whole. To get us to look at work in new ways, he describes work using the categories: assertiveness and attentiveness. Crawford writes that work is not exclusively assertive or attentive and that to obtain the spiritualism that [...]

Boxed primitives and ==

One part of programming culture at OPOWER is to program defensively, providing useful information when contracts are violated. What does this have to do with boxed primitives? Getting an assertion message of “Person 1001′s customer id 109032 didn’t match the passed-in customer’s id of 109032″ seemed logically impossible, but was somehow true. But first, let’s [...]

Dave’s Talk at ScalaDays 2010

OPOWER graciously sent me to Switzerland this year for ScalaDays 2010. I was lucky enough to be asked to present on “Sneaking Scala into the Enterprise”. OPOWER sponsored the videography. My talk, on starting to use Scala in your organization (based on my experience at OPOWER), is linked below; all the talks are online here. [...]

Alfresco 3.3 Lunch & Learn

OPOWER attended the Reston, VA "Alfresco 3.3 lunch & learn" seminar this week, hosted by the generous folks over at SiteWorx. Alfresco 3.3 looks support the CMIS 1.0 spec and head further into the ECM space.

When adding more threads makes it all slower

I’ve been working on a new feature that requires analysis of each individual’s entire energy-use history. In other words, I have a process that will touch every single bit of data in our database. This should be a rare thing, so if it takes a while, it’s not that big of a deal. My initial [...]

Slides on Improving Your Agile Development Process

Dead last, after the headline act, and after Joel Spolsky told everyone to go home, I did a lightning talk at DC’s recent DevDays (A StackOverflow production) on how we have used process metrics from our bug tracker to improve our process. Improving your Agile Process View more documents from David Copeland. Continue reading ...