Scott Watermasysk Husband, Father, Bootstrapper, Developer, Builder, Shipper.
Shorts are small posts and links. These are auto posted to @scottw on Twitter.

Managing My Menu Bar

My menu bar would be 100% out of control without the excellent (and free) app Dozer.

Dozer allows you to quickly toggle your menu bar icons away. You can also optionally drag the ones you use all the time outside of it.


# - Aug 16, 2019

SRI Hash Generator

allows web developers to ensure that resources hosted on third-party servers have not been tampered with. Use of SRI is recommended as a best-practice, whenever libraries are loaded from a third-party source.


# - Jun 10, 2019


This is a great way to not only read and manage RSS feeds, but keep up on selected Twitter accounts and newsletters.


# - Jun 10, 2019


Monodraw allows you to easily create text-based art and visually represent algorithms, data structures, binary formats and more.

A nice way to update your code documentation game.


# - Jun 06, 2019

๐Ÿ’ก TIL: Locking Versions on Netlify

I ran into an interesting build issue after updating a couple of Ruby gems and NPM modules.

By default, when you create a new site on Netlify your Ruby/Node/etc. versions are locked to recent defaults unless you explicitly specify the versions using .ruby-version, .nvmrc, etc.

I suggest going forward, you always an explicit version. By locking the core dependency versions, you will help ensure if you can build it locally, you will likely be able to build it on the remote servers as well.

# - May 29, 2019

๐Ÿ’ก TIL: Overriding a .gitignore

In my default .gitignore (~/.gitignore), I have .ruby-version excluded.

I needed to include a .ruby-version file to fix a Netlify build issue.

Today I learned you can override a .gitignore with a --force argument.

git add .ruby-version --force
# - May 29, 2019

๐ŸŽง 30 Second Powerbeats Pro Review

Quick initial review:

  • It does not look like I left a Q-tip in my ear
  • They are not white
  • Good snug fit with multiple sizes available
  • Good sound quality

As of today, recommended.

# - May 13, 2019

Spring 2019 Podcasts

Much like my editor theme, my tastes and interests in podcasts fluctuate.

Here are some of the newer ones I am listening to:

Much like my editor theme, my tastes and interests in podcasts fluctuate.

Here are some of the newer ones I am listening to:

# - May 08, 2019

๐Ÿ’ก๐Ÿค” Early Thoughts on TypeScript

I have not written enough TypeScript to know if I love it, hate it, or am just indifferent. In building my first small project, I found myself fumbling around the types and syntax quite a bit.

However, in just about every case, where I compiler complained about lack of type or an invalid type it saved me from code that likely would not have worked. Even better, the speed at which you receive the feedback is impressive.

# - May 08, 2019

โŒจ๏ธ ๐Ÿ˜ฎWhat the Shortcut?

I could not figure out why VSCodeโ€™s shortcut for the command pallet was not working (โŒ˜ + โ‡ง + P). (There was another app bound the shortcut.)

How do you find out which app is bound to a specific shortcut?

It turns out there is an excellent (free) app for that ShortcutDetective.

You have to enable the accessibility settings, but a couple of seconds later, I found the buggerโ€ฆ.Noizio (which is a great app as well).

# - May 01, 2019

โ„๏ธ Nord

I need to be honest with myself (and you). I will switch my IDE theme at least once a month. Every month, I swear this is the one and I dump it every time.

Probably the wrong time of year for this, but I am a big fan (for now๐Ÿ˜)


# - Apr 23, 2019


This might be my favorite Kickstater to date. Works exactly as billed. Stick it to the bottom of your laptop and you have an on demand stand. Note: it does nothing to prevent your MBP keyboard from crapping out on you. ๐Ÿ˜

Moft Back Moft Front


# - Apr 22, 2019

๐Ÿ”ฎ Sorbet

This looks interesting (A static type checker for Ruby) especially as I start to experiment with TypeScript (for JavaScript).


# - Apr 22, 2019

TIL: Do Not Name a Postgres Table User

Working through a handful of JavaScript ORM tools and twice today I accidentally created a table called User.

