RSSAmplifier

Blog

Bendyworks Blog

Blog from Bendyworks

bendyworks.comRSS feed ↗233 posts

Latest posts

Let Us Dismantle the Artifice of Standup

Originally published at valerieburzynski.com For the uninitiated, "Standup" is a metaphoric title given to a daily team meeting where all attendees stand. The intent of this is to hasten the meeting while achieving an objective: to have the team discuss... ]]>

How to Get Your Capybara System Tests Running in a Docker Dev Container on Apple Silicon

Originally published at valerieburzynski.com The Journey Begins At the end of last year my main work machine was upgraded to a MacBook Pro with an M1 Max processor. I quickly got to work setting up my usual dev environment, then cloned the git project... ]]>

Rails Test Driven Development Fibonacci

In this ongoing series, we're going to explore Rails Test Driven Development by focusing on katas. In the art of Karate, a kata is a form, or choreographed sequence of movements, practiced repetitiously with the intent of making incremental improvement... ]]>

This RegEx Will Change How You Design With Tailwind

This RegEx Will Change How You Design With Tailwind Are you using TailwindCSS in you project? … of course you are it's all the rage lately, and everyone’s using it. Need to change all the color based utilities in your app because you need to... ]]>

Hooked on Phoenix

Hello again. Thank you for sticking with me through the first three posts in this series. We are finally to the part that triggered the series in the first place. Phoenix is great at helping us stay focused on the server end of the client-server paradigm... ]]>

Can you hear me now? - Using Phoenix Presence

Welcome to the third installment of our series on building a 'Single Page App' with Phoenix LiveView. In this series we are exploring building a highly interactive application that most devs would assume has to be coded in javascript in the browser... ]]>

Getting Started with Phoenix LiveView

As promised in the first article of this series we are about to embark on a journey to build a collaborative rich text editor widget. In this post we will do all the setup work of starting a new Phoenix LiveView app, adding a Document context and doing... ]]>

Stranded at the Edge

As an industry we’ve been very focused on frictionless and fast user interactions on the web, and rightly so. We’ve been pushing our tools to the limit for decades. Every turn of the wheel brings progress, but also its own set of weaknesses. In the... ]]>

The Importance of Small Conversations<br><small>And how to make them happen in a remote setting</small>

We need relationships in our lives. It’s part of what makes us human. However, in an era of remote work and outside restrictions, how do we make time for the small conversations that we used to take for granted in our lives and on which so many relationships... ]]>

Making Snow Angels in a Brownfield

Thinking about my last post triggered me to finally read Kill it with Fire by Marianne Bellotti. The book is all about modernizing legacy systems, which is something developers have to do frequently. Often, systems that are working well tend to get... ]]>

Done is a four letter word

When I was a child, my parents had this concept about words we don't say. We don't say "sh*t" or "d*mn". They called them "four letter words." Kind of silly in retrospect, given all the four letter words we do say. What would the world be without love... ]]>

Happy Holidays From Bendyworks

When the end of the year approaches and the weather (depending where you are!) begins to have a snap in the air, the holiday season is near. Here at Bendyworks, the change isn’t personified in an office tree or snacks showing up in the breakroom. That... ]]>

Refactoring Tailwind CSS React Apps with Twin.macro

Why Tailwind is awesome TailwindCSS is taking the world by storm. It is essentially a set of composable, opinionated utility classes that allows for a consistent set of colors, spacings, sizes, shadows and more. Tailwind gives a developer or designer... ]]>

Notes from ElixirConf 2021 - What's Now and What's Next

Bendyworks is dipping it's collective toes in the Elixir waters. Several of us have been reading, taking courses and building practice apps to become proficient at writing Elixir and using the Phoenix framework. This activity includes sending a contingent... ]]>

Wrangling Complex Rails apps with Docker Part 3 : Testing Rails under Docker

In the previous post in this series , we created a portable development environment with docker-compose. I've noticed that a lot of blog posts and tutorials for Dockerizing Rails apps tend to finish before covering the subject of testing within Docker... ]]>

Hopping into Data Con LA 2021

I really wanted to attend Data Con LA in person this year. Unfortunately, that wasn't an option, thanks to the delta variant of COVID-19 and Americans not being vaccinated at a high enough rate to reach herd immunity. So instead, for the second year... ]]>

Working Remotely: A Look at What Works

