Today I Learned
A collection of concise write-ups on small things I learn day to day across a variety of languages and technologies. These are things that don't really warrant a full blog post. These are things I've picked up by Learning In Public™ and pairing with smart people at Hashrocket.
For a steady stream of TILs, sign up for my newsletter.
1328 TILs and counting...
- Ack
- Amplify
- Ansible
- Chrome
- Clojure
- CSS
- Deno
- Devops
- Elixir
- Gatsby
- Git
- GitHub Actions
- Go
- GROQ
- Heroku
- HTML
- HTTP
- Internet
- JavaScript
- jq
- Kitty
- Linux
- Mac
- MongoDB
- MySQL
- Neovim
- Netlify
- Next.js
- Phoenix
- Planetscale
- pnpm
- PostgreSQL
- Prisma
- Python
- Rails
- React
- React Native
- React Testing Library
- ReasonML
- Remix
- RSpec
- Ruby
- sed
- Shell
- Streaming
- Tailwind CSS
- tmux
- TypeScript
- Unix
- Vercel
- Vim
- VSCode
- Webpack
- Workflow
- XState
- YAML
- Zod
- Access A Value Logged To The Console
- Chrome Supports Many Unix Keyboard Shortcuts
- Copy Some Data From The Console
- Duplicate The Current Tab
- Easier Access To Network Throttling Controls
- Keybinding To Focus The Address Bar
- Pause JavaScript From The Source DevTools Panel
- Navigate The Browser History With Vimium
- Pretty Print Tabular Data
- Reference The Selected Node
- Selecting DOM Elements Faster Than Ever
- Simulating Various Connection Speeds
- Toggle Device Mode
- Toggle Open The Console Drawer
- View Network Traffic For New Tabs
- Aggregation Using merge-with
- Argument Requirements For A Function
- Combinations Of Items From A Sequence
- Define Something Only Once
- Evaluate One Liners With lein-exec
- Expanding Macros
- Get The Value Of An Environment Variable
- List Functions For A Namespace
- Load A File Into The REPL
- Mapping With An Index
- Open JavaDocs
- Pretty Print The Last Thing
- Quick Clojure Docs
- Reductions
- Set Max Heap Size
- Specify the Directory of a Shell Command
- Splitting On Whitespace
- Swap Two Items in a Vector
- Try A Clojure Project In The REPL
- Type of Anything
- When Overflow Is Desired
- Add Fab Icons To Your Site With FontAwesome 5
- Animate Smoothly Between Two Background Colors
- Apply Multiple Box Shadows To Single Element
- Apply Styles Based On Dark-Mode Preferences
- Apply Styles To The Last Child Of A Specific Type
- Change The Orientation Of An Image
- Circular Icons With A Massive Border Radius
- Clean Up Repetition With :is() Pseudo-Class
- Conditional Styling For Unsupported CSS Features
- Create A Pulsing Background With CSS Animation
- Define CSS Custom Properties With CSS Variables
- Define HSL Colors With Alpha Values
- Display Responsive iframe Maintaining Aspect Ratio
- Dry Up SCSS With Mixins
- Give Elements The Same Width With Flexbox
- Let Pointer Events Pass Through An Element
- Lighten And Darken With CSS Brightness Filter
- Lighten And Darken With SCSS
- Make A Block Of Text Respect New Lines
- Parameterized SCSS Mixins
- :root Has Higher Specificity Than html
- Style A Background With A Linear Gradient
- Using Maps In SCSS
- Aliasing An Ansible Host
- Allow Cross-Origin Requests To Include Cookies
- Allow HTTPS Through Your UFW Firewall
- Check For Cached Site Assocation File For iOS
- Check The Status of All Services
- Check The Syntax Of nginx Files
- Connect To An RDS PostgreSQL Database
- Determine The IP Address Of A Domain
- Path Of The Packets
- Push Non-master Branch To Heroku
- Reload The nginx Configuration
- Resolve The Public IP Of A URL
- Running Out Of inode Space
- SSH Into A Docker Container
- SSL Certificates Can Cover Multiple Domains
- Wipe A Heroku Postgres Database
- All Values For A Key In A Keyword List
- Append To A Keyword List
- Assert An Exception Is Raised
- Binary Representation Of A String
- Check For A Substring Match
- Check List Membership
- Comparing DateTime Structs
- Compute Intermediate Values In A With Construct
- Compute md5 Digest Of A String
- Counting Records With Ecto
- Create A Date With The Date Sigil
- Create A List Of Atoms
- Creating A PID
- Creating Indexes With Ecto
- Defining Multiple Clauses In An Anonymous Function
- Determine The Latest Release Of A Hex Package
- Do You Have The Time?
- Do You Have The Time? - Part 2
- Documentation Lookup With Vim And Alchemist
- Dynamically Generating Atoms
- Execute Raw SQL In An Ecto Migration
- Expose Internal Representation
- Include Captures With String.split
- Inspecting The Process Message Queue
- List Functions For A Module
- Listing Files In IEx
- Match On A Map In A With Construct
- Passing Around And Using Modules
- Pattern Matching In Anonymous Functions
- Pipe Into A Case Statement
- Quitting IEx
- Range Into List Using Comprehensions
- Refer To A Module Within Itself
- Referencing Values In IEx's History
- Remove One List From Another
- Replace Duplicates In A Keyword List
- Requiring Keys For Structs
- Reversing A List
- Reversing A List - Part 2
- Root Directory Of A Project
- Round Floats To Integers
- Run ExUnit Tests In A Deterministic Order
- Run The Test At A Specific Line Number
- Same Functions Should Be Grouped Together
- Skip A Specific Test
- String Interpolation With Just About Anything
- Unique Indexes With Ecto
- Updating Values In A Map
- Using When Clauses In A With Construct
- Virtual Fields With Ecto Schemas
- When Things Don't Match The With Statements
- Word Lists For Atoms
- Accessing a Lost Commit
- Add A Range Of Filename To gitignore
- Amend Author Of Previous Commit
- Auto-Squash Those Fixup Commits
- Caching Credentials
- Change The Start Point Of A Branch
- Checking Commit Ancestry
- Checkout Old Version Of A File
- Checkout Previous Branch
- Cherry Pick A Range Of Commits
- Clean Out All Local Branches
- Clean Out Working Copy With Patched Restore
- Clean Up Old Remote Tracking References
- Clone A Repo Just For The Files, Without History
- Clone A Repo Locally From .git
- Configure Global gitignore File
- Configuring The Pager
- Copy A File From Another Branch
- Create A New Branch With Git Switch
- Delete All Untracked Files
- Determine The Hash Id For A Blob
- Diffing With Patience
- Dropping Commits With Git Rebase
- Dry Runs in Git
- Exclude A File From A Diff Output
- Excluding Files Locally
- Find And Remove Files That Match A Name
- Find The Date That A File Was Added To The Repo
- Find The Initial Commit
- Get The Name Of The Current Branch
- Get The Short Version Of The Latest Commit
- Grab A Single File From A Stash
- Grep For A Pattern On Another Branch
- Grep Over Commit Messages
- Ignore Changes To A Tracked File
- Ignore Files Specific To Your Workflow
- Include A Message With Your Stashed Changes
- Include Or Exclude Remaining Patch Changes
- Include Some Stats In Your Git Log
- Intent To Add
- Interactively Unstage Changes
- Last Commit A File Appeared In
- List All Files Changed Between Two Branches
- List Branches That Contain A Commit
- List Commits On A Branch
- List Different Commits Between Two Branches
- List Filenames Without The Diffs
- List Just The Files Involved In A Commit
- List Most Git Commands
- List Untracked Files
- List Untracked Files For Scripting
- Move The Latest Commit To A New Branch
- Pick Specific Changes To Stash
- Pulling In Changes During An Interactive Rebase
- Push To A Branch On Another Remote
- Quicker Commit Fixes With The Fixup Flag
- Rebase Commits With An Arbitrary Command
- Reference A Commit Via Commit Message Pattern Matching
- Rename A Remote
- Renaming A Branch
- Resetting A Reset
- Resolve A Merge Conflict From Stash Pop
- Review Commits From Before A Certain Date
- Run A Git Command From Outside The Repo
- Set A Custom Pager For A Specific Command
- Set Default Branch Name For New Repos
- Shorthand To Force Push A Branch
- Show All Commits For A File Beyond Renaming
- Show Changes For Files That Match A Pattern
- Show Changes In The Compose Commit Message View
- Show File Diffs When Viewing Git Log
- Show List Of Most Recently Committed Branches
- Show Only Commits That Touch Specific Lines
- Show The diffstat Summary Of A Commit
- Show The Good And The Bad With Git Bisect
- Show What Is In A Stash
- Single Key Presses in Interactive Mode
- Skip A Bad Commit When Bisecting
- Skip Pre-Commit Hooks
- Staging Changes Within Vim
- Staging Stashes Interactively
- Stash A Single Untracked File
- Stash Everything
- Stashing Only Unstaged Changes
- Stashing Untracked Files
- Switch To A Recent Branch With FZF
- Transition A Branch From One Base To Another
- Turn Off The Output Pager For One Command
- Two Kinds Of Dotted Range Notation
- Unstage Changes Wih Git Restore
- Untrack A Directory Of Files Without Deleting
- Untrack A File Without Deleting It
- Update The URL Of A Remote
- Using Commands With A Relative Date Format
- Verbose Commit Message
- Viewing A File On Another Branch
- What Changed?
- What Is The Current Branch?
- Whitespace Warnings
- Cache Playwright Dependencies Across Workflows
- Capture An Output Value For Use In A Later Step
- Disable A Workflow With The gh CLI
- Reference An Encrypted Secret In An Action
- Trigger A Workflow Via An API Call
- Access Go Docs Offline
- Build For A Specific OS And Architecture
- Not So Random
- Replace The Current Process With An External Command
- Sleep For A Duration
- Upgrading From An Older Version On Mac
- Grab Multiple Values From A Reference
- Grab Values From An Array Of References
- Include Attributes When Conditional Check Passes
- Include Type Of Operation In Webhook Response
- Deploy A Review App To A Different Stack
- Diagnose Problems In A Heroku Postgres Database
- Set And Show Heroku Env Variables
- SSH Into Heroku Server Hosting App
- Adding Alt Text To An Image
- Determine Which Button Submitted The Form
- Disable Auto-Completion For A Form Input
- Prevent Search Engines From Indexing A Page
- Render Text As Superscript
- Submit A Form With A Button Outside The Form
- Add Emoji To GitHub Repository Description
- Enable Keyboard Shortcuts In Gmail
- Exclude Whitespace Changes From GitHub Diffs
- Figure Out Your Public IP Address
- Focus The URL Bar
- Get Random Images From Unsplash
- Search Tweets By Author
- Show All Pivotal Stories With Blockers
- Accessing Arguments To A Function
- Basic Date Formatting Without A Library
- Character Codes from Keyboard Listeners
- Check Classes On A DOM Element
- Check If A Number Is Positive Or Negative
- Check If File Exists Before Reading It
- Check If Something Is An Array
- Check The Password Confirmation With Yup
- Compare The Equality Of Two Date Objects
- Computed Property Names In ES6
- Conditionally Include Pairs In An Object
- Configure Jest To Run A Test Setup File
- Create A Cancelable Promise With PCancelable
- Create An Array Containing 1 To N
- Create An Object With No Properties
- Create Bootstrapped Apps With Yarn
- Create Future And Past Dates From Today
- Custom Type Checking Error Messages With Yup
- Default And Named Exports From The Same Module
- Define A Custom Jest Matcher
- Destructure With Access To Nested Value And Parent Value;
- Destructuring The Rest Of An Array
- Enable ES7 Transforms With react-rails
- Ensure Shell Can Find Global npm Binaries
- Easy Date Comparison With DayJS
- Expand Emojis With The Spread Operator
- Fill An Input With A Ton Of Text
- Find The Version Of An Installed Dependency
- Find Where Yarn Is Installing Binaries
- for...in Iterates Over Object Properties
- Format A Decimal To A Fixed Number Of Digits
- Formatting Values With Units For Display
- Freeze An Object, Sorta
- Generate A V4 UUID In The Browser
- Generate Random Integers
- Get The Location And Size Of An Element
- Get The Response Status From An Axios Error
- Get The Time Components Of A Date
- Get The Time Zone Of The Client Computer
- Globally Install A Package With Yarn
- Globally Install Specific Version Of PNPM
- Immutable Remove With The Spread Operator
- Initialize A New JavaScript Project With Yarn
- Install The Latest Version Of Node With Nvm
- Interpolate A String Into A Regex
- ISO-8601 Formatted Dates Are Interpreted As UTC
- Link A JavaScript Package Locally
- List Top-Level NPM Dependencies
- Make The Browser Editable With Design Mode
- Matching A Computed Property In Function Args
- Matching Multiple Values In A Switch Statement
- Mock A Function With Return Values Using Jest
- New Dates Can Take Out Of Bounds Values
- Numbers Are Empty
- Object Initialization With Shorthand Property Names
- Obtain Undefined Value With The Void Operator
- Parse A Date From A Timestamp
- Pre And Post Hooks For Yarn Scripts
- Purge Null And Undefined Values From Object
- Random Cannot Be Seeded
- Reach Into An Object For Nested Data With Get
- Render An Array Of Elements With React 16
- Resolve And Pass Multiple Values From A Then
- Running ES6 Specs With Mocha
- Scoping Variables With A Block Statement
- Sleep For A Bit In Async Code
- Sorting Arrays Of Objects With Lodash
- Splat Arguments To A Function
- Spread Merging Objects Includes Nil Values
- Spread The Rest With ES6
- Start Node Process In Specific Timezone
- String Interpolation With Template Literals
- Support Nested Matching In Custom Jest Matchers
- Tell Jest To Focus On Running Only One Test
- Tell Node To Treat JS Files As ESM
- Tell Prettier To Not Format A Statement
- Test Coverage Stats With Jest
- Test Timing-Based Code With Jest Fake Timers
- The Comma Operator
- Throttling A Function Call
- Timing Processes
- Transforming ES6 and JSX With Babel 6
- Truthiness of Integer Arrays
- Turn An HTMLCollection Into An Array
- Turn Off Console Error Messages In A Test
- Waiting On Multiple Promises
- Who Am I: NPM Edition
- Write A JavaScript Object To A JSON File
- Yarn Commands Without The Emojis
- Yup Schemas Are Validated Asynchronously
- Count Each Collection In A JSON Object
- Count The Number Of Things In A JSON File
- Extract A List Of Values
- Find All Objects In An Array Where Key Is Set
- Find All Objects With A Matching Key Value Pair
- Get The First Item For Every Top-Level Key
- Reduce Object To Just Entries Of A Specific Type
- Check Ubuntu Version
- Configure Your Server Timezone
- List The Statuses Of All Upstart Jobs
- Show Current System Time And Settings
- Show Used And Available System Memory
- Upgrading Ubuntu
- Access All Screen And Video Capture Options
- Access System Information On OS X
- Access Unsupported Screen Resolutions With RDM
- Clean Up Old Homebrew Files
- Convert An HEIC Image File To JPG
- Default Screenshot Location
- Disable Swipe Navigation For A Specific App
- Display A Message With Alfred
- Find The Process Using A Specific Port
- Gesture For Viewing All Windows Of Current App
- Insert A Non-Breaking Space Character
- List All The Say Voices
- Open Finder.app To Specific Directory
- Quickly Type En Dashes And Em Dashes
- Require Additional JS Libraries In Postman
- Resize App Windows With AppleScript
- Resizing Both Corners Of A Window
- Run A Hardware Check
- Run AppleScript Commands Inline In The Terminal
- Set A Window To Its Default Zoom Level
- Specify App When Opening From Command Line
- Use Default Screenshot Shortcuts With CleanShot X
- View All Windows Of The Current App
- Determine The Database Version
- Dump A Remote Database
- Dump And Restore With A Single gzip File
- Get Size Stats For A Collection
- List Size Stats For All Collections
- Change Existing Column To Not Null
- Default Username And Password For New Instance
- Display Output In A Vertical Format
- Doing Date Math
- Dump A Database To A File
- Ignore Duplicates When Inserting Records
- List Databases And Tables
- Show Create Statement For A Table
- Show Tables That Match A Pattern
- Show Indexes For A Table
- Allow Neovim To Copy/Paste With System Clipboard
- Create User Command To Open Init Config
- Run A Lua Statement From The Command Prompt
- Set Up Vim-Plug With Neovim
- Create Files And Directories For Dynamic Routes
- Define URL Redirects In The Next Config
- Make Environment Variable Publicly Available
- Push A Route With A URL Object
- Remove A Query Param From The URL
- Ship Public Assets With A Next.js App
- Bypass Template Rendering
- Check The Installed Version
- Generate New App Without Brunch
- Render A Template To A String
- Serve Static Assets From Custom Directory
- Specifying The Digest Directory
- Specifying The Server Port
- Execute A Command From The Workspace Root
- Install Command Runs For Entire Workspace
- List The Installed Version Of A Specific Package
- A Better Null Display Character
- Add Foreign Key Constraint Without A Full Lock
- Add ON DELETE CASCADE To Foreign Key Constraint
- Adding Composite Uniqueness Constraints
- Aggregate A Column Into An Array
- Assumed Radius Of The Earth
- Auto Expanded Display
- Between Symmetric
- Capitalize All The Words
- Change The Current Directory For psql
- Check If The Local Server Is Running
- Check If User Role Exists For Database
- Check Table For Any Oprhaned Records
- Checking Inequality
- Checking The Type Of A Value
- Clear The Screen In psql
- Clear The Screen In psql (2)
- Compute Hashes With pgcrypto
- Compute The Levenshtein Distance Of Two Strings
- Compute The md5 Hash Of A String
- Configure The Timezone
- Constructing A Range Of Dates
- Convert A String To A Timestamp
- Count How Many Records There Are Of Each Type
- Count Records By Type
- Count The Number Of Trues In An Aggregate Query
- Create A Composite Primary Key
- Create A Table From The Structure Of Another
- Create An Index Without Locking The Table
- Create Database Uses Template1
- Create hstore From Two Arrays
- Create Table Adds A Data Type
- Creating Conditional Constraints
- Creating Custom Types
- Day Of Week By Name For A Date
- Day Of Week For A Date
- Default Schema
- Defining Arrays
- Determine Types Of JSONB Records
- Determining The Age Of Things
- Difference Between Explain And Explain Analyze
- Different Ways To Define An Interval
- Dump All Databases To A SQL File
- Dump And Restore A Database
- Dump The SQL Needed To Recreate A Table
- Duplicate A Local Database
- Edit Existing Functions
- Enable Logging Of Database Activity
- Escaping A Quote In A String
- Escaping String Literals With Dollar Quoting
- Export Query Results To A CSV
- Extracting Nested JSON Data
- Find Duplicate Records In Table Without Unique Id
- Find Records That Contain Duplicate Values
- Find Records That Have Multiple Associated Records
- Find The Data Directory
- Find The Location Of Postgres Config Files
- Fizzbuzz With Common Table Expressions
- Force SSL When Making A psql Connection
- Generate A UUID
- Generate Random UUIDs Without An Extension
- Generate Series Of Numbers
- Generating UUIDs With pgcrypto
- Get A Quick Approximate Count Of A Table
- Get The Size On Disk of An Index
- Get The Size Of A Database
- Get The Size Of A Table
- Get The Size Of An Index
- Getting A Slice Of An Array
- Group By The Result Of A Function Call
- Idempotent Inserts
- Include All Queries In The Log File
- Include Multiple Tables In A pg_dump
- Insert A Bunch Of Records With Generate Series
- Insert Just The Defaults
- Inspect Progress Of Long-Running Create Index
- Install Postgres With uuid-ossp Using asdf
- Integers In Postgres
- Intervals Of Time By Week
- Is It Null Or Not Null?
- Label Dollar-Quoted Strings With A Tag
- Limit Execution Time Of Statements
- List All Columns Of A Specific Type
- List All Rows In A Table
- List All The Databases
- List All Versions Of A Function
- List Available Schemas
- List Connections To A Database
- List Databases Available For Connecting
- List Database Objects With Disk Usage
- List Database Users
- List Various Kinds Of Objects
- Lower Is Faster Than ilike
- Max Identifier Length Is 63 Bytes
- Open Heroku Database In Postico From Terminal
- pg Prefix Is Reserved For System Schemas
- Prepare, Execute, And Deallocate Statements
- Pretty Print Data Sizes
- Pretty Printing JSONB Rows
- Prevent A Query From Running Too Long
- Print The Query Buffer In psql
- Remove Not Null Constraint From A Column
- Renaming A Sequence
- Renaming A Table
- Restart A Sequence
- Restarting Sequences When Truncating Tables
- Salt And Hash A Password With pgcrypto
- Send A Command To psql
- Set Inclusion With hstore
- Set A Seed For The Random Number Generator
- Set A Statement Timeout Threshold For A Session
- Sets With The Values Command
- Shorthand Absolute Value Operator
- Show All Versions Of An Operator
- Show The Hidden Queries Behind Backslash Commands
- Sleeping
- Special Math Operators
- Storing Emails With citext
- String Contains Another String
- Switch Non-Castable Column Type With Using Clause
- Switch The Running Postgres Server Version
- Temporarily Disable Triggers
- Temporary Tables
- Terminating A Connection
- The nullif Function
- Timestamp Functions
- Toggling The Pager In PSQL
- Track psql History Separately Per Database
- Truncate All Rows
- Truncate Tables With Dependents
- Turning Timing On
- Two Ways To Compute Factorial
- Two Ways To Escape A Quote In A String
- Types By Category
- Union All Rows Including Duplicates
- Use A psqlrc File For Common Settings
- Use Argument Indexes
- Use Not Valid To Immediately Enforce A Constraint
- Use Rename To Hot Swap Two Tables
- Use Variables In An Anonymous Function
- Using Expressions In Indexes
- Using Intervals To Offset Time
- Who Is The Current User
- Word Count for a Column
- Write A Query Result To File
- Apply Separate Formatting With A Blank Line
- Batch Insert Records With createMany
- Execute A Raw SQL Query
- Grab A Limited Set Of Records
- Open Connections To Multiple Databases
- Specify Alternate Location For Prisma Schema
- Add A Check Constraint To A Table
- Add A Foreign Key Reference To A Table
- Add A Reference Column With An Index
- Add ActiveRecord Error Not Tied To Any Attribute
- Add React With Webpacker To A New Rails App
- Add timestamptz Columns With The Migration DSL
- Access Secrets In A Rails 5.2 App
- ActiveRecord Query For This Or That
- Advance The Date
- Allow Associations To Be Optional
- Allow List Params Anywhere With Strong Params
- All or Nothing Database Transactions
- Alphabetize Schema Columns To Keep Them Consistent
- Assert Two Arrays Have The Same Items With RSpec
- Attach A File With Capybara
- Attribute Getter without the Recursion
- Attribute Was
- Autosave False On ActiveRecord Associations
- Bind Parameters To ActiveRecord SQL Query
- Build A Hash Of Model Attributes
- Capture Development Emails With Mailhog
- Capybara Page Status Code
- Cast Common Boolean-Like Values To Booleans
- Change The Nullability Of A Column
- Change The Time Zone Offset Of A DateTime Object
- Check If ActiveRecord Update Fails
- Check If Any Records Have A Null Value
- Check Specific Attributes On ActiveRecord Array
- Code Statistics For An Application
- Columns With Default Values Are Nil On Create
- Comparing DateTimes Down To Second Precision
- Conditional Class Selectors in Haml
- Convert A Symbol To A Constant
- Count The Number Of Records By Attribute
- Create A Custom Named References Column
- Create A Join Table With The Migration DSL
- Creating Records of Has_One Associations
- Custom Validation Message
- Customize Paths And Helpers For Devise Routes
- Customize The Path Of A Resource Route
- Delete Paranoid Records
- Demodulize A Class Name
- Different Ways To Add A Foreign Key Reference
- Disambiguate Where In A Joined Relation
- Ensure A Rake Task Cannot Write Data
- Ensure Migrations Use The Latest Schema
- Ensure Record Saved With after_commit Callback
- Find Or Create A Record With FactoryBot
- Find Records With Multiple Associated Records
- Force All Users To Sign Out
- Generating And Executing SQL
- Get A Quick Approximate Count Of A Large Table
- Get ActiveRecord Attribute Directly From Database
- Get An Array Of Values From The Database
- Get An Empty ActiveRecord Relation
- Get Help With A Rails App Update
- Get The Column Names For A Model
- Get The Current Time
- Grab A Random Record From The Database
- Handle Named Arguments In A Rake Task
- Hash Slicing
- Ignore Poltergeist JavaScript Errors
- Include Devise Helpers In Your Controller Tests
- Inspect Previous Changes To ActiveRecord Object
- Link To The Current Page With Query Params
- List All Installable Rails Versions
- List The Enqueued Jobs
- Load A File When Starting Rails Console
- Load Records In Batches With find_each
- Log SQL Queries Executed By ActiveRecord
- Mark A Migration As Irreversible
- Make ActionMailer Synchronous In Test
- Make Remove Column Migration Reversible
- Manually Run A Migration From Rails Console
- Mark For Destruction
- Mask An ActiveRecord Attribute
- Merge A Scope Into An ActiveRecord Query
- Migrating Up Down Up
- Order Matters For
rescue_from
Blocks - Params Includes Submission Button Info
- Params Is A Hash With Indifferent Access
- Parse Query Params From A URL
- Parse Request Params In Rack::Attack Block
- Perform SQL Explain With ActiveRecord
- Polymorphic Path Helpers
- Pretend Generations
- Prevent Writes With A Sandboxed Rails Console
- Query A Single Value From The Database
- Read In Environment-Specific Config Values
- Read-Only Models
- Remove A Database Column From A Table
- Remove The Default Value On A Column
- Render An Alternative ActionMailer Template
- Render The Response Body In Controller Specs
- Replace An Index With A Unique Index
- Rescue From
- Rescue From With A Separate Method
- Respond With JSON Regardless of Content Type
- Retrieve An Object If It Exists
- Rollback A Specific Migration Out Of Order
- Rounding Numbers With Precision
- Run A Rake Task Programmatically
- Run Some Code Whenever Rails Console Starts
- Schedule Sidekiq Jobs Out Into The Future
- Secure Passwords With Rails And Bcrypt
- Select A Select By Selector
- Select Value For SQL Counts
- Serialize With fast_jsonapi In A Rails App
- Set A Timestamp Field To The Current Time
- Set default_url_options For Entire Application
- Set Schema Search Path
- Set Statement Timeout For All Postgres Connections
- Set The Default Development Port
- Show Pending Migrations
- Show Rails Models With Pry
- Show Rails Routes With Pry
- Skip Validations When Creating A Record
- Specify New Attributes For #find_or_create_by
- Temporarily Disable strong_params
- Test For A Subset Of Attributes On A Model
- Test If An Instance Variable Was Assigned
- Test If deliver_later Is Called For A Mailer
- Test Out URL And Path Helpers In The Console
- Truncate Almost All Tables
- Update Column Versus Update Attribute
- Upgrading Your Manifest For Sprocket's 4
- Use IRB And Ruby Flags With Rails Console
- Verify And Read A Signed Cookie Value
- Where Am I In The Partial Iteration?
- Why Redirect And Return In Controllers
- Wipe Out All Precompiled Assets
- Write Reversible Migration To Set Default
- Write Safer Where Clauses With Placeholders
- A Component Is Just A Bag Of Data
- Access The Latest Lifecycle Methods In An Old App
- Accessing Env Vars In create-react-app
- Accessing Location Within @reach/router
- Allow md As An Extension With gatsby-mdx
- Alter The Display Name Of A Component
- Building A React App In The Browser
- Check The Type Of A Child Component
- Conditionally Including Event Handler Functions
- Create A Snowpack-Bundled React App
- Create Dynamically Named Custom React Components
- create-react-app Comes With Lodash
- create-react-app Has A Default Test Setup File
- CSS !important Is Not Supported By Inline Styles
- Debug Jest Tests In create-react-app
- Defining State In A Simple Class Component
- Destructure Variables As Props To A Component
- Details Tags Are A Controllable Component
- Dispatch Anywhere With Redux
- Dynamically Add Props To A Child Component
- Dynamically Create HTML Elements
- Enforce Specific Values With PropTypes
- Focus An Input With useRef Hook
- Force A Component To Only Have One Child
- Forcing A Child Remount With The Key Prop
- Formik Connected Components
- Formik's Validation Schema As A Function
- Inactive And Active Component Styles With Radium
- Inline Style Attributes Should Be Camel Cased
- Manage State In A Functional Component
- Mapping Over One Or Many Children
- Mock A Function That A Component Imports
- Navigate With State Via @reach/router
- Pairing A Callback With A useState Hook
- Pass A Function To A useState Updater
- Passing Props Down To React-Router Route
- Prevent reach/router Redirect Error Screen In Dev
- Proxy To An API Server In Development With CRA
- Quickly Search For A Component With React DevTools
- @reach/router Renders To A Div
- Read Only Input Elements
- Rendering Multiple Nodes With Fragments
- Set The Type For A useState Hook
- Specifying Dependencies Of A useEffect Hook
- Spelunking Through Components With Enzyme's Dive
- Sync Your react-router State With Redux
- Test Files In create-react-app
- Test That Element Does Not Render In The Component
- Trigger Effect Only When The Component Mounts
- Update Formik Initial Values When Props Change
- Upgrading To The Latest React In CodeSandbox
- Use A Ref To Autofocus An Input
- Use React 16 With Gatsby
- Use withRouter To Pass Down React-Router History
- Visually Select A React Element For Inspection
- Who Is Your Favorite Child?
- Wrap The Root Of A Gatsby App In A Component
- Check That A Component Renders As Null
- findBy* Queries Have Async Built In
- Pretty Print Some DOM To Debug A Test
- Test A Component That Uses React Portals
- Break Out Of A While Loop
- Compile Reason To Native With Dune
- Compile Reason With An OCaml Package Using Dune
- Create A Map Of Strings
- Create A Stream From An Array
- Creating A 2D Array
- Data Structures With Self-Referential Types
- Defining Variants With Constructor Arguments
- Dynamically Create A Printf String Format
- Exhaustive Pattern Matching Of List Variants
- Format The Current File Within Vim
- Generate A Native ReasonML Project With Pesy
- Generate Starter Reason Projects
- Helping The Compiler Help Us With Variants
- Inline Component Styles With Reason React
- Is This A Directory Or A File?
- Making Things Mutable
- Modifying A String With blit_string
- Multi-Argument Functions As Syntactic Sugar
- Pattern Match On Exceptions
- Quickly Bootstrap A React App Using Reason
- Seeding And Generating Random Integers
- Stream A File Line By Line
- String Interpolation With Integers And Sprintf
- String Interpolation With Quoted Strings
- Trying Out ReasonML In CodeSandbox
- Two Ways To Find An Item In A List
- Using Optional Labeled Function Arguments
- Wrapping A Component For Use In JavaScript
- Get Query Params From The Request URL
- Markdown And MDX Files Are Rendered To Routes
- Relative And Absolute Paths In Links
- Run The Development Server From Another Port
- Set The Title Of A Page
- Check Specific Arguments To Received Method
- Find Minimal Set Of Tests Causing A Flicker
- Run Tests With Documentation Formatting
- Use Specific Cache Store In A Single Test
- A Basic Case Statement
- A Shorthand For Rerunning Failed Tests With RSpec
- Add Comments To Regex With Free-Spacing
- Add Linux As A Bundler Platform
- Are They All True?
- Assert About An Object's Attributes With RSpec
- Assoc For Hashes
- Block Comments
- Build HTTP And HTTPS URLs
- Chaining Multiple RSpec Change Matchers
- Check For Any Overlaps In List Of Ranges
- Check If A URL Resolves To 200
- Check If An Object Includes A Module
- Check Return Status Of Running A Shell Command
- Click On Text With Capybara
- Colorful Output With MiniTest
- Comparing Class Hierarchy Relationships
- Comparing Arrays In RSpec
- Construct A Constant From A String
- Convert A Unix Epoch Timestamp To A Time Object
- Create an Array of Stringed Numbers
- Create a CSV::Table Object
- Create A Hash From An Array Of Arrays
- Create Listing Of All Middleman Pages
- Create Named Structs With Struct.new
- Create Thumbnail Image For A PDF
- Defaulting To Frozen String Literals
- Define A Custom RSpec Matcher
- Define A Method On A Struct
- Destructure The First Item From An Array
- Destructuring Arrays In Blocks
- Disassemble Some Codes
- Double Splat To Merge Hashes
- Edit Previous Parts Of The Pry Buffer History
- Editing Code In Pry
- Encode A String As URL-Safe Base64
- Enumerate A Pairing Of Every Two Sequential Items
- Evaluating One-Off Commands
- Exclude Values From An Array
- Exit A Process With An Error Message
- Expect A Method To Be Called And Actually Call It
- Extract A Column Of Data From A CSV File
- FactoryGirl Sequences
- Fail
- Fetch Warns About Superseding Block Argument
- Find The Min And Max With A Single Call
- Finding The Source of Ruby Methods
- Generate A Signed JWT Token
- Generate Ruby Version And Gemset Files With RVM
- Get Info About Your RubyGems Environment
- Get The Output Of Running A System Program
- Identify Outdated Gems
- If You Detect None
- Iterate With An Offset Index
- Include Extra Context In A Honeybadger Notify
- Ins And Outs Of Pry
- Invoking Rake Tasks Multiple Times
- IRB Has Built-In Benchmarking With Ruby 3
- Jump Out Of A Nested Context With Throw/Catch
- Last Raised Exception In The Call Stack
- Limit Split
- List The Running Ruby Version
- Listing Local Variables
- Make An Executable Ruby Script
- Map With Index Over An Array
- Mock Method Chain Calls With RSpec
- Mocking Requests With Partial URIs Using Regex
- Named Regex Captures Are Assigned To Variables
- Navigate Back In The Browser With Capybara
- Next And Previous Floats
- Or Operator Precedence
- Override The Initial Sequence Value
- Parallel Bundle Install
- Parse JSON Into An OpenStruct
- Parsing A CSV With Quotes In The Data
- Pass A Block To Count
- Passing Arbitrary Methods As Blocks
- Passing Arguments To A Rake Task
- Pattern Match Values From A Hash
- Percent Notation
- Precedence Of Logical Operators
- Question Mark Operator
- Rake Only Lists Tasks With Descriptions
- Read The First Line From A File
- Rendering ERB
- Replace The Current Process With An External Command
- Require Entire Gemfile In Pry Session
- Rerun Only Failures With RSpec
- Retry A Block After An Exception
- Return The Thing Being Printed
- Returning With Sequel
- rexml Is A Bundled Gem As Of Ruby 3.0.0
- Run An Older Version Of Bundler
- Running A Single MiniTest Example
- Safe Navigation Operator
- Scripting With RVM
- Scroll To Top Of Page With Capybara
- Set RVM Default Ruby
- Shift The Month On A Date Object
- Show Public Methods With Pry
- Silence The Output Of A Ruby Statement In Pry
- Single And Double Quoted String Notation
- Skip Specific CVEs When Auditing Your Bundle
- Specify Dependencies For A Rake Task
- Split A Float Into Its Integer And Decimal
- Squeeze Out The Extra Space
- String Interpolation With Instance Variables
- Summing Collections
- Triple Equals: The Case Equality Operator
- Turn Key And Value Arrays Into A Hash
- Turning Any Class Into An Enumerator
- Turning Things Into Hashes
- Uncaught Exceptions In Pry
undef_method
And The Inheritance Hierarchy- Uninstall Specific Version Of A Ruby Gem
- Unpacking Strings Into Binary
- Up And Down With Integers
- Update The Gemfile Bundled With Version
- Use A Case Statement As A Cond Statement
- Use dotenv In A Non-Rails Project
- Use Tap For Better Test Data Setup
- Using BCrypt To Create And Check Hashed Passwords
- What To Do When You Don't Rescue
- Who Are My Ancestors?
- Wrap Things In An Array, Even Hashes
- Zero Padding
- Apply Multiple Substitutions To The Input
- Equivalence Classes Of Repetition MetaChars
- Extract Value From Command Output With Sed
- Grab All The Method Names Defined In A Ruby File
- Grab The First Line Of A File
- OSX sed Does Regex A Bit Different
- Output Only Lines Involved In A Substitution
- Reference A Capture In The Regex
- Use An Alternative Delimiter In A Substitution
- Base Styles For Text Link
- Specify Paths For Purging Unused CSS
- Use Tailwind Typography Prose In Dark Mode
- Access Past Copy Buffer History
- Adjusting Window Pane Size
- Break Current Pane Out To Separate Window
- Change Base Directory Of Existing Session
- Change Base Directory Without Detaching
- Change The Default Prefix Key
- Create A Named tmux Session
- Create A New Session In A New Server
- Cycle Through Layouts
- Display Titles For Each Pane In A Window
- Enabling Vi Mode
- Get Mouse Copy/Paste Working In Kitty
- Hiding The Status Bar
- Jumping Between Sessions
- Kill All Your tmux Sessions
- Kill Other Connections To A Session
- Kill The Current Session
- List All Key Bindings
- List Sessions
- Open New Window With A Specific Directory
- Organizing Windows
- Paging Up And Down
- Pane Killer
- Reclaiming The Entire Window
- Remove The Delay On The Escape Key
- Rename The Current Session
- Reset An Option Back To Its Default Value
- Set Environment Variables When Creating Session
- Set Session Specific Environment Variables
- Show The Current Value For An Option
- Swap Split Panes
- Switch To A Specific Session And Window
- tmux in your tmux
- Toggle Between Two Common Sessions
- Add Generic Typing To An Anonymous Function
- Add Types To An Object Destructuring
- Compiler Checks For Unused Params And Variables
- Create A Non-Empty Array Type
- Create A Union Type From An Array
- Create Union Type From Constants
- Extract Object Type Keys Into A Union Type
- Extract Object Type Values Into A Union Type
- Generate An Initial tsconfig File
- Generate Inferred Type From Zod Schema
- Get The Return Type Of An Async Function
- Interfaces With The Same Name Are Merged
- Narrow The Type Of An Array To Its Values
- Re-Export An Imported Type
- Type Narrowing With Const VS Let Strings
- Type Narrowing With Similarly Shaped Objects
- Type Promise Results With The Awaited Type
- Use An Array Check For Type Narrowing
- Zero-Config Environments For Trying Out Types
- All The Environment Variables
- Cat A File With Line Numbers
- Cat Files With Color Using Bat
- Change Default Shell For A User
- Change To That New Directory
- Check If A Port Is In Use
- Check If Command Is Executable Before Using
- Check SSH Key Fingerprints Of Known Hosts
- Check The Current Working Directory
- Clear The Screen
- Command Line Length Limitations
- Compare Two Variables In A Bash Script
- Configure cd To Behave Like pushd In Zsh
- Copying File Contents To System Paste Buffer
- Copying Nested Directories With Ditto
- Count The Number Of Matches In A Grep
- Count The Number Of ripgrep Pattern Matches
- Create A File Descriptor with Process Substitution
- Create A Sequence Of Values With A Step
- Curl With Cookies
- Curling For Headers
- Curling With Basic Auth Credentials
- Different Ways To Generate A v4 UUID
- Display All The Terminal Colors
- Display Free Disk Space
- Display The Contents Of A Directory As A Tree
- Do A Dry Run Of An rsync
- Do Not Overwrite Existing Files
- Enable Multi-Select Of Results With fzf
- Exclude A Command From The ZSH History File
- Exclude A Directory With Find
- Exclude Certain Files From An rsync Run
- Figure Out The Week Of The Year From The Terminal
- File Type Info With File
- Find All Files Matching A Name With fd
- Find All Files With A Specific Extension With fd
- Find A File Installed By Brew
- Find Duplicate Lines In A File
- Find Files With fd
- Find Newer Files
- Find Occurrences Of Multiple Values With Ripgrep
- Fix Unlinked Node Binaries With asdf
- Forward Multiple Ports Over SSH
- Generate A SAML Key And Certificate Pair
- Get Matching Filenames As Output From Grep
- Get The Unix Timestamp
- Global Substitution On The Previous Command
- Globbing For All Directories In Zsh
- Globbing For Filenames In Zsh
- Grep For Files Without A Match
- Grep For Files With Multiple Matches
- Grep For Multiple Patterns
- Hexdump A Compiled File
- Ignore A Directory During ripgrep Search
- Ignore The Alias When Running A Command
- Interactively Browse Available Node Versions
- Jump To The Ends Of Your Shell History
- Kill Everything Running On A Certain Port
- Killing A Frozen SSH Session
- Last Argument Of The Last Command
- Less With Style
- List All The Enabled ZSH Options
- List All Users
- List Files Ordered By Modification Date
- List Names Of Files With Matches
- List Of Sessions To A Machine
- List Parent pid With ps
- List Stats For A File
- List The Available JDKs
- List The Stack Of Remembered Directories
- Load Env Vars In Bash Script
- Map A Domain To localhost
- Negative Look-Ahead Search With ripgrep
- Occupy A Local Port With Netcat
- Only Show The Matches
- Open The Current Command In An Editor
- Partial String Matching In Bash Scripts
- PID Of The Current Shell
- Print A Range Of Lines For A File With Bat
- Print Out Files In Reverse
- Print The Current Date In Human-Readable Format
- Provide A Fallback Value For Unset Parameter
- Remove A Directory Called
-p
- Repeat Yourself
- Replace Pattern Across Many Files In A Project
- Run A Command Repeatedly Several Times
- Run A cURL Command Without The Progress Meter
- Safely Edit The Sudoers File With Vim
- Saying Yes
- Search Files Specific To A Language
- Search History
- Search Man Page Descriptions
- Securely Remove Files
- Set The asdf Package Version For A Single Shell
- Show A File Preview When Searching With FZF
- Show Disk Usage For The Current Directory
- Show The Size Of Everything In A Directory
- Skip Paging If Output Fits On Screen With Less
- SSH Escape Sequences
- SSH With Port Forwarding
- Specify The Language For A File With Bat
- Sort In Numerical Order
- Switch Versions of a Brew Formula
- Touch Access And Modify Times Individually
- Undo Some Command Line Editing
- Update Package Versions Known By asdf Plugin
- Use fzf To Change Directories
- Use Regex Pattern Matching With Grep
- View A Web Page In The Terminal
- Watch The Difference
- Watch This Run Repeatedly
- Where Are The Binaries?
- xargs Default Command Is echo
- xargs Ignores Alias Substitution By Default
- Add Web Server Layer Redirects
- Deploy An App Without Pushing An Empty Commit
- Naming Of The Vercel Config File
- Pin Specific pnpm Version For Builds
- Share Development Environment Variables Via CLI
- Aborting Git Commits And Rebases
- Absolute And Relative Line Numbers
- Add A File Without Loading It
- Add Custom Dictionary Words
- All The Ways To Write And Quit In Vim
- Almost The End Of The Line
- Alternate Files With vim-rails
- Always Keep The Gutter Open
- Amend Commits With Fugitive
- Backspace Options
- Beginning And End Of Previous Change
- The Black Hole Register
- Blank Lines Above And Below
- Breaking The Undo Sequence
- Buffer Time Travel
- Build And Install A Go Program
- Case-Aware Substitution With vim-abolish
- Case-Insensitive Substitution
- Center The Cursor
- Check For An Executable
- Check Your Current Color Scheme
- Clear Out The Jump List
- Close All Other Splits
- Close All Other Windows
- Close the Current Buffer
- Coerce The Current Filetype
- Coercing Casing With vim-abolish
- Configure FZF To Use fd For File Finding
- Count the Number of Matches
- Create A New Directory In netrw
- Create A New File In A New Directory
- Creating Non-Existent Directories
- Default netrw To Tree Liststyle
- Delete Every Other Line
- Delete Lines That Match A Pattern
- Delete To The End Of The Line
- Deleting Buffers In BufExplorer
- Deleting Directories Of Files From netrw
- Detect If You Are On A Mac
- Difference Between :wq and :x
- Display Word Count Stats
- Edges Of The Selection
- Edit A File At A Specific Line Number
- Edit A File Starting On The Last Line
- End Of The Word
- Escaping Terminal-Mode In An Nvim Terminal
- Filter Lines Through An External Program
- Find The Nth Character Position In A File
- Fix The Spelling Of A Word
- Fold A Visual Selection And Expand It Back
- For When That Escape Key Is Hard To Reach
- Format Long Lines To Text Width
- From Ruby Variables To JavaScript Variables
- Generate and Edit Rails Migration
- Get The pid Of The Session
- Go Back To The Previous Window
- Go To File With Line Number
- Grepping Through The Vim Help Files
- Head of File Name
- Help For Non-Normal Mode Features
- Highlighting Search Matches
- Horizontal to Vertical and Back Again
- Increment All The Numbers
- Incremental Searching
- Interact With The Alternate File
- Interactive Buffer List
- Joining Lines Together
- Jump Back To The Latest Jump Position
- Jump Between And Stage Git Hunks With Fugitive
- Jump To Matching Pair
- Jump To The Next Misspelling
- List All Buffers
- List autocmds Configured For The Current Buffer
- List Of Plugins
- Load A Directory Of Files Into The Buffer List
- Make Directories For The Current File
- Marks Across Vim Sessions
- Match The Beginning And End Of Words
- Moving To A Specific Line
- Navigate To The Nth Column On A Line
- Navigating By Blank Lines
- NETRW Listing Styles
- Next Modified Buffer
- Normal Node Binding To Just Quit
- Open A Tag In A Split Window
- Open an Unnamed Buffer
- Open FZF Result In A Split
- Open Routes File With vim-rails
- Open The Directory Of The Current File
- Open The Fugitive Git Summary Window
- Open The Gemfile
- Open The Latest Rails Migration
- Open The Selected Lines In GitHub With Gbrowse
- Open Vim To A Tag Definition
- Opening a URL
- Opening Man Pages In Vim
- Paste A Register From Insert Mode
- Preventing Typos with Abbreviations
- Previous Buffer
- Previous Visual Selection
- Print The Relative Path Of The Current File
- Print Version Information
- Quick File Info
- Quick Man Pages
- Quick Quickfix List Navigation
- Quickly Fix A Misspelled Word
- Quickly Switch To A Buffer By Number
- Quit When There Is An Argument List
- Re-indenting Your Code
- Read In The Contents Of A Rails File
- Rename A File Through netrw
- Rename Current File
- Repeat The Previous Change
- Repeating Characters
- Replace A Character
- Reset Target tslime Pane
- Reverse A Group Of Lines
- Rotate Everything By 13 Letters
- Rotate The Orientation Of Split Windows
- Running Bundle With vim-bundler
- Scrolling Relative to the Cursor
- Search Backward Through A File
- Searching For Hex Digits
- Select Several Results From An FZF Search
- Set End Of Line Markers
- Set Your Color Scheme
- Setting Filetype With Modelines
- Show All Syntax Highlighting Rules
- Show Matching Entries For Help
- Specify The Line Height Of The Quick Fix Window
- Split Different
- Split The Current Window
- Splitting For New Files
- Source Original vimrc When Using Neovim
- Swap Occurrences Of Two Words
- Swapping Split Windows
- Swap The Position Of Two Split Windows
- Tabs To Spaces
- The Vim Info File
- Toggle Absolute And Relative Paths In BufExplorer
- Toggling Syntax Highlighting
- Turning Off Search Highlighting
- Unloading A Buffer
- Use Active Window With BufExplorer
- Use The Terminal Inside A Vim Session
- Using vim-surround With A Visual Selection
- Verbose Commits With Fugitive
- View Commit History of a File
- View The Current File In GitHub
- Viewing Man Pages with man.vim
- Vim Without The Extras
- What Is On The Runtime Path?
- Whole Line Auto-Completion
- Wrap With Some Room
- Add The VSCode CLI To Your Path
- Advance Through Search Results
- Enable Breadcrumbs For Version 1.26 Release
- Open An Integrated Terminal Window
- Toggle Between Terminals
- Better Module Imports With Aliases
- Debugging With Full Source Maps
- Run ESLint As A Preloader
- Specify Port Of CRA's Webpack Dev Server
- Use A Specific Config File
- Change Window Name In iTerm
- Convert An ePub Document To PDF On Mac
- Create A Public URL For A Local Server
- Enable Dev Tools For Safari
- Forward Stripe Events To Local Server
- Get Your Public IP Address
- Import A Github Project Into CodeSandbox
- Interactively Kill A Process With fkill
- Open Slack's Keyboard Shortcuts Reference Panel
- Prune The Excess From node_modules
- Rotate An Image To Be Oriented Upright
- Set Recurring Reminders In Slack
- Toggle Between Stories In Storybook
- Update asdf Plugins With Latest Package Versions
- View The PR For The Current GitHub Branch
- Always Use Inline Functions With Assign
- Custom Jest Matcher For XState Machine States
- Define Event That Does Internal Self Transition
- Events Stop Propagating Once Handled
- Inline Actions vs Actions In Machine Options
- Make Immediate And Delayed Transitions
- Simple States And Composite States
- Start A Machine In A Specific State
- Use An XState Machine With React
- Check If An Object Is Empty With Zod
- Create A Schema That Matches On Any Object
- Create Union Type Of Nearly Identical Objects
- Incorporate Existing Type Into Zod Schema
The .vimrc
file for this project contains a function CountTILs
that can
be invoked with <leader>c
. This will do a substitution count of the
current number of TILs and display the result in the command tray.
I shamelessly stole this idea from thoughtbot/til.
© 2015-2022 Josh Branchaud
This repository is licensed under the MIT license. See LICENSE
for
details.