This conflicts with Postgresโ€™s own User table. Postgres is OK with this assuming you use quotes around user in your queries (and it becomes case sensitive).

Loosely translated, do not name your table User. I guess if you are switching databases, the above is necessary, but it is probably just as easy to rename your table at that point.

# - Apr 11, 2019


One click IDE for Github. Just point it at a repo and you are off and running. I even wrote this file in it using my own ruby helpers.

# - Apr 08, 2019

A fake SMTP server to test and view emails in development.

I am a long time happy MailCatcher user, but I love the idea of something that just runs somewhere else and is easily accessible in my browser.


# - Apr 08, 2019

Faster QuickTime Videos

If you want to speed up a QuickTime video, hold down โŒฅ (option) and click theย ยป on the video. Each click will speed up by about .1x all the way up to 2x.

# - Apr 04, 2019

Vim and TypeScript

Out of the box, Vim does not know what to do with TypeScript.

These two plugins make it a much better experience.

Syntax: TSServer:

# - Apr 03, 2019

๐Ÿ˜• TypeScript

Starting to dig into TypeScript. I am not sure if I love it or absolutely hate it.

# - Apr 02, 2019

Revisiting delayed_job

After browsing the e-petition and source the one ruby gem that stood out to me is DJ. I am a huge fan of Sidekiq and use it everywhere. However, for small side projects, I might need to revisit DJ.

# - Apr 01, 2019


Speaking of intellisense/autocompletion in Vimโ€ฆI am still very happy with TabNine. All I can say is โ€œIt Just Worksโ€.


# - Apr 01, 2019


Intellisense engine for vim8 & neovim, full language server protocol support as VSCode.

There are a couple of extra steps to get Ruby setup but seems to work really well. Surprisingly no JavaScript support as far as I can tell.


# - Apr 01, 2019

Vs Code Tab By Number

One of the things that trips me up with VS Code is my muscle memory for switching tabs with โŒ˜ + number. I used this often with Atom and I am pretty sure I picked it from Sublime and/or Textmate.

Digging through the existing bindings, you can do this today with โŒƒ + number. What makes this worse for me, โŒ˜ + 1, โŒ˜ + 2, etc do something today, but I am honestly not sure what it is. :)

There is an Atom commands plugin, but I do not need (or want) everything that comes with it. Instead, I went ahead and edited the following keybindings (under workbench.action.openEditorAtIndex).

Tabs by Number Bindings

# - Mar 28, 2019

The Market

From todayโ€™s Daily Stoic:

โ€œThe market might be rationalโ€ฆbut the people who comprise it are not.โ€

# - Mar 27, 2019

Sorting Your Gems

I was looking through the source, and the first thing that jumped out at me was the Gemfile was sorted (within each group). This made it much easier to scan and think about their dependencies.

Using Vim, I was able to sort my Gemfile in a couple of seconds.

  1. Select the lines within the group (or all of those outside of a group).
  2. enter command mode (:) and type sort

Thatโ€™s it. Now, if you were like me, you still sometimes flipflop between โ€˜ and โ€œ (working on it!), you will need to pick one (โ€œ) and do a find and replace %s/'/"/g as well otherwise things will not sort quite right.

# - Mar 25, 2019

Better than MVP

โ€œYour smallest viable audience holds you to account. It forces a focus and gives you nowhere to hide.โ€

This is a much better way to think about your next product. What is the smallest audience you can target and still be successful?


# - Mar 25, 2019

Do Not Overthink Ruby

I was reading through the Ruby regex docs trying to figure out how to iterate over a string and replace all the matches of a particular pattern.

The tricky part is the matches are not one to one (not just a find and replace). I tried a bunch of different things and then started wishing gsub took a blockโ€ฆ.turns out it already does this.


"1234".gsub(/\d/) {|i| i.to_i * 2} # 2468

Even better, it handles all substitution

"Square this number: 5".gsub(/\d/) {|i| i.to_i * i_to_i}
# Square this number: 25
# - Mar 21, 2019


One of the best ways to improve page speed and reduce memory is to skip your ORM, especially when you are doing multiple small repetitive looks ups (ie, does a record existing in N tables).

This gem makes this approach very easy.


