Our Blog

Ongoing observations by End Point people

Work philosophy canon

By Jon Jensen
May 7, 2018

people sitting on couch reading on tablet and laptop

Shared culture

Having some shared culture is important for working together well, and we can build that culture on familiar terminology, understanding, experiences, stories, and ideas.

To help give all of us at End Point some common reference points, we have collected a set of valuable articles and books that we encourage everyone to read.

Some of these have been standard reading at End Point for more than a decade, while others have been added over the years since we began doing this. Some are short and simple, others more in-depth. Our list is intentionally general, mostly avoiding specific technologies that only a subset of us use.

No one article or book can be entirely authoritative for all situations, but each gives us more of the wisdom out there to consider and judiciously apply where it fits.

Slow and steady

When new employees start at End Point, we ask them to read the articles during their first week or so, and the relevant books within roughly their first year.

Reading only a little at each sitting and spreading the reading out over time allows the ideas to sink in gradually and be incorporated into our work, rather than overwhelming with new information that cannot all be absorbed at once.

For everyone

Because we work in the software development industry, it is important that not only technical people such as developers, database experts, and system administrators be part of the shared culture. Everyone else at End Point including designers, project managers, sales, marketing, etc. should also be familiar with these articles and the terms and concepts they discuss:

company books training

Liquid Galaxy at EarthX Conference

By Dave Jenkins
May 2, 2018

Coral reef panorama displayed on Liquid Galaxy

We had the unique opportunity to participate in the EarthX conference held this week in Dallas, Texas. EarthX brings over 100,000 visitors together to hear about environmentalism, recycling, ocean preservation, sustainability tech advances, and how to be good custodians of our Earth.

We set up 3 systems at the conference to give the widest coverage for the wonderful content developed by our partners:

  • NOAA showcased new 360 photos from Palmyra Atoll, a tiny dot of land 1000 miles due south of Hawaii in the middle of a National Marine Reserve, along with an incredible 360° video from Christophe Baillache and Sophie Ansel.
  • Blue Abyss showcased their new 50-meter deep diving tank soon to be installed in the UK, where they will support training for space travel or run oceanic simulations under very controlled conditions.
  • We also showed “Diving with Sylvia”, a VR game built by Cascade Game Foundry for the Oculus Rift. This was tricky, as it involved simultaneous visualizations to both the VR goggles wearer as well as the 7 screens of the Liquid Galaxy.

Diver photo panorama shown on Liquid Galaxy

While at the conference, we attended a wonderful gala with Sylvia Earle, one of the premiere environmental scientists who focuses specifically on oceanic wildlife and how to preserve what she calls “Hope Spots” around the world where biodiversity is especially rich and especially at risk. (Yes, we have a presentation that flies to all these “blue hope” spots.)

Sylvia and other speakers emphasized the need for telling the story of these places, as a good story is key to raising awareness, building consensus around preservation, and leading the way for policy change. This same need of telling a strong environmental message was echoed by our friends at NOAA, the National Marine Sanctuary Organization, and even the President of Palau, a Pacific Island nation who has taken the lead and now preserves 80% of its waters from fishing or exploitation!

Our 3 Liquid Galaxy systems at the conference performed admirably and...

liquid-galaxy conference

Expert Help with Your SaaS System

By Elizabeth Garrett Christensen
April 23, 2018

1, 2, 3 … Let’s Go!

Are you thinking about starting a new website and using BigCommerce, Shopify, or WooCommerce? The software-as-a-service offerings on the market today can help you get a great-looking, low-cost ecommerce website up and running quickly, but you may need more help than you first expect.

In order to get the most out of your site, ecommerce consultants like us at End Point can guide you through setup, customize your site to fit your brand, manage all of your technical requirements, and help drive traffic to your site. This post is an overview of services we offer to clients looking for a SaaS solution.

Select the Right Vendor

Working with an expert consultant can help you make the right choices from the start. Sometimes knowing the level of customization that your project requires can be a real challenge. End Point has experience with everything from out-of-the-box SaaS platforms to large-scale, custom software developments—​we take time to understand your requirements and guide you to the perfect solution for your business.

Custom Design

Most SaaS offerings include ready-to-use, beautiful design templates, but you’ll often find that they require some tweaking. We can customize your design so that it fits perfectly with the look and feel of your brand, without the time and expense of going through the design process from scratch.

User Experience and Navigation

Working with an ecommerce consultant that has experience with user behavior, site navigation, and business workflows can help you develop the best way to organize your pages and products. With improved navigation, we can ensure that your users are finding what they’re looking for and getting where they’re going quickly and seamlessly.