In the time following the start of the COVID pandemic, Bendyworks transformed from an office-based team of software developers in downtown Madison, Wisconsin, to an all-remote company with employees in half a dozen states. In spite of the many challenges... ]]>

Implementing React Native Responsive Design Part 2 : Adapting

Building phone apps used to be simpler. There were a small number of phone sizes and an even smaller number of screen sizes to support. Your app always took up the whole screen so developers tended to target particular screen sizes and exact pixel... ]]>

Implementing React Native Responsive Design Part 1 : Limiting and Scaling

Phones and tablets come in all shapes and sizes. Now that Mac, Windows and tvOS support is in the works, the variation in screen geometries will only grow even more varied. On the web we have media queries and responsive layouts via Cascading Style... ]]>

Wrangling Complex Rails apps with Docker Part 2 : Creating a docker-compose configuration

In part 1 of this series , we created a Dockerfile that encompasses the Rails portion of our app, now we need to connect it with other services. docker-compose is a lightweight orchestration tool that's perfect for this purpose. I don't recommend using... ]]>

Wrangling Complex Rails apps with Docker Part 1 : The Dockerfile

One of the most difficult things as a developer when working on a team is onboarding. The process usually goes something like this: Look at the README, install dependencies, realize that something is missing or out of date, ask another developer for... ]]>

Building Reactive Rails applications with StimulusReflex

Introduction Rails is a highly productive, highly opinionated, and very popular framework in which to create monolithic web applications. Due to the dominance of reactive Javascript frameworks such as React and Angular, the monolithic style of creating... ]]>

There and Back Again - A Retention Story

Recently, an advisor asked me a simple question: "What's Bendyworks' customer retention over the past 18 months?" Truth to tell, I really didn't know, so I decided to go look, expecting a mix. I was surprised to find that every single project was either... ]]>

Case of the Missing Comma

What The Javascript? Consider for a moment, the problematic code sample below that unexpectedly evaluates to undefined : Exhibit A // for educational purposes only; the following line is a bug _ . get ( state [ ' key1 ' , ' key2 ' ], {}); It's using lodash ]]>

How to Setup Windows for Development: An experiment in using WSL2

When I first heard about Windows Subsystem for Linux (WSL), I got excited. I hadn't used Windows for development in years. Configuring Node and Ruby on Rails in Linux or on a Mac was easy; so I didn't have much impetus to switch. I'd also heard of... ]]>

Ionic React and Redux

Redux is a popular tool which is used to manage application state in JavaScript. Redux is based on three core principles : that application state should be kept in a single store, that the state should only be changed by discrete and well-defined actions... ]]>

Rails in Real Time: Blastoff

When? Now! Interactions on the internet today appear to be so fluid and instant. It's becoming more unacceptable from today's user experience perspective to have to refresh the web page when data changes. We want the changes to be reflected instantly... ]]>

Capacitor Plugin for Text Detection Part 6 : Highlight text detections

This is part 6/6 of the "Capacitor Plugin for Text Detection" series. At this point, we have both android and iOS plugins in place and ready to use. In this post, let's flesh out our sample app, ImageReader to use the result from the plugins to obtain... ]]>

Capacitor Plugin for Text Detection Part 5 : Android Plugin

This is part 5/6 of the "Capacitor Plugin for Text Detection" series. In the previous post , we walked through how to use our plugin in the sample app, ImageReader . In this post, let's dive into developing our android plugin. Android Plugin To use... ]]>

Capacitor Plugin for Text Detection Part 4 : Using the Plugin

This is part 4/6 of the "Capacitor Plugin for Text Detection" series. In the previous post , we cleaned up the web implementation of the plugin and added a shim between our plugin and client code. In this post, let's look into actually using the plugin... ]]>

Capacitor Plugin for Text Detection Part 3 : Web Implementation of the Plugin

This is part 3/6 of the "Capacitor Plugin for Text Detection" series. In the previous post , we created an iOS plugin. In this post, while we aren't quite implementing a web plugin, we'll modify the web plugin to reflect the fact, and also add a shim... ]]>

Capacitor Plugin for Text Detection Part 2 : iOS Plugin

This is part 2/6 of the "Capacitor Plugin for Text Detection" series. In the previous post , we created a skeleton plugin and a sample app ( ImageReader ) to work with the plugin. In this post, let's dive into creating an iOS Plugin for detecting text... ]]>

Capacitor Plugin for Text Detection Part 1 : Create Plugin

