On AngularJS

I would like to talk about my experience in AngularJS. Currently, there are proposals underway to create the next major version of AngularJS and the proposals therein are aimed at improving the overall AngularJS experience. I'm putting this out there as my experience with the things I think are not addressed in those proposals. This will be a hodgepodge of things in Angular that I care about so I apologize for the jumpiness and non-cohesiveness of this post!

I would like to talk about my experience in AngularJS. Currently, there are proposals underway to create the next major version of AngularJS and the proposals therein are aimed at improving the overall AngularJS experience. I'm putting this out there as my experience with the things I think are not addressed in those proposals. This will be a hodgepodge of things in Angular that I care about so I apologize for the jumpiness and non-cohesiveness of this post! Testing The testing story in Angular is pretty good but it can get better. Both the dependency injection framework and karma runner... more

Empathy for Operations is a Developer Core Competency

The title is the statement. I'll break it down and then try to explain my thoughts behind why I think this statement is true. And then I'll give a little bit of direction to help embark on a journey.

The title is the statement. I'll break it down and then try to explain my thoughts behind why I think this statement is true. And then I'll give a little bit of direction to help embark on a journey. Empathy for Operations Much of what we have learned recently in software development is that could software comes for empathizing with someone else. We need to be able to step away from our own viewpoint and see it from someone else's perspective. To improve the business value of the product, we need to view it from the business owners perspective. To... more

Freedom of Information

Baruch Spinoza is one of those names that every modern human knows in their bones, their culture and their actions but know not at all. He was a great rationalist philosopher whose postulations have become so commonplace and engrained into our culture that we are not aware of them. His ideas are, in part, the foundation of the modern democracy, morality, ethics and metaphysics. Here is what Spinoza says about freedom of information and the idea that the state needs to operate in secret:

Baruch Spinoza is one of those names that every modern human knows in their bones, their culture and their actions but know not at all. He was a great rationalist philosopher whose postulations have become so commonplace and engrained into our culture that we are not aware of them. His ideas are, in part, the foundation of the modern democracy, morality, ethics and metaphysics. Here is what Spinoza says about freedom of information and the idea that the state needs to operate in secret: They who can treat secretly of the affairs of a dominion have it absolutely under their... more

Binding in Swing

Swing is pretty old. We've developed new technologies since its heyday and those new technologies have brought new best practices. One of those is the ability to bind the UI to a Model or ViewModel object. In my current project, we are using Swing as a UI framework and are attempting to move it from the old to the latest and greatest. One of those includes binding.

Swing is pretty old. We've developed new technologies since its heyday and those new technologies have brought new best practices. One of those is the ability to bind the UI to a Model or ViewModel object. In my current project, we are using Swing as a UI framework and are attempting to move it from the old to the latest and greatest. One of those includes binding. This is short and sweet, but you can do simple data binding in Swing pretty easily. What we have done is to create a ViewModel object that the view will render from; this... more

Technical Post-Mortem for Failures

This is just a quick template that I am using with my teams.

This is just a quick template that I am using with my teams. Hammer's Technical Post-Mortem for Failures What was the problem? Please be as concrete and simple as possible (e.g. the build failed due to data not being cleaned up the database) What was the root cause of the problem? Consider using the 5 Whys in order to really track down root causes. Was the issue resolved quickly? If so, what processes or techniques made that happen. If not, what gaps in our processes or techniques exist? Identify actionable items that would resolve the root cause of the issue... more

Stronger Backbone - Part 3

There is a better way to write Backbone applications and here I hope to write a quick primer. The topics I will cover in this series will follow these basics:

There is a better way to write Backbone applications and here I hope to write a quick primer. The topics I will cover in this series will follow these basics: Everything-from-one-container Pass-through views Declarative rendering Abstract away element access (TBD) ViewModels over Models (TBD) BONUS ROUND Coffeescript (TBD) Declarative rendering Rendering is one of the more complicated aspects of creating single page javascript applications. It has implications in performance, responsiveness, debug-ability, testability and can have a steep learning curve. For the most part, rendering falls into one of two categories: implicit and declarative. Implicit rendering can be put another way:... more

Stronger Backbone - Part 1

There is a better way to write Backbone applications and here I hope to write a quick primer. The topics I will cover in this series will follow these basics:

There is a better way to write Backbone applications and here I hope to write a quick primer. The topics I will cover in this series will follow these basics: Everything-from-one-container Pass-through views Declarative rendering Abstract away element access (TBD) ViewModels over Models (TBD) BONUS ROUND Coffeescript (TBD) Everything-from-one-container Often when evaluating other backbone applications I will see somewhere deep in the program a line of code like this: render: function() { for(var i = 0; i < this.items.length; i++) { $('#table').append(_.template('item_template', { item: this.items[i] })); } } This code is appending to the element with id table N number... more

Stronger Backbone - Part 2

There is a better way to write Backbone applications and here I hope to write a quick primer. The topics I will cover in this series will follow these basics:

There is a better way to write Backbone applications and here I hope to write a quick primer. The topics I will cover in this series will follow these basics: Everything-from-one-container Pass-through views Declarative rendering Abstract away element access (TBD) ViewModels over Models (TBD) BONUS ROUND Coffeescript (TBD) Pass-through views In the old days (and still current for the unlucky few) of .NET web application development, there was a framework called WebForms that developers would use to create web applications. WebForms used a system called "CodeBehind" that allowed developers to interact with objects in the views. The .NET community has... more

A Pattern for Rails Presenters

On my previous project, my team developed a pattern for Rails presenters that I think is worth sharing. We used this pattern to a great deal of success and I will be advocating for its use in future Rails projects.

On my previous project, my team developed a pattern for Rails presenters that I think is worth sharing. We used this pattern to a great deal of success and I will be advocating for its use in future Rails projects. The Presenter pattern is what I call a projection of a model. That is: given a model A which contains data Z, a presenter is a derivation of model A and data Z. We can represent this as A' (Presenter class) and Z' (Presenter data). For any given model A, there are an unlimited number of projections and, thus, presenters.... more

Maintaining internal gems

On my current project, we have been growing our system to a rather large size. As with any codebase that grows, this means that we have started to think about code organization that relies on creating our own libraries and gems.

On my current project, we have been growing our system to a rather large size. As with any codebase that grows, this means that we have started to think about code organization that relies on creating our own libraries and gems. At this time, we have around 5 or 6 "internal" gems that are just consumed by our project. These gems are things like third party integration classes, testing tools and generalized code that could be used outside of just this project. One of the things that we've started doing is versioning and tagging the external gems instead of pulling... more