Customizing Your Store

Customizing your store to work with your specific needs, like shipping integrations, 3rd party apps, and APIs can be a challenge. End Point can help you research the solutions already in place, or build custom solutions for your site.

Email Setup


ecommerce saas bigcommerce shopify wordpress woocommerce design project-management

RailsConf 2018 Summary: The Train is Still Moving

By Steph Skardal
April 20, 2018

RailsConf train An actual Duplo creation I built at my house this morning, while my kids are at daycare.

Hi! Here’s my wrap-up summary of RailsConf 2018, my 8th time attending. And I say that only to provide some context for my perspective.


Code is a theatrical performance and devs are the actors. Code is a craft and senior devs are the artisans who create and innovate on a framework. Code is a house that you live in—​you need to leave it better than how you found it, value improvement over consistency, and communicate more as you get to live in this house. Code infrastructure is a Jenga tower waiting to topple. The Rails router is a mail carrier sorting system. A new codebase is a map that you start to navigate once you begin working on it. There have been so many analogies here at RailsConf, I can’t keep track of them anymore.

Here’s my analogy: Rails is a train. It’s a train made out of Lego blocks disguised as Duplos with mostly white bearded guys wearing graphic tees. This train is still getting businesses from point A to B. Some of those businesses care about that train that’s getting them where they need to be, some don’t. But certainly, most businesses that come to RailsConf care about the train and continue to evangelize it. Thanks to things like code school and bootcamps, people are still getting on the train, and people are getting off the train*. There are devs riding the train, and there are contributors maintaining and building the train, adding cars, taking them off, making them better.

* RailsConf attendance has held steady at 1,300 for some time.

On Technical Debt

Two talks I went to greatly summarized the technical debt built up over the years of running on Rails.

Edouard Chin of the the Shopify production team gave a great talk on how Shopify has handled upgrades over 10+ years at scale. Shopify runs over 600,000 businesses, so any ongoing upgrades obviously affect a large amount of business owners and end users. Examples that he went...

rails ruby conference

RailsConf 2018: Communication 101

By Steph Skardal
April 19, 2018

RailsConf banner

The punchline is that I’m writing about Communication: 101 here at RailsConf 2018, but there is no joke. In “Harry the Hedgehog Learns you a Communication”, Laura Mosher presented examples of common pitfalls we encounter in our daily lives as software engineers and 5 tips to mitigate those pitfalls. All of these tips are both helpful in the world of consulting when interacting with a variety of clients and coworkers, but also very personally valuable from the perspective of a parent—​I want to exemplify strong communication skills to my children as they absorb everything around them, the little sponges that they are. Here are the tips that Laura went over:

Think, Then Speak

This is the foundation of good communication, and seems pretty obvious, but in the age of chat, direct messages, and instant email responses, it’s easy to fall into the trap of responding immediately with emotion and/or without thinking about what you are going to say. First, consider what you want to say, who your audience is, and how to best explain to that audience.

In consulting, I find this applicable in a couple of scenarios:

  • When hearing unsettling or harsh words from a client over dissatisfaction on a project, if you have an emotional reaction, it’s best to wait until you can respond with a level-headed response with a thoughtful explanation of your perspective.
  • When receiving technical review on implementation of some feature XYZ from a coworker, instead of responding immediately defensively, wait until you can provide feedback with better perspective.

Drop the Nots

Laura says, “We often reach for denial or communicate in forms of negatives instead of answering directly.” Nots enable misunderstanding. Instead of denial or avoidance, answering directly and taking accountability can ultimately build a better long term relationship between those who are communicating.

Here are some examples of how we might use nots:

  • “That’s not my job.” Instead, offer who might have that responsibility...

rails ruby conference

RailsConf 2018: Day One

By Steph Skardal
April 17, 2018

RailsConf banner

It’s day one of RailsConf 2018, and I’m in Pittsburgh with baby Ingrid (daycare FTW!). This is my 8th time at RailsConf and third time with a kid (SELECT DISTINCT kid FROM skardals). In my first few years of attendance, starting in 2009, I absorbed much more on the technical side, but the talks that have struck a chord in recent years of attendance have been more on the side of the human element of software and software engineering.

Concept Compression

DHH started the day with the opening keynote, and I perceived the main focus of his talk to be the idea of “Concept Compression”. Ruby on Rails has spent many years compressing concepts (e.g. ORM) to lower the barrier to entry. In theory, this should allow more diverse people to enter the software field, but the problem is that while we’ve been compressing concepts along our way, we’ve also added significantly to the list of things that developers ought to know before they start coding.