Introduction In this series of blog posts, I'm going to walk through building a Capacitor Plugin, specifically a Text Detection plugin using CoreML and MLKit. Capacitor plugins are handy when you're writing a Hybrid App with Ionic or a PWA but want... ]]>

JSON API Phase 4: Ember

Building an Ember App that connects to a JSON API server Phase 1: Setting up your projects Phase 2: Designing your API with Swagger and JSON API Phase 3: Developing an API with Express and Swagger Phase 4: Building an Ember App that connects... ]]>

Ionic: Bringing Us Closer

Tools, tools and tools It's good to have different tools to solve different problems or build different types of web applications and websites. This gives developers a lot of power, flexibility, and ability to really squeeze all of the power and potential... ]]>

Bendyworks Goes Remote

Bendyworks has recently been exploring how to better support remote workers, with the end goal of becoming a fully hybrid remote office. We have always supported remote work when necessary or beneficial, but until now we have not supported fully remote... ]]>

Rails 6: Action Text

Introduction Rails 6 is now out and can be used by the public. In a previous post , I took a look at Active Storage; a new framework bundled with Rails 5.2. The framework highlighted today comes fresh out of the Rails 6: Action Text. We'll be going... ]]>

Maydm Visits Bendyworks

Bendyworks recently had the amazing opportunity to host a small get together for the students of Maydm . Maydm describes themselves as: Integrating computer science learning, mentorships, & internships through programs that prepare students for... ]]>

Rails 5: Getting Started with Active Storage

Introduction When storing static files in Rails, the first toolsets I reach for are 3rd party gems like: CarrierWave or Paperclip (before they deprecated it in favor of Active Storage). Active Storage was introduced with Rails 5.2. Check out the ]]>

A month of Flutter: a look back

This is it. 31 blog posts in 31 days. Writing a month of flutter has been a ton of work but also lots of fun and a good learning experience. I really appreciate how supportive and and positive everyone as been. Publishing experience For the series... ]]>

A month of Flutter: the real hero animation

For the last post before the month's wrap up tomorrow, I wanted to do something more fun: use a hero animation between the home page list and the individual post page. When I first implemented the Hero animation it never worked going back from a ]]>

A month of Flutter: user registration refactor with reactive scoped model

Yesterday I implemented saving new users to Firestore but I wasn't happy with the implementation. So today I refactored everything , well not everything but a lot. There are still areas for improvement but I like the general pattern being used now. ]]>

A month of Flutter: WIP save users to Firestore

Today was supposed to be simple. Take form values , save them in Firestore . It works but the current implementation is messy so I'm going to walk through the work in progress (WIP) code and refactor it tomorrow. The larger architectural change was... ]]>

A month of Flutter: Firestore create user rules and tests

When a user signs in with Google I'm going to create a user document in Firestore. Each authenticated user should only be able to create one user document. These documents will eventually be readable by other users so Firestore needs to have server... ]]>

A month of Flutter: set up Firestore rules tests

One aspect of using Firestore for my data backend means I need to be certain my security rules are configured correctly. Otherwise users might be able to read or write date they shouldn't have access to. A few days ago I set up Firestore in the server ]]>

A month of Flutter: awesome adaptive icons

For this festive day of Christmas, I'm going to do something more fun and add a fancy icon. For android I will be using an adaptive icon so that it looks good in any shape and has a nice wiggle of movement . A big thank you goes to @tommy_emo_ for... ]]>

A month of Flutter: setting up Firebase Firestore

After a user signs in with Google and registers , their info needs to be saved to a databasee. I'm going to use Firebase Firestore as my backend. Within the birb codebase I'm going to create a server directory and initialize a Firestore project inside... ]]>

A month of Flutter: testing forms

With the new user registration form in place, it's time to make sure the form is tested and will work as expected. There are basically five different states that need to be tested. Default state This is the view users will first arrive to and here... ]]>

A month of Flutter: user registration form

After a user navigates to the registration page , they should be able to enter their name and agree to the Terms of Service/Privacy Policy. I'll start by updating RegisterPage to render a RegisterForm widget that I'll create in a minute. Wrapped around... ]]>

A month of Flutter: navigate to user registration

With users now being able to sign in with Google , I want to have them confirm their name and agree to a terms of service. To lay the groundwork I'm going to add a placeholder RegisterPage and navigation to it . This will be my second page, of what... ]]>