Short Ruby Newsletter

Share this post

Issue #4 - 1 - 7 August 2022

newsletter.shortruby.com

Issue #4 - 1 - 7 August 2022

The one where we exchange ideas about code review and how to help Ruby juniors to get jobs

Lucian Ghinda
Aug 8, 2022
3
Share this post

Issue #4 - 1 - 7 August 2022

newsletter.shortruby.com

Hello,

Thank you for subscribing to this newsletter. You can read this newsletter online here. It might be too long for some email clients. No worries, even if it is long, it is easy to read 😀 as it contains tweets.

If you like it and have suggestions of people working with Ruby and sharing exciting stuff on social media, please find me on Twitter @lucianghinda and tell me about them.

This edition was created with support from @adrianthedev from Avo for Ruby on Rails (a friendly full-featured Rails admin panel) and from @jcsrb, who sent me recommendations to include.


Xavier Noria shared a thought about where to add comments explaining the why

Source: @fxn on Twitter

Stanislav Katkov shared 3 git extensions that he finds very useful: git recent, git open and diff-so-fancy:

Source: @5katkov on Twitter

Steve Polito shared a tip about discovering the data type when using Redis gem:

Source: @stevepolitodsgn on Twitter

He added:

Turns out, you can't always call "get" on a key. Instead, you need to call the correct method for the type of data stored in the key. (source)

Emmanuel Hayford shared a small piece of code to lint factories

Source: @siaw23 on Twitter

CJ Avilla shared a quick tip for converting video duration in seconds:

Source: @cjav_dev on Twitter

Konnor Rogers shared a comparison between various component gems:

Source: @RogersKonnor on Twitter

You might want to look also to these benchmarks, shared by Joel Drapper that includes also the Phlex library he is working on:

Source: @joeldrapper on Twitter

Junichi Ito (伊藤淳一) shared an example about the frozen_string_literal magic comment and how it applies:

<Ruby豆知識> # frozen_string_literal: true は全ての文字列がデフォルトで凍結されるわけではなく、文字列リテラルを使って生成した文字列だけが凍結されます。なので、数値や配列をto_sやjoinメソッド等で文字列化した場合は、この条件に該当しないので凍結されません。

translated to:

<Trivia of Ruby> # frozen_string_literal: true means that not all strings are frozen by default, only strings created using string literals are frozen. Therefore, if a number or array is converted to a string using the to_s or join method, it will not be frozen because it does not meet this condition.

Source: @jnchito on Twitter

Tim Carey asked a question about authorization in Rails and received a lot of replies. You should read them as people are sharing their experiences and limits they encountered when using CanCanCan and Pundit. There are also recommendations for Pundit, ActionPolicy and bullet_train-roles.

Source: @TimCareyCodez on Twitter

Brandon Weaver shared an experimental code to do deep groupings:

Source: @keystonelemur on Twitter

Ahmed shared a piece of code that uses meta-programming to implement a find or initialize by:

Source: @rockwell_ on Twitter

Nick Schwaderer shared one of the most interesting changes in Rubocop. You should read the discussion on Github as there are shared some good cases for using and/or

Source: @schwad_rb on Twitter

Jean Boussier shared that Queue#pop will accept in Ruby 3.2 a timeout argument (you can also read the the ruby-lang feature discussion):

Source: @_byroot on Twitter

Dmitry Tsepelev shared an experimental gem that he created to help write natural DSLs in Ruby:

Source: @dmitrytsepelev on Twitter

Greg Molnar shared a quick tip about how to generate a Rails app with a specific version:

Source: @GregMolnar on Twitter

Pablo Orellana shared a quick tip about pipelining rails routes into fzf:

Source: @holamendi on Twitter

Nicolás Sanguinetti shared a piece of code describing a way to work with base exception as module:

One thing I really like about ruby, when writing a library/gem, is to make the base "exception" a module. This allows subclassing the "semantically correct" exception while still providing a base, catch-all constant that can be rescued by users of the library.

Source: @godfoca on Twitter

Vaidehi Joshi shared a learning experience about how reading the source code of a library is a game changer:

Source: @vaidehijoshi on Twitter

You should read the full thread as it is a great and open sharing:

Source: @vaidehijoshi on Twitter

Benito Serna asked a great question about solving N+1 queries problem:

How would you solve the "latest_comment" n+1 queries problem?

There are a couple of solutions shared in that thread, and he also presented the most known ones in an article:

Source: @bhserna on Twitter

Pascal Laliberte shared a quick tip about erb partials and CSS:

<%= render '_index', use_columns: true %>  <%# in _index.html.erb, use a default of 15rem column width with 3 columns     if use_columns is true, but use --column-width if defined in a parent #> <% tag.ul class: ["columns-[var(--column-width,_15rem)_3]": use_columns] do %>   ... <% end %>
Source: @pascallaliberte on Twitter

Josef Strzibny shared a statement about the job of the reviewer and received many replies about how people see the role of the reviewer:

Source: @strzibnyj on Twitter

Read also the replies to this retweet where I asked the question about what should be the purpose objective of a code review.

Here are some replies:

Jamie Lawrence said:

The reviewer should not be expected to run the code, that’s what tests are for. They are only there to review the logic, code structure, naming, maintainability, security, etc. The reviewer should operate with the assumption that the code works

Joel Drapper said:

The value-add for a reviewer IMO is mainly a second-opinion on overall strategy and code readability. If the code didn’t work, the tests would show that.

