Hacky Friday Stuff #24.01.2020
Tags: ruby, fullstack, podcast, fridaystuff
Published: 2020-01-24 10:07:08

*Links about web development, product engineering, tools and services from all over the internet.*

[Do better, not best - transitioning to a growth mindset](https://www.nateberkopec.com/blog/2020/01/02/growth-over-results.html)
On how setting goals like 'run a marathon' or 'write 1000 words per day' hurt me more than helped, and what I'm doing now instead.

[From 15,000 database connections to under 100: DigitalOcean's tale of tech debt](https://dev.to/digitalocean/from-15-000-database-connections-to-under-100-digitalocean-s-tale-of-tech-debt-43bj)
In the past seven years, DigitalOcean has grown from garage-band roots into the established cloud provider it is today. Like other transitioning tech companies, DigitalOcean deals with legacy code and tech debt on a regular basis.

[An Empirical Study of Wireless Carrier Authentication for SIM Swaps](https://www.issms2fasecure.com/)
- Is SMS 2FA Secure?
- NO!

[URI.escape is obsolete. Percent-encoding your query string](https://docs.knapsackpro.com/2020/uri-escape-is-obsolete-percent-encoding-your-query-string)
Have you encountered `warning: URI.escape is obsolete` warnings in your Ruby 2.7.0 project? Find out how to fix it!

[Best practices when writing a Dockerfile for a Ruby application](https://lipanski.com/posts/dockerfile-ruby-best-practices)
The simplicity of the Dockerfile format is probably one of the reasons why Docker managed to become so popular in the first place. Getting something working is fairly easy. Producing a clean, small, secure image that will not leak secrets might not be as straightforward though.
This post will try to share some best practices when writing a Dockerfile for a Ruby application. Most of these suggestions should be valid for any other runtime as well.

[Naming: Climbing Towards Abstraction](https://codedevotional.com/blog/naming-climbing-towards-abstraction)
Your code and its artifacts are strewn with names. You name repositories, files, packages, classes, functions, variables, and on and on. The names you choose determine the quality of the conversations you have with your programmer peers.

[Goodbye, Clean Code](https://overreacted.io/goodbye-clean-code/)
When the "dirty" code isn't always bad. Let clean code guide you. Then let it go.

[On Pair Programming](https://martinfowler.com/articles/on-pair-programming.html)
Many people who work in software development today have heard of the practice of pair programming, yet it still only has patchy adoption in the industry. One reason for its varying acceptance is that its benefits are not immediately obvious, it pays off more in the medium- and long-term. And it's also not as simple as "two people working at a single computer", so many dismiss it quickly when it feels uncomfortable. However, in our experience, pair programming is vital for collaborative teamwork and high quality software.

### Tools and libraries

[pxi](https://github.com/Yord/pxi)
pxi (pixie) is a small, fast, and magical command-line data processor similar to jq, mlr, and awk.

[rails-pg-extras](https://github.com/pawurb/rails-pg-extras)
Rails PostgreSQL database performance insights. Locks, index usage, buffer cache hit ratios, vacuum stats and more.

[forme](https://github.com/jeremyevans/forme)
HTML forms library for ruby.

[reverse_markdown](https://github.com/xijo/reverse_markdown)
Ruby gem to convert html into markdown

[fstrings](https://github.com/zverok/fstrings)
Python-alike fstrings (formatting strings) for Ruby.

### Podcasts

[Full Stack Radio | 132: Caleb Porzio - Just Enough JavaScript with Alpine.js](http://www.fullstackradio.com/132)
In this episode, Adam talks to Caleb Porzio about his new UI library Alpine.js.
Topics include:
* What is Alpine and what does it replace?
* How does Alpine compare to Vue?
* How does Alpine compare to Stimulus?
* “Why not just use vanilla JavaScript you dummy?”
* How Alpine works internally
* Patterns for extracting reusable behaviours with Alpine
* The Alpine roadmap

[Greater Than Code | 165: Rubyfmt with Penelope Phippen](https://www.greaterthancode.com/rubyfmt)
Penelope’s Superpower: An extremely cursed knowledge of the Ruby programming language’s grammar, so she tells how [Rubyfmt](https://www.greaterthancode.com/rubyfmt) helps Ruby developers to overcome problems that Rubocop doesn't solve.

[Code[*ish*] | 53. Scaling Telecommunications Data with a Service Mesh](https://www.heroku.com/podcasts/codeish/53-scaling-telecommunications-data-with-a-service-mesh)
When you're one of the largest telecommunications companies in Canada, you're responsible for building and maintaining services that can handle a volume of data many times greater than the average web server. Julián Duque had a chance to sit down with Luca Maraschi, a chief architect at TELUS Digital, during NodeConfEU. On this episode, they talk about the frameworks and tech stack Luca has chosen to build the service mesh which facilities data flow between their microservices and clients.

### Videos

[Yukihiro Matsumoto interview for Evrone (in English)](https://www.youtube.com/watch?v=46WjUVqagTo&feature=youtu.be)
the Yukihiro Matsumoto interview that he gave during the RubyRussia 2019 conference in Moscow on September '19. It's about the evolution of Ruby in the past ten years, the philosophy of the language design, and discussed what inspired its creator.

[Introduction to Tailwind and the Utility first workflow](https://egghead.io/playlists/introduction-to-tailwind-and-the-utility-first-workflow-0b697b10)
Everything you need to know about how to design beautiful custom designs from scratch with Tailwind.
You'll learn how to:
* install tailwind in your project
* design with the utility first workflow
* use tailwind for responsive design
* extract Tailwind component classes

[How to use AWS Cloud9 for Ruby on Rails development](https://gorails.com/episodes/aws-cloud9-ruby-on-rails-development.amp)
Ever wanted an editor and Rails environment you can use anywhere? Cloud9 is the perfect option for this and can run on an EC2 instance in your AWS account.

[dry-rb in five: 003 dry-validation (whitelisting)](https://www.youtube.com/watch?v=xHmHsD07_TM&feature=youtu.be)
In today's episode we're going to dive into whitelisting. It's an important security feature to filter out unauthorized data.

[dry-rb in five: 004 dry-validation (coercion)](https://www.youtube.com/watch?v=4AQ4LrqAREg&feature=youtu.be)
In today's episode we're going to dive into data coercion: the ability for a schema to accept/reject incoming data based on their type and to transform input from a Ruby type into another. Coercion will guarantee that the resulting data will be of the expected type, avoiding NoMethodError and TypeError exceptions.