Posts categorized as:

Development

Elm on Rails 5.1 with Webpacker

Elm, the new hotness in front-end programming, is now (almost) officially supported in Rails 5.1 via the webpacker gem. The Elm language provides strong type-checking in an immutable, functional programming language that compiles down to JavaScript...

Video Messaging in Rails

We've been working with our friends at the Chins Up Foundation to develop an innovative application connecting youth with college athletes through a pen-pal mentorship program. Recently, we were requested to add video messaging to the application...

Building A Slack Bot With Elixir Part 2

In the first part of this tutorial, we covered the basics of defining, running, and testing a web server in Elixir using Plug and Cowboy. In this part of the tutorial, we'll build on that groundwork to create a Slack bot that fetches and sends out...

The Not At All Definitive Guide To Opening PDF Files In Ionic 2

Opening PDF’s inside an application is tricky sometimes, but the beauty of Ionic is that a solution is never far out of reach. Despite that bit of enthusiasm the landscape for this problem is often hard to navigate. After a project where we had to...

Webpack v2 Quick Start

With Webpack 2.x out of the release client phase, we're here with a quick start guide to get your development project running. This guide will guide you through a minimal setup where you will configure webpack and it's webpack-dev-sever. The configuration...

The Tragedy of Maybe and Ruby

"How is this different from nil?" is the inevitable question I get from rubyists upon learning about the Maybe monad. Until a flash of inspiration the other day, I didn't quite have a good explanation for this question. Sure, I had an explanation,...

Building A Slack Bot With Elixir Part 1

Having started out as a Rails shop, Bendyworks is always on the lookout for new tools that give use the same combination of power and developer friendliness. We've been watching Elixir grow in popularity in the last few years, and are attracted to...

Optimizing Your CI and WebPack Builds

Recently, I was running into issues where the builds for a Node project were becoming painfully slow. Local development builds would take well over a minute or more. The CI builds on Jenkins would take at least eight and a half minutes, but would usually...

We ♥ Progressive Web Apps

This fall, we’ve had the great fortune to learn and speak about Progressive Web Apps at conferences around the world. We think PWAs are pretty PWAsome! In this post we’ll tell you why, and in a future missive we’ll delve into the technical features...

A tale of two selectors in HTML and CSS

In the course of normal web development we're used to encountering weird quirks of various browsers, but this one left us flabbergasted. The root of the problem was using document.querySelectors for HTML elements with ids that had leading numbers....

Rails Enum is a Sharp Knife

When we say something "is a sharp knife," we mean that it is eminently valuable if used correctly, and exceptionally hazardous when wielded incorrectly or without effective training. It's similar to the Principle of Least Astonishment, but with a harmful...

Elm for the Frontend, Right Now

NOTE: This article was written for Elm 0.16 and is now out of date. Many of the concepts discussed in this article were removed in the upgrade to 0.17, and some of the Elm syntax was changed in the move to 0.18. Please read the article we rewrote for...

AngularJS and Rails Donuts

Interested in mocking up a modern-looking interface to some data? Using AngularJS to interact with an existing Rails project makes it easy to go from a plain old CRUD app to a modern, surprisingly full-featured UI.

CRUDdy Angular Donuts

For instructive...

Cut & Paste Rich Text with Pandoc and Markdown

I love the plain-text goodness of Markdown for taking notes and writing documentation. Most of the tooling in my world plays nicely with it and so almost all is well. GitHub will render Markdown READMEs and other documents handsomely. Heck, they even...

Frank on Fire: Getting Started with Sinatra and Ember-CLI

Here at Bendyworks, we've noticed Ember.js's growing adoption in the front-end community and have found that it strikes a good balance between flexibility and adherence to battle tested architectural practices.

Ember-CLI takes things one step further...

Writing a Haskell API Server, Part 4

Show me the code!

If you’ve been following along with the blog posts (parts: one, two, and three) then you’ll know quite a few details about how the project works. The last piece, obviously, is how it all fits together. So we’re open sourcing  the...

Writing a Haskell API Server, Part 2

Making the Domain Work for You

Back in part 1 we spent a fair amount of time working to make sure that as much of the low-level data logic of our Haskell api server was kept in the database as possible. Things like auto-incrementing ids, created_at...

Caravan: Ruby API Versioning & Enforcement

So you’ve built a Ruby API. Awesome sauce! You’ve set yourself up for success whether you build a rich client-side JavaScript app or native app. Hell, you could even shove it into a much larger Service-Oriented Architecture cluster. Nice.

But something...

Actually Using the Database

Writing a Haskell API Server, Part 1

Chris Wilson‘s and my mission for Bendyworks was ostensibly simple: build a secure database-backed API server in Haskell. We didn’t expect to be treading new-ish ground. When we began architecting, we could’ve...

2014 Rails Rumble

We just completed the 2014 Rails Rumble. We built an app called Gatherings for coordinating Game and TV viewing nights with friends.

More details coming soon!

The Old and the New: SOAP and Ember.js