# - Mar 19, 2019


โ€œIf you are NOT a professional designerโ€ฆdesign fewer things.โ€

This is my favorite line from our newsletters/blog in the eight years since we started.

Focus on the things that matter and that you can do well (and quickly).


# - Mar 13, 2019

TIL: Curly Bracket Substitution

You can use curly brackets for quick substitution in a shell command.

Curly Backet Example

Instead of manually typing the path out twice (or even tab completing it), you can list the parts to be swapped within curly brackets ({}).

# - Mar 12, 2019

CtrlP Shortcuts for Rails

I liked how @garybernhardt had specific rails shortcuts in vim for his Selecta script. As a fan of CtrlP + Ag, I did not want to switch, so I came up with the following which works well.

map <leader>gv :CtrlP app/views<cr>
map <leader>ga :CtrlP app/assets<cr>
map <leader>gc :CtrlP app/controllers<cr>
map <leader>gw :CtrlP app/workers<cr>
map <leader>gm :CtrlP app/models<cr>
map <leader>gl :CtrlP lib<cr>
map <leader>gs :CtrlP spec<cr>

The pattern should be obvious. One mistake I initially made was using:

map <leader>gl :CtrlP<cr>lib/

This ends up just entering lib/ for you in the search and does not explicitly limit the search to the lib directory. This is noticeably slower since each keystroke is a wasted search. Also, with a small directory name like lib, it is easy to have invalid fuzzy matches. The CtrlP + directory and then enter keeps the search focused on the specified directory only.

# - Mar 11, 2019

Gruvbox Contrast and ColorScheme Order

In cleaning up my .vimrc, I thought I completely screwed something up. Turns out it was:

If you are setting the value of g:gruvbox_contrast_dark or g:gruvbox_contrast_light and do not see any change try setting the contrast before colorscheme gruvbox in your configuration.

# - Mar 09, 2019

Proxy with Curl

I was working on some reverse proxying today, and I could not for the life of me figure out which headers I needed to make it work.

I would go to the server, make a change, then go to the browser and refresh and so on and so onโ€ฆ

Then it hit me; I was making this way to complicated. An easier solution was to use curl. Two minutes later, I was up and running.

curl --header 'Origin:'

Origin (and X-Forwarded-Host) are common, but different servers/apps have various requirements. Using curl like this makes it far faster to test out without having to reconfigure your server.

# - Mar 07, 2019


There are many GUI database tools available. TablePlus caught my attention because it supports so many different types of databases (especially PostgreSQL and Redis).


# - Mar 06, 2019

Fire Codeโ€™s Retina

About a week in and I am still loving Fire Codeโ€™s Retina typeface. I have already eliminated DejaVu. I still need to spend a little more time with Hack before declaring it the winner.

# - Mar 05, 2019

Spotify Focus >

I have been an off and on subscriber to It is a good app but has some connectivity issues.

Instead, I have been using Spotifyโ€™s Focus genre. It has more consistent access, a wider variety, and it is something I was already paying for.

# - Mar 05, 2019

Are these your kind of people?

The most important question you should ask yourself before you start a new business: Are the people already in this market the type of people you want to help be successful?

Vitamin or medicine? B2B > B2C. Can you charge more?

These are important and need careful consideration. But these questions are minor compared to asking yourself is this where you want to spend the next decade? Are these my kind of people?

# - Mar 05, 2019

๐Ÿซ DotFiles & White Space

I could spend hours reading dotfiles. I always learn something new.

Highlight trailing white space in vim via