Josef Strzibny said:

For me I have to say the objective is higher confidence that the change will work and doesn't break other stuff. Practically everything else is secondary as there is no need for a long review of broken code.

Hal Brodigan shared a quick Active Record tip about using Arel instead of parameterized SQL strings:

Source: @postmodern_mod3 on Twitter

He shared more about this:

The one I was just working on was trying to query two binary columns (SQLite3 BLOBs) that I use as min/max keys. `Model.where('min_key <= ? AND max_key ?', bin_key, bin_key)` does not work because ActiveRecord doesn't know I want bin_key converted to sqlite3's x'XX...' syntax. (source)

Where as if you use `where(arel_table[:bin_column].lteq(value).and(...))` it knows that you're comparing a value against a binary column and can thus correctly typecast/format the input value. (source)

Hiring Juniors

I feel like this was an important topic discussed a lot on Twitter this week, so I am trying to aggregate multiple discussions here:

Josef received multiple replies about how junior Ruby developers experienced this and some ideas about how to improve this.

Source: @strzibnyj on Twitter

Rose W shared a good way how to talk about hiring juniors in our teams:

Source: @rose_w on Twitter

Joe Masilotti identified some reasons why few companies are hiring juniors:

Source: @joemasilotti on Twitter

Among those reasons:

Businesses see junior developers as a risk.

Businesses don't have programs for the dev to grow.

Businesses need to replace a senior dev who left.

He also offers some reasonable solutions in that thread and hosted a Twitter Space conversation about the same topic.

Jacob Daddario had an interesting reply:

Source: @JacobDaddario on Twitter

Greg Molnar had an interesting take on education:

Source: @GregMolnar on Twitter

If you read so far and you like the content, maybe you take into consideration sharing this and subscribe:


Articles and Videos

Courses

Jason Charnes shared that his StimulusReflex course is free. This is a great resource to grab.

Something to read

PlanetScale shared an article about deleting large quantities of data talking about destroy_async, delete vs destroy and moving delete operations to background queues.

Eric Berry shared an article written by Matt Swanson about working with CSS in Hotwire and Rails.

Ngan Pham shared an article about how Gusto upgraded Rails to version 7.

Kelly Sutton shared an article he wrote about Scaling Sidekiq at Gusto.

BigBinary shared an article on their blog about audio_tag and video_tag that in Rails 7.1 will receive Active Storage attachments.

Ridhwana Khan shared an article she wrote about Destructuring in Ruby part of a series called Rediscovering Ruby.

David Copeland shared an article written by him about The Four Stages of Testing That Help Your Focus.

AnyCable shared that they started Any Cables Monthly newsletter. Read the first issue here.

Greg Molnar shared that a new issue of This Week in Rails is out. This issue was created by Petrik de Heus

Bogdan N shared an article he wrote about Discovering Ruby on Rails: is it dead or alive?

Rails Links shared an article about How to Bulk Insert Nested Attributes in Rails.

RubyRadar shared a new issue about Hiring and Mentoring Juniors

Something to watch or listen

Noah Gibbs published a discussion with Tobias Pfeiffer about education, software history, programming languages, and different Ruby implementations: listen here → Tobi Pfeiffer: So Many Languages

GoRails shared a new episode about implementing hCaptcha from scratch in Rails and making it compatible with Turbo using Stimulus. See it here → hCaptcha with RoR, Turbo and Stimulus

CJ Avilla shared a video about discussing with Chris Oliver about the Pay gem. There is also a demo, so it is worth watching. See it here → Collecting payment in Ruby on Rails with Pay

Drew Bragg shared a New Coding Coders Episode with Collin about willing to jump into source code, orienting in a new codebase and more. Listen to it here → Episode 9 -Collin Jilbert

Shopify Engineering shared a video where they asked their Ruby & Rails infrastructure team how they feel about Rails. See it here → Our Relationship with Rails

Remote Ruby shared a new episode about “Gem Mining & Advice on Mentoring Developers” with Chris Oliver - Listen to it here → Remote Ruby Episode 191

Joe Masilotti hosted a Twitter space about “On hiring junior Ruby on Rails developers”. Listen to it here → On hiring junior Ruby on Rails developers

Ruby for All published a new episode with Andrew and Julie. Listen to it here: Failures and Lessons as a Junior Developer

Adrian Marin published a video where he demos the new features from Avo. See it here → Avo 2.12 for Rails - Use custom resources for has_many

New Libraries or Updates

vscode-ruby-light

r7kamura shared that they are working on a new VSCode extension for ruby: Ruby Light

Yardspec

Also r7kamura launched a new Gem called Yardspec which will run YARD as RSpec:

Source: r7kamura on Github

Read the article on Dev.to written by the author or browse the repository on Github.

Avo for Ruby on Rails

Avo published a new release v2.12:

Source: @avo_hq on Twitter

This release has a lot of updates, and you can see all of them here in the release notes or watch the video demo Adrian did for this release.

Outro

Thank you for reading this. If you have any suggestions of people/tweets to include, please reach out to me @lucianghinda or at ideas@ghinda.com.

All (or almost all screenshots) were generated by using Xnapper

Share this post

Issue #4 - 1 - 7 August 2022

newsletter.shortruby.com
Previous
Next
Comments
TopNewCommunity

No posts

Ready for more?

© 2023 Lucian Ghinda
Privacy ∙ Terms ∙ Collection notice
Start WritingGet the app
Substack is the home for great writing