The Blog
Sometimes we write stuff.
You can read it here now, or later with the RSS feed,
or Subscribe to our (almost weekly) newsletter.
-
· Barry Hess · TIL
TIL: Deploying a Sinatra app to Render.com
This morning I wanted to deploy a simple Sinatra app to Render.com. It wasn’t super obvious to me, so I figured I’d write down what worked in the end.
First, a Gemfile:
# Gemfile
source 'https://rubygems.org'
gem 'sinatra'
gem 'sinatra-contrib'
gem 'puma'* I’m pretty sure
sinatra-contrib
is not necessary.Also at this point in time you’ll need to
bundle lock --add-platform x86_64-linux
for your Render.com deployment to work.Here’s my
main.rb
"hello world" app: -
My Tears of the Kingdom Addiction
I don’t know how big my internet social bubble really is, but it feels like everyone in
the worldthat bubble has been playing a lot of The Legend of Zelda: Tears of the Kingdom lately. Me included! It’s amazing, and I’m thoroughly engrossed—I think I’ve stayed up playing until 3:00am multiple nights in the past two weeks. That was easier when I was younger, but now my late-30s body and mind feels like mush the next day. My Switch says I’ve put in over 55 hours so far…Why am I staying up playing so late? Can I sue Nintendo for making this game too addicting? (Feel free to reach out with legitimate legal advice.)
For those outside the Zelda Zeitgeist, Tears of the Kingdom is yet another game where you control the hero (Link) and traverse the world and story to save the princess. It’s a franchise known for using pretty much the same story arc, but set in different places and with different mechanics. What makes TOTK a 10/10 game of the year award winner and making me addicted is two-fold:
-
Beware of Free Software
If I want a slice of pizza, I don't expect it to be free. In fact, if you try to offer me a slice of free pizza, I'd suspect there's something wrong with it.
And ever since my kids can understand me, I've taught them to be careful of free stuff. Nothing is free!* Don't take any free candies from strangers!
But on the internet, we expect things to be free. We're more than happy when Big Corporations offer us free software. Want to upload thousands of photos and videos to share with your family, all for the price of nothing? Come on in! While you're at it, can I offer you free email, too?
-
· James Adam · TIL
TIL: Turbo Stream broadcasting needs default_url_options to be set
We've been using Turbo Streams in some of our recent prototypes, which makes it really easy and fun to get responsive and fun interactions set up. However, we kept having issues with images sent in a turbo stream response.
If the response was delivered by a normal controller render, e.g.
class ThingController < ApplicationController
def update
@thing = Thing.find(params[:id])
if @thing.update(thing_params)
respond_to do |format|
format.turbo_stream # renders `update.turbo_stream.erb`
end
end
end
end... then any images included in that template would render as you'd expect.
However, any rendering that was triggered by one of the
broadcast_...
methods from turbo-rails — which is how you get content to update in "real time" across many clients — would break. So changing the controller above to something more like this: -
The Element of Surprise
Good Enough happens to be a remote team. This isn't from some strongly-held belief that remote is best, but rather as a side effect of how we all happened to meet each other. We met remotely, we did not end up all moving into some commune, and so to work together we must work remotely.
Recently we have been talking about what motivates us. The things we said in that conversation could probably turn into a really useful blog post, but I'm not going to write about them right now. I will share that my biggest motivation happens to be this small team itself.
To be able to be in a group like Good Enough where everyone has incredible experience to bring to bear, well, it’s just a complete joy. One of the many benefits fully remote affords is that of surprise. In just a few short months I’m already getting surprised almost daily by the things this team has built.
-
Season 3, Issue 4: Cosmic Staggering Tortoises
1. Weekly Studio Update
Hello. We're going to try doing this newsletter thing regularly. The ambitious goal is to write you a lovely letter every week. Aim for the moon, right? But wait, if you aim for the moon, how in this physical world can you possibly hit a star by accident?
-
Strong Prototypes, Weakly Held
Excuse any obtuse thoughts that make their way into this writing. I sat down to type with My Life in the Bush of Ghosts by Brian Eno and David Byrne as my soundtrack. This is an album I've never listened to before, and apparently I'm supposed to love it or hate it. Mostly the Internet told me this could be a decent album to work to, so let's find out.
(I'm not going to look, but I'm pretty sure Strunk & White would tell me not to capitalize that "in" in the album title. Yet when I look at Apple Music the title has an "In." Spotify has an "In" and a "The" and an "Of." And people give Wikipedia a hard time?)
So about that title. We here at Good Enough have decided to enter a season of prototyping. Our company has a goal to reach sustainability within five years. As with all time, the end of 2027 will likely come sooner than we think. Yet we are planning to spend all of this first year as a full team on things that are not clearly going to pave the road to profitability. Goodness, why?
-
Season 3, Issue 3: Cosmic Maelstrom
1. Team Full
It's exciting times over here at Good Enough HQ!
(There is no Good Enough HQ. I'd say it's in the cloud, but even clouds are now looked down upon as dirtyish things that should not be enjoyed. And not because of air pollution per se, though perhaps because of industry in a sense?)
-
Our ChatGPT Mission Statement
What follows is an edited transcript of my interaction with ChatGPT to help craft a mission statement for Good Enough. The resulting mission statement was surprisingly good and I had some literal LOLs along the way. Though I think we'll leave out the haiku.
-
Actual Customer Support Is Remarkable
What a sad thing to write.
We believe in good software around here. There is a lot of poorly built software on the Internet and in the app stores. Our motivation with Good Enough is to try to put together a few products that feel just right to the folks using them. The things we build, especially those things we charge for, should respect the customer by streamlining something for them that used to be hard. We hope people enjoy using our software, while also not trying to dopamine-hit them such that it becomes addictive.
While we'll do our best, there are still going to be times where we fail in our mission; especially in the beginning as we're figuring out just how a software should work. Those are the times where polite, helpful customer support helps out. Whether a company decides to do this with phone, email, chat, or a combination isn't nearly as important as a human response in a reasonable time.