# Scott Johnson

Scott Johnson writing about the usual array of nerd stuff: AWS / Ansible / Ruby / Rails / Elixir / Misc / Hyde.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Testing Rails Apps with FactoryBot and MiniTest

DevFeed: [Testing Rails Apps with FactoryBot and MiniTest](<https://devfeed.tech/articles/testing-rails-apps-with-factorybot-and-minitest-28292.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/rails/2022/07/27/testing-rails-apps-with-factorybot-and-minitest.html>)

Author: Fuzzygroup

Published: 2022-07-27T10:58:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Rails](<https://devfeed.tech/topics/rails.md>), [Code](<https://devfeed.tech/topics/code.md>), [Framework](<https://devfeed.tech/topics/framework.md>), [RSpec](<https://devfeed.tech/topics/rspec.md>)

Tags: [factorybot](<https://devfeed.tech/tags/factorybot.md>), [rails](<https://devfeed.tech/tags/rails.md>), [rspec](<https://devfeed.tech/tags/rspec.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

A tutorial on testing Rails applications with FactoryBot and MiniTest. It explains how to define factories, use traits for different scenarios such as pools and hot tubs, and test Rails model methods. The article notes that RSpec is not required for FactoryBot.

### Source excerpt

Pizza courtesy of Pizza for Ukraine! Donate Now to Pizza for Ukraine This blog post looks at testing rails apps with FactoryBot and MiniTest - the default test framework which ships with Rails. It does not use RSpec and RSpec is NOT required for use with FactoryBot. Note: I believe that MiniTest is the name of the standard rails testing framework. Oddly I've had issues confirming that so if I'm wrong please feel free to tell me. Creating a Factory A factory is a pluralized file just as is a fixture. Factories live, generally, in the test/factories/ directory. Let's say that you were modeling swimming pools. You might have this factory: FactoryBot.define do factory :pool do user water_chemistry_type name { "Swimming Pool" } pool_type { "pool"} length {38} width {18} units { "feet"} volume_units {"gallons"} shallow_end_depth { 3} deep_end_depth {7.67} end end What the above code says: Define a factory named :pool Reference two other models - user and water_chemistry_type Have a bunch of attributes that define the pool Creating Two Specific Factories The power of something like FactoryBot comes, however, not when we have a single instance of anything but when we have multiple instances that we can use to test different scenarios. Let's say that I have both a pool and a hot tub. Those have commonalities but also differences. We can model those difference as traits. FactoryBot.define do factory :pool do user water_chemistry_type trait :swimming_pool do name { "Swimming Pool" } pool_type { "pool"} length {38} width {18} units { "feet"} volume_units {"gallons"} shallow_end_depth { 3} deep_end_depth {7.67} end trait :hot_tub do name {"Hot Tub"} pool_type {"hot_tub"} length { 6 } width { 6 } units { "feet"} volume_units { "gallons" } depth { 3 } end end end What this does is: Create a pool factory With two common attributes - user and water_chemistry_type Add a trait named "swimming" pool which defines the attributes for a swimming pool. Add a trait named "hot_tub" which def

## Hardware Learning 01 - LEDs have a plus side

DevFeed: [Hardware Learning 01 - LEDs have a plus side](<https://devfeed.tech/articles/hardware-learning-01-leds-have-a-plus-side-28166.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/flow_analytics/2022/07/21/hardware-learning-01-leds-have-a-plus-side.html>)

Author: Fuzzygroup

Published: 2022-07-21T03:32:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Hardware](<https://devfeed.tech/topics/hardware.md>), [Learning](<https://devfeed.tech/topics/learning.md>)

Tags: [flow-analytics](<https://devfeed.tech/tags/flow-analytics.md>), [hardware](<https://devfeed.tech/tags/hardware.md>), [hardware-learning](<https://devfeed.tech/tags/hardware-learning.md>), [led](<https://devfeed.tech/tags/led.md>)

### AI overview

A beginner hardware-learning note explaining that LEDs have positive and negative sides, with the longer lead marking the positive side. It also notes that resistors are non-polar and that a ballast resistor limits LED current to help prevent damage.

### Source excerpt

As part of the yet to be announced Flow Analytics startup, I have to learn quite a bit more about building hardware. All of my learnings will be blogged for anyone who wants to follow along. Tonight's learning is simple: LEDs have a plus and a minus side. The plus side is denoted by a LONGER lead. Additionally: Resistors are non-polar (it doesn't matter what side you connect them on); I knew this already but it felt wise to write it down since you always use a resister with an LED A resistor used with an LED is called a ballast resistor and "The ballast resistor is used to limit the current through the LED and to prevent excess current that can burn out the LED. If the voltage source is equal to the voltage drop of the LED, no resistor is required." See Also - LED math is on this link!

## Rails Tip : When You Are Testing Model Files without a Database Table Delete Fixtures File

DevFeed: [Rails Tip : When You Are Testing Model Files without a Database Table Delete Fixtures File](<https://devfeed.tech/articles/rails-tip-when-you-are-testing-model-files-without-a-database-table-delete-fixtures-file-28291.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/rails/2022/07/20/rails-tip-when-you-are-testing-model-files-without-a-database-table-delete-fixtures-file.html>)

Author: Fuzzygroup

Published: 2022-07-20T14:02:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Rails](<https://devfeed.tech/topics/rails.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>)

Tags: [activerecord](<https://devfeed.tech/tags/activerecord.md>), [factorybot](<https://devfeed.tech/tags/factorybot.md>), [flow-analytics](<https://devfeed.tech/tags/flow-analytics.md>), [rails](<https://devfeed.tech/tags/rails.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [software-testing](<https://devfeed.tech/tags/software-testing.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

A Rails testing tip explaining that model tests without a backing database table can fail when Rails tries to load an unintended fixture file. Deleting the fixture file prevents the test runner from querying the missing table; the article also notes that FactoryBot suppresses fixture creation.

### Source excerpt

I generate a lot of models without ActiveRecord backing. The reason for this is I try and follow a fairly functional style of Ruby coding where I use class methods. The reason I use models for this: I don't know what to call them other than a model The models directly is auto loaded so I can refresh it with reload! in Rails console My normal process for this: rails g foo Delete the migration Delete the "< ..." at the top i.e. the inherits from ActiveRecord stff; exact syntax varies from Rails version to Rails version Today I hit this error when running a test and it puzzled me: Error: VolumeCommonTest#test_it_should_have_the_right_values_for_cubic_feet_of_water: ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "volume_commons" does not exist LINE 9: WHERE a.attrelid = '"volume_commons"'::regclass This actually took me a bit to figure out. Here's the tldr: It was coming from bin/rails test test/models/volume_common.rb It was the result of the test runner trying to load the fixture file. The reason this was surprising was that I normally customize each Rails project with ThoughtBot's FactoryBot gem and this time I forgot. FactoryBot suppresses fixture file creation but since I screwed up, it was there and tried to get loaded into a missing table. And, yes, the error is mine since I didn't read it well but at times like these I wish for a gem called abusive_error messages which sees "PG::UndefinedTable" and shouts out something like: Yo! Hoser! Where be da database table ? Ah if there were only infinite time to craft the software tools we really want ...

## Maybe I can Stay in NuShell -or- Living in a Diverse Land of Shells

DevFeed: [Maybe I can Stay in NuShell -or- Living in a Diverse Land of Shells](<https://devfeed.tech/articles/maybe-i-can-stay-in-nushell-or-living-in-a-diverse-land-of-shells-28206.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/nushell/2022/07/20/maybe-i-can-stay-in-nushell.html>)

Author: Fuzzygroup

Published: 2022-07-20T09:36:00Z

Content type: opinion

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Shell](<https://devfeed.tech/topics/shell.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [Zsh](<https://devfeed.tech/topics/zsh.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [command](<https://devfeed.tech/tags/command.md>), [nushell](<https://devfeed.tech/tags/nushell.md>), [rails](<https://devfeed.tech/tags/rails.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [rvm](<https://devfeed.tech/tags/rvm.md>), [shell](<https://devfeed.tech/tags/shell.md>), [zsh](<https://devfeed.tech/tags/zsh.md>)

### AI overview

The author explains that they can continue using NuShell as their main shell while switching to Bash or Zsh when tools such as RVM require them. A Rails project is successfully created after switching to Bash.

### Source excerpt

I really, really like NuShell. The realization that maybe I had to leave was, I'll admit, mildly crushing. And then I just had the realization that maybe I don't have to leave NuShell and slink back to the dirty, byte infested corners of Bash and Zsh. Here's what just happened: /Users/sjohnson/Sync/coding/flow_analytics/open_source〉rails new pool_api --api Rails is not currently installed on this system. To get the latest version, simply type: $ sudo gem install rails You can then rerun your "rails" command. /Users/sjohnson/Sync/coding/flow_analytics/open_source〉ruby -v 07/20/2022 05:34:41 AM ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.x86_64-darwin21] /Users/sjohnson/Sync/coding/flow_analytics/open_source〉rvm use And that was the point when I realized "Oh yeah - RVM doesn't work on NuShell" and then it struck me - I can run Bash: /Users/sjohnson/Sync/coding/flow_analytics/open_source〉/bin/bash 07/20/2022 05:34:57 AM bash: /Users/sjohnson/Library/Python/2.7/bin/powerline-config: /usr/bin/python: bad interpreter: No such file or directory bash: /Users/sjohnson/Library/Python/2.7/bin/powerline-config: /usr/bin/python: bad interpreter: No such file or directory bash: /Users/sjohnson/.iterm2_shell_integration.nu: No such file or directory ERROR: Can't find Ruby library file or shared library lunchy usage: dirname string [...] The default interactive shell is now zsh. To update your account to use zsh, please run `chsh -s /bin/zsh`. For more details, please visit https://support.apple.com/kb/HT208050. [sjohnson:~/Sync/coding/flow_analytics/open_source] [base] $ rails new pool_api --api create create README.md create Rakefile create .ruby-version create config.ru create .gitignore create .gitattributes create Gemfile run git init from "." ... So maybe my system can mostly run NuShell and I can drop in and out of Bash / Zsh when I need different things. Fingers Crossed.

## Running Multiple Rails Apps Concurrently with Foreman and Procfile.dev

DevFeed: [Running Multiple Rails Apps Concurrently with Foreman and Procfile.dev](<https://devfeed.tech/articles/running-multiple-rails-apps-concurrently-with-foreman-and-procfile-dev-28290.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/rails/2022/07/18/running-multiple-rails-apps-concurrently-with-foreman-and-procfile-dev.html>)

Author: Fuzzygroup

Published: 2022-07-18T13:15:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Rails](<https://devfeed.tech/topics/rails.md>), [Environment Variables](<https://devfeed.tech/topics/environment-variables.md>), [Development](<https://devfeed.tech/topics/development.md>), [Yarn](<https://devfeed.tech/topics/yarn.md>), [Processes](<https://devfeed.tech/topics/processes.md>), [Unix](<https://devfeed.tech/topics/unix.md>)

Tags: [dev](<https://devfeed.tech/tags/dev.md>), [environment-variables](<https://devfeed.tech/tags/environment-variables.md>), [foreman](<https://devfeed.tech/tags/foreman.md>), [node](<https://devfeed.tech/tags/node.md>), [port](<https://devfeed.tech/tags/port.md>), [process](<https://devfeed.tech/tags/process.md>), [procfile](<https://devfeed.tech/tags/procfile.md>), [rails](<https://devfeed.tech/tags/rails.md>), [run](<https://devfeed.tech/tags/run.md>), [unix](<https://devfeed.tech/tags/unix.md>)

### AI overview

A tutorial on running multiple Rails applications concurrently with Foreman and Procfile.dev. It explains how port conflicts can come from Node running behind Yarn and recommends assigning Yarn a port so Node inherits it through the environment.

### Source excerpt

Pizza courtesy of Pizza for Ukraine! Donate Now to Pizza for Ukraine As I've said, I build a lot of side projects and I really, really like the model of having: ALL MY APPS RUNNING CONCURRENTLY I may be a scattered, distracted developer trying to do too damn much but that's my damn right. And I have 64 gigs of RAM so why shouldn't I be this way. What I want is to be able to switch from app to app and make changes. This is important because some apps provide APIs which other apps rely on and having to figure out what thing is on what port, etc, is just plain distracting. Foreman and Procfile.dev is a way around this but there's a major hitch in your getalong (as my Texas wife might say). Here's a sample Procfile.dev for an app I'm building called Cartazzi which makes a developer's life easier: web: bin/rails server -p 5000 css: yarn build:css --watch js: yarn build --reload # docker: docker-compose up And here's a Profile.dev for another application called Poolwizard which helps you maintain your swimming pool: #web: bin/rails server -p $PORT web: bin/rails server -p 5700 css: yarn build:css --watch js: yarn build --reload # docker: docker-compose up worker: bundle exec sidekiq If you run Cartazzi and Poolwizard together then you're going to get crashes and here's the error: ❯ foreman start -f Procfile.dev 09:11:53 web.1 | started with pid 72877 09:11:53 css.1 | started with pid 72878 09:11:53 js.1 | started with pid 72879 09:11:53 worker.1 | started with pid 72881 09:11:53 js.1 | yarn run v1.22.5 09:11:53 css.1 | yarn run v1.22.5 09:11:53 css.1 | $ tailwindcss --postcss -i ./app/assets/stylesheets/application.tailwind.css -o ./app/assets/builds/application.css --watch 09:11:53 js.1 | $ node esbuild.config.js --reload 09:11:54 js.1 | node:events:371 09:11:54 js.1 | throw er; // Unhandled 'error' event 09:11:54 js.1 | ^ 09:11:54 js.1 | 09:11:54 js.1 | Error: listen EADDRINUSE: address already in use :::5200 09:11:54 js.1 | at Server.setupListenHandle [as _listen2] (no

## Getting NuShell Usable Under OSX for Myself

DevFeed: [Getting NuShell Usable Under OSX for Myself](<https://devfeed.tech/articles/getting-nushell-usable-under-osx-for-myself-28205.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/nushell/2022/07/17/getting-nushell-usable-under-osx-for-myself.html>)

Author: Fuzzygroup

Published: 2022-07-17T15:20:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Shell](<https://devfeed.tech/topics/shell.md>), [osx](<https://devfeed.tech/topics/osx.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Homebrew](<https://devfeed.tech/topics/homebrew.md>), [Terminal](<https://devfeed.tech/topics/terminal.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [chmod](<https://devfeed.tech/topics/chmod.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [chmod](<https://devfeed.tech/tags/chmod.md>), [coding](<https://devfeed.tech/tags/coding.md>), [commands](<https://devfeed.tech/tags/commands.md>), [config](<https://devfeed.tech/tags/config.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [install](<https://devfeed.tech/tags/install.md>), [nushell](<https://devfeed.tech/tags/nushell.md>), [osx](<https://devfeed.tech/tags/osx.md>), [rust](<https://devfeed.tech/tags/rust.md>), [shell](<https://devfeed.tech/tags/shell.md>), [terminal](<https://devfeed.tech/tags/terminal.md>)

### AI overview

A practical guide to making NuShell usable as a daily shell on OSX Monterey. It covers changing the default shell, preserving Bash history, fixing Homebrew path access, configuring persistent environment settings, and defining aliases.

### Source excerpt

Pizza courtesy of Pizza for Ukraine! Donate Now to Pizza for Ukraine As I've written, I'm acutely interested in using software written in Rust as my daily drivers. What I've seen so far is that programs written in Rust, based on an admittedly tiny sample, seem to be higher quality than programs not written in Rust. In this blog post, I'm going to talk about what I had to do to make NuShell be usable for myself under OSX Monterey. To be perfectly honest, I don't know if my experiences are normal or not. I seem to have a high personal level of entropy with respect to software and it appears that at least sometimes this level of entropy causes bugs. This is the main reason that I document things so dogmatically - I often need to refer to my own blog. Step 00: Changing Your Shell to NuShell After you install NuShell, you are left a bit on your own. You can invoke it via the nu command but what you really want is it to come up as the default shell. This is done with chsh: sudo chsh -s /usr/local/bin/nu sjohnson NOTE: DO NOT CLOSE ALL YOUR OLD TERMINALS!!! If you are like me and are heavily reliant on history then you want to do this in an existing Bash / Zshell / Fish / Whatever terminal window: history > ~/history_old.txt chmod +r ~/history_old.txt Yes - I think that strongly about history that I want this read only so it doesn't get killed inadvertently. Step 01: Getting Brew to Function After you switch over to using NuShell, you may find that programs like brew aren't found. This is a path issue (isn't everything???). Here's an example: /Users/sjohnson/Sync/coding/flow_analytics〉brew 07/17/2022 10:59:12 AM Error: nu::shell::external_command (link) x External command ╭─[entry #11:1:1] 1 │ brew - ──┬─ - ╰── can't run executable ╰──── help: No such file or directory (os error 2) The solution is to add brew's path into the NuShell environment. Back in your old shell window, type: Sync/coding/flow_analytics on ☁ (us-west-2) ❯ which brew /usr/local/bin/brew This tells us

## Value Statements for My New Company

DevFeed: [Value Statements for My New Company](<https://devfeed.tech/articles/value-statements-for-my-new-company-28348.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/startup/2022/07/15/value-statements-for-my-new-company.html>)

Author: Fuzzygroup

Published: 2022-07-15T07:39:00Z

Content type: opinion

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Software](<https://devfeed.tech/topics/software.md>), [test-coverage](<https://devfeed.tech/topics/test-coverage.md>), [cloud-infrastructure](<https://devfeed.tech/topics/cloud-infrastructure.md>), [Support](<https://devfeed.tech/topics/support.md>), [unit tests](<https://devfeed.tech/topics/unit-tests.md>), [version-control](<https://devfeed.tech/topics/version-control.md>)

Tags: [coverage](<https://devfeed.tech/tags/coverage.md>), [culture](<https://devfeed.tech/tags/culture.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [ethics](<https://devfeed.tech/tags/ethics.md>), [github](<https://devfeed.tech/tags/github.md>), [software](<https://devfeed.tech/tags/software.md>), [startup](<https://devfeed.tech/tags/startup.md>), [support](<https://devfeed.tech/tags/support.md>), [test-coverage](<https://devfeed.tech/tags/test-coverage.md>), [unit-tests](<https://devfeed.tech/tags/unit-tests.md>), [version-control](<https://devfeed.tech/tags/version-control.md>), [work-from-home](<https://devfeed.tech/tags/work-from-home.md>)

### AI overview

The author presents draft values for a new company, emphasizing ethical behavior, written documentation, respectful communication, commitment-keeping, transparency, work-life balance, technical support, software quality, version control, and test coverage.

### Source excerpt

Welp, it looks like I'm starting a new company after all. Here are the values that I drafted for it. Values These things we believe: Ethics. We will behave ethically in all situations. Writing Things Down. We will work from home and be a distributed culture. And in a distributed culture, things have to be written down. Good writing is a skill for everyone not something reserved for writing. Having the Hard Conversations Respectfully. In any culture there will be conflict. This can be done respectfully and without tripping anyone's bozo bit. Do What We Say. We will keep our commitments and do the things we say. If we fail - and that's expected - then we will apologize and accept responsibility. Openness and Transparency. Shining light on things makes the badness scurry away. That's the power of openness and transparency. Revenue Disclosure. Every organization is, correctly, driven by its revenue sources - and that's ok. Problems occur, however, when you fail to disclose your revenue sources. Ethical Capitalism. Capitalism has been the single most transforming force in history and it has done more to lift people from poverty than anything else. Now, that said, capitalism without regulation and restraint is a violent beast. The capitalism I believe in was taught to me by my grandfather and it could be summarized as "do the right thing; don't chase every dollar; pay it forward; treat everyone with kindness". Code of Conduct. We will treat each other with mutual respect. We have adoped the Github code of conduct it appends to every repo. Work Should Be Secondary to Life. This is a business but business was not supposed to take over our lives. All staff are encouraged to take acknowledge this and, hopefully, take four day work weeks as often as they like. World Class Technical Support. The high tech industry can - and should - offer world class support. Great support is possible when you have high gross margins - which is all of the technology business - although most peo

## NuShell - When /bin/bash curl installs fail

DevFeed: [NuShell - When /bin/bash curl installs fail](<https://devfeed.tech/articles/nushell-when-bin-bash-curl-installs-fail-28204.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/nushell/2022/07/09/nushell-when-bin-bash-curl-installs-fail.html>)

Author: Fuzzygroup

Published: 2022-07-09T02:57:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Scripting, bash](<https://devfeed.tech/topics/scripting-bash.md>), [Bash](<https://devfeed.tech/topics/bash.md>), [cURL](<https://devfeed.tech/topics/curl.md>), [Homebrew](<https://devfeed.tech/topics/homebrew.md>), [Perl](<https://devfeed.tech/topics/perl.md>)

Tags: [bash](<https://devfeed.tech/tags/bash.md>), [curl](<https://devfeed.tech/tags/curl.md>), [homebrew](<https://devfeed.tech/tags/homebrew.md>), [nushell](<https://devfeed.tech/tags/nushell.md>), [perl](<https://devfeed.tech/tags/perl.md>), [rust](<https://devfeed.tech/tags/rust.md>), [script](<https://devfeed.tech/tags/script.md>)

### AI overview

The author reports that several commands and scripts failed when run directly in NuShell, including Homebrew install and uninstall commands. The suggested workaround is to start a /bin/bash session from NuShell, run the needed commands there, and type exit to return to NuShell.

### Source excerpt

I've liked the concept of NuShell since I first heard about it. I then liked it more when I discovered that Yehuda Katz was involved since I strongly believe in picking software based on the pedigree of the engineers involved (no I don't - yet - have engineer trading cards but I'm thinking about it). Although I have NuShell running on my experimental system, I've held off on using it on my main box mostly due to concerns about the vast amounts of things that pipe crap to /bin/bash like this: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)" /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" /usr/bin/find "$(brew --prefix)/Caskroom/"*'/.metadata' -type f -name '*.rb' -print0 | /usr/bin/xargs -0 /usr/bin/perl -i -0pe 's/depends_on macos: \[.*?\]//gsm;s/depends_on macos: .*//g' That's an uninstall script, an install script and a find command. I tried all of these tonight on NuShell and they all failed. An example of this is: /Users/sjohnson/Sync/coding〉/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" /bin/bash: #!/bin/bash: No such file or directory /Users/sjohnson/Sync/coding〉 Note: For non NuShell users, you can tell its NuShell above by the greater than sign in the prompt. And then it struck me - I can likely simply execute /bin/bash from within NuShell and THEN run whatever I need to in bash. I tried it and it worked perfectly. So if you have problems with things that don't work on NuShell, try spinning up a /bin/bash session. After you're done, type exit and you are back in NuShell.

## Fixing a Hosed HomeBrew Installation

DevFeed: [Fixing a Hosed HomeBrew Installation](<https://devfeed.tech/articles/fixing-a-hosed-homebrew-installation-28214.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/osx/2022/07/09/fixing-a-hosed-homebrew-installation.html>)

Author: Fuzzygroup

Published: 2022-07-09T02:40:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Homebrew](<https://devfeed.tech/topics/homebrew.md>), [Authorization](<https://devfeed.tech/topics/authorization.md>)

Tags: [blog](<https://devfeed.tech/tags/blog.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [commands](<https://devfeed.tech/tags/commands.md>), [homebrew](<https://devfeed.tech/tags/homebrew.md>), [installation](<https://devfeed.tech/tags/installation.md>), [mac](<https://devfeed.tech/tags/mac.md>), [osx](<https://devfeed.tech/tags/osx.md>), [permissions](<https://devfeed.tech/tags/permissions.md>)

### AI overview

A blog post describes troubleshooting a broken Homebrew installation on a Mac where /usr/local/Cellar had incorrect ownership and installations failed because of permissions issues. The author reports that bulk permission changes fixed the problem, while warning that the approach is risky and should be used at the reader's own risk.

### Source excerpt

NOTE: I'm not telling you to do this. This blog post advocates bulk permission changing and that's risky but HomeBrew was entirely broken and brew doctor did not work. And this solution did. Use at your own risk. I have two primary machines - a Mac Desktop and a dual monitor Mac Laptop. I use the laptop more mostly from habit but I'd really like to use the desktop for something that makes me feel better about it being next to me and yet rarely used. One of the reasons for two machines is one is my daily driver and one is experimental. For example, my desktop I installed NuShell on recently as I didn't (yet) trust it enough. I recently discovered that HomeBrew wouldn't install things correctly on my desktop. The issue was always permissions issues and when I dug into it, I found that /usr/local/Cellar was owned by, well, NOT me. The answer, as with so many other *nix things is chown (DO NOT DO THE FOLLOWING): sudo chown -R sjohnson:wheel /usr/local/Cellar -or- that's what I thought the answer was. Unfortunately while a: brew install boost worked seemingly nicely, it failed at the final step: ==> Downloading https://ghcr.io/v2/homebrew/core/php/blobs/sha256:d124757fd19130379ccef3e1bd26fd082fa11a543aad37a6add6b942fb3d327e ==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:d124757fd19130379ccef3e1bd26fd082fa11a543aad37a6add6b942fb3d327e?se=2022-07-09T02%3A50%3A00Z&sig=ea5rDsciKGA8m41Nuw4d6Wkg370EFvFhExVvQkjfr1Q%3D&sp=r&spr=https&sr=b&sv=2019-12-12 ######################################################################## 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/postgresql/manifests/14.4 ######################################################################## 100.0% ==> Downloading https://ghcr.io/v2/homebrew/core/postgresql/blobs/sha256:1e258c37f55737787151ee3a5276e805e0aa4e30cf5d166bdc2208d0d7f812c2 ==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:1e258c37f55737787151ee3a5276e805e0aa4e30

## Registering a Domain with Name Silo

DevFeed: [Registering a Domain with Name Silo](<https://devfeed.tech/articles/registering-a-domain-with-name-silo-28154.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/dns/2022/07/07/registering-a-domain-with-name-silo.html>)

Author: Fuzzygroup

Published: 2022-07-07T13:12:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [IO](<https://devfeed.tech/topics/io.md>), [Cloudflare](<https://devfeed.tech/topics/cloudflare.md>), [amazon](<https://devfeed.tech/topics/amazon.md>), [Google](<https://devfeed.tech/topics/google.md>)

Tags: [amazon](<https://devfeed.tech/tags/amazon.md>), [cloudflare](<https://devfeed.tech/tags/cloudflare.md>), [create](<https://devfeed.tech/tags/create.md>), [ddos](<https://devfeed.tech/tags/ddos.md>), [dns](<https://devfeed.tech/tags/dns.md>), [free](<https://devfeed.tech/tags/free.md>), [google](<https://devfeed.tech/tags/google.md>), [io](<https://devfeed.tech/tags/io.md>), [verify](<https://devfeed.tech/tags/verify.md>)

### AI overview

A practical account of registering a .IO domain with NameSilo. It compares listed prices from Amazon and Google, recommends buying only the domain and using Cloudflare for DDoS protection, and explains creating an A record and verifying the resulting IP address.

### Source excerpt

So I needed to register a .IO domain today. Amazon had .io domains at $71 per and Google had them at $60. A quick check with my guru of cheapness, Nick Janetakis, said: NameSilo.com And he convinced me. Here are some tips: Do not accept any of their options. Just the domain, Sir, just the domain. Use DDOS protection from CloudFlare instead of their option. CloudFlare is free. Once you are registered then the option you likely need is to create an A record. This is done by selecting the domain from the Domain Manager view and then clicking the blue icon. Amazon is way prettier but double the price is a hard sell. After you create it, wait some period of time and ping it. Verify the ip address is yours. References: Review of NameSilo Mass Migration to NameSilo

## Creating a Rails App Using JumpStart Pro

DevFeed: [Creating a Rails App Using JumpStart Pro](<https://devfeed.tech/articles/creating-a-rails-app-using-jumpstart-pro-28289.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/rails/2022/07/07/creating-a-rails-app-using-jumpstart-pro.html>)

Author: Fuzzygroup

Published: 2022-07-07T06:36:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Rails](<https://devfeed.tech/topics/rails.md>), [Development](<https://devfeed.tech/topics/development.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>), [test](<https://devfeed.tech/topics/test.md>)

Tags: [github](<https://devfeed.tech/tags/github.md>), [guide](<https://devfeed.tech/tags/guide.md>), [jumpstart](<https://devfeed.tech/tags/jumpstart.md>), [npm](<https://devfeed.tech/tags/npm.md>), [rails](<https://devfeed.tech/tags/rails.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [test](<https://devfeed.tech/tags/test.md>)

### AI overview

A tutorial explaining how to create a Rails application from a JumpStart Pro template, clone it locally, configure Ruby and the database, install dependencies, and run Rails tests. It also discusses resolving an asset-pipeline error by using Node.js 16 and rebuilding the application's JavaScript.

### Source excerpt

The view of the shelling of Kharkiv at 4 am Donate Now to Pizza for Ukraine The following blog post is an excerpt from a series of articles I'm working on about JumpStart Pro. I found myself referring to the steps below that I thought it might be generally useful for people. I'm going to walk you through the "post purchase" experience with Jump Start Pro (JSP). This will guide you through creating a new app using JSP. Step 1: Cloning an App Into Your Github Here's what you do: Purchase your Jumpstart Pro license. Log in to https://Jumpstartrails.com/ if you haven't already. Click on your license name. You will end up at a page which tells you to visit your Github repo. You need to goto: https://github.com/orgs/Jumpstart-pro. This in turn will take you here: https://github.com/Jumpstart-pro Click into the Rails repository https://github.com/Jumpstart-pro/Jumpstart-pro-rails Click the green Use This Template button. Change the owner to be your github name Enter the name of the NEW repo: Set your description if you care (I never do). Change the setting to be private. I checked off [ ] include all branches (no clue if that was right or not) Click the green Create repository from template button Step 2: Getting that Cloned App Onto Your Machine Github is going to clone the Jumpstart pro rails repo over to your personal github account. Here's what's next On your new repo, click the green Code drop down and get the clone url . On your development machine, change to your local development directory and clone the repo: git clone (what you copied) Set up your local ruby to be 3.1 if you don't have it. Run a bundle install Edit config/database.yml and change database names as needed. Now you want to run: bin/rails db:create Step 3: Setup and Getting to Green Tests in a Rails 7 World When you're starting with something complex that someone else built then tests are always, always, always your friend. So this means that you start with: bin/rails test This is going to fail but we

## Software Has Rework Too -- Reworking a Rails App

DevFeed: [Software Has Rework Too -- Reworking a Rails App](<https://devfeed.tech/articles/software-has-rework-too-reworking-a-rails-app-28288.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/rails/2022/07/02/software-has-rework-too.html>)

Author: Fuzzygroup

Published: 2022-07-02T09:36:00Z

Content type: opinion

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Rails](<https://devfeed.tech/topics/rails.md>), [Development](<https://devfeed.tech/topics/development.md>), [stripe](<https://devfeed.tech/topics/stripe.md>), [web applications](<https://devfeed.tech/topics/web-applications.md>)

Tags: [rails](<https://devfeed.tech/tags/rails.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [stripe](<https://devfeed.tech/tags/stripe.md>), [web-app](<https://devfeed.tech/tags/web-app.md>)

### AI overview

A personal account of reworking a Rails 7 web application after enabling Stripe through an application template library. The application failed to run because Stripe authentication encountered an invalid API key, and the article notes that adding Stripe credentials was not clearly communicated.

### Source excerpt

Read On - Yes there's a reason this picture is here ... A loving tribute to [Oxide and Friends](https://feeds.transistor.fm/oxide-and-friends); Here there be dark corners of podcast specific in jokes ... It is delightfully fun to actually learn something new. And it is even more fun to translate something from a different knowledge domain, say hardware, into a domain you understand, say software. I've been listening to the Oxide and Friends podcast recently and they taught me the concept of Rework in a hardware assembly context. What rework means is sometimes things go wrong and you need to "re-work" it. For example you might fumble the wiring on a component and then need to get out the 30 gauge wire, a microscope and a soldering iron and do what is normally a machine's job it by hand. Tonight I found myself in a bind and my solution was: Reworking a Rails App Let me Dive In I do my software engineering primarily in a Rails context. I know the Oxide folks view Rails and Ruby largely as the devil's own web development tool - and they're 1,000% wrong - but that's neither here nor there. Rails and Ruby are my jam. I recently started a new project as an exercise to see what Rails 7 could really bring to the table if I tossed out some of my slower moving development practices. I made the decision to pair Rails 7 with an application template library and that's where the things started to go awry. I made the decision to enable Stripe in my application template library and then this particular dark hell began. Here's my (unanswered) message from the support forum: Anyone know how to get this thing to STOP calling stripe? I can't get into the configuration UI because "Error while authenticating with Stripe" (its an API key invalid error that I can't seem to fix on the Stripe end). And then it would toss an error and shut down the application itself. So I had a web app that I couldn't run in a web server. Face Palm. Head Desk. And, at this point, Bryan and Adam from Oxide are l

## Web Based Rust Development Tools

DevFeed: [Web Based Rust Development Tools](<https://devfeed.tech/articles/web-based-rust-development-tools-28323.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/rust/2022/06/30/web-based-rust-development-tools.html>)

Author: Fuzzygroup

Published: 2022-06-30T05:52:00Z

Content type: article

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Rust](<https://devfeed.tech/topics/rust.md>), [developer tooling](<https://devfeed.tech/topics/developer-tooling.md>), [Development](<https://devfeed.tech/topics/development.md>), [Documentation](<https://devfeed.tech/topics/documentation.md>), [Web](<https://devfeed.tech/topics/web.md>)

Tags: [development](<https://devfeed.tech/tags/development.md>), [development-tools](<https://devfeed.tech/tags/development-tools.md>), [docs](<https://devfeed.tech/tags/docs.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [programming](<https://devfeed.tech/tags/programming.md>), [rust](<https://devfeed.tech/tags/rust.md>), [tools](<https://devfeed.tech/tags/tools.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

A curated list of web-based resources for Rust developers, gathered from responses to a Twitter request. It includes an online experimentation tool, documentation, nightly build documentation, supplementary docs, a compiler explorer, a JSON parser generator, and a component registry.

### Source excerpt

I am not, alas, a compiled languages guy. I do find Rust absolutely fascinating because by inverting the common assumptions, a whole class of software errors are being avoided. Given that we live in a constant shite show of software quality, any engineering practices that generate better code are highly desirable. Discovering testing and pair programming for me was I suspect as life changing as Rust feels to a C programmer. Even though I don't really do compiled stuff, I do admit to being more than a bit of a language wonk - if it is weird, interpreted and has a repl or is a stream process, well, that I'm good at. My tools have included Ruby, Elixir, Python, JavaScript, PHP, Perl, Prolog (both Borland and Quintus on Sun 2), , Perl, VB, Awk, HyperAwk, Elm, OmniMark and others. So learning a bit about Rust feels pretty normal to me. But I digress - this is about Rust. Even tho I don't really compile, I'm a solid writer and I'm happy to ask questions and compile answers. Web Based Rust Tools I posed this question on Twitter tonight: Given the amazing response to my comments about programs written in Rust, I would appreciate links to great Rust resources and, particularly, web based tools that Rust devs use. #rustlang @steveklabnik, @bcantrill PermaLink And, happily, a ton of very smart people took the time to reply. I compiled all the tools suggested below. http://play.rust-lang.org - online repl / experimentation tool http://docs.rs - documentation https://doc.rust-lang.org/nightly/nightly-rustc/ - nightly build docs https://forge.rust-lang.org/ - a repository of supplementary docs https://rust.godbolt.org - compiler explorer http://app.quicktype.io - JSON parser generator https://crates.io/ - component registry - yes I added this; this is a development tool because finding components is a part of development Adding to This Drop me a line on Twitter where I am @fuzzygroup and I'm happy to add any tools you find.

## Where Is My Rails 7 Master Key

DevFeed: [Where Is My Rails 7 Master Key](<https://devfeed.tech/articles/where-is-my-rails-7-master-key-28287.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/rails/2022/06/23/where-is-my-rails-7-master-key.html>)

Published: 2022-06-23T09:15:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Rails](<https://devfeed.tech/topics/rails.md>)

Tags: [config](<https://devfeed.tech/tags/config.md>), [master](<https://devfeed.tech/tags/master.md>), [rails](<https://devfeed.tech/tags/rails.md>), [stored](<https://devfeed.tech/tags/stored.md>)

### AI overview

The article states that a Rails 7 master key is stored in config/master.key.

### Source excerpt

Your Rails 7 master key is stored in: config/master.key

## An Annotated Startup History Bibliography

DevFeed: [An Annotated Startup History Bibliography](<https://devfeed.tech/articles/an-annotated-startup-history-bibliography-28346.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/startup/2022/06/23/an-startup-history-bibliography.html>)

Author: Fuzzygroup

Published: 2022-06-23T08:43:00Z

Content type: article

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Software](<https://devfeed.tech/topics/software.md>)

Tags: [books](<https://devfeed.tech/tags/books.md>), [business](<https://devfeed.tech/tags/business.md>), [software](<https://devfeed.tech/tags/software.md>), [startup](<https://devfeed.tech/tags/startup.md>)

### AI overview

An annotated bibliography of high-tech case studies and books, organized roughly by historical period and technology company. The author adds notes and recommendations, including a discussion of software marketing lessons from In Search of Stupidity.

### Source excerpt

I've been reading High Tech case studies now since the 80s - just after I entered the business. Bryan Cantrill from Oxide Computer's podcast inspired me to get all my books out and order them on a rough historical basis. I thought listing them here might be interesting to someone. All of these I've read and there are a ton of lessons for entrepreneurs here. I put rough notes next to some of them in bold after the author name in quotes. Change Log 2022-06-27 - Added book of the week 2022-06-26 - Cleaned my bookcase and looked for other books in this category and added entries for How Would You Move Mount Fuji (Microsoft category), Go To (Misc / Software Category), Building a Successful Software Business (Misc / Software Category), Side Hustles (Misc / Software Category), Facebook by Steven Levy (Web 2 category), Tim Cook (Apple Category), A Piece of the Computer Pie (IBM Category), In Search of Stupidity (Misc / Software Category), Crypto (Misc / Software Category), Smart and Gets Things Done (Software Category), The Effective Engineer (Misc / Software Category), Creativity Inc (Apple Category), The Chip (Intel Category), Lean In (Web 2 Category), No Such Thing as a Free Gift (Microsoft Category), The Phoenix Project (Misc / Software Category) 2022-06-26 - Added Sub Categories in the Apple Section 2022-06-26 - Added Sub Categories in the Web 2 Section 2022-06-23 - Started adding links, added books suggested on Twitter, Added Gaskins on PowerPoint History; fixed typos (how did I possibly misspell Torvalds; clearly was stupid yesterday) 2022-06-23 - Apologies for where an Audible audio book is linked instead of hard or paperback; Amazon is inconsistent with this 2022-06-23 - Added a bunch more notes from reading these. Book of the Week In Search of Stupidity: Over 20 Years of High Tech Marketing Disasters View on Amazon This is an absolute gem of a book. There is a lot of humor here but the best bits, the parts I underline, start on Page 308 where he outlines positioni

## Getting Past strscan Gem Issues in Rails

DevFeed: [Getting Past strscan Gem Issues in Rails](<https://devfeed.tech/articles/getting-past-strscan-gem-issues-in-rails-28285.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/rails/2022/06/23/getting-past-strscan-gem-issues-in-rails.html>)

Author: Fuzzygroup

Published: 2022-06-23T07:51:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Rails](<https://devfeed.tech/topics/rails.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>), [nginx](<https://devfeed.tech/topics/nginx.md>), [configuration](<https://devfeed.tech/topics/configuration.md>)

Tags: [cartazzi](<https://devfeed.tech/tags/cartazzi.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [deploy](<https://devfeed.tech/tags/deploy.md>), [hatchbox](<https://devfeed.tech/tags/hatchbox.md>), [nginx](<https://devfeed.tech/tags/nginx.md>), [rails](<https://devfeed.tech/tags/rails.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [ssh](<https://devfeed.tech/tags/ssh.md>)

### AI overview

This troubleshooting article explains how a Rails 7.0.3 deployment on HatchBox failed because the application had activated strscan 3.0.1 while the Gemfile required 3.0.3. After other suggested fixes failed, adding a Passenger-level Bundler configuration through HatchBox's custom NGINX configuration resolved the problem.

### Source excerpt

Yesterday I deployed a new thing via HatchBox and I was using the very, very latest - Rails 7.0.3. My deploy was textbook perfect and then I viewed it in Chrome and got that awful, awful message: Web application could not be started Insert loud cursing here I know the drill - it is a lower level error than HatchBox can handle (although I can think of at least a few ways HatchBox could handle it) - so do the dance: SSH into the box sudo su tail -f /var/log/nginx/error.log Read the error, google and assess. Here was the error: root@cartazzi3-web1:/home/deploy/Cartazzi/releases/20220608082805# tail -f /var/log/nginx/error.log App 14330 output: /usr/share/passenger/helper-scripts/rack-preloader.rb:189:in `block in <module:App>' App 14330 output: /usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:397:in `run_block_and_record_step_progress' App 14330 output: /usr/share/passenger/helper-scripts/rack-preloader.rb:188:in `<module:App>' App 14330 output: /usr/share/passenger/helper-scripts/rack-preloader.rb:30:in `<module:PhusionPassenger>' App 14330 output: /usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<main>' [ E 2022-06-22 15:04:13.2231 21017/T9t age/Cor/App/Implementation.cpp:221 ]: Could not spawn process for application /home/deploy/cartazzi_marketing/current: The application encountered the following error: You have already activated strscan 3.0.1, but your Gemfile requires strscan 3.0.3. Since strscan is a default gem, you can either remove your dependency on it or try updating to a newer version of bundler that supports strscan as a default gem. (Gem::LoadError) Error ID: 9a03b9ce Error details saved to: /tmp/passenger-error-pO6ZTu.html The normal googling suggested things like: Update strscan on the host system Mess with Gemfile Mess with Gemfile.lock Add a Passenger level configuration var for bundler I'd give citations for these but Chrome just crashed and it is closing in on 4 am and the weariness in my bones doesn't allow me to r

## Using SSL in HatchBox with AWS Route 53

DevFeed: [Using SSL in HatchBox with AWS Route 53](<https://devfeed.tech/articles/using-ssl-in-hatchbox-with-aws-route-53-28286.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/rails/2022/06/23/using-ssl-in-hatchbox-with-aws-route-53.html>)

Author: Fuzzygroup

Published: 2022-06-23T07:01:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Amazon Route 53](<https://devfeed.tech/topics/amazon-route-53.md>), [Rails](<https://devfeed.tech/topics/rails.md>), [SSL](<https://devfeed.tech/topics/ssl.md>), [Amazon Web Services](<https://devfeed.tech/topics/aws.md>), [AWS IAM](<https://devfeed.tech/topics/aws-iam.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>), [JSON](<https://devfeed.tech/topics/json.md>)

Tags: [aws](<https://devfeed.tech/tags/aws.md>), [cartazzi](<https://devfeed.tech/tags/cartazzi.md>), [credentials](<https://devfeed.tech/tags/credentials.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [hatchbox](<https://devfeed.tech/tags/hatchbox.md>), [iam](<https://devfeed.tech/tags/iam.md>), [json](<https://devfeed.tech/tags/json.md>), [rails](<https://devfeed.tech/tags/rails.md>), [route53](<https://devfeed.tech/tags/route53.md>), [ssl](<https://devfeed.tech/tags/ssl.md>)

### AI overview

A practical guide to configuring wildcard SSL in HatchBox with AWS Route 53. It explains the required Route 53 setup, IAM user and JSON policy configuration, credential handling, and the addition of route53:ListResourceRecordSets after an incomplete policy caused validation problems.

### Source excerpt

HatchBox continues to be my favorite tool for Rails deployment hands down. And this includes Dockarno - my own Bash based Docker deployment tool. When something you pay for replaces something you wrote yourself, that's a sign of its very, very strong goodness. I just used HatchBox to support SSL wildcard deployment for something I'm building and the process was a tad bit tricky so I thought I'd write it up. HatchBox has excellent built in SSL support using Let's Encrypt but when you use wildcard SSL, you get asked for the Route 53 Key and the Route 53 secret. Here's how you get those: On AWS, in Route 53 In Route 53, make sure you have *.domain.extension defined to allow it to be wildcard. On AWS, in IAM In the IAM console, you need to: Add a user Add that user to a group Add a JSON policy document Here is the JSON policy that you need to add: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "route53:GetChange", "Resource": "arn:aws:route53:::change/*" }, { "Effect": "Allow", "Action": "route53:ChangeResourceRecordSets", "Resource": "arn:aws:route53:::hostedzone/*" }, { "Effect": "Allow", "Action": "route53:ListHostedZonesByName", "Resource": "*" }, { "Effect": "Allow", "Action": "route53:ListHostedZones", "Resource": "*" }, { "Effect": "Allow", "Action": "route53:ListResourceRecordSets", "Resource": "*" } ] } After you've added that user then you will be prompted with the normal AWS access key / secret key. Save the credentials and then add them to HatchBox. HatchBox will then got thru an API session with AWS and validate the key. My Experience and Chris's Brilliant Work I started from documentation I found online (see below) that turned out to be incomplete. When I examined the HatchBox log for the transaction, I saw this: -----> Connecting to SOMETHING3-lb (138.68.227.244 port 22) as root Uploaded /etc/logrotate.d/acme.sh Executing 'curl https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh | sh -s -- --install-online' %

## Building a Bootstrap App with Rails 7 and SCSS Files

DevFeed: [Building a Bootstrap App with Rails 7 and SCSS Files](<https://devfeed.tech/articles/building-a-bootstrap-app-with-rails-7-and-scss-files-28284.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/rails/2022/06/22/building-a-bootstrap-app-with-rails-7-and-scss-files.html>)

Author: Fuzzygroup

Published: 2022-06-22T06:12:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Rails](<https://devfeed.tech/topics/rails.md>), [Bootstrap](<https://devfeed.tech/topics/bootstrap.md>), [Front end](<https://devfeed.tech/topics/frontend.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [CSS](<https://devfeed.tech/topics/css.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [bootstrap](<https://devfeed.tech/tags/bootstrap.md>), [front-end](<https://devfeed.tech/tags/front-end.md>), [rails](<https://devfeed.tech/tags/rails.md>), [sass](<https://devfeed.tech/tags/sass.md>), [scss](<https://devfeed.tech/tags/scss.md>)

### AI overview

A walkthrough of setting up a Rails 7 application with Bootstrap and SCSS files, including generating the app, adding sassc-rails, copying stylesheets, and managing import order for asset compilation.

### Source excerpt

As is too often the case, I find that the initial aspect of getting a modern app (Bootstrap, Tailwind, React) initially setup to be the most frustrating aspect of Rails. Given that I like to spin up new apps pretty regularly, well, I spend a lot of time being frustrated with an old man's grumbling of: It didn't used to be this hard. No it wasn't this hard. And while I still don't really understand asset compilation, I did recently put together a new app where I pulled in SCSS files using variables from a different app and I can start to see it. This blog post walks through a Rails 7 app using .scss files. Step 1: Rails New Here's your Rails 7 new command to generate a new app with Bootstrap: rails new scss_test1 --css bootstrap Yep. That's it. Whoa!!! There are also options to use Tailwind. I found this technique in the Saeloun article linked below and I will be forever grateful; seriously - thank you. Step 2: Add the Sassc-Rails Gem I believe this Gem is needed as sassc support is officially deprecated. But I might be wrong about this; front end stuff changes with every Rails release so if I'm wrong, well, sigh. gem "sassc-rails" NOTE: Please see the last section "That Mysterious Error"; you may not want this in your Gemfile or: Step 3: Copy In Your SCSS Files If you are pulling in SCSS files then you need to copy them into your: app/assets/stylesheets directory. They can exist elsewhere but that directory is for stylesheets so differing on this point confuses me. Modify Your Include Directives This is the tricky bit and where you simply have to experiment. The thing to understand is that asset compilation is just that - compilation.If you're old school enough that you understand the analogy of your stylesheet files becoming akin to a make file with all the dark magic that entails, perhaps that helps. In your stylesheets directory there will be an initial stylesheet file, for me, it was application_bootstrap.scss and then I had copied in a number of other styleshee

## Declaring Ruby Bankruptcy, The Ruby Psych 3.1 Issue, RVM and RBEnv

DevFeed: [Declaring Ruby Bankruptcy, The Ruby Psych 3.1 Issue, RVM and RBEnv](<https://devfeed.tech/articles/declaring-ruby-bankruptcy-the-ruby-psych-3-1-issue-rvm-and-rbenv-28316.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/ruby/2022/06/15/declaring-ruby-bankruptcy-the-ruby-psych-3-1-issue-rvm-and-rbenv.html>)

Author: Fuzzygroup

Published: 2022-06-15T06:35:00Z

Content type: opinion

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Ruby](<https://devfeed.tech/topics/ruby.md>), [Development](<https://devfeed.tech/topics/development.md>), [legacy](<https://devfeed.tech/topics/legacy.md>)

Tags: [errors](<https://devfeed.tech/tags/errors.md>), [installation](<https://devfeed.tech/tags/installation.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [rails](<https://devfeed.tech/tags/rails.md>), [rake](<https://devfeed.tech/tags/rake.md>), [rbenv](<https://devfeed.tech/tags/rbenv.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [rvm](<https://devfeed.tech/tags/rvm.md>), [zsh](<https://devfeed.tech/tags/zsh.md>)

### AI overview

A developer describes problems after installing Ruby 3.1 with RVM, including missing psych and failures in bundle install, irb, Rails console, rake, and switching Ruby versions. After removing RVM and rbenv, the author plans to use RVM for Ruby 3.1 and later and rbenv for older projects.

### Source excerpt

I had a bloody awful Sunday three days ago. I had started work on a new application that had Ruby 3.1 set in its Gemfile and I blithely installed Ruby 3.1 using RVM. And then my life began to suck slimy green toads with errors like this: /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/yaml.rb:3: warning: It seems your ruby installation is missing psych (for YAML output). To eliminate this warning, please install libyaml and reinstall your ruby. I'd like to say that I wasn't quite as diligent in fixing this because, well, it was sunday. However, given the readiness by which most of us generally install new versions of ruby, that wasn't it. We simply aren't used to breaking changes with Ruby. The ctrl blog does a great job of describing this. Thank you. The basic issue is that psych is a low level gem and once it changes, well, your world kind of just breaks. What I pretty much found out immediately is that every single thing I wanted to do with Ruby just failed: bundle install irb rails c rake And, "drum roll" - changing over to a different ruby The fact that I couldn't change over to a different ruby basically meant that I was screwed. I don't think that this was intended. And it is entirely possible that this was some kind of whacky interaction on a development system with, ahem, a lot of rubies and crazy legacy conflicts but that is what happened. Declaring Ruby Bankruptcy Since I couldn 't change rubies, everything just devolved into an amazing pool of suckitude. Not only couldn't I use Ruby, I couldn't blog, run any of my utility scripts, etc. My final answer was to declare ruby bankruptcy and: delete rvm delete rbenv delete all references to rvm and rbenv from zsh and other profile files reboot rm -rf ~/.rvm rm -rf ~/.rbenv reboot I've been a long time Ruby user so this process exposed some craziness like 2.3.1 log files owned by root which couldn't be deleted. Taking a Break This was the point where I threw my hands up, walked away an

## Learning Twitter in 2022

DevFeed: [Learning Twitter in 2022](<https://devfeed.tech/articles/learning-twitter-in-2022-28354.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/twitter/2022/06/11/learning-twitter-in-2022.html>)

Author: Fuzzygroup

Published: 2022-06-11T01:57:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [X (Twitter)](<https://devfeed.tech/topics/twitter.md>), [Learning](<https://devfeed.tech/topics/learning.md>), [hash](<https://devfeed.tech/topics/hash.md>), [identifier](<https://devfeed.tech/topics/identifier.md>), [Messaging](<https://devfeed.tech/topics/messaging.md>)

Tags: [experiment](<https://devfeed.tech/tags/experiment.md>), [hash](<https://devfeed.tech/tags/hash.md>), [identifier](<https://devfeed.tech/tags/identifier.md>), [learning](<https://devfeed.tech/tags/learning.md>), [marketing](<https://devfeed.tech/tags/marketing.md>), [messaging](<https://devfeed.tech/tags/messaging.md>), [twitter](<https://devfeed.tech/tags/twitter.md>), [updated](<https://devfeed.tech/tags/updated.md>)

### AI overview

A work-in-progress guide to learning Twitter in 2022. It shares practical observations about gaining visibility, using hashtags, engaging with relevant people, tracking one metric, experimenting, and mixing original posts with other users' content.

### Source excerpt

Note: This is a work in progress. Rather than finish it in one go, I'm updating it live as a draft document as I learn new things about Twitter. Last update: 2022-06-15 I am, at heart, a long form blogger. Still - the cool kids, as they say - these days are all on twitter (and, yes, I know by saying it that way, I'm dating myself even further; so be it; it amuses me). I find myself, here in 2022, wanting to get a better handle on Twitter. This will be a regularly updated blog post summarizing what I've learned. Rule 0: You Are Screaming Into the Void The first thing to understand is that Twitter as a whole is enormous and no one is going to notice, or even care, that you are there. There is very much an aspect of screaming into the void. Rule 1: You Are Going to Have to Work to Get Noticed When a social media is new then can be easy to get established. When a social media already exists though, it is a lot of work to establish yourself. You need to throw away any expectations that you are going to be successful on Twitter quickly and get ready for a long grind of creating content. Rule 2: Hash Tags A hash tag is an identifier that describes your content. What I have noticed is that without hash tags, my content may as well not exist. Add hash tags to your tweet just by adding a hash mark or # to the end of your tweets. Rule 3: @ sign Someone if It is Relevant Rule 4: Direct Messaging People on Twitter is Quite Real Rule 5: Check Your Mentions Rule 6: Keep At It Rule 7: Decide On Your One Metric Twitter has a number of metrics: Followers Retweets Likes Mentions Trying to pay attention to all of these at once is, for someone who isn't metric oriented and isn't a marketer, a kind of sucky experience. My choice was that I was going to use my Followers count as the metric. When I started this experiment, I had 207 followers. Now I have 209 followers. Progress??? Rule 8: Experiment and Learn from It Rule 9: Don't Just Tweet Your Own Stuff Imagine Twitter as if it was a pa

## Thinking About Rails Database Objects and Idempotency

DevFeed: [Thinking About Rails Database Objects and Idempotency](<https://devfeed.tech/articles/thinking-about-rails-database-objects-and-idempotency-28283.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/rails/2022/06/10/thinking-about-rails-database-objects-and-idempotency.html>)

Author: Fuzzygroup

Published: 2022-06-10T16:47:00Z

Content type: opinion

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Rails](<https://devfeed.tech/topics/rails.md>), [Database](<https://devfeed.tech/topics/database.md>), [Development](<https://devfeed.tech/topics/development.md>), [Code](<https://devfeed.tech/topics/code.md>), [debugging](<https://devfeed.tech/topics/debugging.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [database](<https://devfeed.tech/tags/database.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [development](<https://devfeed.tech/tags/development.md>), [rails](<https://devfeed.tech/tags/rails.md>)

### AI overview

A personal technical discussion of idempotency in Rails database objects. The author considers replacing class-level find_or_create methods with class-defined identity columns that determine whether a record already exists, using CodeEnvironmentLogin as an example.

### Source excerpt

I've been dealing with a new application with a lot of objects and one of my concerns is idempotency. Idempotency is the idea that you can do the same thing over and over and only create a new object when Idempotence (UK: /ˌɪdɛmˈpoʊtəns/,[1] US: /ˈaɪdəm-/)[2] is the property of certain operations in mathematics and computer science whereby they can be applied multiple times without changing the result beyond the initial application. Idempotence Specifically if I'm saving a login and password to a database for a certain project and environment, I only want to save that one time. I normally handle this with a class level find_or_create method but that, in 2022, is feeling unexpectedly clunky. It is unclear to me what the current thinking in the Rails world is regarding low level operations like this - my last technical conference was now in 2016 (and that was for Elixir not even Ruby). As with so many blog posts, I'm going to sketch out my solution here in the hopes that writing it all down: Kick starts the brain Puts something out there to spur a conversation It seems to me that idempotency varies on a class level. For an account class just the email field might make it idempotent. For my CodeEnvironmentLogin class, it is going to be several fields: code_environment_id login project_id Note: And, yes, I'm building a development tool as this blog post absolutely reveals. The fact that this varies on a class level basis to me argues for a class level constant. Let's call them "identity columns" since they uniquely identify records: IDENTITY_COLUMNS = [:project_id, :code_environment_id, :code_environment_login] Now what we need is a method which can: read the identity columns generate a where clause using a passed in OpenStruct (all my find_or_create methods us an OpenStruct) return true or false if it exists and the object itself Here's my first stab at it: def self.exists?(struct) where_clauses = [] IDENTITY_COLUMNS.each do |identity_column| where_clauses << {identity

## Fixing FactoryBot Validation Name Has Already Been Taken Controller Test or Spec Errors

DevFeed: [Fixing FactoryBot Validation Name Has Already Been Taken Controller Test or Spec Errors](<https://devfeed.tech/articles/fixing-factorybot-validation-name-has-already-been-taken-controller-test-or-spec-errors-28117.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/2022/06/10/fixing-factorybot-validation-name-has-already-been-taken-controller-test-or-spec-errors.html>)

Author: Fuzzygroup

Published: 2022-06-10T12:41:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Rails](<https://devfeed.tech/topics/rails.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [activerecord](<https://devfeed.tech/tags/activerecord.md>), [bug](<https://devfeed.tech/tags/bug.md>), [controllers](<https://devfeed.tech/tags/controllers.md>), [development](<https://devfeed.tech/tags/development.md>), [factorybot](<https://devfeed.tech/tags/factorybot.md>), [rails](<https://devfeed.tech/tags/rails.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

This troubleshooting article examines recurring ActiveRecord "Name has already been taken" failures in FactoryBot-backed Rails controller tests. It describes investigating associations, test data, database cleaning, and model accessors while tracing the source of the validation behavior.

### Source excerpt

So, last night, whilst pulling vampire hours on writing tests - always, always, always a bad idea - I encountered multiple variants on this bug: ❯ bundle exec rails test test/controllers/links_controller_test.rb:44 Running 7 tests in a single process (parallelization threshold is 50) Run options: --seed 21798 # Running: E Error: LinksControllerTest#test_should_get_edit: ActiveRecord::RecordInvalid: Validation failed: Name has already been taken test/controllers/links_controller_test.rb:47:in `block in <class:LinksControllerTest>' This was particularly vexing because while the object in question did have a name attribute, it did not have name validations: ######################################################################### # # validations # ######################################################################### validates_presence_of :project_id validates_presence_of :team_id validates_presence_of :account_id validates_presence_of :link_type_id There are a number of people on the internet that have this issue including this stack overflow post. What I noticed as I researched this is that I only saw it in controller tests. Also my model tests continued to function correctly without any validation issues. I had initially discovered this while working on my RodAuth testing deep dive and back burnered it until I got past that particularly nasty kettle of fix. I was working with two objects, link and project and project only through an association. So my Factory for link looked like this: FactoryBot.define do factory :link do url { "https://www.example.com/?time=#{Time.now.to_i}" } name { "Cartazzi App on development #{Time.now.to_i}" } active { true } association :account association :team association :project association :link_type end end You will notice the insane use of Time.now.to_i to try and generate more distinct data. This was an attempt to see if maybe some kind of hidden validation was present (it is ruby and everything is dynamic; who knows where a monk

## Rails 7, Rodauth, BootRails, Nested Resources and Testing Controllers

DevFeed: [Rails 7, Rodauth, BootRails, Nested Resources and Testing Controllers](<https://devfeed.tech/articles/rails-7-rodauth-bootrails-nested-resources-and-testing-controllers-28282.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/rails/2022/06/10/rails-7-rodauth-bootrails-nested-resources-and-testing-controllers.html>)

Author: Fuzzygroup

Published: 2022-06-10T08:12:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Rails](<https://devfeed.tech/topics/rails.md>), [Authentication](<https://devfeed.tech/topics/authentication.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Security](<https://devfeed.tech/topics/security.md>)

Tags: [account](<https://devfeed.tech/tags/account.md>), [authentication](<https://devfeed.tech/tags/authentication.md>), [controllers](<https://devfeed.tech/tags/controllers.md>), [framework](<https://devfeed.tech/tags/framework.md>), [rails](<https://devfeed.tech/tags/rails.md>), [rodauth](<https://devfeed.tech/tags/rodauth.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

A Rails 7 development account describes using BootRails and RodAuth with nested account and link resources. The article explains authentication-aware routing and discusses adapting generated scaffolding and controller parameter handling for nested-resource testing.

### Source excerpt

I'm working on a new project and, as I am front end challenged, I started by purchasing a copy of the BootRails framework as it seemed to have sensible defaults and an appearance that vastly outstrips my personal ability to manipulate Bootstrap. Previously I've worked with the JumpStart framework from Go Rails and while I love, love, love Chris Oliver, GoRails, HatchBox and everything Chris has done (yes I'm a super fan), I just can't get past JumpStart's use of Tailwind. BootRails makes a bunch of fairly opinionated decisions including the choice of RodAuth for authentication. They also use minitest and fixtures instead of rspec and FactoryBot. This blog post will cover how I figured out how to make testing work in a RodAuth environment for a nested resource. Note: It has literally been years since I've used nested resources but the application I'm developing is one where I particularly don't want security holes and nested resources nicely handle that. And, yes, I'm tipping my hat towards Sean Kennedy in Arkansas who taught me all about nested resources about a thousand years ago, way, way pre-pandemic. Unlike devise and everything else I've ever used in Rails, RodAuth has current_account instead of current_user. So you have an account object instead of a user object (I'm not saying it is wrong but it is different). For my application I have two resources: account link My routes file looks like this: constraints Rodauth::Rails.authenticated do resources :accounts do resources :links end end This means that my urls will look something like this: /account/23/link/99 i.e. you have to be logged in as account 23 to access link 99. Note: Writing the line above makes me realize that no other account can ever reference link 99 since the account is the parent object of the resource. The likely needed change is to nest these under the project object and then have a account_project model. But, as always, I digress. My first thing when I generated the links model was to scaffo

## Getting Font Awesome Working On Rails 7 and Bootstrap albeit Perhaps Poorly

DevFeed: [Getting Font Awesome Working On Rails 7 and Bootstrap albeit Perhaps Poorly](<https://devfeed.tech/articles/getting-font-awesome-working-on-rails-7-and-bootstrap-albeit-perhaps-poorly-28280.md>)

Original publisher: [Read original article](<http://fuzzyblog.io/blog/rails/2022/06/08/getting-font-awesome-working-on-rails-7-and-bootstrap-albeit-perhaps-poorly.html>)

Author: Fuzzygroup

Published: 2022-06-08T17:27:00Z

Content type: tutorial

Language: en

Sources: [Scott Johnson](<https://devfeed.tech/sources/scott-johnson.md>)

Topics: [Rails](<https://devfeed.tech/topics/rails.md>), [Bootstrap](<https://devfeed.tech/topics/bootstrap.md>), [Front end](<https://devfeed.tech/topics/frontend.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [blog-post](<https://devfeed.tech/tags/blog-post.md>), [bootstrap](<https://devfeed.tech/tags/bootstrap.md>), [css](<https://devfeed.tech/tags/css.md>), [fontawesome](<https://devfeed.tech/tags/fontawesome.md>), [front-end-development](<https://devfeed.tech/tags/front-end-development.md>), [html](<https://devfeed.tech/tags/html.md>), [rails](<https://devfeed.tech/tags/rails.md>)

### AI overview

A blog post documents a simple, imperfect method for adding Font Awesome, including its brands extension, to a Rails 7 application, and also explains how to add Bootstrap 5 icons. The approach downloads the assets locally, places files in Rails asset and public directories, updates the asset manifest and configuration, and adjusts stylesheet paths.

### Source excerpt

I am not a front end engineer - but I'm on a project right now with heavy front end requirements. This blog post documents how I got Font Awesome running on by application including the brands extension. It is by no means a great way to do it and I know: I have more overhead than needed I did not take advantage of Rails 7 facilities in the best way This skips the gem so you lose another dependency from Gemfile I made this work and I sort of understand it but if you asked me to explain it, I think I'd fail the class. Today I wanted to do nothing more than display a github icon. And it does that. Still this works and it is conceptually simple. NOTE: I full well expect to return to this and figure out the "right" way to do this. However, I'm in heavy greenfield development mode and the desire to simply make it work and GIVE ME MY DAMN ICONS NOW is the paramount concern. In greenfield development mode, nothing is more important than: Productivity / not getting bogged down. Not getting discouraged when trying to do something that should be simple (display a damn icon). So much of modern front end development is just plain ridiculously complicated for simple things like making a font work or displaying an image. Font Awesome Steps Download Font Awesome Locally and Decompress It. This requires an account I think. Move stylesheets/all.css to app/assets/stylesheets/ Move webfonts (directory and all) to public/ (yes public) Add //= link all.css to manifest.js In config/initializers/assets.rb add: Rails.application.config.assets.paths " Rails.root.join("assets/webfonts") (yes that isn't the right path but it still works; who knows???) In application.html.erb you need to make one change. This code: <%= stylesheet_link_tag "all"%> Here's an example of the html to use to generate a font: <i class="fas fa-github"></i> <i class="fas fa-camera"></i> Sidebar: How to Add Bootstrap Icons Also This set of steps let you add the Bootstrap 5 icons to the mix also and is based on the same i

[Next page](<https://devfeed.tech/sources/scott-johnson.md?cursor=WyIyMDIyLTA2LTA4VDE3OjI3OjAwKzAwOjAwIiwgIjY1NTU5YzNiLWI2NzUtNDI3Yy04YjE3LWQ3OTEyYTRhZjcxYSJd>)