`set list listchars=trail:.,tab:>.โ€™ โ€˜highlight SpecialKey ctermfg=DarkGrey ctermbg=Blackโ€™

# - Mar 01, 2019

๐Ÿ“–TIL: Terminal Command with an Editor

via @bphoganโ€™s excellent Small, Sharp, Software Tools: type โŒƒx โŒƒe and it will open the current command in your favorite editor.

Once you save your changes the command will execute. ๐Ÿ’ฃ

# - Feb 28, 2019


Recently started using the Gruvbox theme.

I love that it has both a dark and light option. It totes itself on being better at contrast than Solarized and I have to agree (well, at least it feels better looking at it).


For both the dark and light options I felt most comfortable with the hard option for contrast. For dark, soft and medium where OK. For light, on hard worked.

Mixing it in withe Fire Code Retina and everything feels brand new.

# - Feb 27, 2019

Kung Fu

The money line: โ€œThe 10,000th biggest company in the world is a very successful company, as is the two-person company where the founders each take home $300k/year.โ€

We need more discussion on success not being equal to absolute revenue and team size


# - Feb 27, 2019


A dark theme for just about everything. If โ€œdarkโ€ is your jam and you want Vim, Alfred, ZSH, iTerm, etc. to all match, this is a great theme.


# - Feb 27, 2019

Ruby - Who Called This Method?

I wanted to add a header on all my PostMark emails. Instead of manually editing each method, I dropped this one-liner in.

headers["X-PM-Tag"] = caller[0][/.*โ€™/][1..-2]`

Now, each email gets tagged with the current mailer method.

# - Feb 26, 2019


This has been on my list to play with forever. Sequel provides a nice mini layer directly on top of SQL. Sometimes all the setup to use an ORM is not worth it. The setup for Sequel is simple and there are lots of extras for things like models and migrations if you need to go to that level.

# - Feb 25, 2019

๐Ÿค˜ Multiple Step Zapier

My first time using Zapier for multiple steps. Never realized you can use the data from multiple steps in others. This makes Zapier infinitely more useful than before (and I was already a big fan).

# - Feb 25, 2019

๐Ÿ“• Company of One

Great book by @pjrvs. Biggest personal take away - before hiring, see if there are options to automate the tasks driving the hire. Being busy is not enough and can come back to bite you in the future.

# - Feb 25, 2019

Squiggly Heredoc

Continueing the trend of things that existed for years in Ruby without my knowledgeโ€ฆ

Heredocs have often had weird formatting due to leading white spaces. Active Support has a helper method strip_heredoc, but since Ruby 2.3, you can use the squiggly โ€˜~โ€™ instead.



But now you can do:


I have been trying to be more cognizant of dependencies. Seems trivial, but this solved a big problem with my Jekyll Rest project and did not require another dependency.

# - Feb 25, 2019


I have been playing around with this the last couple of days. Impressed with itโ€™s simplicity. If I move forward with Teensy, it will likely be built on top of Roda.


# - Feb 25, 2019

From Email to Jekyll to Netlify

Assuming everything goes according to plan, you should see this message on Monday morning.

Prior it started in my inbox, hit the iCloud server, was forwarded to Zapier who pinged my server. From my server it was sent to Github who promptly let Netlify know there was something new. Netlify rebuilt my site and eventually Buffer noticed the new content and sent it to Twitter.

A little over complicated? Yes. But still awesome and very useful.

# - Feb 25, 2019

Icon SVG

There are so many great SVG resources today. Unfortunately, many of them are also quite slimy. This one, IconSVG, looks to be one of the good ones. Simple, clean, and free.


# - Feb 22, 2019

๐Ÿงช Regex 101

I still like the simplicity of Rubular (and the Ruby focus), but being able to also write multiple tests around a regular expression in the browser is a nice very bonus.


# - Feb 21, 2019

Joe Schmoe

โ€œAn illustrated avatar collection for developers and designersโ€

I love simple and functional tools like this. Easy and free to use as well.


# - Feb 20, 2019


โ€œis essentially a curated clipboard historyโ€. I use this app all the time now and for much more than just code.

I have a bad habit of hitting โŒ˜+c multiple times which meant everything was going to SourceNote. I changed the short cut to โ‡งโŒ˜+c. ๐Ÿ’ฏ


# - Feb 20, 2019

Announcing Teensy: A little bitty ruby serverless framework

I was playing around with FaaStRuby when it dawned on me that everything needed to build my own serverless ruby framework was right in front me (Heroku + Sinatra).

Then, all I remember seeing is dollar signs and code flying across my terminal. On my second git push to Heroku, Teensy was born.

I am only semi-joking. Most of what you would do โ€˜serverlessโ€™ could easily be accomplished with this code.

If I am really missing the mark on some thing, please let me know @scottw.

