<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on my docs</title><link>https://docs.tannerr.dev/</link><description>Recent content in Home on my docs</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 02 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://docs.tannerr.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>DBManager &amp; Components Architecture</title><link>https://docs.tannerr.dev/pockist/db-and-components/</link><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/pockist/db-and-components/</guid><description>DBManager &amp;amp; Components Architecture # This document describes how DBManager (the client-side data layer) and the frontend Web Components work together in the Pockist application.
Table of Contents # DBManager Overview The Unified v9 Schema Migrations Component Architecture How They Interact Data Flow Patterns Key Architectural Patterns File Reference DBManager Overview # DBManager is a static-class wrapper around the browser&amp;rsquo;s IndexedDB. It is the single source of truth for all client-side data persistence.</description></item><item><title/><link>https://docs.tannerr.dev/chats/chat/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/chats/chat/</guid><description>Assistant # Here&amp;rsquo;s the complete walkthrough of TodoList.js:
1. Imports &amp;amp; Class Definition (Lines 1-3) # 1 2 3 import { Router } from &amp;#34;../services/Router.js&amp;#34;; export class TodoList extends HTMLElement { Imports the Router for navigation when clicking the heading Extends HTMLElement to create a native Web Component The component will be registered as &amp;lt;todo-list&amp;gt; at the bottom 2. Private Fields (Lines 4-21) # 1 2 3 4 5 6 7 8 9 10 11 12 #lists = []; // Array of all todo lists #currentListId = null; // Which list is currently selected #db = null; // IndexedDB connection #dbName = &amp;#34;TodoDB&amp;#34;; // Database name #storeName = &amp;#34;todos&amp;#34;; // Object store name #key = &amp;#34;todoLists&amp;#34;; // Key for storing data #mode = &amp;#34;single&amp;#34;; // &amp;#34;single&amp;#34; (home page) or &amp;#34;all&amp;#34; (/list page) // DOM element references (cached for performance) #containerEl = null; #listSelectorEl = null; .</description></item><item><title/><link>https://docs.tannerr.dev/chats/new-oc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/chats/new-oc/</guid><description>Database schema redesign: unified item model # Session ID: ses_188985543ffegG2gkaVuvYGyoE Created: 5/30/2026, 12:42:23 AM Updated: 5/30/2026, 2:36:05 AM
User # i want to redesign my database schema, instead of lists and notes having different formats i want to restructure it.
schema item id content links meta date created date of revision
this is what im thinking so far
here is a brain dump of my idea
everything is an item in the db</description></item><item><title/><link>https://docs.tannerr.dev/chats/vibe-open-meteo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/chats/vibe-open-meteo/</guid><description>I&amp;rsquo;ll help you build a web app that fetches weather data from Open-Meteo and displays it with Observable Plot. Here&amp;rsquo;s a complete solution:
HTML Structure # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 &amp;lt;!</description></item><item><title/><link>https://docs.tannerr.dev/javascript/js-snippets/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/javascript/js-snippets/</guid><description>1. Download Every Image on a Page # Tired of right-clicking one by one?
[...document.images].forEach((img, i) =&amp;gt; { fetch(img.src) .then(res =&amp;gt; res.blob()) .then(blob =&amp;gt; { const a = document.createElement(&amp;#39;a&amp;#39;); a.href = URL.createObjectURL(blob); a.download = `image-${i}.jpg`; a.click(); }); }); 🖼️ Boom—your gallery’s yours now.
2. Turn Any Page Into a Rainbow Disco # Perfect for annoying your coworkers or freaking out your friends.
setInterval(() =&amp;gt; { document.body.style.backgroundColor = `hsl(${Math.floor(Math.random() * 360)}, 100%, 50%)`; }, 100); 🌈 Please use responsibly.</description></item><item><title/><link>https://docs.tannerr.dev/javascript/service_worker_cache/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/javascript/service_worker_cache/</guid><description>Service Worker Cache Issue # The Problem # CSS changes weren&amp;rsquo;t appearing after refresh. It seemed to require 2+ refreshes to see updates.
Root Cause # The original fetch handler in sw.js had a bug:
1 return cachedResponse || fetchPromise; Issue: JavaScript&amp;rsquo;s short-circuit evaluation. When cachedResponse exists:
Returns cached (stale) response immediately fetchPromise runs in background and updates cache for the next request User sees old content until they refresh again This is why 2 refreshes were needed.</description></item><item><title/><link>https://docs.tannerr.dev/linux/bluetoothchattttt/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/linux/bluetoothchattttt/</guid><description>App功能概览与计划澄清 # Session ID: ses_285c91350ffedNoDX5J1jmGR7M Created: 4/10/2026, 8:45:13 PM Updated: 4/11/2026, 8:25:21 AM
Assistant (Build · Big Pickle · 3.9s) # Thinking:
The Bluez config looks standard. Let me try to investigate the actual removal more. Since we can&amp;rsquo;t run sudo commands, let me check if there&amp;rsquo;s a way to trace what&amp;rsquo;s calling RemoveDevice.Actually, let me check if there&amp;rsquo;s something in the Bluez adapter&amp;rsquo;s device list that&amp;rsquo;s causing issues. Let me also check for any plugins.</description></item><item><title/><link>https://docs.tannerr.dev/linux/fresh-install/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/linux/fresh-install/</guid><description>check the code snippets for install scripts
linux # pop_os, ubuntu curl, unzip, grep, git nvim tmux go gh flyctl
docker
pip python3 python-dotenv pandas
proton
nvm (node version manager) node astro
optional: # scss cli? brave? kvm? virt-manager virt-viewer zed? vscode? material icons monokai theme sync settings except extensions</description></item><item><title/><link>https://docs.tannerr.dev/linux/i3-ubuntu-ai-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/linux/i3-ubuntu-ai-guide/</guid><description>Installing i3 Window Manager on Ubuntu # i3 is a lightweight, tiling window manager that&amp;rsquo;s highly configurable and popular among developers. Here&amp;rsquo;s a complete step-by-step guide to install and set it up on Ubuntu.
Installation Steps # 1. Update Your System # Open a terminal and run:
sudo apt update sudo apt upgrade 2. Install i3 # Install the i3 window manager package:
sudo apt install i3 This installs the core i3 window manager.</description></item><item><title/><link>https://docs.tannerr.dev/linux/linux-vps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/linux/linux-vps/</guid><description>dev-notes
install-scripts
symlink the readme into the content
1 ln -s $(pwd)/README.md $(pwd)/content/README.md workspace install script # folder with resources and an install script inside that copies all the config files maybe pull down from repos actually repos kanata i3 .bashrc (remove sensitive data?) bashh (without ssh keys!!!) thoughts # the ai chat interface is great. we all know that that is everyones preferred way to search. vector serch is king, ai is great for this.</description></item><item><title/><link>https://docs.tannerr.dev/linux/nvim/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/linux/nvim/</guid><description>[[dev-notes]]
go back and write the plugin from primes vim course, would be useful for coverting md vault to html links by exporting the dir ls into the buffer and adding the paths this line is used to source vim plugins from the init.lua
vim.cmd.source(vim.fn.stdpath(&amp;#34;config&amp;#34;) .. &amp;#34;/plugin.vim&amp;#34;) set up neovim properly from scratch # lsp
markdown_oxide? codebook? denols dprint? htmx highlighting
autopairs?
In Vim, you can jump to a matching parenthesis by pressing the % key when your cursor is on an opening or closing parenthesis.</description></item><item><title/><link>https://docs.tannerr.dev/linux/nvim_readme/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/linux/nvim_readme/</guid><description>Neovim Configuration # A single-file Neovim configuration using lazy.nvim for plugin management. This setup includes fuzzy finding, file tree navigation, syntax highlighting, LSP support, and autocompletion.
Plugins # Plugin Purpose tokyonight.nvim Colorscheme (currently using habamax) neo-tree.nvim File tree explorer telescope.nvim Fuzzy finder for files, grep, buffers, keymaps, etc. harpoon Quick file navigation and bookmarking which-key.nvim Popup showing pending keybinds todo-comments.nvim Highlight TODOs and notes in comments nvim-highlight-colors Show color previews inline smear-cursor.</description></item><item><title/><link>https://docs.tannerr.dev/other/dono-static-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/dono-static-files/</guid><description>I&amp;rsquo;ll create a Hono server for Deno that serves static files.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import { Hono } from &amp;#34;https://deno.land/x/hono@v4.0.5/mod.ts&amp;#34;; import { serveStatic } from &amp;#34;https://deno.land/x/hono@v4.0.5/middleware.ts&amp;#34;; const app = new Hono(); // Serve static files from the &amp;#39;public&amp;#39; directory app.use(&amp;#39;/static/*&amp;#39;, serveStatic({ root: &amp;#39;./public/&amp;#39; })); // Serve index.html at the root route app.get(&amp;#39;/&amp;#39;, serveStatic({ path: &amp;#39;./public/index.html&amp;#39; })); // Start the server const port = 3000; console.</description></item><item><title/><link>https://docs.tannerr.dev/other/git/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/git/</guid><description>Git # [[dev-notes]] [[github]]
.pyc __pycache__ tmp .env */*.db */*.csv data TODO.md public/d3.min.js public/plot.min.js public/modules/idb.js [[rebase]]
rebase on pull so their are no pointlyess merge commits
git config --list user.email=tannerr.dev@protonmail.com user.name=Tanner Reyons 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 git config --global core.editor &amp;#34;nvim&amp;#34; git branch -m oldname newname git config --global init.</description></item><item><title/><link>https://docs.tannerr.dev/other/go-reading-order/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/go-reading-order/</guid><description>This document gives tips for writing clear, idiomatic Go code. It augments the language specification, the Tour of Go, and How to Write Go Code, all of which you should read first.
Then Effective GO
Language Specification Tour of Go How to Write Go Code Effective Go</description></item><item><title/><link>https://docs.tannerr.dev/other/go/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/go/</guid><description>[[dev-notes]] go strings [[goth (go auth)]] Go reading order [[dev/dir/go_strings]]
Types # bool: a boolean value, either true or false string: a sequence of characters int: a signed integer float64: a floating-point number byte: exactly what it sounds like: 8 bits of data Go&amp;#39;s basic types are bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte // alias for uint8 rune // alias for int32 // represents a Unicode code point float32 float64 complex64 complex128 zero values 0 false &amp;quot;&amp;quot;</description></item><item><title/><link>https://docs.tannerr.dev/other/go_strings/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/go_strings/</guid><description>To concatenate strings in Go (Golang), you can use several methods. Here are the most common ones:
1. Using the + Operator # The simplest way to concatenate two or more strings is by using the + operator.
1 2 3 4 5 6 7 8 9 10 package main import &amp;#34;fmt&amp;#34; func main() { str1 := &amp;#34;Hello, &amp;#34; str2 := &amp;#34;World!&amp;#34; result := str1 + str2 fmt.Println(result) // Output: Hello, World!</description></item><item><title/><link>https://docs.tannerr.dev/other/graphs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/graphs/</guid><description>each one of these you move the a value around
sin waves made out of sin waves
y = sin(ax) + a sin(x)
splash (x-cos(x-a)^2)^2 + (y-sin(y+a)^2)^2 = a
optical illusion? cos(x) &amp;lt;= xa sin(y)
dir strange portal tan(x^2 + y^2) = a
circle made out of sine wave circles x^2 + y^2 = b sin(ax)
affine plane cos(ax-y) = sin(x^2 + by^2)</description></item><item><title/><link>https://docs.tannerr.dev/other/html-boilerplate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/html-boilerplate/</guid><description>minimal
1 2 3 4 5 6 7 8 9 10 11 &amp;lt;!DOCTYPE html&amp;gt; &amp;lt;html lang=&amp;#34;en&amp;#34;&amp;gt; &amp;lt;head&amp;gt; &amp;lt;meta charset=&amp;#34;UTF-8&amp;#34;&amp;gt; &amp;lt;meta name=&amp;#34;viewport&amp;#34; content=&amp;#34;width=device-width, initial-scale=1.0&amp;#34;&amp;gt; &amp;lt;meta http-equiv=&amp;#34;X-UA-Compatible&amp;#34; content=&amp;#34;ie=edge&amp;#34;&amp;gt; &amp;lt;/head&amp;gt; &amp;lt;body&amp;gt; &amp;lt;h1&amp;gt;Hello world&amp;lt;/h1&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; d3 starter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 &amp;lt;!</description></item><item><title/><link>https://docs.tannerr.dev/other/html/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/html/</guid><description>[[dev-notes]]
notes # article tag is for items if a tag has a hypen - then it is a web component is definition list, used for key values, term definition - usefule for displaying meta data ?? null coaelescing operator, returns the first defined value link
query selectors
code snippets # 1 &amp;lt;noscript&amp;gt;need javascript enabled...&amp;lt;/noscript&amp;gt; &amp;lt;template shadowmode=&amp;#34;closed&amp;#34;&amp;gt; 1 2 3 &amp;lt;meta http-equiv=&amp;#34;refresh&amp;#34; content=&amp;#34;10&amp;#34; /&amp;gt; &amp;lt;meta name=&amp;#34;darkreader-lock&amp;#34;&amp;gt; &amp;lt;meta name=&amp;#34;color-scheme&amp;#34; content=&amp;#34;light dark&amp;#34;&amp;gt; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 &amp;lt;!</description></item><item><title/><link>https://docs.tannerr.dev/other/html2pdf/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/html2pdf/</guid><description>Is html2pdf Suspicious # As of the latest analysis, the website html2pdf.com appears to be safe to use based on the automated review by Scamadviser.
However, the review tool identified that the website uses registrar facilities also used by many websites with low to very low review scores, which slightly reduces its trust rating. Additionally, the domain name has been registered for several years, generally indicating a more trustworthy site, but it&amp;rsquo;s still important to check for other suspicious attributes.</description></item><item><title/><link>https://docs.tannerr.dev/other/http-cache-controls/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/http-cache-controls/</guid><description> Cache Controls: # max-age no-store no-cache must-revalidate public, private immutable stale-while-revalidate stale-if-error
Other # pragma - old tech expires - old tech vary - for cdns, for language cdns
Heuristic caching # If-Modified-Since ETag/If-None-Match Cache busting
https://www.youtube.com/watch?v=Cy2ZJOBgk84&amp;t=314s
caddyfile syntax
header { Cache-Control no-cache, no-store, must-revalidate Pragma no-cache Expires 0 }</description></item><item><title/><link>https://docs.tannerr.dev/other/install-scripts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/install-scripts/</guid><description>TODO Bash install script: # All Linux Machines # sudo apt update sudo apt upgrade
Dev machine # kanata docs
rust i3 ?? mutter ??
gh github cli docs
obsidian install
sudo dpkg -i Downloads/obsidian_1.8.10_amd64.deb nvim neovim docs
grep, cmake? &amp;hellip; lsd
go
air tmux?
unattended-upgrade??
node?
or convert astro projects to hugo Pull from github
bashh neovim config bashrc (TODO) append to .bashrc Server # unattended-upgrades
fail2ban
gh github cli docs</description></item><item><title/><link>https://docs.tannerr.dev/other/javascript/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/javascript/</guid><description>[[dev-notes]]
[[print pdf ]]
Notes # you cannot make the connectedCallback of a web component async becuase it doesn&amp;rsquo;t match the function signature of the htmlelement class
you can make an async render() function when using .innerHTML is it dangerous and might allow for XSS, use .textContent
does .textContent sanitize?? data-url html attributes are accessed with .dataset.url in js
attributeChangedCallback(prop, value), web component method
dont forget to import the web component classes in the app.</description></item><item><title/><link>https://docs.tannerr.dev/other/jupyter/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/jupyter/</guid><description>Changing Jupyter Lab Syntax Colors # To change the syntax colors in JupyterLab installed via pip, you need to locate the default themes and the index.css file. These files are typically found in ~/.local/share/jupyter/lab/themes if installed at the user level, or in /usr/share/ if installed system-wide. The colors are defined in the index.css files, specifically within the block for CodeMirror styles, which includes variables like --jp-mirror-editor-keyword-color for keywords and --jp-mirror-editor-string-color for strings</description></item><item><title/><link>https://docs.tannerr.dev/other/keyboard-workflow/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/keyboard-workflow/</guid><description>[[dev-notes]]
Lean into long press
left thumb is for layer (and space maybe, right thumb needs a break)
switch which hand does the layer key, just like shift, even out the work
Be intentional with each movement
jump words (w, e, b) big jumps (11, 22, j k) dont forget super + h or super + l for switching apps
if you limit to just 2 apps on a workspace utilize a+s + j a+s + k for switching workspaces</description></item><item><title/><link>https://docs.tannerr.dev/other/new-dev-stuff/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/new-dev-stuff/</guid><description>[[dev-routes]]
865 syntax episode, listen again…
standards
css scoping starting style dialogue popover anchor streams fetch web req res esm moving out of library and new standards relative color how tf do you center with new thing idk translate, scale and rotate (skew didnt make it) future: css conditionals
is this container dark rate limit
check if too many requests are coming un throttle, decrement time per request create a var in memory per request times before and after req, log time i think hono even showed this graph per user per session?</description></item><item><title/><link>https://docs.tannerr.dev/other/number-format/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/number-format/</guid><description>If you want to prevent Pandas from displaying numbers in scientific notation, you can adjust the display settings. Here are a few methods to achieve this:
Method 1: Set Display Options # You can set the display option for floating-point numbers to a fixed format using the following code:
1 2 3 4 import pandas as pd # Set display option to show float numbers in fixed format pd.set_option(&amp;#39;display.float_format&amp;#39;, &amp;#39;{:.2f}&amp;#39;.format) This will format floating-point numbers to two decimal places.</description></item><item><title/><link>https://docs.tannerr.dev/other/odbc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/odbc/</guid><description>ODBC = Open Databse Connectivity DSN = Data Source Name
NetSuite ODBC setup # Install driver # download NetSuite ODBC linux driver extract copy to /opt/netsuite sudo apt-get install unixodbc unixodbc-dev copy over the contents of odbc.ini and odbcinst.ini from Netsuite driver installation directory into the files in /etc enable OAuth 2.0, this is preferred over token Ports # Port 1708 needs to be open for outgoing connections
todo? # create Client credentials Flow mapping get the auth string?</description></item><item><title/><link>https://docs.tannerr.dev/other/pip-differences/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/pip-differences/</guid><description>The commands python -m pip install pyodbc and pip install pyodbc are both used to install the pyodbc library, but they differ in how they invoke the pip installer. Here’s a detailed comparison:
Feature python -m pip install pyodbc pip install pyodbc Invocation Method Uses the Python interpreter to run the pip module. Directly calls the pip command. Environment Consistency Ensures that the pip version used corresponds to the specified Python interpreter.</description></item><item><title/><link>https://docs.tannerr.dev/other/postgres/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/postgres/</guid><description>[[dev-notes]]
1 sudo apt install postgresql 1 2 3 4 5 6 #log into psql cli sudo -u postgres psql #psql commands \dt shows tables \q quit 1 2 3 4 5 6 postgres=# ALTER USER postgres PASSWORD &amp;#39;mynewpassword&amp;#39;; CREATE TABLE monies (entry_id serial PRIMARY KEY,date date, amount FLOAT, description VARCHAR(255)); INSERT INTO monies (date, amount, description) VALUES(&amp;#39;11/12/2024&amp;#39;, 444.44, &amp;#39;tanners bday&amp;#39;); 1 2 3 4 5 6 7 pool = new Pool({ host: &amp;#39;localhost&amp;#39;, database: &amp;#39;postgres&amp;#39;, user:&amp;#39;postgres&amp;#39;, password:&amp;#39;mynewpassword&amp;#39;, port: 5432 });</description></item><item><title/><link>https://docs.tannerr.dev/other/print-headers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/print-headers/</guid><description>Printing HTML Headers and Footers
To create headers for printing HTML pages, you can use CSS to position elements at the top of each page. One approach is to use the position: fixed property to ensure the header appears on every printed page. Here&amp;rsquo;s an example:
1 2 3 &amp;lt;header&amp;gt; &amp;lt;div class=&amp;#34;header&amp;#34;&amp;gt;Your Header Content Here&amp;lt;/div&amp;gt; &amp;lt;/header&amp;gt; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @media print { header { position: fixed; top: 0; left: 0; right: 0; height: 50px; /* Adjust as needed */ } .</description></item><item><title/><link>https://docs.tannerr.dev/other/python/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/python/</guid><description>[[dev-notes]] [[html2pdf]]
[[pip differences]]
uv # use uv for package and venv features 1 2 3 4 5 6 7 8 9 uv init uv add numpy&amp;gt;=2.0 uv run myscript.py uv run --with jupyter jupyter lab uv sync #import pyproject.toml uv python pin 3.12.9 uvx --from jupyter-core jupyter lab ## quick, ephemoral? pyproject.toml # 1 2 3 4 5 6 7 8 [project] name = &amp;#34;my_project&amp;#34; version = &amp;#34;1.0.0&amp;#34; requires-python = &amp;#34;&amp;gt;=3.</description></item><item><title/><link>https://docs.tannerr.dev/other/rebase/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/rebase/</guid><description>https://git-scm.com/book/en/v2/Git-Branching-Rebasing
Git Rebase Command
To rebase a Git branch onto another branch, you can follow these steps:
Switch to the Source Branch: First, switch to the branch you want to rebase. For example, if you want to rebase feature onto main, you would run:
1 git checkout feature Rebase onto Target Branch: Then, rebase the current branch onto the target branch. You can do this by running:
1 git rebase main Alternatively, you can specify both branches directly:</description></item><item><title/><link>https://docs.tannerr.dev/other/sql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/sql/</guid><description>[[dev-notes]]
Basic SQL # 1 2 3 4 5 6 7 8 SELECT * FROM testing WHERE id &amp;gt; 1 ORDER BY name LIMIT 1 OFFSET 10 ; 1 2 INSERT INTO Artist (name) VALUES (&amp;#39;Radiohead&amp;#39;); SELECT * from Artist WHERE name = &amp;#39;Radiohead&amp;#39;; 1 2 UPDATE Artist SET name = &amp;#39;Daft Punk&amp;#39; WHERE name = &amp;#39;Radiohead&amp;#39;; SELECT * from Artist WHERE name = &amp;#39;Daft Punk&amp;#39;; 1 UPDATE Artist SET name = &amp;#39;Justice&amp;#39; WHERE name = &amp;#39;Daft Punk&amp;#39; RETURNING *; 1 2 ALTER TABLE table ADD COLUMN image TEXT; ALTER TABLE table DROP COLUMN image TEXT; 1 ALTER TABLE table ADD COLUMN name TEXT NOT NULL DEFAULT &amp;#39;john&amp;#39;; must declare foreign keys on each connection now sqlite will respect foreign keys</description></item><item><title/><link>https://docs.tannerr.dev/other/sqlite/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/sqlite/</guid><description>[[dev-notes]]
Basic SQL # 1 2 3 4 5 6 7 8 SELECT * FROM testing WHERE id &amp;gt; 1 ORDER BY name LIMIT 1 OFFSET 10 ; 1 2 INSERT INTO Artist (name) VALUES (&amp;#39;Radiohead&amp;#39;); SELECT * from Artist WHERE name = &amp;#39;Radiohead&amp;#39;; 1 2 UPDATE Artist SET name = &amp;#39;Daft Punk&amp;#39; WHERE name = &amp;#39;Radiohead&amp;#39;; SELECT * from Artist WHERE name = &amp;#39;Daft Punk&amp;#39;; 1 UPDATE Artist SET name = &amp;#39;Justice&amp;#39; WHERE name = &amp;#39;Daft Punk&amp;#39; RETURNING *; 1 2 ALTER TABLE table ADD COLUMN image TEXT; ALTER TABLE table DROP COLUMN image TEXT; 1 ALTER TABLE table ADD COLUMN name TEXT NOT NULL DEFAULT &amp;#39;john&amp;#39;; must declare foreign keys on each connection now sqlite will respect foreign keys</description></item><item><title/><link>https://docs.tannerr.dev/other/supabase--astro-notes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/supabase--astro-notes/</guid><description>[[supabase]] [[astro]]
I cannot seem to figure out how to have the OTP/magic link log in the user, it always redirects out.
ive done this, and this part (simple auth) works fine: astro supabase docs
i cannot get the magic link to log me in though&amp;hellip;
ive done this supabase ssr docs
for this (magic link docs):
ive changed the email emplate and created an auth/comfirm endpoint where does the function code go?</description></item><item><title/><link>https://docs.tannerr.dev/other/tmux-cheatsheet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/tmux-cheatsheet/</guid><description>[[tmux]]
Tmux Cheat Sheet Attach and detach BY SETH KENLON opensource.com CC BY-SA 4.0Mastodon fosstodon.org/@osdc
Attach and detach $ tmux Start new tmux session $ tmux attach Attach to tmux session running in the background Ctrl+B d Detach from tmux session, leaving it running in the background Ctrl+B &amp;amp; Exit and quit tmux Ctrl+B ? List all key bindings (press Q to exit help screen)
Window Management Ctrl+B C Create new window Ctrl+B N Move to next window Ctrl+B P Move to previous window Ctrl+B L Move to last window Ctrl+B 0-9 Move to window by index number</description></item><item><title/><link>https://docs.tannerr.dev/other/tmux/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/tmux/</guid><description>[[dev-notes]]
[[Tmux Cheatsheet]]
[[Syntactically correct .tmux.conf]]
1 2 3 4 sudo apt install tmux tmux kill-server tmux kill-window -t &amp;lt;windowname&amp;gt; tmux source-file ~/.tmux.conf Press your tmux prefix key (default is Ctrl+B) followed by : to open the command prompt, then type kill-window and press Enter. Alternatively, you can use Ctrl+B &amp;amp; to kill the current window and confirm with y to really kill the window including all panes within it.</description></item><item><title/><link>https://docs.tannerr.dev/other/web-accessability/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/web-accessability/</guid><description>How do you ensure accessibility in your applications?
Semantic, well structured HTML 72 %
Alternative texts, titles and labels 70.3 %
Styles for active and focused elements 53.6 %
Sufficient color contrast 52.2 %
Keyboard navigability 48.9 %
ARIA landmarks 45.9 %
Reducing animations / distracting elements 25 %
Support for visual impaired people 23.8 %
I don&amp;rsquo;t do accessibility / It&amp;rsquo;s not in my responsibilities 17.2 %</description></item><item><title/><link>https://docs.tannerr.dev/other/web_storage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/other/web_storage/</guid><description> indexeddb # tables are called object stores rows are called objects columns are called keys? generally its a good idea to prefix the table names in IDB</description></item><item><title/><link>https://docs.tannerr.dev/pockist/dialog-service/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/pockist/dialog-service/</guid><description>DialogService — Deep Dive # This document explains DialogService (public/services/DialogService.js) in detail, with a focus on timing, state management, the native &amp;lt;dialog&amp;gt; API usage, and logic flaws that could cause bugs.
Table of Contents # What It Is Architecture Overview The Native &amp;lt;dialog&amp;gt; API Method Reference Timing &amp;amp; Event Flow The Keyboard Adjustment System XSS Prevention Integration with Components Known Logic Flaws &amp;amp; Race Conditions Annotated Code Reference File Reference What It Is # DialogService is a singleton object that provides modal dialog primitives for the Pockist PWA.</description></item><item><title/><link>https://docs.tannerr.dev/pockist/draggable-list/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.tannerr.dev/pockist/draggable-list/</guid><description>DraggableList — Deep Dive # This document explains DraggableList (public/services/DraggableList.js) in detail, with a focus on timing, state transitions, and the deferred scroll-blocking logic. It also flags potential logic flaws and race conditions.
Table of Contents # What It Is State Machine Constructor &amp;amp; Configuration The Two Input Paths Deferred Scroll Blocking — Deep Dive Drop Indicator Logic CSS Classes Applied Cleanup &amp;amp; Destruction Integration with Components Known Logic Flaws &amp;amp; Race Conditions Annotated Code Reference File Reference What It Is # DraggableList is a vanilla-JS drag-and-drop reordering utility for the Pockist PWA.</description></item></channel></rss>