DHH has always been focused on developer happiness in Rails, so to me, this topic was another extension of developer happiness in talking about the progression of Rails over the years. If Rails isn’t careful, we’re bound to repeat mistakes of the past (e.g. too many concepts, too much to know, too much complexity), and the Rails ecosystem could implode, only to see the cycle start up again.

Scaling the Artisan

One of the first talks I attended was Scaling the Artisan by Coraline Ada Ehmke. She discussed how we as software engineers are artisans, not scientists, ‘hard’ engineers, or architects. She went through a few examples of the history of artisans and the products they crafted (e.g. screws, swords, guns). In these examples, industrialization and creation of interchangeable parts are just two examples that improved production and allowed artisans to focus on the innovation and creativity rather than production.

She drew many parallels to these historical artisanal practices to software engineering. She then went on to what...

rails ruby conference

Using FFI in Ruby

By Kamil Ciemniewski
April 16, 2018

Photo of pipes
Photo from AMOB

Ruby for many years has been proving to be an amazing language. It’s one of the most popular for creating web applications but also DevOps / systems administration tools.

It seems that languages are naturally finding their own niches. For Ruby it’s what I listed above, while Python seems to work well for computer vision and machine learning.

For performance reasons, some code should never be coded in either one. Topic boundaries are being crossed typically though. You might be working on the web app that does some high performance math in the background. To marry the two worlds, people were successful with creating compiled “extensions”. These extensions are typically coded in C. Both languages along with their interpreters are able to use those using native-to-language constructs.

One good example of this is the great numpy package. It brings high-performance linear algebra constructs that would be impossible to code in pure Python with the same performance.

In the Ruby land, a similar example is the nokogiri gem. It allows very fast XML / HTML processing thanks to the core of its functionality being coded in C.

You might also be working on a Ruby app having a need for a functionality that has already been written as a library with C interface available. One way to use it would be to create an extension that would operate on those external C functions. This involves quite a lot of prep-work though. The RubyGems guides describe the process in detail.

There is one more option and I’m about to show you what it is.

Referencing external functions directly

FFI stands for “Foreign Function Interface”. Most languages have a way to operate with external code (written in another language). The interface for doing so is what’s called FFI. Examples:

In this article, we’re interested in using FFI in Ruby.

No matter what the host language, the...

ruby c

Ruby on Rails: Russian Translation and Pluralization

By Steph Skardal
April 12, 2018

Coding Photo by Matthew Henry of Burst

Russian is Hard

Translation to Russian is tricky, and what’s even more tricky is coding logic to handle localization and pluralization of Russian (especially when you can’t read it). Here, I’ll explain some of the complexities and approaches I used for localization of a Ruby on Rails application.


In general, Rails claims to have good localization and pluralization support, but I found that the support for handling more complex translations required customization. The first thing to note is that pluralization in Russian is not quite as simple as it is in English.


In English, we are familiar with pluralization of regular nouns to be appending an ‘s’ to the end of the noun (except for those nouns ending in ‘y’ and ‘o’). Pluralization is irregular in some cases, e.g. “octopus” becomes “octopi”, and Rails can handle some of these special cases for English but may not necessarily understand rules for other languages. See:

pry(main)> pluralize 1, 'user'
=> "1 user"
pry(main)> pluralize 2, 'user'
=> "2 users"
pry(main)> pluralize 1, 'octopus'
=> "1 octopus"
pry(main)> pluralize 2, 'octopus'
=> "2 octopi"

Wikipedia has a thorough explanation of English plurals here for anyone interested.


Russian pluralization is more complex. In the most simplified terms (from my understanding), the mapping can boil down to:

  • where count is zero, word has one ending
  • where count is one, word has another ending
  • where count is 2–4, 22–24, 32–34, word has yet another ending
  • where count is 5–20, 25–30, 35–40, …: word has yet another ending

To accomplish this translation and pluralization in Rails, I implemented the following mapping found here:

{:ru =>  
  { :i18n =>  
    { :plural =>  
      { :keys => [:zero, :one, :few, :other],
        :rule => lambda { |n| 
          if n == 0
            ( ( n % 10 ) == 1 ) && ( ( n % 100 != 11 ) ) 
            # 1, 21, 31, 41, 51, 61...

rails ruby localization
Page 1 of 173 • Next page

Popular Tags


Search our blog