# - Feb 19, 2019

Hey Guys

This is a horrible way to start an email or post to an online forum to a community at large.

What to replace it with? Hello, Howdy Folks (always fun!), or nothing.

# - Feb 18, 2019

Magic Login Links

I initially liked the idea of magic login links. One less password sounded great. But now, I find they only cause confusion and slow me down, especially in native apps where a password manager may now work.

I must have half a dozen unused Notion accounts. Did I use my work email? My Gmail? What about my personal email? With notion, in particular, they just create an account for any email you enter.

Please keep it simple and just let me enter a username and password. If you want to confirm the email after I sign in, go for it (but please donโ€™t).

# - Feb 18, 2019

Programming Language Quirks

With Ruby, I am generally joyed by the many little language quicks. My reaction is almost always, โ€œhmmโ€ฆthat is kind of niceโ€.

However, when it comes to JavaScript it is generally, โ€œWho the F thought that was a good ideaโ€.

Selection bias for sureโ€ฆbut you can not deny one was written for the joy of programming and the other got lucky.

# - Feb 18, 2019

๐Ÿ’ก Less SaaSโ“

It is increasingly easier to deploy small apps and services via Docker, Heroku and Netlify Buttons, and Digitial Ocean droplets to just name a few.

If you factor in privacy concerns, I am wondering (and hoping to a certain extent) if we will see a push away from SaaS and more semi-self hosting.

# - Feb 15, 2019

๐Ÿ‘ Git History

An impressively easy way to view all the changes for any file in Git. You can run it locally on any git repo or on Github with a specified URL.

If I had one wish, it would be to optionally see what changed between two commits.


# - Feb 15, 2019


This is an excellent replacement for RequestBin. Looks to be feature comparable. No idea who/what is behind it, but I am glad it is an option.


# - Feb 14, 2019

โ€œuses just-in-time preloading โ€” it preloads a page right before a user clicks on it.โ€

It is not that helpful on a site without proper HTTP caching, but on a static site with Netlify, fast pages get even faster.


# - Feb 14, 2019

Corrupting Google?

I wonder if the rocket growth of less than scrupulous companies like Facebook and Uber is ultimately what cost Google to lose its โ€œdonโ€™t be evilโ€ way.

You see them quite literally printing money, stealing your best talent and you start to think, why not us?

# - Feb 13, 2019


I am continually impressed with what can be accomplished with Zapier. It is very polished, has great support, and is an ideal way to link together multiple services.

Yesterday I was able to help a customer wire up a brand new integration using two simple webhooks.

The first took a webhook from the customerโ€™s โ€˜form vendorโ€™ sent the data Zapier. The next webhook was from within Zapier and posted back to KickoffLabs. All in, it took less than 10 minutes to set up (and most was trying to figure out how to use the customerโ€™s form vendor).

# - Feb 12, 2019


gotop is an activity monitor for your terminal. You can install it in a couple of seconds via homebrew:

brew tap cjbassi/gotop
brew install gotop

Works great and I have love the vim inspired keyboard navigation.


# - Feb 09, 2019

Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib

This was a horrible way to spend a Friday afternoon. At some point, I installed something via Homebrew that borked/updated readline.

I still do not understand the issue 100%, but my best guess is ruby gems with native extensions were failing because of the dependency change. How it happened? Computers!

Re-installing Ruby (rbenv install ruby_version) seems to have addressed most of the issues (also needed to update bootstap to a newer version).

Wish I had a better recommendation for how to fix it and why it worked, but hopefully this is start for others.

# - Feb 08, 2019

Sparks of Joy - 1

Here are some nice newish things for me:

  1. @ScoutAPM - Simple and effective app performance monitoring
  2. @zeithq (now) - I am just scratching the service, but impressed the zero to useful experience
# - Feb 08, 2019


I saw this little doozy as recommend code for (Ruby) API access:

http.verify_mode = OpenSSL::SSL::VERIFY_NONE

This effectively disables SSL checks and is not something anyone should be recommendingโ€ฆ.ever.

# - Feb 07, 2019

โค๏ธ Stimulus