We don’t always get to choose the technologies we have to deal with everyday. I, for one, would love to be using an iPhone 9 right now, but it seems Apple hasn’t yet invented it. Despite it being 2014, some of us have to deal with SOAP every day and...

Tessel: A First Look at JavaScript on Hardware

When a small red circuit board called the Tessel appeared on a crowd-funding site over a year ago, its promise to bring simplicity to hardware hacking caught my eye. It’s now on the market and, with a project percolating in my mind, I ordered one to...

Externally Embedding Ember

We’ve been playing around with Ember since before it was extracted from SproutCore, and it wasn’t until recently that we got this unusual request from one of our clients: “Can you embed an Ember app in an external page like you would Google Analytics...

BendyConf: Bad Estimating Games

Estimation is a crucial but challenging element to managing any software project. Without estimates, we can’t say what stories (or features, in our lingo) are in scope or not in scope for a given development phase. At the same time, the process of...

Why Clojure?

Clojure has been growing in popularity since its first major release in 2008. If you or your company is interested in understanding the value of Clojure at a high level, read on.

Clojure might be the answer if:

Your existing application is written...

Ruby? Rails? Ruby on Rails?

This post is one in a series of blog posts that answer some of the most common questions we get from prospective and current clients. All of the posts in this series are under the Questions tag if you want to view more like this.

As a consultancy...

BendyConf: Introduction To Firefox OS

Josh’s BendyConf talk introduced us to Firefox OS, an open source, web focused mobile operating system developed by Mozilla. Although it has been available for more than a year, this June marked the release of version 2.0, making now a good time to...

Velocity and Working Software

Four inches per minute. Two hundred forty miles per seven years. One and a half millimeters per second. Even without something to compare to, most would consider this an inordinately slow pace. And yet this is the average velocity of an engineering...

Swift Syntax Highlighting Workaround for Blogging

Since Swift was announced less than one week ago, we as a community can’t reasonably expect syntax rules to be pulled into popular highlighting libraries like Pygments yet (though it’s certainly already in the works). You’ll notice in our most recent...

Unit Testing in Swift

Swift, being all the rage these last four days, has definitely livened up our programming chat room quite a bit. With cautious optimism, we (Betsy and Brad) delved into the Xcode beta, curious about the state of testing with Swift. For the purposes...

Conference Review: BayHac 2014

I recently attended BayHac 2014, the Bay Area Haskell Hackathon, and I wanted to cover some of my impressions from the conference. I’m breaking it down by the days and the things that I attended. There’s a ton more on the event page linked above for...

UW Big Data Event presents Storm

After hearing from a friend in the Madison Big Data Meetup that Twitter would be sending its engineers to the UW Madison CS Department to talk about Apache Storm, a group of Bendyworkers bundled up against the cold and made the short trek to the UW...

Single Responsibility Principle & iOS

View Controllers in iOS: we need to talk. You are—without a shadow of a doubt—the worst offender of the Single Responsibility Principle, and that needs to stop.

First, some background

The Single Responsibility Principle or SRP, is defined by Robert...

From Ruby to Haskell, Part 3: Lazy Evaluation

One of the defining characteristics of Haskell— that you often see listed in what sets it apart from other languages— is that it is the only common language that’s lazy. In fact, laziness has been cited as the feature that keeps Haskell functionally...

The Migrationless Migration

I’ve been reading the excellent blog Revision-Zero lately, and just a whole bunch of other relational algebra stuff. If I may impose upon you for a minute, relational algebra is one of those things that, like linear algebra, is a shining intellectual...

What can SQL do for you?

What can SQL do for you? Chris shares his thoughts on the changelog on how to take full advantage of relational databases:

Where is the place that I can look and see a coherent overview of the parts of my system? In conventional Rails, I think...

Bwoken 2 Beta Released

In response to a great discussion in the bwoken issues forum, I’m happy to announce the first beta of bwoken version 2! The major change, which justified the major version bump, is that bwoken is no longer invoked with rake but instead with bwoken

ConcertCam

Imagine yourself at a concert on the streets of Madison, a block away from the Wisconsin State Capitol (known for, among other things, being the largest granite dome in the world), listening to Willy Porter, and waiting for the headliner—Eric Hutchinson

Give Yourself a Security Makeover

While visiting Twilio for a day on my two-week programming pilgrimage I learned that I’ve been pretty insecure. Joël Franusic (@jf) explained that I needed a security makeover. You probably do too! So let’s get started. Follow the suggestions as you...

You Don’t Know Your Visitors, So Stop Pretending

Part 1: What is analytics really?

Web analytics should hurt a little. Not just the pain of seeing your low traffic revealed in hard numbers, but the realization that you don’t really know your visitors.

We programmers tend to be preoccupied by our...

Styleguide Rails

You might as well learn it now, because you’ll be using it in 6 months. Styleguide rails is a cool gem that builds a living, breathing styleguide for your site. You can add it to your project really easily (let’s just do it right now):

gem install

From Ruby to Haskell, Part 1: Testing

