Today I Learned
- Field Variables - 2025-05-21
- Use the
DEBUG
Trap to Step Through a Script - 2020-10-19 - Always Enclose Variable Names in Double Quotes - 2021-07-19
- Shell Script Template - 2024-08-21
- Default Error Behavior - 2024-08-25
- Use the timeout command to limit execution time - 2025-06-13
=
Serves as Padding in Base64 Encoded Strings - 2020-07-01- Unicode playing cards layout - 2025-07-11
- Use Logpoints to Log Messages to the Console - 2020-05-03
- Use DevTools to Take Screenshots - 2020-07-05
- Use Commonly Available Characters for Progress Indicators - 2022-01-09
-
- 2024-05-11
- Implement GraphQL Servers in Cloudflare Workers - 2020-07-27
- Upside Down Table Trick - 2024-08-28
grid-area
- 2024-09-02- Blurry Image Placeholders - 2025-05-15
- Regex-Flavored Attribute Selectors in CSS - 2025-06-11
text-wrap: balance
for Better Layouts - 2025-06-12- Transform Origin Changes Animation Behavior - 2025-07-09
- Useful HTTP Flags - 2021-06-28
- Django Drops the SQL
DEFAULT
Constraint When Creating New Columns - 2022-01-27 {% querystring %}
Template Tag - 2024-09-02
- Enable Long-Lived Container Logs - 2022-11-02
- Remove All Newlines from a Selected Region - 2020-10-17
- Remove All Whitespace from Beginning of All Lines - 2020-10-18
- Update Feature Branch to Latest
main
- 2021-03-31 - Insert Detailed Timestamps - 2024-05-13
- Push an Empty Commit - 2020-05-05
- Use Exclamation Marks in Commit Messages - 2020-05-05
- Use Multiple
git commit
Message Flags to Create Multiline Commits - 2020-07-12 - The Differences Between
.git/info/exclude
and.gitignore
- 2020-08-02 - Git Only Stores Timestamps and Author Information on Commits - 2020-08-02
- Set Default for Initial Branch Name - 2020-08-09
- Move a Range of Commits Between Branches - 2021-03-31
- Move Individual Commits Between Branches with
cherry-pick
- 2021-03-31 - Get Earliest Commit Over Time Range - 2024-08-26
- Use
stage
Instead ofadd
for Clarity - 2025-07-11
- Use the Fuzzy File Finder to Navigate Repos - 2020-05-03
- Use Relative Paths to Link to Wiki Pages from README.md - 2020-07-11
- Create New Gists and Repos with
.new
URLs - 2020-07-18
- Create Multiline Strings Using Backticks - 2020-07-28
- Concatenate Strings Efficiently with
bytes.Buffer
andstrings.Builder
- 2020-07-28
- Throbber - 2021-06-28
- grep: Extended Regex with -E Flag - 2025-07-10
- grep: Ignore Case with -i Flag - 2025-07-10
- grep: Invert Match with -v Flag - 2025-07-10
- grep: List Matching Files with -l Flag - 2025-07-10
- grep: Match Whole Words with -w Flag - 2025-07-10
- grep: Output Only Matches with -o Flag - 2025-07-10
- Basic vs extended regular expressions in
grep
- 2025-07-13 - grep: Recursive Search with -r Flag - 2025-07-14
- grep: Show Context Lines with -C Flag - 2025-07-14
- grep: Show Lines After Match with -A Flag - 2025-07-14
- grep: Show Lines Before Match with -B Flag - 2025-07-14
- grep: Skip Binary Files with -I Flag - 2025-07-14
- grep: Suppress Filenames with -h Flag - 2025-07-14
- String Concatenation Operators - 2024-08-12
<h1>
Element Explicit Styling - 2025-06-12
- CORS Preflight Requests Communicate Which Methods and Headers a Server Should Allow - 2020-06-30
- Trigger Opt-in File Downloads with the
Content-Disposition
Response Header - 2020-10-18
- Inconsistencies in
Date
- 2020-08-03 - Use Numeric Separators to Parse Large Numbers by Eye - 2020-08-09
- Disable Jest's Auto-generated Coverage Reports - 2020-08-29
- Dates as Keys are not Equal - 2021-02-07
- Canceling Asynchronous Threads Can Be Tricky - 2021-02-07
- Every Readable Stream is Asynchronously Iterable - 2021-03-31
- Lexicographical String Comparison - 2021-03-31
- Pump Large (> 2^53) Numbers Through Your Data Pipeline to Check for Leaks - 2021-03-31
- JavaScript
RegExp
Objects are Stateful - 2022-01-12 Object.is
is Different From===
and!==
- 2022-01-13in
Operator Patterns are Rare - 2023-03-02- HTML Comment Syntax in JavaScript - 2025-06-12
- Avoiding Nil - 2021-07-19
- Perform Search Engine Queries from Spotlight - 2020-08-08
- Reveal
.
Files in Finder - 2024-08-24 - Modifier Keys in Menu Bar - 2024-08-24
- Instruments - 2024-08-30
libuv
Implements a Reactor Pattern - 2021-03-31- Basic Node Test Runner - 2022-01-11
- Lazy-Iteration Over Multiple Sorted Enumerables, Preserving Order - 2024-08-21
uv run
in the Shebang Line - 2024-08-21- Thunks for Delayed Computation and Dependency Injection - 2025-06-11
- Avoid Boolean Flag Arguments - 2025-06-12
- The Difference Between
Ctrl+c
andCtrl+\
- 2020-08-26
- Write a Query Result to a File - 2020-07-28
- Export Text Without Headers and Formatting - 2020-07-28
- Drop a Database Even When Clients are Connected - 2020-10-17
psql
Notes - 2024-08-17- Postgres
DiskFull
Error - 2024-08-17 - Idenfity
NULL
JSON Values - 2024-08-27 - Cross-Table Row Deletions - 2024-08-29
- Materialized Views Require Their Own Indexes - 2025-05-28
- Parallel Queries Can Silently Downgrade to Serial Execution - 2025-05-28
- Use Real Database Fixtures Instead of Mocks - 2025-06-11
- When
ALTER TABLE
Requires a Rewrite - 2025-06-12 - Fixing Duplicate Primary Key Rows - 2025-06-12
- pg_input_is_valid for Data Type Validation - 2025-06-12
- Handle Zero Byte and Invalid UTF-8 Before Insert - 2025-07-10
- Postgres clocks for time consistency - 2025-07-13
- UUID v7 Monotonic Per Backend - 2025-07-13
- Creating Deep Copies of Collections - 2023-11-10
- Python
dict.update
method returnsNone
- 2024-02-23 - JSON Encoding and Decoding I/O Conversions - 2024-02-23
- Python Development Environment Management (macOS) - 2024-08-11
- Eager and Lazy Evaluation - 2024-08-30
uvtrick
: Run Python Code fromvenv
in Current Environment - 2024-09-02- Typing Overloads - 2025-05-19
- Metaclasses - 2025-05-20
- Quiet Mode - 2025-05-21
- Format Mini-Language in f-strings - 2025-05-23
- Create Dual-Purpose Attributes with Proxy Properties - 2025-05-28
- Python's
Future
s - 2025-05-28 - Python's Triple-Quoted Strings Preserve Indentation - 2025-05-28
- Python's
help()
Function Features - 2025-06-12 - Reinstall Python Versions with uv - 2025-07-10
- Dump pickle files to readable text - 2025-07-12
- Template Strings for Safe Processing - 2025-07-13
- Use Quine Quotes to Delimit Regular Expressions - 2022-01-10
- Character Classes Are a Sub-language of Regex - 2024-09-05
- Use Verbose Mode and Named Groups for Readable Patterns - 2025-07-09
- Run
rbenv rehash
to Use Newly Installed Versions of Ruby or Gems - 2020-07-03 - Skip Installing Ruby Docs - 2020-07-03
- Specify a Gem Version Range - 2020-07-03
- Reset Bundle Gems - 2020-07-30
- Numeric Literal Prefixes - 2020-08-02
- Explicit Addressing - 2025-05-23
- Look Up DNS with
host
- 2020-07-29 - Suppress File Names When Grepping Across Multiple Files - 2020-08-05
wc -l
is Faster thanwc
For Retrieving the Number of Lines in a Large File - 2020-08-06- Reset Terminal Password Prompt - 2020-08-13
- Use the
-i
flag to Confirm Before Overwriting an Existing File - 2020-10-20 - Use
column
to View Pretty CSVs - 2020-10-31 kill
Works on Any Process - 2021-06-27- Join CSV files with
xsv
- 2025-07-11 - Random sampling with
shuf
- 2025-07-11
- Navigate Your Cursor Position History - 2020-05-20
- Disable Jest Test Runner Auto Run - 2020-07-20
- Choose Folders to Ignore During Search - 2020-08-29
This project uses uv
as its build system and package manager for fast, modern Python development.
# Install uv (if you haven't already)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone the repository
git clone https://github.com/jthodge/til.git
cd til
# Setup development environment
uv venv
uv sync --all-extras
# Or use the helper script
./scripts/dev.sh init
# Build the database
uv run til build
# Update README
uv run til update-readme --rewrite
# Run Datasette locally
uv run datasette . -h 0.0.0.0 -p 8765 --cors
# Run tests
uv run pytest tests/
# Format and lint code
uv run ruff format til/ tests/
uv run ruff check til/ tests/
# Type check
uv run mypy til/
I shamelessly stole this idea from jbranchaud/til. And I hope you'll shamelessly steal it from me!
- Today I Learned by Hashrocket
- Stefan Judis
- jwworth/til
- thoughtbot/til
- jbranchaud/til
- simonw/til
- jessesquires/TIL
- leebyron/til
© 2020 Taylor Hodge
This repository is licensed under the MIT license. See LICENSE
for
details.