I donโ€™t get the fuss over React Hooks (likely since I have yet to touch React). ๐Ÿ˜Ž

I am surprised there is not more written about Stimulus. It is the first thing I have seen in years that I wish we had as an option when we started KickoffLabs.

# - Feb 06, 2019

A Couple of Months with Grammarly

Grammarly had a great deal around the new year on the paid plan. I am certainly not the best endorsement for a grammar/spelling product, but it has helped me quite a bit.

I find it helps me get into the zone more since I am not as worried about cleaning up what I write.

The out of the browser tools/integrations still need work, but overall it is very helpful.

# - Feb 06, 2019

Ruby Lonely Operator

Ruby 2.3 introduced a feature called the โ€œLonely Operatorโ€ (which I somehow missed until recently).

Instead of:

user && user.address && user.address.street

You can write it like this:


# - Feb 05, 2019

Duet Display

Turn your iPad into a second monitor! The app, once you get it installed, is great1.

The install steps and experience is not exactly Apple like, but the end result is borderline magical.

  1. Ex-Apple Engineer tagline his horrible.ย ↩︎


# - Feb 05, 2019

Think Simpler

For my โ€˜shortsโ€™ feature, I wanted to remove some of the friction publishing multiple times a day to a Jekyll blog.

My first thought was using the Github API. This involved getting a user token, understand the API, grabbing my content, using the API, etc. Then it hit me. The tool I was using to publish the post was local only at least for now. So instead of going through all the Github API hoopla, I just write to git.

Publish to Git

This version took all of 2 minutes to do (most of which was spent googling the -C flag).

# - Feb 04, 2019

Updating 1Password on OS X

I noticed 1Password had not been updated in a while. The background helper is too quick to restart before the AppStore can finish the installation.

The fix is to โ€œsuper quitโ€ 1Password with command+option+control+q (โŒ˜โŒฅโŒƒq).

# - Feb 04, 2019

Insomnia REST Client

I have used Paw as my local API client for a couple of years, but recently switched to Insomnia. I am finding Insomnia much simpler and intuitive to use.


# - Feb 02, 2019

Tailwind and Stimulus: Declarative Done Right

It dawned on me today that TailWind and Stimulus is (if you squint hard enough) the declarative experience Microsoft tried to bring to market with the early versions of ASP.Net.

# - Feb 01, 2019

Git From Outside the Repo

You can use the -C flag to execute git commands from somewhere else on your computer:

git -C /some/other/path status
# - Feb 01, 2019


Built a little utility app with Stimulus. Set up was a breeze with the Webpacker gem.

Definitely something worth checking out.


# - Jan 31, 2019

Embracing Constraints

This is something I constantly struggle with when it comes to software.

At this point in my career, I can build just about anything given enough time. However, it often means I can get in my own way of just getting started.

This blog is a prime example. I have been going back and forth on how to mix quicker short form posts and longer content in my head for yearsโ€ฆbut once I just embraced the constraints of an existing product, I was able to finally make some progress.

# - Jan 31, 2019

Zone Vision

Zone Vision is a handy way to view DNS settings in your browser.

It is also easily sharable via a link which makes it a great tool if you have to support customers making DNS changes.


# - Jan 31, 2019

Night Owl

A handy OS X menu bar app to quickly toggle in and out of Dark Mode. Also has an option to do it at a set time and sunrise/sunset.


# - Jan 29, 2019


Finally signed up on It is still all new and fresh, but I love the flow of the site. Plus, it is fast to navigate and use.

As of now, I regret waiting so long.


# - Jan 28, 2019

Netlify CMS

Not the most obvious setup instructions and not sure how well it will scale as the amount of content grows, but it should remove some friction in writing these little shorts.


# - Jan 25, 2019

Company of One by Paul Jarvis

Finally gave up trying to read it (kids!) and bought the audio version.

Superb book and fits well with own model for growing a business long term. Recommended.


# - Jan 24, 2019

First Short

The Shorts section of my blog is an attempt to capture small posts that would normally be wasted as tweets. If everything goes according to plan, they will render like normal tweets, but will exist outside of Twitterโ€™s walled garden.

# - Jan 23, 2019