You read that right. Or maybe, if you read it as “stop using Ruby and start using Haskell”, you read it wrong. I’m going to show you why I find Haskell to be utterly fascinating and eminently practical.

Foremost, I want to collect some bits and pieces...

Getting Plan 9 running on the Raspberry Pi

More Unix than Unix

Do you like Unix? Do you really like Unix? Well, what if I told you there’s a little-known operating system out there that’s more Unix than even Unix is. Cool, right?

Well it is true! Plan 9 occupies an interesting niche in the...

Testing Security with Brakeman

Security in web applications is not something developers discuss often enough – some think of it as a taboo subject, or something the NOC guys have to deal with. Some treat security as a post deployment afterthought. Sometimes little thought is given...

OMG! Rails Rumble!

Last weekend, three Bendyworkers and a Swink-person (Swink-ee?) participated in the Rails Rumble, a competition to build a web application in just 48 hours. Rather than hacking on the backend like I usually do, I ended up almost exclusively forging...

Cthulhuian Document Preparation With Troff

tl;dr: If you are looking for a lightweight document preparation system in the style of LaTeX, try out troff which is probably already on your system.

Intro

Lurking deep in UNIX, even on your shiny new Mac, is the eldritch horror of troff. It waits...

Don’t Say ‘Emacs’ or ‘Vi’

A brief tour of some other editors

Quick, think of your favorite $EDITOR. If you’re anything like me or the people I work with, you’ve got a horse in this race. And again, if you’re anything like myself or my comrades, you’ll probably say Emacs or...

Version Control for Poetic Time Travelers

Matthew McCullough (@matthewmccull) leads Git workshops across the world. He recently visited Madison, Wisconsin to discuss and demonstrate advanced topics such as rerere merging, the reflog, interactive rebase, cherry-pick, show-branch, branch filtering...

The Hidden Life of Stylesheet Preprocessing

Like any piece of art, a stylesheet should be indivisible and bold, but natural. It should arrive to the browser in one elegant file, a succinct connection between page semantics and presentation. Preprocessing distances a stylesheet from the Sturm...

Don’t Play CSS Tetris

“Want to see the future?” Dale Sande (@anotheruiguy) leaned toward me with a conspiratorial gleam in his eye. His laptop was crowded with code and design layouts. He proceeded to show me that I have been doing CSS all wrong.

My first mistake is using...

Bwoken Version 1.1 Released

Version 1.1 of Bwoken has just been released! This feature release includes the ability to run UIAutomation tests on a device rather than the simulator, in addition to a number of internal improvements to Bwoken.

Developers we come across have always...

Respond With An Explanation

Using respond_to and respond_with is, as Rails tends to be, Convention Over Configuration™. This is a wonderful thing, but proficiency requires an understanding of these conventions which, in the case of respond_with, may be less than intuitive. What...

Introducing Bwoken

Bwoken is a UIAutomation test runner for both iPhone and iPad, which lets you write your tests in CoffeeScript, then run them in bulk from the command line. Watch the video, then head on over to its homepage!

George Boole Returned As a Zombie and is Gnawing on My Brain

This is about that oft-neglected corner of programming, the humble boolean. Perhaps, by thinking about what’s going on in many boolean expressions, we can iron out his quickly-forking complexity. And, oh, what luck! Here’s a slab of boolean logic that...

ConciseKit

Note: This article was cross-posted from Brad’s personal blog: Naming Things is Hard

Over the last month at Bendyworks, I’ve been pairing with Jaymes on our latest initiative: adding iOS development to our repertoire. As a Ruby developer learning...

UIAutomation and Pusher

UIAutomation is Apple’s answer to integration tests. It allows you to drive and run assertions against your application using a javascript library that interacts with user interface elements. It’s great to have such a powerful tool, but what if you...

Our first iOS app

We just launched our first iOS app: TravisCI! It lets you browse and view live updates of builds submitted to Travis-CI.org.

We chose to build a native front end to Travis CI in order to hone our iOS skills while working with a RESTful API. During...

From 0 to 1 Million in 6 Hours

Having an office less than a block away from a protest that’s making international headlines gave us a unique opportunity: use our technology prowess to experience live events in a new way. So what did we do? We wrote a site using Rails, WebSockets...

HTML5, AJAX, IE, and Shivs

Standard procedure for using HTML5 on IE is to use a library like html5shim, html5shiv, or Modernizr. These tools are, in general, quite great. We at Bendyworks tend to use Modernizr.

Unfortunately, something happens when you combine HTML5 elements...

Script to Use Gems Locally, but Not on Heroku

We’ve already blogged about how heroku and bundler occasionally don’t play nice. Instead of describing an elaborate checklist that doesn’t work in all cases, just do two things.

First, make your Gemfile look something like this:

source :rubygems...

Excluding Dev and Test Gems from Heroku

Update: Check out our newer blog article that shows a better method of excluding dev and test gems from heroku.

Heroku is awesome. Bundler is awesome. Combining the two… not always awesome. Are you getting this when pushing to Heroku?

You have modified...

Copyright 2017. Made with love by Bendyworkers in Madison, Wisconsin