<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Sam&#39;s Blog</title>
    <link>/</link>
    <description>Recent content on Sam&#39;s Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Sat, 04 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>A Review of Hex</title>
      <link>/posts/hex_review/</link>
      <pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate>
      
      <guid>/posts/hex_review/</guid>
      <description>&lt;h2 id=&#34;hex-review&#34;&gt;Hex Review&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s Easter Sunday. After a long day of chocolate mogging and stealing eggs from small children, I&amp;rsquo;ve decided to check out &lt;a href=&#34;https://hex.tech/&#34;&gt;Hex&lt;/a&gt; which calls itself the &amp;ldquo;The AI Analytics Platform for your whole team&amp;rdquo;. I&amp;rsquo;m going to toss a small csv into it, if it does well I might hit it with a 20GB Parquet file.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not going to connect a data warehouse to it (This is wrong, I ended up connecting to &lt;a href=&#34;https://motherduck.com/&#34;&gt;MotherDuck&lt;/a&gt;), I&amp;rsquo;m going to treat this as the classic &amp;ldquo;There&amp;rsquo;s a dashboard, but I need to download the underlying data and re-manipulate&amp;rdquo;&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;hex-review&#34;&gt;Hex Review&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s Easter Sunday. After a long day of chocolate mogging and stealing eggs from small children, I&amp;rsquo;ve decided to check out &lt;a href=&#34;https://hex.tech/&#34;&gt;Hex&lt;/a&gt; which calls itself the &amp;ldquo;The AI Analytics Platform for your whole team&amp;rdquo;. I&amp;rsquo;m going to toss a small csv into it, if it does well I might hit it with a 20GB Parquet file.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not going to connect a data warehouse to it (This is wrong, I ended up connecting to &lt;a href=&#34;https://motherduck.com/&#34;&gt;MotherDuck&lt;/a&gt;), I&amp;rsquo;m going to treat this as the classic &amp;ldquo;There&amp;rsquo;s a dashboard, but I need to download the underlying data and re-manipulate&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I signed up for a free trial and started off with a prompt and some data.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I have not read a single guide, looked at any template or read any docs&lt;/li&gt;
&lt;li&gt;I have no idea how Hex works on the backend&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;m just going to figure it out as I go and bumble my way through&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;the-data&#34;&gt;The data&lt;/h3&gt;
&lt;p&gt;I gave it a ~740 line csv with historical March Madness data&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Season&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Round&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Team&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Odds&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Result&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2026&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;TCU&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;120&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2026&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Ohio State&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;-142&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2026&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Troy&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;650&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2026&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Nebraska&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;-1000&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;the-prompt&#34;&gt;The Prompt&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;ve added the prompt below but the TLDR is we want to evaluate the &amp;ldquo;accuracy&amp;rdquo; of pre-game odds for March Madness from a CSV containing 5 years of historical data. The prompt isn&amp;rsquo;t great, and I didn&amp;rsquo;t even provide extra contents on what I was working on.&lt;/p&gt;
&lt;details class=&#34;spoiler&#34;&gt;
  &lt;summary&gt;Click to view the entire prompt word for word&lt;/summary&gt;
  &lt;div class=&#34;spoiler-content&#34;&gt;
    &lt;p&gt;I have captured historical odds on NCAA march madness tournaments. The CSV contains data with the year, round, team, odds (in american odds) and result (1 for win 0 for loss). The data is not perfectly clean, some of the odds formatting may be wrong or missing, not all years have the correct number of games.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d like to visualize the accuracy of these predictions on a discrete vent over the years have been. Use something like brier scores and/or log loss to do this. If you have a better way feel free to do that as well. Split this by round as well as there are many blowouts or &amp;ldquo;easy&amp;rdquo; to call games in the beginning of the tournament.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d also like to measure the competitiveness of these games over the years. Have the odds gotten closer together on avg over the years, how is this changes if we look by round?&lt;/p&gt;

  &lt;/div&gt;
&lt;/details&gt;
&lt;h3 id=&#34;dropping-in&#34;&gt;Dropping in&lt;/h3&gt;
&lt;p&gt;After issuing the prompt and attaching the csv, I immediately found myself in a &amp;ldquo;project&amp;rdquo; or, more descriptively, a &amp;ldquo;notebook style environment&amp;rdquo;. I&amp;rsquo;m prompted to give my project a name and watch as some LLM gets to work on the right side of my screen. I can give the project a status and category, which is nice as I could see these things getting unwieldy pretty fast if you had 20-30 people doing &amp;ldquo;analysis&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Hex_images/Initial_Drop_IN.png&#34; alt=&#34;Hex Intro&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;the-first-cell&#34;&gt;The first cell&lt;/h3&gt;
&lt;p&gt;There&amp;rsquo;s a collapsible cell with a &lt;code&gt;SELECT *&lt;/code&gt; of my data displayed as a table. The column structure is there, and I can actually create a new column with a formula that can reference existing columns if I want. If you&amp;rsquo;ve read my blog you&amp;rsquo;ll know I don&amp;rsquo;t like &lt;code&gt;SELECT *&lt;/code&gt;, but this doesn&amp;rsquo;t seem to be auto-materialized for all new projects and this is a csv so no harm no foul.&lt;/p&gt;
&lt;p&gt;I can re-write the SQL in the cell to produce a new data-frame, but I can also manually filter it via the UI. Applying the filter via the UI updates the &amp;ldquo;relation&amp;rdquo; (I don&amp;rsquo;t really know what to call this yet), and it also looks like it updates visualizations/cells that depend on the relation (The LLM seems has been hacking away below).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Hex_images/Add_comment.png&#34; alt=&#34;Hex Intro&#34;&gt;&lt;/p&gt;
&lt;p&gt;Importantly, comments can be added, responded, reacted, and resolved in a cell. Maybe more importantly? Cells can be triggered in DAG fashion with downstream cells taking dependencies. This is good. It&amp;rsquo;s kind of feeling like &lt;a href=&#34;https://marimo.io/&#34;&gt;Marimo&lt;/a&gt; which was recently acquired by &lt;a href=&#34;https://marimo.io/blog/joining-coreweave&#34;&gt;CoreWeave&lt;/a&gt;. Although Hex is not open source, and you don&amp;rsquo;t really own your notebooks they live in cloud land&amp;hellip; this is actually wrong, you can &lt;a href=&#34;https://learn.hex.tech/docs/explore-data/projects/import-export&#34;&gt;import/export notebooks&lt;/a&gt; as &lt;code&gt;.ipynb&lt;/code&gt; or their Hex &lt;code&gt;yaml&lt;/code&gt; situation.&lt;/p&gt;
&lt;p&gt;Speaking of DAGs there&amp;rsquo;s this graph view which is nice. the graph shows me that Hex has decided to &lt;code&gt;SELECT *&lt;/code&gt; from my csv, written some pandas transformations, and then created three charts. I can&amp;rsquo;t figure out how to pop the graph view out (Full screen) or change the size&amp;hellip; thus the blurry image. In general, every square inch of my screen is packed with features.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Hex_images/Graph_View.png&#34; alt=&#34;Hex Intro&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;the-llm--context&#34;&gt;The LLM &amp;amp; Context&lt;/h3&gt;
&lt;p&gt;Moving over to the right pane there&amp;rsquo;s a chat window with an LLM. The chat window can host multiple threads with conversations &amp;gt;90 days being deleted. Unlike the graph view, I can make this pane basically eat the entire screen.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Hex_images/LLM_Conversation.png&#34; alt=&#34;Hex Intro&#34;&gt;&lt;/p&gt;
&lt;p&gt;I quickly find out who&amp;rsquo;s baking this cookie (claude), but it won&amp;rsquo;t share system prompts/instructions. After a bit of back and forth, Claude tells me I should be using Guides which exists inside &amp;ldquo;context studio&amp;rdquo;, which seems to be exactly how context is managed in Hex. This made me a little nervous at first as it looked as though you&amp;rsquo;d need to embed/maintain context in Hex, but they allow connections from outside sources (i.e. &lt;a href=&#34;https://learn.hex.tech/docs/agent-management/context-management/guides#programmatically-upload-guides-in-ci&#34;&gt;context in github updated via github actions&lt;/a&gt;) If relevant context is haphazardly stored in a bunch of people&amp;rsquo;s brains this is still of little use though.&lt;/p&gt;
&lt;h3 id=&#34;but-wtf-is-the-compute-here&#34;&gt;But wtf is the compute here&lt;/h3&gt;
&lt;p&gt;So now I&amp;rsquo;m curious how this SQL is getting executed. I ask in my little Claude thread and the weights and biases tell me &amp;ldquo;it&amp;rsquo;s querying the uploaded OddsMM.csv file directly using the embedded DuckDB engine&amp;rdquo;. DuckDB&amp;hellip; tight. I can confirm this going into the &lt;a href=&#34;https://learn.hex.tech/docs/explore-data/cells/sql-cells/sql-cells-introduction&#34;&gt;SQL Cells Introduction&lt;/a&gt;. It also seems that you can &lt;a href=&#34;https://learn.hex.tech/docs/explore-data/cells/using-jinja&#34;&gt;parameterize SQL&lt;/a&gt; using Jinja which is a huge win in my book. It also looks like it integrates well with &lt;a href=&#34;https://learn.hex.tech/docs/connect-to-data/data-connections/dbt-integration&#34;&gt;dbt Cloud&lt;/a&gt; which is solid. DBT or something like it is &lt;strong&gt;pretty simply&lt;/strong&gt; how modern data teams should be authoring transformations, there&amp;rsquo;s just not much of a question at this point. I wouldn&amp;rsquo;t want to be orchestrating transforms inside of Hex though. I&amp;rsquo;d be doing this in a data warehouse, orchestrating with Dagster and managing transformations with DBT and only after that connecting to Hex.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Hex_images/The_Env.png&#34; alt=&#34;Hex Intro&#34;&gt;&lt;/p&gt;
&lt;p&gt;Opening the &amp;ldquo;Environment&amp;rdquo; on the left tool box shows I&amp;rsquo;m using a Medium instance with 8GB of memory and 4CPUs. They have a beefy 128GB instance, but I&amp;rsquo;m getting the feeling that if you need this inside of Hex, you may also need a better data model (Yes, dude who&amp;rsquo;s visualizing some ridiculous telematics data, feel free to rip into me for that comment). I&amp;rsquo;ve also got access to python 3.9 -&amp;gt; 3.12 and a bunch of python packages come pre-installed (no &lt;a href=&#34;https://pola.rs/&#34;&gt;polars&lt;/a&gt;&amp;hellip; which is big sad), but it seems you can just add to your venv with uv.&lt;/p&gt;
&lt;h3 id=&#34;other-staff-in-the-left-most-toolbox&#34;&gt;Other staff in the left most toolbox&lt;/h3&gt;
&lt;p&gt;There&amp;rsquo;s a full revision history with version checkpoints and a large space dedicated to a search feature which seems to be able to &lt;code&gt;grep&lt;/code&gt; through your current workspace. The variables section stores all the built in variables as well as anything we create in our python code and dataframes. There&amp;rsquo;s also a data browser which acts as a functional data catalogue for assets inside the workspace. Opening up the column types inferred from my csv: &lt;code&gt;Team&lt;/code&gt; &amp;amp; &lt;code&gt;Odds&lt;/code&gt; are labelled as having type &amp;ldquo;object&amp;rdquo;&amp;hellip; which is a bit weird, but I guess they are strings&amp;hellip; so arrays&amp;hellip; so&amp;hellip; objects? Idk, I&amp;rsquo;m stretching here for why that doesn&amp;rsquo;t say &amp;ldquo;varchar()&amp;rdquo;.&lt;/p&gt;
&lt;h3 id=&#34;back-in-the-middle&#34;&gt;Back in the middle&lt;/h3&gt;
&lt;p&gt;Coming back to center stage with our data/assets, there&amp;rsquo;s a nice little chart telling us what is taking the longest inside of our &amp;ldquo;DAG&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Hex_images/Gantt_Chart.png&#34; alt=&#34;Hex Intro&#34;&gt;&lt;/p&gt;
&lt;p&gt;Cool feature to have rather than setting up timing, &lt;code&gt;%%time&lt;/code&gt; on some sprawling notebook.&lt;/p&gt;
&lt;p&gt;Continuing on, Claude has written a little pandas to create some new data-frames based on the aggregations I requested. These data-frames are available for view in the data browser. These have become materialized relations (I&amp;rsquo;m pretty sure) that I can query with SQL in a new cell and are also referenced in the visualizations.&lt;/p&gt;
&lt;h3 id=&#34;visualizations&#34;&gt;Visualizations&lt;/h3&gt;
&lt;p&gt;Speaking of visualizations, Hex seems to be using &lt;a href=&#34;https://hex.tech/blog/vegafusion/&#34;&gt;Vega&lt;/a&gt; after they performed some sort of acqui-hire of the VegaFusion maintainer. The visualizations seem fine and responsive. There&amp;rsquo;s a suite of UI tools to edit them a bit (both style and substance). You get access to the generated SQL, which seems to build the relation required for each one.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Hex_images/Accuracy_Relation.png&#34; alt=&#34;Hex Intro&#34;&gt;&lt;/p&gt;
&lt;p&gt;From the screenshot you can see &lt;code&gt;accuracy_by_season_round&lt;/code&gt; is referenced which was created by some pandas in the cell above and exposed in the data browser. I&amp;rsquo;d like to have full control of my charts as code&amp;hellip; and it seems like I can easily do that. I created a cell that references that same data-frame, but creates a basic chart with &lt;code&gt;plotly&lt;/code&gt; and it works.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Hex_images/Plotly.png&#34; alt=&#34;Hex Intro&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;make-an-app&#34;&gt;Make an&amp;hellip; App?&lt;/h3&gt;
&lt;p&gt;So it seems like the main other thing you can do is switch out of notebook mode and make an &amp;ldquo;app&amp;rdquo;. I turned my analysis into an &lt;strong&gt;&lt;a href=&#34;https://app.hex.tech/019d6027-9e08-711c-9103-96dd87d47720/app/March-Madness-Prediction-Analysis-032ucMa6UHL5XP99tslaMb/latest&#34;&gt;app&lt;/a&gt;&lt;/strong&gt; (If you read this a while from now this will most likely not be available&amp;hellip; sorry not sorry) which seems to expose the visualizations at an endpoint, and they can refresh on a schedule. You can export it, take snapshots, turn it into a presentation. So the apps are basically interactive dashboards that you might expose to an end user rather than tossing them a notebook and saying &amp;ldquo;run this and look at cell 8&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;These apps can be added to a &amp;ldquo;library&amp;rdquo; that contains published knowledge that can be &amp;ldquo;&lt;a href=&#34;https://learn.hex.tech/docs/organize-content/statuses-categories#endorsed-statuses&#34;&gt;endorsed&lt;/a&gt;&amp;rdquo;. I don&amp;rsquo;t know how this solves for people just endorsing a bunch of stuff. I don&amp;rsquo;t think there&amp;rsquo;s a re-endorsement system where you have to be like &amp;ldquo;yeah this is still good&amp;rdquo;&amp;hellip; because all of this manual tagging typically loses meaning. It&amp;rsquo;s like people flagging workloads as &amp;ldquo;business critical&amp;rdquo; to get access to resources faster&amp;hellip; it&amp;rsquo;s a short time before everything is &amp;ldquo;business critical&amp;rdquo;. Some kind of continuous mechanism to confirm endorsement might be nice (Or just annoying enough that people would disregard it&amp;hellip; its a hard problem admittedly).&lt;/p&gt;
&lt;h3 id=&#34;competitors&#34;&gt;Competitors&lt;/h3&gt;
&lt;p&gt;It looks like &lt;a href=&#34;https://deepnote.com/&#34;&gt;DeepNote&lt;/a&gt; offers something similar, but I&amp;rsquo;ve never used it. It seems like every data warehouse in the sky has something like this. &lt;a href=&#34;https://posthog.com/&#34;&gt;Posthog&amp;rsquo;s&lt;/a&gt; platform is similar but more focused on web analytics. &lt;a href=&#34;https://clickhouse.com/&#34;&gt;ClickHouse&amp;rsquo;s&lt;/a&gt; cloud dw offers a SQL notebook and dashboard experience. &lt;a href=&#34;https://github.com/marimo-team/marimo&#34;&gt;Marimo&lt;/a&gt; is a great notebook based analytics tool that&amp;rsquo;s open source (recently CoreWeave is in the picture).&lt;/p&gt;
&lt;p&gt;This is in &lt;strong&gt;NO&lt;/strong&gt; way an exhaustive list of the space, but I have to say&amp;hellip; Hex is very complete. They are clearly thinking hard about how to nail &amp;ldquo;last mile&amp;rdquo; analytics and make integration upstream simple. If I was sitting in a small shop and we needed analysts/data science to produce some standard reports, version them over time, and sprinkle LLMs into the workflow I&amp;rsquo;m probably reaching for Hex.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m seriously trying to figure out the value proposition of something like Looker, PowerBI, Tableau, etc&amp;hellip; as opposed to Hex.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Hex_images/Tableau.png&#34; alt=&#34;Hex Intro&#34;&gt;&lt;/p&gt;
&lt;p&gt;People either play around with the filters a bit or they actually just want the underlying data for the dashboard&amp;hellip; which Hex quickly provides access to and lineage for.&lt;/p&gt;
&lt;h3 id=&#34;increasing-the-data-size&#34;&gt;Increasing the data size&lt;/h3&gt;
&lt;p&gt;I had some larger parquet files from my &lt;a href=&#34;https://substack.com/home/post/p-190557745&#34;&gt;Prediction Markets&lt;/a&gt; article that I thought it&amp;rsquo;s be a good test to see if Hex could quickly reproduce a few of the charts. They are big enough that I can&amp;rsquo;t just drop them into the UI.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Kalshi Markets dataset is ~2 GB &amp;amp; 30 million rows with data on all historical markets&lt;/li&gt;
&lt;li&gt;The Kalshi Trades dataset is ~11 GB &amp;amp; 203 million rows with data on every single trade to ever occur on Kalshi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I loaded my local copies to MotherDuck by establishing a connection to a new database I set up.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Hex_images/MotherDuck.png&#34; alt=&#34;Hex Intro&#34;&gt;&lt;/p&gt;
&lt;p&gt;Then it took about 30 seconds to give Hex a Read/Write access token, and I could start writing SQL against my tables.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Hex_images/DataBrowse.png&#34; alt=&#34;Hex Intro&#34;&gt;&lt;/p&gt;
&lt;p&gt;I gave it a pitiful prompt/context and in under 5 minutes it produced some charts that you can view &lt;a href=&#34;https://app.hex.tech/019d6027-9e08-711c-9103-96dd87d47720/app/Kalshi-032ulYqucX78NzabnOThQS/latest&#34;&gt;here&lt;/a&gt;. Again, to do this well with the data in under 5 minutes with limited context is quite impressive. You can directly compare these to a few charts in the actual article&amp;hellip; and they get the point across, I&amp;rsquo;m sure that with a bit of effort I could get these one&amp;rsquo;s inside Hex to look quite nice.&lt;/p&gt;
&lt;details class=&#34;spoiler&#34;&gt;
  &lt;summary&gt;The Prompt&lt;/summary&gt;
  &lt;div class=&#34;spoiler-content&#34;&gt;
    &lt;p&gt;Please use the Kalshi data assets (markets &amp;amp; trades) to derive a series of visualizations.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Show me weekly trade volume in a bar chart&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Show me contracts per trade month over month avg and median&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Show me a stacked bar chart displaying total trade volume by month with the bars segmented into the implied probability of each trade in cohorts of 0-20%, 20-40%, 40-60%, 60-80%, and 80-100%&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

  &lt;/div&gt;
&lt;/details&gt;
&lt;h3 id=&#34;overall-thoughts&#34;&gt;Overall Thoughts&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m impressed. It&amp;rsquo;s a well thought out product. It&amp;rsquo;s definitely much more than just a &amp;ldquo;Claude wrapper&amp;rdquo;, and they are clearly trying to integrate things that modern data teams need. For a quick proof of concept on a personal project I could easily see myself tossing some data in here with some prompting/context as long as I had access to the elevated features of a &amp;ldquo;Team Plan&amp;rdquo;. I do think this is geared more toward enterprise, as it&amp;rsquo;s way overkill for a hobby project, and I can pretty much get all the features I&amp;rsquo;d want out of this with Claude Code, Marimo, and a little know-how. But they &lt;a href=&#34;https://hex.tech/blog/i-tried-to-vibe-code-hex/&#34;&gt;know this&lt;/a&gt; and can cater to the &amp;ldquo;Yeah we don&amp;rsquo;t want to maintain that but want that functionality&amp;rdquo; crowd.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m always a little weary of notebook development for large teams. How do you stop people from building data assets in parallel that describe the &amp;ldquo;same&amp;rdquo; thing but end up with a different result. This is a perennial problem that Hex seems to be great at reducing in comparison to people hand waiving Jupyter notebooks and pivot tables. And holy FUCK can we please realize that there are better things out their than just isolated local notebooks performing data wrangling, visualization, and presentation&amp;hellip; they do NOT scale&amp;hellip; use Hex.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m trying to think of other headwinds here. I mean, this is a lot of product. I&amp;rsquo;m familiar with these concepts, but if the ideal state is to drop this in front of 20 PMs and say &amp;ldquo;Hey you can make your own dashboards and data assets now&amp;rdquo; there would be a significant amount of churn/up-skilling where as Data Science could probably get on board with this very quickly. You still need to solve for upstream, Hex isn&amp;rsquo;t going to fix your broken medallion architecture and redundant/stale tables. Notebooks are a classic foot gun, if people don&amp;rsquo;t use the tools that Hex provides (DBT integration, jinja templating, version control, data catalogue, etc&amp;hellip;) you could easily run into spaghetti mode just as anything else. Hex can lead your team to the data lake, but they can&amp;rsquo;t make you&amp;hellip;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 04-04-2026</title>
      <link>/learnedt1w/2026/04_04_2026/</link>
      <pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2026/04_04_2026/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/gumyr/build123d&#34;&gt;Python cad library&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://jaso1024.com/mvidia/&#34;&gt;Build a GPU&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/QpO63kVjFb0&#34;&gt;Pallet camper&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://kathmandupost.com/money/2026/03/27/inside-nepal-s-fake-rescue-racket&#34;&gt;Rescue fraud&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://climate.benjames.io/fusion/&#34;&gt;Fun fusion overview&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=IjdZ846OcGI&#34;&gt;Poker lecture at Harvard&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/gumyr/build123d&#34;&gt;Python cad library&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://jaso1024.com/mvidia/&#34;&gt;Build a GPU&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/QpO63kVjFb0&#34;&gt;Pallet camper&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://kathmandupost.com/money/2026/03/27/inside-nepal-s-fake-rescue-racket&#34;&gt;Rescue fraud&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://climate.benjames.io/fusion/&#34;&gt;Fun fusion overview&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=IjdZ846OcGI&#34;&gt;Poker lecture at Harvard&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 03-28-2026</title>
      <link>/learnedt1w/2026/03_28_2026/</link>
      <pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2026/03_28_2026/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cs.utexas.edu/~EWD/transcriptions/EWD08xx/EWD867.html&#34;&gt;Alan M. Turing allowed himself to be drawn into the discussion of the question whether computers can think. The question is just as relevant and just as meaningful as the question whether submarines can swim.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/ldxFjLJ3rVY?si=JtCW0D6ED-0LCdyx&#34;&gt;The goat&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Copy all rendered html &lt;code&gt;copy(document.documentElement.outerHTML)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ilograph.com/blog/posts/more-common-diagram-mistakes/&#34;&gt;Common Design Diagram Mistakes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.john-rush.com/posts/eggs-25-years-20260219.html&#34;&gt;Eggs… and high token cost&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://open.substack.com/pub/astralcodexten/p/being-john-rawls?r=7lm0ev&amp;amp;utm_medium=ios&#34;&gt;John Rawls&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/roJtSrDIJ1w&#34;&gt;18p hard lemonade&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.dayuse.com&#34;&gt;Hotels but only during the day&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cs.utexas.edu/~EWD/transcriptions/EWD08xx/EWD867.html&#34;&gt;Alan M. Turing allowed himself to be drawn into the discussion of the question whether computers can think. The question is just as relevant and just as meaningful as the question whether submarines can swim.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/ldxFjLJ3rVY?si=JtCW0D6ED-0LCdyx&#34;&gt;The goat&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Copy all rendered html &lt;code&gt;copy(document.documentElement.outerHTML)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ilograph.com/blog/posts/more-common-diagram-mistakes/&#34;&gt;Common Design Diagram Mistakes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.john-rush.com/posts/eggs-25-years-20260219.html&#34;&gt;Eggs… and high token cost&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://open.substack.com/pub/astralcodexten/p/being-john-rawls?r=7lm0ev&amp;amp;utm_medium=ios&#34;&gt;John Rawls&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/roJtSrDIJ1w&#34;&gt;18p hard lemonade&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.dayuse.com&#34;&gt;Hotels but only during the day&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/_20LePuDHJo&#34;&gt;Building a garden&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/sxGoHjoFH9I&#34;&gt;Stop over paying for vanilla extract&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Successfully dehydrated some fruit this week.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.freshoffthegrid.com/diy-fruit-leathers/&#34;&gt;https://www.freshoffthegrid.com/diy-fruit-leathers/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://eatsleepwild.com/homemade-dehydrated-backpacking-meals/&#34;&gt;https://eatsleepwild.com/homemade-dehydrated-backpacking-meals/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.amazon.com/mylar-bags/s?k=mylar&amp;#43;bags&#34;&gt;https://www.amazon.com/mylar-bags/s?k=mylar+bags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;100PCS Silica Gel Packets&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 03-21-2026</title>
      <link>/learnedt1w/2026/03_21_2026/</link>
      <pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2026/03_21_2026/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://jerinsunny.github.io/stm32_vglitch/&#34;&gt;Voltage glitching&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://aws.amazon.com/about-aws/whats-new/2026/03/amazon-redshift-increases-performance-for-new-queries/&#34;&gt;7x better because “composition”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Bellman_equation&#34;&gt;Bellman equation&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://suno.com/home&#34;&gt;Suno AI music&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://waymo.com/safety/impact/&#34;&gt;Autonomous driving might have the biggest positive impact on the world this decade&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://finnian.io/blog/home-assistant-waters-my-plants/&#34;&gt;Plant watering:&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=T4Upf_B9RLQ&#34;&gt;Making things shitty&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.slu.edu/about/key-facts/what-is-a-billiken.php&#34;&gt;Billiken&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://onetrillionbrackets.com/how-it-works&#34;&gt;One Trillion brackets&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.goodreads.com/quotes/274551-it-ought-to-be-remembered-that-there-is-nothing-more&#34;&gt;&amp;ldquo;the innovator has for enemies all those who have done well under the old conditions, and lukewarm defenders in those who may do well under the new.&amp;rdquo;&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://jerinsunny.github.io/stm32_vglitch/&#34;&gt;Voltage glitching&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://aws.amazon.com/about-aws/whats-new/2026/03/amazon-redshift-increases-performance-for-new-queries/&#34;&gt;7x better because “composition”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Bellman_equation&#34;&gt;Bellman equation&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://suno.com/home&#34;&gt;Suno AI music&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://waymo.com/safety/impact/&#34;&gt;Autonomous driving might have the biggest positive impact on the world this decade&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://finnian.io/blog/home-assistant-waters-my-plants/&#34;&gt;Plant watering:&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=T4Upf_B9RLQ&#34;&gt;Making things shitty&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.slu.edu/about/key-facts/what-is-a-billiken.php&#34;&gt;Billiken&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://onetrillionbrackets.com/how-it-works&#34;&gt;One Trillion brackets&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.goodreads.com/quotes/274551-it-ought-to-be-remembered-that-there-is-nothing-more&#34;&gt;&amp;ldquo;the innovator has for enemies all those who have done well under the old conditions, and lukewarm defenders in those who may do well under the new.&amp;rdquo;&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 03-14-2026</title>
      <link>/learnedt1w/2026/03_14_2026/</link>
      <pubDate>Sat, 14 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2026/03_14_2026/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.sqlite.org/optoverview.html#the_skip_scan_optimi&#34;&gt;SQLite skip scan&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.marginalia.nu/weird-ai-crap/hn/&#34;&gt;Dead internet arrival&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://onecloudplease.com/blog/bucketsquatting-is-finally-dead&#34;&gt;Namespace prevents bucket squatting&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/THAupOYwJTs&#34;&gt;Wow, 21 years off grid&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://clackernews.com/&#34;&gt;Clacker news&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=Bx-v_cWYmkQ&#34;&gt;Doom&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.sqlite.org/optoverview.html#the_skip_scan_optimi&#34;&gt;SQLite skip scan&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.marginalia.nu/weird-ai-crap/hn/&#34;&gt;Dead internet arrival&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://onecloudplease.com/blog/bucketsquatting-is-finally-dead&#34;&gt;Namespace prevents bucket squatting&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/THAupOYwJTs&#34;&gt;Wow, 21 years off grid&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://clackernews.com/&#34;&gt;Clacker news&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=Bx-v_cWYmkQ&#34;&gt;Doom&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 03-07-2026</title>
      <link>/learnedt1w/2026/03_07_2026/</link>
      <pubDate>Sat, 07 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2026/03_07_2026/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;I did not know that appending a shell command with &lt;code&gt;&amp;amp;&lt;/code&gt; runs it asynchronously. You can view running things with &lt;code&gt;jobs&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;nc ip port&lt;/code&gt; to send a message to a port, &lt;code&gt;nc -lv port&lt;/code&gt; to listen to it.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;yes&lt;/code&gt; just pipes y to stdout over and over&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pstree&lt;/code&gt; for viewing process tree on Linux (all starts from systemd)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;powermetrics&lt;/code&gt; is useful for cpu/process info.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;I did not know that appending a shell command with &lt;code&gt;&amp;amp;&lt;/code&gt; runs it asynchronously. You can view running things with &lt;code&gt;jobs&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;nc ip port&lt;/code&gt; to send a message to a port, &lt;code&gt;nc -lv port&lt;/code&gt; to listen to it.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;yes&lt;/code&gt; just pipes y to stdout over and over&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pstree&lt;/code&gt; for viewing process tree on Linux (all starts from systemd)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;powermetrics&lt;/code&gt; is useful for cpu/process info.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://johnnyreilly.com/image-optimisation-tinypng-api&#34;&gt;TinyPNG’s&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://josephg.com/blog/crdts-are-the-future/&#34;&gt;Conflict free replicated data types&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://lighthousesoftware.co.uk/projects/from-noise-to-image/&#34;&gt;Visual walkthrough of diffusion models&lt;/a&gt;xs&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://vondra.me&#34;&gt;Good Postgres blog&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.experimental-history.com/p/the-one-science-reform-we-can-all&#34;&gt;Rent seeking in science&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://conway.tech/&#34;&gt;“AI Pays for itself”&lt;/a&gt; first prompt: connect wallet&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/JeremiahDJohns/status/2029590438504493156?s=20&#34;&gt;US imports more from Taiwan than china now&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://truthonthemarket.com/2026/02/12/baby-chicks-gas-lines-and-the-war-on-prices/&#34;&gt;Price controls suppress the mechanism that prevents chaos, and the resulting chaos invites still more control, creating an escalating cycle the price system would have prevented from starting.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://open.spotify.com/episode/4UnXOptNAMLfSnM3KGd7ww?si=H2OmEQOsSyK0Y3zuae9j6A&amp;amp;t=3370&amp;amp;pi=czyiYVx1SfCD8&#34;&gt;Culture is those behaviors that employees believe will be rewarded.&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://spinnakerchocolate.com/pages/visit-us&#34;&gt;Spinnaker Cool place ot visit and make chocolate&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ciggies.app/&#34;&gt;Cig app with a great UI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/G._K._Chesterton&#34;&gt;GK chesterton&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gwern.net/doc/fiction/science-fiction/2012-10-03-yvain-thewhisperingearring.html&#34;&gt;The whispering earring&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=4K9RDZg4y7o&#34;&gt;Wild Shia LaBeouf Interview&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/eXi4xHj4SfU?si=wZth5vrEaLyFCdNv&#34;&gt;The 2026 Barkley&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Last day at AMXL</title>
      <link>/musings/last_day_at_amxl/</link>
      <pubDate>Fri, 06 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>/musings/last_day_at_amxl/</guid>
      <description>&lt;h3 id=&#34;leaving-amxl-after-5-years&#34;&gt;Leaving AMXL after 5 years&lt;/h3&gt;
&lt;p&gt;What I learned from ~5 years at Amazon all of which were spent at an organization called AMXL. I&amp;rsquo;m moving to a new organization within Amazon, and I felt like it was a good time to reflect.&lt;/p&gt;
&lt;h3 id=&#34;reflecting-on-people&#34;&gt;Reflecting on people&lt;/h3&gt;
&lt;p&gt;Being negative and short with people is almost always detrimental to both you and them. If this is occurring figure out why and fix it asap.&lt;/p&gt;</description>
      <content>&lt;h3 id=&#34;leaving-amxl-after-5-years&#34;&gt;Leaving AMXL after 5 years&lt;/h3&gt;
&lt;p&gt;What I learned from ~5 years at Amazon all of which were spent at an organization called AMXL. I&amp;rsquo;m moving to a new organization within Amazon, and I felt like it was a good time to reflect.&lt;/p&gt;
&lt;h3 id=&#34;reflecting-on-people&#34;&gt;Reflecting on people&lt;/h3&gt;
&lt;p&gt;Being negative and short with people is almost always detrimental to both you and them. If this is occurring figure out why and fix it asap.&lt;/p&gt;
&lt;p&gt;Most requests will be labeled as &amp;ldquo;urgent&amp;rdquo;, very few will actually be urgent.&lt;/p&gt;
&lt;p&gt;One of the best things a manager can do is help allocate your time well. There will be meetings you never sit in that have an outsized impact on what is worked on and how things are measured, especially long term.&lt;/p&gt;
&lt;h3 id=&#34;general-reflections&#34;&gt;General Reflections&lt;/h3&gt;
&lt;p&gt;Good documentation is gold. Building in systems to keep it updated over time is gold x2.&lt;/p&gt;
&lt;p&gt;Be cautious of your time&amp;hellip; 5 years went very quickly, and I don&amp;rsquo;t see the train slowing down. You also have no idea where the end of the tracks are, enjoy it.&lt;/p&gt;
&lt;p&gt;Clarifying questions are powerful &amp;amp; necessary, make sure as much context/information is made available before leaping into action.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s very important to understand inputs/outputs. People like to drop you into the middle of a complex problem/workflow which quickly becomes an unsolvable context trap if you don&amp;rsquo;t understand the start and the end. Also be careful of the XY problem.&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t allow my self worth to be entirely defined by work, I need other outlets.&lt;/p&gt;
&lt;p&gt;A good metaphor is underrated. The ability to produce a good one quickly is even more underrated.&lt;/p&gt;
&lt;p&gt;You should be failing 1-2x per year. This does not need to be out right crash and burn, but it should be something like &amp;ldquo;yeah we hit the limit of that system, looking back we should have done X, but now we NEED to do X&amp;rdquo;. This is how you learn, there is no book for this.&lt;/p&gt;
&lt;h3 id=&#34;data-reflections&#34;&gt;Data Reflections&lt;/h3&gt;
&lt;p&gt;Under the right stressors, people will treat a data orchestration framework as cron.&lt;/p&gt;
&lt;p&gt;People prefer a wide table rather than creating a data model. It&amp;rsquo;s important to be careful about this, &lt;a href=&#34;https://selectfromwhereand.com/posts/widetables/&#34;&gt;See post on wide tables&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Always assume that people have no understanding of statistics. Always assume your chart/graphic/UI is too complicated. This is NOT a knock on people. You are inherently waist deep in a problem that most others are only weakly aware of, if you can&amp;rsquo;t boil it down to something graspable that they can care about, that is your own fault.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 02-28-2026</title>
      <link>/learnedt1w/2026/02_28_2026/</link>
      <pubDate>Sat, 28 Feb 2026 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2026/02_28_2026/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/NGFhc8R_uO4?si=h7dy6joLfgQlXI7q&#34;&gt;One step from magic&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.calebleak.com/posts/dog-game/&#34;&gt;the bottleneck in AI-assisted development isn’t the quality of your ideas - it’s the quality of your feedback loops.&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Productivity_paradox&#34;&gt;Why isn&amp;rsquo;t GDP growing faster?????&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://eventwaves.substack.com/p/kpmg-audited-companies-are-trading&#34;&gt;Insider trading pt 1000&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wired.com/story/openai-fires-employee-insider-trading-polymarket-kalshi/&#34;&gt;Insider trading part 1001&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://open.spotify.com/episode/2Fs0gI2bl22ApmwsLuWkZB?si=h928r68ORu-ryKfDoWAbhQ&amp;amp;t=2020&amp;amp;pi=5LGhg1G6SdaJU&#34;&gt;Levered single stock etfs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.barstoolsports.com/blog/3563784/gavin-mckenna-knocked-a-guy-out-at-a-bar-got-charges-dropped-then-hit-the-on&#34;&gt;The best college hockey player&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Medicine_Hat_Tigers&#34;&gt;My new favorite hickey team name&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/qKta3RPyLIo?si=P7ZEERBuh_VAZTsm&#34;&gt;Obree&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://nowigetit.us&#34;&gt;Distill scientific papers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Jeonse&#34;&gt;wild way to pay rent&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/NGFhc8R_uO4?si=h7dy6joLfgQlXI7q&#34;&gt;One step from magic&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.calebleak.com/posts/dog-game/&#34;&gt;the bottleneck in AI-assisted development isn’t the quality of your ideas - it’s the quality of your feedback loops.&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Productivity_paradox&#34;&gt;Why isn&amp;rsquo;t GDP growing faster?????&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://eventwaves.substack.com/p/kpmg-audited-companies-are-trading&#34;&gt;Insider trading pt 1000&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wired.com/story/openai-fires-employee-insider-trading-polymarket-kalshi/&#34;&gt;Insider trading part 1001&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://open.spotify.com/episode/2Fs0gI2bl22ApmwsLuWkZB?si=h928r68ORu-ryKfDoWAbhQ&amp;amp;t=2020&amp;amp;pi=5LGhg1G6SdaJU&#34;&gt;Levered single stock etfs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.barstoolsports.com/blog/3563784/gavin-mckenna-knocked-a-guy-out-at-a-bar-got-charges-dropped-then-hit-the-on&#34;&gt;The best college hockey player&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Medicine_Hat_Tigers&#34;&gt;My new favorite hickey team name&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/qKta3RPyLIo?si=P7ZEERBuh_VAZTsm&#34;&gt;Obree&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://nowigetit.us&#34;&gt;Distill scientific papers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Jeonse&#34;&gt;wild way to pay rent&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 02-21-2026</title>
      <link>/learnedt1w/2026/02_21_2026/</link>
      <pubDate>Sat, 21 Feb 2026 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2026/02_21_2026/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/thdxr/status/2022574719694758147&#34;&gt;your org rarely has good ideas. ideas being expensive to implement was actually helping&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/2014_Sony_Pictures_hack&#34;&gt;Sony pictures hack&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.marginalia.nu/log/a_132_ai_bores/&#34;&gt;The &amp;ldquo;AI makes people boring.&amp;rdquo; Thesis&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/simongerman600/status/2024076532444962865/photo/1&#34;&gt;Belarus likes to drink&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wiktionary.org/wiki/bastonade#English&#34;&gt;A new word I learned&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/AxqS66ZHG0k?si=hRkm72pZBobx6P0g&#34;&gt;Ski ballet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/iNGClJV92h8?si=0u6j6xaKqct6zShp&#34;&gt;AI proof business? 2 Rubiks Cubes 2 Cig 2 Beer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=UBVlL0FNbSE&#34;&gt;Lasers&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Jensen%27s_inequality&#34;&gt;Jensen&amp;rsquo;s inequality, I&amp;rsquo;d like to write an article about this one&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.theguardian.com/sport/2026/feb/06/penisgate-winter-olympics-ski-jumpers-acid-penis-health-risks-explainer&#34;&gt;Penis injections&amp;hellip;&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/thdxr/status/2022574719694758147&#34;&gt;your org rarely has good ideas. ideas being expensive to implement was actually helping&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/2014_Sony_Pictures_hack&#34;&gt;Sony pictures hack&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.marginalia.nu/log/a_132_ai_bores/&#34;&gt;The &amp;ldquo;AI makes people boring.&amp;rdquo; Thesis&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/simongerman600/status/2024076532444962865/photo/1&#34;&gt;Belarus likes to drink&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wiktionary.org/wiki/bastonade#English&#34;&gt;A new word I learned&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/AxqS66ZHG0k?si=hRkm72pZBobx6P0g&#34;&gt;Ski ballet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/iNGClJV92h8?si=0u6j6xaKqct6zShp&#34;&gt;AI proof business? 2 Rubiks Cubes 2 Cig 2 Beer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=UBVlL0FNbSE&#34;&gt;Lasers&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Jensen%27s_inequality&#34;&gt;Jensen&amp;rsquo;s inequality, I&amp;rsquo;d like to write an article about this one&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.theguardian.com/sport/2026/feb/06/penisgate-winter-olympics-ski-jumpers-acid-penis-health-risks-explainer&#34;&gt;Penis injections&amp;hellip;&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 02-14-2026</title>
      <link>/learnedt1w/2026/02_14_2026/</link>
      <pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2026/02_14_2026/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://dune.com/filarm/polymarket-activity&#34;&gt;Nice overview of PolyMarket activity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://railway.com&#34;&gt;Another interesting &amp;ldquo;deploy software here&amp;rdquo; business&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.makingsoftware.com/chapters/how-is-data-stored&#34;&gt;Amazing website, good content as well -  how is data stored&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.seangoedecke.com/fast-llm-inference/&#34;&gt;Fast LLM inference, we&amp;rsquo;re going to get model on a chip soon&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nber.org/papers/w34790&#34;&gt;The Economic Impact of Mass Deportations&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/Polymarket/status/2015290042814476541&#34;&gt;Paddy lost&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.instructables.com/DIY-Super-Noise-Canceling-Headphones/&#34;&gt;DIY noise canceling headphones&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;I feel like long Fishing line makes for a good analogy for complexity as project grows in size (both scope # or people). If you have a foot of fishing line it&amp;rsquo;s easy to deal with you know where both ends are at all times. If you have 250 yards, even simple issues can become infinitely complex and you just end up cutting line and starting over.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://dune.com/filarm/polymarket-activity&#34;&gt;Nice overview of PolyMarket activity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://railway.com&#34;&gt;Another interesting &amp;ldquo;deploy software here&amp;rdquo; business&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.makingsoftware.com/chapters/how-is-data-stored&#34;&gt;Amazing website, good content as well -  how is data stored&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.seangoedecke.com/fast-llm-inference/&#34;&gt;Fast LLM inference, we&amp;rsquo;re going to get model on a chip soon&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nber.org/papers/w34790&#34;&gt;The Economic Impact of Mass Deportations&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/Polymarket/status/2015290042814476541&#34;&gt;Paddy lost&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.instructables.com/DIY-Super-Noise-Canceling-Headphones/&#34;&gt;DIY noise canceling headphones&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;I feel like long Fishing line makes for a good analogy for complexity as project grows in size (both scope # or people). If you have a foot of fishing line it&amp;rsquo;s easy to deal with you know where both ends are at all times. If you have 250 yards, even simple issues can become infinitely complex and you just end up cutting line and starting over.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 02-07-2026</title>
      <link>/learnedt1w/2026/02_07_2026/</link>
      <pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2026/02_07_2026/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=qjWkNZ0SXfo&#34;&gt;3D engine&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=uRGljemfwUE&#34;&gt;The Website is down&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://surfingcomplexity.blog/2026/02/08/nobody-knows-how-the-whole-system-works/&#34;&gt;Nobody knows how the whole system works&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://databento.com/microstructure/sub-penny-rule&#34;&gt;Good overview of sub penny rule&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.simonberens.com/p/lessons-learned-shipping-500-units&#34;&gt;Physical products are&amp;hellip; difficult&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnbc.com/amp/2026/02/07/south-korean-crypto-firm-accidentally-sends-out-44-billion-in-bitcoin.html&#34;&gt;Oops&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://fredbenenson.com/blog/2026/02/03/221-cannon-is-not-for-sale/&#34;&gt;Vacant land fraud&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.tenkarabum.com/&#34;&gt;The Tenkara bum blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Places to fish:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Willow springs creek hike behind the dam&lt;/li&gt;
&lt;li&gt;Canyon creek, passed woods canyon&lt;/li&gt;
&lt;li&gt;Silver creek (upper) show low&lt;/li&gt;
&lt;/ul&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=qjWkNZ0SXfo&#34;&gt;3D engine&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=uRGljemfwUE&#34;&gt;The Website is down&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://surfingcomplexity.blog/2026/02/08/nobody-knows-how-the-whole-system-works/&#34;&gt;Nobody knows how the whole system works&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://databento.com/microstructure/sub-penny-rule&#34;&gt;Good overview of sub penny rule&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.simonberens.com/p/lessons-learned-shipping-500-units&#34;&gt;Physical products are&amp;hellip; difficult&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnbc.com/amp/2026/02/07/south-korean-crypto-firm-accidentally-sends-out-44-billion-in-bitcoin.html&#34;&gt;Oops&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://fredbenenson.com/blog/2026/02/03/221-cannon-is-not-for-sale/&#34;&gt;Vacant land fraud&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.tenkarabum.com/&#34;&gt;The Tenkara bum blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Places to fish:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Willow springs creek hike behind the dam&lt;/li&gt;
&lt;li&gt;Canyon creek, passed woods canyon&lt;/li&gt;
&lt;li&gt;Silver creek (upper) show low&lt;/li&gt;
&lt;/ul&gt;
</content>
    </item>
    
    <item>
      <title>Scaling markets with non-human operators</title>
      <link>/musings/scaling_operators/</link>
      <pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate>
      
      <guid>/musings/scaling_operators/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m jotting this down quick so apologies for run-ons and shit that doesn&amp;rsquo;t read well.&lt;/p&gt;
&lt;h2 id=&#34;scaling-markets-with-non-human-operators&#34;&gt;Scaling markets with non-human operators&lt;/h2&gt;
&lt;p&gt;There’s this common adage that you should do things that scale beyond yourself.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Doing things that are limited by your capacity to complete them and garner little long term value moving forward don’t &amp;ldquo;scale&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;uber-autonomous-trucking-and-scaling&#34;&gt;Uber, autonomous trucking, and scaling&lt;/h3&gt;
&lt;p&gt;If you drive for uber your earning potential depends on your willingness to take more rides and how you act during those rides. There’s probably some momentum/multiplicative factor where if you have close to a 5 star rating and a ton of rides you become more desirable in the market and you can derive outsize returns. However, this is probably limited by the fact that most people doing uber are also aiming for this status that typically just requires &lt;strong&gt;time and a decent personality&lt;/strong&gt; to get.&lt;/p&gt;</description>
      <content>&lt;p&gt;I&amp;rsquo;m jotting this down quick so apologies for run-ons and shit that doesn&amp;rsquo;t read well.&lt;/p&gt;
&lt;h2 id=&#34;scaling-markets-with-non-human-operators&#34;&gt;Scaling markets with non-human operators&lt;/h2&gt;
&lt;p&gt;There’s this common adage that you should do things that scale beyond yourself.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Doing things that are limited by your capacity to complete them and garner little long term value moving forward don’t &amp;ldquo;scale&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;uber-autonomous-trucking-and-scaling&#34;&gt;Uber, autonomous trucking, and scaling&lt;/h3&gt;
&lt;p&gt;If you drive for uber your earning potential depends on your willingness to take more rides and how you act during those rides. There’s probably some momentum/multiplicative factor where if you have close to a 5 star rating and a ton of rides you become more desirable in the market and you can derive outsize returns. However, this is probably limited by the fact that most people doing uber are also aiming for this status that typically just requires &lt;strong&gt;time and a decent personality&lt;/strong&gt; to get.&lt;/p&gt;
&lt;p&gt;So &lt;strong&gt;NO&lt;/strong&gt;, Uber driving doesn’t scale. What might scale is if you have a fleet of autonomous vehicles that can constantly give rides for you.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You pay a large fixed cost for the vehicles and the software&lt;/li&gt;
&lt;li&gt;You pay a variable cost for maintenance, software updates, etc…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This begins to feel like a vending machine type business. Something similar could be said for the trucking industry where you could direct your autonomous fleet by winning bids for loads in the market and then sending a truck to execute them. Which is kind of how it already works except people drive the trucks and they bring added complications. Although to be fair, autonomous systems also bring added complications but they are usually preferable to the ones &lt;a href=&#34;https://www.wtvm.com/2026/01/12/semitruck-driver-had-blood-alcohol-level-7-times-over-legal-limit-arrested-dui-deputies-say/&#34;&gt;people bring&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Today I learned that the &lt;a href=&#34;https://www.fmcsa.dot.gov/registration/commercial-drivers-license/states&#34;&gt;FMCSA&lt;/a&gt; established that the legal BAC for a commercial motor vehicle operator is .04%&amp;hellip; which is fucking insane. It should be 0.00000000%. Human beings, distracted humans beings, in anyway inebriated while they drive a ~20 Ton vehicle is INSANE.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I see a few major problems with this.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;As autonomous vehicles become more pervasive what’s stopping anyone from giving up the excess capacity of their vehicle to a market of people willing to pay for it. You could say “I am not using this car from 8pm to 8am” and then allow users to bid for its use all night… this is literally Uber but without an individual sacrificing their time driving (still sacrificing the maintenance cost of the miles and the vomit in the back seat).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The other thing is that large companies like google will control fleets of these vehicles. It may become so cheap to rent an autonomous vehicle that vehicle ownership becomes irrational financially. Cars that don’t have to worry about humans driving them can be completely retrofitted for leisure, camping, etc… and you can leverage some pool of supply for a trip at such a low cost and such high liquidity (no latency in acquiring capacity) that it would be silly to buy a car that is only good at one particular thing. In this way, you could push the burden of insurance, maintenance, liability, etc… to some larger supplier (although they’d probably try and pass that cost back to you, I don’t know exactly how that works out). I hae no idea if it&amp;rsquo;s right to push transportation supply to be under control of a single entity&amp;hellip; that also sounds&amp;hellip; bad?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;humans-in-an-llm-inference-market&#34;&gt;Humans in an LLM inference market&lt;/h3&gt;
&lt;p&gt;Ok that was a little nuts but let me reel this back in to the central thesis of &lt;strong&gt;“things that scale beyond yourself”&lt;/strong&gt;. Something that struck me recently was the &lt;a href=&#34;https://aaronstuyvenberg.com/posts/clawd-bought-a-car&#34;&gt;clawd bot buys a car thing&lt;/a&gt;. This is a rough example, but we are early days. What this shows as that traditional markets are going to break down under the pressure of non-human relations. As an individual, negotiating a car takes time or you can just have a system negotiate for you. We have companies that try to do scale this like Carvana or Cars.com, but they’ll need to pivot or risk being entirely exhumed by the ability for a single person to mass produce enquiries/negotiations and get the &amp;ldquo;best price&amp;rdquo;. Same ting goes for travel sites.&lt;/p&gt;
&lt;p&gt;You could never compete against a high frequency trading firm by tapping away from Robinhood on your phone. In that instant that you bought $BBW is it possible that there may have been a slightly better price available&amp;hellip; yes, but you paid some tiny tax to some firm that helps make the market for $BBW for the convenience of the liquidity and your sanity. I don&amp;rsquo;t know if I&amp;rsquo;m illustrating this well, but I wonder if humans attempting to participate in less liquid, higher friction markets online like ebay, facebook marketplace, car shopping, travel, etc&amp;hellip; will struggle to compete for goods/services amongst bots. This markets were gate kept because you kind of needed to be a person to navigate them, they are built for people and used by people&amp;hellip; but what if they aren&amp;rsquo;t or some fraction of the market becomes no longer human.&lt;/p&gt;
&lt;h3 id=&#34;scaling-oneself-against-a-larger-organizationentity&#34;&gt;Scaling oneself against a larger organization/entity&lt;/h3&gt;
&lt;p&gt;On a slightly different note, think about this when it comes to battling insurance. You can literally attack this seemingly unassailable behemoth that relies on your inability to take the time, read the fine print, and fight to make money. Something as arcane as this will fold under the constant/immense pressure of the arguments/enquiries that can be automated against it.&lt;/p&gt;
&lt;p&gt;HOWEVER, this may be prevented in the short term by these companies lobbying that automated communication for XYZ not be allowed, in which case there will be massive gray areas and a whole host of new problems/new inventions.&lt;/p&gt;
&lt;p&gt;The other thing that could happen is that they build an automated defensive shield against these enquiries. In which case we have LLM on LLM inference to the bottom and the winner is whoever you are paying for inference. This is worrisome for MANY reasons, its probably bad for the climate to be doing all this inference for no fucking reason, and it will be nearly impossible to sift through it all and paralyze decision making (very bad).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m racking my brain for some middle ground. Maybe it&amp;rsquo;s higher cost for communication to make mass spam prohibitive? Maybe there&amp;rsquo;s human in the loop reality check points?&lt;/p&gt;
&lt;p&gt;This is going to be so crazy to watch play out.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 02-01-2026</title>
      <link>/learnedt1w/2026/02_01_2026/</link>
      <pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2026/02_01_2026/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/Best2Two/SQL-FlappyBird&#34;&gt;SQL &amp;gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://qz.com/substack-tv-app-video-text?utm_source=chartr&amp;amp;utm_medium=email&amp;amp;utm_campaign=chartr_20260126&#34;&gt;SUbstack tv&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.pokernews.com/news/2026/01/kaslhi-partners-with-lodge-card-club-50467.htm&#34;&gt;Gambling on&amp;hellip;. wait&amp;hellip; gambling&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://open.spotify.com/episode/2nhqtYRxQ3ofAShea5UQWj?si=xuPUViyBTIaL0p7knpv1pQ&amp;amp;t=938&#34;&gt;TSMC pushing risk to hyper scalers&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://stephango.com/saw&#34;&gt;On the saw, this dude is the CEO of Obsidian&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gwern.net/blog/2026/make-me-care&#34;&gt;First make me care&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://flymag.com/heathrow-drops-the-liquids-rule-what-changes-at-lhr-and-how-close-the-u-s-really-is/&#34;&gt;Removal of security theater&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/theonejvo/status/2017732898632437932&#34;&gt;Slop Markets in everything&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/Best2Two/SQL-FlappyBird&#34;&gt;SQL &amp;gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://qz.com/substack-tv-app-video-text?utm_source=chartr&amp;amp;utm_medium=email&amp;amp;utm_campaign=chartr_20260126&#34;&gt;SUbstack tv&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.pokernews.com/news/2026/01/kaslhi-partners-with-lodge-card-club-50467.htm&#34;&gt;Gambling on&amp;hellip;. wait&amp;hellip; gambling&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://open.spotify.com/episode/2nhqtYRxQ3ofAShea5UQWj?si=xuPUViyBTIaL0p7knpv1pQ&amp;amp;t=938&#34;&gt;TSMC pushing risk to hyper scalers&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://stephango.com/saw&#34;&gt;On the saw, this dude is the CEO of Obsidian&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gwern.net/blog/2026/make-me-care&#34;&gt;First make me care&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://flymag.com/heathrow-drops-the-liquids-rule-what-changes-at-lhr-and-how-close-the-u-s-really-is/&#34;&gt;Removal of security theater&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/theonejvo/status/2017732898632437932&#34;&gt;Slop Markets in everything&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 01-24-2026</title>
      <link>/learnedt1w/2026/01_24_2026/</link>
      <pubDate>Sat, 24 Jan 2026 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2026/01_24_2026/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.seangoedecke.com/addicted-to-being-useful/&#34;&gt;Being useful&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://news.polymarket.com/p/its-over&#34;&gt;Stupid title but interesting&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/DKThomp/status/2013407553128956162&#34;&gt;“Put differently, there were fewer births in China in 2025 than in 1776”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Capsicum_chinense&#34;&gt;I got some of these spicy peppers from my neighbor&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://collabfund.com/blog/a-few-things-im-pretty-sure-about-2026/&#34;&gt;Evil exists primarily in the eye of the beholder, especially in the eye of the victim.&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.seangoedecke.com/addicted-to-being-useful/&#34;&gt;Being useful&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://news.polymarket.com/p/its-over&#34;&gt;Stupid title but interesting&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/DKThomp/status/2013407553128956162&#34;&gt;“Put differently, there were fewer births in China in 2025 than in 1776”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Capsicum_chinense&#34;&gt;I got some of these spicy peppers from my neighbor&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://collabfund.com/blog/a-few-things-im-pretty-sure-about-2026/&#34;&gt;Evil exists primarily in the eye of the beholder, especially in the eye of the victim.&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 01-17-2026</title>
      <link>/learnedt1w/2026/01_17_2026/</link>
      <pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2026/01_17_2026/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://sprites.dev&#34;&gt;Need to try out sprites&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://tailscale.com/blog/tailscale-rustdesk-remote-desktop-access&#34;&gt;Tailscale remote into device&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.w3schools.com/php/php_mysql_prepared_statements.asp&#34;&gt;Prepared statement, the anti-sql injection&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/scozak_look-i-love-a-good-data-pipeline-as-much-activity-7414667630814347264-X7ai?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAACgybecB_jU4rkkl5EUWTxQwo809GUUTvEk&#34;&gt;The over engineered data pipeline&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.machow.ski/&#34;&gt;The Blog that made me start writing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://robotjames.substack.com/p/pairs-trading-for-dickheads&#34;&gt;Pair trade&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.fidelity.com/viewpoints/active-investor/iron-condor-strategy&#34;&gt;Iron Condor&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://substack.com/home/post/p-184497965&#34;&gt;Existential choice paralysis&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://sprites.dev&#34;&gt;Need to try out sprites&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://tailscale.com/blog/tailscale-rustdesk-remote-desktop-access&#34;&gt;Tailscale remote into device&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.w3schools.com/php/php_mysql_prepared_statements.asp&#34;&gt;Prepared statement, the anti-sql injection&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.linkedin.com/posts/scozak_look-i-love-a-good-data-pipeline-as-much-activity-7414667630814347264-X7ai?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAACgybecB_jU4rkkl5EUWTxQwo809GUUTvEk&#34;&gt;The over engineered data pipeline&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.machow.ski/&#34;&gt;The Blog that made me start writing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://robotjames.substack.com/p/pairs-trading-for-dickheads&#34;&gt;Pair trade&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.fidelity.com/viewpoints/active-investor/iron-condor-strategy&#34;&gt;Iron Condor&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://substack.com/home/post/p-184497965&#34;&gt;Existential choice paralysis&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 01-10-2026</title>
      <link>/learnedt1w/2026/01_10_2026/</link>
      <pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2026/01_10_2026/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://planetscale.com/docs/what-is-planetscale&#34;&gt;Planet scale&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cs.cmu.edu/~pavlo/blog/2026/01/2025-databases-retrospective.html&#34;&gt;Andy’s annual review&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sympathetic.ink/2025/12/11/Column-Storage-for-the-AI-era.html&#34;&gt;Modern column storage&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://phrack.org/issues/71/17&#34;&gt;Interesting thoughts about modern work&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://fogcam.org&#34;&gt;FogCam&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=DF8Pny3VTg8&#34;&gt;18000 water cups&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://kk.org/thetechnium/how-will-the-miracle-happen-today/&#34;&gt;Traveling &amp;raquo;&amp;raquo;&amp;gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/ddZwavVtIpI?si=8pZh_CSdotuqDVGk&#34;&gt;The Crazy Alberto&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The real issue people miss is that code isn’t an asset, it’s a liability. Every line of code is a potential bug or something that will slow down your future development. Experienced devs know to weight trade offs of more code vs maintainability. Whereas just using LLMs to shovel middling quality code as fast as you can misses those nuances and will lead to huge problems in the long run.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://planetscale.com/docs/what-is-planetscale&#34;&gt;Planet scale&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cs.cmu.edu/~pavlo/blog/2026/01/2025-databases-retrospective.html&#34;&gt;Andy’s annual review&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://sympathetic.ink/2025/12/11/Column-Storage-for-the-AI-era.html&#34;&gt;Modern column storage&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://phrack.org/issues/71/17&#34;&gt;Interesting thoughts about modern work&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://fogcam.org&#34;&gt;FogCam&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=DF8Pny3VTg8&#34;&gt;18000 water cups&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://kk.org/thetechnium/how-will-the-miracle-happen-today/&#34;&gt;Traveling &amp;raquo;&amp;raquo;&amp;gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/ddZwavVtIpI?si=8pZh_CSdotuqDVGk&#34;&gt;The Crazy Alberto&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The real issue people miss is that code isn’t an asset, it’s a liability. Every line of code is a potential bug or something that will slow down your future development. Experienced devs know to weight trade offs of more code vs maintainability. Whereas just using LLMs to shovel middling quality code as fast as you can misses those nuances and will lead to huge problems in the long run.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 01-03-2026</title>
      <link>/learnedt1w/2026/01_03_2026/</link>
      <pubDate>Sat, 03 Jan 2026 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2026/01_03_2026/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Setuid&#34;&gt;Setuid&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://martin.kleppmann.com/2011/03/07/accounting-for-computer-scientists.html&#34;&gt;Accounting explained in graphs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/GiancarloSopo/status/2006474169018388912&#34;&gt;A Modern Movie Ranking&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.animatedknots.com/fishing-knots&#34;&gt;Cool site for learning knots&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=tQB_ib-KQXA&#34;&gt;Ghost guns&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;New Years Resolutions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Become conversationally proficient in Spanish&lt;/li&gt;
&lt;li&gt;Be able to fish for myself both shore fishing and stream fishing (not fly fishing)&lt;/li&gt;
&lt;li&gt;Continue to Travel as much as possible&lt;/li&gt;
&lt;/ol&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Setuid&#34;&gt;Setuid&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://martin.kleppmann.com/2011/03/07/accounting-for-computer-scientists.html&#34;&gt;Accounting explained in graphs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/GiancarloSopo/status/2006474169018388912&#34;&gt;A Modern Movie Ranking&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.animatedknots.com/fishing-knots&#34;&gt;Cool site for learning knots&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=tQB_ib-KQXA&#34;&gt;Ghost guns&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;New Years Resolutions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Become conversationally proficient in Spanish&lt;/li&gt;
&lt;li&gt;Be able to fish for myself both shore fishing and stream fishing (not fly fishing)&lt;/li&gt;
&lt;li&gt;Continue to Travel as much as possible&lt;/li&gt;
&lt;/ol&gt;
</content>
    </item>
    
    <item>
      <title>Puerto Peñasco</title>
      <link>/travel/puerto_penasco/</link>
      <pubDate>Thu, 01 Jan 2026 00:00:00 +0000</pubDate>
      
      <guid>/travel/puerto_penasco/</guid>
      <description>&lt;h2 id=&#34;about&#34;&gt;About&lt;/h2&gt;
&lt;p&gt;Trip to Puerto Peñasco with Kenta, Kenta&amp;rsquo;s dad (John) and Tristan.&lt;/p&gt;
&lt;h2 id=&#34;1226&#34;&gt;12/26:&lt;/h2&gt;
&lt;p&gt;Played some poker the night before and got up around 7:20. Ally woke me up. Packed up the last bit of my stuff and had Ally drive me over to Kenta’s. Met up with Kenta, his dad John, and Tristan. Piled in the four-runner and headed to Mexico.&lt;/p&gt;
&lt;p&gt;It was about 4 hours to get to rocky point. We got the rods set up and went to the pier. The pier was right next to wrecked on the reef. It was basically a ton of massive concrete blocks haphazardly stacked on top of each other.&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;about&#34;&gt;About&lt;/h2&gt;
&lt;p&gt;Trip to Puerto Peñasco with Kenta, Kenta&amp;rsquo;s dad (John) and Tristan.&lt;/p&gt;
&lt;h2 id=&#34;1226&#34;&gt;12/26:&lt;/h2&gt;
&lt;p&gt;Played some poker the night before and got up around 7:20. Ally woke me up. Packed up the last bit of my stuff and had Ally drive me over to Kenta’s. Met up with Kenta, his dad John, and Tristan. Piled in the four-runner and headed to Mexico.&lt;/p&gt;
&lt;p&gt;It was about 4 hours to get to rocky point. We got the rods set up and went to the pier. The pier was right next to wrecked on the reef. It was basically a ton of massive concrete blocks haphazardly stacked on top of each other.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/MEXICO_5.JPG&#34; alt=&#34;The Pier&#34;&gt;&lt;/p&gt;
&lt;p&gt;We cast for a bit, I lost my lure and we didn’t catch anything.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/MEXICO_4.JPG&#34; alt=&#34;Pier Fishing&#34;&gt;&lt;/p&gt;
&lt;p&gt;We drove over to el pollo Lucas and had amazing roasted chicken with tortillas.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/MEXICO_3.JPG&#34; alt=&#34;El Pollo Lucas&#34;&gt;&lt;/p&gt;
&lt;p&gt;After that, we drove through the touristy part of rocky point which I remembered from when I was a little kid (have a photo with Alec there).&lt;/p&gt;
&lt;p&gt;We drove to our resort and brought our stuff in. We grabbed the rods and headed down to fish directly in front of our place which was right on the beach.&lt;/p&gt;
&lt;p&gt;We didn’t catch anything but Kenta caught a pelican. I practiced casting, lost a lure, and successfully tied a new one back on. So that was good. I’m definitely a bit embarrassed at being so bad at fishing.&lt;/p&gt;
&lt;p&gt;As the sun started setting we went back up stairs and then headed out for dinner. We went to some taco place and got aguachiles, quesadilla, and tacos. After that, we want to Al capones and watched a crazy 49ers vs bears game and I had a guava beer.&lt;/p&gt;
&lt;p&gt;We went home, chilled, watched despicable me 3 in Spanish and went to bed.&lt;/p&gt;
&lt;h2 id=&#34;1227&#34;&gt;12/27:&lt;/h2&gt;
&lt;p&gt;We got up around 7:30 and got out of the place around 8:30. The water wasn’t working in our resort which delayed us a bit.&lt;/p&gt;
&lt;p&gt;We went to Reggie’s and got some breakfast burritos which were a little dry but pretty good if you added some salsa.&lt;/p&gt;
&lt;p&gt;We took the highway three, passed las conchas to the second estuary “la pinta”. The highway is a tiny two lane road that follows the hills underneath it. We were cruising along and it kind of felt like a roller coaster at 70/80 mph.&lt;/p&gt;
&lt;p&gt;To get to the second estuary we turned off the highway onto a dirt road marked by an abandoned house and mile marker 32. Taking the road for five minutes we drove passed another shack looking house with a green tractor. We were also met by a dog that got up real close to our car and barked as we entered.&lt;/p&gt;
&lt;p&gt;John drove up the beach a bit until he felt the sand was a bit loose and then parked the car to avoid getting stuck. This would have been a problem as we were completely alone. This was a popular spot where normally you could see other people fishing, but today being a Monday morning close to new years it was completely empty.&lt;/p&gt;
&lt;p&gt;The morning was a blast. I got a handle on casting the spin rod and closing the bail fast and keeping the tip up to avoid getting my lure stuck. I did get it stuck early on and John and I made almost every mistake possible getting a new one on there it was hilarious (not really) because I was useless and keeping John away from catching fish.&lt;/p&gt;
&lt;p&gt;We then instantly started catching fish. John caught a corbina, a small grouper, and a leather jack. Tristan caught similar fish and so did Kenta. I caught one good size corbina when John gave me his rod that had some fly fish feathers obscuring a hook that the fish seemed to really like.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/MEXICO_1.png&#34; alt=&#34;I caught a fish&#34;&gt;&lt;/p&gt;
&lt;p&gt;The tide was going out all morning so while we were able to cast farther out the fish stopped biting. Seems like knowing where the fish are going to be is a complicated ordeal… but we had a better chance as the tide was coming in and just after it started going out.&lt;/p&gt;
&lt;p&gt;We also saw a dorsal fin pop through the water which seemed to be a dolphin but kind of looked like a shark. This was a problem as it was eating all our fish!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/MEXICO_2.png&#34; alt=&#34;Dolphin?&#34;&gt;&lt;/p&gt;
&lt;p&gt;After about 1 o&amp;rsquo;clock, I was basically just practicing casting, nothing was biting. John even brought out his fly rod but it was a bit too windy. Around 1 we called it and headed to Tortas Siria.&lt;/p&gt;
&lt;p&gt;We walked in with our water shoes on and just ruined their floor with mud hahaha. We asked for a mop to clean it but the lady told us it was no problem. We got tortas and John accidentally got something off the breakfast menu. I got a torta millenesa which was good. Kenta got some prepared drink which we think was made with local water but he seems fine, it was kind of funny because he got a bit nervous at the time.&lt;/p&gt;
&lt;p&gt;After lunch we drove over to malecon or the tourist area that I remember as a kid and walked around. It’s kind of annoying just a bunch of people asking you to buy useless shit. A bunch of guys asked if we wanted to go fishing. I told them we had been fishing all day. He then said “what about finger fishing!?”. After walking around a bit we got some ice cream. And drove back to the resort.&lt;/p&gt;
&lt;p&gt;We turned on Scarface. Tristan and Kenta went down to the hot tub which was apparently not hot, and I talked with John.&lt;/p&gt;
&lt;p&gt;We decided to fish/walk down the beach from where we were staying and go to a bar for some beers. It was rocky and difficult to catch much with the large waves, but we cast out a bit and got to the bar around 6. We watched this guy at the beach get his stupid jeep unstuck and the cops ran out to give him a ticket. We had a few beers and Kenta, Tristan, and I had mango margaritas.&lt;/p&gt;
&lt;p&gt;We walked back up the road to the car to get dinner.&lt;/p&gt;
&lt;p&gt;For dinner we drove to Diego’s tiki bar. Which was back up toward la cholla. We got shrimp tacos, coconut shrimp, bacon wrapped shrimp, etc… there was a theme! Our waiter was nice and Tristan is basically fluent at Spanish at this point. We got his backstory and he told us about puerto Peñasco and Mexico, how most places are safe, that he plays soccer and the restaurants all play soccer against each other. He also let us know how many ladies he was getting.&lt;/p&gt;
&lt;p&gt;We were super full after dinner. We headed over to a super market to get some breakfast for tomorrow as we plan on getting an early start. We got some beef jerky and conchas… breakfast of champions.&lt;/p&gt;
&lt;p&gt;Watched a bit of Scarface and then showered/headed to bed.&lt;/p&gt;
&lt;h2 id=&#34;1228&#34;&gt;12/28:&lt;/h2&gt;
&lt;p&gt;Got up around 7, a bit before Kenta/tristan but after Kenta’s dad who had already gone down and prepared the gear.&lt;/p&gt;
&lt;p&gt;Had some old coffee and a bit of a concha for breakfast. Started having a headache about an hour after I woke up. It was the usual sort, pain in the temple and lasts for 4-5 hours. I think due to all the salt/dehydration from the day before.&lt;/p&gt;
&lt;p&gt;Got packed up and then we drove over to the second estuary. Started fishing and I caught one fish. Wasn’t feeling great and my stomach was starting to churn.&lt;/p&gt;
&lt;p&gt;I saw the splashing of some fish about 25 yards off shore and attempted to cast my lure out right in the middle of that area. I cast shittly and left it about 10 yards short of where I wanted it. I quickly reeled it in and sent it out again and hit the spot perfectly&amp;hellip; almost too far. I started reeling it in and immediately got a fish on. It was a pretty good sized corbina, I didn’t have the tension right so I was struggling to bring it in. Tristan came over and increased the tension a bit, and I managed to bring the fish in and gently drag it ashore.&lt;/p&gt;
&lt;p&gt;The fish was hooked twice in the mouth and once through its right fin. They were pretty easy to get out and I quickly let it back into the water.&lt;/p&gt;
&lt;p&gt;At this point, I gave John my rod (it was better than the one he was using as he wanted us to catch fish) and watched for an hour or so. Around 11:30 the wind picked up and we called it a day. We got the gear packed up and drove back to el pollo Lucas for lunch.&lt;/p&gt;
&lt;p&gt;I wasn’t feeling great so I didn’t eat, but got some tortillas to bring home. After lunch, we got some gas and headed back to the border. We drove passed all the people trying wash our car and sell us puppies to have our passports checked. Tristan had an emergency passport and the agent said at first he came up as an interpol person of interest before he manually typed in his info and found that to be wrong. We drove through why and ajo before one more border patrol checkpoint look at us and let us through.&lt;/p&gt;
&lt;p&gt;Driving back from Gila bend, John told us about his skateboarding and snowboarding days. As well as Living in Hawaii and Japan. He also talked a lot about his work at perforce, enforcing abuse of rogue wave’s software licenses (ALWAYS BE CAREFUL WHAT SOFTWARE YOU DEPEND ON AND READ LICENSE AGREEMENTS)&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary:&lt;/h2&gt;
&lt;p&gt;Amazing trip, I need to get better at fishing and knot tying. Puerto peñasco is an amazing resource within 4 hours drive of where I live that I had underrated before. Spending time in nature with friends is one of my favorite things. I really enjoy speaking Spanish and generally like speaking local languages it’s so much fun.&lt;/p&gt;
&lt;p&gt;Whiskey that John likes: Weller, Eagle rare&lt;/p&gt;
&lt;p&gt;Rod: Phenix redeye&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Value at the limit</title>
      <link>/musings/restrictions/</link>
      <pubDate>Thu, 01 Jan 2026 00:00:00 +0000</pubDate>
      
      <guid>/musings/restrictions/</guid>
      <description>&lt;h2 id=&#34;an-unbounded-supply-of-chess&#34;&gt;An unbounded supply of Chess&lt;/h2&gt;
&lt;p&gt;I used to play chess only on &lt;a href=&#34;https://lichess.org/&#34;&gt;lichess&lt;/a&gt; everyday. Lichess is great, it&amp;rsquo;s free, &lt;a href=&#34;https://github.com/lichess-org&#34;&gt;open source&lt;/a&gt;, and I&amp;rsquo;ve been donating to the site monthly for years.&lt;/p&gt;
&lt;p&gt;I prefer Lichess to &lt;a href=&#34;https://www.chess.com/home&#34;&gt;Chess.com&lt;/a&gt; in nearly everyway, but, recently, I&amp;rsquo;ve been playing/practicing on chess.com. Why? &lt;code&gt;Because it offers a stopping point.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Chess offers me a slippery slope. On one hand it&amp;rsquo;s an outlet for deep thought and creativity and on the other its an aggravating time suck that leaves me infuriated with little improvement in my abilities to show for it. Often times, I&amp;rsquo;ll play blitz or bullet chess for hours. I play these time controls poorly and find myself sliding into the &amp;ldquo;just one more game mentality&amp;rdquo;.&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;an-unbounded-supply-of-chess&#34;&gt;An unbounded supply of Chess&lt;/h2&gt;
&lt;p&gt;I used to play chess only on &lt;a href=&#34;https://lichess.org/&#34;&gt;lichess&lt;/a&gt; everyday. Lichess is great, it&amp;rsquo;s free, &lt;a href=&#34;https://github.com/lichess-org&#34;&gt;open source&lt;/a&gt;, and I&amp;rsquo;ve been donating to the site monthly for years.&lt;/p&gt;
&lt;p&gt;I prefer Lichess to &lt;a href=&#34;https://www.chess.com/home&#34;&gt;Chess.com&lt;/a&gt; in nearly everyway, but, recently, I&amp;rsquo;ve been playing/practicing on chess.com. Why? &lt;code&gt;Because it offers a stopping point.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Chess offers me a slippery slope. On one hand it&amp;rsquo;s an outlet for deep thought and creativity and on the other its an aggravating time suck that leaves me infuriated with little improvement in my abilities to show for it. Often times, I&amp;rsquo;ll play blitz or bullet chess for hours. I play these time controls poorly and find myself sliding into the &amp;ldquo;just one more game mentality&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Lichess offers me unlimited puzzles, variants, and studies. I can play and practice as much as I want without ever having an advertisement or banner to &amp;ldquo;subscribe&amp;rdquo; thrown in my face.&lt;/p&gt;
&lt;p&gt;On Chess.com I only get to solve 4-5 puzzles a day before reaching a limit and being told I need to &amp;ldquo;upgrade to premium&amp;rdquo;. Unless I create a new account, I wont be able to solve another puzzle on the site for 24 hours&amp;hellip; this is exactly what I need.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;I need a stopping point.&lt;/code&gt; I need someone to tell me that I&amp;rsquo;ve done enough. Scarce supply incentivizes me to take my time and leverage each puzzle to the maximum.&lt;/p&gt;
&lt;h2 id=&#34;being-restricted-is-a-feature&#34;&gt;Being restricted is a feature&lt;/h2&gt;
&lt;p&gt;Unbounded supply is dangerous&amp;hellip; it feels valuable, but requires a high level of self discipline. The same self discipline that is chipped away at from the time you wake up to the time you go to bed.&lt;/p&gt;
&lt;p&gt;Restriction is a feature. I&amp;rsquo;m enabled to gamble on nearly anything, eat/smoke/drink as much as I want, I can watch sports for hours a day on all of my devices, I can scroll short form videos until my brain is mush, play video games until my fingers are numb, and read information (both true and false) until I&amp;rsquo;ve developed myopia&amp;hellip; in the kind of abundance we live in today, restriction is a feature. Being told to STOP is a feature.&lt;/p&gt;
&lt;p&gt;Though not realizing it, Chess.com&amp;rsquo;s subscription model has offered me a small respite from the onslaught of abundance. The restriction of my actions keeps me coming back to solve my four puzzles everyday. For that, I&amp;rsquo;m grateful.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 12-27-2025</title>
      <link>/learnedt1w/2025/12_27_2025/</link>
      <pubDate>Sat, 27 Dec 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/12_27_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/aPsq5nqvhxg?si=hOBW-OKM-HzkPeHz&#34;&gt;Livecoding melodic DNB music in Strudel&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.deepsouthventures.com/i-sell-onions-on-the-internet/&#34;&gt;Selling onions &amp;gt; Selling software&lt;/a&gt;
&lt;a href=&#34;https://elevenlabs.io/payouts&#34;&gt;Sell your&amp;hellip; voice&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Nonce&#34;&gt;Nonce&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://nonzerosum.games/goodhartslaw.html&#34;&gt;When a measure become a target it ceases to become a good measure&amp;hellip; goof background on Goodhart&amp;rsquo;s law&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.merriam-webster.com/dictionary/sepulchral&#34;&gt;sepulchral&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://poloclub.github.io/transformer-explainer/&#34;&gt;Great Transformer explainer&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=3k20zFlbFfE&#34;&gt;Chicken Stock&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/aPsq5nqvhxg?si=hOBW-OKM-HzkPeHz&#34;&gt;Livecoding melodic DNB music in Strudel&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.deepsouthventures.com/i-sell-onions-on-the-internet/&#34;&gt;Selling onions &amp;gt; Selling software&lt;/a&gt;
&lt;a href=&#34;https://elevenlabs.io/payouts&#34;&gt;Sell your&amp;hellip; voice&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Nonce&#34;&gt;Nonce&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://nonzerosum.games/goodhartslaw.html&#34;&gt;When a measure become a target it ceases to become a good measure&amp;hellip; goof background on Goodhart&amp;rsquo;s law&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.merriam-webster.com/dictionary/sepulchral&#34;&gt;sepulchral&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://poloclub.github.io/transformer-explainer/&#34;&gt;Great Transformer explainer&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=3k20zFlbFfE&#34;&gt;Chicken Stock&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 12-20-2025</title>
      <link>/learnedt1w/2025/12_20_2025/</link>
      <pubDate>Sat, 20 Dec 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/12_20_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.benkuhn.net/rha/&#34;&gt;readability, hackability and abstraction&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Reverse a hexdump &lt;code&gt;cat some_file.txt | xxd -r &amp;gt;reversed_hex_dump.txt&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://databento.com/&#34;&gt;Databento looks great&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://code.visualstudio.com/docs/devcontainers/containers#_quick-start-try-a-development-container&#34;&gt;Start a dev container&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.reddit.com/r/PredictionsMarkets/s/amaTD4D3XV&#34;&gt;Insider trading?&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://sonyawinner.com/rug-style/abstract-rugs/&#34;&gt;Cool rugs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/FischerKing64/status/1998785412559720910&#34;&gt;Think before grabbing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.construction-physics.com/p/why-are-so-many-pedestrians-killed&#34;&gt;Why are so many peds killed by cars&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.instructables.com/Animate-a-Billy-Bass-Mouth-With-Any-Audio-Source/&#34;&gt;Need to build this custom big mouth bass&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.benkuhn.net/rha/&#34;&gt;readability, hackability and abstraction&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Reverse a hexdump &lt;code&gt;cat some_file.txt | xxd -r &amp;gt;reversed_hex_dump.txt&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://databento.com/&#34;&gt;Databento looks great&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://code.visualstudio.com/docs/devcontainers/containers#_quick-start-try-a-development-container&#34;&gt;Start a dev container&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.reddit.com/r/PredictionsMarkets/s/amaTD4D3XV&#34;&gt;Insider trading?&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://sonyawinner.com/rug-style/abstract-rugs/&#34;&gt;Cool rugs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/FischerKing64/status/1998785412559720910&#34;&gt;Think before grabbing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.construction-physics.com/p/why-are-so-many-pedestrians-killed&#34;&gt;Why are so many peds killed by cars&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.instructables.com/Animate-a-Billy-Bass-Mouth-With-Any-Audio-Source/&#34;&gt;Need to build this custom big mouth bass&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>LLM Weaponized Spam Circle</title>
      <link>/musings/llm_text_weaponization/</link>
      <pubDate>Sat, 13 Dec 2025 00:00:00 +0000</pubDate>
      
      <guid>/musings/llm_text_weaponization/</guid>
      <description>&lt;p&gt;Right now, circular financing and AI bubble takes are a dime a dozen. These may prove true, but be warned:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Markets can remain irrational longer than you can remain solvent.”&lt;br&gt;
― John Maynard Keynes&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I think another kind of circle is forming: &lt;strong&gt;The Weaponized Spam Circle&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;thesis&#34;&gt;Thesis&lt;/h2&gt;
&lt;p&gt;LLMs are great at commoditized tasks because it lowers the cost to produce them. People love this so much they leverage them for non-commoditized tasks, in doing so, they shift the burden of actually thinking to the reader. A reader will be overwhelmed by the quantity of generated text and require LLM assistance to ingest/summarize it, resorting to LLM assistance to respond.&lt;/p&gt;</description>
      <content>&lt;p&gt;Right now, circular financing and AI bubble takes are a dime a dozen. These may prove true, but be warned:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Markets can remain irrational longer than you can remain solvent.”&lt;br&gt;
― John Maynard Keynes&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I think another kind of circle is forming: &lt;strong&gt;The Weaponized Spam Circle&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;thesis&#34;&gt;Thesis&lt;/h2&gt;
&lt;p&gt;LLMs are great at commoditized tasks because it lowers the cost to produce them. People love this so much they leverage them for non-commoditized tasks, in doing so, they shift the burden of actually thinking to the reader. A reader will be overwhelmed by the quantity of generated text and require LLM assistance to ingest/summarize it, resorting to LLM assistance to respond.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s &lt;a href=&#34;https://en.wikipedia.org/wiki/Brandolini%27s_law&#34;&gt;Brandolini&amp;rsquo;s Law&lt;/a&gt; but instead of refuting the bullshit, the bullshit is shot back at the bullshitter and the cycle begins anew.&lt;/p&gt;
&lt;p&gt;In adding another layer to how we communicate with one another,  we shell out big $$$ to afford the matrix multiplication to do so.&lt;/p&gt;
&lt;h3 id=&#34;but-what-is-a-commodity&#34;&gt;But what is a commodity?&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s do the &lt;a href=&#34;https://en.wikipedia.org/wiki/Commodity&#34;&gt;wikipedia&lt;/a&gt; cliche:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;In economics, a commodity is an economic good, usually a resource, that specifically has full or substantial fungibility: that is, the market treats instances of the good as equivalent or nearly so with no regard to who produced them.&amp;rdquo;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;ldquo;With no regard for who produced them&amp;hellip;&amp;rdquo; will be the thread I hold throughout the rest of this piece.&lt;/p&gt;
&lt;p&gt;Computers (neural networks trained on millions of positions) are better than humans at Chess. Humans prefer to watch humans play chess and regard using a computer as cheating.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This means playing chess &lt;strong&gt;IS NOT&lt;/strong&gt; a commodity, we &lt;strong&gt;CARE&lt;/strong&gt; who plays the chess&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do people check where the gas is coming from&amp;hellip; do they deep dive the exact source of the energy being used to charge their Tesla? Pretty much no&amp;hellip; if you want to get pissed here and tell me how you&amp;rsquo;d never use Saudi oil and you check at every gas station be my guest.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This means filling up/charging our cars &lt;strong&gt;IS&lt;/strong&gt; a commodity, we &lt;strong&gt;DON&amp;rsquo;T CARE&lt;/strong&gt; how it happens&amp;hellip; we want it as cheaply/quickly as possible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;But writing... is it a commodity?&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;when-characters-are-a-commodity&#34;&gt;When Characters are a Commodity&lt;/h3&gt;
&lt;p&gt;Not all writing is thoughtful. There&amp;rsquo;s tedious writing marked by &amp;ldquo;character limits&amp;rdquo;, extrinsically imposed deadlines, random boiler plate, documenting a new feature, emails to insurance companies, and the gut wrenching feeling of having to start putting words down for a book report.&lt;/p&gt;
&lt;p&gt;In these moments, an LLM can shoot through character limits and fake decorum to produce words that felt far away. With a bit of editing, large writing burdens are reduced to a slight inconvenience.&lt;/p&gt;
&lt;p&gt;But we&amp;rsquo;ve already made a big mistake&amp;hellip; if you&amp;rsquo;re nodding your head at the two paragraphs above, read them again.&lt;/p&gt;
&lt;details class=&#34;spoiler&#34;&gt;
  &lt;summary&gt;Expand when you&amp;#39;ve formed an opinion&lt;/summary&gt;
  &lt;div class=&#34;spoiler-content&#34;&gt;
    &lt;p&gt;I threw &amp;ldquo;book report&amp;rdquo; in there with the rest of those &amp;ldquo;examples&amp;rdquo;. A book report is not a commodity. If you&amp;rsquo;re writing a book report you&amp;rsquo;re most likely learning the basics of writing. You&amp;rsquo;re learning the fundamentals of how to take a position on something and defend it. If that is a commodity, then I don&amp;rsquo;t know what is. The thinking is the important piece and the author wielding their brain is what matters, the physical words are a by-product used for other humans to interpret your thoughts.&lt;/p&gt;
&lt;p&gt;Also what about: &amp;ldquo;documentation&amp;rdquo; and &amp;ldquo;extrinsically imposed deadlines&amp;rdquo;. I can spot issues there as well.&lt;/p&gt;

  &lt;/div&gt;
&lt;/details&gt;
&lt;p&gt;Sometimes it&amp;rsquo;s not easy to determine what &lt;code&gt;IS&lt;/code&gt; and what &lt;code&gt;IS NOT&lt;/code&gt; a commodity when it comes to writing.&lt;/p&gt;
&lt;p&gt;Sometimes it&amp;rsquo;s too easy to label some writing as a commodity and shovel it off to an LLM.&lt;/p&gt;
&lt;p&gt;Sometimes it&amp;rsquo;s not easy to think, thinking is hard, new ideas are hard.&lt;/p&gt;
&lt;h3 id=&#34;when-characters-are-not-a-commodity&#34;&gt;When Characters are NOT a commodity&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;“Writing is thinking. To write well is to think clearly. That&amp;rsquo;s why it&amp;rsquo;s so hard.&amp;quot;
― David McCullough&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;At Amazon, there is the notorious &lt;a href=&#34;https://www.youtube.com/watch?v=NE8DX8_Xg4E&#34;&gt;six pager&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;When you have to write your ideas out in complete sentences&amp;hellip; in complete paragraphs it forces a deeper clarity of thinking.&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;The author who has put a tremendous amount of work into writing the memo gets to see everyone read the memo.&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A six pager is NOT a commodity. The moment it becomes a commodity is the moment it becomes no better than a powerpoint. The people who wrote the document should care about it, should have thought deeply about its contents, and those reading the document digest it out of that same thoughtfulness.&lt;/p&gt;
&lt;p&gt;Yet LLMs have quickly crept into this space, because writing a six pager is hard, it requires thinking, and plopping that burden on something else is just a few key strokes away. The writing is on the wall:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python 3.7 on Lambda (LLM Knowledge cut off)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;its not just a ___ its a ___&amp;rdquo;&lt;/li&gt;
&lt;li&gt;cascades of bullet points&lt;/li&gt;
&lt;li&gt;Hallucinated information that looks ok but is wrong after a bit of thought&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Wait, are they treating this document like a commodity?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Did they take the time think through the key ideas?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Did this person even read what they wrote?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Do they even care about my time?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;hellip;I&amp;rsquo;ll respond in kind.&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;p&gt;That &amp;ldquo;six pager&amp;rdquo; can be done so &lt;code&gt;FAST&lt;/code&gt; because nobody is &lt;code&gt;THINKING ABOUT IT&lt;/code&gt;. The LLM takes a unique piece of articulate thinking and turns it into a commodity. How do we respond to a commodity? &lt;strong&gt;Drive down the price!&lt;/strong&gt; If they chose not to think why should I chose to think. And&amp;hellip;&amp;hellip;&amp;hellip; we have our circle.&lt;/p&gt;
&lt;h3 id=&#34;output-as-a-result-of-input&#34;&gt;Output as a result of input&lt;/h3&gt;
&lt;p&gt;I could care less about the output of the hallucinated + verbose document. Show me the input, show me the meat of what you are trying to convey. If there was no or sparse input to begin with&amp;hellip; then there was no or sparse thought.&lt;/p&gt;
&lt;p&gt;Is adding fluff to things holding us back? Is this why people reach to LLMs to puff up their ideas? If there is an important point to make then lets start there, but we don&amp;rsquo;t need to play telephone back and forth via LLM.&lt;/p&gt;
&lt;h3 id=&#34;why-do-we-teach-assembly&#34;&gt;Why do we teach assembly&lt;/h3&gt;
&lt;p&gt;Many undergraduate curriculums teach assembly. Most undergraduate students will never earn a $ or spend a minute of their free time writing assembly. Why teach it? Because it helps provide insight into how computers work.&lt;/p&gt;
&lt;p&gt;Why take the time to develop an idea and write it down? Because it forces &lt;code&gt;you&lt;/code&gt; to think critically about the opinions and about the facts.&lt;/p&gt;
&lt;h3 id=&#34;doing-this-because-we-cant-help-ourselves&#34;&gt;Doing this because we can&amp;rsquo;t help ourselves&lt;/h3&gt;
&lt;p&gt;There are many practical use cases for LLMs. It is 100% clear that they are beneficial, especially if you take the time to give them the tools, context, and guidelines they need to succeed. Just like a human, if you give an LLM limited context and tell it to do something it will probably suck at it. LLMs are NOT humans, it&amp;rsquo;s math, and if the necessary inputs aren&amp;rsquo;t provided the equation won&amp;rsquo;t be solvable.&lt;/p&gt;
&lt;p&gt;Just like with any beneficial thing, humans are going to exploit it for their gain. It&amp;rsquo;s fundamental to how we operate. This massive boon in LLMs feels like a free lunch&amp;hellip; it feels like something to be exploited, yet it remains a balancing act.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Sure you can generate a bunch of text and throw at someone, but they can do the same to you&amp;hellip; we are back to square one.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sure you can generate 100,000 lines of code, but now you need to maintain, refactor, and change one hundred thousand lines of code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sure you can automate that PMs flow where they aggregate a bunch of stuff from Asana, Excel and your ticketing system into a general summary, but why the fuck are we tracking things across 6 different application in the first place.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sure you can automate your Linkedin post, but it&amp;rsquo;s just getting gobbled up by bots rolling around in the absolute slop trough of their own creation. If you want a peek behind the curtain and see what the dead internet will look like, scroll around there for 5 minutes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;other-random-thoughts&#34;&gt;Other Random Thoughts&lt;/h3&gt;
&lt;p&gt;Do we really want people growing up and learning how to read/write via LLM? The pattern&amp;rsquo;s they&amp;rsquo;ll learn will converge us towards the style of LLM writing that people find so obviously annoying today. Will the humans have the ability to recognize that and AVOID that style?&lt;/p&gt;
&lt;p&gt;You have a brain, you can still think, brains are powerful&amp;hellip; use it.&lt;/p&gt;
&lt;p&gt;Writing without thought distills an entire method of thinking into something transactional, input output. Don’t ask how it works it just does.&lt;/p&gt;
&lt;p&gt;For kids, writing is the new math.&lt;/p&gt;
&lt;p&gt;In regard to math:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When will I actually use this when I grow up?&lt;/li&gt;
&lt;li&gt;I have a calculator I don&amp;rsquo;t need to learn this.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now, in regard to reading/writing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I have an LLM I don&amp;rsquo;t need to write this.&lt;/li&gt;
&lt;li&gt;What&amp;rsquo;s CliffsNotes? I just use an LLM&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For adults, the same super powers you can use to generate a lot of text can be used against you. Most adults will be using their single LLM chat session to compete against an entire layer of corporate LLMs. Let the words be fired back and forth and to the datacenter owner&amp;rsquo;s, chip manufactures, and model trainers go the spoils.&lt;/p&gt;
&lt;p&gt;Whenever I leverage an LLM to write I ask a flavor of these questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Would the reader or any of the reader(s) consuming this content care if it was produced by an LLM?&lt;/li&gt;
&lt;li&gt;Would I personally care if the content under my name was authored by an LLM?&lt;/li&gt;
&lt;li&gt;Have I provided the proper steering, guidelines, and context for the model to be successful?&lt;/li&gt;
&lt;li&gt;Have I read what the model has produced?&lt;/li&gt;
&lt;/ul&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 12-13-2025</title>
      <link>/learnedt1w/2025/12_13_2025/</link>
      <pubDate>Sat, 13 Dec 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/12_13_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://turtletoy.net/turtle/789cce3829&#34;&gt;Cool designs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.experimental-history.com/p/bag-of-words-have-mercy-on-us&#34;&gt;Interesting points&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;That’s also why I see no point in using AI to, say, write an essay, just like I see no point in bringing a forklift to the gym. Sure, it can lift the weights, but I’m not trying to suspend a barbell above the floor for the hell of it. I lift it because I want to become the kind of person who can lift it. Similarly, I write because I want to become the kind of person who can think.&lt;/li&gt;
&lt;li&gt;The original sin of artificial intelligence was, of course, calling it artificial intelligence. Those two words have lured us into making man the measure of machine: “Now it’s as smart as an undergraduate&amp;hellip;now it’s as smart as a PhD!” These comparisons only give us the illusion of understanding AI’s capabilities and limitations, as well as our own, because we don’t actually know what it means to be smart in the first place&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/ROT13&#34;&gt;ROT13&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://turtletoy.net/turtle/789cce3829&#34;&gt;Cool designs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.experimental-history.com/p/bag-of-words-have-mercy-on-us&#34;&gt;Interesting points&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;That’s also why I see no point in using AI to, say, write an essay, just like I see no point in bringing a forklift to the gym. Sure, it can lift the weights, but I’m not trying to suspend a barbell above the floor for the hell of it. I lift it because I want to become the kind of person who can lift it. Similarly, I write because I want to become the kind of person who can think.&lt;/li&gt;
&lt;li&gt;The original sin of artificial intelligence was, of course, calling it artificial intelligence. Those two words have lured us into making man the measure of machine: “Now it’s as smart as an undergraduate&amp;hellip;now it’s as smart as a PhD!” These comparisons only give us the illusion of understanding AI’s capabilities and limitations, as well as our own, because we don’t actually know what it means to be smart in the first place&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/ROT13&#34;&gt;ROT13&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://martins1612.github.io/emergent_misalignment_betley.pdf&#34;&gt;misaligned LLMs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nytimes.com/athletic/6788095/2025/11/08/espn-bet-penn-sportsbook-ending-explained/&#34;&gt;R.I.P ESPN bet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.fifa.com/en/tournaments/mens/worldcup/canadamexicousa2026/tickets&#34;&gt;Is this the dumbest ticket buying experience of all time. The amount of rent seeking in this industry is disgusting&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Brandolini%27s_law&#34;&gt;Brandolinis Law a.k.a bullshit asymmetry principle&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/Lakers/status/1747815528000000102&#34;&gt;Lebron played against 35% of all NBA players&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.aapd.org/globalassets/media/publications/archives/courts-05-03.pdf&#34;&gt;Put your teeth in milk&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/&#34;&gt;The Fourier Transform explained via smoothies&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Top-p_sampling&#34;&gt;Top P Sampling&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;variegated: exhibiting different colors, especially as irregular patches or streaks.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>The Count of Monte Cristo</title>
      <link>/books/the_count_of_monte_cristo/</link>
      <pubDate>Sun, 07 Dec 2025 00:00:00 +0000</pubDate>
      
      <guid>/books/the_count_of_monte_cristo/</guid>
      <description>&lt;h2 id=&#34;the-book&#34;&gt;The book&lt;/h2&gt;
&lt;p&gt;This will serve to store notes/insights/thoughts about &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Count_of_Monte_Cristo&#34;&gt;The Count of Monte Cristo&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;quotes&#34;&gt;Quotes&lt;/h3&gt;
&lt;p&gt;Page 34 - A curse on those who fear wine: it&amp;rsquo;s because they have evil thoughts and they are afraid that wine will loosen their tongues.&lt;/p&gt;
&lt;p&gt;Page 54-55 - God can change the future, He can not alter even an instant of the past.&lt;/p&gt;
&lt;p&gt;Page 90 - He looked up with the satisified air of a man who thinks he has made a discovery when he has commented on someone else&amp;rsquo;s idea.&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;the-book&#34;&gt;The book&lt;/h2&gt;
&lt;p&gt;This will serve to store notes/insights/thoughts about &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Count_of_Monte_Cristo&#34;&gt;The Count of Monte Cristo&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;quotes&#34;&gt;Quotes&lt;/h3&gt;
&lt;p&gt;Page 34 - A curse on those who fear wine: it&amp;rsquo;s because they have evil thoughts and they are afraid that wine will loosen their tongues.&lt;/p&gt;
&lt;p&gt;Page 54-55 - God can change the future, He can not alter even an instant of the past.&lt;/p&gt;
&lt;p&gt;Page 90 - He looked up with the satisified air of a man who thinks he has made a discovery when he has commented on someone else&amp;rsquo;s idea.&lt;/p&gt;
&lt;p&gt;Page 107 - &amp;hellip;in polotics there are no people, only ideas; no feelings, only interests.&lt;/p&gt;
&lt;p&gt;Page 109 - You people who hold power have only what can be bought for money; we, who are waiting to gain power, have what is given out of devotion.&lt;/p&gt;
&lt;p&gt;Page 121 - what can any prisoner have to ask for, apart from his freedom?&lt;/p&gt;
&lt;p&gt;Page 132 - To a happy man, a prayer is a monotonous composition, void of meaning, until the day when suffering deciphers the sublime language through which the poor victim addresses God.&lt;/p&gt;
&lt;p&gt;Page 154 - Because you have an instinctive horror at the idea of such a crime, to the point where it has never even entered your head, the old man continued. For, in simple and permitted matters, our natural appetites warn us not to exceed the boundaries of what is permissible for us. The tiger, which spills blood in the natural course of things, because this is its state of being, its destiny, needs only for its sense of smell to inform it that a prey is within reach; immediately it leaps towards this prey, falls on it and tears it apart. That is its instinct, which it obeys. But mankind, on the contrary, is repelled by blood. It is not the laws of society that condemn murder, but the laws of nature? Dantes was struck dumb: this was indeed the explanation of what had gone on, without him knowing it, in his mind - or, rather, in his soul: some thoughts come from the head, others from the heart.&lt;/p&gt;
&lt;p&gt;Page 161 - unless an evil thought is born in a twisted mind, human nature is repelled by crime. However, civilization has given us needs, vices and artificial appetites which sometimes cause us to repress our good instincts and lead us to wrongdoing.&amp;rsquo; Hence the maxim: if you wish to find the guilty party, first discover whose interests the crime serves! Whose interests might be served by your disappearance?&#39;&lt;/p&gt;
&lt;p&gt;Page 168 - Learning does not make one learned: there are those who have knowledge and those who have understanding. The first requires memory, the second philosophy.&lt;/p&gt;
&lt;p&gt;Page 339 - In every country where independence takes the place of liberty, the first need felt by any strong mind and powerful constitution is to possess a weapon which can serve both for attack and defense; and which, by making its bearer formidable, will mean that he often inspires dread.&lt;/p&gt;
&lt;p&gt;Page 502 - more than once, proved to me that our excessive concern with the welfare of our bodies is almost the only obstacle to the success of any of our plans, when these demand rapid decisions and vigorous and determined execution. In reality, once you have made the sacrifice of your life, you are no longer the equal of other men; or, rather, they are no longer your equal, because whoever has taken such a resolution instantly feels his strength increase ten times and his outlook vastly extended.&lt;/p&gt;
&lt;p&gt;Page 552 - What I am saying, Monsieur, is that your eyes are fixed on the social organization of nations, which means that you only see the mechanism and not the sublime worker who operates it. I am saying that you only recognize in front of you and around you those office-holders whose accreditation has been signed by a minister or by the king and that your short-sightedness leads you to ignore those men whom God has set above office-holders, ministers and kings, by giving them a mission to pursue instead of a position to fill.&lt;/p&gt;
&lt;p&gt;Page 552 - You know that all human inventions progress from the complex to the simple and that perfection is always simplicity.&lt;/p&gt;
&lt;p&gt;Page 727 - With one of those fatuous smiles which had the same effect on Monte Cristo as the pallid moons that inferior painters plant in the sky above their ruins.&lt;/p&gt;
&lt;p&gt;Page 766 - &amp;lsquo;His experiments have greatly advanced science, I presume?&amp;rsquo; &amp;lsquo;No, but he writes them up in a very fine style.”&lt;/p&gt;
&lt;p&gt;Page 850 - When I close my eyes, I can again see everything that I used to see. There are two ways of seeing: with the body and with the soul. The body&amp;rsquo;s sight can sometimes forget, but the soul remembers for ever.&lt;/p&gt;
&lt;p&gt;Page 872 - Because, you must understand, my dear friend, one should never be exclusive. When one lives among madmen, one should train as a maniac.&lt;/p&gt;
&lt;p&gt;Page 952 - Moral wounds have the peculiarity that they are invisible, but do not close: always painful, always ready to bleed when touched, they remain tender and open in the heart.&lt;/p&gt;
&lt;p&gt;Page 953 - Truly generous men are always ready to feel compassion when their enemy&amp;rsquo;s misfortune exceeds the bounds of their hatred.&lt;/p&gt;
&lt;p&gt;Page 1121 - There are some situations which men instinctively comprehend but are unable to comment on intellectually. In such cases, the greatest poet is the one who emits the most powerful and the most natural cry. The crowd takes this cry for a complete story, and it is right to be satisfied with that, and still more so to find it sublime when it is truthful.&lt;/p&gt;
&lt;p&gt;Page 1242 - There is neither happiness nor misfortune in this world, there is merely the comparison between one state and another, nothing more.&lt;/p&gt;
&lt;h3 id=&#34;notes&#34;&gt;Notes&lt;/h3&gt;
&lt;p&gt;Amazing story&amp;hellip; took me over 3 months to finish, but it was highly worth it. Up there with my favorite books of all time.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 12-06-2025</title>
      <link>/learnedt1w/2025/12_06_2025/</link>
      <pubDate>Sat, 06 Dec 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/12_06_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Write stderr to dev/null: &lt;code&gt;2&amp;gt;/dev/null&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To find a file based on user+group+size: &lt;code&gt;find / -type f -user bandit7 -group bandit6 -size 33c&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Only unique lines in a text file: &lt;code&gt;sort some_file.txt | uniq -u&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;strings&lt;/code&gt; command in Linux is a utility used to extract printable character sequences.&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nber.org/papers/w34524&#34;&gt;Yikes, but not surprising&amp;hellip; insider trading applies only applies to some of us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gurkan.in/2025/12/stop-talking/&#34;&gt;A bit negative but thought provoking&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Write stderr to dev/null: &lt;code&gt;2&amp;gt;/dev/null&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To find a file based on user+group+size: &lt;code&gt;find / -type f -user bandit7 -group bandit6 -size 33c&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Only unique lines in a text file: &lt;code&gt;sort some_file.txt | uniq -u&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;strings&lt;/code&gt; command in Linux is a utility used to extract printable character sequences.&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nber.org/papers/w34524&#34;&gt;Yikes, but not surprising&amp;hellip; insider trading applies only applies to some of us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gurkan.in/2025/12/stop-talking/&#34;&gt;A bit negative but thought provoking&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If no one asked and no one is on the hook to change anything: Stop talking.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=jEju4HbOKuE&#34;&gt;Living in Casinos full time&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;To each their own, but this seems like a full time job which you&amp;rsquo;d still need to support yourself. I guess you just have to really enjoy vegas and sleeping in hotels&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Lockheed_CL-1201&#34;&gt;1120 foot wingspan  ft wingspan&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.begaydocrime.com&#34;&gt;Unlocking wheels&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;The name &amp;ldquo;marimo&amp;rdquo; is a reference to a type of algae that, under the right conditions, clumps together to form a small sphere called a &amp;ldquo;marimo moss ball&amp;rdquo;. Made of just strands of algae, these beloved assemblages are greater than the sum of their parts.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 11-29-2025</title>
      <link>/learnedt1w/2025/11_29_2025/</link>
      <pubDate>Sat, 29 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/11_29_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=iic3xg_7M4s&#34;&gt;Transfer back to VHS&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Jason_Williams_%28basketball,_born_1975%29&#34;&gt;Jason Williams was teammates with Randy Moss&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I think I deleted all my saved links this week so only these this week.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=iic3xg_7M4s&#34;&gt;Transfer back to VHS&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Jason_Williams_%28basketball,_born_1975%29&#34;&gt;Jason Williams was teammates with Randy Moss&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I think I deleted all my saved links this week so only these this week.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Korea</title>
      <link>/travel/korea/</link>
      <pubDate>Mon, 24 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>/travel/korea/</guid>
      <description>&lt;h2 id=&#34;about&#34;&gt;About&lt;/h2&gt;
&lt;p&gt;Trip is South Korea (Seoul and Jeju) from 2025-11-07 -&amp;gt; 2025-11-21.&lt;/p&gt;
&lt;p&gt;Below is my daily notes from the trip, lightly edited post trip. (Edits are bolded).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m picking one photo from each day to include.&lt;/p&gt;
&lt;h2 id=&#34;summary-thoughts&#34;&gt;Summary Thoughts&lt;/h2&gt;
&lt;h2 id=&#34;korea-travel-log&#34;&gt;Korea Travel Log&lt;/h2&gt;
&lt;p&gt;Korea journal&lt;/p&gt;
&lt;p&gt;2025-11-07:&lt;/p&gt;
&lt;p&gt;Currently waiting to take off for SF. Today was very chill compared to yesterday where I got a flat tire on my way to present at our summit. (&lt;strong&gt;This was a work summit where I was presenting on Q CLI&lt;/strong&gt;).&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;about&#34;&gt;About&lt;/h2&gt;
&lt;p&gt;Trip is South Korea (Seoul and Jeju) from 2025-11-07 -&amp;gt; 2025-11-21.&lt;/p&gt;
&lt;p&gt;Below is my daily notes from the trip, lightly edited post trip. (Edits are bolded).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m picking one photo from each day to include.&lt;/p&gt;
&lt;h2 id=&#34;summary-thoughts&#34;&gt;Summary Thoughts&lt;/h2&gt;
&lt;h2 id=&#34;korea-travel-log&#34;&gt;Korea Travel Log&lt;/h2&gt;
&lt;p&gt;Korea journal&lt;/p&gt;
&lt;p&gt;2025-11-07:&lt;/p&gt;
&lt;p&gt;Currently waiting to take off for SF. Today was very chill compared to yesterday where I got a flat tire on my way to present at our summit. (&lt;strong&gt;This was a work summit where I was presenting on Q CLI&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Feeling pretty good, back is still a little tight, I kind of tweaked it riding some gravel with Kaiser a week or so ago.&lt;/p&gt;
&lt;p&gt;Anyway, feeling pretty relaxed overall, ready to sleep on some flights. Landed in SF, walked around and talked to my girlfriend. Got some ramen and sat next to the cofounder of some &lt;a href=&#34;https://www.ycombinator.com/companies/sixtyfour&#34;&gt;startup&lt;/a&gt; talk about how his life is designed around revenue, dreams about his customers, doesn’t know what holidays are all he does is work, and how he’s slept with his gay banker but he’s not gay… going to keep tabs on this one and see how it does lmao!! Welcome to San Francisco. Preferred meeting Charles Barkley last time when I was flying to Japan hahaha.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_07.jpeg&#34; alt=&#34;Art at SFO&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025-11-08: 3&lt;/p&gt;
&lt;p&gt;I guess it’s the 8th now although it’ll be a short day for me. I’m like 9-10 hours into the flight to Korea. Slept ok for first 8 hours. Almost 18 hours since being driven to the airport, I can’t decide if it’s felt like a long 18 or not. Anyway, going to wrap up the last few hours of this flight and then on to the 9th.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_08.jpeg&#34; alt=&#34;Back Purple Guy in ICN&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025-11-09:&lt;/p&gt;
&lt;p&gt;Landed, struggled to figure out T money but eventually got it and got in the right train hahaha (&lt;strong&gt;This involved me realizing I needed to get cash to load the things and going back and forth between thinking I needed cash or not&amp;hellip; then figuring out how to get cash&lt;/strong&gt;). Got picked up from very nice Airbnb lady who brought me up to the room. I made coffee, cooked breakfast (homemade jam) and talked to pal on the beautiful porch. Sent the airbnb lady a picture of my breakfast and she gave me more eggs and tomato’s&amp;hellip; so nice.&lt;/p&gt;
&lt;p&gt;Took the bike they have out for a nice ride on their river path. It was awesome, so many riders out, great weather, and nice pavement. (&lt;strong&gt;This didn&amp;rsquo;t feel grerat on my back but was a beautiful windy day for a ride&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;Got back and then walked over to the noodle place that our host recommended. (&lt;strong&gt;This place was extremely surprised to see me and was located in what seemed like a neighborhood surrounded by small statues&lt;/strong&gt;). The walk was nice it was almost in a neighborhood and then I came to a place with a ton of statues, walking to the end of them lead me to the noodle place. I took my shoes off and sat by myself and had a massive bowl of buckwheat noodles. Had a nice walk back checking out the town a bit before heading home.&lt;/p&gt;
&lt;p&gt;The bathroom was so cramped I had to sit in the tub to shower hahahaha. Zach arrived around 8, I let him up and went to bed.&lt;/p&gt;
&lt;p&gt;Noodles: 인천광역시 계양구 학고개길 15-29
Sufia : 인천광역시 계양구 정서진로 1247&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_09.jpeg&#34; alt=&#34;Breakfast at Airbnb&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025-11-10:&lt;/p&gt;
&lt;p&gt;Woke up at 3:45 so almost got 8 hours. Made coffee/toast with Zach, cleaned up and headed out (watched a little football too). (&lt;strong&gt;This required some finagling with a VPN/location settings&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Took an uber to GMP where we got dropped off at the international terminal so had to walk over to the domestic one. I needed a new boarding pass so it would match my passport so we had to wait and got Jamba Juice. Then at security at turned out Zach needed the same thing but they didn’t do it for him so he had to go all the way back and redo it.&lt;/p&gt;
&lt;p&gt;Anyway hope we make this flight to Jeju hahaha.&lt;/p&gt;
&lt;p&gt;Flight got delayed and had plenty of time. Met some nice people from Sevilla if I’m there I need to visit Bar baratillo.&lt;/p&gt;
&lt;p&gt;We landed in Jeju and Zach forgot his water bottle on the plane. We got that, picked up Ray and then drove to some random noodle place to get lunch. It was good and then I had Zach drive to the Airbnb without routing it and he did pretty well. We also saw an f-150 on the drive over, America!&lt;/p&gt;
&lt;p&gt;Stopped at an emart for groceries and went to the new Airbnb. This place is ok, good views though. Went for a walk and the surrounding area is beautiful. The JW Marriott we are next to is crazy as well. There’s some good restaurants around us.&lt;/p&gt;
&lt;p&gt;Anyway feeling a bit tired, going to try and stay up until 8pm and call it a night.&lt;/p&gt;
&lt;p&gt;Also lemon sour hi-chew are good and strawberry snickers are bad.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_10.jpeg&#34; alt=&#34;Walking next to airbnb&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025-11-11:&lt;/p&gt;
&lt;p&gt;Slept for like 11 hours and got up at 7. Cooked up coffee and oatmeal which took forever in this tiny little kitchen. Of course we don’t have salt, pepper or laundry detergent.&lt;/p&gt;
&lt;p&gt;Went out for a quick walk along the coast which was beautiful. Then face timed Ally and watched the packers vs eagles a bit (won fantasy football this week).&lt;/p&gt;
&lt;p&gt;We decided to go check out a waterfall which wasn’t really happening because it only happens when it rains, but saw some big spiders and oranges. On the way there we stopped at this cute coffee place (I got orange juice and a slice of cake) that had an amazing logo. I think I’ll use it to make ally a shirt.&lt;/p&gt;
&lt;p&gt;Then we drove to a forest loop hike where the entire path was paved with this braided rope that was very soft to walk on (about 5k) (&lt;strong&gt;This hike smelled pretty bad as we&amp;rsquo;re pretty sure we were surrounded by manure from the thousands of farms on the island&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;When then headed towards a running track on the north western part of the island so Zach could run. It was by Donatos a place we wanted try for pizza. While Zach was running I walked over to hanmart and bought detergent. Then we decided we’d go to some little Thai food place for dinner.&lt;/p&gt;
&lt;p&gt;We walk into this Thai food place (Lam Taetae) and there was nobody there. In fact we’d be the only people to enter the entire time we were there. It was just a guy and, I assume, his wife and we had amazing fried rice, pad Thai and he had us try soy bean soup. He was very nice and we chatted a bit with him, apparently he had been a chef at a thai restaurant for a decade. Amazing meal, just another example of randomly walking into a great experience while traveling.&lt;/p&gt;
&lt;p&gt;We drove back home (1 hour ) in the dark, hitting speed bumps and making a wrong turn or two. What an interesting place/culture.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_11.jpeg&#34; alt=&#34;Drink from cute Cafe&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025-11-12:&lt;/p&gt;
&lt;p&gt;Woke up and was a little quicker at making coffee/oatmeal today. Heading to hike Hallasan (the mountain in the middle of the island). Didn’t realize we had to make a reservation so did that really quick and headed over there before our 10am cutoff time.&lt;/p&gt;
&lt;p&gt;Parking lot was full and we missed the cutoff time. So then we decided to do a different hike that climbed another side of the mountain, while that one didn’t meed a reservation it still had a cutoff time to start for some reason and the guy wouldn’t let us go through hahahah. So we ended up looping around this cool cemetery and we’ll try hallasan again tomorrow. (&lt;strong&gt;We did not realize that we needed to be a bit more prepared to do this hike, they seem very regimented about it&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;Our new plan was to drive back to Cheonjiyeonpokpo Falls and have our sandwiches. We parked kind of close which led us to walk around for a few hours before finally getting to the park and checking out the falls. (&lt;strong&gt;We did not park close, we parked on the absolute wrong side and walked all the way around the park to get to the falls haha&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;We took photos, ate sandwiches and started back towards the car. We got some snacks from CU (I like seaweed lays chips) and watched old people play put-put golf. We both kind of wanted coffee so we ended walking back down these stairs we had just gone up and into the town.&lt;/p&gt;
&lt;p&gt;The coffee place we wanted to go was closed so we walked past another that looked cool. Had coffee and I bought some beans for my mom. We then went up this small street that seemed to be dedicated for an artist and get gifts for people from a small book store and another shop.&lt;/p&gt;
&lt;p&gt;We walked back to the car and drove home. Out on the roof, I was helping Zach improve on chess while we ate yogurt and hatched a new plan for the Hallasan. After the sunset, we needed to get dinner. I found this random place called inupaen that was incredible. Some of the best steak I’ve had in a very cute place that was well decorated.&lt;/p&gt;
&lt;p&gt;After getting back we decided we wanted to sleep in tomorrow. We’ll drive up the eastern side of the island tomorrow and do Hallasan on Friday before our omakse experience.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_12.jpeg&#34; alt=&#34;Waterfall!&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025-11-13:&lt;/p&gt;
&lt;p&gt;Woke up and I burned some avocado toast. We charted a few places to stop on the way to the eastern most part of the island where they have this cool glass house cafe.&lt;/p&gt;
&lt;p&gt;We headed out around ten and went to seosokkak. It was this little inlet where freshwater meets the sea. We rented a small boat and paddled up it. We walked the beach a bit and then headed towards our next stop. (&lt;strong&gt;I found a small heart shaped rock for my mom on the beach&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;After driving past a place that said Texas bbq the next place was closed, opening in late November. So we decided to go to a burger place instead. It’s called fantastic burger. With a view of the sea we had large quantities of curry and onion sauces poured on top of burgers with milkshake and fries. Suffice to say we had to go for a walk after. (&lt;strong&gt;Zach did NOT enjoy this meal&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;Leaving the car at the burger place we walked down to some tide pools to help digest the slop. We then headed towards an herb farm.&lt;/p&gt;
&lt;p&gt;The farm was pretty cool, extremely well manicured. There were tons of cool looking plants and we got some grapefruit tea which was pretty nice to walk around with. We couldn’t figure out how to play the put put golf so after a bit ended up leaving (think it was more for couples at night).&lt;/p&gt;
&lt;p&gt;We continued on to the glass house. We parked our car by the ocean on this peninsula and walked to this massive glass building. Inside I bought shoes and Zach bought more gifts. We then went to the bakery and got some baked goods/coffee. We sat up on the second level overlooking the sea and played chess. (&lt;strong&gt;This place and the surroundings were highly aesthetic, would recommend&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;After this we walked around outside to a small lighthouse before turning around and heading back to the car. We drove to a supermarket to get supplies for tomorrow. After wards, we went to a nice Korea bbq place for black pork. It was excellent we had pork, egg dish, rice, and tons of sides.&lt;/p&gt;
&lt;p&gt;Driving home I booked our tickets for the hike tomorrow (I think they were literally the last two available). Got back and made some sandwiches and am going to bed now. Going to be a great day tomorrow but we are getting an early start.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_13.jpeg&#34; alt=&#34;The glass house&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025-11-14&lt;/p&gt;
&lt;p&gt;Woke up at 4:30 had coffee and oatmeal and then we were out the door around 5:30 headed to the parking lot. The drive up was cool in the dark the rods are tight and it was a little hard for Zach to see.&lt;/p&gt;
&lt;p&gt;When we got to the parking lot it was already full at 6:30. Luckily we had a backup plan to park at the university and grab a bus back to the parking lot (comprehensive shooting range west was the bus stop name). We parked and got a taxi instead which worked out fine.&lt;/p&gt;
&lt;p&gt;Back at the parking lot we showed them our QR codes and were hiking by 7:00am. The hike started off pretty chill then we hit a middle section which was steeper/rockier and the last bit was extremely steep pretty much just stairs. The weather was great, there was no water but there were rest stops/bathrooms. People kept giving us oranges and on the way down we must have said hello in Korean 1000x.&lt;/p&gt;
&lt;p&gt;The top of the mountain was pretty cool, great views. We had some snack and then hiked down, we didn’t wait too long as we didn’t have much water. The way down was rough, the rocks we had hiked up now required constant attention/balance while dodging people going the other direction. At least passing was easier as we had nobody to pass.&lt;/p&gt;
&lt;p&gt;It took us about 6 hours total to do Hallasan about 5 hours of hiking. We took a bus back to the car (the driver just waved us on as we had no idea how to pay). Driving home we made it back by like 3PM after getting some gas that we thought we didn’t pay for but turns out we did. Zach and I had a bet about how many “dings” we’d get which occur when Ray hit a bump too hard.&lt;/p&gt;
&lt;p&gt;We showered quickly and then hung out a 60 beans, Z got another flat white and I got a hot chocolate. Even though the Airbnb wasn’t great it was in a good location and we just sat and watch the ocean.&lt;/p&gt;
&lt;p&gt;Afterwards we walked back up the hill a bit to our dinner at Hachi. This was an amazing omakse experience. I got to butcher a bit Japanese, eat some amazing pieces of fish, and ended the night with a little green dessert ball that was amazing.&lt;/p&gt;
&lt;p&gt;This was one of the best meals I had, and for only $100 per person it was a bargain. If I end up in Jeju again I’ll have to go back. This was an amazing day to end an insane stay. I was telling Zach that I didn’t think I would be able to be as cool as Japan and this week has been! It’s been great in pretty much every way.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_14.jpeg&#34; alt=&#34;Top of the mountain&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025-11-15:&lt;/p&gt;
&lt;p&gt;Alright our big travel day begins. Calves are a little sore but we’ve got nearly every possible form of transportation to take.&lt;/p&gt;
&lt;p&gt;We cleaned up the Airbnb and hit the road at like 7:50. Apple Maps fucked up and we ended up taking a scenic route on the other side of Hallasan we had been the day before. We dealt with some slow/dumb drivers. Before retuning the rental car (not full). We took a shuttle to the airport where we checked our bags and then headed through foreigners security.&lt;/p&gt;
&lt;p&gt;Through security I got some snacks at 711 before our flight was delayed 15 mins and our gate was changed. We got on a bus which took us out to the tarmac where we boarded our flight. On the plane now hopefully no issues as we need to take the subway over to Busan Station to catch our high speed train to Seoul.&lt;/p&gt;
&lt;p&gt;Took the subway to Busan Station. No problems and we got lunch at the station (Ramen + Kimbap). high speed train rolled up on time and we headed to Seoul. There wasn’t much to see and our ears kept popping. I ended up watching Seinfeld and playing chess poorly. We both agreed we were glad to say we’ve taken the KTX but it was NOT worth the hastle.&lt;/p&gt;
&lt;p&gt;After we got to Seoul station around 6pm and we were both tired. Butttt we had more subways to take. Lugging our bags we took several crowded Friday night subways to Walkerhill. At our final station, we had another 1km walk ahead of us UP THE HILL to the hotel. We did all the travel but wow it was not worth it haahahaha.&lt;/p&gt;
&lt;p&gt;We checked in. We were going to get an extra bed but decided against it because the room was small and our single bed was big. The shower is great and the hotel it really nice but everything is overpriced. I was so tired I just skipped dinner and went to bed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_15.jpeg&#34; alt=&#34;Busan Station&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025-11-16:&lt;/p&gt;
&lt;p&gt;Got up early. There was some coffee I could make in the room but I thought it was instant coffee so I poured it straight into the cup but you were supposed to poor water through it via a filter lol. So I went downstairs to the buffet and got a fucking $8 Americano. I chugged that and then got my stuff together for my hike.&lt;/p&gt;
&lt;p&gt;Ready to go I set off for Baegundae peak in Bukhansan National park. My right calve is pretty sore but overall I feel ok and today is the best weather for it. I took the subways without issue. Grabbed a snickers bar at the base and started up.&lt;/p&gt;
&lt;p&gt;The first bit was basically on a road before the actual hike. Some taxi crashed his car on the road oof. I made it up to the start but was a bit low on water. I went downstairs to this small shop that this lady was trying to open. I helped her get the lock open and then got some water from her shop. I threw a liquid IV in one of bottles and started off.&lt;/p&gt;
&lt;p&gt;This thing was steep my legs were still tired from Hallasan. While this was shorter it was tough. Reaching the top, I threw my gloves on for the final scramble to the peak. It was kind of like half dome but with less ropes and more metal railing. It was very crowded and I don’t hang out long at the top. Took a few photos and heard back.&lt;/p&gt;
&lt;p&gt;Rather than heading down the same way I decided to descend the other side and cross the park. This side may have been steeper than the other and there was no stairs whatsoever just straight rocks. I got down to this road and then it was easy from there. The road was beautiful with fall colors and I was having a great time listening to 80s music. I wasn’t super hungry but decided I needed lunch. I needed up at a small Korean restaurant where I ate a bunch of rice tofu and fermented vegetables. This white fig and some Koreans sat at the table next to me and I think they worked for black diamond. I was going to show them my carabeaner but decided not too.&lt;/p&gt;
&lt;p&gt;I walked to a bus and then took subways back to walkerhill. Shower felt great and than Z got back from exploring the city.
We waited a bit for his lab mate Skylar to show up. We had to go down and get Skylar his room because his card was getting declined.&lt;/p&gt;
&lt;p&gt;All three of us went and got dinner, I randomly found some place called Bao Seoul that was amazing. We had Bao, Fried chicken, and noodle… insanely good. After walking out it started raining so we waited underneath a convenience store and I debated purchasing these little nipple patches that looked hilarious.&lt;/p&gt;
&lt;p&gt;The rain stopped and we walked over to this place called nowhere which was an art installation that also seemed to be selling glasses and perfume (&lt;strong&gt;Gentle monster was the name I believe&lt;/strong&gt;). I talked to this lady about what her favorite weird glasses were and then we Ubered back to the hotel. we made sure to clear out the complimentary minibar before hitting the sack.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_16.jpeg&#34; alt=&#34;Bukhansan&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025-11-17:&lt;/p&gt;
&lt;p&gt;Going around and exploring the city today. Got up around 7 and Z went to the buffet. I had coffee in the room, watched football and called my parents. my dad has his surgery scheduled for 12/11 so that was good to hear.&lt;/p&gt;
&lt;p&gt;I headed downstairs to go explore the city and was hit with a blast of cold air… went back up and threw my thermals on. Another breakfast at Starbucks for 1/8 the price of the hotel and then I was off to Gyeongbokgung Palace. It was pretty cool but my legs are shot from the last few days of hiking/travel and the amount of tourists here is nauseating. It’s hard to do anything without getting in the way of somebodies photo. I walked around for a bit before taking shelter in the modern art museum across the street. This place is pretty weird but it’s nice to sit inside and eat a little pastry and type this out.&lt;/p&gt;
&lt;p&gt;I think I’m going to go to the national museum of Korea next and look for lunch.&lt;/p&gt;
&lt;p&gt;Started toward the museum and immediately found a cute lunch spot by the palace. More Korean food but it was really good and had a little purple flower on top.
Finished up and took the subway to the museum.&lt;/p&gt;
&lt;p&gt;Zach sad he would come but ended up getting hung up so I walked through the museum by myself. It was pretty cool but my legs were hurting from all the walking and a left around 4. It was freezing outside and the sushi place I wanted to try didn’t open until 5pm so I ate so MnMs in a 7-11.&lt;/p&gt;
&lt;p&gt;I pulled up to Sushi Tei right at 5 and was the first one sat for dinner. I got the sushi set which was a bunch of sashimi (tuna, white fish, squid,etc) as well as some udon. It was excellent. Took the subway back to the hotel and read a book about hotels in the library. After that I helped Zach practice his presentation and called it a night.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_17.jpeg&#34; alt=&#34;Gyeongbokgung&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025-11-18:&lt;/p&gt;
&lt;p&gt;Got up around 8:30 and went to Starbucks again to get a little breakfast. It’s just convenient and cheap. I’m taking the subway to go make Kimchi with a nice lady named Grace.&lt;/p&gt;
&lt;p&gt;At my final station there was a little flower shop so I could buy grace flowers I don’t know how these things work out so perfectly this happened the last time I did one of these Airbnb experiences as well.&lt;/p&gt;
&lt;p&gt;Two other people showed up and we made/learned about kimchi, made kimchi pancakes, and ate pork with kimchi and drank tea. It was amazing and grace was so nice. She even made us homemade dumplings and we got a nice jar of kimchi we made to take home. Amazing experience, and I’ll have to go back and do her dumpling class!&lt;/p&gt;
&lt;p&gt;I’m now sitting at bean brothers with a cup of coffee it’s quite cold. Not sure where the rest of the day will take me but I need to get this kimchi back to the hotel hahaha. Crazy I’m taking this home.&lt;/p&gt;
&lt;p&gt;Went back to the hotel with the intention of leaving but ended up staying at the poster session for a few hours. It was fun to talk with various people about their work and I could understand enough that it made for good conversation. I worked up an appetite so I headed to a restaurant that grace recommended called namdosikgark. I’m sitting here now waiting for my food to come out, I’m the only one here.&lt;/p&gt;
&lt;p&gt;Food was excellent. I got a large vegetable pancake and spicy beef stew. I learned how to say radish in Korean today so I asked the lady if the kimchi was radish in Korean even though I already knew it was radish.&lt;/p&gt;
&lt;p&gt;I was kind of in some sort of shopping district so I walked around after eating and got a few things for ally. This one artist had drawn John wick on a scroll so I bought that for Louis. There is an endless supply of cute tiny things here&lt;/p&gt;
&lt;p&gt;Took the subway back uneventfully and then hiked back up to the hotel. Showered and then hung out in Zach’s lab mates room (Skyler) who has a great view of the river/bridges. Went to bed around midnight.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_18.jpeg&#34; alt=&#34;Kimchi Lesson&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025-11-19:&lt;/p&gt;
&lt;p&gt;Woke up to all the lights coming on in the room randomly around 9:15. Called ally and talked with her for a bit. Got out of the hotel around 11 and headed toward inwangsan which is a mountain in the middle of the city.
Took subway over and stopped at Starbucks for a hot chocolate.&lt;/p&gt;
&lt;p&gt;The inwangsan hike was pretty cool. My legs are tired it was steep as hell but the view of the city at the top was unbeatable.
The Seoul wall is also pretty cool. Hiked back down while eating some wasabi covered almonds which are excellent. Decided to take the subway over to the buk-seoul art museum. I’m sitting on the roof now and it appears to be a bit of a mistake to have come here, there’s only like one exhibit. I think my plan now is to head back to the hotel and meet up with Zach and Skyler for dinner. I do need to go to bed at a reasonable hour as the DMZ tour is early tomorrow and I don’t want to be wrecked for it.&lt;/p&gt;
&lt;p&gt;Went back to the hotel and met up with Z and Skyler we took the subway to some chicken place where they put bunch of stuff in a big pan right in front of us and we ate it.
The guy that worked there was nice and showed us a little donut shop so we got donuts after. While leaving the donut shop i used my new ability to say “see you later” which was a hit.&lt;/p&gt;
&lt;p&gt;We went back to the hotel and a realized that I didn’t want to get up at 5am for the tour. So I booked a 10am tour and wrote the 7am one off as a loss.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_19.jpeg&#34; alt=&#34;Top of Inwangsan&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025-11-20:&lt;/p&gt;
&lt;p&gt;Woke up at 7:30 and had coffee/yogurt in the room. For some reason I checked Viator and noticed a message saying meet at 9:30 instead of 10 so I hustled over to the station and made it there on time.&lt;/p&gt;
&lt;p&gt;We hopped on the bus and our tour guide Lina talked us through some basic instructions as we took the highway towards the DMZ.&lt;/p&gt;
&lt;p&gt;We got to our first stop after about an hour which was just a little tourist park with a train going over a river. I think it was sentimental about a particular battle there and there were memorials. I walked around, got some snacks and bought some North Korean currency which is kind of cool to have, I think I’m going to give it to Jeff.&lt;/p&gt;
&lt;p&gt;We boarded the bus and headed to the tunnel. This was the point where we actually crossed into the DMZ. There was a little checkpoint and some 20 year olds on military gear hopped on the bus to check our passports. Anyways, Apparently North Korea has been digging a ton of these tunnels under the DMZ toward South Korea. Every once in a while SK finds one, and this one they turned into a tourist attraction. We watched a 8 minute SK propaganda video which was pretty funny and then got to go into the tunnel.&lt;/p&gt;
&lt;p&gt;We were given a hard hat before walking down a 300m long very steep tunnel. This one was well built. At the bottom we hit the North Korean made tunnel. It was quite small, hence the hard hats, and you kind of walked bent over to the end of it where the blocked it off. Then you turn around and huff it all the way back up. Lina gave me a sticker for being the first to make it back up. It was pretty cool to be there.&lt;/p&gt;
&lt;p&gt;Next we want up to the Dora observatory where you could look at but not take pictures of North Korea. There was a tit-for-tat flag battle between the two nations that was finally needed when North Korea built a 160m tall flag and SK decided to stop playing the silly game. That flag is pretty cool to see it’s very large and high up, even from 5k away and a bit foggy it was very visible. Otherwise there were just abandoned factories and mountains you could kind of make out in the distance.&lt;/p&gt;
&lt;p&gt;I went to this little cafe and had a chocolate muffin while looking out at North Korea. It was a cool experience, they also sold shitty hotdogs and a had to listen some lady bitch out her sister next to me while I enjoyed the view.&lt;/p&gt;
&lt;p&gt;We went back to the bus for our last stop. This stop was through a village of farmers that were still allowed to live in the DMZ before stopping at a glorified convenience store/bathroom to allow us to buy things before heading back to Seoul. I bought a water and met some nice guys from London who K chatted with for a bit outside.&lt;/p&gt;
&lt;p&gt;Back on the bus we headed back through a military checkpoint to make sure that everyone that was in the bus on the way in was on the bus on the way out. I chatted with a nice guy named David from Charleston as we drove on the highway back into the city.&lt;/p&gt;
&lt;p&gt;I asked Lina for some food recommendations, she pointed out a few places and then one of the lady’s on the tour mentioned she was going to this dumpling place that was on the Michelin guide (for value restaurants). We got off at myeongdong station and decided to get dumplings with her.&lt;/p&gt;
&lt;p&gt;The tour made it difficult to remain sincere about the whole thing and the tragedy that is the war and the current state of North Korea with how curated/touristy each of the sites was.&lt;/p&gt;
&lt;p&gt;We walked up to the third floor of this restaurant and they sat us and brought out noodles and dumplings almost immediately. They were pretty good, the kimchi was very spicy. She was nice, she was traveling for several months after being laid off due to trump cutting all the funds of USaid. We talked about politics a bit and she’s also going to stay in some Buddhist place for meditation which sounded cool.&lt;/p&gt;
&lt;p&gt;We parted ways after our dumpling snack and I headed back to the station to go have dinner with Zach. Dropped stuff at the hotel and we headed towards this place by the lotte world tower. That place closed at 9 so we were cutting it pretty close. We ended up walking around and randomly found a small restaurant called dokidoki. We got fried chicken, a tepenyacki noodle dish which were both amazing. Then we got one more dish which was some sort of fish roe pasta that was great. An amazing dinner to cap off the trip.&lt;/p&gt;
&lt;p&gt;We headed back to the hotel and Zach packed a bit and I got a coffee from the CU on the basement for tomorrow and headed to bed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_20.jpeg&#34; alt=&#34;DMZ&#34;&gt;&lt;/p&gt;
&lt;p&gt;2025-11-21:&lt;/p&gt;
&lt;p&gt;Woke up around 7:30. Packed up my stuff and dropped the bags off at the concierge. We checked around for anyway to load our T Money Cards but realized we’d need to leave the hotel. We walked over to a bank and pulled out 10k krw for a fee of 4200krw hahaha.&lt;/p&gt;
&lt;p&gt;I got a banana from Starbucks and we waked over to a little park. Zach walked barefoot on some barefoot walking trails and I chatted with a lady about Achason mountain which I didn’t get to hike but was right next to Walkerhill.&lt;/p&gt;
&lt;p&gt;We headed back to the hotel, grabbed our bags and took the bus to the station. Two hours of subway later. We made it to the airport. We got Chinese food and then I said goodbye to Z and we parted ways as his flight was in Terminal 2.&lt;/p&gt;
&lt;p&gt;Flight was delayed a bit, so I walked 5-6 miles around the airport which was mostly just souvenirs shops and extremely high end fashion. I wonder if there’s an arbitrage opportunity for buying things here and selling them back in the US. I didn’t go in to check any of the prices but would’ve been interesting to know if they were priced differently. I also wonder how often they update the price with given exchange rate changes.&lt;/p&gt;
&lt;p&gt;On the flight we had a massive tail wind which saved us probably over an hour of flying time. I chatted with some of the flight attendants I had met in the airport after I found an AirPod and gave it to them. One guy was 51 and had fun out clubbing in Seoul the night before, he told me to visit Singapore and Greece.&lt;/p&gt;
&lt;p&gt;Once we landed we got stuck on the runway and lost all the time we had gained in there. I hustled through customs, re checked my bag and easily made the next flight, so the rush wasn’t as warranted as I thought.&lt;/p&gt;
&lt;p&gt;On the flight from SFO to PHX I sat next to a guy who works for openAI we played chess and had a good conversation. He’s had dinner with Tyler Cowen before (no wonder he’s so bullish on “AI”).&lt;/p&gt;
&lt;p&gt;Mom picked me up and then I showered and had dinner at home. I picked up Zach from the airport and brought him home. I wasn’t really tired, so I decided to drive down to Tucson to see ally and pick up my bike. I made it down to Tucson in about 90 minutes  getting there before midnight. And that closed out an extremely long day (21 hours of travel to Phoenix + another 2 to Tucson).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KOREA_11_21.jpeg&#34; alt=&#34;Last park before leaving&#34;&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 11-22-2025</title>
      <link>/learnedt1w/2025/11_22_2025/</link>
      <pubDate>Sat, 22 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/11_22_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://rein.pk/over-regulation-is-doubling-the-cost&#34;&gt;Overregulation, where’s the happyMiddle ground?&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/TeleZapper&#34;&gt;Telezapper&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://rein.pk/over-regulation-is-doubling-the-cost&#34;&gt;Overregulation, where’s the happyMiddle ground?&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/TeleZapper&#34;&gt;Telezapper&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 11-15-2025</title>
      <link>/learnedt1w/2025/11_15_2025/</link>
      <pubDate>Sat, 15 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/11_15_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.amoses.dev/blog/wifi-location/&#34;&gt;Wifi location&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Wi-Fi_Alliance#Wi-Fi_Aware&#34;&gt;Wifi aware&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cartographerstale.com/p/an-official-atlas-of-north-korea&#34;&gt;Korean maps&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ryanpuzycki.com/p/the-banished-bottom-of-the-housing&#34;&gt;YMCA and low income housing&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.amoses.dev/blog/wifi-location/&#34;&gt;Wifi location&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Wi-Fi_Alliance#Wi-Fi_Aware&#34;&gt;Wifi aware&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cartographerstale.com/p/an-official-atlas-of-north-korea&#34;&gt;Korean maps&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ryanpuzycki.com/p/the-banished-bottom-of-the-housing&#34;&gt;YMCA and low income housing&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 11-08-2025</title>
      <link>/learnedt1w/2025/11_08_2025/</link>
      <pubDate>Sat, 08 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/11_08_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.lyc8503.net/en/post/asn-5-worldwide-servers/&#34;&gt;Running your own ISP&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://sherwood.news/tech/meta-projected-10-of-2024-revenue-came-from-scams-and-banned-goods-reuters/&#34;&gt;10% of meta revenue is from scams&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://techcrunch.com/2025/11/12/waymo-robotaxis-are-now-giving-rides-on-freeways-in-these-3-cities/&#34;&gt;Lets go, no more driving&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.theparisreview.org/blog/2025/10/29/truck-desk/&#34;&gt;Truck desk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.guinnessworldrecords.com/world-records/663798-largest-glass-window&#34;&gt;Biggest piece of glass&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/April_Revolution&#34;&gt;4/19 revolution&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/The_Log_from_the_Sea_of_Cortez&#34;&gt;Steinbeck I&amp;rsquo;d like to read&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://postranchinn.com/butterfly/&#34;&gt;Cool place to stay&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.lyc8503.net/en/post/asn-5-worldwide-servers/&#34;&gt;Running your own ISP&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://sherwood.news/tech/meta-projected-10-of-2024-revenue-came-from-scams-and-banned-goods-reuters/&#34;&gt;10% of meta revenue is from scams&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://techcrunch.com/2025/11/12/waymo-robotaxis-are-now-giving-rides-on-freeways-in-these-3-cities/&#34;&gt;Lets go, no more driving&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.theparisreview.org/blog/2025/10/29/truck-desk/&#34;&gt;Truck desk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.guinnessworldrecords.com/world-records/663798-largest-glass-window&#34;&gt;Biggest piece of glass&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/April_Revolution&#34;&gt;4/19 revolution&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/The_Log_from_the_Sea_of_Cortez&#34;&gt;Steinbeck I&amp;rsquo;d like to read&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://postranchinn.com/butterfly/&#34;&gt;Cool place to stay&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 11-01-2025</title>
      <link>/learnedt1w/2025/11_01_2025/</link>
      <pubDate>Sat, 01 Nov 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/11_01_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://pokerbattle.ai/event&#34;&gt;How do I get in this tournament&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/deedydas/status/1980816637063565623&#34;&gt;oof&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://tradingeconomics.com/south-korea/stock-market&#34;&gt;South Korean stock market going crazy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.bloomberg.com/news/features/2025-10-02/jane-street-billionaire-rob-granieri-smashes-wall-street-trading-records&#34;&gt;rob granieri&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/cZk2jV5gJbM?si=_4s5FpSXCY9Fb_xz&#34;&gt;True spirit of gravel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.thebignewsletter.com/p/addiction-markets-abolish-corporate&#34;&gt;The gambling state&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/9Ii1ROzeSwU?si=ZRoeX-yuzGJM-cXO&#34;&gt;Watching a video about the harms of gambling that we preempted by a Kalshi ad telling me to bet on things&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://pokerbattle.ai/event&#34;&gt;How do I get in this tournament&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/deedydas/status/1980816637063565623&#34;&gt;oof&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://tradingeconomics.com/south-korea/stock-market&#34;&gt;South Korean stock market going crazy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.bloomberg.com/news/features/2025-10-02/jane-street-billionaire-rob-granieri-smashes-wall-street-trading-records&#34;&gt;rob granieri&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/cZk2jV5gJbM?si=_4s5FpSXCY9Fb_xz&#34;&gt;True spirit of gravel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.thebignewsletter.com/p/addiction-markets-abolish-corporate&#34;&gt;The gambling state&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/9Ii1ROzeSwU?si=ZRoeX-yuzGJM-cXO&#34;&gt;Watching a video about the harms of gambling that we preempted by a Kalshi ad telling me to bet on things&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 10-25-2025</title>
      <link>/learnedt1w/2025/10_25_2025/</link>
      <pubDate>Sat, 25 Oct 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/10_25_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://overthewire.org/wargames/bandit&#34;&gt;Worked through these, pretty fun!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://itsfoss.com/ssh-to-port/&#34;&gt;SSH hardening&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://maurycyz.com/projects/fading/&#34;&gt;TV signals&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://marginalrevolution.com/marginalrevolution/2025/10/prediction-markets-are-very-accurate.html&#34;&gt;Kind of accurate?&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.stat.berkeley.edu/~aldous/157/Papers/PointShaving.pdf&#34;&gt;Everything is gambling&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://overthewire.org/wargames/bandit&#34;&gt;Worked through these, pretty fun!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://itsfoss.com/ssh-to-port/&#34;&gt;SSH hardening&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://maurycyz.com/projects/fading/&#34;&gt;TV signals&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://marginalrevolution.com/marginalrevolution/2025/10/prediction-markets-are-very-accurate.html&#34;&gt;Kind of accurate?&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.stat.berkeley.edu/~aldous/157/Papers/PointShaving.pdf&#34;&gt;Everything is gambling&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 10-18-2025</title>
      <link>/learnedt1w/2025/10_18_2025/</link>
      <pubDate>Sat, 18 Oct 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/10_18_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.redshift-observatory.ch/&#34;&gt;Redshift observatory&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://news.ycombinator.com/item?id=45610010&#34;&gt;Foundational mental model&lt;/a&gt; to get the hang of ever “new” LLM conceptual churn:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An LLM&lt;/li&gt;
&lt;li&gt;&amp;hellip;called in a loop&lt;/li&gt;
&lt;li&gt;&amp;hellip;maintaining a history of stuff it&amp;rsquo;s done in the session (the &amp;ldquo;context&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;&amp;hellip;with access to tool calls to do things. Like, read files, write files, call bash, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.humaninvariant.com/blog/titles&#34;&gt;A breakdown of “if I call myself ‘x’ or manager of ‘x’ I make more Money”&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.redshift-observatory.ch/&#34;&gt;Redshift observatory&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://news.ycombinator.com/item?id=45610010&#34;&gt;Foundational mental model&lt;/a&gt; to get the hang of ever “new” LLM conceptual churn:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An LLM&lt;/li&gt;
&lt;li&gt;&amp;hellip;called in a loop&lt;/li&gt;
&lt;li&gt;&amp;hellip;maintaining a history of stuff it&amp;rsquo;s done in the session (the &amp;ldquo;context&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;&amp;hellip;with access to tool calls to do things. Like, read files, write files, call bash, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.humaninvariant.com/blog/titles&#34;&gt;A breakdown of “if I call myself ‘x’ or manager of ‘x’ I make more Money”&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnbc.com/2024/08/21/cryptocurrency-shan-hanes-pig-butchering-scam.html&#34;&gt;How does a single person have the authority to carry this out&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nickstambaugh.dev/posts/LINQ-and-being-declarative&#34;&gt;LINQ is cool&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://vimeo.com/13159991&#34;&gt;Motorcycles&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://freetofile.com/&#34;&gt;I hate Turbo tax so much, please use this&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://notes.mtb.xyz/p/your-data-model-is-your-destiny&#34;&gt;AI is commoditizing code.&lt;/a&gt; Technical execution is table stakes rather than a competitive advantage. AI can generate code, but it can’t refactor the organizational reality customers have built around your architecture—the workflows, integrations, and institutional muscle memory that compound over time.
* Is code really comoditized? Or is just boiler plate comoditized? But&amp;hellip; wasn&amp;rsquo;t it already comoditized?&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://danielstone.substack.com/p/money-stuff-is-linear-ish&#34;&gt;Could be fun to create a visual graph of all money-stuff posts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://arstechnica.com/gadgets/2025/09/samsung-forces-ads-onto-fridges-is-a-bad-sign-for-other-appliances/&#34;&gt;Stop putting screens on things that don’t need screens&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 10-11-2025</title>
      <link>/learnedt1w/2025/10_11_2025/</link>
      <pubDate>Sat, 11 Oct 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/10_11_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/415403/whats-the-difference-between-bashrc-bash-profile-and-environment&#34;&gt;bashrc vs bash_profile&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://vkoskiv.com/first-linux-patch/&#34;&gt;A Linux contribution&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://protein.starbucks.com/?utm_source=google&amp;amp;utm_medium=search&amp;amp;utm_campaign=ProteinLP&amp;amp;gad_source=1&amp;amp;gad_campaignid=23056097230&amp;amp;gbraid=0AAAAADoJV5vpxBYfPwHnl-HyNqIEhoPo0&amp;amp;gclid=Cj0KCQjwgKjHBhChARIsAPJR3xfxoZis37Iku-Al7lI4cgvU54owtfXvhKFGgTVfIoDdwWIXQhnCgB8aAvFAEALw_wcB&#34;&gt;Starbucks protein&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Boom_Technology&#34;&gt;Back to supersonic flight&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://structuredprocrastination.com&#34;&gt;Procrastination&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pubmed.ncbi.nlm.nih.gov/40760353/&#34;&gt;Ultra processed ok in moderation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://preply.com/en/blog/hanja-vs-hangul/&#34;&gt;Hanja vs Hangul&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://jeremymaluf.com/onebag/&#34;&gt;One bag travel&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/415403/whats-the-difference-between-bashrc-bash-profile-and-environment&#34;&gt;bashrc vs bash_profile&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://vkoskiv.com/first-linux-patch/&#34;&gt;A Linux contribution&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://protein.starbucks.com/?utm_source=google&amp;amp;utm_medium=search&amp;amp;utm_campaign=ProteinLP&amp;amp;gad_source=1&amp;amp;gad_campaignid=23056097230&amp;amp;gbraid=0AAAAADoJV5vpxBYfPwHnl-HyNqIEhoPo0&amp;amp;gclid=Cj0KCQjwgKjHBhChARIsAPJR3xfxoZis37Iku-Al7lI4cgvU54owtfXvhKFGgTVfIoDdwWIXQhnCgB8aAvFAEALw_wcB&#34;&gt;Starbucks protein&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Boom_Technology&#34;&gt;Back to supersonic flight&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://structuredprocrastination.com&#34;&gt;Procrastination&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pubmed.ncbi.nlm.nih.gov/40760353/&#34;&gt;Ultra processed ok in moderation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://preply.com/en/blog/hanja-vs-hangul/&#34;&gt;Hanja vs Hangul&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://jeremymaluf.com/onebag/&#34;&gt;One bag travel&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>A State of Inevitable Gambling</title>
      <link>/musings/the_gambling_state/</link>
      <pubDate>Mon, 06 Oct 2025 00:00:00 +0000</pubDate>
      
      <guid>/musings/the_gambling_state/</guid>
      <description>&lt;p&gt;This is a collection of semi-coherent, random thoughts I have on &amp;ldquo;gambling&amp;rdquo;.&lt;/p&gt;
&lt;h1 id=&#34;the-inevitable-gambling-state&#34;&gt;The inevitable gambling state&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;My brokerage wants me to gamble on sporting events&lt;/li&gt;
&lt;li&gt;When I watch sporting events I&amp;rsquo;m bombarded with ads to gamble at {insert sportsbook}&lt;/li&gt;
&lt;li&gt;My credit card wants me to gamble&lt;/li&gt;
&lt;li&gt;McDonald’s wants me to play Monopoly and hope for a lottery like payoff if I buy their food&lt;/li&gt;
&lt;li&gt;Go hang out at a gas station for a while and see how many people go in and buy scratch offs&lt;/li&gt;
&lt;li&gt;Prediction markets want me to gamble&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s someone out there looking to take the other side of my bets in the stock market&lt;/li&gt;
&lt;li&gt;Crypto&amp;hellip; do I even need to?&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;m getting ads on Venmo to join DraftKings and buy lottery tickets&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are so many people in the business of flipping a coin, heads they win 52 cents tails you win 48 cents. They&amp;rsquo;ll disguise this bet as a really fun thing, and they&amp;rsquo;re going to socially engineer you to make this bet as many times as possible. Because the MORE they can scale this bet the more money they win, they want you to put this bet on every second of every hour of every day to speed up the rate of wealth transfer.&lt;/p&gt;</description>
      <content>&lt;p&gt;This is a collection of semi-coherent, random thoughts I have on &amp;ldquo;gambling&amp;rdquo;.&lt;/p&gt;
&lt;h1 id=&#34;the-inevitable-gambling-state&#34;&gt;The inevitable gambling state&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;My brokerage wants me to gamble on sporting events&lt;/li&gt;
&lt;li&gt;When I watch sporting events I&amp;rsquo;m bombarded with ads to gamble at {insert sportsbook}&lt;/li&gt;
&lt;li&gt;My credit card wants me to gamble&lt;/li&gt;
&lt;li&gt;McDonald’s wants me to play Monopoly and hope for a lottery like payoff if I buy their food&lt;/li&gt;
&lt;li&gt;Go hang out at a gas station for a while and see how many people go in and buy scratch offs&lt;/li&gt;
&lt;li&gt;Prediction markets want me to gamble&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s someone out there looking to take the other side of my bets in the stock market&lt;/li&gt;
&lt;li&gt;Crypto&amp;hellip; do I even need to?&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;m getting ads on Venmo to join DraftKings and buy lottery tickets&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are so many people in the business of flipping a coin, heads they win 52 cents tails you win 48 cents. They&amp;rsquo;ll disguise this bet as a really fun thing, and they&amp;rsquo;re going to socially engineer you to make this bet as many times as possible. Because the MORE they can scale this bet the more money they win, they want you to put this bet on every second of every hour of every day to speed up the rate of wealth transfer.&lt;/p&gt;
&lt;p&gt;The business model of a casino continues to march into consumer products.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sign up to get emails and we&amp;rsquo;ll let you spin a wheel for a prize (some of which are great)&lt;/li&gt;
&lt;li&gt;Buy our food and you could win a fucking car&lt;/li&gt;
&lt;li&gt;You should pick who&amp;rsquo;s going to win the next presidential election!&lt;/li&gt;
&lt;li&gt;You should buy this stock, it&amp;rsquo;s going to 10x in the next 3 months&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To be fair, with enough hype and social lubrication people are willing to buy anything.&lt;/p&gt;
&lt;details class=&#34;spoiler&#34;&gt;
  &lt;summary&gt;Random aside on NFTs&lt;/summary&gt;
  &lt;div class=&#34;spoiler-content&#34;&gt;
    Side note, why the fuck would anyone rugpull NFTs? Like if you get a bunch of people to buy your NFTs isn&amp;rsquo;t the scam already complete? Just give them their stupid internet pictures, collect your money and allow them to trade on the marketplace. The valuation is now utterly useless to you, you&amp;rsquo;ve already perpetuated your scam? The hard part is already done, you&amp;rsquo;ve already convinced people that something useless is valuable and that you can generate the useless thing&amp;hellip;
  &lt;/div&gt;
&lt;/details&gt;
&lt;p&gt;These people know that in aggregate they WILL make money off these promotions. Just like sportsbooks have all the little tools to keep you coming back, making it habit&amp;hellip; the same tools surround us everywhere.&lt;/p&gt;
&lt;p&gt;Is it possible to go a day without being bombarded by gambling?&lt;/p&gt;
&lt;h3 id=&#34;the-problem&#34;&gt;The problem&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s the hard part&amp;hellip; gambling is fun and, at the tail, people make money.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you can refrain from all the garbage on Sportbooks you can take advantage of all the free money they offer&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s clear that sharp bettors can make money from sportsbooks or, at least, perform arbitrage across books&lt;/li&gt;
&lt;li&gt;Similarly, sharp people trading equities, commodities, etc&amp;hellip; can make money over time (a lot of money) a.k.a &lt;a href=&#34;https://en.wikipedia.org/wiki/Renaissance_Technologies&#34;&gt;Rentec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;You can get really good at poker and&amp;hellip; make money.&lt;/li&gt;
&lt;li&gt;You can go to Kalshi with insider information, trade on it, and make a ton of $ while making markets more efficient&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But now that you&amp;rsquo;ve gotten a taste you realize what you&amp;rsquo;ve become&amp;hellip; you are now the one making 52 cents every time the coin flips.&lt;/p&gt;
&lt;p&gt;THe problem? You exist on a PLATFORM. Just because you want to flip the coin&amp;hellip; doesn&amp;rsquo;t mean you&amp;rsquo;re going to be able to anymore.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You will get banned/limited by Casinos/Sportsbooks&lt;/li&gt;
&lt;li&gt;Is insider trading welcomed or lambasted in prediciton markets?&lt;/li&gt;
&lt;li&gt;People don&amp;rsquo;t have to play poker with you or take the other side of your bets (I massive part of poker is playing at tables where you have an edge)&lt;/li&gt;
&lt;li&gt;You may also fully exploit your advantage and not be able to continue to make money from it (Renaissance Technologies&amp;rsquo; flagship
Medallion fund does not accept outside money)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So you win 52 cents on borrowed time, or you continue to exploit people who don&amp;rsquo;t understand what kind of bets they are putting on.&lt;/p&gt;
&lt;p&gt;I guess taking advantage of misinformed people/organizations is part of operating in a free market. In order to properly allocate capital there must be some winners and losers and in the long run we (hope to) lift wealth, life expectancy, and improve our existence.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re a non-gambler you&amp;rsquo;re also kind of tied to the gambling ship. As much as you want to say, &amp;ldquo;Oh I&amp;rsquo;m VT and forget, I max out my retirement accounts, I never even look at my portfolio, etc&amp;hellip;&amp;rdquo; Yet, if the a bubble pops your downturn will be large and hard to stomach just as those who are leveraged out of their minds in risky assets. You could make an argument that something like VT would be less destroyed than a concentrated bet in an devastated asset class and you&amp;rsquo;d be 100% correct (I hope), but you&amp;rsquo;re still on the same ship&amp;hellip; you will feel the pain.&lt;/p&gt;
&lt;h3 id=&#34;personal-thoughts&#34;&gt;Personal thoughts&lt;/h3&gt;
&lt;p&gt;I like gambling. I know enough to understand when I’m making a terribly negative expected value decision and essentially just handing cash over to somebody&amp;hellip; and I avoid that at all costs.&lt;/p&gt;
&lt;p&gt;You can derive the sense of winning, the sense that I &amp;ldquo;knew&amp;rdquo; something that somebody else didn’t and while mindlessly, clicking, odds and offerings and spinning wheels certainly provides dopamine. There’s another level of dopamine from being right.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What are you going to compare this to?</title>
      <link>/musings/what_are_you_going-_to_compare_this/</link>
      <pubDate>Mon, 06 Oct 2025 00:00:00 +0000</pubDate>
      
      <guid>/musings/what_are_you_going-_to_compare_this/</guid>
      <description>&lt;h1 id=&#34;a-new-project&#34;&gt;A new project&lt;/h1&gt;
&lt;p&gt;You&amp;rsquo;re setting off on a journey to build a new {table, whole series of tables, dashboard, predictive model, pick your adventure book, etc&amp;hellip;}. The initial request from &lt;code&gt;THE BUSINESS&lt;/code&gt; lacks any semblance of detail required for immediate execution. You&amp;rsquo;ve done this before, people love quick calls to discuss the minutiae (a.k.a any level of detail) that was left out of the request. Lets hop on a quick call.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;a-new-project&#34;&gt;A new project&lt;/h1&gt;
&lt;p&gt;You&amp;rsquo;re setting off on a journey to build a new {table, whole series of tables, dashboard, predictive model, pick your adventure book, etc&amp;hellip;}. The initial request from &lt;code&gt;THE BUSINESS&lt;/code&gt; lacks any semblance of detail required for immediate execution. You&amp;rsquo;ve done this before, people love quick calls to discuss the minutiae (a.k.a any level of detail) that was left out of the request. Lets hop on a quick call.&lt;/p&gt;
&lt;h2 id=&#34;things-to-remember-when-beginning-project&#34;&gt;Things to remember when beginning &amp;ldquo;$project&amp;rdquo;:&lt;/h2&gt;
&lt;h3 id=&#34;entitlement&#34;&gt;Entitlement:&lt;/h3&gt;
&lt;p&gt;There will probably be no specific &amp;ldquo;entitlement&amp;rdquo;, &amp;ldquo;$ benefit&amp;rdquo;, etc&amp;hellip; associated with the request, if you ask for this you will get:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;I don&amp;rsquo;t know&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;this will save x hours per week&amp;rdquo;&lt;/li&gt;
&lt;li&gt;a round number in the $ millions&lt;/li&gt;
&lt;li&gt;&amp;ldquo;let me circle back with you on that&amp;rdquo; (You will not hear about it again)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;context&#34;&gt;Context:&lt;/h3&gt;
&lt;p&gt;The person you are talking with may have less context then you. If this is true, you will most likely need to approach the most tenured member of their team to understand what is going on/why this is being requested. This is &lt;strong&gt;important&lt;/strong&gt; if you can find the person who actually understands the broader picture, you will be able to sort out hours of hand waving in minutes.&lt;/p&gt;
&lt;h3 id=&#34;urgency&#34;&gt;Urgency:&lt;/h3&gt;
&lt;p&gt;Remember, everything is high priority and needed to be done yesterday. Wether the request &amp;ldquo;saves $100MM&amp;rdquo; or &amp;ldquo;saves me 15 minutes per week&amp;rdquo; it will be something urgent for the requestor. This is because:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In a race for constrained bandwidth, teams will continue to increase the unfounded urgency of requests to get things into a sprint, this causes the &amp;ldquo;urgency&amp;rdquo; to lose its meaning&lt;/li&gt;
&lt;li&gt;People default to a general sense of what I&amp;rsquo;m working on is dire, important, and most be completed&amp;hellip; this can be internally driven or imparted by point 1. above&lt;/li&gt;
&lt;li&gt;Information is siloed causing large changes to remain unknown until just before/after implementation. This inflates a sense of urgency as things literally needed to be done yesterday&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;create-a-graph&#34;&gt;Create a graph:&lt;/h3&gt;
&lt;p&gt;A graph can be quite helpful in determining what you&amp;rsquo;ll actually need to do to complete this. I typically use &lt;a href=&#34;https://obsidian.md/&#34;&gt;Obsidian&lt;/a&gt; and jot down notes in markdown files and then link them as needed to create my graphs.&lt;/p&gt;
&lt;p&gt;These notes are my scaffolding for how I&amp;rsquo;d go about executing the request. What information, alignment, data, sign off, etc&amp;hellip; will I need to do this? if I had all of that right now, how would I execute this, what tools would I use, etc&amp;hellip; What does the end result look like, how does it operate, whats the UX like?&lt;/p&gt;
&lt;p&gt;This will NOT cover everything that comes up&amp;hellip; it serves as a base to begin to cover edge cases and open questions that you&amp;rsquo;d like to establish an answer to now rather than weeks into this thing.&lt;/p&gt;
&lt;h3 id=&#34;the-questions-you-ask&#34;&gt;The Questions you ask:&lt;/h3&gt;
&lt;p&gt;What are you going to compare this to?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One of mt favorites gets to the heart of what you need to do.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;rsquo;ve created a graph above there is a good chance you may have put more thought into the request than the requestor has, thus these questions may be just as important for them as it is for you.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>SQL Buckets</title>
      <link>/posts/sql_buckets/</link>
      <pubDate>Sun, 05 Oct 2025 00:00:00 +0000</pubDate>
      
      <guid>/posts/sql_buckets/</guid>
      <description>&lt;h3 id=&#34;case-statements&#34;&gt;Case Statements:&lt;/h3&gt;
&lt;p&gt;A common occurrence when writing SQL is needing to bucket some data and look at how it is distributed across said buckets.&lt;/p&gt;
&lt;p&gt;Typically I&amp;rsquo;d write (have an LLM spit out buckets) something like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;CASE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; COLUMN_TO_BUCKET &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;a. &amp;lt; 5&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; COLUMN_TO_BUCKET &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;b. &amp;gt;=5 - &amp;lt;10&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; COLUMN_TO_BUCKET &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;c. &amp;gt;=10 - &amp;lt;15&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ETC...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;ELSE&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;u. &amp;gt;100&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;END&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; COLUMN_TO_BUCKET_DIST
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      , &lt;span style=&#34;color:#66d9ef&#34;&gt;SUM&lt;/span&gt;(THIS_IS_ANNOYING) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; ANNOYED
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;GROUP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I have to add a character/number in each bucket to allow for sorting, making writing/updating the lengthy case statement that much more annoying. I have to write all this because unlike &lt;a href=&#34;https://docs.snowflake.com/en/sql-reference/functions/width_bucket&#34;&gt;other OLAP DBMS&lt;/a&gt;, Redshift doesn&amp;rsquo;t have a bucketing function that I&amp;rsquo;m aware of.&lt;/p&gt;</description>
      <content>&lt;h3 id=&#34;case-statements&#34;&gt;Case Statements:&lt;/h3&gt;
&lt;p&gt;A common occurrence when writing SQL is needing to bucket some data and look at how it is distributed across said buckets.&lt;/p&gt;
&lt;p&gt;Typically I&amp;rsquo;d write (have an LLM spit out buckets) something like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;CASE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; COLUMN_TO_BUCKET &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;a. &amp;lt; 5&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; COLUMN_TO_BUCKET &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;b. &amp;gt;=5 - &amp;lt;10&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; COLUMN_TO_BUCKET &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;c. &amp;gt;=10 - &amp;lt;15&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ETC...
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;ELSE&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;u. &amp;gt;100&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;END&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; COLUMN_TO_BUCKET_DIST
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      , &lt;span style=&#34;color:#66d9ef&#34;&gt;SUM&lt;/span&gt;(THIS_IS_ANNOYING) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; ANNOYED
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;GROUP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I have to add a character/number in each bucket to allow for sorting, making writing/updating the lengthy case statement that much more annoying. I have to write all this because unlike &lt;a href=&#34;https://docs.snowflake.com/en/sql-reference/functions/width_bucket&#34;&gt;other OLAP DBMS&lt;/a&gt;, Redshift doesn&amp;rsquo;t have a bucketing function that I&amp;rsquo;m aware of.&lt;/p&gt;
&lt;p&gt;Or do I&amp;hellip;&lt;/p&gt;
&lt;h3 id=&#34;solution&#34;&gt;Solution:&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s say I have a table that records when a record was created and when it was last updated. I&amp;rsquo;ve never used this table before, and I&amp;rsquo;m interested in the distribution of the number of days between created and updated to see how common it is for a record to have an update &lt;code&gt;n&lt;/code&gt; days after it was created.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; TEMP &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;#&lt;/span&gt;DELTA_DIST &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; A_UNIQUE_ID_OF_A_ROW
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , DATE_DIFF(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;DAY&amp;#39;&lt;/span&gt;, CREATION_DATE, LAST_UPDATED) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; CD_LD
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; MY_TABLE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; A_FILTER &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;2025-01-01&amp;#39;&lt;/span&gt;::DATE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;AND&lt;/span&gt; ANOTHER_FILTER &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cool, so we want to know how these records look like in some buckets!&lt;/p&gt;
&lt;p&gt;We could do this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;CASE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;a. &amp;lt; 5 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;b. 5-10 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;c. 10-15 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;d. 15-20 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;25&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;e. 20-25 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;f. 25-30 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;35&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;g. 30-35 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;h. 35-40 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;45&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;i. 40-45 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;j. 45-50 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;55&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;k. 50-55 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;60&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;l. 55-60 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;65&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;m. 60-65 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;70&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;n. 65-70 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;75&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;o. 70-75 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;p. 75-80 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;85&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;q. 80-85 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;90&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;r. 85-90 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;95&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;s. 90-95 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;t. 95-100 Day&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;ELSE&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;u. &amp;gt;100&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;END&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; CD_LD_DIST
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;DISTINCT&lt;/span&gt; A_UNIQUE_ID_OF_A_ROW) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; NUM_ID
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; DELTA_DIST
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;GROUP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That is pretty annoying&amp;hellip; it is verbose and, if you&amp;rsquo;ve done this before, you&amp;rsquo;ll know that catch all bucket at the end will have some spike in records in it that you&amp;rsquo;ll want to further investigate. So I came up with the following:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; LPAD(FLOOR(COLUMN_TO_BUCKET &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT)::TEXT, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#75715e&#34;&gt;-- Creates the sortable digits at the beginning
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;. &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       FLOOR(COLUMN_TO_BUCKET &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- Generates the first day in the range
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       (FLOOR(COLUMN_TO_BUCKET &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;) &lt;span style=&#34;color:#75715e&#34;&gt;-- Generates the last day in the range  (+4 as I&amp;#39;m bucketing by 5 days at a time)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; Days&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; COLUMN_TO_BUCKET_DIST &lt;span style=&#34;color:#75715e&#34;&gt;-- Adds the Days string at the end for clarity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;     , &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;DISTINCT&lt;/span&gt; THING_TO_AGGREGATE) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; AGGREGATED_THING
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; TABLE_I_WANT_TO_DISTRIBUTE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;GROUP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can pass in the column to bucket, adjust the bucket size, and also handle the number of buckets. This does use &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/r_LPAD.html&#34;&gt;LPAD&lt;/a&gt; but &lt;code&gt;FLOOR()&lt;/code&gt; is standard. Regardless, lets break it down in detail if you need to rewrite for a different SQL dialect.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;FLOOR: rounds a number down to the next whole number&lt;/li&gt;
&lt;li&gt;LPAD: prepends characters to a string&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On an input of &amp;ldquo;1&amp;rdquo; this is what the flow would look like to go from 1 -&amp;gt; 00. 0-4 Days&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- FLOOR of 1/5 = 0 and cast to text
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; FLOOR(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT)::TEXT &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- LPAD adds a leading zero to single digits
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; LPAD(FLOOR(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;)::TEXT, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;00&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Just cosmetic, appending a &amp;#34;.&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; LPAD(FLOOR(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;)::TEXT, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;. &amp;#39;&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;00.&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Now we know that this will iteratively return 0,1,2,3,n... as our input increases
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- And if we multiple by 5 we get the beginning of our bucket
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;       &lt;span style=&#34;color:#75715e&#34;&gt;-- 0 * 5 = 0 (for 0-4)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;       &lt;span style=&#34;color:#75715e&#34;&gt;-- 1 * 5 = 5 (for 5-9)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;       &lt;span style=&#34;color:#75715e&#34;&gt;-- etc...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; LPAD(FLOOR(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;)::TEXT, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;. &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; FLOOR(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;00. 0&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Now we add another cosmetic piece ( a dash to separate start/end of bucket)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; LPAD(FLOOR(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;)::TEXT, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;. &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; FLOOR(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;00. 0-&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Remember how we generated the start of the bucket 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- If we know the bucket is going to span 5 days (inclusive of start and end) we just add 4 to the start
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; LPAD(FLOOR(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;)::TEXT, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;. &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; FLOOR(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (FLOOR(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;00. 0-4&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;--- Add final cosmetic piece &amp;#39; Days&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; LPAD(FLOOR(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;)::TEXT, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;. &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; FLOOR(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (FLOOR(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; Days&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;00. 0-4 Days&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We&amp;rsquo;ve transformed from an input of CD_LD = 1 and assigned it a sortable, bucketable (probably not a word) value -&amp;gt; &amp;lsquo;00. 0-4 Days&amp;rsquo;&lt;/p&gt;
&lt;h3 id=&#34;im-worried-about-an-unconstrained-series-of-buckets-how-do-i-cap-it&#34;&gt;I&amp;rsquo;m worried about an unconstrained series of buckets&amp;hellip; how do I cap it?&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;-- Define our buckets when we are below our threshold
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;CASE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt; LPAD(FLOOR(CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT)::TEXT, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;. &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       FLOOR(CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       (FLOOR(CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; Days&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#75715e&#34;&gt;-- Define final bucket when threshold exceeded
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;ELSE&lt;/span&gt; LPAD(FLOOR(&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;)::TEXT, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;. &amp;gt;100&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;END&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; CD_LD_DIST
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;DISTINCT&lt;/span&gt; A_UNIQUE_ID_OF_A_ROW) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; NUM_ID
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; DELTA_DIST
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;GROUP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;i-want-to-change-the-increment-size&#34;&gt;I want to change the increment size&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Change increment size from 5 days to 7 days
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 5 -&amp;gt; 7
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 4 -&amp;gt; 6
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; LPAD(FLOOR(CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;::FLOAT)::TEXT, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;. &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       FLOOR(CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;::FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       (FLOOR(CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;::FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;) &lt;span style=&#34;color:#75715e&#34;&gt;-- Generates the last day in the range  (+6 as I&amp;#39;m bucketing by 7 days at a time)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; Days&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; CD_LD_DIST &lt;span style=&#34;color:#75715e&#34;&gt;-- Adds the Days string at the end for clarity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;      , &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;DISTINCT&lt;/span&gt; A_UNIQUE_ID_OF_A_ROW) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; NUM_ID
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; DELTA_DIST
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;GROUP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;i-have-more-than-99-buckets-the-two-digit-solution-wont-work&#34;&gt;I have more than 99 buckets, the two digit solution wont work:&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Pad an additional 0 with LPAD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; LPAD(FLOOR(CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT)::TEXT, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#75715e&#34;&gt;-- 2 -&amp;gt; 3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;. &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       FLOOR(CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       (FLOOR(CD_LD &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;::FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;) 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; Days&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; CD_LD_DIST &lt;span style=&#34;color:#75715e&#34;&gt;-- Adds the Days string at the end for clarity
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;      , &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;DISTINCT&lt;/span&gt; A_UNIQUE_ID_OF_A_ROW) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; NUM_ID
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; DELTA_DIST
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;GROUP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Hope that&amp;rsquo;s helpful! Maybe there&amp;rsquo;s a better solution, I didn&amp;rsquo;t do an exhaustive search!&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 10-04-2025</title>
      <link>/learnedt1w/2025/10_04_2025/</link>
      <pubDate>Sat, 04 Oct 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/10_04_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454&#34;&gt;HTML Regex parsing, at least an LLM would have said &amp;ldquo;great idea&amp;rdquo; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://db.cs.cmu.edu/papers/2025/zeng-sigmod2025.pdf&#34;&gt;Future proof file format&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.amplifypartners.com/blog-posts/why-tigerbeetle-is-the-most-interesting-database-in-the-world&#34;&gt;Tiger beetle DB&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wsj.com/finance/investing/why-microsoft-has-lower-borrowing-costs-than-the-u-s-de841633?gaa_at=eafs&amp;amp;gaa_n=ASWzDAiwI1UFJFPoTbNpjOVGzTYwaolqowvjKBVCaQpUw_VTefaUdarQ-hwtVO-aYRw%3D&amp;amp;gaa_ts=68daba7d&amp;amp;gaa_sig=eAKlZaTmI6IN7-G2MFJouFUQNUl7B810S_9sIauRxy8eeg1seHwv_caGV_Z2K6M_nvVEQL2ACMZI997O0UcbbA%3D%3D&#34;&gt;Hmmmmmm&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://weakty.com/posts/efforts/&#34;&gt;Our efforts define us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/live/tk0tfYDxrUA?si=VpirYoF8MI58RWvI&#34;&gt;Volcano&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://matduggan.com/greenland-is-a-beautiful-nightmare/&#34;&gt;Greenland&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://predictions.collegefootballdata.com/&#34;&gt;CFB predictions&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454&#34;&gt;HTML Regex parsing, at least an LLM would have said &amp;ldquo;great idea&amp;rdquo; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://db.cs.cmu.edu/papers/2025/zeng-sigmod2025.pdf&#34;&gt;Future proof file format&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.amplifypartners.com/blog-posts/why-tigerbeetle-is-the-most-interesting-database-in-the-world&#34;&gt;Tiger beetle DB&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wsj.com/finance/investing/why-microsoft-has-lower-borrowing-costs-than-the-u-s-de841633?gaa_at=eafs&amp;amp;gaa_n=ASWzDAiwI1UFJFPoTbNpjOVGzTYwaolqowvjKBVCaQpUw_VTefaUdarQ-hwtVO-aYRw%3D&amp;amp;gaa_ts=68daba7d&amp;amp;gaa_sig=eAKlZaTmI6IN7-G2MFJouFUQNUl7B810S_9sIauRxy8eeg1seHwv_caGV_Z2K6M_nvVEQL2ACMZI997O0UcbbA%3D%3D&#34;&gt;Hmmmmmm&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://weakty.com/posts/efforts/&#34;&gt;Our efforts define us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/live/tk0tfYDxrUA?si=VpirYoF8MI58RWvI&#34;&gt;Volcano&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://matduggan.com/greenland-is-a-beautiful-nightmare/&#34;&gt;Greenland&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://predictions.collegefootballdata.com/&#34;&gt;CFB predictions&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 09-27-2025</title>
      <link>/learnedt1w/2025/09_27_2025/</link>
      <pubDate>Sat, 27 Sep 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/09_27_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://taleshape.com/shaper/docs/dashboard-sql-reference/&#34;&gt;Shaper looks interesting&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://arxiv.org/abs/2503.05136&#34;&gt;Homomorphic Encryption&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Fully Homomorphic Encryption (FHE) is a cryptographic scheme that enables computations to be performed directly on encrypted data, as if the data were in plaintext. After all computations are performed on the encrypted data, it can be decrypted to reveal the result.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.theverge.com/tech/781387/backpacking-ultralight-haribo-power-bank&#34;&gt;Haribo power bank&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Automaticity%27&#34;&gt;Automaticity “Highway hypnosis” &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ifixit.com/News/113171/iphone-air-teardown&#34;&gt;iPhone air looks&amp;hellip; bendable&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=nv_2rz5BFDA&#34;&gt;Jazz&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://taleshape.com/shaper/docs/dashboard-sql-reference/&#34;&gt;Shaper looks interesting&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://arxiv.org/abs/2503.05136&#34;&gt;Homomorphic Encryption&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Fully Homomorphic Encryption (FHE) is a cryptographic scheme that enables computations to be performed directly on encrypted data, as if the data were in plaintext. After all computations are performed on the encrypted data, it can be decrypted to reveal the result.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.theverge.com/tech/781387/backpacking-ultralight-haribo-power-bank&#34;&gt;Haribo power bank&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Automaticity%27&#34;&gt;Automaticity “Highway hypnosis” &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ifixit.com/News/113171/iphone-air-teardown&#34;&gt;iPhone air looks&amp;hellip; bendable&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=nv_2rz5BFDA&#34;&gt;Jazz&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>The Goal</title>
      <link>/books/the_goal/</link>
      <pubDate>Sat, 20 Sep 2025 00:00:00 +0000</pubDate>
      
      <guid>/books/the_goal/</guid>
      <description>&lt;h2 id=&#34;the-book&#34;&gt;The book&lt;/h2&gt;
&lt;p&gt;This will serve to store notes/insights/thoughts about &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Goal_%28novel%29&#34;&gt;The Goal&lt;/a&gt; by Eliyahu M. Goldratt&lt;/p&gt;
&lt;h3 id=&#34;quotes&#34;&gt;Quotes&lt;/h3&gt;
&lt;p&gt;&amp;ldquo;But after a while, I learned not to waste my time, checking the numbers because the numbers were almost always right. However, if I checked the assumptions, they were almost always wrong.&amp;rdquo;&lt;/p&gt;
&lt;h3 id=&#34;notes&#34;&gt;Notes&lt;/h3&gt;
&lt;p&gt;Overall reminded me of Supply Chain class.&lt;/p&gt;
&lt;p&gt;I like the process evaluation, it was funny that you can actually draw parallels between manufacturing and software development at large organizations.&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;the-book&#34;&gt;The book&lt;/h2&gt;
&lt;p&gt;This will serve to store notes/insights/thoughts about &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Goal_%28novel%29&#34;&gt;The Goal&lt;/a&gt; by Eliyahu M. Goldratt&lt;/p&gt;
&lt;h3 id=&#34;quotes&#34;&gt;Quotes&lt;/h3&gt;
&lt;p&gt;&amp;ldquo;But after a while, I learned not to waste my time, checking the numbers because the numbers were almost always right. However, if I checked the assumptions, they were almost always wrong.&amp;rdquo;&lt;/p&gt;
&lt;h3 id=&#34;notes&#34;&gt;Notes&lt;/h3&gt;
&lt;p&gt;Overall reminded me of Supply Chain class.&lt;/p&gt;
&lt;p&gt;I like the process evaluation, it was funny that you can actually draw parallels between manufacturing and software development at large organizations.&lt;/p&gt;
&lt;p&gt;Bits of the story were a little cheesy, but I guess that&amp;rsquo;s to be expected.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 09-20-2025</title>
      <link>/learnedt1w/2025/09_20_2025/</link>
      <pubDate>Sat, 20 Sep 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/09_20_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://glidepathfinancial.com/tdf-ranking/&#34;&gt;TDF rankings&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3694592&#34;&gt;Dominated ETFs:&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“As a case in point, the iShares US Technology ETF (IYW) is consistently dominated by the Technology Select Sector SPDR Fund (XLK) and the Vanguard Information Technology Index Fund (VGT). At the end of our sample, IYW generates an annualized $18 million in fees with a 0.43% expense ratio on $4 billion in assets. XLK and VGT generate $28 million and $20 million in fees, respectively, despite their much larger sizes of $22 billion and $20 billion in assets. Even though SPDR and Vanguard attract five times the assets with significantly lower expense ratios of 0.13% and 0.10%, the three funds are each profitable and generate similar fee income.”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://rekt.news/who-got-rugged&#34;&gt;Rug pullling…. Yourself:&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://glidepathfinancial.com/tdf-ranking/&#34;&gt;TDF rankings&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3694592&#34;&gt;Dominated ETFs:&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“As a case in point, the iShares US Technology ETF (IYW) is consistently dominated by the Technology Select Sector SPDR Fund (XLK) and the Vanguard Information Technology Index Fund (VGT). At the end of our sample, IYW generates an annualized $18 million in fees with a 0.43% expense ratio on $4 billion in assets. XLK and VGT generate $28 million and $20 million in fees, respectively, despite their much larger sizes of $22 billion and $20 billion in assets. Even though SPDR and Vanguard attract five times the assets with significantly lower expense ratios of 0.13% and 0.10%, the three funds are each profitable and generate similar fee income.”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://rekt.news/who-got-rugged&#34;&gt;Rug pullling…. Yourself:&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.sdstate.edu/news/2025/08/can-grapevines-help-slow-plastic-waste-problem&#34;&gt;Grapevines = plastic&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ag.ny.gov/sites/default/files/court-filings/new-york-v-eric-langan-et-al-indictment-2025.pdf&#34;&gt;Deal making at its finest&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.medicinenet.com/sodium_citrate/article.htm&#34;&gt;Sodium citrate helps prevent the formation of kidney stones&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;“Humor can be dissected as a frog can, but the thing dies in the process and the innards are discouraging to any but the pure scientific mind.”&lt;/p&gt;
&lt;p&gt;― E. B. White&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 09-13-2025</title>
      <link>/learnedt1w/2025/09_13_2025/</link>
      <pubDate>Sat, 13 Sep 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/09_13_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://xeiaso.net/notes/2025/we-dodged-a-bullet/&#34;&gt;10/10 fishing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://setheliot.com/blog/2015/01/08/who-is-the-hippo/&#34;&gt;Highest Paid Person&amp;rsquo;s Opinion&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wsj.com/finance/stocks/robinhood-a-broker-built-for-social-media-age-will-launch-its-own-social-network-a89a7608?mod=wsj_furtherreading_pos_1&#34;&gt;Spotify/Robinhood want to control more social real estate&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.pricepoints.health/p/blues&#34;&gt;Health care arb because stupidity:&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=Q60oEThfF-k&#34;&gt;NFL helmet deep dive&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://abcnews.go.com/US/exclusive-undercover-dhs-tests-find-widespread-security-failures/story?id=31434881&#34;&gt;Security Theater&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=7fW16i40ZDQ&#34;&gt;Steamed brisket&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://xeiaso.net/notes/2025/we-dodged-a-bullet/&#34;&gt;10/10 fishing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://setheliot.com/blog/2015/01/08/who-is-the-hippo/&#34;&gt;Highest Paid Person&amp;rsquo;s Opinion&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wsj.com/finance/stocks/robinhood-a-broker-built-for-social-media-age-will-launch-its-own-social-network-a89a7608?mod=wsj_furtherreading_pos_1&#34;&gt;Spotify/Robinhood want to control more social real estate&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.pricepoints.health/p/blues&#34;&gt;Health care arb because stupidity:&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=Q60oEThfF-k&#34;&gt;NFL helmet deep dive&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://abcnews.go.com/US/exclusive-undercover-dhs-tests-find-widespread-security-failures/story?id=31434881&#34;&gt;Security Theater&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=7fW16i40ZDQ&#34;&gt;Steamed brisket&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 09-06-2025</title>
      <link>/learnedt1w/2025/09_06_2025/</link>
      <pubDate>Sat, 06 Sep 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/09_06_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/Varietyz/Disciplined-AI-Software-Development&#34;&gt;md files to make llm go brrrr&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Ablution&#34;&gt;Ablution&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=NnzADfbBBFo&#34;&gt;Baked ribs&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/Varietyz/Disciplined-AI-Software-Development&#34;&gt;md files to make llm go brrrr&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Ablution&#34;&gt;Ablution&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=NnzADfbBBFo&#34;&gt;Baked ribs&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 08-30-2025</title>
      <link>/learnedt1w/2025/08_30_2025/</link>
      <pubDate>Sat, 30 Aug 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/08_30_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://materializedview.io/p/nimble-and-lance-parquet-killers&#34;&gt;Nimble and Lance vs parquet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://samwho.dev/big-o/&#34;&gt;One of the most well designed blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ntietz.com/blog/that-boolean-should-probably-be-something-else/&#34;&gt;Interesting thoughts on booleans&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://open.spotify.com/episode/1zj3EYCwcvFkl7Zdjsj2sZ?si=Mz250qKuQGuqKy4QM6OQvw&#34;&gt;An argument for the US stake in intel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ethanding.substack.com/p/ai-subscriptions-get-short-squeezed&#34;&gt;RIP llm subscription mode&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://woodcoincrypto.com&#34;&gt;Full circle back to physical currency&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=cAk4v34ehCs&#34;&gt;What a cool sport&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.iflscience.com/those-white-dots-on-strawberries-aren-t-strawberry-seeds-67201&#34;&gt;Strawberry TIL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/Osint613/status/1960153919000297830&#34;&gt;Got to experience this haboob&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Red_Queen%27s_race&#34;&gt;Red queen’s race&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Laser_peening&#34;&gt;Laser peening&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Hubert_Blaine_Wolfeschlegelsteinhausenbergerdorff_Sr.&#34;&gt;Longest name&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Because transparency is of prime importance, the healthy cornea does not have or need blood vessels within it. Instead, oxygen dissolves in tears and then diffuses throughout the cornea to keep it healthy: &lt;a href=&#34;https://en.m.wikipedia.org/wiki/Cornea&#34;&gt;https://en.m.wikipedia.org/wiki/Cornea&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://materializedview.io/p/nimble-and-lance-parquet-killers&#34;&gt;Nimble and Lance vs parquet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://samwho.dev/big-o/&#34;&gt;One of the most well designed blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ntietz.com/blog/that-boolean-should-probably-be-something-else/&#34;&gt;Interesting thoughts on booleans&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://open.spotify.com/episode/1zj3EYCwcvFkl7Zdjsj2sZ?si=Mz250qKuQGuqKy4QM6OQvw&#34;&gt;An argument for the US stake in intel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ethanding.substack.com/p/ai-subscriptions-get-short-squeezed&#34;&gt;RIP llm subscription mode&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://woodcoincrypto.com&#34;&gt;Full circle back to physical currency&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=cAk4v34ehCs&#34;&gt;What a cool sport&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.iflscience.com/those-white-dots-on-strawberries-aren-t-strawberry-seeds-67201&#34;&gt;Strawberry TIL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/Osint613/status/1960153919000297830&#34;&gt;Got to experience this haboob&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Red_Queen%27s_race&#34;&gt;Red queen’s race&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Laser_peening&#34;&gt;Laser peening&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Hubert_Blaine_Wolfeschlegelsteinhausenbergerdorff_Sr.&#34;&gt;Longest name&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Because transparency is of prime importance, the healthy cornea does not have or need blood vessels within it. Instead, oxygen dissolves in tears and then diffuses throughout the cornea to keep it healthy: &lt;a href=&#34;https://en.m.wikipedia.org/wiki/Cornea&#34;&gt;https://en.m.wikipedia.org/wiki/Cornea&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A VM makes an OS believe that it has the machine to itself; a container makes a process believe that it has the OS to itself.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 08-23-2025</title>
      <link>/learnedt1w/2025/08_23_2025/</link>
      <pubDate>Sat, 23 Aug 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/08_23_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;p&gt;Officially one year of doing this!&lt;/p&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://clickhouse.com/blog/moosestack-does-olap-need-an-orm&#34;&gt;OLAP ORMS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://web.archive.org/web/20151108084710/http://compsoc.dur.ac.uk/whitespace/tutorial.html&#34;&gt;Whitespace could be the language of the future&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://motherduck.com/blog/semantic-layer-duckdb-tutorial/&#34;&gt;Semantic layers&amp;hellip; if your org can stomach it&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://readyset.io/blog/optimizing-straddled-joins-in-readyset-from-hash-joins-to-index-condition-pushdown&#34;&gt;Filter first&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://churchofturing.github.io/the-enterprise-experience.html&#34;&gt;$enterprise&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Yes, tracking down owners of things IS that hard&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://sherwood.news/business/fords-safety-recall-total-hits-triple-digits-blowing-past-previous-full-year/?utm_source=snacks&amp;amp;utm_medium=email&amp;amp;utm_campaign=snacks_20250818&amp;amp;utm_content=495bba31e64228f8acb07385e68b4aa0&#34;&gt;America!, hell yeah!&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://oldcoinbad.com/p/long-degeneracy&#34;&gt;&amp;ldquo;As real returns compress, risk increases to compensate.&amp;rdquo;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://help.obsidian.md/bases&#34;&gt;Bases in Obsidian&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.demofox.org/2025/08/16/derivatives-gradients-jacobians-and-hessians-oh-my/&#34;&gt;A little further into derivatives&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://science.nasa.gov/science-research/heliophysics/a-gigantic-jet-caught-on-camera-a-spritacular-moment-for-nasa-astronaut-nicole-ayers/&#34;&gt;Gigantic jet&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;p&gt;Officially one year of doing this!&lt;/p&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://clickhouse.com/blog/moosestack-does-olap-need-an-orm&#34;&gt;OLAP ORMS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://web.archive.org/web/20151108084710/http://compsoc.dur.ac.uk/whitespace/tutorial.html&#34;&gt;Whitespace could be the language of the future&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://motherduck.com/blog/semantic-layer-duckdb-tutorial/&#34;&gt;Semantic layers&amp;hellip; if your org can stomach it&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://readyset.io/blog/optimizing-straddled-joins-in-readyset-from-hash-joins-to-index-condition-pushdown&#34;&gt;Filter first&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://churchofturing.github.io/the-enterprise-experience.html&#34;&gt;$enterprise&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Yes, tracking down owners of things IS that hard&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://sherwood.news/business/fords-safety-recall-total-hits-triple-digits-blowing-past-previous-full-year/?utm_source=snacks&amp;amp;utm_medium=email&amp;amp;utm_campaign=snacks_20250818&amp;amp;utm_content=495bba31e64228f8acb07385e68b4aa0&#34;&gt;America!, hell yeah!&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://oldcoinbad.com/p/long-degeneracy&#34;&gt;&amp;ldquo;As real returns compress, risk increases to compensate.&amp;rdquo;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://help.obsidian.md/bases&#34;&gt;Bases in Obsidian&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.demofox.org/2025/08/16/derivatives-gradients-jacobians-and-hessians-oh-my/&#34;&gt;A little further into derivatives&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://science.nasa.gov/science-research/heliophysics/a-gigantic-jet-caught-on-camera-a-spritacular-moment-for-nasa-astronaut-nicole-ayers/&#34;&gt;Gigantic jet&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Robinhood Gambling</title>
      <link>/projects/robinhood_gambling/</link>
      <pubDate>Fri, 22 Aug 2025 00:00:00 +0000</pubDate>
      
      <guid>/projects/robinhood_gambling/</guid>
      <description>&lt;h2 id=&#34;the-robinhood-gambling-factory&#34;&gt;The Robinhood gambling factory&lt;/h2&gt;
&lt;p&gt;Robinhood has a nice mobile experience, they have good products/deals, and they also have a &lt;a href=&#34;https://robinhood.com/creditcard/&#34;&gt;credit card&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There has been a lot of &lt;a href=&#34;https://buffett.cnbc.com/video/2021/05/03/robinhood-takes-advantage-of-gambling-instincts.html&#34;&gt;talk&lt;/a&gt; about Robinhood engaging with human &amp;ldquo;gambling instincts&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Just search &amp;ldquo;how has Robinhood gamified investing&amp;rdquo; and you can watch &lt;a href=&#34;https://www.cnbc.com/2021/03/31/robinhood-gets-rid-of-confetti-feature-amid-scrutiny-over-gamification.html&#34;&gt;confetti&lt;/a&gt; rain down as someone yolos their life savings into &lt;a href=&#34;https://www.reddit.com/r/options/comments/1dayi15/i_lost_695_on_gme_call_0dte/&#34;&gt;GME 0 DTE calls&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Again, I&amp;rsquo;m not saying the product is all bad, but there is one piece which is astonishingly ridiculous to me.&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;the-robinhood-gambling-factory&#34;&gt;The Robinhood gambling factory&lt;/h2&gt;
&lt;p&gt;Robinhood has a nice mobile experience, they have good products/deals, and they also have a &lt;a href=&#34;https://robinhood.com/creditcard/&#34;&gt;credit card&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There has been a lot of &lt;a href=&#34;https://buffett.cnbc.com/video/2021/05/03/robinhood-takes-advantage-of-gambling-instincts.html&#34;&gt;talk&lt;/a&gt; about Robinhood engaging with human &amp;ldquo;gambling instincts&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Just search &amp;ldquo;how has Robinhood gamified investing&amp;rdquo; and you can watch &lt;a href=&#34;https://www.cnbc.com/2021/03/31/robinhood-gets-rid-of-confetti-feature-amid-scrutiny-over-gamification.html&#34;&gt;confetti&lt;/a&gt; rain down as someone yolos their life savings into &lt;a href=&#34;https://www.reddit.com/r/options/comments/1dayi15/i_lost_695_on_gme_call_0dte/&#34;&gt;GME 0 DTE calls&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Again, I&amp;rsquo;m not saying the product is all bad, but there is one piece which is astonishingly ridiculous to me.&lt;/p&gt;
&lt;h2 id=&#34;the-credit-card&#34;&gt;The Credit Card&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m not going to write about the Casino-like aspects of the brokerage product&amp;hellip; but there is also the Robinhood CREDIT CARD!&lt;/p&gt;
&lt;p&gt;I opened the card a few months ago, payed the $50 Gold annual subscription, applied, and got the card. The card is kind of nice&amp;hellip; the gold is a little gimmicky, but the 3% back on everything and 5% on travel is good for someone that doesn&amp;rsquo;t want to swap cards around for each kind of purchase.&lt;/p&gt;
&lt;p&gt;I can just nail down 3%, convert those points to cash that lands straight back into Robinhood, and earns 4% APY. Am I leaving a few bps on the table&amp;hellip; sure, but everything is contained in the same ecosystem, transfers are fast, and 4% APY on my uninvested cash is fine.&lt;/p&gt;
&lt;h3 id=&#34;the-mystery-box&#34;&gt;The Mystery Box&lt;/h3&gt;
&lt;p&gt;For the first time, I go to exchange my points for cash, 1 point = 1 cent. I&amp;rsquo;m not going to fuss around with gift cards/shopping stuff, I want my cash, and I want to go make 4% on it.&lt;/p&gt;
&lt;p&gt;After opening up the rewards tab, I&amp;rsquo;m forced to scroll ALL THE WAY TO THE BOTTOM to get to the &amp;ldquo;Cash Back&amp;rdquo; section. I&amp;rsquo;m scrolling through shop with points, travel with points, buy Robinhood merch with points and &lt;strong&gt;Low and Behold&lt;/strong&gt; I see &amp;ldquo;The Mystery Box&amp;rdquo;&amp;hellip; what the fuck is &amp;ldquo;The Mystery Box&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Well, I&amp;rsquo;m glad you asked, and you can retrieve the full details &lt;a href=&#34;https://api.robinhood.com/creditcard/legal/reward-terms&#34;&gt;here&lt;/a&gt;&amp;hellip; but, in short, the Mystery box is LITERALLY an online casino.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s right, You can shuttle 1000 points (~$10) into this thing and come out with&amp;hellip; less than $10! Amazing, lets break it down.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Robinhood.png&#34; alt=&#34;Gamble Gamble&#34;&gt;&lt;/p&gt;
&lt;p&gt;A few things to start, the odds do sum to 100%, so you&amp;rsquo;re guaranteed to win one of these things. Each win is independent and the odds don&amp;rsquo;t change as far as I can tell. So lets look at expected value:&lt;/p&gt;
&lt;h4 id=&#34;cash-prizes&#34;&gt;&amp;ldquo;Cash&amp;rdquo; Prizes:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;10,000 Points @ 0.50%: 10,000 Points = ~$100, $100 * 0.50% = 50 cents&lt;/li&gt;
&lt;li&gt;7,500 Points	@ 0.75%: 7,500 Points = ~$75, $75 * 0.75% = 56.25 cents&lt;/li&gt;
&lt;li&gt;5,000 Points	@ 1.50%: 5,000 Points = ~$50, $50 * 1.50% = 75 cents&lt;/li&gt;
&lt;li&gt;2,500 Points	@ 2.50%: 2,500 Points = ~$25, $25 * 2.50% = 62.5 cents&lt;/li&gt;
&lt;li&gt;1,500 Points	@ 4.00%: 1,500 Points = ~$15, $15 * 4.00% = 60 cents&lt;/li&gt;
&lt;li&gt;1,250 Points	@ 5.00%: 1,250 Points = ~$12.50, $12.50 * 5.00% = 62.5 cents&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;Total EV: $.50 + $.5625 + $.75 + $62.5 + $.60 + $.625 = $3.6625&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Hmmm&amp;hellip; I hope we catch up a little bit on the cashback prizes.&lt;/p&gt;
&lt;h4 id=&#34;cashback-prizes&#34;&gt;Cashback Prizes:&lt;/h4&gt;
&lt;p&gt;A few notes on cashback:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We must factor in the fact that we would have earned 3% on these purchases anyway, thus, we have to take cashback% minus 3% to calculate the true net benefit&lt;/li&gt;
&lt;li&gt;To maximize the value you must spend up to the cap. This means you must WANT to purchase from where you win and be LIQUID/WILLING enough to make said purchase e.g. spend $3500 in the next 24 hours.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Assumptions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;I&amp;rsquo;m going to assume the opportunity cost of capital is $0, this is especially generous as the $500 you spend at Target could be used for investing in 0 DTE options on&amp;hellip; Robinhood!&amp;hellip;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For prizes with no Cap, I&amp;rsquo;m going to assume average cost (if I can find it) + 25%, otherwise just going to insert a reasonable guess&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For prizes with a Cap, I&amp;rsquo;m going to assume the reward is maximized&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I&amp;rsquo;m going to assume the above conditions hold for &lt;strong&gt;33% of the items below&lt;/strong&gt;. This is a big assumption, but it is fair given the variety of options and the previous conditions. This means we&amp;rsquo;ll cut our EV calculation for this section in 1/3 when it&amp;rsquo;s all said and done.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Disagree with my assumptions? I &lt;a href=&#34;https://github.com/sschnei8/mystery_box&#34;&gt;simulated the whole thing&lt;/a&gt; so you can test for yourself and see if it&amp;rsquo;s worth it for you. This is actually ripping the rewards straight from api.robinhood.com (and doing so poorly), so it will inevitably break at some point, but it&amp;rsquo;s fun for now!&lt;/p&gt;&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;10% cashback on next grocery purchase ($500 cap) @ 5.00%: $500 * (10-3)% = $35 * 5% = &lt;strong&gt;$1.75&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;10% cashback on next automotive gas purchase ($300 cap) @ 6.00%: $300 * (10-3)% = $21 * 6% = &lt;strong&gt;$1.26&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;5% cashback for 24 hours ($3,500 cap) @ 4.00%: $3500 * (5-3)% = $70 * 4% = &lt;strong&gt;$2.8&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;10% cashback on next Uber or Lyft ($300 cap) @ 7.00%: $300 * (10-3)% = $21 * 7% = &lt;strong&gt;$1.47&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;15% cashback on next Starbucks purchase @ 8.00%: $25 * (15-3)% = $3 * 8% = &lt;strong&gt;$.24&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;4% cashback for 24 hours ($3,000 cap) @ 4.50%: $3000 * (4-3)% = $30 * 4.5% = &lt;strong&gt;$1.35&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;5% cashback on next Amazon.com purchase ($500 cap) @ 8.00%: $500 * (5-3)% = $10 * 8% = &lt;strong&gt;$.80&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;5% cashback on next restaurant order ($500 cap) @ 8.00%: $500 * (5-3)% = $10 * 8% = &lt;strong&gt;$.80&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;5% cashback on next DoorDash or Uber Eats ($300 cap) @ 8.00%: $300 * (5-3)% = $6 * 8% = &lt;strong&gt;$.48&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;5% cashback on next Target purchase ($500 cap) @ 6.00%: $500 * (5-3)% = $10 * 6% = &lt;strong&gt;$.60&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;5% cashback on your next phone bill @ 6.00%: (&lt;a href=&#34;https://www.t-mobile.com/dialed-in/wireless/average-phone-bill-per-month&#34;&gt;$141&lt;/a&gt; * 1.25) * (5-3)% = $3.525 * 6% = &lt;strong&gt;$.2115&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;5% cashback on your next Lululemon, Alo Yoga or Vuori purchase @ 8.00%: $300 * (5-3)% = $6 * 8% = &lt;strong&gt;$.48&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;4% cashback on next spa purchase @ 7.00%: $300 * (4-3)% = $3 * 7% = &lt;strong&gt;$.21&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;5% cashback for 30 days ($10,000 cap) @ 0.25%: $10000 * (5-3)% = $200 * .25% = &lt;strong&gt;$.5&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Starbucks, Lululemon, Alo Yoga or Vuori, and Spa purchases I think are fair estimates. The phone bill at least has a source. Feel free to throw some different estimates &lt;a href=&#34;https://github.com/sschnei8/mystery_box&#34;&gt;in there&lt;/a&gt; and test it out for yourself.&lt;/p&gt;
&lt;p&gt;To find the total EV, we will sum the individual values:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$1.75 (Grocery)
$1.26 (Gas)
$2.80 (5% for 24h)
$1.47 (Uber/Lyft)
$0.24 (Starbucks)
$1.35 (4% for 24h)
$0.80 (Amazon)
$0.80 (Restaurant)
$0.48 (DoorDash/Uber Eats)
$0.60 (Target)
$0.2115 (Phone Bill)
$0.48 (Lululemon etc.)
$0.21 (Spa)
$0.50 (5% for 30 days)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And get: $12.9515 which we can divide by 3 to get $4.3172.&lt;/p&gt;
&lt;p&gt;Adding this to our cash prizes, we expect an EV of $3.6625 + $4.3172 = $7.9797!&lt;/p&gt;
&lt;p&gt;$10 in&amp;hellip; $7.9797 out. You can play around with the assumptions but unless you&amp;rsquo;re ready to maximize every single one of the Cashback prizes&amp;hellip; every single time you roll the dice on this Mystery Box you&amp;rsquo;re handing $2 back to Robinhood in the form of them not having to pay out the true value on their 3% rewards program.&lt;/p&gt;
&lt;p&gt;This is the definition of a Casino. Robinhood will argue that the program is more than fair as it&amp;rsquo;s positive EV for someone willing to maximize every single one of these rewards. We can go around in circles about this, but if you land on the &lt;strong&gt;5% cashback on next DoorDash or Uber Eats ($300 cap) @ 8.00%&lt;/strong&gt; the maximum value one can accrue is .02*300 = $6&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;funny-thoughts-this-is-not-legal-or-financial-advice&#34;&gt;Funny Thoughts (This is not legal or financial advice)&lt;/h2&gt;
&lt;p&gt;Ok so there are three uncapped offerings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;4% cashback on next spa purchase&lt;/li&gt;
&lt;li&gt;15% cashback on next Starbucks purchase&lt;/li&gt;
&lt;li&gt;5% cashback on your next Lululemon, Alo Yoga or Vuori purchase&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now if you haven&amp;rsquo;t head of Konstantin Anikeev let me &lt;a href=&#34;https://nstp.org/memberarea/federaltaxalert/2021/konstantin-anikeev-v-commissioner-tc-memo-2021-23&#34;&gt;introduce you&lt;/a&gt;. Konstantin curated this beauty:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Purchasing Gift Cards: Using his American Express 5% &amp;lsquo;cash back&amp;rsquo; Rewards Program, he Purchased Visa gift cards at grocery stores or pharmacies where the 5%Rewards applied.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Although Visa cards cannot be converted to cash, they can be used to purchase Money Orders. He would purchase the Money Orders with the Visa gift cards.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deposit the Money Orders to his Bank Account.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pay the Amex Balance.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Repeat to the tune of $6.4MM in purchases and $320,000 in &amp;lsquo;profits&amp;rsquo; by converting has 5% cashback in excess of fees&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There&amp;rsquo;s also an interesting tax ruling in Konstantin Anikeev v. Commissioner, but this should now draw your eyes to that uncapped 15% starbucks purchase. The 5% and 4% uncapped offerings are interesting, but 15%&amp;hellip;&lt;/p&gt;
&lt;p&gt;Lets say we call up Starbucks and tell them we have a $20,000 limit on a card paying 15% on our next purchase, how could they turn down this opportunity. Better yet, what if Starbucks wanted to outfit a few stores in Lululemon and Lululemon wanted to buy starbucks for its employees&amp;hellip; we could facilitate this trade, in which case I&amp;rsquo;d be hitting the mystery box like crazy.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Finger Under the Page</title>
      <link>/musings/finger_under_the_page/</link>
      <pubDate>Sat, 16 Aug 2025 00:00:00 +0000</pubDate>
      
      <guid>/musings/finger_under_the_page/</guid>
      <description>&lt;h1 id=&#34;reading&#34;&gt;Reading&lt;/h1&gt;
&lt;p&gt;I tend to put my fingers under the right page of a book in a rush to get to the next page. As soon as I do it, I&amp;rsquo;m already thinking about the next page and struggle to focus. Other times I&amp;rsquo;m not even thinking about the book&amp;hellip; just reading on auto pilot, paragraphs slipping by.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been catching myself doing this more. I can&amp;rsquo;t decide if it&amp;rsquo;s&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;a sign to move on from the book or&lt;/li&gt;
&lt;li&gt;a sign that my mind can&amp;rsquo;t (doesn&amp;rsquo;t want to) focus on reading.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As a catch myself doing this I re-read the last few paragraphs. If it keeps happening, I then have to decide between 1 &amp;amp; 2. I don&amp;rsquo;t want to force myself to read a good book when I don&amp;rsquo;t feel like reading, and I don&amp;rsquo;t want to force myself to read a book cover to cover just because &amp;ldquo;I started it&amp;rdquo;.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;reading&#34;&gt;Reading&lt;/h1&gt;
&lt;p&gt;I tend to put my fingers under the right page of a book in a rush to get to the next page. As soon as I do it, I&amp;rsquo;m already thinking about the next page and struggle to focus. Other times I&amp;rsquo;m not even thinking about the book&amp;hellip; just reading on auto pilot, paragraphs slipping by.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been catching myself doing this more. I can&amp;rsquo;t decide if it&amp;rsquo;s&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;a sign to move on from the book or&lt;/li&gt;
&lt;li&gt;a sign that my mind can&amp;rsquo;t (doesn&amp;rsquo;t want to) focus on reading.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As a catch myself doing this I re-read the last few paragraphs. If it keeps happening, I then have to decide between 1 &amp;amp; 2. I don&amp;rsquo;t want to force myself to read a good book when I don&amp;rsquo;t feel like reading, and I don&amp;rsquo;t want to force myself to read a book cover to cover just because &amp;ldquo;I started it&amp;rdquo;.&lt;/p&gt;
&lt;h1 id=&#34;driving&#34;&gt;Driving&lt;/h1&gt;
&lt;p&gt;I drive between Phoenix, AZ and Tucson, AZ a lot. 100 miles on the I-10, pretty much straight, set the cruise control and never touch the brake kind of drive.&lt;/p&gt;
&lt;p&gt;My Aunt came over for her birthday, and we talked about driving the speed limit. I recalled my false sense of urgency on the I-10 in a rush to get from one city to another. Someday I&amp;rsquo;ll reminisce about the drive. Maybe I&amp;rsquo;ll wish I hadn&amp;rsquo;t allowed it to blend into a meaningless annoyance only prolonged by slow drivers taking up the left lane.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m going to try and drive the speed limit. I&amp;rsquo;m going to do the drive no podcasts or music. Time to mix it up.&lt;/p&gt;
&lt;h1 id=&#34;school&#34;&gt;School&lt;/h1&gt;
&lt;p&gt;The first week of school was always really slow. New classes, new teachers, new peers, etc&amp;hellip; then everything normalizes and it&amp;rsquo;s like someone takes the speed slider and scrubs it to the max and you&amp;rsquo;re in the rinse cycle of the core of the semester.&lt;/p&gt;
&lt;p&gt;Then you open your eyes and its done.&lt;/p&gt;
&lt;p&gt;Months of tests, games, events, lectures, etc&amp;hellip; can now be boiled down to a pin head in your brain, something that had previously fully occupied your schedule/life and contained nearly all forward looking events can be distilled down to &amp;ldquo;Fall Semester Sophomore year&amp;rdquo;&amp;hellip; a time period you can only recall memorable events from, the mundane washed over.&lt;/p&gt;
&lt;h1 id=&#34;life&#34;&gt;Life&lt;/h1&gt;
&lt;p&gt;Then you hit this post-school period. There&amp;rsquo;s no arbitrary delineation of time periods like semesters. Sure a company will post quarterly earnings, but it doesn&amp;rsquo;t mark a time where you&amp;rsquo;re faced with entirely new course work with a new group of peers.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s not really anyone challenging you to try new things or join a club, your friends are further away and it&amp;rsquo;s a little more difficult to make new ones. It&amp;rsquo;s crazy how fast you can slide from Monday to Sunday if you pay attention (or don&amp;rsquo;t).&lt;/p&gt;
&lt;h1 id=&#34;result&#34;&gt;Result&lt;/h1&gt;
&lt;p&gt;Approach the mundane with a renewed sense of observation in the minutia or put your own spin in on it.&lt;/p&gt;
&lt;p&gt;Try new things.&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t try and preemptively turn the page, enjoy the page. If you can&amp;rsquo;t enjoy the page, do something else you can focus on now.&lt;/p&gt;
&lt;p&gt;Stop wasting time doing trivial bullshit that accelerates the coagulation of life into a blurry sense of &amp;ldquo;past&amp;rdquo;.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 08-16-2025</title>
      <link>/learnedt1w/2025/08_16_2025/</link>
      <pubDate>Sat, 16 Aug 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/08_16_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://jeremywhittaker.com/index.php/2024/09/24/arbitrage-in-polymarket-com/&#34;&gt;Poly Market Arbing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnn.com/2025/08/12/business/kodak-survival-warning&#34;&gt;Uh Oh Kodak&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://finance.yahoo.com/quote/LESL/financials/?guccounter=1&#34;&gt;Leslie&amp;rsquo;s has some&amp;hellip; uh&amp;hellip; debt obligations&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/i0RkEs3Xwf0?si=jGc3kbmewSHGaROT&#34;&gt;Clams in poland&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=aOwmt39L2IQ&#34;&gt;Alcohol&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=2_tYbWOnAY4&#34;&gt;Creatine in cycling&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://jeremywhittaker.com/index.php/2024/09/24/arbitrage-in-polymarket-com/&#34;&gt;Poly Market Arbing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnn.com/2025/08/12/business/kodak-survival-warning&#34;&gt;Uh Oh Kodak&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://finance.yahoo.com/quote/LESL/financials/?guccounter=1&#34;&gt;Leslie&amp;rsquo;s has some&amp;hellip; uh&amp;hellip; debt obligations&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/i0RkEs3Xwf0?si=jGc3kbmewSHGaROT&#34;&gt;Clams in poland&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=aOwmt39L2IQ&#34;&gt;Alcohol&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=2_tYbWOnAY4&#34;&gt;Creatine in cycling&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Letters to a Young Poet</title>
      <link>/books/letters_to_a_young_poet/</link>
      <pubDate>Sun, 10 Aug 2025 00:00:00 +0000</pubDate>
      
      <guid>/books/letters_to_a_young_poet/</guid>
      <description>&lt;h2 id=&#34;the-book&#34;&gt;The book&lt;/h2&gt;
&lt;p&gt;This will serve to store notes/insights/thoughts about &lt;a href=&#34;https://en.wikipedia.org/wiki/Letters_to_a_Young_Poet&#34;&gt;Letters to a Young Poet&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;quotes&#34;&gt;Quotes&lt;/h3&gt;
&lt;p&gt;Xix- solitude is not merely a matter of being alone. It is a territory to be entered and occupied.&lt;/p&gt;
&lt;p&gt;XX – when doubts arise, simply “school them”: “Instead of being demolishers they will be among your best workers”&lt;/p&gt;
&lt;p&gt;Page 5 – things are not all as graspable and sayable as on the whole we are led to believe; most events are unsayable, occur in a space that no word has ever penetrated, and most unsayable of all are works of art&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;the-book&#34;&gt;The book&lt;/h2&gt;
&lt;p&gt;This will serve to store notes/insights/thoughts about &lt;a href=&#34;https://en.wikipedia.org/wiki/Letters_to_a_Young_Poet&#34;&gt;Letters to a Young Poet&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;quotes&#34;&gt;Quotes&lt;/h3&gt;
&lt;p&gt;Xix- solitude is not merely a matter of being alone. It is a territory to be entered and occupied.&lt;/p&gt;
&lt;p&gt;XX – when doubts arise, simply “school them”: “Instead of being demolishers they will be among your best workers”&lt;/p&gt;
&lt;p&gt;Page 5 – things are not all as graspable and sayable as on the whole we are led to believe; most events are unsayable, occur in a space that no word has ever penetrated, and most unsayable of all are works of art&lt;/p&gt;
&lt;p&gt;Page 13 – allow your verdict, their own quiet untroubled development, which like all progress must come from deep within and cannot be forced or accelerated&lt;/p&gt;
&lt;p&gt;Page 14 – to be an artist means: not to calculate and count; to grow and ripen like a tree, which does not hurry the flow of sap and stands at ease in the spring gales without fearing that no summer may follow.&lt;/p&gt;
&lt;p&gt;Page 22 – but your solitude, even in the midst of quite foreign circumstances, will be a hold and a home for you, and leading from it you will find all the paths you need&lt;/p&gt;
&lt;p&gt;Page 32 - we know little but that we must hold fast to what is difficult is a certainty that will never forsake us. It is good to be alone, for solitude is difficult; that something is difficult should be one more reason to do it.&lt;/p&gt;
&lt;p&gt;Page 40 – just as for a long time people were deceived about the movement of the sun, so we are still deceived about the movement of what is to come. The future is fixed, dear Mr. Kappus, but we move around in infinite space.&lt;/p&gt;
&lt;p&gt;Page 42: perhaps everything terrifying is deep down a helpless thing that needs our help.&lt;/p&gt;
&lt;h3 id=&#34;notes&#34;&gt;Notes&lt;/h3&gt;
&lt;p&gt;I liked it, some went over my head and some of it didn&amp;rsquo;t.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 08-09-2025</title>
      <link>/learnedt1w/2025/08_09_2025/</link>
      <pubDate>Sat, 09 Aug 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/08_09_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://thereader.mitpress.mit.edu/the-secret-history-of-tor-how-a-military-project-became-a-lifeline-for-privacy/&#34;&gt;tor history&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://eidel.io/exit-tax-leave-germany-before-your-business-gets-big/&#34;&gt;Germany exit taxes&amp;hellip;incentives&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.digitaldigging.org/p/chatgpt-confessions-gone-they-are&#34;&gt;Oops&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.buildcanada.com/en/projects&#34;&gt;a little transparency goes a long way&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://pubmed.ncbi.nlm.nih.gov/37770574/&#34;&gt;Waist to height ratio better than bmi?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.gutenberg.org/files/6765/6765-h/6765-h.htm#link2H_4_0002&#34;&gt;MOGENS by  Jens Peter Jacobsen, I&amp;rsquo;d like to read&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/allie__voss/status/1953182700774261004/photo/1&#34;&gt;Don’t start with the thank you. &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://lee-naish.github.io/src/posavespeed/&#34;&gt;Equivalent speed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wsj.com/arts-culture/food-cooking/oreos-inside-reeses-reeses-inside-oreos-its-the-manhattan-project-of-snacks-a1f71e65?st=hWwpq1&#34;&gt;Reese + Oreo, incredible&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://thereader.mitpress.mit.edu/the-secret-history-of-tor-how-a-military-project-became-a-lifeline-for-privacy/&#34;&gt;tor history&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://eidel.io/exit-tax-leave-germany-before-your-business-gets-big/&#34;&gt;Germany exit taxes&amp;hellip;incentives&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.digitaldigging.org/p/chatgpt-confessions-gone-they-are&#34;&gt;Oops&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.buildcanada.com/en/projects&#34;&gt;a little transparency goes a long way&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://pubmed.ncbi.nlm.nih.gov/37770574/&#34;&gt;Waist to height ratio better than bmi?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.gutenberg.org/files/6765/6765-h/6765-h.htm#link2H_4_0002&#34;&gt;MOGENS by  Jens Peter Jacobsen, I&amp;rsquo;d like to read&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/allie__voss/status/1953182700774261004/photo/1&#34;&gt;Don’t start with the thank you. &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://lee-naish.github.io/src/posavespeed/&#34;&gt;Equivalent speed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.wsj.com/arts-culture/food-cooking/oreos-inside-reeses-reeses-inside-oreos-its-the-manhattan-project-of-snacks-a1f71e65?st=hWwpq1&#34;&gt;Reese + Oreo, incredible&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 08-02-2025</title>
      <link>/learnedt1w/2025/08_02_2025/</link>
      <pubDate>Sat, 02 Aug 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/08_02_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://ubuntu.com/about&#34;&gt;Ubuntu is an ancient African word meaning ‘humanity to others’&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://byteofdev.com/posts/making-postgres-slow/&#34;&gt;Ruining postgres&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bikepacking.com/plog/when-we-get-komooted/&#34;&gt;VC!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gchq.github.io/CyberChef/&#34;&gt;Web app for decoding&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://cs3110.github.io/textbook/chapters/appendix/bigoh.html&#34;&gt;Big O Caml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.hyrumslaw.com/&#34;&gt;hyrumslaw&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;With a sufficient number of users of an API,
it does not matter what you promise in the contract:
all observable behaviors of your system
will be depended on by somebody.&amp;rdquo;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://theisolationjournals.substack.com/p/self-employed-self-exhausted&#34;&gt;Taking a break&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To make a prairie it takes a clover and one bee,
One clover, and a bee.
And revery.
The revery alone will do,
If bees are few.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://ubuntu.com/about&#34;&gt;Ubuntu is an ancient African word meaning ‘humanity to others’&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://byteofdev.com/posts/making-postgres-slow/&#34;&gt;Ruining postgres&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bikepacking.com/plog/when-we-get-komooted/&#34;&gt;VC!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gchq.github.io/CyberChef/&#34;&gt;Web app for decoding&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://cs3110.github.io/textbook/chapters/appendix/bigoh.html&#34;&gt;Big O Caml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.hyrumslaw.com/&#34;&gt;hyrumslaw&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;With a sufficient number of users of an API,
it does not matter what you promise in the contract:
all observable behaviors of your system
will be depended on by somebody.&amp;rdquo;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://theisolationjournals.substack.com/p/self-employed-self-exhausted&#34;&gt;Taking a break&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To make a prairie it takes a clover and one bee,
One clover, and a bee.
And revery.
The revery alone will do,
If bees are few.&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Emily Dickinson:&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Nan-in (南隠), a Japanese master during the Meiji era (1868-1912), received a university professor who came to inquire about Zen. Nan-in served tea. He poured his visitor’s cup full, and then kept on pouring. The professor watched the overflow until he no longer could restrain himself. “It is overfull. No more will go in!” “Like this cup,” Nan-in said, “you are full of your own opinions and speculations. How can I show you Zen unless you first empty your cup?”&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Expression, carrying the elegance that comes from compressed energy, is like a perfectly tuned stringed instrument: the strings are taut to exact degrees to correspond to exact pitches that stand in exact relations to one another. The pitches and their relations exist before the strings are tuned. Each string is tuned to a pitch and the results are judged by comparison to this pre-existing reality. A musician tuning an instrument is not finished until everything is exactly right, but once it is exactly right, there is simply nothing left to do.&amp;rdquo; &amp;ndash; Clear and Simple as the Truth: Writing Classic Prose, Thomas, Turner.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 07-26-2025</title>
      <link>/learnedt1w/2025/07_26_2025/</link>
      <pubDate>Sat, 26 Jul 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/07_26_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://yberreby.com/posts/i-used-arch-btw-macos-day-1/&#34;&gt;Setting up a new mac&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.raycast.com/0&#34;&gt;Addded Raycast to my Mac and it&amp;rsquo;s quite nice&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://modelcontextprotocol.io/quickstart/server#python&#34;&gt;Quick start mcp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://idiallo.com/blog/zipbomb-protection&#34;&gt;Zip Bomb server protection&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://thenewstack.io/mcp-is-rss-for-ai-more-use-cases-for-model-context-protocol/&#34;&gt;don’t just red docs, also talk to them&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Interesting, pretty undeniable use case for LLMs that&amp;rsquo;s effective&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.askesis.pl/post/2017/04/how-to-debug-zsh-startup-time.html&#34;&gt;zprof&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/aws/aws-toolkit-vscode/commit/1294b38b7fade342cfcbaf7cf80e2e5096ea1f9c&#34;&gt;Letting Q run wild&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://yberreby.com/posts/i-used-arch-btw-macos-day-1/&#34;&gt;Setting up a new mac&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.raycast.com/0&#34;&gt;Addded Raycast to my Mac and it&amp;rsquo;s quite nice&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://modelcontextprotocol.io/quickstart/server#python&#34;&gt;Quick start mcp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://idiallo.com/blog/zipbomb-protection&#34;&gt;Zip Bomb server protection&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://thenewstack.io/mcp-is-rss-for-ai-more-use-cases-for-model-context-protocol/&#34;&gt;don’t just red docs, also talk to them&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Interesting, pretty undeniable use case for LLMs that&amp;rsquo;s effective&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.askesis.pl/post/2017/04/how-to-debug-zsh-startup-time.html&#34;&gt;zprof&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/aws/aws-toolkit-vscode/commit/1294b38b7fade342cfcbaf7cf80e2e5096ea1f9c&#34;&gt;Letting Q run wild&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 07-19-2025</title>
      <link>/learnedt1w/2025/07_19_2025/</link>
      <pubDate>Sat, 19 Jul 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/07_19_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://erisa.dev/exposing-a-web-service-with-cloudflare-tunnel/&#34;&gt;Cloudflare Tunnels interesting to check out&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.makingsoftware.com/chapters/how-a-screen-works&#34;&gt;How a screen works&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://evanhahn.com/local-llms-versus-offline-wikipedia/&#34;&gt;Local LLM&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://finance.yahoo.com/news/amazon-kuiper-satellites-boost-rival-222610835.html&#34;&gt;Is this a “we are not a monopoly” play?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://paulkedrosky.com/honey-ai-capex-ate-the-economy/&#34;&gt;AI Capex&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nature.com/articles/d41586-025-00961-z&#34;&gt;New Anti-biotic&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://erisa.dev/exposing-a-web-service-with-cloudflare-tunnel/&#34;&gt;Cloudflare Tunnels interesting to check out&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.makingsoftware.com/chapters/how-a-screen-works&#34;&gt;How a screen works&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://evanhahn.com/local-llms-versus-offline-wikipedia/&#34;&gt;Local LLM&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://finance.yahoo.com/news/amazon-kuiper-satellites-boost-rival-222610835.html&#34;&gt;Is this a “we are not a monopoly” play?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://paulkedrosky.com/honey-ai-capex-ate-the-economy/&#34;&gt;AI Capex&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nature.com/articles/d41586-025-00961-z&#34;&gt;New Anti-biotic&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 07-12-2025</title>
      <link>/learnedt1w/2025/07_12_2025/</link>
      <pubDate>Sat, 12 Jul 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/07_12_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Put Doom on a Peloton:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Found the Wifi Debugging screen&lt;/li&gt;
&lt;li&gt;Downloaded Android SDK Platform-Tools and used &lt;a href=&#34;https://developer.android.com/tools/adb&#34;&gt;adb&lt;/a&gt; to connect and inspect the android tablet. &lt;code&gt;./adp pair and then ./adp connect&lt;/code&gt; and &lt;code&gt; ./adb shell&lt;/code&gt; to get a shell&lt;/li&gt;
&lt;li&gt;Can even take a screenshot and pull it back onto my computer &lt;code&gt;screencap /sdcard/myscreen.png&lt;/code&gt; &amp;amp; &lt;code&gt;./adb pull /sdcard/myscreen.png&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;I side loaded Nova Launcher by downloading the &lt;a href=&#34;https://en.wikipedia.org/wiki/Apk_%28file_format%29&#34;&gt;.apk&lt;/a&gt; and using &lt;code&gt;./adb install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Then for doom, I found another .apk for Doom and grabbed &lt;a href=&#34;https://doomwiki.org/wiki/DOOM1.WAD&#34;&gt;doom1.wad&lt;/a&gt; from the Doom wiki. Pushed the .wad to a new doom directory I created on the tablet &lt;code&gt;./adb push doom1.wad /sdcard/Doom/&lt;/code&gt; and then installed the doom apk.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And then we had doom:&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Put Doom on a Peloton:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Found the Wifi Debugging screen&lt;/li&gt;
&lt;li&gt;Downloaded Android SDK Platform-Tools and used &lt;a href=&#34;https://developer.android.com/tools/adb&#34;&gt;adb&lt;/a&gt; to connect and inspect the android tablet. &lt;code&gt;./adp pair and then ./adp connect&lt;/code&gt; and &lt;code&gt; ./adb shell&lt;/code&gt; to get a shell&lt;/li&gt;
&lt;li&gt;Can even take a screenshot and pull it back onto my computer &lt;code&gt;screencap /sdcard/myscreen.png&lt;/code&gt; &amp;amp; &lt;code&gt;./adb pull /sdcard/myscreen.png&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;I side loaded Nova Launcher by downloading the &lt;a href=&#34;https://en.wikipedia.org/wiki/Apk_%28file_format%29&#34;&gt;.apk&lt;/a&gt; and using &lt;code&gt;./adb install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Then for doom, I found another .apk for Doom and grabbed &lt;a href=&#34;https://doomwiki.org/wiki/DOOM1.WAD&#34;&gt;doom1.wad&lt;/a&gt; from the Doom wiki. Pushed the .wad to a new doom directory I created on the tablet &lt;code&gt;./adb push doom1.wad /sdcard/Doom/&lt;/code&gt; and then installed the doom apk.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And then we had doom:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Doom-min.png&#34; alt=&#34;Doom&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://everything.curl.dev/how-to-read.html&#34;&gt;Everything curl!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Dig_%28command%29&#34;&gt;Dig&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;uname -a&lt;/code&gt; to get operating system info&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;When the &lt;a href=&#34;https://www.coinbase.com/creditcard&#34;&gt;Credit Cards&lt;/a&gt; start &lt;a href=&#34;https://crypto.com/us/cards&#34;&gt;rolling&lt;/a&gt; out you know Crypto is BACK!&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 07-05-2025</title>
      <link>/learnedt1w/2025/07_05_2025/</link>
      <pubDate>Sat, 05 Jul 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/07_05_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.mgdproductions.com/ikko-activebuds/&#34;&gt;What&amp;rsquo;s security for anyway?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://tailscale.com/blog/how-nat-traversal-works&#34;&gt;How NAT Traversal Works&lt;/a&gt;
- Let’s say you’re making your own protocol and that you want NAT traversal. The protocol should be based on UDP.
- For UDP, the rule is very simple: the firewall allows an inbound UDP packet if it previously saw a matching outbound packet.
- The problems start when two of our “clients” want to talk directly. Now the firewalls are facing each other. According to the rule we established above, this means both sides must go first, but also that neither can go first.
- So, to traverse these multiple stateful firewalls, we need to share some information to get underway: the peers have to know in advance the ip:port their counterpart is using. Tailscale has set up a &lt;a href=&#34;https://tailscale.com/blog/how-tailscale-works#the-control-plane-key-exchange-and-coordination&#34;&gt;coordination server&lt;/a&gt; for this purpose
- Stateful firewalls have limited memory, meaning that we need periodic communication to keep connections alive. If no packets are seen for a while (a common value for UDP is 30 seconds), the firewall forgets about the session, and we have to start over. To avoid this, we use a timer and must either send packets regularly to reset the timers, or have some out-of-band way of restarting the connection on demand.
- The most common use of SNAT is to connect many devices to the internet, using fewer IP addresses than the number of devices. In the case of consumer-grade routers, we map all devices onto a single public-facing IP address.
-  the same principle applies on corporate networks. The usual difference there is that the NAT layer consists of multiple machines (for high availability or capacity reasons), and they can have more than one public IP address, so that they have more public ip:port combinations to choose from and can sustain more active clients at once.
- STUN relies on a simple observation: when you talk to a server on the internet from a NATed client, the server sees the public ip:port that your NAT device created for you, not your LAN ip:port. So, the server can tell you what ip:port it saw. That way, you know what traffic from your LAN ip:port looks like on the internet&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.mgdproductions.com/ikko-activebuds/&#34;&gt;What&amp;rsquo;s security for anyway?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://tailscale.com/blog/how-nat-traversal-works&#34;&gt;How NAT Traversal Works&lt;/a&gt;
- Let’s say you’re making your own protocol and that you want NAT traversal. The protocol should be based on UDP.
- For UDP, the rule is very simple: the firewall allows an inbound UDP packet if it previously saw a matching outbound packet.
- The problems start when two of our “clients” want to talk directly. Now the firewalls are facing each other. According to the rule we established above, this means both sides must go first, but also that neither can go first.
- So, to traverse these multiple stateful firewalls, we need to share some information to get underway: the peers have to know in advance the ip:port their counterpart is using. Tailscale has set up a &lt;a href=&#34;https://tailscale.com/blog/how-tailscale-works#the-control-plane-key-exchange-and-coordination&#34;&gt;coordination server&lt;/a&gt; for this purpose
- Stateful firewalls have limited memory, meaning that we need periodic communication to keep connections alive. If no packets are seen for a while (a common value for UDP is 30 seconds), the firewall forgets about the session, and we have to start over. To avoid this, we use a timer and must either send packets regularly to reset the timers, or have some out-of-band way of restarting the connection on demand.
- The most common use of SNAT is to connect many devices to the internet, using fewer IP addresses than the number of devices. In the case of consumer-grade routers, we map all devices onto a single public-facing IP address.
-  the same principle applies on corporate networks. The usual difference there is that the NAT layer consists of multiple machines (for high availability or capacity reasons), and they can have more than one public IP address, so that they have more public ip:port combinations to choose from and can sustain more active clients at once.
- STUN relies on a simple observation: when you talk to a server on the internet from a NATed client, the server sees the public ip:port that your NAT device created for you, not your LAN ip:port. So, the server can tell you what ip:port it saw. That way, you know what traffic from your LAN ip:port looks like on the internet&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Internet_Stream_Protocol&#34;&gt;IPv5&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.cloudflare.com/the-road-to-quic/&#34;&gt;Pros/Cons of QUIC&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/WireGuard&#34;&gt;Wireguard uses only UDP&lt;/a&gt; due in part to the &lt;a href=&#34;https://en.wikipedia.org/wiki/Tunneling_protocol#TCP_meltdown_problem&#34;&gt;TCP Meltdown Problem&lt;/a&gt;. Creator of Wireguard&amp;rsquo;s &lt;a href=&#34;https://www.jasondonenfeld.com/&#34;&gt;website&lt;/a&gt; is pretty wild&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Port_forwarding&#34;&gt;Port Forwarding&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.passwordstore.org/&#34;&gt;UNIX password manager&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/boldsoftware/sketch?tab=readme-ov-file&#34;&gt;Sketch starts a docker container and outputs its work onto a branch in your host git repository.&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://doctorow.medium.com/social-quitting-1ce85b67b456&#34;&gt;enshittification&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;But network effects cut both ways. If a system gets more valuable as it attracts more users, it also gets less valuable as it sheds users. The less valuable a system is to you, the easier it is to leave.&lt;/li&gt;
&lt;li&gt;When switching costs are high, services can be changed in ways that you dislike without losing your business. The higher the switching costs, the more a company can abuse you, because it knows that as bad as they’ve made things for you, you’d have to endure worse if you left.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.google.com/intl/en/ipv6/statistics.html&#34;&gt;IPv6 Adoption&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://crawshaw.io/blog/remembering-the-lan&#34;&gt;Third, I need to help new programmers who never got to experience simple, pleasurable programming in a safe environment understand that programming can be fun.&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 06-28-2025</title>
      <link>/learnedt1w/2025/06_28_2025/</link>
      <pubDate>Sat, 28 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/06_28_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.folklore.org/Negative_2000_Lines_Of_Code.html&#34;&gt;Bad measures&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/58972251/what-does-x-packages-are-looking-for-funding-mean-when-running-npm-install&#34;&gt;What NPM Fund means&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;View ipv4/v6 Route tables: &lt;code&gt;netstat -r&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Typically for ISPs give out more than a /64 for ipv6 so people can have multiple networks (/60 or /56 possibly) /64 only allows for one ipv6 network so if you were to have multiple vlans at home you’d have some issues with a /64&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://jamesmcm.github.io/blog/no-ipv4/&#34;&gt;IPv4&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.detroitnews.com/story/news/local/detroit-city/2025/06/27/witnesses-helicopter-dropped-thousands-of-dollars-onto-gratiot-avenue-detroit-michigan/84391286007/&#34;&gt;Dropping thousands of dollars on peoples head from a helicopter&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.folklore.org/Negative_2000_Lines_Of_Code.html&#34;&gt;Bad measures&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/58972251/what-does-x-packages-are-looking-for-funding-mean-when-running-npm-install&#34;&gt;What NPM Fund means&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;View ipv4/v6 Route tables: &lt;code&gt;netstat -r&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Typically for ISPs give out more than a /64 for ipv6 so people can have multiple networks (/60 or /56 possibly) /64 only allows for one ipv6 network so if you were to have multiple vlans at home you’d have some issues with a /64&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://jamesmcm.github.io/blog/no-ipv4/&#34;&gt;IPv4&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.detroitnews.com/story/news/local/detroit-city/2025/06/27/witnesses-helicopter-dropped-thousands-of-dollars-onto-gratiot-avenue-detroit-michigan/84391286007/&#34;&gt;Dropping thousands of dollars on peoples head from a helicopter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Simpson%27s_paradox&#34;&gt;Simpsons Paradox&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.birdsandblooms.com/birding/attracting-hummingbirds/hummingbird-heart-rate/&#34;&gt;Facts about hummingbirds&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Tetration&#34;&gt;Tetration!&lt;/a&gt; &amp;amp;&amp;amp; &lt;a href=&#34;https://en.m.wikipedia.org/wiki/Pentation&#34;&gt;Pentation!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://brainstellar.com/&#34;&gt;Fun logic puzzles&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Pink_fairy_armadillo&#34;&gt;Pink fairy armadillo&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 06-21-2025</title>
      <link>/learnedt1w/2025/06_21_2025/</link>
      <pubDate>Sat, 21 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/06_21_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/hyperloglog-overview.html&#34;&gt;HyperLogLog in Redshift&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.snowflake.com/en/user-guide/tables-hybrid&#34;&gt;OLTP Snowflake&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=dnWqYjrlV1g&#34;&gt;In Clickhouse primary keys do not represent a unique row, it represents the sort order of how data is stored in the file system for merge tree tables&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=_Pqfjer8-O4&#34;&gt;Cool Animations&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.justice.gov/opa/pr/usaid-official-and-three-corporate-executives-plead-guilty-decade-long-bribery-scheme&#34;&gt;A touch of bribery&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=3yDoFJx0P3w&#34;&gt;Rattlesnakes of Arizona&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://thehustle.co/why-its-nearly-impossible-to-buy-an-original-bob-ross-painting&#34;&gt;Bob is hard to come by&lt;/a&gt;_&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;Geometric distribution: If you&amp;rsquo;ve flipped 10 tails in a row, you&amp;rsquo;re NOT &amp;ldquo;due&amp;rdquo; for heads. The next flip is still 50/50.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/hyperloglog-overview.html&#34;&gt;HyperLogLog in Redshift&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.snowflake.com/en/user-guide/tables-hybrid&#34;&gt;OLTP Snowflake&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=dnWqYjrlV1g&#34;&gt;In Clickhouse primary keys do not represent a unique row, it represents the sort order of how data is stored in the file system for merge tree tables&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=_Pqfjer8-O4&#34;&gt;Cool Animations&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.justice.gov/opa/pr/usaid-official-and-three-corporate-executives-plead-guilty-decade-long-bribery-scheme&#34;&gt;A touch of bribery&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=3yDoFJx0P3w&#34;&gt;Rattlesnakes of Arizona&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://thehustle.co/why-its-nearly-impossible-to-buy-an-original-bob-ross-painting&#34;&gt;Bob is hard to come by&lt;/a&gt;_&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;Geometric distribution: If you&amp;rsquo;ve flipped 10 tails in a row, you&amp;rsquo;re NOT &amp;ldquo;due&amp;rdquo; for heads. The next flip is still 50/50.&lt;/p&gt;
&lt;p&gt;Exponential distribution : If you&amp;rsquo;ve waited 20 minutes for the bus, the next minute is just as likely to bring the bus as the first minute was.&lt;/p&gt;
&lt;p&gt;Binomial	Number of successes in n trials	How many heads in 10 coin flips?
Geometric	Number of trials until first success&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>Your Data Warehouse Ignores Your Primary Key</title>
      <link>/posts/redshift_pk/</link>
      <pubDate>Thu, 19 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>/posts/redshift_pk/</guid>
      <description>&lt;h2 id=&#34;the-agenda&#34;&gt;The agenda&amp;hellip;&lt;/h2&gt;
&lt;p&gt;Today we&amp;rsquo;re digging into the curious case of &amp;ldquo;&lt;a href=&#34;https://en.wikipedia.org/wiki/Primary_key&#34;&gt;Primary Keys&lt;/a&gt;&amp;rdquo; in modern data warehouses (think Redshift, BigQuery, Snowflake). On the menu:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A high-stakes request from our VP&lt;/li&gt;
&lt;li&gt;What happens when a &lt;code&gt;PRIMARY KEY&lt;/code&gt; doesn&amp;rsquo;t do what you think it does&lt;/li&gt;
&lt;li&gt;A hands-on experiment in Postgres to see why OLAP systems choose not to enforce a PK&lt;/li&gt;
&lt;li&gt;A dash of data quality, some opinions, and a tangent or two&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;a-little-background&#34;&gt;A little background&lt;/h2&gt;
&lt;p&gt;Lets take Redshift for example. In Redshift, primary keys are &lt;em&gt;&lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/t_Defining_constraints.html&#34;&gt;informational only&lt;/a&gt;&lt;/em&gt;; they are not enforced. However, the query optimizer will trust our declaration and use it to create more efficient execution plans. How &lt;em&gt;silly&lt;/em&gt; of Redshift to trust us like that.&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;the-agenda&#34;&gt;The agenda&amp;hellip;&lt;/h2&gt;
&lt;p&gt;Today we&amp;rsquo;re digging into the curious case of &amp;ldquo;&lt;a href=&#34;https://en.wikipedia.org/wiki/Primary_key&#34;&gt;Primary Keys&lt;/a&gt;&amp;rdquo; in modern data warehouses (think Redshift, BigQuery, Snowflake). On the menu:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A high-stakes request from our VP&lt;/li&gt;
&lt;li&gt;What happens when a &lt;code&gt;PRIMARY KEY&lt;/code&gt; doesn&amp;rsquo;t do what you think it does&lt;/li&gt;
&lt;li&gt;A hands-on experiment in Postgres to see why OLAP systems choose not to enforce a PK&lt;/li&gt;
&lt;li&gt;A dash of data quality, some opinions, and a tangent or two&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;a-little-background&#34;&gt;A little background&lt;/h2&gt;
&lt;p&gt;Lets take Redshift for example. In Redshift, primary keys are &lt;em&gt;&lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/t_Defining_constraints.html&#34;&gt;informational only&lt;/a&gt;&lt;/em&gt;; they are not enforced. However, the query optimizer will trust our declaration and use it to create more efficient execution plans. How &lt;em&gt;silly&lt;/em&gt; of Redshift to trust us like that.&lt;/p&gt;
&lt;p&gt;This is not shocking to the seasoned data warehouse connoisseur, but to the uninitiated this may look unnerving. So for anyone unfamiliar here&amp;rsquo;s what I mean.&lt;/p&gt;
&lt;h2 id=&#34;our-vp-needs-to-know&#34;&gt;Our VP needs to know&lt;/h2&gt;
&lt;p&gt;Our VP needs to know if Bob is hungry or not to understand whether our start up is doing good or bad.&lt;/p&gt;
&lt;p&gt;Yikes, we deleted all our data when the U.S. &lt;a href=&#34;https://www.spacecom.mil/&#34;&gt;Space Command&lt;/a&gt; was investigating us for fraud! We can&amp;rsquo;t tell our VP that we don&amp;rsquo;t know anything about Bob so lets insert some random records into our datawarehouse. We&amp;rsquo;ll need to start from scratch!&lt;/p&gt;
&lt;p&gt;First lets make a new table and define a primary key.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- REMEMBER! When Storing strings make sure to take up as much space as possible 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Defining these columns as CHAR pads strings with blanks to ensure we waste as much space as we can 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Everyone will love you for this, and you&amp;#39;ll probably get promoted!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; CHECK123 (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SOME_ID CHAR(&lt;span style=&#34;color:#ae81ff&#34;&gt;4096&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;PRIMARY&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;KEY&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Ahh, a nice PK
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;AN_ATTRIBUTE CHAR(&lt;span style=&#34;color:#ae81ff&#34;&gt;4096&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ANOTHER_ATTRIBUTE CHAR(&lt;span style=&#34;color:#ae81ff&#34;&gt;4096&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SOME_NUMBER INT4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Alright lets manually insert our correct data!&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; CHECK123
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;VALUES&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;abc123&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Bob&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Hungry&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Hmmm...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;     , (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;wow&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Big Tom&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Fast&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;86&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;this&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Dale&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Thoughtful&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;is&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Doug&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Tired&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;pretty&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Hammer time&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Happy&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;annoying&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;The bug unit&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Angry&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;abc123&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Whopper&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Sad&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Hmmm...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And run our important query that our VP needs. We don&amp;rsquo;t have time for data quality checks so lets throw it into Excel and send it everywhere.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; SOME_ID
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; CHECK123
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;GROUP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; SOME_ID;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;abc123,&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- UH OH!!!!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;wow,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;this,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;is&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pretty,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;annoying,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;DISTINCT&lt;/span&gt; SOME_ID &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; CHECK123;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;abc123 &lt;span style=&#34;color:#75715e&#34;&gt;-- UH OH!!!!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;wow
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;this
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;is&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pretty
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;annoying
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;abc123  &lt;span style=&#34;color:#75715e&#34;&gt;-- UH OH!!!!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Oh no&amp;hellip; we have duplicate records even after writing &lt;code&gt;SELECT DISTINCT&lt;/code&gt;. &lt;em&gt;But I thought &lt;code&gt;SELECT DISTINCT&lt;/code&gt; would remove duplicates?&lt;/em&gt; Well, yes, but&amp;hellip; we declared SOME_ID as a PRIMARY KEY, effectively telling Redshift, &amp;ldquo;I solemnly swear this column contains no duplicates.&amp;rdquo; The query optimizer, trusting us completely, chooses the most efficient execution plan: it just scans the column and hands it back without performing a costly deduplication step. Why would it? We already promised it was unique.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Imagine someone gives you a book with &lt;a href=&#34;https://www.youtube.com/watch?v=EJR1H5tf5wE&#34;&gt;1,000,000&lt;/a&gt; unsorted names in it and tells you they are unique. Then they say, &lt;em&gt;&amp;ldquo;cross out any duplicate names and hand the book back to me&amp;rdquo;&lt;/em&gt;. You&amp;rsquo;re initial reaction is to immediately throw that book back as checking for uniqueness of one million names sounds&amp;hellip; well&amp;hellip; awful.&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class=&#34;book-throw-animation-container&#34; style=&#34;max-width: 500px; margin: 1.5em auto; text-align: center;&#34;&gt;
    &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 400 150&#34;&gt;
        &lt;defs&gt;
            &lt;g id=&#34;figure-def&#34;&gt;
                &lt;circle r=&#34;8&#34; cx=&#34;0&#34; cy=&#34;84&#34; fill=&#34;currentColor&#34;/&gt;
                &lt;line x1=&#34;0&#34; y1=&#34;92&#34; x2=&#34;0&#34; y2=&#34;105&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
                &lt;line x1=&#34;0&#34; y1=&#34;105&#34; x2=&#34;-8&#34; y2=&#34;120&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
                &lt;line x1=&#34;0&#34; y1=&#34;105&#34; x2=&#34;8&#34; y2=&#34;120&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
                &lt;line x1=&#34;0&#34; y1=&#34;98&#34; x2=&#34;-10&#34; y2=&#34;105&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
            &lt;/g&gt;
            &lt;rect id=&#34;book-def&#34; width=&#34;15&#34; height=&#34;20&#34; rx=&#34;2&#34; fill=&#34;#c57436&#34;/&gt;
        &lt;/defs&gt;

        &lt;line x1=&#34;10&#34; y1=&#34;120&#34; x2=&#34;390&#34; y2=&#34;120&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1&#34; stroke-linecap=&#34;round&#34;/&gt;

        &lt;g id=&#34;thrower&#34;&gt;
            &lt;use href=&#34;#figure-def&#34; x=&#34;50&#34; y=&#34;0&#34;/&gt;
            &lt;line x1=&#34;50&#34; y1=&#34;98&#34; x2=&#34;60&#34; y2=&#34;105&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; id=&#34;throwing-arm&#34;&gt;
                &lt;animateTransform id=&#34;anim-arm-swing&#34; attributeName=&#34;transform&#34; type=&#34;rotate&#34; from=&#34;0 50 98&#34; to=&#34;-45 50 98&#34; dur=&#34;0.5s&#34; begin=&#34;indefinite&#34; fill=&#34;freeze&#34; keyTimes=&#34;0; 0.6; 1&#34; values=&#34;0 50 98; -60 50 98; -45 50 98&#34;/&gt;
            &lt;/line&gt;
        &lt;/g&gt;

        
        &lt;g id=&#34;receiver-container&#34;&gt;
            
            &lt;use href=&#34;#figure-def&#34; x=&#34;260&#34; y=&#34;0&#34; id=&#34;receiver&#34;&gt;
                
                &lt;line x1=&#34;250&#34; y1=&#34;105&#34; x2=&#34;260&#34; y2=&#34;98&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
                
                &lt;animateTransform id=&#34;anim-fall-over&#34; attributeName=&#34;transform&#34; type=&#34;rotate&#34; from=&#34;0 268 120&#34; to=&#34;-90 268 120&#34; dur=&#34;0.5s&#34; begin=&#34;indefinite&#34; fill=&#34;freeze&#34; calcMode=&#34;spline&#34; keyTimes=&#34;0; 1&#34; keySplines=&#34;0.5 0 0.5 1&#34;/&gt;
            &lt;/use&gt;
        &lt;/g&gt;

        &lt;g id=&#34;book-wrapper&#34;&gt;
            &lt;use href=&#34;#book-def&#34; x=&#34;0&#34; y=&#34;0&#34;/&gt;
            
            &lt;text x=&#34;7.5&#34; y=&#34;-5&#34; text-anchor=&#34;middle&#34; font-family=&#34;sans-serif&#34; font-size=&#34;10px&#34; fill=&#34;currentColor&#34;&gt;book of names&lt;/text&gt;

            
            &lt;animateMotion id=&#34;anim-book-flight&#34; path=&#34;M 65 95 Q 155 50 250 95&#34; dur=&#34;1s&#34; begin=&#34;indefinite&#34; fill=&#34;freeze&#34; rotate=&#34;auto&#34;/&gt;
            
            &lt;animateMotion id=&#34;anim-book-drop&#34; path=&#34;M 250 95 L 250 100&#34; dur=&#34;0.3s&#34; begin=&#34;indefinite&#34; fill=&#34;freeze&#34;/&gt;
            &lt;animate id=&#34;anim-book-visibility&#34; attributeName=&#34;visibility&#34; from=&#34;hidden&#34; to=&#34;visible&#34; dur=&#34;0.1s&#34; begin=&#34;indefinite&#34; fill=&#34;freeze&#34;/&gt;
        &lt;/g&gt;
    &lt;/svg&gt;
&lt;/div&gt;

&lt;script&gt;
(function() {
    function setupAnimation(container) {
        const receiverNode = container.querySelector(&#39;#receiver&#39;);
        const pristineReceiver = receiverNode.cloneNode(true);
        const receiverContainer = container.querySelector(&#39;#receiver-container&#39;);

        const armNode = container.querySelector(&#39;#throwing-arm&#39;);
        const pristineArm = armNode.cloneNode(true);
        const throwerGroup = container.querySelector(&#39;#thrower&#39;);

        function resetAnimation() {
            const currentReceiver = container.querySelector(&#39;#receiver&#39;);
            const currentArm = container.querySelector(&#39;#throwing-arm&#39;);
            
            if (currentReceiver) receiverContainer.replaceChild(pristineReceiver.cloneNode(true), currentReceiver);
            if (currentArm) throwerGroup.replaceChild(pristineArm.cloneNode(true), currentArm);

            const bookWrapper = container.querySelector(&#39;#book-wrapper&#39;);
            bookWrapper.style.visibility = &#39;hidden&#39;;
            bookWrapper.querySelector(&#39;#anim-book-flight&#39;).endElement();
            bookWrapper.querySelector(&#39;#anim-book-drop&#39;).endElement();
        }

        function runAnimationSequence() {
            resetAnimation();
            
            const armSwing = container.querySelector(&#39;#anim-arm-swing&#39;);
            const fallOver = container.querySelector(&#39;#anim-fall-over&#39;);
            const bookFlight = container.querySelector(&#39;#anim-book-flight&#39;);
            const bookDrop = container.querySelector(&#39;#anim-book-drop&#39;);
            const bookWrapper = container.querySelector(&#39;#book-wrapper&#39;);

            setTimeout(() =&gt; { bookWrapper.style.visibility = &#39;visible&#39;; }, 100);
            setTimeout(() =&gt; { armSwing.beginElement(); }, 200);
            setTimeout(() =&gt; { bookFlight.beginElement(); }, 400);
            setTimeout(() =&gt; {
                fallOver.beginElement();
                bookDrop.beginElement();
            }, 1400);
        }
        
        const observer = new IntersectionObserver((entries) =&gt; {
            entries.forEach(entry =&gt; {
                if (entry.isIntersecting) {
                    runAnimationSequence();
                    entry.target.animationInterval = setInterval(() =&gt; {
                         if (entry.target.isConnected) { runAnimationSequence(); }
                    }, 4000);
                } else {
                    clearInterval(entry.target.animationInterval);
                    resetAnimation();
                }
            });
        }, { threshold: 0.5 });

        observer.observe(container);
    }

    document.querySelectorAll(&#39;.book-throw-animation-container&#39;).forEach(setupAnimation);
})();
&lt;/script&gt;
&lt;p&gt;In this case, the query optimizer is just handing us the book back. If we were to run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;EXPLAIN&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;DISTINCT&lt;/span&gt; SOME_ID &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; CHECK123
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We&amp;rsquo;d get something back like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;XN SEQ SCAN &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; check123 (cost&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt;..&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;07&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; width&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;304&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s just a SEQ SCAN handing us back the entire column because we&amp;rsquo;ve already told Redshift these values are unique. In contrast, what if we scan a non-PK column for uniqueness:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;DISTINCT&lt;/span&gt; AN_ATTRIBUTE &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; CHECK123;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And and there you have it, now we get:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;XN &lt;span style=&#34;color:#66d9ef&#34;&gt;Unique&lt;/span&gt;  (cost&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt;..&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;09&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; width&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;304&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; XN SEQ SCAN &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; check123 (cost&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt;..&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;07&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; width&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;304&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You&amp;rsquo;ll find &lt;code&gt;XN Unique&lt;/code&gt; in query plans when &lt;code&gt;DISTINCT&lt;/code&gt; or &lt;code&gt;UNION&lt;/code&gt; (which implies distinctness, unlike &lt;code&gt;UNION ALL&lt;/code&gt;) are used. Our DBMS now returns a unique result set from values &lt;strong&gt;it does not know&lt;/strong&gt; are unique. I go on a tangent about this below if you&amp;rsquo;re interested.&lt;/p&gt;
&lt;details class=&#34;spoiler&#34;&gt;
  &lt;summary&gt;Click to view a tangent on XN Unique &amp;amp; XN HashAggregate&lt;/summary&gt;
  &lt;div class=&#34;spoiler-content&#34;&gt;
    &lt;p&gt;If we have an index on the column deduplication can be fast, I&amp;rsquo;ll link the Postgres docs on &lt;a href=&#34;https://www.postgresql.org/docs/current/btree.html#BTREE-DEDUPLICATION&#34;&gt;B-TREE Indexes&lt;/a&gt; specifically the section on deduplication. But what if we don&amp;rsquo;t have an index&amp;hellip; Redshift doesn&amp;rsquo;t even have indexes&amp;hellip; Redshift just has metadata (min-max values) for &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/c_columnar_storage_disk_mem_mgmnt.html&#34;&gt;blocks&lt;/a&gt; written to disk called Zone Maps.&lt;/p&gt;
&lt;p&gt;Redshift &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/c-the-query-plan.html&#34;&gt;docs&lt;/a&gt; notes that &lt;code&gt;XN Unique&lt;/code&gt;: &amp;ldquo;Removes duplicates for SELECT DISTINCT queries and UNION queries.&amp;rdquo; This gets weird because I&amp;rsquo;d assume with this operator that we are sorting and plucking unique values from this column. However, there is no &lt;code&gt;XN Sort&lt;/code&gt; in that plan. &lt;code&gt;XN Sort&lt;/code&gt;:&amp;ldquo;Evaluates the ORDER BY clause and other sort operations, such as sorts required by &lt;code&gt;SELECT DISTINCT&lt;/code&gt; queries. Our &lt;code&gt;SELECT DISTINCT&lt;/code&gt; query above doesn&amp;rsquo;t have an &lt;code&gt;XN Sort&lt;/code&gt; it only contains an &lt;code&gt;XN Unique&lt;/code&gt;, maybe &lt;code&gt;XN Unique&lt;/code&gt; implies an &lt;code&gt;XN Sort&lt;/code&gt;? I generated an explain plan for a relation whose rows were 100% unsorted according to &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/r_STV_TBL_PERM.html&#34;&gt;STV_TBL_PER&lt;/a&gt; and that plan did NOT include an &lt;code&gt;XN Sort&lt;/code&gt; either&amp;hellip;&lt;/p&gt;
&lt;p&gt;I think a couple things could be happening:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The optimizer can choose between different strategies to perform our &lt;code&gt;SELECT DISTINCT&lt;/code&gt; and in these cases it&amp;rsquo;s actually choosing a hashing strategy but just labeling it as &lt;code&gt;XN Unique&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;XN Unique&lt;/code&gt; implies a sorting operation, and we&amp;rsquo;re just not being shown that in the plan&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For example if we take:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;DISTINCT&lt;/span&gt; AN_ATTRIBUTE &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; CHECK123;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And re-write it as:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; AN_ATTRIBUTE &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; CHECK123 &lt;span style=&#34;color:#66d9ef&#34;&gt;GROUP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; AN_ATTRIBUTE;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We get:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;XN HashAggregate  (cost&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;09&lt;/span&gt;..&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;09&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; width&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;304&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; XN SEQ SCAN &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; check123 (cost&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt;..&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;07&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; width&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;304&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is similar to XN Unique but the costs are different &lt;code&gt;cost=0.00..0.09&lt;/code&gt; &amp;amp; &lt;code&gt;cost=0.09..0.09&lt;/code&gt; respectively. The first number is the relative cost of returning the first row for this operation. The second value, in this case 0.09, provides the relative cost of completing the operation. So I&amp;rsquo;d surmise that depending on how we write this query:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;XN HashAggregate&lt;/code&gt; is a blocking operator designed for GROUP BY clauses; it must consume its entire input to correctly compute aggregate functions like COUNT() before returning any rows.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;XN Unique&lt;/code&gt; is a specialized operator for SELECT DISTINCT that can implement a streaming (non-blocking) hash algorithm, allowing it to output unique rows as soon as they are encountered.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This seems to explain why Unique can have a zero startup cost while HashAggregate&amp;rsquo;s startup cost reflects processing its entire input.&lt;/p&gt;
&lt;p&gt;On another note, I&amp;rsquo;m only able to get an &lt;code&gt;XN Sort&lt;/code&gt; operator via explicitly using &lt;code&gt;ORDER BY&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;DISTINCT&lt;/span&gt; AN_ATTRIBUTE &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; CHECK123 &lt;span style=&#34;color:#66d9ef&#34;&gt;ORDER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; AN_ATTRIBUTE;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;XN Merge  (cost=1000000000000.19..1000000000000.20 rows=7 width=304)               
  Merge Key: an_attribute                                                          
  -&amp;gt;  XN Network  (cost=1000000000000.19..1000000000000.20 rows=7 width=304)       
        Send to leader                                                             
        -&amp;gt;  XN Sort  (cost=1000000000000.19..1000000000000.20 rows=7 width=304)    
              Sort Key: an_attribute                                               
              -&amp;gt;  XN Unique  (cost=0.00..0.09 rows=7 width=304)                    
                    -&amp;gt;  XN Seq Scan on check123  (cost=0.00..0.07 rows=7 width=304)
&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/details&gt;
&lt;p&gt;Anyway, our VP is pissed because we sent trash, but why would an OLAP DBMS do something like this?&lt;/p&gt;
&lt;h2 id=&#34;pk-in-name-only&#34;&gt;PK in name only&lt;/h2&gt;
&lt;p&gt;We can see that our primary key&amp;rsquo;s exist in name only. The DBMS is not going to enforce them, its going to assume they are right, and if you want to enforce them then you&amp;rsquo;ll need to write that logic yourself.&lt;/p&gt;
&lt;p&gt;So what could be the reasons why thoughtful and well payed, Engineers, TPMs, Directors, and VPs building these cloud data warehouses decided to allow people to designate primary keys that aren&amp;rsquo;t enforced? I&amp;rsquo;ll boil the arguments down to the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;/posts/redshift_pk/#write-performance&#34;&gt;Write performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/posts/redshift_pk/#these-constraints-should-be-enforced-upstream&#34;&gt;These constraints &lt;em&gt;should&lt;/em&gt; be enforced upstream&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;write-performance&#34;&gt;Write performance&lt;/h3&gt;
&lt;p&gt;What do we mean by write performance, and can we actually take a look at a DBMS and see this impact on performance?&lt;/p&gt;
&lt;p&gt;Yes, we can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;spin up Postgres inside of a container&lt;/li&gt;
&lt;li&gt;create tables with/without PK&lt;/li&gt;
&lt;li&gt;write data to said tables&lt;/li&gt;
&lt;li&gt;measure performance&lt;/li&gt;
&lt;li&gt;and even look a little deeper at what Postgres is doing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A couple caveats before, so I don&amp;rsquo;t get dunked on&amp;hellip;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Single Node vs. MPP&lt;/strong&gt;: I&amp;rsquo;m running Postgres inside a container on my &lt;del&gt;[kindle](Insert sponsored link)&lt;/del&gt; Mac, which is completely different than the orchestration/networking effort that is required for a cloud data warehouse with dozens of compute nodes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Row-Oriented vs. Columnar&lt;/strong&gt;: Postgres is row oriented, an entire row (SOME_ID, AN_ATTRIBUTE, ANOTHER_ATTRIBUTE, SOME_NUMBER) is stored together. Redshift utilizes columnar storage, each column is stored in a separate block(s). This is fantastic for aggregates &lt;code&gt;SELECT SUM(SOME_NUMBER)&lt;/code&gt; but makes single-row operations inefficient. If we wanted to update or insert a new row in Redshift while enforcing the primary key we&amp;rsquo;d have to:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Search for the existence of/find the id of the record we are updating in its block (If it doesn&amp;rsquo;t exist then insert)&lt;/li&gt;
&lt;li&gt;Then find the corresponding attributes in their blocks, so on and so forth for every column&lt;/li&gt;
&lt;li&gt;Just to reconstruct one tuple for an update&amp;hellip; the opposite of what columnar stores are designed for&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This leads into the &lt;a href=&#34;/posts/redshift_pk/#these-constraints-should-be-enforced-upstream&#34;&gt;second point&lt;/a&gt; people will make&amp;hellip; that this isn&amp;rsquo;t what the DW is for. You can now see that these inserts are going to be gnarly, why not have some sort of &lt;a href=&#34;https://en.wikipedia.org/wiki/Slowly_changing_dimension&#34;&gt;slowly changing dimension&lt;/a&gt; that would allow for faster writes and control changes to facts in an OLTP DBMS better suited to handle transactional workloads.&lt;/p&gt;
&lt;h4 id=&#34;insert-with--wo-a-pk&#34;&gt;Insert with &amp;amp; w/o a PK&lt;/h4&gt;
&lt;p&gt;Anyway&amp;hellip; lets do our little test:&lt;/p&gt;
&lt;p&gt;First we pull the docker image and run a container in detached mode:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker run --name postgres-test -e POSTGRES_PASSWORD&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;mysecretpassword -p 5432:5432 -d postgres
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can check the status of our new container with &lt;code&gt;docker ps -a&lt;/code&gt; then we can run &lt;code&gt;docker exec -it postgres-test psql -U postgres&lt;/code&gt; to get a psql shell. We&amp;rsquo;ll create two tables, one with a PK and one without, and use &lt;code&gt;generate_series()&lt;/code&gt; to curate some faux data for us to write to these tables, something like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; i, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;some payload data for row &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; i PAYLOAD &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; generate_series(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;) s(i);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Which will produce the following ID + PAYLOAD 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt; i  &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;           PAYLOAD          
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;----+------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;some&lt;/span&gt; payload &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;row&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;some&lt;/span&gt; payload &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;row&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;some&lt;/span&gt; payload &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;row&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;some&lt;/span&gt; payload &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;row&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;some&lt;/span&gt; payload &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;row&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;some&lt;/span&gt; payload &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;row&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;some&lt;/span&gt; payload &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;row&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;some&lt;/span&gt; payload &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;row&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;some&lt;/span&gt; payload &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;row&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;some&lt;/span&gt; payload &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;row&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So lets create our two tables, one with a PK one without:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; no_pk_test (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    id  INTEGER,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    payload TEXT
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; with_pk_test (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    id  INTEGER &lt;span style=&#34;color:#66d9ef&#34;&gt;PRIMARY&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;KEY&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    payload TEXT
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;details class=&#34;spoiler&#34;&gt;
  &lt;summary&gt;Click to view a deep dive into Postgres internals&lt;/summary&gt;
  &lt;div class=&#34;spoiler-content&#34;&gt;
    &lt;p&gt;Now we have two tables and &lt;code&gt;with_pk_test&lt;/code&gt; has a primary key. We can see it has an associated index:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; oid, relname, relkind &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; pg_class &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; relname &lt;span style=&#34;color:#66d9ef&#34;&gt;IN&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;with_pk_test&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;with_pk_test_pkey&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Returns:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  oid  &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;      relname      &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; relkind 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-------+-------------------+---------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;16393&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; with_pk_test      &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; r &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Our Relation
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;16398&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; with_pk_test_pkey &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Our index
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Each table and index is stored in a separate file. We can also see the initial size of this index, Postgres has allocated the first 8kB &lt;a href=&#34;https://www.postgresql.org/docs/current/storage-page-layout.html&#34;&gt;page&lt;/a&gt; for our &lt;a href=&#34;https://www.postgresql.org/docs/current/indexes-types.html&#34;&gt;B tree&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 8192 bytes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; pg_size_pretty(pg_relation_size(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;with_pk_test_pkey&amp;#39;&lt;/span&gt;)) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; index_size;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can get the OID of all databases with:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; pg_database;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Returns (truncated Columns):
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt; oid &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;  datname  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-----+-----------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;   &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; postgres
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; template1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; template0
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- We can see our current database with: 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; oid &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; pg_database &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; datname &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; current_database();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Returns:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt; oid 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-----
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;   &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;row&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now we can exit psql (&lt;code&gt;\q&lt;/code&gt;) and use bash instead: &lt;code&gt;docker exec -it postgres-test bash&lt;/code&gt;. We can cd to the base directory and list the directories.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd /var/lib/postgresql/data/base &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ls&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# shows 1  4  5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nice&amp;hellip; 1, 4, and 5 match the OID for the databases we listed above, and now if we &lt;code&gt;cd to 5&lt;/code&gt; and &lt;code&gt;ls -lh&lt;/code&gt; we&amp;rsquo;ll find:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;-rw------- 1 postgres postgres    0 Jun 23 16:30 16388 &amp;lt;-- OID of our relation no_pk_test
-rw------- 1 postgres postgres    0 Jun 23 16:30 16391
-rw------- 1 postgres postgres 8.0K Jun 23 16:30 16392
-rw------- 1 postgres postgres    0 Jun 23 16:31 16393 &amp;lt;-- OID of our relation with_pk_test
-rw------- 1 postgres postgres    0 Jun 23 16:31 16396
-rw------- 1 postgres postgres 8.0K Jun 23 16:31 16397
-rw------- 1 postgres postgres 8.0K Jun 23 16:31 16398 &amp;lt;-- OID of our index with_pk_test_pkey
&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/details&gt;
&lt;p&gt;Alright, with that deep dive out of the way lets insert 10MM records using &lt;code&gt;generate_series()&lt;/code&gt; into these empty relations:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- INSERT 0 10000000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Time: 3846.560 ms (00:03.847)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;\&lt;/span&gt;timing &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; no_pk_test &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; i, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;some payload data for row &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; i PAYLOAD &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; generate_series(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10000000&lt;/span&gt;) s(i);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- INSERT 0 10000000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Time: 6038.888 ms (00:06.039)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; with_pk_test &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; i, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;some payload data for row &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; i PAYLOAD &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; generate_series(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10000000&lt;/span&gt;) s(i);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Yep, closing in on twice as long (3846.560 ms vs 6038.888 ms). And just for fun we can check on the size of our tables/index.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;table_name&lt;/th&gt;
          &lt;th&gt;table_size&lt;/th&gt;
          &lt;th&gt;indexes_size&lt;/th&gt;
          &lt;th&gt;total_size&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&amp;ldquo;public&amp;rdquo;.&amp;ldquo;with_pk_test&amp;rdquo;&lt;/td&gt;
          &lt;td&gt;651 MB&lt;/td&gt;
          &lt;td&gt;214 MB&lt;/td&gt;
          &lt;td&gt;865 MB&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&amp;ldquo;public&amp;rdquo;.&amp;ldquo;no_pk_test&amp;rdquo;&lt;/td&gt;
          &lt;td&gt;651 MB&lt;/td&gt;
          &lt;td&gt;0 bytes&lt;/td&gt;
          &lt;td&gt;651 MB&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;And for even more fun we can see this time to insert explode further after adding a secondary Index.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; multi_index_test (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  id INTEGER &lt;span style=&#34;color:#66d9ef&#34;&gt;PRIMARY&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;KEY&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  name VARCHAR(&lt;span style=&#34;color:#ae81ff&#34;&gt;256&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;-- Our new table has a new column (name)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  payload TEXT
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INDEX&lt;/span&gt; idx_name &lt;span style=&#34;color:#66d9ef&#34;&gt;ON&lt;/span&gt; multi_index_test (name); &lt;span style=&#34;color:#75715e&#34;&gt;-- Add a secondary B+Tree index
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; multi_index_test
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  i,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;user_name_&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; (i &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100000&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;some payload data for row &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; i
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; generate_series(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10000000&lt;/span&gt;) s(i);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Time: &lt;span style=&#34;color:#ae81ff&#34;&gt;30859&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;168&lt;/span&gt; ms (&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;859&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- *cough*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;There is NO free lunch, sure you can make your reads faster, but at what cost?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Are people even using the index?&lt;/li&gt;
&lt;li&gt;Whats the ratio of writes to reads on this table anyway?&lt;/li&gt;
&lt;li&gt;I wonder how many B+ Trees I can fit in my 2012 Chevy impala LT?&lt;/li&gt;
&lt;li&gt;These are the questions we need to answer&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;merge-upsert&#34;&gt;Merge Upsert&lt;/h4&gt;
&lt;p&gt;What happens if we insert additional records into our tables that already have 10,000,000 records in them. We could compare the data warehouse style insert where we insert everything vs a merge upsert where we update records that already exist and insert new records that don&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s regenerate IDs spanning 9,000,001 -&amp;gt; 11,000,000 so we get a mix of new and already existing records and perform our two writes.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Creating a new table with the records as discussed above 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; TEMP &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; new_batch &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; i, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;new payload for &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; i &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; generate_series(&lt;span style=&#34;color:#ae81ff&#34;&gt;9000001&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;11000000&lt;/span&gt;) s(i);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can perform our basic insert into &lt;code&gt;no_pk_test&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; no_pk_test
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; new_batch;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Time: &lt;span style=&#34;color:#ae81ff&#34;&gt;598&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;475&lt;/span&gt; ms 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 12MM Records now, 10MM old and 2MM new
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;LEFT&lt;/span&gt;(payload, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;), &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; no_pk_test &lt;span style=&#34;color:#66d9ef&#34;&gt;group&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;by&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;left&lt;/span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;count&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;------------+----------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; payloa &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;2000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;some&lt;/span&gt; paylo &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now what about our upsert? We can use &lt;code&gt;On Conflict&lt;/code&gt; &lt;a href=&#34;https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=168d5805e4c08bed7b95d351bf097cff7c07dd65&#34;&gt;courtesy&lt;/a&gt; of Peter Geoghegan, Heikki Linnakangas, Andres Freund and Jeff Janes.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; with_pk_test
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; new_batch
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ON&lt;/span&gt; CONFLICT (id) &lt;span style=&#34;color:#66d9ef&#34;&gt;DO&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;UPDATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    payload &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; payload;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Time: &lt;span style=&#34;color:#ae81ff&#34;&gt;3287&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;132&lt;/span&gt; ms (&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;03&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;287&lt;/span&gt;) 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                QUERY PLAN                                
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;--------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;Insert&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; with_pk_test  (cost&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt;..&lt;span style=&#34;color:#ae81ff&#34;&gt;33414&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Conflict Resolution: &lt;span style=&#34;color:#66d9ef&#34;&gt;UPDATE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Conflict Arbiter Indexes: with_pk_test_pkey
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;  Seq Scan &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; new_batch  (cost&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt;..&lt;span style=&#34;color:#ae81ff&#34;&gt;33414&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1869440&lt;/span&gt; width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;36&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- 11MM Records now, 9MM old and 2MM new
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;left&lt;/span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;count&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;------------+---------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; payloa &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;some&lt;/span&gt; paylo &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;9000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- We can also use merge, slightly slower 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Time: 4593.521 ms (00:04.594)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;MERGE &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; with_pk_test pk
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;USING&lt;/span&gt; new_batch n
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ON&lt;/span&gt; n.id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pk.id
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; MATCHED &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;UPDATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; payload &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; n.payload
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WHEN&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; MATCHED &lt;span style=&#34;color:#66d9ef&#34;&gt;THEN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; (id, payload)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;VALUES&lt;/span&gt; (id, payload);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MERGE &lt;span style=&#34;color:#ae81ff&#34;&gt;2000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Time: &lt;span style=&#34;color:#ae81ff&#34;&gt;4593&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;521&lt;/span&gt; ms (&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;04&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;594&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                          QUERY PLAN                                          
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;----------------------------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt; Merge &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; with_pk_test pk  (cost&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;398687&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;23&lt;/span&gt;..&lt;span style=&#34;color:#ae81ff&#34;&gt;523481&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;91&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;  Hash &lt;span style=&#34;color:#66d9ef&#34;&gt;Left&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;Join&lt;/span&gt;  (cost&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;398687&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;23&lt;/span&gt;..&lt;span style=&#34;color:#ae81ff&#34;&gt;523481&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;91&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1869440&lt;/span&gt; width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;48&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         Hash Cond: (n.id &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pk.id)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;  Seq Scan &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; new_batch n  (cost&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt;..&lt;span style=&#34;color:#ae81ff&#34;&gt;33414&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1869440&lt;/span&gt; width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;42&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;  Hash  (cost&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;207833&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;88&lt;/span&gt;..&lt;span style=&#34;color:#ae81ff&#34;&gt;207833&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;88&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10979388&lt;/span&gt; width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;  Seq Scan &lt;span style=&#34;color:#66d9ef&#34;&gt;on&lt;/span&gt; with_pk_test pk  (cost&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt;..&lt;span style=&#34;color:#ae81ff&#34;&gt;207833&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;88&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;rows&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10979388&lt;/span&gt; width&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The merge upsert takes much longer (598.475 ms -&amp;gt; 3287.132 ms). These are two different kinds of writes, but its generally indicative of what you might be trying to accomplish in an OLAP system vs OLTP. Hopefully this sheds some light on what people mean when they bring up the &amp;ldquo;performance&amp;rdquo; argument.&lt;/p&gt;
&lt;h3 id=&#34;these-constraints-should-be-enforced-upstream&#34;&gt;These constraints &lt;em&gt;should&lt;/em&gt; be enforced upstream&lt;/h3&gt;
&lt;p&gt;This is idea #2.&lt;/p&gt;
&lt;p&gt;And this is opening a can of opinions, hot takes and worms. I think in &lt;em&gt;theory&lt;/em&gt; maybe this works, but in the real world there are certainly people with relations sitting in their datawarehouse that could benefit from the safety of PK enforcement or, at least, have that option. So on one hand we have quick writes/optimized plans, and on the other hand all those performance gains are a wash because we have to write those deduping checks anyway and people are confused that their &lt;code&gt;PRIMARY KEY&lt;/code&gt; has duplicates in it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Opinion Time!&lt;/strong&gt; I don&amp;rsquo;t understand why the syntax in Redshift couldn&amp;rsquo;t have been changed to fully remove confusion. If you read the documentation its clear, but why call it a &lt;code&gt;PRIMARY KEY&lt;/code&gt; when it could have been &lt;code&gt;PRIMARY KEY NOT ENFORCED&lt;/code&gt;&amp;hellip; a little clarity over brevity. &lt;a href=&#34;https://www.databricks.com/blog/primary-key-and-foreign-key-constraints-are-ga-and-now-enable-faster-queries&#34;&gt;Databricks&lt;/a&gt; has the &lt;code&gt;RELY&lt;/code&gt; option. &lt;a href=&#34;https://docs.snowflake.com/en/sql-reference/constraints-overview&#34;&gt;Snowflake&lt;/a&gt; doesn&amp;rsquo;t enforce them in their standard table offering but do enforce them for hybrid tables. &lt;a href=&#34;https://cloud.google.com/blog/products/data-analytics/join-optimizations-with-bigquery-primary-and-foreign-keys&#34;&gt;BigQuery&lt;/a&gt; uses &lt;code&gt;NOT ENFORCED&lt;/code&gt;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;(1048064189, Have fun out there!),
(1048064189, Hope you enjoyed the blog!),
(1048064189, Take Care!)&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Oracle Performance</title>
      <link>/books/oracle_performance/</link>
      <pubDate>Sun, 15 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>/books/oracle_performance/</guid>
      <description>&lt;h2 id=&#34;the-book&#34;&gt;The book&lt;/h2&gt;
&lt;p&gt;This will serve to store notes/insights/thoughts about &lt;a href=&#34;https://www.oreilly.com/library/view/optimizing-oracle-performance/059600527X/&#34;&gt;Optimizing Oracle Performance&lt;/a&gt; book written around &lt;a href=&#34;https://en.wikipedia.org/wiki/Oracle_Database&#34;&gt;Oracle Version 9&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;quotes&#34;&gt;Quotes&lt;/h3&gt;
&lt;p&gt;Preface xix- In my experience, diagnosis is where people usually mess up. There are lots of experts out there responding sensibly to poorly collected diagnostic data in poorly specified projects. It is usually easy to solve a problem when it is presented to you correctly. It can be impossible to solve the right problems when you&amp;rsquo;re focused on the wrong problem&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;the-book&#34;&gt;The book&lt;/h2&gt;
&lt;p&gt;This will serve to store notes/insights/thoughts about &lt;a href=&#34;https://www.oreilly.com/library/view/optimizing-oracle-performance/059600527X/&#34;&gt;Optimizing Oracle Performance&lt;/a&gt; book written around &lt;a href=&#34;https://en.wikipedia.org/wiki/Oracle_Database&#34;&gt;Oracle Version 9&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;quotes&#34;&gt;Quotes&lt;/h3&gt;
&lt;p&gt;Preface xix- In my experience, diagnosis is where people usually mess up. There are lots of experts out there responding sensibly to poorly collected diagnostic data in poorly specified projects. It is usually easy to solve a problem when it is presented to you correctly. It can be impossible to solve the right problems when you&amp;rsquo;re focused on the wrong problem&lt;/p&gt;
&lt;p&gt;Page 3- The severity of a problem is proportional to the number of people who show up in meetings to talk about it.&lt;/p&gt;
&lt;p&gt;Page 11- &lt;a href=&#34;https://en.wikipedia.org/wiki/Amdahl%27s_law&#34;&gt;Amdahl&amp;rsquo;s law&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;the overall performance improvement gained by optimizing a single part of a system is limited by the fraction of time that the improved part is actually used&amp;rdquo;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;notes&#34;&gt;Notes&lt;/h3&gt;
</content>
    </item>
    
    <item>
      <title>Arbitrage</title>
      <link>/projects/arbitrage/</link>
      <pubDate>Sat, 14 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>/projects/arbitrage/</guid>
      <description>&lt;h2 id=&#34;winning-every-time&#34;&gt;Winning Every Time&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m going to summarize arbitrage sports betting. I think I’m going to add this to “projects” although the artifacts/results of my time spent in this space aren’t really relevant to this post. Also anytime I reference myself, me, or I in this post I&amp;rsquo;m actually talking about &lt;a href=&#34;https://en.wikipedia.org/wiki/Jonathan_%28tortoise%29&#34;&gt;Jonathan&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Is that click bait? I’d argue its not because its true, and I don’t make any money or care who reads this so… no I don’t think so.&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;winning-every-time&#34;&gt;Winning Every Time&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m going to summarize arbitrage sports betting. I think I’m going to add this to “projects” although the artifacts/results of my time spent in this space aren’t really relevant to this post. Also anytime I reference myself, me, or I in this post I&amp;rsquo;m actually talking about &lt;a href=&#34;https://en.wikipedia.org/wiki/Jonathan_%28tortoise%29&#34;&gt;Jonathan&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Is that click bait? I’d argue its not because its true, and I don’t make any money or care who reads this so… no I don’t think so.&lt;/p&gt;
&lt;h2 id=&#34;the-scene&#34;&gt;The scene&lt;/h2&gt;
&lt;p&gt;In 2021 or 2022 as sports books were rolling out across the U.S. they all had large promotions “Bet $5 get $200 in free bets” kind of thing. This was essentially just free money as there are many &lt;strong&gt;&lt;a href=&#34;https://oddsjam.com/betting-calculators/free-bet-conversion&#34;&gt;places&lt;/a&gt;&lt;/strong&gt; that will freely show you how to optimally liquidate your free bets into cash. If you read through that link you’ll see that what you use is a hedge against your free bet… so&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;if your free bet &lt;strong&gt;wins&lt;/strong&gt; you get a nice payout minus your hedge.&lt;/li&gt;
&lt;li&gt;if your free bet &lt;strong&gt;looses&lt;/strong&gt; you get a nice payout from your hedge minus nothing… the bet was free… or the cost of becoming eligible to receive the promotion.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is all fun and stuff, but I quickly liquidated all the cash out of these opportunities and was left with a crippling addiction… just kidding… but gambling addiction is no joke and extremely &lt;strong&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=HEB0kla2AUM&#34;&gt;sad&lt;/a&gt;&lt;/strong&gt;. I was curious to know if sports books ever mis-priced lines, how lines were created, or if you could pit two sports books against each other…&lt;/p&gt;
&lt;h2 id=&#34;background-on-the-books&#34;&gt;Background on the books&lt;/h2&gt;
&lt;p&gt;Online Sports books are no better than playing roulette at a brick and mortar casino. They play on human biases and tendencies toward lottery like payoffs to extract value from players over time. Those who consistently win are banned or limited as value extraction is a one way street.&lt;/p&gt;
&lt;p&gt;Sportsbooks typically have well informed lines. A betting line refers to the odds that a sportsbook lists for a wager. There are different ways to display &lt;a href=&#34;https://www.investopedia.com/articles/investing/042115/betting-basics-fractional-decimal-american-moneyline-odds.asp&#34;&gt;odds&lt;/a&gt;. I’m going to specifically talk in American odds just because that’s what I’m used to, not because they are superior in anyway (I think most professionals use decimal odds, but I could be wrong).&lt;/p&gt;
&lt;p&gt;In American odds, the favorite is shown with a (-) and denotes &lt;code&gt;the amount of $ you’d have to bet to win $100&lt;/code&gt;, if the odds are -400 you’d have to bet $400 just to win $100 meaning that “thing” you’re betting on is likely to happen. If the odds are +400 we are betting on an underdog, in this case, &lt;code&gt;if we bet $100 we’d win $400&lt;/code&gt;. We can also determine the implied odds underlying the odds we are being shown.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;+400 could be re-written to note the we are betting $100 to win $500 (We get our $100 bet back + $400 in winnings) -&amp;gt; 100/500 or &lt;strong&gt;20% implied odds&lt;/strong&gt;. For our favorite at -400 we are betting $400 to win 500$ (We get our $400 bet back + $100 in winnings) -&amp;gt; 400/500 or &lt;strong&gt;80% implied odds&lt;/strong&gt;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;These lines are constantly updated with the latest information and these books are also keenly aware of the action that is occurring on a particular line. I won’t go into detail here but this &lt;a href=&#34;https://www.boydsbets.com/sports-betting-handle/&#34;&gt;article&lt;/a&gt; has info on how books manage risk on specific lines.&lt;/p&gt;
&lt;p&gt;So are we just going to look for lines that are “off”: This team should only be a +200 underdog but the book has them at +500? Given this information above, we are unlikely to catch sports books utterly mispricing a particular line… but maybe we can catch them being just so slightly off. We also have to remember that because these books are just extracting money from people there is a lot of competition to be an extractor. What I mean is that there are a lot of ways to gamble on sports, even Robinhood has begun adding basic predictions markets on sporting events. When all of these different places offers odds on an outcome; sometimes, they begin to disagree with one another. This is what we can take advantage of.&lt;/p&gt;
&lt;h2 id=&#34;taking-both-sides&#34;&gt;Taking both sides&lt;/h2&gt;
&lt;p&gt;What do I mean by “pit books against each other”. To explain this I want to walk through how these books function.&lt;/p&gt;
&lt;p&gt;We are going to be a sports book for a second. Lets say sports team A is playing sports team B. At our book we think this is going to be a close match so we offer team A at +110 (slight underdog) and team B at -110 (slight favorite). I play the scenarios out in the below drawing.&lt;/p&gt;
&lt;p&gt;Two players one on either side of the line place bets so that their total payout is equivalent ($210):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Even_Odds.png&#34; alt=&#34;Even Odds&#34;&gt;&lt;/p&gt;
&lt;p&gt;You can see our sports book makes no money regardless of the out come (It’s pot of $ generated by the players must be payed out in full to satisfy the bets regardless of the outcome), its just facilitating transactions, and it’ll be in the red after it has to pay its variable/fixed costs. This is why you’d never see these odds at a sports book outside of gimmicks like the Super Bowl coin toss, promos, etc… You’ll see lines like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Book_Wins.png&#34; alt=&#34;Book Wins&#34;&gt;&lt;/p&gt;
&lt;p&gt;What changed? The odds on Team B went from &lt;code&gt;-110 to -130&lt;/code&gt; (It became more of a favorite, a.k.a the sports book pays out less money on the same amount wagered). Previously, player 2 only needed to bet $110 to win $100 now they have to bet $130 to win $100. I added the implied odds of the specific outcome in the first diagram with a 47.62% chance our underdog wins and a 52.38% chance our favorite wins. These sum to 100%.&lt;/p&gt;
&lt;p&gt;Now lets check out the implied odds in the +110 / -130 scenario… &lt;code&gt;47.62% and 56.52% respectively… these don’t sum to 100% anymore&lt;/code&gt;, now we get (104.14%) uh oh. NOW our book is making money:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;if team A wins the books makes $20&lt;/li&gt;
&lt;li&gt;if team B wins the book breaks even.&lt;/li&gt;
&lt;li&gt;We calc the EV here assuming the true odds are -110/+110 as (.4762 * $20) + (.5238 * $0) = &lt;code&gt;$9.52&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wow so our book has an EV of $9.52 every time two people put on this bet! And looking at little further if we divide our EV by the Pot of money: $9.52/$230 we get ~4% remember our new totaled implied odds 104.14%… 104% - 100% = 4% this is the books “hold”. Hold in sports betting refers to the percentage of money that sportsbooks keep for every dollar wagered. The percentage will vary by wager type. Sportsbooks can’t just maximize hold because they have… competition. If I can get +130 in book A where as book B offers +150 on the same bet… you’re going to bet with book B every time… sports books need volume they need your bets to make money.&lt;/p&gt;
&lt;p&gt;And this is what these books want, they want as high volume of these transaction as they can get. That’s why they put on promotions and offer free bets and create Ads with tigers and famous people etc…&lt;/p&gt;
&lt;p&gt;But do all books have the same odds? No. Just as books create lines that ensure they win, we can look for favorable lines as well. These books don’t exist in a vacuum they compete against each other for a pool of betters, many of which are sensitive to how great of a hold a book has on a particular line. As sports books update their lines, mis-price things, or disagree with each other we can take advantage. Lets look at this below.&lt;/p&gt;
&lt;p&gt;In this scenario the same player is taking both sides of a line across two sports books. &lt;strong&gt;Sportsbook 1&lt;/strong&gt; offers +110 while &lt;strong&gt;sportsbook 2&lt;/strong&gt; offers the other side at -105. Lets look at what happens.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/We_Win.png&#34; alt=&#34;Wins&#34;&gt;&lt;/p&gt;
&lt;p&gt;Bam and now we can see that no matter the outcome of this game, player 1 makes $5 or comes out even. &lt;code&gt;Summing the implied odds 47.62% + 51.22% = 98.84% we have engineered an inverse hold (1.16%)&lt;/code&gt;, where the player always comes out on top regardless of the outcome. Our EV on this bet, assuming true odds of +110/-110 is (47.62% * $5) + (52.38%* $0) = &lt;code&gt;$2.38&lt;/code&gt; and don’t forget $2.38/$205 = 1.16% (Our inverse hold).&lt;/p&gt;
&lt;p&gt;Wow so if I have $205 I can instantly make 1.16% on it if I can find these lines?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Yes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And if you take that same $205 and use it again and again every night for a month I could make even more $?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Yes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And if I increased my bet sizes to $10,000 could I scale up the magnitude of my profit?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Yes, in our contrived +110/-105 example if we bet $10,000 on +110 and $10,500 on -105 we’d have an EV of (47.62% * $500) + (52.38%* $0) = $238… I like $238 better than $2.38.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What if we found something even better like +110/+110?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Yes that would be nice.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;so-whats-the-catch&#34;&gt;So what’s the catch?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Books aren’t dumb, they will see you are consistently hitting soft/slow lines.&lt;/code&gt; Lines with low hold or lines that weren’t updated fast enough to avoid mis-pricing across other books. They will ban you or limit you to only being allowed to bet a few dollars at a time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;It’s harder than you think to find these odds. Odds scraping is difficult. Scaling is hard.&lt;/code&gt; If you buy odds… that’s going to cost you $, and they are slightly delayed. You are going to struggle to place bets via an api, most books don’t have one, so you’re going to have to build something to place these bets via the UI or manually do it (Doesn’t scale well).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Odds can change as you take both sides&lt;/code&gt; as there will inherently be some latency between the two bets. If they change in the wrong direction and you already have exposure to one side… now you’re just trying to limit your losses.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;I said before that books will limit you, they can also void your bet.&lt;/code&gt; That’s right, if the sportsbook realizes it gave you too good of odds it will just void the bet. &lt;strong&gt;Bad analogy alert:&lt;/strong&gt; Imagine you open a 12 month CD at 4.5%, sign the paper, add the money done… you wake up the next day and the CD isn’t there any more. You call the bank… “Yeah umm we actually don’t want to give you 4.5% so we closed the account… how about 3%”. Sports books can and do just that… remember you are on their platform and this stuff is relatively “new” they get to do what they want (to a point) with little recourse. Its like if you build a YouTube channel and they strike down your video… you can try and appeal but at the end of the day you’re on their platform and play by their rules wether or not your video was justifiably taken down. And who is to determine justifiably? I don&amp;rsquo;t know that’s a topic for another day.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Books will ban you.&lt;/code&gt; Internally it’ll be called the fraud detection team or money laundering blah blah blah, and I’m sure they do a good amount of that… but in reality its the smart money detection team “don’t let us lose money at all costs if someone wants to win they can do it elsewhere.”&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;In the United States there is this thing called death, and there’s this other thing called taxes…&lt;/code&gt; both tend to happen to people. Speaking of taxes, there is another thing called taking the standard deduction, and there’s other things about qualifying as a “professional gambler”. Now what do all these “things” mean? I don’t know, I am not an expert but you should &lt;strong&gt;READ UP ON THIS&lt;/strong&gt; before you start your lucrative arbing at scale.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Side note, Arbitrage exists in other markets as well&lt;/code&gt;, look at the &lt;a href=&#34;https://finance.yahoo.com/news/sam-bankman-fried-explains-arbitrage-132901181.html&#34;&gt;trades&lt;/a&gt; SBF was putting on back in the day.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Here SBF is taking advantage of price differences between markets (buy low, sell high), his major challenges were essentially bridging the two markets. If people were willing to sell BTC for $10,000 and others willing to buy it for $15,000 in a single &lt;strong&gt;&lt;a href=&#34;https://www.investopedia.com/terms/m/marketefficiency.asp&#34;&gt;efficient market&lt;/a&gt;&lt;/strong&gt; the prices would converge and the opportunity would be quickly eaten up. But because there was a lack of information, hurdles to cross in putting on the trade, and crypto being the wild west he was able to capitalize on this opportunity.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So if we could overcome all the issues above (I’m sure some people do) we could generate a nice profit. But it is NOT easy to do, NOT easy to remain undetected, and NOT something you could accomplish over night. You WILL need $ to get started, you WILL need to adapt to changes and you WILL run into issues as you scale.&lt;/p&gt;
&lt;p&gt;Good luck.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 06-14-2025</title>
      <link>/learnedt1w/2025/06_14_2025/</link>
      <pubDate>Sat, 14 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/06_14_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://sketch.dev/blog/agent-loop&#34;&gt;The for Loop&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.sec.gov/Archives/edgar/data/1018724/000119312505070440/dex991.htm&#34;&gt;Free cash flow&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.grandviewresearch.com/industry-analysis/us-bottled-water-market-report&#34;&gt;I just don&amp;rsquo;t get it&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.bbc.com/news/articles/cgq3j5nq15wo.amp&#34;&gt;Politics!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://alternativeto.net/&#34;&gt;Site for finding alternatives&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://sketch.dev/blog/agent-loop&#34;&gt;The for Loop&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.sec.gov/Archives/edgar/data/1018724/000119312505070440/dex991.htm&#34;&gt;Free cash flow&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.grandviewresearch.com/industry-analysis/us-bottled-water-market-report&#34;&gt;I just don&amp;rsquo;t get it&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.bbc.com/news/articles/cgq3j5nq15wo.amp&#34;&gt;Politics!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://alternativeto.net/&#34;&gt;Site for finding alternatives&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 06-07-2025</title>
      <link>/learnedt1w/2025/06_07_2025/</link>
      <pubDate>Sat, 07 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/06_07_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=bhpzTWtee2A&#34;&gt;Race Conditions&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I like this definition of atomic: The capability of performing an uninterrupted update with valid data before and after the update and the data cannot be observed by another observer in any intermediate state it may take on during the update. It may be a single bit or it may be an entire database. S/O ACID!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Semaphore_%28programming%29&#34;&gt;Semaphore&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.postgresql.org/docs/current/tutorial-transactions.html&#34;&gt;I was unaware of &lt;code&gt;SAVEPOINT&lt;/code&gt; and &lt;code&gt;ROLLBACK TO&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=bhpzTWtee2A&#34;&gt;Race Conditions&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I like this definition of atomic: The capability of performing an uninterrupted update with valid data before and after the update and the data cannot be observed by another observer in any intermediate state it may take on during the update. It may be a single bit or it may be an entire database. S/O ACID!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Semaphore_%28programming%29&#34;&gt;Semaphore&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.postgresql.org/docs/current/tutorial-transactions.html&#34;&gt;I was unaware of &lt;code&gt;SAVEPOINT&lt;/code&gt; and &lt;code&gt;ROLLBACK TO&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.postgresql.org/docs/devel/parser-stage.html&#34;&gt;The reason for separating raw parsing from semantic analysis is that system catalog lookups can only be done within a transaction, and we do not wish to start a transaction immediately upon receiving a query string.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ducktyped.org/p/a-mini-book-on-aws-networking-introduction&#34;&gt;Greate overview on AWS networking, linking all sub-sections as well&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ducktyped.org/p/why-is-it-called-a-cloud-if-its-not&#34;&gt;VPC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Everyone gets their own private network inside AWS.&lt;/li&gt;
&lt;li&gt;Solves IP address conflicts and security concerns of one big shared network&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mapping service&lt;/strong&gt; connects instances in a single VPC across servers (kind of like a namespace)
-The Mapping service can connect servers across AZs but not Regions, VPC span AZs not regions. To connect VPCs in different regions there&amp;rsquo;s &lt;a href=&#34;https://docs.aws.amazon.com/whitepapers/latest/building-scalable-secure-multi-vpc-network-infrastructure/vpc-to-vpc-connectivity.html&#34;&gt;VPC peering&lt;/a&gt; or &lt;a href=&#34;https://docs.aws.amazon.com/whitepapers/latest/building-scalable-secure-multi-vpc-network-infrastructure/transit-gateway.html&#34;&gt;AWS Transit Gateway&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ducktyped.org/p/old-man-yells-at-subnets&#34;&gt;Subnets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;internet gateway&lt;/strong&gt; is like a hole you poke in your VPC so you can talk to the internet.&lt;/li&gt;
&lt;li&gt;Only a subnet can be connected to the internet gateway.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;subnet&lt;/strong&gt; is a way to group your instances. It&amp;rsquo;s sort of like tagging them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Private subnets&lt;/strong&gt; can&amp;rsquo;t talk to the internet and are the default. &lt;strong&gt;Public subnets&lt;/strong&gt; can talk to the internet.&lt;/li&gt;
&lt;li&gt;Subnets are availability zone-scoped. To create an instance, we need to specify which availability zone we want to create the instance in.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;route&lt;/strong&gt; is a connection from your subnet to the internet gateway so that your subnet can talk to the internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ducktyped.org/p/the-cidr-house-rules&#34;&gt;CIDR&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Classless Inter-Domain Routing (IP address allocation)&lt;/li&gt;
&lt;li&gt;Specifies a range of IP addresses by fixing a certain number of bits in a 32 bit IP Address 172.98.0.1/24 (/24 denote the # of bits that are fixed)&lt;/li&gt;
&lt;li&gt;Each VPC will have a CIDR range, and each subnet within a VPC will have their own ranges within the VPC&amp;rsquo;s range&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ducktyped.org/p/an-illustrated-guide-to-route-tables&#34;&gt;Route Tables&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Route tables are mappings from destination to target, given a destination where to a go next (target)&lt;/li&gt;
&lt;li&gt;Route tables will always try to match the most specific route.&lt;/li&gt;
&lt;li&gt;Route tables are created at the VPC level. Every VPC comes with a route table, called the main route table. A VPC can have many route tables&lt;/li&gt;
&lt;li&gt;all subnets are associated with the main route table by default&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ducktyped.org/p/an-illustrated-guide-to-aws-security&#34;&gt;Security Groups&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Security groups operate at the firewall (or EC2 instance) level (They have IB &amp;amp; OB rules), they are ALLOW only&lt;/li&gt;
&lt;li&gt;IB traffic is allowed if its a response to your request (This is why SG are referred to as stateful)&lt;/li&gt;
&lt;li&gt;NACLs operate at the network (or subnet) level (They are used to BLOCK an IP(s))&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://datahacker.blog/industry/technology-menu/networking/netmask-filtering-deep-dive&#34;&gt;Netmask&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Routers can assign private IPs from several private IP address ranges. They are addresses that start with 10.x.x.x, like 10.0.0.1; addresses that start with 192.168.x.x, like 192.168.10.1 and 192.168.12.1; and IPs in the 172.16.0.0 - 172.31.255.255 range.&lt;/p&gt;
&lt;p&gt;RFC 6598 defines a Shared Address Space, specifically the 100.64.0.0/10 block, for use by Internet Service Providers (ISPs) in their Carrier-Grade NAT (CGNAT) deployments. This address space is reserved for connecting Customer Premises Equipment (CPE) to the ISP&amp;rsquo;s core routers.&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ssp.sh/&#34;&gt;Cool blog and public brain concept to explore&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Suggestion from my Korean Uber Driver: Seoraksan national park go in sept/oct&lt;/p&gt;
&lt;p&gt;Spent the week in Seattle for our team Summit&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 05-31-2025</title>
      <link>/learnedt1w/2025/05_31_2025/</link>
      <pubDate>Sat, 31 May 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/05_31_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://duckdb.org/2025/05/27/ducklake&#34;&gt;Duck Lake!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://simonbyrne.github.io/notes/fastmath/&#34;&gt;Dangers of a certain compiler flag&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/ossu/computer-science&#34;&gt;Complete CS Education, I wonder how many LLMs have trained on this&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.liquidweb.com/blog/what-is-a-progressive-jpeg/&#34;&gt;A progressive JPEG will actually show the entire image right away, the image will load in at full size looking pixelated and will become more clear as it loads.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.app/profile/randomascii.bsky.social/post/3lk4c6st7nc2e&#34;&gt;O(n^2) is the sweet spot of badly scaling algorithms&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Economy_of_Poland&#34;&gt;Poland Economy larger than I thought&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://duckdb.org/2025/05/27/ducklake&#34;&gt;Duck Lake!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://simonbyrne.github.io/notes/fastmath/&#34;&gt;Dangers of a certain compiler flag&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/ossu/computer-science&#34;&gt;Complete CS Education, I wonder how many LLMs have trained on this&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.liquidweb.com/blog/what-is-a-progressive-jpeg/&#34;&gt;A progressive JPEG will actually show the entire image right away, the image will load in at full size looking pixelated and will become more clear as it loads.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bsky.app/profile/randomascii.bsky.social/post/3lk4c6st7nc2e&#34;&gt;O(n^2) is the sweet spot of badly scaling algorithms&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Economy_of_Poland&#34;&gt;Poland Economy larger than I thought&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Went to Olympic National park for 5 days for my birthday.&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 05-24-2025</title>
      <link>/learnedt1w/2025/05_24_2025/</link>
      <pubDate>Sat, 24 May 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/05_24_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://techcommunity.microsoft.com/blog/adforpostgresql/announcing-a-new-ide-for-postgresql-in-vs-code-from-microsoft/4414648&#34;&gt;Nice IDE for Postgres&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/open-spaced-repetition/fsrs4anki/wiki/ABC-of-FSRS&#34;&gt;FSRS, I want to do create flash cards from the section of the blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://simonwillison.net/2025/May/15/building-on-llms/&#34;&gt;Building on LLMs Handbook&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bernsteinbear.com/blog/simple-search/&#34;&gt;Implementing Search&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.lux.camera/what-is-hdr/&#34;&gt;HDR&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://techcommunity.microsoft.com/blog/adforpostgresql/announcing-a-new-ide-for-postgresql-in-vs-code-from-microsoft/4414648&#34;&gt;Nice IDE for Postgres&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/open-spaced-repetition/fsrs4anki/wiki/ABC-of-FSRS&#34;&gt;FSRS, I want to do create flash cards from the section of the blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://simonwillison.net/2025/May/15/building-on-llms/&#34;&gt;Building on LLMs Handbook&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://bernsteinbear.com/blog/simple-search/&#34;&gt;Implementing Search&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.lux.camera/what-is-hdr/&#34;&gt;HDR&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>Time Enough for Love</title>
      <link>/books/time_enough_for_love/</link>
      <pubDate>Tue, 20 May 2025 00:00:00 +0000</pubDate>
      
      <guid>/books/time_enough_for_love/</guid>
      <description>&lt;h2 id=&#34;the-book&#34;&gt;The book&lt;/h2&gt;
&lt;p&gt;This will serve to store notes/insights/thoughts about &lt;a href=&#34;https://en.wikipedia.org/wiki/Time_Enough_for_Love&#34;&gt;Time Enough for Love&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;quotes&#34;&gt;Quotes&lt;/h3&gt;
&lt;p&gt;8- A society that gets rid of all the trouble makers goes downhill&lt;/p&gt;
&lt;p&gt;10- The most sophisticated machine the human mind can build has in it the limitations of the human mind&lt;/p&gt;
&lt;p&gt;20- I have no beliefs. Beliefs get on the way of learning&lt;/p&gt;
&lt;p&gt;24- never take anybody’s word about whether a gun is loaded&lt;/p&gt;
&lt;p&gt;31- If a man is greedy you can cheat him every time&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;the-book&#34;&gt;The book&lt;/h2&gt;
&lt;p&gt;This will serve to store notes/insights/thoughts about &lt;a href=&#34;https://en.wikipedia.org/wiki/Time_Enough_for_Love&#34;&gt;Time Enough for Love&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;quotes&#34;&gt;Quotes&lt;/h3&gt;
&lt;p&gt;8- A society that gets rid of all the trouble makers goes downhill&lt;/p&gt;
&lt;p&gt;10- The most sophisticated machine the human mind can build has in it the limitations of the human mind&lt;/p&gt;
&lt;p&gt;20- I have no beliefs. Beliefs get on the way of learning&lt;/p&gt;
&lt;p&gt;24- never take anybody’s word about whether a gun is loaded&lt;/p&gt;
&lt;p&gt;31- If a man is greedy you can cheat him every time&lt;/p&gt;
&lt;p&gt;54- progress doesn’t come from early risers. Progress is made by lazy men looking for easier ways to do things&lt;/p&gt;
&lt;p&gt;83- there doesn’t seem to be anything that a government can do to an economy that does not act as positive feedback, or as a break. Or both. Maybe somewhere someday someone will tinker with supply and demand to make it work better instead of letting it go its own cruel way.&lt;/p&gt;
&lt;p&gt;113- don’t ever become a pessimist… a pessimist is right more often than an optimist but an optimist has more fun. And neither can stop the march of events.&lt;/p&gt;
&lt;p&gt;114- whores perform the same functions as priests but far more thoroughly&lt;/p&gt;
&lt;p&gt;129- The trouble with defining in words anything as basic as love is that the definition can’t be understood by anyone who has not experienced it&lt;/p&gt;
&lt;p&gt;165- By the law of Supply and Demand a thing has value from where it is as much as from what it is.&lt;/p&gt;
&lt;p&gt;229- Privacy is as necessary as company; you can drive a man cray by depriving him of either.&lt;/p&gt;
&lt;p&gt;259 - Never underestimate the power of human stupidity&lt;/p&gt;
&lt;p&gt;281- as money came in the bank I’ve been burning it. It’s waste paper. As long as we keep account&lt;/p&gt;
&lt;p&gt;317- the centuries may not give a man wisdom, but he acquires patience or he doesn’t live through them&lt;/p&gt;
&lt;h3 id=&#34;notes&#34;&gt;Notes&lt;/h3&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 05-17-2025</title>
      <link>/learnedt1w/2025/05_17_2025/</link>
      <pubDate>Sat, 17 May 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/05_17_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.scrapehero.com/location-reports/McDonalds-USA/&#34;&gt;Mcdonalds data&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;everything&amp;rsquo;s a $100&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://www.apolloacademy.com/the-daily-spark/&#34;&gt;Interesting daily econ tidbits&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;364 Walmarts in China!?&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://corporate.walmart.com/about/location-facts&#34;&gt;Turns out there are Walmart&amp;rsquo;s in 19 countries&lt;/a&gt;, and 2.1MM associates wow&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.scrapehero.com/location-reports/McDonalds-USA/&#34;&gt;Mcdonalds data&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;everything&amp;rsquo;s a $100&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://www.apolloacademy.com/the-daily-spark/&#34;&gt;Interesting daily econ tidbits&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;364 Walmarts in China!?&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://corporate.walmart.com/about/location-facts&#34;&gt;Turns out there are Walmart&amp;rsquo;s in 19 countries&lt;/a&gt;, and 2.1MM associates wow&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 05-10-2025</title>
      <link>/learnedt1w/2025/05_10_2025/</link>
      <pubDate>Sat, 10 May 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/05_10_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=32O0a6qCQaQ&#34;&gt;Linux Tools&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://0dependencies.dev/&#34;&gt;0 Deps&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Can&amp;rsquo;t say I 100% agree but can&amp;rsquo;t say I 100% disagree, there&amp;rsquo;s probably some happy medium here on when to use deps.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://www.json.org/json-en.html&#34;&gt;JSON dictionary&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=jB13kCmWT2k&#34;&gt;Infra at Palantir&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Seagull_management&#34;&gt;Seagull management&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.lloydmarkle.com/quieter-life/2024/appearing-confident/&#34;&gt;Appearing confidant&lt;/a&gt;
&lt;a href=&#34;https://skincontact.substack.com/p/21-observations-from-people-watching&#34;&gt;Observations from watching people&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I like how this is written but I don&amp;rsquo;t think we have some omniscient writer who can quickly define a person 100% correctly&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=32O0a6qCQaQ&#34;&gt;Linux Tools&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://0dependencies.dev/&#34;&gt;0 Deps&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Can&amp;rsquo;t say I 100% agree but can&amp;rsquo;t say I 100% disagree, there&amp;rsquo;s probably some happy medium here on when to use deps.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://www.json.org/json-en.html&#34;&gt;JSON dictionary&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=jB13kCmWT2k&#34;&gt;Infra at Palantir&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Seagull_management&#34;&gt;Seagull management&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.lloydmarkle.com/quieter-life/2024/appearing-confident/&#34;&gt;Appearing confidant&lt;/a&gt;
&lt;a href=&#34;https://skincontact.substack.com/p/21-observations-from-people-watching&#34;&gt;Observations from watching people&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I like how this is written but I don&amp;rsquo;t think we have some omniscient writer who can quickly define a person 100% correctly&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 05-03-2025</title>
      <link>/learnedt1w/2025/05_03_2025/</link>
      <pubDate>Sat, 03 May 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/05_03_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Docker relies on Linux kernels, which means that macOS and Windows cannot run Docker natively without some additional steps. Each operating system has its own solution for running Docker. For example, Docker for Mac uses under the hood actually a virtual machine that runs a Linux instance, within which Docker operates.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;It seems you can &lt;a href=&#34;https://gist.github.com/BretFisher/5e1a0c7bcca4c735e716abf62afad389&#34;&gt;get a shell&lt;/a&gt; on this VM via: &lt;code&gt;docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh&lt;/code&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Docker relies on Linux kernels, which means that macOS and Windows cannot run Docker natively without some additional steps. Each operating system has its own solution for running Docker. For example, Docker for Mac uses under the hood actually a virtual machine that runs a Linux instance, within which Docker operates.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;It seems you can &lt;a href=&#34;https://gist.github.com/BretFisher/5e1a0c7bcca4c735e716abf62afad389&#34;&gt;get a shell&lt;/a&gt; on this VM via: &lt;code&gt;docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker run -d -i -t --name {give it a name} {image}&lt;/code&gt; Finds/Pulls image, runs a container, -i for interactive, -t for a shell, -d for detached &lt;code&gt;docker pull {image}&lt;/code&gt; to pull in an image&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker logs -f {name of container}&lt;/code&gt; to get container logs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker pause {name of container}&lt;/code&gt; &amp;amp;&amp;amp; &lt;code&gt;docker unpause {name of container}&lt;/code&gt; pause/unpause container; there&amp;rsquo;s also &lt;code&gt;docker container start&lt;/code&gt; and &lt;code&gt;docker container stop&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker attach --no-stdin {name of container}&lt;/code&gt; attach your terminal&amp;rsquo;s stdout/stderr to a running container the &amp;ndash;no-stdin flag meas we will not attach with std-in, so if you CTRL+C you&amp;rsquo;re only disconnected form STDOUT&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker exec {name of container} {command}&lt;/code&gt; Execute commands inside a running container&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker rm --force looper&lt;/code&gt; stops/removes a running container, basically: &lt;code&gt;docker kill&lt;/code&gt; + &lt;code&gt;docker rm&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker search {image}&lt;/code&gt; search images on docker&amp;rsquo;s servers. Images consist of: registry/organisation/image:tag. But may be as short as ubuntu, then the registry will default to Docker hub, organisation to library and tag to latest&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ls containers even after they&amp;rsquo;ve exited: &lt;code&gt;docker container ls -a&lt;/code&gt; or just &lt;code&gt;docker ps -a&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Remove all stopped containers with &lt;code&gt;docker container prune&lt;/code&gt; and for images: &lt;code&gt;docker rmi -f $(docker images -aq) &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Flags: -i (interactive), -t (tty) and -d and &lt;a href=&#34;https://itsfoss.com/what-is-tty-in-linux/&#34;&gt;What is TTY&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A &lt;a href=&#34;https://docs.docker.com/reference/dockerfile/&#34;&gt;dockerfile&lt;/a&gt; contains the build instructions for an image&lt;/p&gt;
&lt;p&gt;Quite a few popular images are so-called multi platform images which means that one image contains variations for different architectures, one example is Ubuntu.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://idiallo.com/blog/zipbomb-protection&#34;&gt;Zip Bomb&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://fortune.com/article/nail-salon-employee-pleads-guilty-remote-work-it-north-korea-china-kim-jong-un/&#34;&gt;Remote work at its finest&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/Harren06/ublock-yt-shorts&#34;&gt;Block YT shorts&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=56pS1dUwFt4&#34;&gt;Porsche!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://quarter--mile.com/You-Could-Just-Choose-Optimism&#34;&gt;Picking Optimism&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 04-26-2025</title>
      <link>/learnedt1w/2025/04_26_2025/</link>
      <pubDate>Sat, 26 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/04_26_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://davepeck.org/2025/04/11/pythons-new-t-strings/&#34;&gt;T-Strings&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.businessinsider.com/donald-rumsfeld-absolutely-no-idea-if-he-paid-taxes-properly-2014-4&#34;&gt;On the ridiculousness of the tax code&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Spent the week in Japan, had an amazing time. Will record what I did in the travel section.&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Do a trip with friends at least once per year. Biggest lesson from Rob who I rode with in Kiryu.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://davepeck.org/2025/04/11/pythons-new-t-strings/&#34;&gt;T-Strings&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.businessinsider.com/donald-rumsfeld-absolutely-no-idea-if-he-paid-taxes-properly-2014-4&#34;&gt;On the ridiculousness of the tax code&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Spent the week in Japan, had an amazing time. Will record what I did in the travel section.&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Do a trip with friends at least once per year. Biggest lesson from Rob who I rode with in Kiryu.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Japan</title>
      <link>/travel/japan/</link>
      <pubDate>Sun, 20 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>/travel/japan/</guid>
      <description>&lt;h2 id=&#34;japan-travel-log&#34;&gt;Japan Travel Log&lt;/h2&gt;
&lt;p&gt;This trip was the best/most impactful traveling experience I&amp;rsquo;ve had as an adult.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I&amp;rsquo;m grateful to have had the opportunity to do this.&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;m happy I spent a few months learning some basic Japanese.&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;ve drastically underrated traveling by myself&lt;/li&gt;
&lt;li&gt;If I have children, I will highly encourage them to live abroad for an extended period of time as a young adult&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;whats-below&#34;&gt;Whats below?&lt;/h2&gt;
&lt;p&gt;Below is pretty much my stream of thought, recapping how each day went in the moment. I&amp;rsquo;ve lightly edited for clarity. My core reflections are above, although I have done some further reflection internally that won&amp;rsquo;t make it here. Any post-hoc edits will be highlighted like &lt;code&gt;This&lt;/code&gt;.&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;japan-travel-log&#34;&gt;Japan Travel Log&lt;/h2&gt;
&lt;p&gt;This trip was the best/most impactful traveling experience I&amp;rsquo;ve had as an adult.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I&amp;rsquo;m grateful to have had the opportunity to do this.&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;m happy I spent a few months learning some basic Japanese.&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;ve drastically underrated traveling by myself&lt;/li&gt;
&lt;li&gt;If I have children, I will highly encourage them to live abroad for an extended period of time as a young adult&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;whats-below&#34;&gt;Whats below?&lt;/h2&gt;
&lt;p&gt;Below is pretty much my stream of thought, recapping how each day went in the moment. I&amp;rsquo;ve lightly edited for clarity. My core reflections are above, although I have done some further reflection internally that won&amp;rsquo;t make it here. Any post-hoc edits will be highlighted like &lt;code&gt;This&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;day-by-day&#34;&gt;Day by Day&lt;/h2&gt;
&lt;h3 id=&#34;414&#34;&gt;4/14:&lt;/h3&gt;
&lt;p&gt;Mom dropped me off at airport. Was a bit busy for 5:30 am. Walked around terminal 3 and ran into &lt;strong&gt;Charles Barkley&lt;/strong&gt; which was wild hahaha. Missed a great opportunity for a San Antonio joke. I’m on a hot streak for seeing famous people. &lt;code&gt;I had seen David Goggins a few days before&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Sat next to James on the plane to Hawaii. He’s in the army stationed in Honolulu and is a helicopter pilot/instructor. Good guy!&lt;/p&gt;
&lt;p&gt;Flight went well beat all levels of angry birds while listening to young thug. Managed to drink about a liter and a half of water and ate ~700 cals… so feeling pretty good going into the second leg. Hopefully the WiFi works nicely.&lt;/p&gt;
&lt;p&gt;Stretched my legs and walked to the garden at the Honolulu airport, it was really nice. &lt;code&gt;The small garden is extremely nice and a great way to break up 16 hours of flying PHX -&amp;gt; HI -&amp;gt; JPN&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;415&#34;&gt;4/15:&lt;/h3&gt;
&lt;p&gt;Ok so this is a little weird because of the time change but I’m still traveling to Japan (Honolulu to Japan leg). We’ve just changed days. Sitting next to another military guy had a good chat with him for 2 hours. Talking about if he likes the military, why do people sign up, kinds of people that are there etc… they are going to Japan for 1 month I guess for training or something. &lt;code&gt;We also talked about voting, and how he thought that some sort of service to the country could be a requirement to vote and the pros/cons of that&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The WiFi on the flight &lt;code&gt;(Flight was equipped with free star link internet which was excellent)&lt;/code&gt; was nice but I wasn’t feeling all that great I toughed it out and got some sleep which made me feel better and played some chess.&lt;/p&gt;
&lt;p&gt;Got off the flight and it I think a bunch of international flights all came in at the same time… so it took like another 2 hours to get through customs/duties with my bag. Met some guy from Finland who was cool.&lt;/p&gt;
&lt;p&gt;Found the train station, eSIM doesn’t say it’s active but I still have service I guess from t-mobile. Can’t tell wtf train I’m getting on but I’m so tired I just bolt into the train I think is right and the doors close on me on the way in. &lt;code&gt;I made a split second decision to get on which ended with the train doors closing on my backpack as I squeezed through the door&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Turns out it was right! Got off at Kamata station and start to walk to the Airbnb. It’s wild like this place is straight out of a movie and I’m just in some tiny city outside of Tokyo. Make a few wrong turns walking but get to the place.&lt;/p&gt;
&lt;p&gt;Do all their check in stuff and I get to their door and I can’t get this Lock Screen to come up so I can enter my code. So I just start tapping wildly and it works hahaha. &lt;code&gt;The lock on the door was a little weird to use especially on basically no sleep&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I had a little snack but I’m so tired I can’t go out to eat. I’m going to shower and go to bed hopefully by like 9:00pm. I’m going to set an alarm for 9:00am and force myself to get up after 12 hours of sleep. &lt;code&gt;12  hours of sleep was a PIPE dream.&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;416&#34;&gt;4/16:&lt;/h3&gt;
&lt;p&gt;Woke up at 4am so got 6:30 hours plus the time in the plane… not bad. Showered, had a little food, did some laundry, made an instant coffee and organized a bit.&lt;/p&gt;
&lt;p&gt;Worked on Ally&amp;rsquo;s website (slamming effect) Claude won’t do what I want so may have to make some tweaks. I’ll see what time a get back tonight and work on it then. &lt;code&gt;I was making a website for my Girl Friend&#39;s birthday, but I know very little about web development and was running into issues&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Current goal is to go to 7/11 get some cash, and maybe a snack. Then hit the grocery store, drop off what I get and then head out for the day and get some breakfast/go to the shrine. Let’s see how this goes. &lt;code&gt;For some reason I was very nervous about going to stores... IDK&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ok 7/11 went smooth I got 20000 yen, a coffee and a snack! Payed with suica!
Ate me little açaí cup in a park. &lt;code&gt;There was a small park next to me airbnb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Grocery store went fine. I got bananas,yogurt, avocado, bread, juice, almond milk for like $10. Got change for one of my 10000 yen bills so that’s nice as well. &lt;code&gt;I think the lady asked me if I wanted a bag, which I actually had studied, but she said it too fast so I just stood there looking like an idiot until she just got me a bag&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Went to kamata cafe which was good and then walked around sun road. Saw a couple restaurants that looked good. Now taking the train to the temple.&lt;/p&gt;
&lt;p&gt;Walked through the cemetery and to the ikegami rooftop garden. Got a cool picture of mt fuji from far off in the distance. &lt;code&gt;This would be the best view of Fuji I&#39;d get even though we&#39;d visit a city directly next to the Mtn it was covered by clouds&lt;/code&gt; Walked through the shrine. Inside didn’t allow photos but it had a cool golden display and large drums, very intricate/ornate. Continued walking around, bought a matchbox and sat in a park with a little pond and some trees.&lt;/p&gt;
&lt;p&gt;Walked back to Airbnb from kamata station with no maps assistance! Bought some strawberry KitKat, eating them in the park by the Airbnb, they are pretty good!&lt;/p&gt;
&lt;p&gt;Noticing a few things about the culture here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No adults walking around wearing shorts&lt;/li&gt;
&lt;li&gt;Nobody has sunglasses except some older people&lt;/li&gt;
&lt;li&gt;Very quite in public places, no talking/eating on trains&lt;/li&gt;
&lt;li&gt;Everything very clean&lt;/li&gt;
&lt;li&gt;Everyone has their work uniform, seems most take pride in their work&lt;/li&gt;
&lt;li&gt;There are 0 public trash cans&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Took the train to go meet Chris for dinner. Sat by the meguro river and waited before dinner had some edamame snack. Another guy came to dinner with us named Ben. Good conversation. We talked about Japan a lot, what it means to live here the people/culture. Dinner was good, bunch of small plates, apparently fish semen is really bad, so is the raw chicken… horse is good though. We just ordered from our phones and they brought it. &lt;code&gt;We did not get Fish semen, horse, or raw chicken we just talked about those things&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;We got booted from our table after 2 hours and went to a small pub. They played heavy metal and the bathroom had a chord attached to a door and a guitar, so when you opened the door a chord on the guitar was played… so cool. After a beer, we walked back to the train station and Ben and I took the ekigami line back, he got off before me.&lt;/p&gt;
&lt;p&gt;Walked back to the Airbnb so tired! A couple of beers and lack of sleep will do it to you.&lt;/p&gt;
&lt;h3 id=&#34;417&#34;&gt;4/17:&lt;/h3&gt;
&lt;p&gt;Slept until 5:20 so got 7 hours!! Made some avocado toast but there’s no salt and pepper in the Airbnb but there WAS some in this little plastic utensil set bag a had… huge win.&lt;/p&gt;
&lt;p&gt;Took train over to great cycling tours. Met Yuki-San and Takashi-San and chatted with them for a bit. Then met Eva and caitlin/rob (from Alaska). Was pretty hungry and only brought a couple strawberry Kit Kat.&lt;/p&gt;
&lt;p&gt;We went to:
 - Nihonbashi Bridge
 - Kanda Jimbocho (book town)
 - Koishikawa Korakuen (Japanese Garden)
 - Sugamo shopping street
 - Gokokuji Temple 
 - Zoshigaya Cemetery (Soseki Natsume’s grave)
 - Kishimojin Temple
 - St. Mary&amp;rsquo;s Cathedral  (sorry, in Japanese)
 - Yasukuni Jinja shrine
 - Imperial Palace
 - and through lots of backstreets&lt;/p&gt;
&lt;p&gt;Caitlin got a flat, so we stopped at a shrine and it was the tightest tire I’ve ever seen. Apparently it never happens because the roads are so smooth and clean, and these bikes aren’t the best maintained lol. After an hour &lt;code&gt;and some bloody knuckles&lt;/code&gt; we got it fixed.&lt;/p&gt;
&lt;p&gt;Lunch was really great had curry with udon noodles and tempura vegetables. Stopped for a while and got a matcha tea towards the end. After the tour we struggled to pay &lt;code&gt;(Their device wasn&#39;t working quite right)&lt;/code&gt; and Caitlin forgot her phone and we had beers.&lt;/p&gt;
&lt;p&gt;Took the train back but must have fucked up a bit and realized I started to go the wrong way about half way home (train started going west lol) got off and walked over to the right line and was fine.&lt;/p&gt;
&lt;p&gt;Had a great dinner at Hung’s kitchen &lt;code&gt;tiny Vietnamese restaurant&lt;/code&gt; and a nice conversation with the owner. Amazing experience, the epitome of why I enjoy traveling. Took some spring rolls to go and went to bed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“It is by riding a bicycle that you learn the contours of a country best, since you have to sweat up the hills and coast down them. Thus you remember them as they actually are, while in a motor car only a high hill impresses you, and you have no such accurate remembrance of country you have driven through as you gain by riding a bicycle.” - Hemingway&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;418&#34;&gt;4/18:&lt;/h3&gt;
&lt;p&gt;Went to bed at 9:40 and woke up at 5:40! Got a full 8 hours!! Called pal and ate some breakfast at home. I got the right amount of food, was really nice having some avocado/banana/yogurt for breakfast at home.&lt;/p&gt;
&lt;p&gt;Called pal, sounds like she’s doing well. I struggled to articulate my experiences. Like I can talk about what I’m doing, but I’m struggling to capture how I’m feeling, how I think about Japan/the culture and the people/places I’ve been since I’ve been here. I just need some more time to process. The &lt;a href=&#34;https://www.youtube.com/watch?v=CV2NerRlfHw&#34;&gt;beau miles short film&lt;/a&gt; I watched this morning actually fits pretty well.&lt;/p&gt;
&lt;p&gt;Took three trains to get to Mt Takao. Wasn&amp;rsquo;t bad at all and got to the Mt at like 10:00 am. Hiked up to the top there were a lot of schools with big groups of kids which clogged the trails a bit, I went up #6. The nature was beautiful and there were nice flowers.&lt;/p&gt;
&lt;p&gt;I had a snack and some matcha ice cream at the top. Then I started to descend trail  #4 and it spit me out directly at the soba noodle restaurant, I got the sansai since I didn’t want the raw egg and ate outside with an amazing view. I just wandered into probably the coolest meal so far this trip hahahaha… it just keeps getting better. Had a funny conversation with the waiter about a little jar she brought out which turned out to be spices. I tried to translate the writing on the jar but it was just the name of the merchant and the address not actually what it was and we both laughed. &lt;code&gt;Randomly walking into this place and soaking it in epitomizes what made this trip specials&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I kept walking down after the meal and asked some guy what time it was in Japanese which was cool. &lt;code&gt;Ima nan ji de su ka?&lt;/code&gt; Then saw a waterfall/shrine where there was a monk washing himself and praying. Waterfall is Taki.&lt;/p&gt;
&lt;p&gt;Kept walking down and saw a small animal, kind of looked like a badger or &lt;a href=&#34;https://www.dpreview.com/forums/post/67096616&#34;&gt;those things&lt;/a&gt; we have at Sabino canyon. Headed back down where all the shops were and bought Ally a cute owl and a card.&lt;/p&gt;
&lt;p&gt;Now headed back to the Airbnb on the train going to get ready to hang out with Kenta tonight.&lt;/p&gt;
&lt;p&gt;Took the train and met up with Kenta, train was packed to the brim and some lady was bringing her birds haha. Shibuya was busier and bigger than I could have imagined. I was disoriented just walking around. Bought a couple post cards for pal. and we walked to the place for dinner.&lt;/p&gt;
&lt;p&gt;Kenta’s friends are nice guys, they all went to international school so they speak English fluently and they banter in some combination of English + Japanese. We had some nice sushi, little squid, octopus, chicken kutsu, seaweed soup and drinks for like 40$ per person. I don’t know if I was tired from hiking or just tired from the time change, but I felt like I had vertigo at dinner haha, it was wild.&lt;/p&gt;
&lt;p&gt;Next we went to a pub and got a DK shot &lt;code&gt;Pretty nasty&lt;/code&gt;. Some random guy asked to hang out with us and Kenta said sure lol. DK shot was just some nasty double shot, so did one of those. We went to another one of those British Pubs, I guess they have a bunch of British type pubs here it’s like a chain.&lt;/p&gt;
&lt;p&gt;We went out side and I was a little buzzed and had 45 mins of trains to get home so ended up heading back around 9:45 and headed to bed.&lt;/p&gt;
&lt;h3 id=&#34;419&#34;&gt;4/19:&lt;/h3&gt;
&lt;p&gt;Actually slept in until 7:00am today, had some breakfast at home and started getting all packed up. I can’t believe it’s already time to leave this Airbnb, it was a good pick. Had everything I wanted, quiet location, and forced me to use the local trains to get around.&lt;/p&gt;
&lt;p&gt;I got packed up and then got some cash from 7/11 and hunted around for some flowers to give Taka-San and Keiko-San, but couldn’t find any so headed to the station. Where I had a short ride over to Omori station only one stop away. I was at the station early and got some flowers from a little shop (just worked out perfect) fumbled all the Japanese haha.&lt;/p&gt;
&lt;p&gt;Met Taka and this Croation couple and walked to Taka’s house about ten minutes away from the station. I had my full bag on my back the entire time at this point and we walked slowly, chatted and stopped at a shrine and by the time we had gotten to the house I must have been wearing it for an hour, so my traps/shoulders were completely shot.&lt;/p&gt;
&lt;p&gt;Taka and Keiko are amazing people we did udon noodle making (danced on the dough), origami, made tempura vegetables, learned about our cultures, made sushi, were given gifts, and wrote our names in Katakana in calligraphy. Keiko spilled shochu on me and was very apologetic but it was totally fine. It was such a special experience, just a gem of Japanese culture from people who were caring/dedicated enough to spend so much time preparing for us and inviting us into their home. I can’t wait to return the favor/come back at some point and at the very least send them some photos of us making Soba/Tempura. &lt;code&gt;I have since attempted to do tempura at home once and sent them photos, it turned out ok&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;After that ended, went back o Omori station and headed towards the Airbnb, turns out the Airbnb in the google doc was not the right Airbnb as the address Tristan sent was completely different. Luckily they had landed, so I was able to clarify and get on the correct trains. I made it to the Airbnb first after walking through hordes of people with my bag and finding the door down a small path next to the building, it was a cool three story place above a kebab shop. But it was hot and I was a little nervous about how close we were to some of the busiest places in Tokyo.&lt;/p&gt;
&lt;p&gt;Tristan and Matt showed up next and we walked around for a second and got a few things from a family mart. Then Kaiser showed up and we started ambling around to dinner. I ended up walking us into a Korean place a bit from where we were staying and we had a nice meal where I tried to navigate ordering and that went poorly. But it all worked out the meal was ok, but it was still just fun to hang out and go to a random spot half way around the world (literally).&lt;/p&gt;
&lt;p&gt;I walked home and went to bed the rest of the guys went out for bit I think.&lt;/p&gt;
&lt;h3 id=&#34;420&#34;&gt;4/20:&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;On this day we were going to a baseball game and my friend&#39;s parents house, but I also needed to travel ~3 hours to a small town to go ride bikes the next day. I was pretty nervous about fitting all of this in and navigating the 4-5 trains I&#39;d need to take to get out there.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Woke up at 6:00 today so I think I’m doing pretty good on my sleep schedule. Just wanted to get everything in order for heading out today as all I’m going to have on me is my backpack. I’m a little nervous for this trip, I think I’m going to skip dinner at Kenta’s parents house to give myself the best chance at making it to Kiryu and getting some sleep. I’m going to make it to Kiryu!!!&lt;/p&gt;
&lt;p&gt;Ok so everyone finally woke up, I had gotten all ready early in the morning since I went to bed early. Grabbed a little pancake thing from Lawsons. Came back and Tristan and Mike were ready but Matt wasn’t so we went and got more pancakes and coffee. Then we came back and Matt still wasn&amp;rsquo;t ready, so we had to take a later train.&lt;/p&gt;
&lt;p&gt;I got us on the right train and we met Kenta on the train. We got to the game it was dope. Lot of singing, but we lost, however it was fun and got some good food. Then I got some chopsticks from the shop. Some of Kenta’s friends showed up mid game and hung out with us.&lt;/p&gt;
&lt;p&gt;Then we went to Kenta’s mom’s house and met Kenta’s Mom, Grandma, and sister. I’m so glad I decided to do this and not just go straight to Kiryu, I got to eat a little food and speak some japenese, I think I impressed Kenta’s grandma.&lt;/p&gt;
&lt;p&gt;I’m now on the final train to Kiryu, I actually made a few mistakes closer to central Tokyo, but we freestyled and made possibly a better route. I&amp;rsquo;m a little tired and need to eat some of my food, but I’ve got everything I need and I made it to Kiryu!! (Fingers crossed).&lt;/p&gt;
&lt;p&gt;Checked into hotel, shaved and called Al. Went to bed but couldn&amp;rsquo;t figure out how to close window so kept waking up as the wind would blow really hard haha. &lt;code&gt;CLosing the window was not hard, but I spent probably 20 minutes attempting to do it.&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;421&#34;&gt;4/21:&lt;/h3&gt;
&lt;p&gt;Got up after not great nights sleep but going to get after it. Suited up and walked over to Rob&amp;rsquo;s warehouse. Met Frances, had some coffee, and got set for the ride.&lt;/p&gt;
&lt;p&gt;What a ride, I mean I can’t do it justice with words but I must go back the photos are such a sliver of a momento from such a vast and majestic place. Rob was such a nice guy! A few highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;started off riding on the river path&lt;/li&gt;
&lt;li&gt;Roads so smooth few easy climbs&lt;/li&gt;
&lt;li&gt;Massive perfect tunnel that nobody uses haha&lt;/li&gt;
&lt;li&gt;Large climb can see volcanos, Tokyo, cherry blossoms and lakes&lt;/li&gt;
&lt;li&gt;Stopped for lunch by the lake, chatted about friendships DO A BIG TRIP WITH FRIENDS 1/2 times per year&lt;/li&gt;
&lt;li&gt;Frogs &lt;code&gt;We saw two frogs on top of one another in the middle of the road&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Flatted off a rock&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Made it back to town and had lunch then got myself sorted at the shop. Walked back to the hotel and told the lady I was checking out early. Went up showered and found someone else&amp;rsquo;s shirts so I gave those to the lady and told her a spilled coffee on the sheet (it was blood from cutting myself shaving lol) and she was nice and charged me 1000 yen.&lt;/p&gt;
&lt;p&gt;I then walked over to the other station in kiryu (shin-kiryu) and bought a limited express train ticket. This route is wayyy better than my previous one. Only need to switch trains once. Man I am a little fucked up and dehydrated. But was one of the coolest things I’ve ever done.&lt;/p&gt;
&lt;p&gt;Got back at like 8:30 and the boys waited for me for dinner. We went to this little place and I met Walid, Julian and Jorge. After dinner we got a couple snacks and went to bed I was cooked.&lt;/p&gt;
&lt;h3 id=&#34;422&#34;&gt;4/22:&lt;/h3&gt;
&lt;p&gt;Woke up around 8am and got my shit organized didn’t get out of the house til ~9:30 but the boys picked me up and we walked over to Meiji Jingu. The gardens were really nice and peaceful. After the gardens we took a train to harajuku, and we shopped and looked at gaming cafes. &lt;code&gt;Not really my thing&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After a while I dipped out with Matt and went to this place for ramen which was gas. Had to buy a ticket at the machine and gave it to a little lady that sat us right in front of the chefs. They would take the noodles out of the boiling water and shake the boiling water onto the ground. Ramen was great.&lt;/p&gt;
&lt;p&gt;Then matt and I took a train to meet up with Kenta who was going to take us around a museum. Tristan and them showed up a little after and he had crawfish so he was mucking crawfish with gloves on and got it all over his new bathing ape shirt and we were all laughing. I made friends with ladies in this little cafe and got an ice cream.&lt;/p&gt;
&lt;p&gt;We went into the museum and looked at old Japanese stuff for a while. I got a postcard for ally from the gift shop. Then we walked to this large open air market. There was a ton of crazy stuff (fish, turtles, clothes,etc…) we stopped for fried octopus balls and beers.&lt;/p&gt;
&lt;p&gt;Next we hopped on a train for a sushi dinner. Got to the place and they served out large trays of different sushi almost immediately it was really good and we got Matt an avocado only roll because he barely ate anything. I got us to stop at the hub (British pub) and we had some large beers and a DK shot. After that, we took a train back to the Airbnb, I took a separate train from the other guys but we met up in the walk back from the station.&lt;/p&gt;
&lt;h3 id=&#34;423&#34;&gt;4/23:&lt;/h3&gt;
&lt;p&gt;We had to get up early for a bus ride out to Mt Fuji at 10:15. Spent the morning packing up and then we went to the station to meet Kenta. Kenta brought us to the bus station and I had a fun 2 hour ride listening to music and shooting the shit with Tristan.&lt;/p&gt;
&lt;p&gt;We got to the hotel around 12:00. Dropped out stuff off and went to a Hoto restaurant and sat in the bench in the floor and had hoto and a grape sour. It was very good. Walked back to the hotel and got our room. Room was essentially an open space and then a bathroom/shower.&lt;/p&gt;
&lt;p&gt;We headed out and walked around the town, rented a couple swans and paddled on the lake. Went back to the hotel and put on our traditional bathrobes and want to down to the hot springs.&lt;/p&gt;
&lt;p&gt;There was a locker room and then inside were like 30 seated showers. You shower off first and then go in the hot springs. There’s an indoor, outdoor, and half indoor/ half outdoor. They are hot 44 degrees C, our favorite was the half indoor/outdoor, spent a lot of time with try Kenta and Matt.&lt;/p&gt;
&lt;p&gt;Then we met everyone up on the seventh floor for dinner which was a nice buffet. Ate and drank a ton. Then we went back the room and everyone got a little pissed and we played cards. Mike and I went down and got more beers out of a vending machine and eventually went to bed around 11. &lt;code&gt;Somehow a window got left open and we got hammered by mosquitos&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;424&#34;&gt;4/24:&lt;/h3&gt;
&lt;p&gt;Got up at 5:15 am, was sweating so much my bed was soaked. We went up to the observatory but still couldn’t see Fuji because of the clouds. We went back down and did another 90min sauna session before going to breakfast.&lt;/p&gt;
&lt;p&gt;The other guys woke up like 15 mins before breakfast ended. We checked out and then went up a cable car to a view point above the lake and did a short hike to a small shrine and got some ice cream. We got down and Kenta and I walked back to the bus station while the others took a car. Kenta and I went to get ramen while we waited for the bus.&lt;/p&gt;
&lt;p&gt;The bus back was fine, we worked on Matt’s hinge profile using the photos I took earlier. Then we got back to the station and walked to their hotel. It was a bit of a shit show so I headed to the airport early and said goodbye. Dumped a couple beers by a vending machine and made it to the train. Went through Kamata station one last time as I headed to the airport.&lt;/p&gt;
&lt;p&gt;The people who were on the first bike tour from Alaska were on the same flight to Honolulu. The flight was pretty easy, talked to this girl I sat next to for a bit and then mostly slept. Was pretty groggy landing in Hawaii, but grabbed my bag and re-checked it in after customs with no issue. The flight kept getting delayed, I could’ve spent some time at the garden but every 15mins it’s get delayed like 15 mins. Almost back to PHX now, a bit tired but just need a shower and a meal. Travel went fairly smooth.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 04-19-2025</title>
      <link>/learnedt1w/2025/04_19_2025/</link>
      <pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/04_19_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/KoKuToru/de-pixelate_gaV-O6NPWrI?tab=readme-ov-file&#34;&gt;Unpixelate&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pgdog.dev/blog/hacking-postgres-wire-protocol&#34;&gt;PG wire&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://kumarletter.com/posts/electric-propulsion-s-dirty-secret-why-lithium-can-t-fly-or-float-profitably&#34;&gt;Battery powered profits not quite there&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Flew to Japan, and now I&amp;rsquo;m in Ota City, Japan!&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://earthscience.stackexchange.com/questions/16528/what-are-the-farthest-time-zone-locations#:~:text=You%20can%20see%20that%20the,a%20Wednesday%20in%20Line%20Islands&#34;&gt;Furthest Time zones&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://facts.usps.com/mailing-potatoes/&#34;&gt;Mailing Potatoes&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/KoKuToru/de-pixelate_gaV-O6NPWrI?tab=readme-ov-file&#34;&gt;Unpixelate&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pgdog.dev/blog/hacking-postgres-wire-protocol&#34;&gt;PG wire&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://kumarletter.com/posts/electric-propulsion-s-dirty-secret-why-lithium-can-t-fly-or-float-profitably&#34;&gt;Battery powered profits not quite there&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Flew to Japan, and now I&amp;rsquo;m in Ota City, Japan!&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://earthscience.stackexchange.com/questions/16528/what-are-the-farthest-time-zone-locations#:~:text=You%20can%20see%20that%20the,a%20Wednesday%20in%20Line%20Islands&#34;&gt;Furthest Time zones&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://facts.usps.com/mailing-potatoes/&#34;&gt;Mailing Potatoes&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 04-12-2025</title>
      <link>/learnedt1w/2025/04_12_2025/</link>
      <pubDate>Sat, 12 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/04_12_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://crocidb.com/post/kernel-adventures/demystifying-the-shebang/&#34;&gt;#! - interesting/tidbits&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.openwall.com/lists/oss-security/2025/04/01/1&#34;&gt;https://www.openwall.com/lists/oss-security/2025/04/01/1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Billion_laughs_attack&#34;&gt;Billion lol attack&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://medium.com/@samcrawford/what-s-up-with-airbnb-s-slow-loading-photos-56db484b10fc&#34;&gt;Old article on airbnb photo loading&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://simone.org/advertising/&#34;&gt;Should we make advertising illegal?&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Posting this from Tokyo after 27 hours of travel #dedication&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/ADXX4fmWHbo?si=ce1t10JYyMbK3TPU&#34;&gt;https://youtu.be/ADXX4fmWHbo?si=ce1t10JYyMbK3TPU&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://crocidb.com/post/kernel-adventures/demystifying-the-shebang/&#34;&gt;#! - interesting/tidbits&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.openwall.com/lists/oss-security/2025/04/01/1&#34;&gt;https://www.openwall.com/lists/oss-security/2025/04/01/1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Billion_laughs_attack&#34;&gt;Billion lol attack&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://medium.com/@samcrawford/what-s-up-with-airbnb-s-slow-loading-photos-56db484b10fc&#34;&gt;Old article on airbnb photo loading&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://simone.org/advertising/&#34;&gt;Should we make advertising illegal?&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Posting this from Tokyo after 27 hours of travel #dedication&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/ADXX4fmWHbo?si=ce1t10JYyMbK3TPU&#34;&gt;https://youtu.be/ADXX4fmWHbo?si=ce1t10JYyMbK3TPU&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 04-05-2025</title>
      <link>/learnedt1w/2025/04_05_2025/</link>
      <pubDate>Sat, 05 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/04_05_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://newslttrs.com/yes-in-the-1980s-we-downloaded-games-from-the-radio/&#34;&gt;Downloading games from the radio&lt;/a&gt; it&amp;rsquo;s cool to read about these times as I&amp;rsquo;ve never gotten to experience this.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://oldvcr.blogspot.com/2025/04/the-april-fools-joke-that-might-have.html?m=1&#34;&gt;April Fools&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://sherwood.news/tech/direct-appeal-sundar-pichai-ceo-alphabet-fix-google-finance-stock-charts/&#34;&gt;Google Finance&amp;rsquo;s broken feature&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.science.org/content/blog-post/things-i-won-t-work-dioxygen-difluoride&#34;&gt;Hilarious post on a vary volatile compound&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=y7VtSK23_Jg&#34;&gt;Awesome Chess Project&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://newslttrs.com/yes-in-the-1980s-we-downloaded-games-from-the-radio/&#34;&gt;Downloading games from the radio&lt;/a&gt; it&amp;rsquo;s cool to read about these times as I&amp;rsquo;ve never gotten to experience this.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://oldvcr.blogspot.com/2025/04/the-april-fools-joke-that-might-have.html?m=1&#34;&gt;April Fools&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://sherwood.news/tech/direct-appeal-sundar-pichai-ceo-alphabet-fix-google-finance-stock-charts/&#34;&gt;Google Finance&amp;rsquo;s broken feature&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.science.org/content/blog-post/things-i-won-t-work-dioxygen-difluoride&#34;&gt;Hilarious post on a vary volatile compound&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=y7VtSK23_Jg&#34;&gt;Awesome Chess Project&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Query Banks</title>
      <link>/posts/query_bank/</link>
      <pubDate>Mon, 31 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>/posts/query_bank/</guid>
      <description>&lt;h2 id=&#34;that-query-bank-should-be-a-semantic-layer&#34;&gt;That query bank should be a semantic layer&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve done it myself:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Oh we should just cache all these commonly used queries somewhere central, so we always have a nice definition for someone to use.&amp;rdquo;&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;You could even extend the functionality of this &amp;ldquo;Query Bank&amp;rdquo; and train an LLM, or perform code reviews, or implement search, etc&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sweet, now anyone can grab some code and use it! They can paste it here and in this scheduled job there, science can use it and slam it into a notebook, and others can run ad hoc workloads against it.&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;that-query-bank-should-be-a-semantic-layer&#34;&gt;That query bank should be a semantic layer&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve done it myself:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Oh we should just cache all these commonly used queries somewhere central, so we always have a nice definition for someone to use.&amp;rdquo;&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;You could even extend the functionality of this &amp;ldquo;Query Bank&amp;rdquo; and train an LLM, or perform code reviews, or implement search, etc&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sweet, now anyone can grab some code and use it! They can paste it here and in this scheduled job there, science can use it and slam it into a notebook, and others can run ad hoc workloads against it.&lt;/p&gt;
&lt;h2 id=&#34;no-ahh-the-bank-is-closed&#34;&gt;No, ahh! The BANK IS CLOSED&lt;/h2&gt;
&lt;p&gt;A query bank misses the entire point of DRY, you end up with a hairball of copy/paste code that has no reference to its origin.&lt;/p&gt;
&lt;p&gt;Imagine we took all package management and said you know what instead of depending on our source code you should just &lt;code&gt;copy and paste it into your project&lt;/code&gt; and reference it there!&lt;/p&gt;
&lt;p&gt;That is what the &amp;ldquo;Query Bank&amp;rdquo; is doing because &lt;code&gt;you can&#39;t inject the latest definition(query) at run time&lt;/code&gt;. If you &lt;strong&gt;CAN&lt;/strong&gt; do this then you don&amp;rsquo;t have a query bank, you have an &lt;strong&gt;actual data model&lt;/strong&gt;, fleshed out with materialized relations that have some established dependency chain which you can reference in your workflow.&lt;/p&gt;
&lt;p&gt;The query bank is just a bandaid for broken process/data models:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No lineage of where code has been copied&lt;/li&gt;
&lt;li&gt;No ability to update code across all copies&lt;/li&gt;
&lt;li&gt;Limited ability to notify users of changes to upstream code&lt;/li&gt;
&lt;li&gt;Most likely repeating ourselves which is extra work for people and DBMS&lt;/li&gt;
&lt;li&gt;Will 100% cause discrepancies between &amp;ldquo;Sources of Truth&amp;rdquo;&lt;/li&gt;
&lt;li&gt;No ability to ensure code is being copy/pasted into the correct context&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Creating tables establishes consistency, durability and determinism that&amp;rsquo;s not possible with a &amp;ldquo;Query bank&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;the-bank-is-open&#34;&gt;The Bank is open&lt;/h2&gt;
&lt;p&gt;Make a table, document the table, expose the table, manage access, and share the table.&lt;/p&gt;
&lt;p&gt;Ask yourself a few questions before you act:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Should I really send this code to someone or should I just DEFINE this once and allow them to read from the definition?&lt;/li&gt;
&lt;li&gt;This job, model, notebook whatever you want to call it is already like 1000 lines of SQL should I really pile on more logic to this or maybe its time ot break down into a series of relations?&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;ve seen this Temporary table, CTE, etc&amp;hellip; in a bunch of people&amp;rsquo;s queries should I just paste it into mine or is there something better I can do?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;its-your-problem-until-you-fix-it-or-find-the-owner&#34;&gt;It&amp;rsquo;s your problem until you fix it or find the owner&lt;/h2&gt;
&lt;p&gt;Here&amp;rsquo;s a challenge as an example. If you see a long case statement being shared around. Yes, literally just a case statement without any context&amp;hellip; take the initiative and see if you can&amp;rsquo;t centralize that and store it is a relation for the people needing it.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s most likely they don&amp;rsquo;t know any better and will continue to do this until they have a nasty data quality issue/argument.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Advice to Beginner Cyclists</title>
      <link>/musings/beginner_cyclist/</link>
      <pubDate>Sun, 30 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>/musings/beginner_cyclist/</guid>
      <description>&lt;p&gt;Found myself giving a bit of advice to new cyclists, so I figured I&amp;rsquo;d store my thoughts here so I can share it. This is primarily for road cycling, but a lot of it could be applicable more broadly.&lt;/p&gt;
&lt;p&gt;These are just semi-organized tips this is not an exhaustive list of everything you should or need to do.&lt;/p&gt;
&lt;p&gt;I like riding bikes, I&amp;rsquo;m not a mechanic, I&amp;rsquo;m not a pro, and my opinions are subject to change. Anything you read is just my experience and nothing more.&lt;/p&gt;</description>
      <content>&lt;p&gt;Found myself giving a bit of advice to new cyclists, so I figured I&amp;rsquo;d store my thoughts here so I can share it. This is primarily for road cycling, but a lot of it could be applicable more broadly.&lt;/p&gt;
&lt;p&gt;These are just semi-organized tips this is not an exhaustive list of everything you should or need to do.&lt;/p&gt;
&lt;p&gt;I like riding bikes, I&amp;rsquo;m not a mechanic, I&amp;rsquo;m not a pro, and my opinions are subject to change. Anything you read is just my experience and nothing more.&lt;/p&gt;
&lt;h2 id=&#34;buying-a-bike&#34;&gt;Buying a Bike&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;I would NOT start off with an expensive bike&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You may not know how much/how long you will enjoy riding&lt;/li&gt;
&lt;li&gt;Your bike handling skills will be at their worst and you&amp;rsquo;ll be learning no skills (Clip-less pedals), expect to fall once or twice&lt;/li&gt;
&lt;li&gt;You will probably make some maintenance mistakes&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Here&amp;rsquo;s a &lt;a href=&#34;https://www.reddit.com/r/cycling/comments/8bll3n/my_usedbike_buying_checklist_having_learned_from/&#34;&gt;few&lt;/a&gt; &lt;a href=&#34;https://www.bikeradar.com/features/how-to-buy-a-used-or-second-hand-bike-online&#34;&gt;good&lt;/a&gt; threads on buying a used bike.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you want to buy a new bike I&amp;rsquo;d recommend buying a bike with &lt;a href=&#34;https://road.cc/content/buyers-guide/your-complete-guide-shimano-road-bike-groupsets-206768&#34;&gt;Shimano 105&lt;/a&gt;, I&amp;rsquo;d go around to a few bike shops to test ride some bikes, and I&amp;rsquo;d run &lt;a href=&#34;https://www.rei.com/learn/expert-advice/tubed-vs-tubeless.html&#34;&gt;tubed tires&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;other-things-youll-want&#34;&gt;Other Things You&amp;rsquo;ll Want&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Get several good pairs of bibs/jerseys. This will make your rides way more comfortable. You&amp;rsquo;ll want bibs that have shoulder straps not bibs that are essentially padded shorts. Maybe go try some on before you buy&amp;hellip;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get a small red light to attach to the rear of your bike&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get a good hemet, check out the &lt;a href=&#34;https://www.helmet.beam.vt.edu/bicycle-helmet-ratings.html&#34;&gt;Virginia Tech Helmet Ratings&lt;/a&gt; to find a protective helmet at a good price&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You will most likely want &lt;a href=&#34;https://www.youtube.com/watch?v=wXgqsQlFDsA&#34;&gt;clipless pedals&lt;/a&gt; and the associated shoes&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get a nice pair of non polarized sun-glasses that offer a good field of vision&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You should get a saddle bag to carry things like, an extra tube, a $20 bill, a multi tool, some tire levers, etc&amp;hellip;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You will want bottle cages, the &lt;a href=&#34;https://www.trekbikes.com/us/en_US/equipment/bike-accessories/bike-water-bottles-cages/bike-water-bottle-cages/bontrager-bat-cage-water-bottle-cage/p/27863/&#34;&gt;Trek Bat Cages&lt;/a&gt; are pretty damn good for the $$$. You should also get some bottles for your cages&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get a small hand pump to take with you while you ride, you can put this in one of the pockets of the jersey that you bought (Might as well get a decent floor pump too)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;before-you-ride&#34;&gt;Before you ride&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;I like &lt;a href=&#34;https://www.strava.com/&#34;&gt;Strava&lt;/a&gt; or you can download an alternative tracking app. It&amp;rsquo;s really nice to have the data, it&amp;rsquo;s great for planning routes, and can be helpful with initial social interactions (Group rides, challenges, etc&amp;hellip;). Its also very good for tracking the mileage on your components, how many miles are on my tires, do I need to bleed my breaks, should I check my chain wear&amp;hellip; you can come to a much more accurate conclusion with an understanding of the overall mileage on these components and inspecting them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check your tire pressure, bring a spare tube, bring tire levers, have a multi-tool, bring food and water&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Practice using clipless pedals on a soft surface (Grass) before you hit the pavement&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You&amp;rsquo;ll want a bike fit, at the very least watch a couple videos and play around with your position on the bike a bit. Eventually you will want a bike fit&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;while-riding&#34;&gt;While Riding&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;If you are swerving trying to open up some food, find yourself in a lot of traffic, or are checking your phone for x,y,z reason&amp;hellip; STOP, there are unavoidable accidents and there are avoidable accidents. Don&amp;rsquo;t hurt yourself/ your bike, just unclip put your foot down and re-orient yourself or leave the busy road in a safe manner.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nobody gives a shit about your average speed, don&amp;rsquo;t take silly risks with some thought of setting your fastest time or keeping your speed high&amp;hellip; not worth it&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Try and ride as consistently as possible. Don&amp;rsquo;t spike your power out of every stop/turn, attempt to maintain the same power as much as possible&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Let people know you&amp;rsquo;re going to pass them by telling them you are going to pass them and on which side you are going to pass them&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you find yourself about to hit a patch of sand/gravel on the side of the road do not attempt to turn or suddenly brake, apply a bit of power and ride through it. Do not intentionally take your road bike on a gravel ride it won&amp;rsquo;t perform well. When turning look out for sand/gravel as it can cause you to slide out&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you&amp;rsquo;re riding with others, give hand signs regarding road debris/pot holes, let them know when you are slowing, and point to where you want to go or let them know. Don&amp;rsquo;t half wheel people.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When taking a tight turn raise your inside knee and apply pressure through your outside foot and inside hand. Don&amp;rsquo;t break in the middle of a tight turn&amp;hellip; break before.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bring food! Eat while you ride especially for long rides &amp;gt; 90 minutes. Bonking is NOT fun and completely avoidable. If its a short ride, and I plan to do some intervals I&amp;rsquo;m bringing a lot of high carbohydrate snacks. If its a longer ride I&amp;rsquo;m bringing a mix of high carbohydrate, dried fruit, trail mix, etc&amp;hellip;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Take in fluids and do so in a manner that&amp;rsquo;s conducive to rehydrating yourself. Don&amp;rsquo;t waste your money, &lt;a href=&#34;https://rpstrength.com/blogs/articles/saving-money-as-an-endurance-athlete-with-home-made-intra-workout-drinks&#34;&gt;mix sugar, salt and water&lt;/a&gt;. Uh oh&amp;hellip; turns out sugar isn&amp;rsquo;t &amp;ldquo;bad for you&amp;rdquo; actually no food is necessarily &amp;ldquo;bad for you&amp;rdquo; its chronic over-indulgence and under-exercise that&amp;rsquo;s &amp;ldquo;bad&amp;rdquo; for you. I&amp;rsquo;m getting on my soap box here a little bit because some lady in Sprouts was telling everyone how bad sugar was for them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Be respectful of vehicles, keep a keen eye on drive ways and entrances/exits. Watch out for newly parked vehicles and cars people are getting in/out of. If you are at an intersection operate under the assumption that you are invisible and you&amp;rsquo;re essentially playing a game of Frogger. Don&amp;rsquo;t ride against traffic. If you&amp;rsquo;re coming up on the right side of someone about to make a right they may not notice you.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Try and ride at times when there are less cars/people. This can depend on your location but early morning rides and weekends are typically better. You can use Strava heat maps to plan your routes and see where others are riding.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;i-want-to-get-faster&#34;&gt;I want to get faster&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;You will want to get a power meter/heart rate monitor. This will make training much easier/reliable&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Best weight/speed improvements per dollar: Get in a more aerodynamic position on your bike, better Tires/Rims, better Shoes/Pedals, better Saddle/Seat Post&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check out &lt;a href=&#34;https://www.youtube.com/@DylanJohnsonCycling&#34;&gt;this channel&lt;/a&gt; and look up some of the basic videos on how to get faster. I think this channel probably has just about all the knowledge you need to train optimally baring hiring a good coach but that&amp;rsquo;s going to cost you $$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ride a lot&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;basic-maintenance&#34;&gt;Basic maintenance&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;This &lt;a href=&#34;https://www.amazon.com/SILCA-Collection-performance-biodegradable-concentrated/dp/B0BG8Z2YVJ?source=ps-sl-shoppingads-lpcontext&amp;amp;ref_=fplfs&amp;amp;smid=A2HIE82G0UUEVZ&amp;amp;gPromoCode=17993407782328018526&amp;amp;gQT=1&amp;amp;th=1&#34;&gt;stuff&lt;/a&gt; is pretty good at cleaning your drive train. This &lt;a href=&#34;https://www.amazon.com/Rock-Roll-Chain-Refill-Bottle/dp/B08XS23DG3?source=ps-sl-shoppingads-lpcontext&amp;amp;ref_=fplfs&amp;amp;psc=1&amp;amp;smid=A1TYOE2YKIHA0H&amp;amp;gQT=2&#34;&gt;stuff&lt;/a&gt; is good at lubing your chain (it&amp;rsquo;s wax based, check out the difference between wax/oil based depending on where you live)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I thoroughly clean my drivetrain every 2 weeks and lube my chain 2x per week but this varies based on how much I&amp;rsquo;m riding. Thorough cleaning currently involves spraying the drive train with the SILCA Drivetrain cleaner and brushing the metal components to get at any dirt/grime, washing everything away with water. I use a microfiber cloth to dry things off and get in between the cassette and chain rings. Once dry I apply the Rock n Roll Gold and use a microfiber cloth, running my chain through the cloth and cleaning the pulley wheels as well.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I like to clean my bike after I ride with a microfiber cloth and/or with some baby wipes to wipe off dirt and mud.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Track the mileage on your components (I mentioned above that I use strava for this)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Put &lt;a href=&#34;https://www.parktool.com/en-us/product/polylube-1000-lubricant-tube-ppl-1&#34;&gt;grease&lt;/a&gt; on your things&amp;hellip; &amp;ldquo;Used with any type of ball bearings, threads, or press fit applications found on a bicycle, including headsets, bottom brackets, cranks, pedals, and hubs.&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I love picking up new maintenance things and learning hwo to do them, but when in doubt take it to a shop. If you&amp;rsquo;re friendly they will most likely let you watch if it&amp;rsquo;s a small ordeal like swapping out your chain&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;other-useful-things-you-will-eventually-want&#34;&gt;Other useful things you will eventually want&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Heart Rate monitor&lt;/li&gt;
&lt;li&gt;Bike computer&lt;/li&gt;
&lt;li&gt;A power meter&lt;/li&gt;
&lt;li&gt;Tubeless tires&lt;/li&gt;
&lt;li&gt;Chain tool&lt;/li&gt;
&lt;li&gt;Chain wear checker&lt;/li&gt;
&lt;li&gt;A bike stand&lt;/li&gt;
&lt;li&gt;Torque wrench&lt;/li&gt;
&lt;li&gt;Quicklink Pliers&lt;/li&gt;
&lt;li&gt;Valve stem remover&lt;/li&gt;
&lt;li&gt;Sealant injector/measure&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;other-weird-road-cycling-stuff&#34;&gt;Other weird road cycling stuff&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Put the arms of your sun glasses over your helmet straps&lt;/li&gt;
&lt;li&gt;Remove your pie plate/reflectors, better yet if you bought your bike from a bike shop have them do it&lt;/li&gt;
&lt;li&gt;Get socks that end just at the base of your calves, try and match the color of your shoes&lt;/li&gt;
&lt;/ol&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 03-29-2025</title>
      <link>/learnedt1w/2025/03_29_2025/</link>
      <pubDate>Sat, 29 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/03_29_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.astral.sh/uv/&#34;&gt;Exploring&lt;/a&gt; &lt;code&gt;UV&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can run a tool in an ephemeral environment &lt;code&gt;uvx pycowsay &#39;hello world!&#39;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uvx&lt;/code&gt; is an alias for &lt;code&gt;uv tool run&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;install different python versions &lt;code&gt;uv python install 3.10 3.11 3.12&lt;/code&gt; and pin them in a directory &lt;code&gt;uv python pin 3.11&lt;/code&gt;; however, by default, Python versions are automatically downloaded as needed without using uv python install&lt;/li&gt;
&lt;li&gt;The .python-version file can be used to create a default Python version request. uv searches for a .python-version file in the working directory and each of its parents. If none is found, uv will check the user-level configuration directory.&lt;/li&gt;
&lt;li&gt;Executes standalone scripts with &lt;code&gt;run&lt;/code&gt;. &lt;code&gt;echo &amp;quot;print(2+2)&amp;quot; &amp;gt; example.py | uv run example.py&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv pip freeze:&lt;/code&gt; List installed packages and their versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://oldmanprogrammer.net/source.php?dir=projects/tree&#34;&gt;Cool project to visualize directory structure with&lt;/a&gt; &lt;code&gt;tree&lt;/code&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.astral.sh/uv/&#34;&gt;Exploring&lt;/a&gt; &lt;code&gt;UV&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can run a tool in an ephemeral environment &lt;code&gt;uvx pycowsay &#39;hello world!&#39;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uvx&lt;/code&gt; is an alias for &lt;code&gt;uv tool run&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;install different python versions &lt;code&gt;uv python install 3.10 3.11 3.12&lt;/code&gt; and pin them in a directory &lt;code&gt;uv python pin 3.11&lt;/code&gt;; however, by default, Python versions are automatically downloaded as needed without using uv python install&lt;/li&gt;
&lt;li&gt;The .python-version file can be used to create a default Python version request. uv searches for a .python-version file in the working directory and each of its parents. If none is found, uv will check the user-level configuration directory.&lt;/li&gt;
&lt;li&gt;Executes standalone scripts with &lt;code&gt;run&lt;/code&gt;. &lt;code&gt;echo &amp;quot;print(2+2)&amp;quot; &amp;gt; example.py | uv run example.py&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv pip freeze:&lt;/code&gt; List installed packages and their versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://oldmanprogrammer.net/source.php?dir=projects/tree&#34;&gt;Cool project to visualize directory structure with&lt;/a&gt; &lt;code&gt;tree&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://inventwithpython.com/recursion/chapter1.html&#34;&gt;Fun introduction to Recursion&lt;/a&gt; from Al Sweigart&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://utcc.utoronto.ca/~cks/space/blog/programming/GitUpdatingLocalChangesWithMore&#34;&gt;Updating local commits with more changes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/pattern-matching-conditions-posix.html&#34;&gt;Redshift Posix Operators&lt;/a&gt;&lt;code&gt;~&lt;/code&gt;
And A &lt;code&gt;~~ &lt;/code&gt;is a synonym for LIKE. Pretty cool, had no idea!&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/&#34;&gt;Falsehoods Programmers Believe About Names&lt;/a&gt;, tried to read this in the Japanese translation and I can&amp;rsquo;t!&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=mhr3REshTss&#34;&gt;Companion Planting&lt;/a&gt; French Marigold seems to ward off pests!?&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>LA Spring 2025</title>
      <link>/travel/la_spring_2025/</link>
      <pubDate>Sat, 22 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>/travel/la_spring_2025/</guid>
      <description>&lt;h3 id=&#34;recap-of-my-trip-to-la-from-3132025---3192025&#34;&gt;Recap of my trip to LA from 3/13/2025 -&amp;gt; 3/19/2025&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;13th&lt;/strong&gt;
Flew to LA, checked the bike no problem (this was my first time flying with my bike). I borrowed a bike bag from a friend, it was pretty easy to pack. Flight delayed 1 hour, so &lt;a href=&#34;https://www.strava.com/activities/13877101038&#34;&gt;I walked six miles&lt;/a&gt; in the airport. Few weirdos on the flight. Got to bed around midnight.&lt;/p&gt;
&lt;p&gt;Bike all packed up:
&lt;img src=&#34;/images/Bike_Case.jpeg&#34; alt=&#34;Bike Case&#34;&gt;&lt;/p&gt;
&lt;p&gt;The Cat:
&lt;img src=&#34;/images/suck.jpeg&#34; alt=&#34;Suki&#34;&gt;&lt;/p&gt;</description>
      <content>&lt;h3 id=&#34;recap-of-my-trip-to-la-from-3132025---3192025&#34;&gt;Recap of my trip to LA from 3/13/2025 -&amp;gt; 3/19/2025&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;13th&lt;/strong&gt;
Flew to LA, checked the bike no problem (this was my first time flying with my bike). I borrowed a bike bag from a friend, it was pretty easy to pack. Flight delayed 1 hour, so &lt;a href=&#34;https://www.strava.com/activities/13877101038&#34;&gt;I walked six miles&lt;/a&gt; in the airport. Few weirdos on the flight. Got to bed around midnight.&lt;/p&gt;
&lt;p&gt;Bike all packed up:
&lt;img src=&#34;/images/Bike_Case.jpeg&#34; alt=&#34;Bike Case&#34;&gt;&lt;/p&gt;
&lt;p&gt;The Cat:
&lt;img src=&#34;/images/suck.jpeg&#34; alt=&#34;Suki&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;14th&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Woke up at 9:15 did a few things for work, built my bike and went to Sprouts. Very rainy but got stuff for a pot roast. We went back to Ben’s and then drove over to meet Jacob (Another 3L at USC). We did a 9 mile walk through a lake and over to dinner at tu madre. We ended the night going through a few bars before walking back to Jacob’s and driving home. Good guy, it was a fun time.&lt;/p&gt;
&lt;p&gt;Saw this cool Isuzu Trooper:
&lt;img src=&#34;/images/Trooper.jpeg&#34; alt=&#34;Trooper&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;15th&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Woke up pretty late. Bike was shifting terribly. &lt;a href=&#34;https://www.strava.com/activities/13893727390&#34;&gt;Did a 2:30 hour ride&lt;/a&gt; through some really nice neighborhoods in Beverly Hills. Not much shoulder, plenty of cars, but it went fine. I put the pot roast on before we left. Very simple roast just seared up some chuck and then letting in simmer in stock/vegetables for a few hours. Took the bike to REI and Brian got it shifting better. Drove home and had dinner with Gabi and Bishop. And then we walked to salt and straw and got ice cream.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;16th&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Woke up at 10am, watched some premier league soccer . Went for &lt;a href=&#34;https://www.strava.com/activities/13902749013&#34;&gt;90 minute ride&lt;/a&gt; up the same nice neighborhoods. Running a little late, Mitch came over and we drove to the intuit dome. Clippers smacked the hornets. Dome was extremely annoying to get into but the large screens were cool.
Watched &lt;a href=&#34;https://en.wikipedia.org/wiki/Sexy_Beast&#34;&gt;sexy beast&lt;/a&gt; which was ok.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Clippers.jpeg&#34; alt=&#34;Clippers Game&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;17th&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Woke up going to do a big ride with Jeremy (Another 3L at USC) today around Palos Verdes. Was really nice to start with a bit of traffic, the beach path was quite sandy. The coastal road was basically falling apart and closed to bikes but we went anyway there was an incredibly steep pitch. The rest of the ride was cool there was some switch backs that this McLaren kept doing over and over. Descent was a little sketchy. We stopped at Mickeys Italian deli for lunch and got corned beef sandwiches for St.Paddy’s day. After leaving, we had about an hour to get home and it started raining super hard&amp;hellip; we were freezing. We got home and had to dry all our clothes out. Then we had leftovers and watched &lt;a href=&#34;https://en.wikipedia.org/wiki/Collateral_%28film%29&#34;&gt;collateral&lt;/a&gt;.
&lt;img src=&#34;/images/Palos_Verdes.jpeg&#34; alt=&#34;Palos Verdes&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;18th&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Drove up to Santa Barbara. Airbnb small but nice, dropped our stuff off and went for a ride. Climb was super long and steep. Saw a vulture grab a dead gopher and drop it right in front of us. Some of the &lt;a href=&#34;https://www.strava.com/activities/13922169951&#34;&gt;coolest riding&lt;/a&gt; I’ve ever done. We chose the right direction to do it in, as the pavement on the descent was really nice. We showered and got Mexican food. Gave my pozole to a homeless women, got ice cream at Ralph’s.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Old_San_Marcos.jpeg&#34; alt=&#34;Old San Marcos&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;19th&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Walked to the beach in the morning and got some avocado toast. Drove back to LA. Put my bike back in its case for the flight and got dropped off at LAX. Flight was uneventful, and I made it back safe.&lt;/p&gt;
&lt;p&gt;The international terminal at LAX is wild:
&lt;img src=&#34;/images/LA_AIRPORT.jpeg&#34; alt=&#34;LAX&#34;&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 03-22-2025</title>
      <link>/learnedt1w/2025/03_22_2025/</link>
      <pubDate>Sat, 22 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/03_22_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;git stash list&lt;/code&gt; list git stashes and then you can drop via:  &lt;code&gt;git stash drop stash@{0}&lt;/code&gt;
&lt;a href=&#34;https://git-scm.com/docs/git-stash&#34;&gt;git stash&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=-PZPydgfqO0&#34;&gt;REPL stands for Read Evaluate Print Loop&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Air_brake_%28road_vehicle%29&#34;&gt;How air breaks work&lt;/a&gt;. Essentially uses pressurized air instead of hydraulic fluid. Comes with the benefit of being &amp;ldquo;on&amp;rdquo; if the system breaks causing the vehicle to break&amp;hellip; which has the tradeoff of making them difficult to move.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;git stash list&lt;/code&gt; list git stashes and then you can drop via:  &lt;code&gt;git stash drop stash@{0}&lt;/code&gt;
&lt;a href=&#34;https://git-scm.com/docs/git-stash&#34;&gt;git stash&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=-PZPydgfqO0&#34;&gt;REPL stands for Read Evaluate Print Loop&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Air_brake_%28road_vehicle%29&#34;&gt;How air breaks work&lt;/a&gt;. Essentially uses pressurized air instead of hydraulic fluid. Comes with the benefit of being &amp;ldquo;on&amp;rdquo; if the system breaks causing the vehicle to break&amp;hellip; which has the tradeoff of making them difficult to move.&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>Table Creation</title>
      <link>/posts/creating_tables/</link>
      <pubDate>Mon, 17 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>/posts/creating_tables/</guid>
      <description>&lt;h3 id=&#34;collection-of-thoughts-on-table-creation&#34;&gt;Collection of thoughts on table creation.&lt;/h3&gt;
&lt;p&gt;This is specifically regarding tables for analytics (OLAP queries, Data Warehouse, etc&amp;hellip;). This is also specific to a larger organization, I don&amp;rsquo;t necessary apply these when working locally with duckDB per se.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Get a good understanding of who&amp;rsquo;s going to use the table, what they need, and when they&amp;rsquo;ll need that data by. This will help inform your data model and manage dependencies. If you are working directly with another team have them &lt;strong&gt;list out&lt;/strong&gt; all of the requirements and set a date when this list will be final.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;When working on a request for our finance partners, I was starting on it and everyday they wanted to add this, change that&amp;hellip;. nip that in the bud&amp;hellip; have them curate what they want with the expectation that it will lock once you start building it. This will force them to stop, think critically, and figure out exactly what they need. I have only had to make significant updates to this table once in the last 14 months because of this. (I guess I can&amp;rsquo;t prove causation, but I think it helped)&lt;/p&gt;</description>
      <content>&lt;h3 id=&#34;collection-of-thoughts-on-table-creation&#34;&gt;Collection of thoughts on table creation.&lt;/h3&gt;
&lt;p&gt;This is specifically regarding tables for analytics (OLAP queries, Data Warehouse, etc&amp;hellip;). This is also specific to a larger organization, I don&amp;rsquo;t necessary apply these when working locally with duckDB per se.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Get a good understanding of who&amp;rsquo;s going to use the table, what they need, and when they&amp;rsquo;ll need that data by. This will help inform your data model and manage dependencies. If you are working directly with another team have them &lt;strong&gt;list out&lt;/strong&gt; all of the requirements and set a date when this list will be final.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;When working on a request for our finance partners, I was starting on it and everyday they wanted to add this, change that&amp;hellip;. nip that in the bud&amp;hellip; have them curate what they want with the expectation that it will lock once you start building it. This will force them to stop, think critically, and figure out exactly what they need. I have only had to make significant updates to this table once in the last 14 months because of this. (I guess I can&amp;rsquo;t prove causation, but I think it helped)&lt;/p&gt;&lt;/blockquote&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;
&lt;p&gt;Don&amp;rsquo;t try and do too much in a single relation, you may think you are doing people favors by adding columns, nested data structures, and complexity but there&amp;rsquo;s a delicate balance here. A classic mistake is building extremely &lt;a href=&#34;https://selectfromwhereand.com/posts/widetables/&#34;&gt;wide tables&lt;/a&gt;. These tables are for everybody and nobody because each aspect of the table wont be &amp;ldquo;good enough&amp;rdquo;. The goal is commonly to try and bring in hundreds of attributes at a specific granularity, but it turns into a dependency and data quality nightmare without being able to satisfy many questions without making comprises that nobody can accept.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Document your stuff. I&amp;rsquo;m a firm believer that what you build is only as good as your documentation. Don&amp;rsquo;t continue to contribute to the sea of blank column descriptions and opaque DAGs that your stakeholder/peers will have to waste time figuring out. You will also waste your own time explaining things to your stakeholders over and over. Instead, create a thorough explanatory resource and point people to it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Publish it to a shared data catalog if possible&amp;hellip; I&amp;rsquo;ve made this mistake countless times of creating local tables, them gaining a solid user base and then having to later share it and manage access across various people/software entities. A few caveats in that I would not do this if you&amp;rsquo;re still developing the table and making fast iterations&amp;hellip; but otherwise it&amp;rsquo;s going to give you the ability to manage access, control updates, configure dependencies, and cascade relevant notifications so much easier.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Write tests and perform code reviews. We are working on better testing frameworks to role out.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;The last thing you want is people/down stream jobs consuming trash that could&amp;rsquo;ve been blocked from being written to the table in the first place.&lt;/li&gt;
&lt;li&gt;Having someone review your code/table is a no-brainer. Writing SQL against the table and using it as it would be used in production will uncover oddities/issues that would otherwise plague consumer.&lt;/li&gt;
&lt;/ul&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 03-15-2025</title>
      <link>/learnedt1w/2025/03_15_2025/</link>
      <pubDate>Sat, 15 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/03_15_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://duckdb.org/2025/03/12/duckdb-ui&#34;&gt;Duckdb with the&amp;hellip; UI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://computing.help.inf.ed.ac.uk/FAQ/whats-tarball-or-how-do-i-unpack-or-create-tgz-or-targz-file&#34;&gt;Tarball&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.jooq.org/doc/latest/manual/sql-building/sql-statements/merge-statement/&#34;&gt;Merge Statements&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.gitbutler.com/going-down-the-rabbit-hole-of-gits-new-bundle-uri/&#34;&gt;Git Bundle + CDNs and such&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://sherwood.news/business/while-no-ones-buying-homes-rockets-buying-redfin/?utm_source=snacks&amp;amp;utm_medium=email&amp;amp;utm_campaign=snacks_20250311&amp;amp;utm_content=479d6222d14000808da35026a1b44efe&#34;&gt;Redfin getting acquired&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://facts.usps.com/map/#fact969&#34;&gt;The largest ZIP Code, in square miles, in the contiguous U.S. is 30,683 square miles.&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Traveling to LA and Santa Barbara to visit Ben for his Spring Break.&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=MglSoMaXCOM&#34;&gt;I don&amp;rsquo;t take sides I take pictures&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://duckdb.org/2025/03/12/duckdb-ui&#34;&gt;Duckdb with the&amp;hellip; UI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://computing.help.inf.ed.ac.uk/FAQ/whats-tarball-or-how-do-i-unpack-or-create-tgz-or-targz-file&#34;&gt;Tarball&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.jooq.org/doc/latest/manual/sql-building/sql-statements/merge-statement/&#34;&gt;Merge Statements&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.gitbutler.com/going-down-the-rabbit-hole-of-gits-new-bundle-uri/&#34;&gt;Git Bundle + CDNs and such&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://sherwood.news/business/while-no-ones-buying-homes-rockets-buying-redfin/?utm_source=snacks&amp;amp;utm_medium=email&amp;amp;utm_campaign=snacks_20250311&amp;amp;utm_content=479d6222d14000808da35026a1b44efe&#34;&gt;Redfin getting acquired&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://facts.usps.com/map/#fact969&#34;&gt;The largest ZIP Code, in square miles, in the contiguous U.S. is 30,683 square miles.&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Traveling to LA and Santa Barbara to visit Ben for his Spring Break.&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=MglSoMaXCOM&#34;&gt;I don&amp;rsquo;t take sides I take pictures&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 03-08-2025</title>
      <link>/learnedt1w/2025/03_08_2025/</link>
      <pubDate>Sat, 08 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/03_08_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;DuckDB has a &lt;a href=&#34;https://duckdb.org/docs/stable/sql/functions/char.html&#34;&gt;bar function&lt;/a&gt; which draws a band whose width is proportional to (x - min) and equal to width characters when x = max.&lt;/p&gt;
&lt;p&gt;You could also implement this in other DBMS with ratio_to_report() and &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/r_REPEAT.html&#34;&gt;repeat()&lt;/a&gt;&amp;hellip; repeat I hadn&amp;rsquo;t heard about until this week.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s some other fun ones in Redshift like &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/r_INITCAP.html&#34;&gt;initcap()&lt;/a&gt; which capitalizes the first letter of each word.&lt;/p&gt;
&lt;p&gt;Postgres has nice docs on &lt;a href=&#34;https://www.postgresql.org/docs/current/datatype-character.html#DATATYPE-CHARACTER&#34;&gt;Character Types&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;DuckDB has a &lt;a href=&#34;https://duckdb.org/docs/stable/sql/functions/char.html&#34;&gt;bar function&lt;/a&gt; which draws a band whose width is proportional to (x - min) and equal to width characters when x = max.&lt;/p&gt;
&lt;p&gt;You could also implement this in other DBMS with ratio_to_report() and &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/r_REPEAT.html&#34;&gt;repeat()&lt;/a&gt;&amp;hellip; repeat I hadn&amp;rsquo;t heard about until this week.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s some other fun ones in Redshift like &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/r_INITCAP.html&#34;&gt;initcap()&lt;/a&gt; which capitalizes the first letter of each word.&lt;/p&gt;
&lt;p&gt;Postgres has nice docs on &lt;a href=&#34;https://www.postgresql.org/docs/current/datatype-character.html#DATATYPE-CHARACTER&#34;&gt;Character Types&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There is no performance difference among these three types, apart from increased storage space when using the blank-padded type, and a few extra CPU cycles to check the length when storing into a length-constrained column. While character(n) has performance advantages in some other database systems, there is no such advantage in PostgreSQL; in fact character(n) is usually the slowest of the three because of its additional storage costs. In most situations text or character varying should be used instead.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.science.org/doi/full/10.1126/sciadv.ads1560?af=R&#34;&gt;Age and Cognitive Skills&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;First, average skills increase strongly into the forties before decreasing slightly in literacy and more strongly in numeracy. Second, skills decline at older ages only for those with below-average skill usage.&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;We hosted two gatherings at our house in Tucson this week. On Thursday, I used the charcoal grill I got for Christmas for the first time, cooking two tri-tips and four new york strips. A few tips on charcoal grilling:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A chimney is critical to getting the coals lit, and you need to get a decent fire underneath the coals to really get them going&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You can throw more coals on already lit coals if you need to, but this will come at the cost of more smoke/flames&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Try to leave the lid on as MUCH as possible as the temperature drops significantly when it comes off.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start off with more coals then you need and create hot/cold zones by pushing the coals to one side and moving them around as needed. Just use a meat thermometer to take the guess work out of &amp;ldquo;doneness&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On Saturday, I made a bourbon braised chuck roast using seven lbs of chuck. We were going to watch a movie outside, but it was really cold so we played games inside.&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Reminds me of that famous tombstone inscription: &amp;ldquo;I told you I was sick!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;It is easier to fool a man than to explain to him that he was fooled.&amp;rdquo;  (Mark Twain)&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/The_Conversation&#34;&gt;The Conversation&lt;/a&gt; was good R.I.P Gene Hackman&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 03-01-2025</title>
      <link>/learnedt1w/2025/03_01_2025/</link>
      <pubDate>Sat, 01 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/03_01_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Mac: To quickly find text, select some text and press ⌘E followed by ⌘G.&lt;/li&gt;
&lt;li&gt;After copying a file, press ⌥⌘V to move the file instead of pasting a copy of it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://setosa.io/ev/markov-chains/&#34;&gt;Markov Chains&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One use of Markov chains is to include real-world phenomena in computer simulations. For example, we might want to check how frequently a new dam will overflow, which depends on the number of rainy days in a row.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Went camping this weekend at &lt;a href=&#34;https://deadhorseranchstatepark.com/&#34;&gt;Dead Horse Ranch State Park&lt;/a&gt; in Cottonwood, AZ. We drove through Prescott and up Mingus Mountain on Saturday and did a short hike to the fire tower. I was originally thinking of &lt;a href=&#34;https://www.strava.com/routes/3329876699188615902&#34;&gt;riding up Mingus Mountain from Cottonwood&lt;/a&gt;, but I&amp;rsquo;m glad I didn&amp;rsquo;t as there is no shoulder and very tight turns. We drove down to Cottonwood through &lt;a href=&#34;https://en.wikipedia.org/wiki/Jerome,_Arizona&#34;&gt;Jerome, AZ&lt;/a&gt; which I&amp;rsquo;d like to go back and visit.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Mac: To quickly find text, select some text and press ⌘E followed by ⌘G.&lt;/li&gt;
&lt;li&gt;After copying a file, press ⌥⌘V to move the file instead of pasting a copy of it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://setosa.io/ev/markov-chains/&#34;&gt;Markov Chains&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One use of Markov chains is to include real-world phenomena in computer simulations. For example, we might want to check how frequently a new dam will overflow, which depends on the number of rainy days in a row.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Went camping this weekend at &lt;a href=&#34;https://deadhorseranchstatepark.com/&#34;&gt;Dead Horse Ranch State Park&lt;/a&gt; in Cottonwood, AZ. We drove through Prescott and up Mingus Mountain on Saturday and did a short hike to the fire tower. I was originally thinking of &lt;a href=&#34;https://www.strava.com/routes/3329876699188615902&#34;&gt;riding up Mingus Mountain from Cottonwood&lt;/a&gt;, but I&amp;rsquo;m glad I didn&amp;rsquo;t as there is no shoulder and very tight turns. We drove down to Cottonwood through &lt;a href=&#34;https://en.wikipedia.org/wiki/Jerome,_Arizona&#34;&gt;Jerome, AZ&lt;/a&gt; which I&amp;rsquo;d like to go back and visit.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/FireTower.JPG&#34; alt=&#34;Fire Tower&#34;&gt;&lt;/p&gt;
&lt;p&gt;After stopping for some sushi at Safeway, we made it to the park and met up with our friends. It was very windy during the day and the trees were all hibernating. We walked around the three lagoons and headed back to the site to to hang out and start dinner. We cooked up hotdogs and smash burgers, chatted for a while, and made s&amp;rsquo;mores. There were showers directly across from out site and we got everything ready to go to bed.&lt;/p&gt;
&lt;p&gt;Ally and I set up our tent on top of a raised platform. Our camping site happened to be the handicapped site so while most sites had a small plot of dirt on the ground for a tent, ours was raised off the ground about 12 inches by this small platform. As everyone was going to bed, I had secured all the food in our car or left it in a secured bag that animals couldn&amp;rsquo;t get into. We had some dirty dishes which I put in a trash bag and put in the car as well. For some unknown reason I decided that leaving a cooler containing steaks with no lid on it outside would be fine even after putting everything else away&amp;hellip; I was very wrong.&lt;/p&gt;
&lt;p&gt;Around 1am, I believe some skunks got into the cooler and were able to tear open a package containing steaks. A little later on, we believe there was a skunk fight over said steaks&amp;hellip; this fight occurred &lt;strong&gt;directly next to our tent&lt;/strong&gt; on the platform. It was a quick but loud skirmish that woke up Ally and I, everyone else was sleeping in their cars completely unbothered. The skirmish smelled awful but with no further noise and the smell being subdued by the wind or our olfactory fatigue, we tried to go back to sleep.&lt;/p&gt;
&lt;p&gt;This was short lived, as we were quickly awakened to more snarling noises right by our tent. I was fed up and it was 2am, so I put my shoes on to go face down whatever was outside. Opening the tent and pointing it at the noises a saw nothing&amp;hellip; because the skunk was directly beneath the tent under the platform! I investigated the cooler and saw what happened to our meat. I cleaned up the mess packed this into the car. I pounded on the platform tried to through rocks underneath to get the skunk to leave; however, this seemed to result in more noises and smells. I couldn&amp;rsquo;t even get a good look at the thing as it was mostly dirt and rocks underneath the platform it was impossible to see clear under it.&lt;/p&gt;
&lt;p&gt;We grabbed our sleeping bags and shifted to the car, unfortunately this also smelled like skunk (possibly it was just us or how the wind was blowing). I ended up driving us away from the site to a parking lot and getting a few hours of sleep there.&lt;/p&gt;
&lt;p&gt;That was a wild night, but we still had fun although we are certainly a bit more tired than we need to be. I&amp;rsquo;m going to have to soak the tent to get the skunk smell off of it as it to the brunt of the skunk spray I believe.&lt;/p&gt;
&lt;p&gt;Fun times!&lt;/p&gt;
&lt;p&gt;Booked trip to Japan, I&amp;rsquo;ve got a 9 day streak on Duo Lingo now&amp;hellip; Japanese is hard!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.acquired.fm/episodes/why-duolingo-worked-with-luis-von-ahn-ceo&#34;&gt;Good ACQ2 episode&lt;/a&gt; with Luis von Ahn.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.goodthoughts.blog/p/beneficentrism?utm_source=substack&amp;amp;utm_medium=email&#34;&gt;Beneficentrism&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It&amp;rsquo;s just the claim that it&amp;rsquo;s really important to help others—however distant or different from us they may be.&lt;/li&gt;
&lt;/ul&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 02-22-2025</title>
      <link>/learnedt1w/2025/02_22_2025/</link>
      <pubDate>Sat, 22 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/02_22_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;To initialize a submodule in a local repo:
&lt;code&gt;git submodule init&lt;/code&gt; which reads from .gitmodules and then &lt;code&gt;git submodule update&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.pyspur.dev/blog/introduction_cuda_programming&#34;&gt;Nice intro to cuda with embedded quiz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://medium.com/@jairus-m/docker-uv-a-streamlined-approach-to-managing-local-dagster-environments-dd55e0e90b3a&#34;&gt;Docker &amp;amp; UV in Dagster&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://posthog.com/blog/secrets-of-posthog-query-performance&#34;&gt;Click house query performance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.dynamodbguide.com/key-concepts/&#34;&gt;Guide yourself to a relation db?&amp;hellip; JK it has its place&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://lcamtuf.substack.com/p/but-good-sir-what-is-electricity&#34;&gt;Electricity&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;San Diego for a friends engagement last weekend, was a good time. I hate driving in San Diego.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;To initialize a submodule in a local repo:
&lt;code&gt;git submodule init&lt;/code&gt; which reads from .gitmodules and then &lt;code&gt;git submodule update&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.pyspur.dev/blog/introduction_cuda_programming&#34;&gt;Nice intro to cuda with embedded quiz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://medium.com/@jairus-m/docker-uv-a-streamlined-approach-to-managing-local-dagster-environments-dd55e0e90b3a&#34;&gt;Docker &amp;amp; UV in Dagster&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://posthog.com/blog/secrets-of-posthog-query-performance&#34;&gt;Click house query performance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.dynamodbguide.com/key-concepts/&#34;&gt;Guide yourself to a relation db?&amp;hellip; JK it has its place&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://lcamtuf.substack.com/p/but-good-sir-what-is-electricity&#34;&gt;Electricity&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;San Diego for a friends engagement last weekend, was a good time. I hate driving in San Diego.&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.scientificamerican.com/article/broken-legs-and-ankles-heal-better-if-you-walk-on-them-within-weeks/&#34;&gt;Broken Legs heal faster if you walk on them&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 02-15-2025</title>
      <link>/learnedt1w/2025/02_15_2025/</link>
      <pubDate>Sat, 15 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/02_15_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Got back from Hawaii on a red-eye and then the next day drove to San Diego for a friends proposal. Brought my bike and road the coast with Ally which was pretty sweet.&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Reading a bit of &lt;a href=&#34;https://www.amazon.com/Invisible-Influence-Hidden-Forces-Behavior/dp/1476759731&#34;&gt;Invisible Influence&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The more something matters to us the more distinctive we think it is.&lt;/li&gt;
&lt;li&gt;Mimicking people (subtly) makes you seem more agreeable/appealing.&lt;/li&gt;
&lt;/ul&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Got back from Hawaii on a red-eye and then the next day drove to San Diego for a friends proposal. Brought my bike and road the coast with Ally which was pretty sweet.&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Reading a bit of &lt;a href=&#34;https://www.amazon.com/Invisible-Influence-Hidden-Forces-Behavior/dp/1476759731&#34;&gt;Invisible Influence&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The more something matters to us the more distinctive we think it is.&lt;/li&gt;
&lt;li&gt;Mimicking people (subtly) makes you seem more agreeable/appealing.&lt;/li&gt;
&lt;/ul&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 02-08-2025</title>
      <link>/learnedt1w/2025/02_08_2025/</link>
      <pubDate>Sat, 08 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/02_08_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Some light Wikpedia reading on db normalization:
&lt;a href=&#34;https://en.wikipedia.org/wiki/Boyce%E2%80%93Codd_normal_form&#34;&gt;Boyce–Codd normal form (BCNF or 3.5NF)&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If a relational schema is in BCNF, then all redundancy based on functional dependency has been removed&lt;/li&gt;
&lt;li&gt;A 3NF table that does not have multiple overlapping candidate keys is guaranteed to be in BCNF
&lt;a href=&#34;https://en.wikipedia.org/wiki/Elementary_key_normal_form&#34;&gt;Elementary key normal form&lt;/a&gt;
&lt;a href=&#34;https://en.wikipedia.org/wiki/Functional_dependency&#34;&gt;Functional Dependencies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A dependency FD: X → Y means that the values of Y are determined by the values of X. Two tuples sharing the same values of X will necessarily have the same values of Y.
&lt;a href=&#34;https://en.wikipedia.org/wiki/Candidate_key&#34;&gt;Candidate Keys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A candidate key, or simply a key, of a relational database is any set of columns that have a unique combination of values in each row, with the additional constraint that removing any column could produce duplicate combinations of values.&lt;/li&gt;
&lt;li&gt;A candidate key is a minimal superkey,[1] i.e., a superkey that does not contain a smaller one.
&lt;a href=&#34;https://en.wikipedia.org/wiki/Superkey&#34;&gt;Super Key&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A superkey is any set of attributes that uniquely identifies each tuple of a relation. The set of all attributes is always a superkey (the trivial superkey).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Committing to submodule:&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Some light Wikpedia reading on db normalization:
&lt;a href=&#34;https://en.wikipedia.org/wiki/Boyce%E2%80%93Codd_normal_form&#34;&gt;Boyce–Codd normal form (BCNF or 3.5NF)&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If a relational schema is in BCNF, then all redundancy based on functional dependency has been removed&lt;/li&gt;
&lt;li&gt;A 3NF table that does not have multiple overlapping candidate keys is guaranteed to be in BCNF
&lt;a href=&#34;https://en.wikipedia.org/wiki/Elementary_key_normal_form&#34;&gt;Elementary key normal form&lt;/a&gt;
&lt;a href=&#34;https://en.wikipedia.org/wiki/Functional_dependency&#34;&gt;Functional Dependencies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A dependency FD: X → Y means that the values of Y are determined by the values of X. Two tuples sharing the same values of X will necessarily have the same values of Y.
&lt;a href=&#34;https://en.wikipedia.org/wiki/Candidate_key&#34;&gt;Candidate Keys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A candidate key, or simply a key, of a relational database is any set of columns that have a unique combination of values in each row, with the additional constraint that removing any column could produce duplicate combinations of values.&lt;/li&gt;
&lt;li&gt;A candidate key is a minimal superkey,[1] i.e., a superkey that does not contain a smaller one.
&lt;a href=&#34;https://en.wikipedia.org/wiki/Superkey&#34;&gt;Super Key&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A superkey is any set of attributes that uniquely identifies each tuple of a relation. The set of all attributes is always a superkey (the trivial superkey).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Committing to submodule:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cd into submodule, add changes, commit and then &lt;code&gt;git push&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;cd .. out and back to parent repository, add sub modules directory, commit and push&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Spent the week in Hawaii which I&amp;rsquo;ll write a post on in the outdoors section.&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>Kauai Trip</title>
      <link>/travel/kauai/</link>
      <pubDate>Wed, 05 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>/travel/kauai/</guid>
      <description>&lt;h3 id=&#34;recap-of-our-trip-to-kauai-hi-from-2025-02-05-to-2025-02-12&#34;&gt;Recap of our trip to Kauai, HI from 2025-02-05 to 2025-02-12.&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;2025-02-05:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Landed after a 7 hour flight due to a strong head wind, but we had the middle seat open! It was raining as we walked over to Avis to pick up the rental car, but it was that nice Hawaii mist rain so it felt good.&lt;/p&gt;
&lt;p&gt;Guy at Avis tells us there are no small sedans left (what we rented) so instead we get a 2023 Ford F-150 XLT&amp;hellip;&lt;/p&gt;</description>
      <content>&lt;h3 id=&#34;recap-of-our-trip-to-kauai-hi-from-2025-02-05-to-2025-02-12&#34;&gt;Recap of our trip to Kauai, HI from 2025-02-05 to 2025-02-12.&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;2025-02-05:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Landed after a 7 hour flight due to a strong head wind, but we had the middle seat open! It was raining as we walked over to Avis to pick up the rental car, but it was that nice Hawaii mist rain so it felt good.&lt;/p&gt;
&lt;p&gt;Guy at Avis tells us there are no small sedans left (what we rented) so instead we get a 2023 Ford F-150 XLT&amp;hellip;&lt;/p&gt;
&lt;p&gt;We immediately drove to Dukes #America and had mediocre burgers on the beach. After Dukes, we drove to Costco in some semblance of an attempt to spend less then $1000 on food in Hawaii (things are expensive). I got some tuna jerky (which was very good).&lt;/p&gt;
&lt;p&gt;After Costco, we did our 65 minute drive up to Princeville and unpacked at our place.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2025-02-06:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;First full day, we had big plans of doing the &lt;a href=&#34;https://www.alltrails.com/trail/hawaii/kaua-i--2/jurassic-park-gate-trail&#34;&gt;Jurassic park trail&lt;/a&gt;. We drove down a small road, clipping tree-branches with the truck, and parked at the arboretum. We saw some cool Rainbow eucalyptus trees by the stream.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/eucalyptus.JPG&#34; alt=&#34;Rainbow eucalyptus&#34;&gt;&lt;/p&gt;
&lt;p&gt;As we started to hike towards the trail a construction worker told us it was closed that day, so we pivoted and did the &lt;a href=&#34;https://www.alltrails.com/trail/hawaii/kaua-i--2/powerline-trail-from-the-south&#34;&gt;Powerline trail&lt;/a&gt; instead. The Powerline trail had incredible views, we did a good amount of it and turned around as it started to get a bit muggy.&lt;/p&gt;
&lt;p&gt;We drove back towards Princeville and stopped in Kapaʻa to walk around. We bought some over priced Mango and &lt;a href=&#34;https://en.wikipedia.org/wiki/Pouteria_campechiana&#34;&gt;Eggfruit&lt;/a&gt; and ate it on the beach. Made it back home, cooked dinner and watched the sunset.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2025-02-07:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Woke up early, made smoothie bowls, and watched the sunrise. We drove to the &lt;a href=&#34;https://www.kauai.com/kilauea-lighthouse&#34;&gt;Kilauea lighthouse&lt;/a&gt; and saw whales, birds and some big waves. I was chased by a Brown Booby who was protecting its little chicks! After the light house we stopped by the agriculture center and got a big avocado and a roast beef sandwich, both were excellent.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/KilaueaLighthouse.jpg&#34; alt=&#34;Kilauea lighthouse&#34;&gt;&lt;/p&gt;
&lt;p&gt;We drove to Anini beach and found a nice spot a short walk down the beach underneath a large tree.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Anini.jpg&#34; alt=&#34;Anini beach&#34;&gt;&lt;/p&gt;
&lt;p&gt;We snorkeled a bit and relaxed for the afternoon. We left Anini and drove to Hanalei to get some shaved ice. The sharp left turn as you follow the road down into Hanalei gives an incredible view of the mountains and beach. We cooked dinner at home and watched a bit of &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Prestige_%28film%29&#34;&gt;The Prestige&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2025-02-08:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We couldn&amp;rsquo;t get enough of Hanalei, so I found the &lt;a href=&#34;https://www.alltrails.com/trail/hawaii/kaua-i--2/okolehao-viewpoint-via-okolehao-trail&#34;&gt;Okolehao trail&lt;/a&gt; which seemed to give great views of Hanalei&amp;hellip; it did not disappoint. We only &lt;a href=&#34;https://www.strava.com/activities/13576599885&#34;&gt;went up&lt;/a&gt; 3.6 miles, but it took 2 hours due to how steep and slippery the trail is. It&amp;rsquo;s very muddy after the fist viewpoint and the trail is overgrown with steep drops on either side. It continues to go on further, but it only gets steeper and muddier so we decided to turn around. I would probably not do this one (passed the first viewpoint) if it was raining or if it had just rained a lot.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Okolehao.jpg&#34; alt=&#34;Okolehao trail&#34;&gt;&lt;/p&gt;
&lt;p&gt;After making it back to the car and changing into swim suits, we had some PB&amp;amp;J sandwiches, that we made earlier int he day, in town as well as some more shaved ice. We spent the afternoon at Hanalei beach. We were looking for rocks and Ally said &amp;ldquo;Oh there&amp;rsquo;s a pink one&amp;rdquo; and grabbed my big toe thinking it was a rock.&lt;/p&gt;
&lt;p&gt;We drove back to our place and cooked up some steak sandwiches. One of the neighboring resorts over looked the ocean from some cliffs, so we brought our sandwiches over to a picnic bench and watched the ocean while having dinner and saw a whale.&lt;/p&gt;
&lt;p&gt;That night we slept with the windows open to keep things cool, and some guy in the up stairs unit started snoring soooo loud we couldn&amp;rsquo;t believe it. We ended up switching bedrooms which gave us some reprieve. The moon was really bright this night, but I didn&amp;rsquo;t take a picture.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2025-02-09:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We decided to have an easy day because we are getting up early tomorrow. We went back to our spot at Anini and snorkeled. It was kind of cold and I wasn&amp;rsquo;t sure I wanted to snorkel, as Ally started to go out by herself, I said screw it and put on my stuff and got in. I was &lt;strong&gt;lucky&lt;/strong&gt; I did, as not 5 minutes later we came across two sea turtles and got to watch/swim with them for a while! It was awesome. I got really cold and had to go back in though after ~30 minutes. Ally realized she forgot her medication, so I drove back and got that for her.&lt;/p&gt;
&lt;p&gt;We cooked up salmon for dinner and went to bed early.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2025-02-10:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We woke up really early and went kayaking up the Wailea river and then hiked to a waterfall. It was pretty crowded as different guides shuttled hundreds of tourists to and from the waterfall each day. Leaving early was definitely a good idea, as it was quite hot on the way back. It was nice to meet some of the other people on the tour, and it was something I&amp;rsquo;m glad to have done once.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Wailea.JPG&#34; alt=&#34;Wailea river&#34;&gt;&lt;/p&gt;
&lt;p&gt;After kayaking, we drove south to the Koloa Fish Market and got poke (The tuna was really goog) and a &lt;a href=&#34;https://www.leahikauai.com/&#34;&gt;smoothie&lt;/a&gt;. We continued our journey to Waimea canyon and &lt;a href=&#34;https://www.strava.com/activities/13595813864&#34;&gt;did the hike&lt;/a&gt; to Waipo&amp;rsquo;o falls that I had done three years ago. There was not a ton of water flowing, but you can&amp;rsquo;t beat the views and there was still a small water fall at the end. Going later in the day, we saw very few people on the trail except for this couple that were absolutely struggling to get back up the climb to the parking lot. The drive to and from the canyon, it made the F-150 feel like a Porsche.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Waimea.jpg&#34; alt=&#34;Waimea Canyon&#34;&gt;&lt;/p&gt;
&lt;p&gt;We then drove the two hours back to Princeville and cooked up the last of our food and watched some of &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Hunting_Party_%281971_film%29&#34;&gt;the hunting party&lt;/a&gt; RIP Gene Hackman.&lt;/p&gt;
&lt;p&gt;This was a huge day, but definitely worth it. If we had more time I would probably have split it up.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2025-02-11:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We got packed up and threw everything in the truck. With a red-eye not until 10pm we planned on driving around doing various activities on our last day. We went to Holey Grail Donuts in Hanalei which were really good, I also purchased a shirt from them.&lt;/p&gt;
&lt;p&gt;After donuts, we navigated single lane bridges on our way to the &lt;a href=&#34;https://ntbg.org/gardens/limahuli/&#34;&gt;Limahuli gardens&lt;/a&gt;. The gardens are beautiful, surrounded by steep mountains and jungle. After walking around for a bit one of the ladies asked if Ally and I were married and said we were glowing (May have just been from how pale we are hahaha).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Limahuli.jpg&#34; alt=&#34;Limahuli Gardens&#34;&gt;&lt;/p&gt;
&lt;p&gt;We drove all the way back to Lihue and ate pad Thai at Big Monster 7.2/10 and talked to our server from Thailand named Tom (Very nice guy!).&lt;/p&gt;
&lt;p&gt;Then we went back to Old Koloa town and got a smoothie from the same smoothie place. She was out of mangos, so we walked over to a guy selling produce and bought three mangos and give them to her. Ally has been using her recipes at home to make some excellent smoothies.&lt;/p&gt;
&lt;p&gt;We then drove to shipwreck beach and hiked along the coast. We saw a lady get proposed to. Then we sat overlooking the ocean, I pointed out to the ocean to make ally think there was a whale as a joke… but then there actually was a whale that breached right as I pointed! Ally was not as impressed by this, but I still can&amp;rsquo;t believe this happened&amp;hellip; I mean what are the chances.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/turtle.jpg&#34; alt=&#34;Turtle&#34;&gt;&lt;/p&gt;
&lt;p&gt;Then we drove to Poipu beach and saw the turtles, the place I stayed at 3 years ago on my last visit, and a seal. We watched the sunset and then had a good meal at Kenji burger before filling up gas at Costco. Kenji burger was excellent, we will be stopping there instead of Duke&amp;rsquo;s for quick bite next time.&lt;/p&gt;
&lt;p&gt;Last but not least, I managed to average 19.7 mpg in the f-150! I think this is a huge accomplishment.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 02-01-2025</title>
      <link>/learnedt1w/2025/02_01_2025/</link>
      <pubDate>Sat, 01 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/02_01_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;To obtain only the remote URL of a local repo:
&lt;code&gt;git config --get remote.origin.url&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Can also remove and add a new origin:
&lt;code&gt;git remote remove origin&lt;/code&gt;
&lt;code&gt;git remote add origin&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://explain.dalibo.com/&#34;&gt;Nice explain plan visualizer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ftc.gov/news-events/news/press-releases/2025/01/ftc-takes-action-against-godaddy-alleged-lax-data-security-its-website-hosting-services&#34;&gt;Go Daddy infosec issues&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.newsweek.com/irs-auction-tekashi-6ix9ine-jewelry-sale-2024493&#34;&gt;IRS auctions&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;To obtain only the remote URL of a local repo:
&lt;code&gt;git config --get remote.origin.url&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Can also remove and add a new origin:
&lt;code&gt;git remote remove origin&lt;/code&gt;
&lt;code&gt;git remote add origin&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://explain.dalibo.com/&#34;&gt;Nice explain plan visualizer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ftc.gov/news-events/news/press-releases/2025/01/ftc-takes-action-against-godaddy-alleged-lax-data-security-its-website-hosting-services&#34;&gt;Go Daddy infosec issues&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.newsweek.com/irs-auction-tekashi-6ix9ine-jewelry-sale-2024493&#34;&gt;IRS auctions&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 01-25-2025</title>
      <link>/learnedt1w/2025/01_25_2025/</link>
      <pubDate>Sat, 25 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/01_25_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://pete.ex-parrot.com/upside-down-ternet.html&#34;&gt;Splitting network into two subnets to make life miserable for wifi stealers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Redshift max recursion rows is defaults to 50,000,000 &lt;code&gt;SHOW max_recursion_rows;&lt;/code&gt;. Seems like this is actual recursion count not rows&amp;hellip; Testing out with the following code:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WITH&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;RECURSIVE&lt;/span&gt; digits(d) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; d
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    integers(i) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; d &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; digits
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;/* */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;/* */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; next_i
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; integers
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;50000800&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;min&lt;/span&gt;(i), &lt;span style=&#34;color:#66d9ef&#34;&gt;max&lt;/span&gt;(i), &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; integers;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We get:
min max           count
0   50,000,800    500,007,965&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://pete.ex-parrot.com/upside-down-ternet.html&#34;&gt;Splitting network into two subnets to make life miserable for wifi stealers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Redshift max recursion rows is defaults to 50,000,000 &lt;code&gt;SHOW max_recursion_rows;&lt;/code&gt;. Seems like this is actual recursion count not rows&amp;hellip; Testing out with the following code:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WITH&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;RECURSIVE&lt;/span&gt; digits(d) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; d
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    integers(i) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; d &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; digits
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;/* */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;/* */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; next_i
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; integers
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;50000800&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;min&lt;/span&gt;(i), &lt;span style=&#34;color:#66d9ef&#34;&gt;max&lt;/span&gt;(i), &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; integers;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We get:
min max           count
0   50,000,800    500,007,965&lt;/p&gt;
&lt;p&gt;And a small snippet of the results reveals an interesting pattern:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;i&lt;/th&gt;
          &lt;th&gt;rowcount&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;3&lt;/td&gt;
          &lt;td&gt;4&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;4&lt;/td&gt;
          &lt;td&gt;5&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;5&lt;/td&gt;
          &lt;td&gt;6&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;6&lt;/td&gt;
          &lt;td&gt;7&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;7&lt;/td&gt;
          &lt;td&gt;8&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;8&lt;/td&gt;
          &lt;td&gt;9&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;9&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;10&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;11&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;12&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;13&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;14&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;15&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;16&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;17&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;18&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;19&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;20&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;21&lt;/td&gt;
          &lt;td&gt;10&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I wanted to test, how the initial set of numbers propagates and how new numbers are added in each iteration. I reduced the size of digits and added a static source column in integers to track over time.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Smaller exmaple multi-row set
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WITH&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;RECURSIVE&lt;/span&gt; digits(d) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; d
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;integers(i, source_d) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;-- Base case: Add source_d to track where each number came from
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; d, d &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; digits
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;-- Recursive case
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, source_d
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; integers
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    i,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;) OVER (PARTITION &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; i) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;row_count&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;-- How many rows we have for each value of i
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    source_d, &lt;span style=&#34;color:#75715e&#34;&gt;-- Where each number originated from
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    ROW_NUMBER() OVER (PARTITION &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; i &lt;span style=&#34;color:#66d9ef&#34;&gt;ORDER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; source_d) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; row_num &lt;span style=&#34;color:#75715e&#34;&gt;-- The ordering within each i value
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; integers
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ORDER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; i, source_d;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;i&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;row_count&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;source_d&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;row_num&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;4&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;4&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;4&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;5&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;5&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;5&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;6&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;6&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;6&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;7&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;7&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;7&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;8&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;8&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;8&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;9&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;9&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;9&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;10&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;10&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;10&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I noticed:&lt;/p&gt;
&lt;p&gt;The row count grows until it equals the number of initial digits (3 in this case)&lt;/p&gt;
&lt;p&gt;So I guess there is an initial growth phase:
i=1: 1 row     (from digit 1)
i=2: 2 rows    (from digits 1,2)
i=3: 3 rows    (from digits 1,2,3)&lt;/p&gt;
&lt;p&gt;And then this stabilizes:
i=4: 3 rows    (maintains all 3 chains)
So my mental model is that each individual initial digit is maintaining a chain of values:
Starting Digits: 1, 2, 3&lt;/p&gt;
&lt;p&gt;Chain 1 (starting from 1):
1 -&amp;gt; 2 -&amp;gt; 3 -&amp;gt; 4 -&amp;gt; 5 -&amp;gt; 6 -&amp;gt; 7 -&amp;gt; &amp;hellip;
^    First chain always present&lt;/p&gt;
&lt;p&gt;Chain 2 (starting from 2):
2 -&amp;gt; 3 -&amp;gt; 4 -&amp;gt; 5 -&amp;gt; 6 -&amp;gt; 7 -&amp;gt; &amp;hellip;
^    Second chain joins at i=2&lt;/p&gt;
&lt;p&gt;Chain 3 (starting from 3):
3 -&amp;gt; 4 -&amp;gt; 5 -&amp;gt; 6 -&amp;gt; 7 -&amp;gt; &amp;hellip;
^    Third chain joins at i=3
So for instance at i = 6:
i=6:
source_d=1, row_num=1  (from Chain 1)
source_d=2, row_num=2  (from Chain 2)
source_d=3, row_num=3  (from Chain 3)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Each row at i=6 came from a different original chain, but they&#39;ve all reached the value 6 through different paths of recursion.&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.politico.eu/article/france-warns-of-viagra-laced-erectile-honey-flooding-into-the-country/&#34;&gt;Viagra laced contraband honey is pretty wild&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Work on what&amp;rsquo;s most important not what&amp;rsquo;s most urgent.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 01-18-2025</title>
      <link>/learnedt1w/2025/01_18_2025/</link>
      <pubDate>Sat, 18 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/01_18_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://valatka.dev/2025/01/12/on-killer-uv-feature.html&#34;&gt;uV is the way&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://wizardzines.com/comics/namespaces/&#34;&gt;Cute namesapce Zine&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://discourse.getdbt.com/t/understanding-hash-joins-in-redshift-query-plan/122&#34;&gt;Great explanation of a Hash Join from the cofounder of DBT back in 2018&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://singlelunch.com/2023/09/13/the-bad-economics-of-wtfhappenedin1971/&#34;&gt;Bad Econ of WTF happened in 1971&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Since 1989, Kenny G&amp;rsquo;s recording &amp;ldquo;Going Home&amp;rdquo; from the Kenny G Live album has become an unconventional mega-hit throughout China.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://valatka.dev/2025/01/12/on-killer-uv-feature.html&#34;&gt;uV is the way&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://wizardzines.com/comics/namespaces/&#34;&gt;Cute namesapce Zine&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://discourse.getdbt.com/t/understanding-hash-joins-in-redshift-query-plan/122&#34;&gt;Great explanation of a Hash Join from the cofounder of DBT back in 2018&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://singlelunch.com/2023/09/13/the-bad-economics-of-wtfhappenedin1971/&#34;&gt;Bad Econ of WTF happened in 1971&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Since 1989, Kenny G&amp;rsquo;s recording &amp;ldquo;Going Home&amp;rdquo; from the Kenny G Live album has become an unconventional mega-hit throughout China.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Stop building on top of bad decisions</title>
      <link>/posts/stop/</link>
      <pubDate>Thu, 16 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>/posts/stop/</guid>
      <description>&lt;h1 id=&#34;one-step-back-two-steps-forward&#34;&gt;One step back, two steps forward:&lt;/h1&gt;
&lt;p&gt;Stop building on top off bad decisions and fix the bad decisions.&lt;/p&gt;
&lt;p&gt;Lets say you work with a bunch of people that are setting weekly goals. Each year  goals are appended in a particular format to a table referenced by everyone to present goals throughout the organization.&lt;/p&gt;
&lt;p&gt;Long long ago in a galaxy far far away someone decided set the goal date column as type &lt;code&gt;VARCHAR()&lt;/code&gt; so now you have goals associated with strings that range from &amp;lsquo;2025-05&amp;rsquo; to &amp;lsquo;2025-02-05&amp;rsquo; to &amp;lsquo;02/05/2025&amp;rsquo;. In fact for a single goal, the weeks may be recorded in wildly different formats each year based on whoever uploads them.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;one-step-back-two-steps-forward&#34;&gt;One step back, two steps forward:&lt;/h1&gt;
&lt;p&gt;Stop building on top off bad decisions and fix the bad decisions.&lt;/p&gt;
&lt;p&gt;Lets say you work with a bunch of people that are setting weekly goals. Each year  goals are appended in a particular format to a table referenced by everyone to present goals throughout the organization.&lt;/p&gt;
&lt;p&gt;Long long ago in a galaxy far far away someone decided set the goal date column as type &lt;code&gt;VARCHAR()&lt;/code&gt; so now you have goals associated with strings that range from &amp;lsquo;2025-05&amp;rsquo; to &amp;lsquo;2025-02-05&amp;rsquo; to &amp;lsquo;02/05/2025&amp;rsquo;. In fact for a single goal, the weeks may be recorded in wildly different formats each year based on whoever uploads them.&lt;/p&gt;
&lt;p&gt;THIS IS A BAD PROCESS.&lt;/p&gt;
&lt;p&gt;This should be screaming bad process, as you disentangle different week to week formatting changes each year or &lt;strong&gt;worse&lt;/strong&gt; what if someone updates it in the middle of the year and your logic just suddenly breaks&amp;hellip; Your best way to test that logic in the first place would have been to establish a proper schema and not use a &lt;code&gt;VARCHAR&lt;/code&gt; to store a date, but we&amp;rsquo;ve absolutely blown the rails off that one.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; TEMP &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; TEST123 &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;2024-12-05&amp;#39;&lt;/span&gt;::DATE &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; SHIP_DATE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- ERROR: invalid input syntax for type date: &amp;#34;2024-49&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Yes! This is what we want
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; TEST123 &lt;span style=&#34;color:#66d9ef&#34;&gt;VALUES&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;2024-49&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Stop putting band-aids on and fix it&amp;hellip; that&amp;rsquo;s the only way this is going to get better. End of story. &lt;em&gt;But there&amp;rsquo;s a lot of important dependencies on this table we&amp;rsquo;d have to change a lot of logic&amp;hellip; its a big risk&lt;/em&gt; There’s a &lt;code&gt;much bigger risk&lt;/code&gt; in parsing semi-random strings to match dates then making it right.&lt;/p&gt;
&lt;p&gt;Change your automatic response from &lt;del&gt;&amp;ldquo;What do I need to do to make this work&amp;rdquo;&lt;/del&gt; to &lt;del&gt;&amp;ldquo;How do I fix this and make this better for everyone moving forward&amp;rdquo;&lt;/del&gt;. Everyone will benefit and your organization will be more flexible and testable.&lt;/p&gt;
&lt;p&gt;Flexible and testable, good qualities to live by.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 01-11-2025</title>
      <link>/learnedt1w/2025/01_11_2025/</link>
      <pubDate>Sat, 11 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/01_11_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Symbolic Linking is pretty cool:
&lt;code&gt;ln -s /Users/iamsam/Desktop/symlinkorigin.txt /Users/iamsam/Desktop/symlinkdest.txt&lt;/code&gt;
Can set up a file to point to another file&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://xcancel.com/3blue1brown/status/1876291319955398799&#34;&gt;Xcancel&lt;/a&gt; is an instance of Nitter.&lt;/p&gt;
&lt;p&gt;Nitter is a free and open source alternative Twitter front-end focused on privacy and performance. The source is available on GitHub at &lt;a href=&#34;https://github.com/zedeus/nitter&#34;&gt;https://github.com/zedeus/nitter&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No JavaScript or ads&lt;/li&gt;
&lt;li&gt;All requests go through the backend, client never talks to Twitter&lt;/li&gt;
&lt;li&gt;Prevents Twitter from tracking your IP or JavaScript fingerprint&lt;/li&gt;
&lt;li&gt;Uses Twitter&amp;rsquo;s unofficial API (no rate limits or developer account required)&lt;/li&gt;
&lt;li&gt;Lightweight (for @nim_lang, 60KB vs 784KB from twitter.com)&lt;/li&gt;
&lt;li&gt;RSS feeds&lt;/li&gt;
&lt;li&gt;Themes&lt;/li&gt;
&lt;li&gt;Mobile support (responsive design)&lt;/li&gt;
&lt;li&gt;AGPLv3 licensed, no proprietary instances permitted&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/joecarlsonshow/status/1875591249560007043&#34;&gt;Texas Roadhouse Stock Market returns outpacing tech&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Symbolic Linking is pretty cool:
&lt;code&gt;ln -s /Users/iamsam/Desktop/symlinkorigin.txt /Users/iamsam/Desktop/symlinkdest.txt&lt;/code&gt;
Can set up a file to point to another file&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://xcancel.com/3blue1brown/status/1876291319955398799&#34;&gt;Xcancel&lt;/a&gt; is an instance of Nitter.&lt;/p&gt;
&lt;p&gt;Nitter is a free and open source alternative Twitter front-end focused on privacy and performance. The source is available on GitHub at &lt;a href=&#34;https://github.com/zedeus/nitter&#34;&gt;https://github.com/zedeus/nitter&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No JavaScript or ads&lt;/li&gt;
&lt;li&gt;All requests go through the backend, client never talks to Twitter&lt;/li&gt;
&lt;li&gt;Prevents Twitter from tracking your IP or JavaScript fingerprint&lt;/li&gt;
&lt;li&gt;Uses Twitter&amp;rsquo;s unofficial API (no rate limits or developer account required)&lt;/li&gt;
&lt;li&gt;Lightweight (for @nim_lang, 60KB vs 784KB from twitter.com)&lt;/li&gt;
&lt;li&gt;RSS feeds&lt;/li&gt;
&lt;li&gt;Themes&lt;/li&gt;
&lt;li&gt;Mobile support (responsive design)&lt;/li&gt;
&lt;li&gt;AGPLv3 licensed, no proprietary instances permitted&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/joecarlsonshow/status/1875591249560007043&#34;&gt;Texas Roadhouse Stock Market returns outpacing tech&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.uhaul.com/Articles/About/U-Haul-Growth-States-Of-2024-South-Carolina-Tops-List-for-First-Time-33083/&#34;&gt;U Haul One way movers list&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://youtu.be/YZMk2pRk0D0?si=vCmGb5-MtK6HWh-F&#34;&gt;figure 8 racing is wild&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 01-04-2025</title>
      <link>/learnedt1w/2025/01_04_2025/</link>
      <pubDate>Sat, 04 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2025/01_04_2025/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Couldn&amp;rsquo;t find where Datagrip stores its live templates.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;find / -name templates&lt;/code&gt; and it is here:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/System/Volumes/Data/Users/my_user/Library/Application Support/JetBrains/DataGrip2024.1/templates&lt;/code&gt; stored as xml.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re striuggling to find your local templates you can use find from a parent directory
&lt;code&gt;find / -name templates&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.construction-physics.com/p/how-to-build-a-20-billion-semiconductor&#34;&gt;Great overview of all that goes into a fab&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cs.cmu.edu/~pavlo/blog/2025/01/2024-databases-retrospective.html&#34;&gt;Andy&amp;rsquo;s overview of DBs in 2024&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://workhorse.com&#34;&gt;I wasn’t familiar with this ev start up until now&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Couldn&amp;rsquo;t find where Datagrip stores its live templates.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;find / -name templates&lt;/code&gt; and it is here:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/System/Volumes/Data/Users/my_user/Library/Application Support/JetBrains/DataGrip2024.1/templates&lt;/code&gt; stored as xml.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re striuggling to find your local templates you can use find from a parent directory
&lt;code&gt;find / -name templates&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.construction-physics.com/p/how-to-build-a-20-billion-semiconductor&#34;&gt;Great overview of all that goes into a fab&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cs.cmu.edu/~pavlo/blog/2025/01/2024-databases-retrospective.html&#34;&gt;Andy&amp;rsquo;s overview of DBs in 2024&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://workhorse.com&#34;&gt;I wasn’t familiar with this ev start up until now&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://x.com/alojoh/status/1869786972597956959&#34;&gt;My 2025 prediction is that a Lucid or Rivian will foldthis year&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.econlib.org/library/Enc/Immigration.html&#34;&gt;Interesting paper on immigration&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://practicapp.com/carbagepilot-part1/&#34;&gt;Self driving 1993 Volvo&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://mathstodon.xyz/@tao/113721192051328193&#34;&gt;On sharing Rejection&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://allenpike.com/2024/an-unreasonable-amount-of-time&#34;&gt;Sometimes magic is just someone spending more time on something than anyone else might reasonably expect.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Damn, actually made it all the way through the end of the year doing this.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 12-28-2024</title>
      <link>/learnedt1w/2024/12_28_2024/</link>
      <pubDate>Sat, 28 Dec 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/12_28_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://samwho.dev/turing-machines/&#34;&gt;Turing Machines&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A system is Turing complete if it can be used to simulate a Turing machine.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Don&amp;rsquo;t throw any &amp;ldquo;real time&amp;rdquo; analysis on a shared resource. That resource will get backed up, your &amp;ldquo;real time&amp;rdquo; analysis running every hour will stack up in the que as the cluster slows, making the backlog worse, with a ton of work that is no longer real time.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://samwho.dev/turing-machines/&#34;&gt;Turing Machines&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A system is Turing complete if it can be used to simulate a Turing machine.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Don&amp;rsquo;t throw any &amp;ldquo;real time&amp;rdquo; analysis on a shared resource. That resource will get backed up, your &amp;ldquo;real time&amp;rdquo; analysis running every hour will stack up in the que as the cluster slows, making the backlog worse, with a ton of work that is no longer real time.&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/List_of_stadiums_by_capacity&#34;&gt;North Korea with the largest stadium capacity&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://phys.org/news/2024-12-giant-sloths-mastodons-coexisted-humans.html&#34;&gt;Giant Sloths&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://apple.news/AQMdk2LqeSEe6hxY06CW79A&#34;&gt;So dumb, let people wear whatever they want&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Black pink is a K pop band a friend told me to check out. Not my thing but they have almost 100MM subs on Youtube.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>My Dad&#39;s Good Qualities</title>
      <link>/musings/my_dad/</link>
      <pubDate>Thu, 26 Dec 2024 00:00:00 +0000</pubDate>
      
      <guid>/musings/my_dad/</guid>
      <description>&lt;p&gt;It was my dad’s birthday recently, which sparked a bit of reflection.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What are the past situations where I&amp;rsquo;m grateful for having learned appropriate behavior?&lt;/li&gt;
&lt;li&gt;What positive qualities have I successfully incorporated into my own life?&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;vanity-purchases&#34;&gt;Vanity purchases&lt;/h2&gt;
&lt;p&gt;Ever since I was born, I’ve known my dad to only be extremely reasonable when purchasing things. Never flaunty or flashy always purposeful and value oriented. He buys a Honda accord and drives it for 150K miles. You’re not turning heads but the insurance is cheaper, same with the registration, and the maintenance is low. He has no desire to impress others with money or impress upon others that he has money.&lt;/p&gt;</description>
      <content>&lt;p&gt;It was my dad’s birthday recently, which sparked a bit of reflection.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;What are the past situations where I&amp;rsquo;m grateful for having learned appropriate behavior?&lt;/li&gt;
&lt;li&gt;What positive qualities have I successfully incorporated into my own life?&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;vanity-purchases&#34;&gt;Vanity purchases&lt;/h2&gt;
&lt;p&gt;Ever since I was born, I’ve known my dad to only be extremely reasonable when purchasing things. Never flaunty or flashy always purposeful and value oriented. He buys a Honda accord and drives it for 150K miles. You’re not turning heads but the insurance is cheaper, same with the registration, and the maintenance is low. He has no desire to impress others with money or impress upon others that he has money.&lt;/p&gt;
&lt;h2 id=&#34;maintenance&#34;&gt;Maintenance&lt;/h2&gt;
&lt;p&gt;When my dad buys something of value, he maintains it. It doesn’t get destroyed, he doesn’t abuse it… he takes his time and understands what he needs to do to keep it in good working order and he does that. I think he takes a lot of pride in this.&lt;/p&gt;
&lt;h2 id=&#34;he-values-experiences&#34;&gt;He Values Experiences&lt;/h2&gt;
&lt;p&gt;Rather than flashy purchases of tangible goods my dad will buy experiences. Taking everyone out and going axe throwing, vacations, or even just going for a walk. Time with loved ones is important. I still spend ~half the year at home. I’ve been trying to hike/bike as much as I can with him because I know there’ll be a time in the future where we don’t live close enough to do that very often.&lt;/p&gt;
&lt;h2 id=&#34;hard-work&#34;&gt;Hard work&lt;/h2&gt;
&lt;p&gt;My dad still works hard. He’s run business for half a century now… which is absolutely insane. I mean year after year, navigating a small business through five decades of changes, modernizing over time, and making it successful. After all that time, he’s still working hard. What an achievement, how many people can say they’ve successfully owned and operated a business for that long.&lt;/p&gt;
&lt;h2 id=&#34;integrity&#34;&gt;Integrity&lt;/h2&gt;
&lt;p&gt;One of his biggest ideals has to be integrity. He hammered that home to us as kids. Do things with integrity. We had a “family constitution” plastered on the fridge in high school to remind us, and I think integrity was point number one hahaha. I guess it worked… I won’t forget it.&lt;/p&gt;
&lt;h2 id=&#34;social&#34;&gt;Social&lt;/h2&gt;
&lt;p&gt;My dad will do a fair bit of listening in social situations, especially in larger groups. Not dominating or being overly loud. He knows when to interject, sometimes he’ll tell a story. One thing I’ve picked up recently is he never talks bad about anybody. He doesn’t like the Cardinals current quarterback, but other than that you’d never hear him just say something mean about someone. Not much good ever happens from saying mean things about people.&lt;/p&gt;
&lt;h2 id=&#34;health&#34;&gt;Health&lt;/h2&gt;
&lt;p&gt;My dad’s had his fair share of injuries and health concerns since I’ve been alive. However, he’s always stayed active. Some of my fondest memories are out hiking, biking, rafting, camping, etc… with him.&lt;/p&gt;
&lt;h2 id=&#34;justice&#34;&gt;Justice&lt;/h2&gt;
&lt;p&gt;Whenever my dad hears about an injustice being done, he can’t stand it. He will go way out of his way to help someone out of nothing more than fixing something that is total bullshit. This is probably why most of the people who work for my dad have been there for decades because he won’t put up with any mistreatment whatsoever. I think this goes hand in hand with integrity.&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;He once showed me a list of things he wanted to accomplish in his life that he’d written down in his late twenties that I really enjoyed.&lt;/p&gt;
&lt;p&gt;Buying a new bike as a kid, I really wanted a cruiser with flames on it. My dad said I’d be wanting a mountain bike after a few weeks on the cruiser. I ended up buying the cruiser, and I also ended up wanting a mountain bike after a few weeks. Ever since then, we agreed that if my dad says “bike” I know I need to deeply consider the decision I’m about to make.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 12-21-2024</title>
      <link>/learnedt1w/2024/12_21_2024/</link>
      <pubDate>Sat, 21 Dec 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/12_21_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://marimo.io/&#34;&gt;Better python notebooks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/anvaka/map-of-github&#34;&gt;Map of github&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://avi.im/blag/2024/sqlite-past-present-future/&#34;&gt;Bloom Filters to speed up Joins in SQLite&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://samwho.dev/bloom-filters/&#34;&gt;A good deep dive on Bloom Filters from Sam&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bloom filters can give definite &amp;ldquo;no&amp;quot;s, but they can&amp;rsquo;t be certain about &amp;ldquo;yes.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;A bloom filter will never give a false-negative, and this is what makes them useful.&lt;/li&gt;
&lt;li&gt;Google&amp;rsquo;s BigTable is a distributed key-value store, and uses bloom filters internally to know what keys are stored within. When a read request for a key comes in, a bloom filter in memory is first checked to see if the key is in the database. If not, BigTable can respond with &amp;ldquo;not found&amp;rdquo; without ever needing to read from disk. Sometimes the bloom filter will say a key might be in the database when it isn&amp;rsquo;t, but this is fine because when that happens a disk access will confirm the key in fact isn&amp;rsquo;t in the database.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Palau&#34;&gt;Palau looks really cool&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://marimo.io/&#34;&gt;Better python notebooks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/anvaka/map-of-github&#34;&gt;Map of github&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://avi.im/blag/2024/sqlite-past-present-future/&#34;&gt;Bloom Filters to speed up Joins in SQLite&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://samwho.dev/bloom-filters/&#34;&gt;A good deep dive on Bloom Filters from Sam&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bloom filters can give definite &amp;ldquo;no&amp;quot;s, but they can&amp;rsquo;t be certain about &amp;ldquo;yes.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;A bloom filter will never give a false-negative, and this is what makes them useful.&lt;/li&gt;
&lt;li&gt;Google&amp;rsquo;s BigTable is a distributed key-value store, and uses bloom filters internally to know what keys are stored within. When a read request for a key comes in, a bloom filter in memory is first checked to see if the key is in the database. If not, BigTable can respond with &amp;ldquo;not found&amp;rdquo; without ever needing to read from disk. Sometimes the bloom filter will say a key might be in the database when it isn&amp;rsquo;t, but this is fine because when that happens a disk access will confirm the key in fact isn&amp;rsquo;t in the database.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Palau&#34;&gt;Palau looks really cool&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Got a bike a professional bike fit this week. Highlights how tiny changes in position can make a huge difference especially over thousands fo miles.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://archive.boston.com/news/globe/magazine/articles/2007/08/19/bizarro_world/&#34;&gt;Randomly finding the best tetris player in the world&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://genesenvironment.biomedcentral.com/articles/10.1186/s41021-018-0114-3&#34;&gt;Radiation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.amazon.com/Butchers-Crossing-Review-Books-Classics/dp/1590171985?tag=fogus-20&amp;amp;dplnkId=16508552-1891-4dd5-93c9-bc02b666cd91&amp;amp;nodl=1&#34;&gt;Butcher&amp;rsquo;s Crossing, adding to reading list&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 12-14-2024</title>
      <link>/learnedt1w/2024/12_14_2024/</link>
      <pubDate>Sat, 14 Dec 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/12_14_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://podcasts.apple.com/us/podcast/hannes-muhleisen-duckdb-deep-dive-the-challenges/id1676305617?i=1000680142303&#34;&gt;DuckDB interview&lt;/a&gt; &amp;amp; cocaine fund.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://sibervepunk.com/digital-consumption.html&#34;&gt;You find yourself in a quest for productivity, feeling productive because of the quest, but not really doing any productive work.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://stripe.com/blog/secret-life-of-dns&#34;&gt;DNS rabbit hole Stripe Blog&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://medium.com/@tomwhitwell/52-things-i-learned-in-2024-75efffe44f15&#34;&gt;Interesting things learned&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.npr.org/2022/07/31/1110882487/dod-slot-machines-overseas-bases&#34;&gt;One thing I found particularly absurd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://velo.outsideonline.com/road/road-training/explainer-the-pro-cycling-carbon-monoxide-controversy/&#34;&gt;Inhaling carbon monoxide for performance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.theguardian.com/world/2024/dec/10/scrabble-star-nigel-richards-wins-spanish-world-title-despite-not-speaking-spanish&#34;&gt;Human brain is unreal&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://podcasts.apple.com/us/podcast/hannes-muhleisen-duckdb-deep-dive-the-challenges/id1676305617?i=1000680142303&#34;&gt;DuckDB interview&lt;/a&gt; &amp;amp; cocaine fund.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://sibervepunk.com/digital-consumption.html&#34;&gt;You find yourself in a quest for productivity, feeling productive because of the quest, but not really doing any productive work.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://stripe.com/blog/secret-life-of-dns&#34;&gt;DNS rabbit hole Stripe Blog&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://medium.com/@tomwhitwell/52-things-i-learned-in-2024-75efffe44f15&#34;&gt;Interesting things learned&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.npr.org/2022/07/31/1110882487/dod-slot-machines-overseas-bases&#34;&gt;One thing I found particularly absurd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://velo.outsideonline.com/road/road-training/explainer-the-pro-cycling-carbon-monoxide-controversy/&#34;&gt;Inhaling carbon monoxide for performance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.theguardian.com/world/2024/dec/10/scrabble-star-nigel-richards-wins-spanish-world-title-despite-not-speaking-spanish&#34;&gt;Human brain is unreal&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 12-07-2024</title>
      <link>/learnedt1w/2024/12_07_2024/</link>
      <pubDate>Sat, 07 Dec 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/12_07_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=M9HHWFp84f0&#34;&gt;Great video on threading&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://spark.apache.org/docs/3.5.1/sql-ref-syntax-qry-select-clusterby.html&#34;&gt;Cluster by, partition and sort&lt;/a&gt; does not guarantee a total order of output.&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Movies to Watch: Barry Lyndon, Casablanca, and Network.&lt;/p&gt;
&lt;p&gt;Went to chess club on Wednesday, played over the board for the first time in several years. I played a decent French Defense in my first game and ended up losing after miscalculating. I completely imploded when playing another guy losing three games quickly and even accidentally swapping the position of my king and queen when setting up the board. Over the board chess is a skill!&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=M9HHWFp84f0&#34;&gt;Great video on threading&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://spark.apache.org/docs/3.5.1/sql-ref-syntax-qry-select-clusterby.html&#34;&gt;Cluster by, partition and sort&lt;/a&gt; does not guarantee a total order of output.&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Movies to Watch: Barry Lyndon, Casablanca, and Network.&lt;/p&gt;
&lt;p&gt;Went to chess club on Wednesday, played over the board for the first time in several years. I played a decent French Defense in my first game and ended up losing after miscalculating. I completely imploded when playing another guy losing three games quickly and even accidentally swapping the position of my king and queen when setting up the board. Over the board chess is a skill!&lt;/p&gt;
&lt;p&gt;Trying to a little better at gift giving this year, I&amp;rsquo;m taking notes of things people want/need as they mention them and its working fairly well.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 11-30-2024</title>
      <link>/learnedt1w/2024/11_30_2024/</link>
      <pubDate>Sat, 30 Nov 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/11_30_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://amzn-operations.slack.com/archives/D023C4J2F32/p1733068711179969&#34;&gt;Iceburg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://aws.amazon.com/about-aws/whats-new/2024/11/amazon-s3-functionality-conditional-writes/&#34;&gt;S3 Conditional Writes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://people.csail.mit.edu/kraska/pub/sigmod08-s3.pdf&#34;&gt;S3 is a database&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Enjoyed spending time with family on Thanksgiving. Tried my best to do focus as much as possible with them and be off the phone. I worked a few days during the week but was very efficient with my time and made sure I stopped working and stayed not working through evenings and early mornings.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://amzn-operations.slack.com/archives/D023C4J2F32/p1733068711179969&#34;&gt;Iceburg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://aws.amazon.com/about-aws/whats-new/2024/11/amazon-s3-functionality-conditional-writes/&#34;&gt;S3 Conditional Writes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://people.csail.mit.edu/kraska/pub/sigmod08-s3.pdf&#34;&gt;S3 is a database&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Enjoyed spending time with family on Thanksgiving. Tried my best to do focus as much as possible with them and be off the phone. I worked a few days during the week but was very efficient with my time and made sure I stopped working and stayed not working through evenings and early mornings.&lt;/p&gt;
&lt;p&gt;I bought my girlfirend a bicycle, we&amp;rsquo;ve got it all set up now and I&amp;rsquo;m really excited for her to come out and ride with me.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>DRY Analytics</title>
      <link>/posts/dry_analytics/</link>
      <pubDate>Sun, 24 Nov 2024 00:00:00 +0000</pubDate>
      
      <guid>/posts/dry_analytics/</guid>
      <description>&lt;p&gt;I was talking to one of our partner teams in a developing market. They are a newer analytics department of savvy Business Analysts &amp;amp; SCMs (Supply Chain Managers).&lt;/p&gt;
&lt;p&gt;Long story short, they are working on this new metric and I was like, How are you filtering for our specific products in your marketplace? And they were like: Oh we have this case statement that we include in all of our jobs…&lt;/p&gt;</description>
      <content>&lt;p&gt;I was talking to one of our partner teams in a developing market. They are a newer analytics department of savvy Business Analysts &amp;amp; SCMs (Supply Chain Managers).&lt;/p&gt;
&lt;p&gt;Long story short, they are working on this new metric and I was like, How are you filtering for our specific products in your marketplace? And they were like: Oh we have this case statement that we include in all of our jobs…&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;SELECT COl1
     , COL2
     , COL3
     , ...
     , CASE WHEN PRODUCT_WEIGHT &amp;gt; 45 THEN &amp;#39;OUR_PRODUCT&amp;#39;
            WHEN PRODUCT_LENGTH &amp;gt;= 37 AND PRODUCT_WIDTH &amp;gt;= 33 THEN &amp;#39;OUR_PRODUCT&amp;#39;
            WHEN CATEGORY = &amp;#39;SOME_CATEGORY&amp;#39; OR EARTH_IS_ROUND_FLAG = &amp;#39;Y&amp;#39; THEN &amp;#39;OUR_PRODUCT&amp;#39;
          WHEN COLOR = &amp;#39;RED&amp;#39; THEN &amp;#39;OUR_PRODUCT&amp;#39;
          ELSE &amp;#39;NOT_OUR_PRODUCT&amp;#39; END AS PRODUCT_DEF
FROM BIG_TABLE
WHERE PRDDUCT_DEF = &amp;#39;OUR_PRODUCT&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Quick aside&lt;/strong&gt;&lt;/em&gt;:  When I write Job, Profile, Model, or Asset I’m talking about SQL that creates some result set and is most likely scheduled to run at a specified interval or once all dependencies have satisfied.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I was like ohhhh man can I save you some pain. Maintaining this kind of logic in tens or worse hundreds of jobs is going to inevitably suck! At some point someone’s going to come along and say:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; Hey… color = &#39;BLUE&#39; products should also be in our list of products.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now when this day comes and you’ve got a bunch of different teams that all maintain product definitions… someone is going to have to coordinate this migration and get the timing right. Heat flashes across your forehead and your palms get a little sweaty. For so long we&amp;rsquo;ve been copying and pasting case statements but we&amp;rsquo;ve officially reached a crescendo of misaligned definitions and numbers not matching up. The CAT is way out of the bag on this one, it does NOT want to go back in the bag and you need it back in the bag if you ever want to make it to the &lt;a href=&#34;https://fifeweb.org/world-winner/&#34;&gt;FIFe World Show&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;This change will need to be cascaded across all the teams that maintain such a definition&lt;/p&gt;
&lt;p&gt;&lt;code&gt;a.&lt;/code&gt;	Some teams might disagree and say Blue products shouldn’t be included&lt;/p&gt;
&lt;p&gt;&lt;code&gt;b.&lt;/code&gt;	It may be difficult to locate everyone who is defining products so there will be some level of uncertainty that everyone has been notified&lt;/p&gt;
&lt;p&gt;&lt;code&gt;c.&lt;/code&gt;	And still others will ask, since when did we define OUR_PRODUCT with a color dimension????&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Somebody won’t have bandwidth to implement the change and will need to push the date back, others may need time to figure out where exactly they are defining product definitions in their pipeline, someone’s OOTO. This will bump around a bunch of teams and there’ll be several calls to organize.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Some teams may have different data models, we only keep the latest definition, we keep a versioned definition over time, we have a denormalized table and &lt;code&gt;qualify row_number() over(partition by product_id order by last_updated_date desc) = 1&lt;/code&gt;  every single time to derive the most up to date definition.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now that we’ve updated the definition do we need to rewrite all historical tables that were derived using the previous definition? Now those blue products are OUR_PRODUCT but at any point time pre-change they would never be OUR_PRODUCT and would not reside in any stored result in any relation. And don&amp;rsquo;t forget this is happening across multiple teams in parallel and that change will need to be cascaded through several sequential jobs!&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;ok-so-how-do-we-avoid-pure-pain&#34;&gt;Ok so how do we avoid pure pain?&lt;/h3&gt;
&lt;p&gt;Maintain a centralized definition.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;DENORM_PRODUCT_DEFS&lt;/code&gt; [Captures all product changes over time] denormalized table appending all changes to products over time. Our products may change color or a vendor my adjust the packaging changing its dimensions this can all impact the classification of a specific product. This table could hold when the records were first inserted, when they were most recently updated, and denotes the active definition. This will save you a bunch of LEAD/LAG stuff if you’re reading from this table a lot.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;VERSIONED_PRODUCT_DEFS&lt;/code&gt; [Tracks historical versions for auditing and reproducability] versioned table that contains a snapshot of the product definition at a specific point in time. Back in JUNE we used this definition which would have resulted in this classification of these products and now in OCTOBER we use this definition which would have resulted in this classification of these products. This table would nicely be partitioned on version and would also be great to have columns denoting start and end dates for the version.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;FACT_PRODUCT_DEFS&lt;/code&gt; [Current, streamline view for active use cases] only the most up to date definition for products that is pre-filtered to only include your products.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So now we have profiles that look like:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;SELECT B.COl1
     , B.COL2
     , B.COL3
     , B...
FROM BIG_TABLE B
    INNER JOIN FACT_PRODUCT_DEFS F ON B.PRODUCT_ID = F.PRODUCT_ID
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And even better, now we can update how this reference is configured and if we have this query written fifty times everything points back to that reference and is updated [ref dynamically resolves table and schema names, so changes to a single reference propagate across all queries]:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;SELECT B.COl1
     , B.COL2
     , B.COL3
     , B...
FROM {{ ref(&amp;#34;BIG_TABLE&amp;#34;) }} B
    INNER JOIN {{ ref(&amp;#34;FACT_PRODUCT_DEFS&amp;#34;) }} F ON B.PRODUCT_ID = F.PRODUCT_ID
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Distinct logic across teams is pain. Host a central definition. Argue about said definition, update said definition, cry about said definition, whatever… but allow everyone to read from a single definition.&lt;/p&gt;
&lt;p&gt;Any time you see the same code written over and over alarm bells should be going off, there is a fire in the kitchen! Not only is this just MORE lines of code, but every instance its re-written is another opportunity for logic to become stale or be slightly miswritten. DRY DRY DRY. Do not &lt;a href=&#34;https://youtu.be/ftSf-T9Mins?si=bV924-ee6LTPMUAQ&amp;amp;t=68&#34;&gt;pour water&lt;/a&gt; on the grease fire in the kitchen, suffocate it with a deluge consistent data/reporting instead.&lt;/p&gt;
&lt;p&gt;This is such a common source of the “This number doesn’t match that number” problem. This is the “&lt;a href=&#34;https://news.ycombinator.com/item?id=36885598&#34;&gt;but it works on my machine&lt;/a&gt;” equivalent for day to day analytics.&lt;/p&gt;
&lt;p&gt;The numbers don’t match up because distributed hard coded definitions are hosted across teams using different dependencies running at different times… I would be FAR more perplexed if the numbers DID match up. In fact I’d be completely dumb founded. The numbers have absolutely no business to be matching up because they don’t have a data model/governance to support them actually doing so. Its not even automatically testable because there’s no way to determine where the code diverges without, I guess, literally parsing jobs as text to rip out the dependencies and business logic.&lt;/p&gt;
&lt;p&gt;There are so many different “types” of what I described above. For instance, possibly you have a data migration campaign and need to prefix all of your jobs with a new Database. In current state, hundreds of profiles have FROM clauses like &lt;code&gt;FROM SCHEMA.TABLE&lt;/code&gt; but now needs to be &lt;code&gt;FROM DATABASE.SCHEMA.TABLE&lt;/code&gt; to every single one… hopefully this illustrates why the above idea of &lt;code&gt;ref&lt;/code&gt; is so helpful.&lt;/p&gt;
&lt;p&gt;I’m not here to praise DBT but the Jinja templating &lt;a href=&#34;https://docs.getdbt.com/guides/using-jinja?step=1&#34;&gt;solution&lt;/a&gt; to make SQL more dynamic handles some of these problems nicely. I think a better data model can resolve some nasty issues, but if you’re repeating logic or referencing specific relations over and over across profiles, assets, whatever… be prepared for pain.&lt;/p&gt;
&lt;p&gt;If you’re working with an analytics team, one of the worst things that can happen is an erosion of trust in data quality from that team’s stakeholders. If you ordered crayons from Amazon and you receive pencils, or you set up an AWS billing alarm to send you an email when your spend has exceeded $100 and it doesn’t… you lose trust. One of the key pillars of a successful analytics team is building trust in their outputs (Also, move quickly I need this data yesterday lets go lets go&amp;hellip; but that’s a given).&lt;/p&gt;
&lt;p&gt;This is the unglamorous plumbing that underpins a successful analytics organization. While you can never fully control the madness that occurs in a 30 tab excel file authored by ten people off of windows shared drive you can rest easy knowing that at least whatever was copy pasted in there was reputable and “correct”.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 11-23-2024</title>
      <link>/learnedt1w/2024/11_23_2024/</link>
      <pubDate>Sat, 23 Nov 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/11_23_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Add line numbers to head: &lt;code&gt;head -n 5 example.csv | nl&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/rstudio/cheatsheets&#34;&gt;R cheatsheets&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=X8jsijhllIA&#34;&gt;Hamming codes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When using psql from the command line don&amp;rsquo;t forget to end statements with a &amp;lsquo;;&amp;rsquo;.&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.acquired.fm/episodes/ikea&#34;&gt;Acquired Ikea episode&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;“It is not all that difficult to reach set targets if you do not have to count the cost. Any designer can design a desk that will cost 5000 krona. But only the most skilled can design a good, functional desk that will cost 100 krona. Expensive solutions to any problem are usually the work of mediocrity. We have no respect for the solution until we know what it costs.&amp;quot;  &amp;ndash; Ingvar Kamprad&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Add line numbers to head: &lt;code&gt;head -n 5 example.csv | nl&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/rstudio/cheatsheets&#34;&gt;R cheatsheets&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=X8jsijhllIA&#34;&gt;Hamming codes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When using psql from the command line don&amp;rsquo;t forget to end statements with a &amp;lsquo;;&amp;rsquo;.&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.acquired.fm/episodes/ikea&#34;&gt;Acquired Ikea episode&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;“It is not all that difficult to reach set targets if you do not have to count the cost. Any designer can design a desk that will cost 5000 krona. But only the most skilled can design a good, functional desk that will cost 100 krona. Expensive solutions to any problem are usually the work of mediocrity. We have no respect for the solution until we know what it costs.&amp;quot;  &amp;ndash; Ingvar Kamprad&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;“I would say that you have fallen into the commonest fallacy of all in dealing with social and economic subjects—the ‘devil theory.’ [&amp;hellip;]
You have attributed conditions to villainy that simply result from stupidity. [&amp;hellip;]
You think bankers are scoundrels. They are not. Nor are company officials, nor patrons, nor the governing classes back on earth. Men are constrained by necessity and build up rationalizations to account for their acts.”
― Robert A. Heinlein, Logic of Empire&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>There may be another side to that</title>
      <link>/musings/another-side/</link>
      <pubDate>Sat, 16 Nov 2024 00:00:00 +0000</pubDate>
      
      <guid>/musings/another-side/</guid>
      <description>&lt;p&gt;Intelligent and deep-thinking people may hold opposite opinions of one another. If you hold an unshakeable opinion about anything that exists in some state of probability or confidence its almost certainly a mistake to be doing so.&lt;/p&gt;
&lt;p&gt;One of Amazon’s leadership principles is &lt;a href=&#34;https://www.amazon.jobs/content/en/our-workplace/leadership-principles&#34;&gt;Have Backbone; Disagree and Commit&lt;/a&gt;. I wish it would elaborate a bit further, &lt;code&gt;Have Backbone; Disagree, Reevaluate and Commit&lt;/code&gt;. It shouldn’t be disagree, hunker down, and ram my opinion through… but rather an exploratory process where people that respect each other’s opinions get closer to the truth.&lt;/p&gt;</description>
      <content>&lt;p&gt;Intelligent and deep-thinking people may hold opposite opinions of one another. If you hold an unshakeable opinion about anything that exists in some state of probability or confidence its almost certainly a mistake to be doing so.&lt;/p&gt;
&lt;p&gt;One of Amazon’s leadership principles is &lt;a href=&#34;https://www.amazon.jobs/content/en/our-workplace/leadership-principles&#34;&gt;Have Backbone; Disagree and Commit&lt;/a&gt;. I wish it would elaborate a bit further, &lt;code&gt;Have Backbone; Disagree, Reevaluate and Commit&lt;/code&gt;. It shouldn’t be disagree, hunker down, and ram my opinion through… but rather an exploratory process where people that respect each other’s opinions get closer to the truth.&lt;/p&gt;
&lt;p&gt;There are certain physical facts that aren’t worth disputing. Anybody arguing that I am NOT sitting here physically typing this at my computer would be wrong. Its undeniable and for better or worse I’m typing these words into some word document (Document2).&lt;/p&gt;
&lt;p&gt;Now let’s pick at something with an air of doubt about it: &lt;code&gt;Is the United States economy doing good or bad?&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Some people may say “bad”, some may say “good”, and some may say:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“What a terrible question, how can a complex economy be broadly categorized as good or bad”.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While this example is heavy handed, it certainly demonstrates the need for clarifying questions.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Oh… I said “good” because I assumed we were talking about the performance of a market-cap weighted index of U. S. equities.”&lt;/p&gt;
&lt;p&gt;“Oh… I said “bad” because I was talking about real GDP growth slowing year over year”&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;If you look around, deep questions are reduced to simple statements and assumptions all around us.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Political candidate ‘X’ is the sole perpetuator of problem ‘Y’&lt;/li&gt;
&lt;li&gt;The project failed/succeeded because of ‘Z’&lt;/li&gt;
&lt;li&gt;The P value was &amp;lt; .05, so we should reject the Null Hypothesis…&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;How can one possibly attribute the entirety of a complex issue to a political candidate, the failure of a project to a single problem, or why even use .05 as a cut-off for rejecting the Null why not .04, why not .049?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Man&amp;rsquo;s mind cannot grasp the causes of events in their completeness, but the desire to find those causes is implanted in man&amp;rsquo;s soul. And without considering the multiplicity and complexity of the conditions any one of which taken separately may seem to be the cause, he snatches at the first approximation to a cause that seems to him intelligible and says: This is the cause!&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;ndash; Leo Tolstoy, War and Peace&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Probabilistic thinking is such an important skill as we fight the urge to quickly categorize into binary values: &lt;code&gt;buy or don’t buy, right and wrong, good and bad&lt;/code&gt;. This isn’t an argument for never making a decision or paralysis by analysis, but rather for careful consideration of beliefs, a willingness to update opinions, thinking in probabilities and asked clarifying questions in light of a vague inquiry.&lt;/p&gt;
&lt;p&gt;I think we are all on some &lt;a href=&#34;https://en.wikipedia.org/wiki/Gradient_descent&#34;&gt;gradient descent&lt;/a&gt; toward truth. We wake up every day with a goal of minimizing loss (regret) through being correct, producing positive change in our environments and updating our beliefs. We inch toward this over time, but… our calculus is a bit rusty, sometimes we take a step in the wrong direction, sometimes we over shoot our destination, and sometimes we find ourselves stuck in a local minimum and only with great difficulty can we eject ourselves and find the global minimum.&lt;/p&gt;
&lt;p&gt;This is an arduous but worthwhile process.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“The inactive investor who takes up an obstinate attitude about his holdings and refuses to change his opinion merely because facts and circumstances have changed is the one who in the long run comes to grievous loss.”&lt;/p&gt;
&lt;p&gt;―- &lt;a href=&#34;https://archive.org/details/sim_nation-and-athenaeum_1924_35_supplement/page/n9/mode/2up&#34;&gt;J. M. Keynes&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 11-16-2024</title>
      <link>/learnedt1w/2024/11_16_2024/</link>
      <pubDate>Sat, 16 Nov 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/11_16_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://challahscript.com/what_i_wish_someone_told_me_about_postgres&#34;&gt;Postgres knowledge dump&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://finance.yahoo.com/quote/MSTR/&#34;&gt;$26BB of BTC $71BB market cap&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://allthatsinteresting.com/glyptodon-fossils&#34;&gt;Cool fossils&lt;/a&gt;
&lt;a href=&#34;https://m.youtube.com/watch?v=Oex8W5aASJo&#34;&gt;building a picnic table&lt;/a&gt; I really enjoy Beau&amp;rsquo;s videos.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://challahscript.com/what_i_wish_someone_told_me_about_postgres&#34;&gt;Postgres knowledge dump&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://finance.yahoo.com/quote/MSTR/&#34;&gt;$26BB of BTC $71BB market cap&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://allthatsinteresting.com/glyptodon-fossils&#34;&gt;Cool fossils&lt;/a&gt;
&lt;a href=&#34;https://m.youtube.com/watch?v=Oex8W5aASJo&#34;&gt;building a picnic table&lt;/a&gt; I really enjoy Beau&amp;rsquo;s videos.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 11-09-2024</title>
      <link>/learnedt1w/2024/11_09_2024/</link>
      <pubDate>Sat, 09 Nov 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/11_09_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Nice overview of &lt;a href=&#34;https://medium.com/@buczynski.rafal/exploring-jq-a-guide-to-essential-techniques-and-tools-for-professionals-b9df9db490de&#34;&gt;jq&lt;/a&gt;, was using the aws emr cli to describe clusters so I could SSH into them &lt;code&gt;aws emr describe-cluster --cluster-id&lt;/code&gt; and decided to use jq instead of &lt;code&gt;grep -i dns&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I guess you can &lt;a href=&#34;https://docs.aws.amazon.com/athena/latest/ug/notebooks-spark.html&#34;&gt;use spark&lt;/a&gt; in Athena&lt;/p&gt;
&lt;p&gt;&lt;code&gt;echo {1..10}&lt;/code&gt; returns 1-10&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt; lines awk &#39;NR%2 == 0&#39;&lt;/code&gt; filtering raw lines out of text file with awk is pretty handy&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt; lines sample -r 10%&lt;/code&gt; quick &amp;ldquo;random&amp;rdquo; sample&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Nice overview of &lt;a href=&#34;https://medium.com/@buczynski.rafal/exploring-jq-a-guide-to-essential-techniques-and-tools-for-professionals-b9df9db490de&#34;&gt;jq&lt;/a&gt;, was using the aws emr cli to describe clusters so I could SSH into them &lt;code&gt;aws emr describe-cluster --cluster-id&lt;/code&gt; and decided to use jq instead of &lt;code&gt;grep -i dns&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I guess you can &lt;a href=&#34;https://docs.aws.amazon.com/athena/latest/ug/notebooks-spark.html&#34;&gt;use spark&lt;/a&gt; in Athena&lt;/p&gt;
&lt;p&gt;&lt;code&gt;echo {1..10}&lt;/code&gt; returns 1-10&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt; lines awk &#39;NR%2 == 0&#39;&lt;/code&gt; filtering raw lines out of text file with awk is pretty handy&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt; lines sample -r 10%&lt;/code&gt; quick &amp;ldquo;random&amp;rdquo; sample&lt;/p&gt;
&lt;p&gt;In an &lt;a href=&#34;https://www.gnu.org/software/gawk/manual/gawk.html&#34;&gt;awk rule&lt;/a&gt;, either the pattern or the action can be omitted, but not both. If the pattern is omitted, then the action is performed for every input line. If the action is omitted, the default action is to print all lines that match the pattern.&lt;/p&gt;
&lt;p&gt;So,  &lt;code&gt;awk &#39;/li/ {print}&#39; mailing-list&lt;/code&gt; == &lt;code&gt;awk &#39;/li/&#39; mailing-list&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;make&lt;/code&gt;, it’s all about files. &lt;code&gt;make&lt;/code&gt; only cares about the name of the target. It does not check whether a file of the same name actually gets created by the rule.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git shortlog&lt;/code&gt; command is used to summarize the output of &lt;code&gt;git log&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git stash branch &amp;lt;new branchname&amp;gt;&lt;/code&gt;, creates a new branch, checks out the commit when you stashed your work, reapplies your work there, and then drops the stash if it applies successfully.&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://bitfieldconsulting.com/posts/need-money&#34;&gt;Interesting Consulting Read&lt;/a&gt;
&lt;a href=&#34;https://www.wsj.com/tech/ai/how-chatgpt-brought-down-an-online-education-giant-200b4ff2&#34;&gt;RIP Chegg&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;“A man on a thousand mile walk has to forget his goal and say to himself every morning, &amp;lsquo;Today I&amp;rsquo;m going to cover twenty-five miles and then rest up and sleep.”
― Leo Tolstoy, War and Peace&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Pizza &amp; Orange Juice</title>
      <link>/musings/pizza_and_oj/</link>
      <pubDate>Sun, 03 Nov 2024 00:00:00 +0000</pubDate>
      
      <guid>/musings/pizza_and_oj/</guid>
      <description>&lt;p&gt;Last Tuesday I went to &lt;a href=&#34;https://theparlor.us/&#34;&gt;The Parlor&lt;/a&gt;. I was back in Phoenix and wanted some pizza. I couldn’t find anyone willing to drop everything and go with me, so I went by myself. I rarely go to restaurants by myself, its somewhat uncomfortable because I feel limited in what I can stare at. I’ve been trying to fight the feeling that I always need to stare at something. Sometimes, I get pretty in my own head about what/who I’m staring at, how much eye contact to make, etc&amp;hellip; Anyway, reading that back that sounds pretty weird, but I’m just going to leave it… this is off the cuff.&lt;/p&gt;</description>
      <content>&lt;p&gt;Last Tuesday I went to &lt;a href=&#34;https://theparlor.us/&#34;&gt;The Parlor&lt;/a&gt;. I was back in Phoenix and wanted some pizza. I couldn’t find anyone willing to drop everything and go with me, so I went by myself. I rarely go to restaurants by myself, its somewhat uncomfortable because I feel limited in what I can stare at. I’ve been trying to fight the feeling that I always need to stare at something. Sometimes, I get pretty in my own head about what/who I’m staring at, how much eye contact to make, etc&amp;hellip; Anyway, reading that back that sounds pretty weird, but I’m just going to leave it… this is off the cuff.&lt;/p&gt;
&lt;p&gt;Ok so I go to the Parlor it’s ~8pm and not busy at all. I’m sitting at the bar, and I’m just staring at the guys making the pizzas. Now they seem to notice that I’m just staring and one of them looks at me and goes “Are you waiting to pick up?”… and I was like “Oh… no, I like watching.” He goes back to his thing and then after a few minutes tells me “This one is yours” and hands me the pizza directly. At this point I was a little worried that I pissed him off because I was staring or something idk.&lt;/p&gt;
&lt;p&gt;I’ve chowed down about half the pizza and I notice the chef walking behind me. I tell him the pizza was great as always, and we ended up having a thirty-minute conversation. Turns out that was the executive chef at the parlor, Zeus Miranda-felix. He’s a super nice guy and makes some of the best pizza in the state. He’s been working since 8am chopping 50lbs of onions, preparing dough, and now its 8pm and he’s still happy to spend half an hour chatting with some random guy watching him make pizza. He’s in his late twenties and told me he’s dedicated his entire adult life to cooking… his art. He’s dedicated his entire adult life to meticulously getting the small things right every day.&lt;/p&gt;
&lt;p&gt;When I was a kid my brother and I would go over to my Grandparents house, climb up into the orange trees, and pick bags of oranges. My mom had this little juicer and we’d run all the oranges through it until we had a good jugs worth. Just one ingredient… unfiltered orangey goodness.  We’d finish playing outside and want a glass of OJ before water.&lt;/p&gt;
&lt;p&gt;Could we have just gone to the store and bought a bunch of juice? Sure. Unfortunately, most orange juices from the store are kind of garbage. They taste like the container… there’s just something off about them. There are probably many difficulties with mass producing orange juice at scale, having it sit on a truck, on a shelf and comply to regulations that slowly erodes the flavor.&lt;/p&gt;
&lt;p&gt;I think orange juice is a nice encapsulation of getting the small things right. If your orange juice is good, it means you took the time to get nice fresh oranges and dealt with the slight inconvenience of juicing them. It’s one ingredient, there’s no hiding behind gobs of fat and salt and your customer is probably not staring intently as you make it.  It’s pretty common to find on menus. It’s also pretty easy to cut corners on.&lt;/p&gt;
&lt;p&gt;I’m not going to right hook anybody with a shitty analogy now but the details matter and orange juice speaks volumes. The Parlor actually doesn’t have orange juice on their menu, but it’d probably be good if they did. I’d like to have an orange tree in my backyard. I wish I lived closer to The Parlor.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 11-02-2024</title>
      <link>/learnedt1w/2024/11_02_2024/</link>
      <pubDate>Sat, 02 Nov 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/11_02_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;arp -a&lt;/code&gt; The arp utility displays and modifies the Internet-to-Ethernet address translation tables used by the address resolution protocol. &lt;code&gt;-a&lt;/code&gt; displays or deletes all of the current ARP entries.&lt;/p&gt;
&lt;p&gt;I passed the AWS Certified Cloud Practiioner Exam this week. I studied for a few hours to make sure I was familiar with some of the more niche offerings and all the marketing jargon that will appear on the test. Overall it&amp;rsquo;s really just a lot of content, if you&amp;rsquo;ve used AWS for some time most of it is failry rudimentary.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;arp -a&lt;/code&gt; The arp utility displays and modifies the Internet-to-Ethernet address translation tables used by the address resolution protocol. &lt;code&gt;-a&lt;/code&gt; displays or deletes all of the current ARP entries.&lt;/p&gt;
&lt;p&gt;I passed the AWS Certified Cloud Practiioner Exam this week. I studied for a few hours to make sure I was familiar with some of the more niche offerings and all the marketing jargon that will appear on the test. Overall it&amp;rsquo;s really just a lot of content, if you&amp;rsquo;ve used AWS for some time most of it is failry rudimentary.&lt;/p&gt;
&lt;p&gt;Most useful things to study would be niche offerings (Wavelength, Lex, Rekognition, &amp;hellip;), Networking (VPC, VPN, WAF, Shield, Route 53, Subnets, Regions, AZs, Local Zones, Outposts, Securiy Groups, NACLs, ELB &amp;hellip;), and the shared responsibility model.&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;RH Election &lt;a href=&#34;https://newsroom.aboutrobinhood.com/introducing-the-presidential-election-market/&#34;&gt;markets&lt;/a&gt;&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nbcnews.com/health/health-news/long-helene-iv-fluid-shortages-plagued-hospitals-rcna175563&#34;&gt;Saline Shortage&lt;/a&gt; This industry kind of baffles me so I spent some time reading about it. Basically Baxster ($BAX) produces the majority of Saline for the US. Saline in and of itself is not that complicated but producing it at scale while complying with many regulations seems to be very complicated. It seems as though its VERY low margin for these manufacturers. This stuff also takes up a lot of space&amp;hellip; Low Margin + Product that takes up a lot of space and is heavy is usually a nasty combination especially when it comes to logistics. It also seems that becasue of the margins at play, it only becomes econmically viable to produce at a few specific locations. When those locations get hit with a massive hurrican it just knee-caps production leading to shortages as there is no room for redundancy in the supply chain. Seems like production is fairly inelastic and can&amp;rsquo;t be ramped up or down fast.&lt;/p&gt;
&lt;p&gt;ALL that being said, it seems like &lt;a href=&#34;https://www.hcinnovationgroup.com/policy-value-based-care/blog/13021902/got-your-546-saline-iv-bag-defense-prepared-yet-i-didnt-think-so&#34;&gt;hospitals&lt;/a&gt; are still charging outlandish amounts for Saline. This is getting into the messy world of health care costs and billing that I have no authority or knowledge to write about, but I thought it was interesting.&lt;/p&gt;
&lt;p&gt;I can only imagine the complex pipeline all the way from manufacturing to administering this to a human&amp;hellip; and the variety of incentives, regulations, and people inserted into this process along the way.&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=bgo7rm5Maqg&#34;&gt;Aesthetically pleasing facts live longer&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 10-26-2024</title>
      <link>/learnedt1w/2024/10_26_2024/</link>
      <pubDate>Sat, 26 Oct 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/10_26_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;**.suffix&lt;/code&gt; in git ignore, especially helpful if you have a 100mb database locally and a write ahead log.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cs.cmu.edu/~pavlo/blog/2023/04/the-part-of-postgresql-we-hate-the-most.html&#34;&gt;Postgres MVCC&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://airandspace.si.edu/stories/editorial/how-do-you-put-apollo-spacesuit&#34;&gt;Space Suits&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Building a Neural network in pure SQL is hard!&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;**.suffix&lt;/code&gt; in git ignore, especially helpful if you have a 100mb database locally and a write ahead log.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cs.cmu.edu/~pavlo/blog/2023/04/the-part-of-postgresql-we-hate-the-most.html&#34;&gt;Postgres MVCC&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://airandspace.si.edu/stories/editorial/how-do-you-put-apollo-spacesuit&#34;&gt;Space Suits&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Building a Neural network in pure SQL is hard!&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 10-19-2024</title>
      <link>/learnedt1w/2024/10_19_2024/</link>
      <pubDate>Sat, 19 Oct 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/10_19_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Shell&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;You can us curl to make requests using the DICT protocol &lt;code&gt;curl -s &amp;quot;dict://dict.org/d:windmill&amp;quot; | trim&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Other curl things: &lt;code&gt;-I&lt;/code&gt; for HTTP header, &lt;code&gt;-L&lt;/code&gt; for redirection&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/jeroenjanssens/dsutils/blob/master/unpack&#34;&gt;unpack&lt;/a&gt; handy tool for decompression&lt;/p&gt;
&lt;p&gt;You can use rm and a pattern to remove all files in a directory &lt;code&gt;rm E1F*&lt;/code&gt; removes all files that start with E1F&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dagster + DBT&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Dagster Assets =  DBT Models: dbt models are named using file names, which Dagster will also use to create the corresponding asset’s asset key.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Shell&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;You can us curl to make requests using the DICT protocol &lt;code&gt;curl -s &amp;quot;dict://dict.org/d:windmill&amp;quot; | trim&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Other curl things: &lt;code&gt;-I&lt;/code&gt; for HTTP header, &lt;code&gt;-L&lt;/code&gt; for redirection&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/jeroenjanssens/dsutils/blob/master/unpack&#34;&gt;unpack&lt;/a&gt; handy tool for decompression&lt;/p&gt;
&lt;p&gt;You can use rm and a pattern to remove all files in a directory &lt;code&gt;rm E1F*&lt;/code&gt; removes all files that start with E1F&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dagster + DBT&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Dagster Assets =  DBT Models: dbt models are named using file names, which Dagster will also use to create the corresponding asset’s asset key.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Python venv [Stashing because for whatever reason I forget the syntax]&lt;/p&gt;&lt;/blockquote&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;python -m venv .env
source .env/bin/activate
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;DuckDB, you can copy a result set directly into a new csv file in your working directory&lt;/p&gt;&lt;/blockquote&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;COPY CHECK123 TO &amp;#39;output.csv&amp;#39; (HEADER, DELIMITER &amp;#39;,&amp;#39;);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/&#34;&gt;Athena performance tips&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.npr.org/2024/10/12/g-s1-28033/7-eleven-store-closures-us-canada&#34;&gt;7-11 closures&lt;/a&gt;
&lt;a href=&#34;https://apnews.com/article/jacksonville-jaguars-employee-fraud-176075a2d6cffd292a856e87f7d9d81b&#34;&gt;Absoultely insane fraud from a Jags employee&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/&#34;&gt;Back Prop granular example&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://aworkinglibrary.com/writing/accountability-sinks&#34;&gt;Accountability sinks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;You can catch more flys with Honey than vinegar&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://billwear.github.io/art-of-attention.html&#34;&gt;The Art of attention&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://marginalrevolution.com/marginalrevolution/2022/02/context-is-that-which-is-scarce-2.html&#34;&gt;On Context&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 10-12-2024</title>
      <link>/learnedt1w/2024/10_12_2024/</link>
      <pubDate>Sat, 12 Oct 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/10_12_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://duckdb.org/2024/09/25/changing-data-with-confidence-and-acid.html&#34;&gt;ACID&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;GIT_CURL_VERBOSE=1 git pull --rebase&lt;/code&gt; interesting verbose info on HTTPS&lt;/p&gt;
&lt;p&gt;A few more linux commands:
&lt;code&gt;seq&lt;/code&gt; generates series of numbers
&lt;code&gt;rev&lt;/code&gt; reverses input, prints to stdout
&lt;code&gt;wc&lt;/code&gt; outputs count of lines, words, and characters&lt;/p&gt;
&lt;p&gt;I was attemping to pull changes from a remote repository, running &lt;code&gt;git pull rebase&lt;/code&gt; and just randomly got the response:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;BUG: remote-curl.c:1528: The entire rpc-&amp;gt;buf should be larger than LARGE_PACKET_MAX
error: git-remote-https died of signal 6
fatal: expected flush after ref listing
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I&amp;rsquo;d never gotten this before.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://duckdb.org/2024/09/25/changing-data-with-confidence-and-acid.html&#34;&gt;ACID&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;GIT_CURL_VERBOSE=1 git pull --rebase&lt;/code&gt; interesting verbose info on HTTPS&lt;/p&gt;
&lt;p&gt;A few more linux commands:
&lt;code&gt;seq&lt;/code&gt; generates series of numbers
&lt;code&gt;rev&lt;/code&gt; reverses input, prints to stdout
&lt;code&gt;wc&lt;/code&gt; outputs count of lines, words, and characters&lt;/p&gt;
&lt;p&gt;I was attemping to pull changes from a remote repository, running &lt;code&gt;git pull rebase&lt;/code&gt; and just randomly got the response:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;BUG: remote-curl.c:1528: The entire rpc-&amp;gt;buf should be larger than LARGE_PACKET_MAX
error: git-remote-https died of signal 6
fatal: expected flush after ref listing
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I&amp;rsquo;d never gotten this before.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I tried increasing http.postBuffer &lt;code&gt;git config --global http.postBuffer 524288000&lt;/code&gt;&amp;hellip; nah&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git fsck --full &amp;amp;&amp;amp; git gc&lt;/code&gt;&amp;hellip; nah&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew upgrade git&lt;/code&gt; from 2.46.0 -&amp;gt; 2.47.0&amp;hellip; nah&lt;/li&gt;
&lt;li&gt;Ok&amp;hellip; no more HTTPS lets use SSH instead&amp;hellip; works fine&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Not great info online and I&amp;rsquo;m not sure exactly why this randomly occured. Also the data I was fetching and merging was&amp;hellip; tiny:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;git pull --rebase 
remote: Enumerating objects: 14, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 9 (delta 7), reused 7 (delta 5), pack-reused 0 (from 0)
Unpacking objects: 100% (9/9), 850 bytes | 44.00 KiB/s, done.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Reviewed DBT:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Model: Just SQL file, added in models folder&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Version Control: Connect to GIT or GIT Lab, allows for analytics folks who don&amp;rsquo;t get to easily create branch, merge, push and pull&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Preview: Run model and return limited result set back to DBT cloud IDE&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Connection: Underlying DW that DBT uses for compute (Snowflake, Databricks, Redshift)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jinja: Templating engine that allows you to reference other models, define how you want your model to be materialized in your DW [Running Compile in the ide shows the actual SQL]&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DBT Run: Takes all you models, looks through all the code, wrap it in correct DDL and construct objects in DW in order of the DAG&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DBT build: just Run + Test for each step in DAG&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Lineage shows dependencies [Jinja this is the REF function used in the downstream model]&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sources [From Fivetran, Stitch, etc&amp;hellip;] -&amp;gt; Staging -&amp;gt; First Layer models -&amp;gt; Fact Models / Dimension models&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;dbt_project.yml: Can tell DBT to build all models under a certain directory as tables instead of doing this with {{config}}&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sources: Document raw tables in yaml, then you reference these tables using jinja, so if the names change you only need to update this file not every single model. Can also monitor source freshness &lt;code&gt;dbt source freshness&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tests: Defined inside yaml that lives with a models directory, supports simple tests against columns out of the box and customer SQL tests by adding models under the tests directory&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add descriptions to your yaml as well, this can be and probably is better done via markdown. &lt;code&gt;dbt docs generate&lt;/code&gt; spins up a small web page detailing the docs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploying: Deploy models to production, dedicated branch, schema, and schedule/run dbt commands. To do this create a prod env in the deploy tab&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://htmlforpeople.com/zero-to-internet-your-first-website/&#34;&gt;Great tutorial for anyone brand new to building websites&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://profmattstrassler.com/2024/10/01/why-is-the-speed-of-light-so-fast-part-1/&#34;&gt;Why is the speed of light so fast&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Wide Tables</title>
      <link>/posts/widetables/</link>
      <pubDate>Sun, 06 Oct 2024 00:00:00 +0000</pubDate>
      
      <guid>/posts/widetables/</guid>
      <description>&lt;h1 id=&#34;a-few-considerations-before-building-that-extremely-wide-table&#34;&gt;A few considerations before building that extremely wide table.&lt;/h1&gt;
&lt;p&gt;Every once in a while, an idea comes along to build a table with a wide array of columns at a particular granularity. This is usually associated with “self-serve analytics” and/or an attempt to define a “source of truth” table. Wide tables, self-serve analytics, and source of truth tables aren’t inherently good or bad… but there are some considerations to this type of table that I’m going to rant about.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;a-few-considerations-before-building-that-extremely-wide-table&#34;&gt;A few considerations before building that extremely wide table.&lt;/h1&gt;
&lt;p&gt;Every once in a while, an idea comes along to build a table with a wide array of columns at a particular granularity. This is usually associated with “self-serve analytics” and/or an attempt to define a “source of truth” table. Wide tables, self-serve analytics, and source of truth tables aren’t inherently good or bad… but there are some considerations to this type of table that I’m going to rant about.&lt;/p&gt;
&lt;p&gt;When I talk about a single “wide table” I’m kind of talking about a &lt;a href=&#34;https://en.wikipedia.org/wiki/Denormalization&#34;&gt;denormalized table&lt;/a&gt; just an especially wide one with many loosely related columns. The opposite of this would be a &lt;a href=&#34;https://en.wikipedia.org/wiki/Database_normalization&#34;&gt;normalized design&lt;/a&gt; where one would “store different but related pieces of information in separate logical tables (called relations)”. I don’t want to linger on this topic too much but typically a denormalized scheme speeds up reads at the expense of writes, and vice versa for a normalized schema.&lt;/p&gt;
&lt;p&gt;I’ll also mostly be talking in the context of &lt;a href=&#34;https://en.wikipedia.org/wiki/Online_analytical_processing&#34;&gt;OLAP&lt;/a&gt;, not &lt;a href=&#34;https://en.wikipedia.org/wiki/Online_transaction_processing&#34;&gt;OLTP&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;lets-define-our-wide-table&#34;&gt;Lets define our wide table&lt;/h2&gt;
&lt;p&gt;For the sake of the rest of this thing lets define a wide table.&lt;/p&gt;
&lt;p&gt;You work for a company that sells things. You record data on what was sold, how much was sold, what was projected to be sold, how much of that thing you had, how many distinct customers bought that thing, how quickly did you get that thing to your customer… I’m not going to hash out the full DDL for this table but you get the picture.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It should be apparent the sheer number of unique metrics that can be generated just from selling things!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You know what would be really nice? What if we decided on some granularity say… for a particular thing in a particular week we just record every metric about that thing for that week! So, a unique row in our table will be a combination of Thing + Week… and then we’ll store the name of the thing, the inventory, the shipments, the forecast, etc…&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Note&lt;/code&gt; that this is a BATCH solution where data is written periodically at specific intervals in time&amp;hellip; NOT a streaming solution where shipments are recorded in real time. Maybe the upstream sources this table is generated by are populated via some Kafka/Redpanda/Kinesis situation.&lt;/p&gt;
&lt;h2 id=&#34;why-would-you-want-to-do-this&#34;&gt;Why would you want to do this?&lt;/h2&gt;
&lt;p&gt;Maybe this table is for an LLM or ML based query generation solution, pulling data for non-technical users with ad-hoc business questions, maybe it’s to simplify the SQL associated with these ad-hoc queries to move joins/other logic upstream, speeding up reads (SELECT), or maybe the table needs to have a ton of columns for some other reason. That’s fine! &lt;code&gt;Standardizing definitions is generally a good thing and improving the speed at which ad-hoc questions are answered is also good!&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Dueling parties wielding Excel files generated by random queries stored and iterated on in Notepad, resulting in different outputs is always annoying. It’d be easier to trouble shoot if everyone was relying on the same source and using some form of version control (I know I’m only dreaming at this point). It’d be even better if you didn’t need to join any other relations on that source, simply &lt;code&gt;SELECT &amp;amp; FILTER&lt;/code&gt; and you’re good to go, thus, our wide table.&lt;/p&gt;
&lt;h1 id=&#34;what-are-some-issues-begin-rant&#34;&gt;What are some issues? [Begin Rant]&lt;/h1&gt;
&lt;h2 id=&#34;this-table-is-now-a-dependency-bomb&#34;&gt;This table is now a dependency bomb.&lt;/h2&gt;
&lt;p&gt;All of these columns are derived from upstream tables, your inventory data is coming from scan events at your warehouse, outbound shipments from another source and data science is producing the forecast in a local Python Notebook triggered via CRON that writes to the windows shared drive, you’ve asked if this could be moved to sage maker and the resulting dataset cataloged and directly written to the data-warehouse but that’s &amp;ldquo;below the line&amp;rdquo; for this quarter.&lt;/p&gt;
&lt;p&gt;You could very well now have a &lt;code&gt;ball of 70 dependencies&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If any of those dependencies are delayed every metric will be waiting… so instead of just having the guy who needs to report inventory levels to the director on Monday pissed, everyone is pissed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now you’re like ok… if any dependency hasn’t satisfied by Monday at 5:00 am, it doesn’t matter I’m just going to force the job so that at least some people get their data. However, now you’ve just written dirty rows to this table… the inventory guy is still pissed because inventory is half of what it should be because you forced the data set before the latest scan events were written to the upstream table. You also KNOW that by forcing dependencies you’ve got incorrect data in your table and you’re just going to have to re-run your transform job again and actually let the dependencies satisfy this time. If you have a single transform job that means running everything again on your compute even if it&amp;rsquo;s already been written to the table successfully. You’ll also need some mechanism to notify the inventory guy that his numbers are going to be garbage Monday am, so he doesn’t accidentally report something ridiculous to the director.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Inventory guy does not like you&lt;/code&gt; he thinks you’re an ass, you think he’s an ass, inventory guy keys the right side of your 2022 Toyota Avalon, the Toyota Avalon is now discontinued and you’re sad because you should’ve waited and purchased the Toyota Crown, but you didn’t realize the Crown was coming out so you bought an Avalon, anyway… right hook to inventory guy! Now you’re being charged with assault! Now you’re in jail, your arraignment isn’t until Tuesday, but you need to get inventory numbers out by Monday! Who’s going to force those dependencies???&lt;/p&gt;
&lt;h2 id=&#34;what-about-storage&#34;&gt;What about storage?&lt;/h2&gt;
&lt;p&gt;With this wide table, we’ll have the name of the product, maybe the product belongs to a broader group of products and we’ll throw the description of the product in there as well.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;These facts about the product may change… but probably fairly infrequently.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In our table every week the same values will be included for those products over and over. Instead, they could be stored in a separate table that contains each product, the description, color, etc… and then that could be joined to our fact table. Now we are again beginning to talk about &lt;a href=&#34;https://en.wikipedia.org/wiki/Database_normalization&#34;&gt;Normalization&lt;/a&gt; which is critical to think about when setting up your relations.&lt;/p&gt;
&lt;p&gt;A few solid rebuttals to the above statement given that we are mostly talking about an OLAP situation:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Modern columnar storage formats like Parquet are efficient at compressing data, especially repeated values in a column… something like &lt;a href=&#34;https://docs.teradata.com/r/Enterprise_IntelliFlex_VMware/Database-Design/Using-Data-Compression/Multivalue-Compression&#34;&gt;MVC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Data storage is relatively cheap… if we are only talking in the millions of rows, it&amp;rsquo;s just not going to be a major driver of cost&lt;/li&gt;
&lt;li&gt;Denormalized data often performs better for analytical queries, with columnar storage, queries will only need to scan the columns as denoted by the query&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;a-few-points-on-insertsupdatesdeletes&#34;&gt;A few points on Inserts/Updates/Deletes&lt;/h2&gt;
&lt;p&gt;This is where denormalization can be slower and get more complicated. Let’s say we want to change the product group that one of our products belongs to in the denormalized table. We’ll want all historical data to be attributed to the new group so we’ll need to update the previous product group in every row.&lt;/p&gt;
&lt;p&gt;We can also launch a new product, but it’s possible data science hasn’t finished the production forecast for that product yet… now the forecast column is NULL because &lt;code&gt;we aren’t going to stall inserting the rest of the columns for that product just because the forecast is NULL.&lt;/code&gt; However, people that read from this table will need to understand that the forecast is NULL and choose how to deal with it accordingly. If an analyst is tasked with deriving forecast accuracy, and they notice some NULLs and just &lt;code&gt;NVL(forecast_column, 0)&lt;/code&gt;… that’s just not true, science has a beta forecast for the product and its certainly &amp;gt; 0… there’s a reason we decided to launch the new product after all, we predicted customers will want to buy it!&lt;/p&gt;
&lt;p&gt;To be fair, if you launch something like the &lt;a href=&#34;https://en.wikipedia.org/wiki/Pontiac_Aztek&#34;&gt;Pontiac Aztek&lt;/a&gt; maybe anticipating 0 demand is the correct choice when attempting to sell an angry kitchen appliance of a car.&lt;/p&gt;
&lt;h1 id=&#34;where-will-your-data-model-break-down&#34;&gt;Where will your data model break down?&lt;/h1&gt;
&lt;p&gt;Q: Hey I know we have that inventory column, could we break it out into the different inventory dispositions (Sellable, In transit, and Damaged)?&lt;/p&gt;
&lt;p&gt;A: &lt;code&gt;Sure, now our table increases in... width...&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Q: Hey I know we have shipments for all of last week, and its only Thursday but I’d really to see what we shipped out Mon/Tues/Wed of this week to see where we are at.&lt;/p&gt;
&lt;p&gt;A: &lt;code&gt;We cant really answer that with the demoralized table at the current granularity… even if it was daily we’d probably be waiting on dependencies and wouldn&#39;t be able to get back to this person until Friday. Now this ask simply becomes a query against the upstream shipments table for the latest data.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Q: Hey I’m using that wide table you made but I want to see how the descriptions for this product have evolved over time; however, all the descriptions are the same in this table?&lt;/p&gt;
&lt;p&gt;A: &lt;code&gt;This question will need to be directed towards another table that contains this info as the denormalized table has been updated to only reflect the latest definition.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Just as with anything there are tradeoffs. Above, I&amp;rsquo;m posing specifically tricky questions of the table, but it would do extremly well with basic aggregations and reducing the knowledge burden for end users of all the different upstream tables.&lt;/p&gt;
&lt;p&gt;I only bring up these points because I think they are relevant to think about when designing how you want to capture your data. Again, there is no right or wrong, it’s simply context/data dependent and the right choice will be different across different teams. However, there is a clear right and wrong when it comes purchasing a &lt;code&gt;Pontiac Aztek&lt;/code&gt;; I&amp;rsquo;ll leave that exercise to the reader.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 10-05-2024</title>
      <link>/learnedt1w/2024/10_05_2024/</link>
      <pubDate>Sat, 05 Oct 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/10_05_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;grep -i&lt;/code&gt; for case insensitive search (I always forget this flag for some reason so writing it down)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cd -&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;history 5&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://reason.com/2024/09/30/held-hostage-overseas-the-irs-wants-your-back-taxes/&#34;&gt;Taxes&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://moxie.org/2013/01/07/career-advice.html&#34;&gt;https://moxie.org/2013/01/07/career-advice.html&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Looked at Saturn through 16” telescope at Kitt Peak observatory an hour outside of Tucson. Will need to come back and do the climb up to the obervatory on a bike. It sounds like they have some additional cool exhibits opening up that would be fun to check out.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;grep -i&lt;/code&gt; for case insensitive search (I always forget this flag for some reason so writing it down)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cd -&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;history 5&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://reason.com/2024/09/30/held-hostage-overseas-the-irs-wants-your-back-taxes/&#34;&gt;Taxes&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://moxie.org/2013/01/07/career-advice.html&#34;&gt;https://moxie.org/2013/01/07/career-advice.html&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Looked at Saturn through 16” telescope at Kitt Peak observatory an hour outside of Tucson. Will need to come back and do the climb up to the obervatory on a bike. It sounds like they have some additional cool exhibits opening up that would be fun to check out.&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;A light year is the equivalent of 5.9 trillion miles.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=MvgN5gCuLac&#34;&gt;&amp;ldquo;Their stuff is shit, and your shit is stuff!&amp;rdquo;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.nps.gov/katm/learn/fat-bear-week-2024.htm?utm_source=chartr&amp;amp;utm_medium=email&amp;amp;utm_campaign=chartr_2024100&#34;&gt;Fat bear week&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://polarisprogram.com/dawn/&#34;&gt;https://polarisprogram.com/dawn/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=ig-2xlXfex4&#34;&gt;Interview related to the book club book this month.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/shorts/gkMMLljI2MQ&#34;&gt;Insane&lt;/a&gt; amount of watts.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 09-28-2024</title>
      <link>/learnedt1w/2024/09_28_2024/</link>
      <pubDate>Sat, 28 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/09_28_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://haystackeditor.com/&#34;&gt;Cool visual code editor&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;TMUX after creating a new session &lt;code&gt;tmux new -s gvbackfill&lt;/code&gt;:
Split window vertically CTRL + B, #
Split window horizontally CTRL + B, : and then type split-window
Switch window CTRL + B and arrow key&lt;/p&gt;
&lt;p&gt;AWS Athena is based on Trino, I don&amp;rsquo;t know why I never know this, but yeah I guess it is.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://9to5mac.com/2024/09/27/up-to-600-million-facebook-and-instagram-passwords-stored-in-plain-text/&#34;&gt;Plain text&amp;hellip;&lt;/a&gt; SMH&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.noahpinion.blog/p/once-again-imports-do-not-subtract?utm_source=post-email-title&amp;amp;publication_id=35345&amp;amp;post_id=149517389&amp;amp;utm_campaign=email-post-title&amp;amp;isFreemail=false&amp;amp;r=6g77v&amp;amp;triedRedirect=true&amp;amp;utm_medium=email&#34;&gt;Imports dont subtract from GDP&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://haystackeditor.com/&#34;&gt;Cool visual code editor&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;TMUX after creating a new session &lt;code&gt;tmux new -s gvbackfill&lt;/code&gt;:
Split window vertically CTRL + B, #
Split window horizontally CTRL + B, : and then type split-window
Switch window CTRL + B and arrow key&lt;/p&gt;
&lt;p&gt;AWS Athena is based on Trino, I don&amp;rsquo;t know why I never know this, but yeah I guess it is.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://9to5mac.com/2024/09/27/up-to-600-million-facebook-and-instagram-passwords-stored-in-plain-text/&#34;&gt;Plain text&amp;hellip;&lt;/a&gt; SMH&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.noahpinion.blog/p/once-again-imports-do-not-subtract?utm_source=post-email-title&amp;amp;publication_id=35345&amp;amp;post_id=149517389&amp;amp;utm_campaign=email-post-title&amp;amp;isFreemail=false&amp;amp;r=6g77v&amp;amp;triedRedirect=true&amp;amp;utm_medium=email&#34;&gt;Imports dont subtract from GDP&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;Thinkig about what I&amp;rsquo;d like to do for &lt;a href=&#34;https://new.mta.info/article/mta-open-data-challenge&#34;&gt;MTA open data challenge&lt;/a&gt; I&amp;rsquo;m thinking something related to buses&amp;hellip; maybe something with the fastest bus?&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Megalopolis was one of the worst movies I&amp;rsquo;ve ever watched. I understand its trying to do something, but&amp;hellip; wow!&lt;/p&gt;
&lt;p&gt;Movies I&amp;rsquo;ve enjoyed recently: The Killing Fields &amp;amp; At Close Range&lt;/p&gt;
&lt;p&gt;Movies I want: to watch: Dante&amp;rsquo;s Peak and At Rivers Edge&lt;/p&gt;
&lt;p&gt;I tried making Tomato Jam&amp;hellip; but I kind of just made ketchup. I made some Pumpkin Spice Coffee Cakes with my friend Lauren and they turned out pretty well even though we kind of mixed the flour too soon.&lt;/p&gt;
&lt;p&gt;I want to try and make Norwegian crisp bread.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Thoughts on personal finance</title>
      <link>/musings/personalfinance/</link>
      <pubDate>Sun, 22 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>/musings/personalfinance/</guid>
      <description>&lt;h1 id=&#34;heading&#34;&gt;$$$&lt;/h1&gt;
&lt;p&gt;I wanted to quickly jot down my current positions on personal finance topics. This will be quite interesting to see if I maintain these views into the future or if I change my mind.&lt;/p&gt;
&lt;h2 id=&#34;on-saving&#34;&gt;On Saving&lt;/h2&gt;
&lt;p&gt;Saving money now (Currently 25 years old as of writing) is incredibly important due to the nature of &lt;a href=&#34;https://www.investor.gov/financial-tools-calculators/calculators/compound-interest-calculator&#34;&gt;compounding&lt;/a&gt; a dollar saved now is extremely important given the long time horizon it has to compound.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;heading&#34;&gt;$$$&lt;/h1&gt;
&lt;p&gt;I wanted to quickly jot down my current positions on personal finance topics. This will be quite interesting to see if I maintain these views into the future or if I change my mind.&lt;/p&gt;
&lt;h2 id=&#34;on-saving&#34;&gt;On Saving&lt;/h2&gt;
&lt;p&gt;Saving money now (Currently 25 years old as of writing) is incredibly important due to the nature of &lt;a href=&#34;https://www.investor.gov/financial-tools-calculators/calculators/compound-interest-calculator&#34;&gt;compounding&lt;/a&gt; a dollar saved now is extremely important given the long time horizon it has to compound.&lt;/p&gt;
&lt;p&gt;I currently live below my means, and hold a high savings rate most months.&lt;/p&gt;
&lt;p&gt;I avoid status seeking purchases. Sometimes I have urges to make these purchases, but I frame them as large drains of my limited time&amp;hellip; this makes them extremely off-putting to me. For instance, I could buy a $10,000 outfit to show off my status and attempt to attract attention. The tradeoff of my time to do so simply isn&amp;rsquo;t worth it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$10,000 compounding annually for 40 years at 5% interest turns into $70,399.89.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Purchasing power will be reduced due to inflation, the 5% return is an assumption (Could be +/-), and there are no additional contributions to this initial investment. Irrespective of any of that, the point stands that that initial investment would be worth much more than in an outfit that will most likely be worth far lass than the initial investment in 40 years.&lt;/p&gt;
&lt;h2 id=&#34;the-other-side-of-saving&#34;&gt;The other side of Saving&lt;/h2&gt;
&lt;p&gt;While I closely monitor unnecessary purchases, I view travel as necessary and not something to wait until later to enjoy. I don&amp;rsquo;t go out of my way to spend as much money as possible when traveling, but I take most any opportunity to visit a new place. I enjoy maximizing my time and being comfortable while visiting and am willing to spend the $$$ to do so.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m also willing to spend money I wouldn&amp;rsquo;t normally while hanging out with friends or going out to dinner with family.&lt;/p&gt;
&lt;h2 id=&#34;investing&#34;&gt;Investing&lt;/h2&gt;
&lt;p&gt;I may currently be too risk averse, but my current investing philosophy is as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Buying individual equities/crypto is essentially gambling, doing this with a small amount of money is &lt;del&gt;fine&lt;/del&gt; (Less then 2% of total net worth)&lt;/li&gt;
&lt;li&gt;I split investment 40/60 between sure return products(CDs and a High Yield Savings account) and indexes(Small Cap Value and VT)&amp;hellip; in current state I think this is probably over-weighting CDs and HYS, although it does allow me a lot of liquidity if the stock market goes down&lt;/li&gt;
&lt;li&gt;In light of the last statement, I do NOT believe I can time the market, and I am currently acting not in the interest of maximizing returns by withholding so much cash from the stock market&lt;/li&gt;
&lt;li&gt;I try to weight my Index holdings away from Large Cap US tech companies as that is currently my main source of income and I&amp;rsquo;d like to diversify away not increase my exposure&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I think &lt;a href=&#34;https://rationalreminder.ca/&#34;&gt;Rational Reminder&lt;/a&gt; is the basis for most of my opinions and current investment philosophy.&lt;/p&gt;
&lt;h2 id=&#34;what-do-i-think-will-change&#34;&gt;What do I think will change&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve never made a large purchase like a home, but it currently makes me nervous concentrating so much of one&amp;rsquo;s net worth in a single asset.&lt;/p&gt;
&lt;p&gt;I think having a large expensive wedding is silly, but maybe I&amp;rsquo;ll see that as a once (Can only get married for the first time once) in a lifetime opportunity and change my opinions.&lt;/p&gt;
&lt;p&gt;If I have kids, I think my financial outlook changes quite dramatically. This is not to view children as an expense, but simply to note that my current thoughts around personal finance don&amp;rsquo;t take dependents into account whatsoever. Maybe I will become even more risk averse at this point?&lt;/p&gt;
&lt;h2 id=&#34;a-reason-for-being&#34;&gt;A reason for being&lt;/h2&gt;
&lt;p&gt;My end goal is to have the freedom to spend my limited time on the things I want to do with the people I want to do them with. My thoughts, everything I wrote and didn&amp;rsquo;t write above is with this single goal in mind. I think this is a broad statement but I don&amp;rsquo;t think I can make it any more granular.&lt;/p&gt;
&lt;p&gt;Its all a weird balancing act of present satisfaction vs future enjoyment&amp;hellip; a rubber band of fond memories and regret. I guess I&amp;rsquo;d like to have fond memories, and leave others with fond memories as well.&lt;/p&gt;
&lt;p&gt;Ok so maybe its:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I want to have enough $$$ to do the things that bring me happiness currently&lt;/li&gt;
&lt;li&gt;I want to make sure my future self has enough $$$ to do things that bring him happiness&lt;/li&gt;
&lt;li&gt;I want the freedom to be able to choose how I spend my time&lt;/li&gt;
&lt;li&gt;I want to help others and leave a net-positive reputation with both strangers and loved ones&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If I can leverage my finances to do that, I think I&amp;rsquo;d be happy.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 09-21-2024</title>
      <link>/learnedt1w/2024/09_21_2024/</link>
      <pubDate>Sat, 21 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/09_21_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Excel is not a database! (This is not a new learning, but something I&amp;rsquo;d like to shout loudly)&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Citizenship_in_a_Republic&#34;&gt;The Man in the Arena:&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;It is not the critic who counts; not the man who points out how the strong man stumbles, or where the doer of deeds could have done them better. The credit belongs to the man who is actually in the arena, whose face is marred by dust and sweat and blood; who strives valiantly; who errs, who comes short again and again, because there is no effort without error and shortcoming; but who does actually strive to do the deeds; who knows great enthusiasms, the great devotions; who spends himself in a worthy cause; who at the best knows in the end the triumph of high achievement, and who at the worst, if he fails, at least fails while daring greatly, so that his place shall never be with those cold and timid souls who neither know victory nor defeat.&amp;rdquo;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;Excel is not a database! (This is not a new learning, but something I&amp;rsquo;d like to shout loudly)&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.m.wikipedia.org/wiki/Citizenship_in_a_Republic&#34;&gt;The Man in the Arena:&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;It is not the critic who counts; not the man who points out how the strong man stumbles, or where the doer of deeds could have done them better. The credit belongs to the man who is actually in the arena, whose face is marred by dust and sweat and blood; who strives valiantly; who errs, who comes short again and again, because there is no effort without error and shortcoming; but who does actually strive to do the deeds; who knows great enthusiasms, the great devotions; who spends himself in a worthy cause; who at the best knows in the end the triumph of high achievement, and who at the worst, if he fails, at least fails while daring greatly, so that his place shall never be with those cold and timid souls who neither know victory nor defeat.&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Went on a trip to Denver. The fall colors in Breckenridge, CO are incredibly beatiful, and I&amp;rsquo;d love to spend a full week there next fall/summer. The skiing looks excellent too, but quite expensive.&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.amazon.com/Tuesdays-Morrie-Greatest-Lesson-Anniversary/dp/076790592X&#34;&gt;Quite enjoyed Tuesdays wIth Morrie&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 09-14-2024</title>
      <link>/learnedt1w/2024/09_14_2024/</link>
      <pubDate>Sat, 14 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/09_14_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/IEEE_754&#34;&gt;IEEE 754&lt;/a&gt; on floating point numbers&lt;/p&gt;
&lt;p&gt;&amp;ldquo;If you want to know what&amp;rsquo;s actually reflected in your data, you may need to profile it.  Needles in haystacks aren&amp;rsquo;t revealed by &amp;ldquo;select * from haystack limit 100&amp;rdquo;.  You&amp;rsquo;ll probably just get 100 rows of hay.&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://companiesmarketcap.com/walgreens-boots-alliance/total-debt/&#34;&gt;Walgreens Debt Burden&lt;/a&gt; apparently a lot of their fundamental real estate is leased.&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://tookmund.com/2024/09/hibernation-preparation&#34;&gt;How does Linux move from an awake machine to a hibernating one?&lt;/a&gt;&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/IEEE_754&#34;&gt;IEEE 754&lt;/a&gt; on floating point numbers&lt;/p&gt;
&lt;p&gt;&amp;ldquo;If you want to know what&amp;rsquo;s actually reflected in your data, you may need to profile it.  Needles in haystacks aren&amp;rsquo;t revealed by &amp;ldquo;select * from haystack limit 100&amp;rdquo;.  You&amp;rsquo;ll probably just get 100 rows of hay.&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://companiesmarketcap.com/walgreens-boots-alliance/total-debt/&#34;&gt;Walgreens Debt Burden&lt;/a&gt; apparently a lot of their fundamental real estate is leased.&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://tookmund.com/2024/09/hibernation-preparation&#34;&gt;How does Linux move from an awake machine to a hibernating one?&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://kpno.noirlab.edu/&#34;&gt;Kitt Peak Observatory&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;I know that a Tomato is a fruit, and I also know not to put it in a fruit salad&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://anandsanwal.me/college-student-debt-deception/&#34;&gt;Interesting take on Student Debt&lt;/a&gt;&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 09-07-2024</title>
      <link>/learnedt1w/2024/09_07_2024/</link>
      <pubDate>Sat, 07 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/09_07_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;RAND(1)&lt;/code&gt; Does not throw an error in Redshift SQL but &lt;code&gt;RANDOM(1)&lt;/code&gt; does. I can&amp;rsquo;t find any info on &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/r_RANDOM.html&#34;&gt;RAND&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;echo &amp;quot;temp/&amp;quot; &amp;gt;&amp;gt; .gitignore&lt;/code&gt; untrack a folder&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git reset HEAD^&lt;/code&gt; reset to previous commit&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/nuno-faria/tetris-sql&#34;&gt;Tetris SQL&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://tomhazledine.com/cosine-similarity/&#34;&gt;Cosine Similarity&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;I wish I learned sooner that being the new guy has a lot of perks&amp;rdquo; &amp;ndash; Some guy&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;RAND(1)&lt;/code&gt; Does not throw an error in Redshift SQL but &lt;code&gt;RANDOM(1)&lt;/code&gt; does. I can&amp;rsquo;t find any info on &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/r_RANDOM.html&#34;&gt;RAND&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;echo &amp;quot;temp/&amp;quot; &amp;gt;&amp;gt; .gitignore&lt;/code&gt; untrack a folder&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git reset HEAD^&lt;/code&gt; reset to previous commit&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/nuno-faria/tetris-sql&#34;&gt;Tetris SQL&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://tomhazledine.com/cosine-similarity/&#34;&gt;Cosine Similarity&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;I wish I learned sooner that being the new guy has a lot of perks&amp;rdquo; &amp;ndash; Some guy&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 08-31-2024</title>
      <link>/learnedt1w/2024/08_31_2024/</link>
      <pubDate>Sat, 31 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/08_31_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;echo $?&lt;/code&gt; will return the exit status of last command.&lt;/p&gt;
&lt;p&gt;I was manually creating a test-RDS instance running Postgres in the AWS console&amp;hellip; if you don&amp;rsquo;t find a small area in the additional configuration section where it says &amp;ldquo;Specify a Database Name&amp;rdquo; [This is optional]&amp;hellip; it won&amp;rsquo;t create a database.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Date +%s&lt;/code&gt; on my mac to show time since epoch&lt;/p&gt;
&lt;p&gt;Been using tmux for long running tasks on my dev desk. I hadn&amp;rsquo;t realized it spawns a new procss &lt;code&gt;ps aux | grep tmux&lt;/code&gt;, makes it really useful.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;echo $?&lt;/code&gt; will return the exit status of last command.&lt;/p&gt;
&lt;p&gt;I was manually creating a test-RDS instance running Postgres in the AWS console&amp;hellip; if you don&amp;rsquo;t find a small area in the additional configuration section where it says &amp;ldquo;Specify a Database Name&amp;rdquo; [This is optional]&amp;hellip; it won&amp;rsquo;t create a database.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Date +%s&lt;/code&gt; on my mac to show time since epoch&lt;/p&gt;
&lt;p&gt;Been using tmux for long running tasks on my dev desk. I hadn&amp;rsquo;t realized it spawns a new procss &lt;code&gt;ps aux | grep tmux&lt;/code&gt;, makes it really useful.&lt;/p&gt;
&lt;p&gt;[Go learning] (&lt;a href=&#34;https://go.dev/tour/welcome/1&#34;&gt;https://go.dev/tour/welcome/1&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/okigan/awscurl&#34;&gt;awscurl&lt;/a&gt; is pretty nifty, used it for the first time.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git restore --staged directory/&lt;/code&gt; to unstage all files from a commit in a specific directory&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;REI &lt;a href=&#34;https://www.seattletimes.com/business/rei-reports-another-year-of-losses-pledges-efficiency-and-new-stores/&#34;&gt;lost&lt;/a&gt; ~300MM dollars last year.&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Lady_tasting_tea&#34;&gt;The Tea Experiment&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Anello - Tucson (Excellent pizza and chocolate tart)&lt;/p&gt;
&lt;p&gt;Other places I want to try: Cherry Blossom and El Torero&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Had a friend who now lives in Spain stay with us in Tucson, which was quite nice. I was reminded of how great Mt.Lemon is even when most think its too hot to go outside in Tucson.&lt;/p&gt;
&lt;p&gt;Sat in on a med school class and listened to a friend&amp;rsquo;s mom, Dr. for 30 years, give a pep talk to a bunch of first year med students.&lt;/p&gt;
&lt;p&gt;Been calling old friends and talking on the phone. They are typically good conversations, most of them over-due, and always welcome. Not sure why I haven&amp;rsquo;t done this&amp;hellip; maybe its just out of mind as you never see this people in person.&lt;/p&gt;
&lt;p&gt;Gave a kirkland sports drink to a security guard, they actually make a decent sports drink&amp;hellip; I would drink it over gatorade.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>What I learned this week 08-24-2024</title>
      <link>/learnedt1w/2024/08_24_2024/</link>
      <pubDate>Sat, 24 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>/learnedt1w/2024/08_24_2024/</guid>
      <description>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;p&gt;I&amp;rsquo;ve decided to build a habit around recording interesting things I learn/refresh my memory on each week.&lt;/p&gt;
&lt;p&gt;I believe this will be a collection of random facts, statements, and quotes. I&amp;rsquo;ll attempt to organize them into broad categories, and add categories as the week goes on. I have no idea what does/does not make the cut of being included it will mostly be random, at least for now.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;what-i-learned-this-week&#34;&gt;What I learned this week&lt;/h1&gt;
&lt;p&gt;I&amp;rsquo;ve decided to build a habit around recording interesting things I learn/refresh my memory on each week.&lt;/p&gt;
&lt;p&gt;I believe this will be a collection of random facts, statements, and quotes. I&amp;rsquo;ll attempt to organize them into broad categories, and add categories as the week goes on. I have no idea what does/does not make the cut of being included it will mostly be random, at least for now.&lt;/p&gt;
&lt;p&gt;Initial strategy is to make a note of concepts as they come up and spend fewer then 60 minutes at the end of the week.&lt;/p&gt;
&lt;p&gt;I short reminder to myself: You do not care how this looks, this does not have to be comprehensive, and there should zero mental burden on what is added to this list.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“And now that you don&amp;rsquo;t have to be perfect, you can be good.”
― John Steinbeck, East of Eden&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://smithy.io/2.0/index.html&#34;&gt;Smithy&lt;/a&gt; is a language for defining services and SDKs. Basically set of tools for defining clients and/or servers for a particular service.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;curl --verbose --silent google.com&lt;/code&gt; Use curl to inspect HTTP exchange&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://site.mockito.org/&#34;&gt;Mockito&lt;/a&gt; is a popular Java mocking framework that is widely used in unit testing. The primary purpose of Mockito is to simplify the process of creating and managing mock objects, which are simulated objects that mimic the behavior of real objects in a controlled way.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re cloning a git repo that uses submodules you&amp;rsquo;ll need to:
&lt;code&gt;git submodule init&lt;/code&gt; &amp;amp; &lt;code&gt;git submodule update&lt;/code&gt; &amp;hellip; spent a bit longer than I&amp;rsquo;d like to admit figuring that out.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cloudflare.com/learning/security/glossary/what-is-bgp/&#34;&gt;Border Gateway Protocol&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://research.google/pubs/sql-has-problems-we-can-fix-them-pipe-syntax-in-sql/&#34;&gt;Pipe Syntax in SQL&lt;/a&gt; Google introduces an extension of SQL using pipes&lt;/p&gt;
&lt;h2 id=&#34;businessfinance&#34;&gt;Business/Finance&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://commoncog.com/cash-flow-games/&#34;&gt;Games people play with Cashflows&lt;/a&gt; - Interesting article on forming opinions, cash flows, and borrowing.&lt;/p&gt;
&lt;h2 id=&#34;interesting-links&#34;&gt;Interesting Links&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://zarar.dev/anatomy-of-a-mental-breakdown/&#34;&gt;Anatomy of a 2AM mental breakdown&lt;/a&gt; - Well written piece and good discussion on &lt;a href=&#34;https://news.ycombinator.com/item?id=41300368&#34;&gt;HN&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://writings.stephenwolfram.com/2024/08/whats-really-going-on-in-machine-learning-some-minimal-models/&#34;&gt;What’s Really Going On in Machine Learning? Some Minimal Models&lt;/a&gt; - Amazing visuals still reading through&lt;/p&gt;
&lt;h2 id=&#34;mathstats&#34;&gt;Math/Stats&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Multi-armed_bandit&#34;&gt;Multi Arm Bandit&lt;/a&gt; - Explore vs Exploit and minimize regret.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.moertel.com/posts/2024-08-23-sampling-with-sql.html&#34;&gt;Sampling with SQL&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Variance for a binomial distribution can be calculated as n * p(1-p), thus the variance of a coin flip over five trials is &lt;code&gt;5 * 0.5 (1 - 0.5) = 1.25&lt;/code&gt; the &lt;code&gt;SQRT of 1.25 = 1.118&lt;/code&gt;. We know the mean of 5 trials is&lt;code&gt; 0.5 * 5 = 2.5&lt;/code&gt;. With this information we can use a normal distribution to approximate a binomial distribution to get the probability of something occurring&amp;hellip; say &amp;lt;=4 out of 5 flips being heads. We get a z-score of &lt;code&gt;(4 - 2.5) / 1.118 = 1.34&lt;/code&gt;, and looking up 1.34 in a z table we see the area to the left of 1.34 constitutes ~91% a.k.a there&amp;rsquo;s approximately a &lt;code&gt;91% chance that &amp;lt;=4 out of 5 flips are heads&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;As noted above we can use a normal distribution to APPROXIMATE a binomial distribution, at lower numbers of trials (like we have here), this approximation rears its head. A simple way to solve this problem would be to find the inverse of the probability that all 5 trials would be heads as that is the only scenario not accounted by &amp;lt;= 4 heads. Thus, &lt;code&gt;1 - (0.5*0.5*0.5*0.5*0.5) = .9686&lt;/code&gt; which is the true probability of &amp;lt;=4 out of 5 flips are heads.&lt;/p&gt;
&lt;p&gt;The difference, ~91% vs ~97%, occurs as we are using a continuous probability distribution to approximate a discrete probability distribution. &lt;a href=&#34;https://library.virginia.edu/data/articles/continuity-corrections-imperfect-responses-to-slight-problems&#34;&gt;Continuity Corrections&lt;/a&gt; can be employed to reduce this.&lt;/p&gt;
&lt;p&gt;We can also calculate the Binomial probability: P(X=x), say of exactly 4 out of 5 flips being heads. &lt;code&gt;P{x} = {n \choose x} * p^{x} * q^{n-x}&lt;/code&gt;. Under the hood {n \choose x} is really just the number of combinations &lt;code&gt;n! / (n-x)!*x!&lt;/code&gt;. In our case this becomes 5! / (5-4)!*4! = 120/24 = 5 and then our second piece is just &lt;code&gt;.5^4 *.5^1 = .03125&lt;/code&gt; thus we get &lt;code&gt;5 * .03125 = .15625&lt;/code&gt; the chance of getting exactly 4 heads out of 5 flips.&lt;/p&gt;
&lt;h2 id=&#34;travel&#34;&gt;Travel&lt;/h2&gt;
&lt;p&gt;Encinitas, CA is very nice. The Comedy Store in LA is great, saw Andrew Santino, Bill Burr, Craig Robinson, David Spade, and Ron White. Be careful riding bikes on the PCH on Sat/Sun during the summer&amp;hellip; maybe choose a different route/time.&lt;/p&gt;
&lt;h2 id=&#34;other&#34;&gt;Other&lt;/h2&gt;
&lt;p&gt;Generally, it is required that police officers have a GED.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Glacier National Park</title>
      <link>/travel/glacier_national_park/</link>
      <pubDate>Tue, 16 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>/travel/glacier_national_park/</guid>
      <description>&lt;h1 id=&#34;travelstay&#34;&gt;Travel/Stay&lt;/h1&gt;
&lt;p&gt;Spent three days in Glacier National Park this summer, and it was one of my favorite visits.&lt;/p&gt;
&lt;p&gt;We flew into Kalispell and stayed in Columbia Falls. It was a great little town to stay in with a short 20 mintue drive to the park entrance.&lt;/p&gt;
&lt;p&gt;During peak season with the Going to The Sun Road open, its critical to get into the park early. We&amp;rsquo;d pack a cooler with snacks, cold water (it gets pretty hot during the day) and head out as early as possible (Trying to park before 6:30am).&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;travelstay&#34;&gt;Travel/Stay&lt;/h1&gt;
&lt;p&gt;Spent three days in Glacier National Park this summer, and it was one of my favorite visits.&lt;/p&gt;
&lt;p&gt;We flew into Kalispell and stayed in Columbia Falls. It was a great little town to stay in with a short 20 mintue drive to the park entrance.&lt;/p&gt;
&lt;p&gt;During peak season with the Going to The Sun Road open, its critical to get into the park early. We&amp;rsquo;d pack a cooler with snacks, cold water (it gets pretty hot during the day) and head out as early as possible (Trying to park before 6:30am).&lt;/p&gt;
&lt;p&gt;There are a few different &lt;a href=&#34;https://www.nps.gov/glac/planyourvisit/fees.htm&#34;&gt;fees&lt;/a&gt; you have to pay. I had paid these so long before our visit that the first day we drove in, I thought I hadn&amp;rsquo;t paid the West entrance fee only to drive back away from the entrance to get cell service and figure out I had bought it.&lt;/p&gt;
&lt;h1 id=&#34;hiking&#34;&gt;Hiking&lt;/h1&gt;
&lt;p&gt;In the middle of the Summer an early start is definitely the way to go. If you&amp;rsquo;re doing a longer hike that might take a good chunk of the day, starting early will give you lower temperatures and optimal parking.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Avalanche_Sun.jpg&#34; alt=&#34;Avalanche Sun&#34;&gt;&lt;/p&gt;
&lt;p&gt;We planned on doing smaller hikes but more of them, which gets a bit difficult as parking becomes scarce during the day. Our best day consisted of doing &lt;a href=&#34;https://www.alltrails.com/trail/us/montana/avalanche-lake--6&#34;&gt;Avalanche Lake&lt;/a&gt; early in the morning. If you&amp;rsquo;re doing the popular trails I would highly recommend starting early.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Avalanche_Lake.jpg&#34; alt=&#34;Avalanche Lake&#34;&gt;&lt;/p&gt;
&lt;p&gt;After this hike, we said screw it and decided to drive up to the Logan Pass visitor&amp;rsquo;s center (~10am) and fight it out for a parking spot. If we couldn&amp;rsquo;t get anything, we had some back-up less packed areas we wanted to check out and have lunch at.&lt;/p&gt;
&lt;p&gt;After about 15 minutes of jostling in the parking lot, we got a spot. I think the best strategy is to wait at the end of a row, there were a decent number of people leaving and if you kept circling the parking it became difficult to time it correctly and snag a spot.&lt;/p&gt;
&lt;p&gt;Establishing dominance in parking lot musical chairs allotted us the reward of doing the &lt;a href=&#34;https://www.alltrails.com/trail/us/montana/hidden-lake-overlook&#34;&gt;Hidden Lake Overlook Trail&lt;/a&gt;. The trail still had a bit of snow cover and there were tons of mountain goats. Hidden lake was &amp;ldquo;closed&amp;rdquo; due to too much bear activity, but the overlook was excellent (I would bring binoculars next time). It was hot, but not bad as we were at higher elevation.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Hidden_Lake.jpg&#34; alt=&#34;Hidden Lake&#34;&gt;&lt;/p&gt;
&lt;p&gt;You could spend a full summer here hiking, many of these trails are worth doing multiple times at different times of day. The glaciers in the park are slowly &lt;a href=&#34;https://www.nps.gov/glac/learn/nature/glaciersoverview.htm&#34;&gt;disappearing&lt;/a&gt;, so it was special to get to see them in their current state.&lt;/p&gt;
&lt;h1 id=&#34;flathead-river&#34;&gt;Flathead River&lt;/h1&gt;
&lt;p&gt;We did a rafting trip on the middle fork of the Flathead river which was fun although the water was quite cold. There as a lot of history and wild life along the river, although we didn&amp;rsquo;t see any bears.&lt;/p&gt;
&lt;p&gt;The river runs next to Columbia Falls. After a long day, Ally and I ambled down about a mile from where we were staying to the river. There was a cute little park next to the river with a decent sized community garden and open space with large trees. We slid down a small sandy embankment and picked up smooth river rocks out of the cool water. They had tons of color and unqiue patterns when wet. It was one of those days you already know is going to be a fond memory for the rest of your life.&lt;/p&gt;
&lt;h1 id=&#34;other-stuff&#34;&gt;Other stuff&lt;/h1&gt;
&lt;p&gt;You can buy bear spray pretty easily in the park. You can&amp;rsquo;t fly with it, so you kind of have to find some place around the park to buy it. If you&amp;rsquo;re driving, you can actually get two cans of the stuff from Costco for like $45, I paid ~$55 for a single one in the park. Since I couldn&amp;rsquo;t fly with it home, I spent another $10 to ship it. The kid working at the UPS store actually didn&amp;rsquo;t know if he could ship bear spray, but after calling his mom he said it was fine and took it (lol).&lt;/p&gt;
&lt;p&gt;Funny enough this trip actually occured during the &lt;a href=&#34;https://en.wikipedia.org/wiki/2024_CrowdStrike_incident&#34;&gt;CrowdStrike blue screen of death incident&lt;/a&gt;. As you might guess, bricking tons of computers running windows makes it hard for airlines to function. It actually worked out in our favor as we originally had some nasty connection from Kalispell -&amp;gt; Chicago -&amp;gt; Phoenix, AZ. We ended finding a direct flight from Kalispell -&amp;gt; Mesa, AZ and got home in a few hours. We checked our previous flights just for fun and with the delays it would&amp;rsquo;ve been a completely unneccesary 10 hour travel day.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Half Dome</title>
      <link>/travel/half_dome/</link>
      <pubDate>Wed, 10 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>/travel/half_dome/</guid>
      <description>&lt;h1 id=&#34;background&#34;&gt;Background&lt;/h1&gt;
&lt;hr&gt;
&lt;p&gt;Had the opportunity to hike half dome via the (John Muir Trail) JMT on July 10th, 2024. It was a fantastic hike and I wanted to record the experience and a few ways to approach the hike.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/half_dome_hike_map.png&#34; alt=&#34;Half Dome Hike&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Red = Mist trail&lt;/li&gt;
&lt;li&gt;Green = John Muir Trail&lt;/li&gt;
&lt;li&gt;Yellow Line = Ascent from Nevada Falls to Half Dome&lt;/li&gt;
&lt;li&gt;Blue line = Panorama Trail (Not hiked/referenced below)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We put in for the permit lottery when it opened up. Three of us submitted with dates spanning May – August, and only one of us landed a permit for four people to hike half dome on July 10th, 2024.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;background&#34;&gt;Background&lt;/h1&gt;
&lt;hr&gt;
&lt;p&gt;Had the opportunity to hike half dome via the (John Muir Trail) JMT on July 10th, 2024. It was a fantastic hike and I wanted to record the experience and a few ways to approach the hike.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/half_dome_hike_map.png&#34; alt=&#34;Half Dome Hike&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Red = Mist trail&lt;/li&gt;
&lt;li&gt;Green = John Muir Trail&lt;/li&gt;
&lt;li&gt;Yellow Line = Ascent from Nevada Falls to Half Dome&lt;/li&gt;
&lt;li&gt;Blue line = Panorama Trail (Not hiked/referenced below)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We put in for the permit lottery when it opened up. Three of us submitted with dates spanning May – August, and only one of us landed a permit for four people to hike half dome on July 10th, 2024.&lt;/p&gt;
&lt;p&gt;I booked a place in Groveland which is about an hour and twenty minute drive from the base of the trail (given no traffic). I’ve stayed in this town before, its pretty nice and has everything you’d need. It’ll depend on the person, but you could certainly stay closer to Yosemite… this will likely require planning far ahead.&lt;/p&gt;
&lt;p&gt;We flew into San Jose on the 8th and drove 3 hours to Groveland. &lt;code&gt;We made a pit-stop at REI on the way so that one of the guys hiking could buy hiking shoes lol.&lt;/code&gt; On the 9th, we hiked &lt;a href=&#34;https://www.yosemitehikes.com/glacier-point-road/sentinel-dome/sentinel-dome.htm&#34;&gt;Sentinel dome&lt;/a&gt;. It’s a short trail and provides great views of the whole valley, you can also see half dome and pretty much chart out the entire trail leading to the top. We did this on a Tuesday and things were busy but not realllllly busy. It was definitely a good amount of driving from Groveland which, compounded with the previous travel day, meant a lot of sitting. Going to the dome in the afternoon was a good reminder of how hot it can get, especially in the sun, even at higher elevations.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Sentinel.jpg&#34; alt=&#34;Sentinel Dome&#34;&gt;&lt;/p&gt;
&lt;p&gt;After driving to sentinel dome, we headed back to Groveland to cook dinner and get prepared for the hike the next day.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;The plan was to wake up at 3:30 AM the next morning, hit the road by 4:00, park by 5:20 and start hiking by 5:30.&lt;/code&gt; There were three of us hiking, I took 3.5 liters of water while the other two took 3 liters and 4 liters of water. I choose to wear trail running shoes (Saucony Peregrine 13), I’ve been using this shoe for a few years, and I like it. I usually pick up last years model on Amazon in some weird color-way for half the price of the new shoe. I had bought new hiking boots a month before this hike, but on a practice hike I got some blisters and ended up going with the trail runners instead as I’d never had issues with them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I packed roughly 2500 calories of food&lt;/li&gt;
&lt;li&gt;I did not bring hiking poles&lt;/li&gt;
&lt;li&gt;I wore some breathable hiking pants with long socks&lt;/li&gt;
&lt;li&gt;I wore a light/breathable t-shirt&lt;/li&gt;
&lt;li&gt;I brought a bag of Kleenex, a portable charger, a head lamp, a water filtration kit&lt;/li&gt;
&lt;li&gt;I brought some cheap glovesfor the cables!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I used a 2.5 liter bladder which I filled to the brim. I then used two 500 ml bottles which I stuffed into the sides of my pack. The 2.5 liter bladder was nothing but water; however, in the bottles I added ~1200mg of sodium via sodium citrate, 120 calories worth of white table sugar, and a Nuun tablet for a bit of flavor. I am not a hydration expert and I probably was not perfect with my hydration on this hike, but &lt;code&gt;I subscribe to what Dr. Alex Harrison has said&lt;/code&gt; on the topic (a quick google search and you’ll get all the info you need).&lt;/p&gt;
&lt;p&gt;Total pack weight was ~11-12lbs, I felt confidant with this set up. I&amp;rsquo;ll speak about it later. Overall, I was happy with it.&lt;/p&gt;
&lt;p&gt;For training, I spent a week hiking and biking at &amp;gt; 8000ft elevation in Greer, AZ directly before the hike. In the months leading up to the hike I averaged 15-25 miles hiking per week, 3-4 hours biking per week, 5-10 miles running, basic full body gym routine 2x per week, and ~12,000 steps per day on average. The longest hike I did before half dome was 10 miles with 1500 feet of elevation gain at high elevation (~9000 feet). In general, I was just keeping a decent level of fitness.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/strava.png&#34; alt=&#34;Strava&#34;&gt;&lt;/p&gt;
&lt;p&gt;I had been continuously battling a strained hamstring, which I initially strained in March 2024 while doing a dumbbell stiff leg deadlift. I was unable to walk without pain for a several weeks and couldn’t work out legs in the gym. The strain got better, and I was nearly back to normal when I reinjured it again in early May. It felt great the weeks leading in to the hike. I was fairly confidant but was still a little nervous given the several weeks of inactivity and reinjury leading up to the hike.&lt;/p&gt;
&lt;p&gt;We watched the first half of the Eiger Sanction (great Clint Eastwood movie), before getting to bed around 9:30 PM. I was a little nervous for the cables and for my hamstring, but overall I felt prepared and figured worst case I can always just turn around.&lt;/p&gt;
&lt;h1 id=&#34;hiking&#34;&gt;Hiking&lt;/h1&gt;
&lt;hr&gt;
&lt;p&gt;We woke up at 3:30 AM the next morning. My lower back was entirely frozen, it hurt to sit down and I couldn’t really bend over. I remember noticing there were some ants that had wondered into our AirBnB&amp;rsquo;s kitchen, when I bent down to look at them I &lt;code&gt;immediately seized up&lt;/code&gt;. I think it was due to all the sitting and travelling I had done over the previous few days as well as sleeping in a new bed. There was certainly some bad luck thrown into the mix as well. The good thing was that I had no issue when I was standing up, it was only sitting down. I took an Advil and figured if I felt bad on the trail I’d just turn around.&lt;/p&gt;
&lt;p&gt;We hit the road by 4:15 AM. There was no traffic that early, and we parked about a half mile from the trail head at 5:30. After getting our packs on, walking to the trail head, and taking a photo we began hiking at 6:00 AM.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/dome_begin.JPG&#34; alt=&#34;Begin Dome&#34;&gt;&lt;/p&gt;
&lt;p&gt;The first ~ 5 miles of the JMT to Nevada falls took us about 2.5 hours, it’s a steady climb with many switch backs all the way up. I was able to eat a few hundred calories and steadily kept sipping water. We only stopped for a few minutes at the falls to put on sunscreen before continuing. I took another Advil at this time and a caffeine pill. It was about here where I knew I would be fine, &lt;code&gt;I just couldn’t sit down hahaha&lt;/code&gt;, so I’d need to pretty much be standing or walking for the next nine hours.&lt;/p&gt;
&lt;p&gt;After the falls, the trail flattens out for a few miles, it gets a little sandy but we chugged through it, everyone still chatting and having a good time. As we began to wrap around the back side of Half dome the final two miles begins to get steep again, luckily it was still cool and shaded. The time at elevation really began to pay dividends here and for the rest of the hike, I had no issues. We stopped a few times to rest at this section before finally getting up to the base of the sub dome.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/base_of_sub_dome.JPG&#34; alt=&#34;base of Sub Dome&#34;&gt;&lt;/p&gt;
&lt;p&gt;From the base of the sub-dome to the top of half dome couldn’t be more than a ¾ of a mile, but you gain ~1000 feet of elevation all the way up to 8800 feet. Ascending the sub dome is essentially just a bunch of stairs with a bit of steep scramble to get all the way to the top. Once you crest the sub dome all that’s left is the cables. Below is a photo of the scrambling section of the sub dome.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/up_to_sub_dome.jpg&#34; alt=&#34;Up to Sub Dome&#34;&gt;&lt;/p&gt;
&lt;p&gt;There were gloves at the base of the cables but I was happy to have brought my own. They gripped the cables well, which was quite important as the rock of half dome is actually quite slick. When I got the top of the sub dome, I really didn’t want to even think and wait, I mainly just wanted to get it done. I shot up the cables quickly, we were going up at &lt;code&gt;10:00 AM on a Wednesday&lt;/code&gt; so it really wasn’t very busy. With both hands on the cables its quite easy to pull yourself up while finding a solid place to put your shoes and step up. There are wooden boards and areas where the rock juts out a bit for resting. There are a few very steep sections, but if you just focus on holding on and resting when needed its not that bad. I did the full cable section in what I think was &amp;lt; 10 minutes, but I didn’t time it nor was I really paying any attention to that.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/cables.jpg&#34; alt=&#34;Cables&#34;&gt;&lt;/p&gt;
&lt;p&gt;Once we had all made it up, we walked around to both sides of the dome, took some photos and had a bite to eat. I was still a little nervous about going down, so I didn’t have much of a stomach to eat very much. After 4 hours of hiking to get to the top, I had probably only eaten 600 calories and drank about 2 liters of water. I had a good bit of adrenaline at this point and wasn’t really hungry at all. This was also the point &lt;code&gt;where one of the guys I was hiking with turned to us and said he had no water left…&lt;/code&gt; this was bad because we were about 4 miles away from water I could filter and 7 miles away from a true source of drinking water. It was also probably going to take ~4 hours to descend so we’d be hiking down from 11:00 AM to 03:00 PM when it would be &lt;strong&gt;hot&lt;/strong&gt;. This revelation made me even more nervous about getting down so after we took our last photos I started down the cables.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/top_dome.jpg&#34; alt=&#34;Cables&#34;&gt;&lt;/p&gt;
&lt;p&gt;I was nervous for the descent but, again, it wasn’t bad. &lt;code&gt;Two hands on the cables at all times, face the dome, don’t look out if you’re afraid of heights and rest on the boards if you need to.&lt;/code&gt; If someone needs to pass or you need to pass someone, coordinate so one person has a good place to rest comfortably and then grip one side of the cables with both hands and go around. Everyone was very nice and courteous, and most people were fine&amp;hellip; a few were quite nervous. The biggest thing I could take away from this would be to avoid the crowds on the cables at all costs, it would have sucked if it was just straight lines of people all the way up with slow/nervous people causing problems. I also would never even think about going up if there was any inkling that it would rain or had just rained. The rock is extremely slick from so many people climbing it, if you have good upper body strength it’d probably not be a problem but it’d be a serious additional risk.&lt;/p&gt;
&lt;p&gt;With three of us off the cables and on the sub-dome by ~11:30 AM, it became very apparent that it was going to be really hot, and we needed to get back to water before we all ran out with three people sharing the water of two people.&lt;/p&gt;
&lt;p&gt;We pretty much had no reason to stop on the way down, about one mile out from Nevada falls the other guy I was with ran out of water and at that point I only had about a half a liter. When we got to Nevada Falls around 1:30 PM, we used my water filter to get a bit of water. It was quite slow and we filtered enough water for everyone to have a few drinks with the understanding we were just going to smash it down to water fountain that was approximately an hour away.&lt;/p&gt;
&lt;p&gt;After sharing my water, &lt;code&gt;I eventually ran out about 20 minutes away from drinking water.&lt;/code&gt; At this point we were booking it down the switchbacks of the John Muir Trail (We never used the mist trail, we took the JMT both ways). We got to drinking water and filled up our bottles with about 30 minutes of the hike remaining. At this time of day there are &lt;code&gt;MANY&lt;/code&gt; poorly equipped day hikers on the lower parts of the trail.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Large groups, people arguing, people hiking in flip flops, people hiking with no water.
They have no concept of hiking etiquette, its hot, and we had to weave through this
unruly crowd with 16 miles in our legs.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We finished the hike around 3:00 PM; my girlfriend picked us up and had cold water and ice cream in the car for us, which was exactly what we needed. &lt;code&gt;Total distance hiked was 19 miles, 5500 feet of elevation gain, a total hike time of 7 hours and 30 minutes, and a total time out on the trail of 9 hours.&lt;/code&gt;&lt;/p&gt;
&lt;h1 id=&#34;takeaways&#34;&gt;Takeaways&lt;/h1&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;I’d make sure to do this hike with people of adequate preparedness and fitness.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I would probably bring 4 to 4.5 liters of water, I probably would have been fine with three, but in reality I really should have been drinking more than I did.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I would try to eat a bit more and take in more sodium. I only ate ~1500 calories and was sweating profusely for the last 3 hours of the hike.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;My calves were a bit sore the next day, but otherwise I was fine. Seemed as though the training a did was plenty, as I felt good during the hike as well.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I would consider doing the hike over-night and watching the sunrise on Half Dome, also breaking the hike up and camping (given the proper planning) would be a good idea. I don’t mind the way we did it, but I would like to take every opportunity to limit my exposure to heat and large crowds.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I would bring a water filter again just in case… some people were drinking the water directly from Merced River. I think this is highly stupid and a good way to give yourself the runs. The filter is light weight and will save you from butt pee.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I would freeze some water and keep it in your car or a cooler to have on the way back, something cold was nice.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I might take the mist trail on the way up and then the JMT on the way down. The mist trail offers a nice little mist from the falls, is more direct, and would still be a bit shaded in the morning despite not having a ton of tree cover. The JMT would be easier on the way down especially with tired legs and would offer more shade.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Trail running shoes or hiking boots would both have been fine.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cables were not a big deal as long as its not busy. If you&amp;rsquo;re afraid of heights, just face the rock in front of you.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It is CRITICAL to take in salt, sugar, and a lot of water&amp;hellip; also, probably try and eat ~200 calories an hour.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It was an excellent trip that I’d definitely do again.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>[6 / 4 ~~= 1~~ = 1.5]: Type Coercion and Precision in SQL</title>
      <link>/posts/sql_types/</link>
      <pubDate>Sat, 06 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>/posts/sql_types/</guid>
      <description>&lt;h1 id=&#34;an-overview-of-whats-to-come&#34;&gt;An overview of what&amp;rsquo;s to come:&lt;/h1&gt;
&lt;p&gt;I was originally writing this as a high-level introduction to send people when they encounter things like &lt;code&gt;6/4&lt;/code&gt; returning &lt;code&gt;1&lt;/code&gt; instead of &lt;code&gt;1.5&lt;/code&gt; in some Database Management Systems (DBMS)&amp;hellip; overtime its sprawled far beyond that. The points below serve as a TLDR, with a sprawling discussion expanding afterward.&lt;/p&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Operations like division in SQL can be confusing for novices or anyone without a programming background&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;an-overview-of-whats-to-come&#34;&gt;An overview of what&amp;rsquo;s to come:&lt;/h1&gt;
&lt;p&gt;I was originally writing this as a high-level introduction to send people when they encounter things like &lt;code&gt;6/4&lt;/code&gt; returning &lt;code&gt;1&lt;/code&gt; instead of &lt;code&gt;1.5&lt;/code&gt; in some Database Management Systems (DBMS)&amp;hellip; overtime its sprawled far beyond that. The points below serve as a TLDR, with a sprawling discussion expanding afterward.&lt;/p&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Operations like division in SQL can be confusing for novices or anyone without a programming background&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In some DBMS, 6/4 may equal 1 because, dividing two integers a.k.a. &lt;a href=&#34;https://mathworld.wolfram.com/IntegerDivision.html&#34;&gt;integer division&lt;/a&gt; returns an integer (the remainder is discarded)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; Casting one of the operands as a float or numeric/decimal will ensure floating point
 division. Be careful with the precision needed in your calculation as there are
 tradeoffs to using certain types.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Syntax and behavior will be &lt;code&gt;different&lt;/code&gt; for various DBMS, but if you want 6 / 4 to equal 1.5 and not 1 then you can use something like:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PostgreSQL:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;::FLOAT &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- Type casting using &amp;#34;::&amp;#34; operator
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;::FLOAT &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- Casting the divisor
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;CAST&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- Using the CAST function
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;MySQL:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- MySQL automatically performs type conversion
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;CAST&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; DECIMAL(&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- Explicit CAST to DECIMAL
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;CONVERT&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, DECIMAL(&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- Using the CONVERT function
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SQLServer:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- Implicit conversion using decimal point
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;CAST&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; FLOAT) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- Explicit CAST to FLOAT
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;CONVERT&lt;/span&gt;(FLOAT, &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- Using the CONVERT function
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Oracle:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; DUAL &lt;span style=&#34;color:#75715e&#34;&gt;-- Automatic type conversion
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; TO_NUMBER(&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; DUAL &lt;span style=&#34;color:#75715e&#34;&gt;-- Using the TO_NUMBER function
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;d &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; DUAL &lt;span style=&#34;color:#75715e&#34;&gt;-- Explicit type declaration
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SQLite:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;CAST&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; REAL) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- CAST to REAL
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- Implicit conversion using decimal point
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; ROUND(&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;result&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- Throwing ROUND in there
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Methods may have trade-offs in terms of precision, performance, and portability.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- The choice depends on your specific requirements and the DBMS you&amp;#39;re using.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is NOT an exhaustive list of solutions/syntax for all DBMS as &lt;a href=&#34;https://en.wikipedia.org/wiki/List_of_relational_database_management_systems&#34;&gt;there are many DBMS&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The idea here is that if you desire a specific output, explicitly casting an operand(s) is the safe bet. If you are the data producer, understanding the consumption patterns and applying the correct type will be critical for your consumers downstream&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It&amp;rsquo;s crucial to understand the database management system (DBMS) and environment you&amp;rsquo;re working in before curating datasets, creating models, or exporting data for reporting&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;I think that&amp;rsquo;s a fair synopsis of what I&amp;rsquo;ve written below. If you&amp;rsquo;re interested, I&amp;rsquo;ll continue to cover division across a variety of DBMS, the behavior of data types/operations in SQL, Hotdogs, Docker, rug pulls and &lt;a href=&#34;https://www.youtube.com/shorts/lsFplEkBZkE&#34;&gt;BIG DOGS!&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;observations-about-sql-writers&#34;&gt;Observations about SQL Writers&lt;/h1&gt;
&lt;p&gt;Division is a frequent source of logical and syntactical mistakes for novice SQL users. SQL has some round edges for non-technical users like &lt;a href=&#34;https://discourse.julialang.org/t/whats-the-big-deal-0-vs-1-based-indexing/1102/4&#34;&gt;1 based indexing&lt;/a&gt;. 1 based indexing is the SQL standard, and its more straight forward for people who would typically begin counting at 1 and have no familiarity with 0 based indexing found in languages like Python, Java, or C.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Division is more of a sharp edge.&lt;/strong&gt; Not because it’s difficult to do division, but when you take someone who has always done &lt;code&gt;=6/4&lt;/code&gt; in Excel and received a result of &lt;code&gt;1.5&lt;/code&gt; and now you show them that it evaluates to &lt;code&gt;1&lt;/code&gt; when they write SQL against a database&amp;hellip; they don’t anticipate that, nor would they have thought to check for it!&lt;/p&gt;
&lt;h1 id=&#34;some-typing-and-coercion-background&#34;&gt;Some Typing and Coercion Background&lt;/h1&gt;
&lt;p&gt;Many users of SQL coming from a “business” background will have encountered different data types in Excel, but they will likely not have given any thought to Static vs Dynamically typed programming languages. I&amp;rsquo;m now going to &lt;del&gt;play with fire&lt;/del&gt; lay out some definitions to provide some context to the previous sentence that are debatable, but I believe they provide a good mental model for SQL.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;SQL is typically considered to be &lt;a href=&#34;https://stackoverflow.com/questions/1517582/what-is-the-difference-between-statically-typed-and-dynamically-typed-languages&#34;&gt;Statically typed&lt;/a&gt;, meaning:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Every data item has an associated data type defined at compile-time&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SQL does have predefined data types for columns in table definitions, which are determined at &amp;ldquo;compile-time&amp;rdquo; (more accurately, at table creation time). However, there are dynamic aspects&amp;hellip; SQL allows for implicit type conversions in many operations, and the actual type checking often occurs at runtime.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;SQL is also most properly defined as &lt;a href=&#34;https://en.wikipedia.org/wiki/Strong_and_weak_typing&#34;&gt;Strongly Typed&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Every data item has an associated data type, defining its behavior and allowed usage&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SQL uses a mix of static and dynamic typing. Data types are associated with column definitions at table creation time, but many type-related decisions and checks occur at runtime. SQL&amp;rsquo;s type system allows for implicit conversions and exhibits some characteristics of both strong and weak typing, with the specific behavior often depending on the particular SQL implementation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Great, so when I think of SQL I&amp;rsquo;ll think Strong and Static, thanks! Well&amp;hellip; no,&lt;/strong&gt; like I mentioned, this behavior depends on the DBMS. &lt;a href=&#34;https://www.sqlite.org/datatype3.html&#34;&gt;SQLite&lt;/a&gt; uses a more general dynamic type system where the datatype of a value is associated with the value itself, not with the column it sits in. This behavior can be modified with the &amp;ldquo;&lt;a href=&#34;https://www.sqlite.org/stricttables.html&#34;&gt;STRICT&lt;/a&gt;&amp;rdquo; table option keyword.&lt;/p&gt;
&lt;p&gt;An in-depth image for visual learners (I&amp;rsquo;m an aspiring artist):
&lt;img src=&#34;/images/SQLite_to_Postgres.png&#34; alt=&#34;DBMS_DIVISION&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ok&amp;hellip; that&amp;rsquo;s cool, but in SQL what happens when I divide an &lt;a href=&#34;https://en.wikipedia.org/wiki/Integer_%28computer_science%29&#34;&gt;integer&lt;/a&gt; by a &lt;a href=&#34;https://computersciencewiki.org/index.php/Float&#34;&gt;float&lt;/a&gt; or what if I evaluate an integer and a &lt;a href=&#34;https://computersciencewiki.org/index.php?title=String&#34;&gt;string&lt;/a&gt; for equality? In a more general sense we are asking: How do DBMS handle &lt;a href=&#34;https://www.postgresql.org/docs/7.3/typeconv.html&#34;&gt;type coercion&lt;/a&gt;?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Type Coercion&lt;/strong&gt;: is an implicit process where the language runtime automatically converts a value from one type to another. This is done to make operations between different data types possible without explicit instructions from the programmer.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Type Conversion&lt;/strong&gt;: is an explicit process where the programmer manually converts a value from one type to another using specific functions or methods. This requires a deliberate action and is often clearer in terms of code readability and intent.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You’ll see that DBMS have extensive &lt;a href=&#34;https://www.postgresql.org/docs/7.3/typeconv.html&#34;&gt;facilities&lt;/a&gt; for evaluating mixed-type expressions. I’m adding the Postgres docs here because they are good, but there are other docs for other DBMS.&lt;/p&gt;
&lt;h1 id=&#34;why-should-i-care-and-how-about-a-few-examples&#34;&gt;Why should I care, and how about a few examples?&lt;/h1&gt;
&lt;p&gt;To make this implicit conversion explicitly clear, lets directly compare two values that are explicitly cast as different types:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SELECT CAST(5 AS INT) = CAST(&#39;5&#39; AS VARCHAR(10))&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Postgres: ERROR: operator does not exist: integer = character&lt;/li&gt;
&lt;li&gt;SQLite: 1&lt;/li&gt;
&lt;li&gt;Redshift: true&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some programming languages are quite strict when doing comparisons or operations on multiple types. Here is an example in &lt;a href=&#34;https://www.rust-lang.org/&#34;&gt;Rust&lt;/a&gt; where someone has &lt;a href=&#34;https://stackoverflow.com/questions/39677410/why-do-i-get-an-error-when-adding-an-integer-to-a-floating-point&#34;&gt;attempted&lt;/a&gt; to add an integer and a float and received an error.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-RUST&#34; data-lang=&#34;RUST&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;fn&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; float &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5.0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; integer &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; result &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; float &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; integer;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;println!&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Result: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;, result);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//error[E0277]: cannot add an integer to a float
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//     let result = float + integer;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//                          ^ no implementation for `{float} + {integer}`
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;Executing &lt;code&gt;SELECT 5.0 + 4&lt;/code&gt; or even &lt;code&gt;SELECT &#39;5&#39; + 4&lt;/code&gt; in most (maybe all?) DBMS returns 9.&lt;/li&gt;
&lt;li&gt;So then what about &lt;code&gt;SELECT CAST(5 AS INT) + CAST(&#39;4&#39; AS VARCHAR(10))&lt;/code&gt;? This still returns 9 in some DBMS but NOT in Postgres:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In Postgres, an undecorated string literal (e.g., &amp;lsquo;4&amp;rsquo;) without an explicit type is treated as an &lt;strong&gt;unknown&lt;/strong&gt; type. This is actually one of a few &lt;a href=&#34;https://www.postgresql.org/docs/current/datatype-pseudo.html&#34;&gt;Pseudo-Types&lt;/a&gt; that allows Postgres to delay type resolution until more context is available. Here is a nice &lt;a href=&#34;https://www.postgresql.org/message-id/183.1302200970%40sss.pgh.pa.us&#34;&gt;response&lt;/a&gt; from &lt;a href=&#34;https://en.wikipedia.org/wiki/Tom_Lane_%28computer_scientist%29&#34;&gt;Tom Lane&lt;/a&gt; posted 13 years ago.&lt;/p&gt;
&lt;p&gt;Using &lt;a href=&#34;https://www.postgresql.org/docs/9.3/functions-info.html&#34;&gt;pg_typeof&lt;/a&gt; we can see that &lt;code&gt;SELECT pg_typeof(CAST(&#39;4&#39; AS VARCHAR(10)));&lt;/code&gt; returns &lt;code&gt;character varying&lt;/code&gt; while &lt;code&gt;SELECT pg_typeof(&#39;4&#39;);&lt;/code&gt; returns unknown. Due to the specific casting of &amp;lsquo;4&amp;rsquo;, the second example errors (&lt;strong&gt;integer + character varying&lt;/strong&gt;) while &lt;code&gt;SELECT &#39;5&#39; + 4&lt;/code&gt; evaluates an &lt;strong&gt;unknown + integer&lt;/strong&gt; which Postgres implicitly coerces to an integer result of 9.&lt;/p&gt;
&lt;p&gt;However, this is where you need to be careful. For instance, Redshift is a fork of Postgres, but&amp;hellip; guess what:
&lt;code&gt;SELECT CAST(5 AS INT) + CAST(&#39;4&#39; AS VARCHAR(10))&lt;/code&gt; returns &amp;lsquo;54&amp;rsquo;. A few other interesting anecdotes from Redshift:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;----------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Updates
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;----------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; TEMP &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; SOME_TUPLES (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    MY_NUMBER INT,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    MY_WORD VARCHAR(&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;INTO&lt;/span&gt; SOME_TUPLES(MY_NUMBER, MY_WORD) &lt;span style=&#34;color:#66d9ef&#34;&gt;VALUES&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Hello&amp;#39;&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Howdy&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Redshift has no problem updating the VARCHAR(100) MY_WORD column with a value I explicitly cast as an INT
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;UPDATE&lt;/span&gt; SOME_TUPLES &lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; MY_WORD &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;::INT
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; MY_NUMBER &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- How about a decimal instead? No problem
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;UPDATE&lt;/span&gt; SOME_TUPLES &lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; MY_WORD &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;::DECIMAL(&lt;span style=&#34;color:#ae81ff&#34;&gt;38&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; MY_NUMBER &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;----------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- What about AVG()?
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- I see a lot of people use AVG in SQL that actually don&amp;#39;t want the arithmetic mean
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;----------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WITH&lt;/span&gt; CHECK123 &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; NUM
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; NUM
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;UNION&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; NUM
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AVG&lt;/span&gt;(NUM) &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; CHECK123 &lt;span style=&#34;color:#75715e&#34;&gt;-- Results in 3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;----------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Oh, Also
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;----------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Returns 2 in Postgres/Redshift
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Returns 1 in SQL Server
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;CAST&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;99&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; INTEGER)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;ooooook-so-can-we-go-back-to-division-now&#34;&gt;Ooooook so can we go back to Division now?&lt;/h1&gt;
&lt;p&gt;In some DBMS, &lt;code&gt;SELECT 6 / 4&lt;/code&gt;; would result in &lt;strong&gt;1&lt;/strong&gt; due to integer division, other DBMS will still return &lt;strong&gt;1.5&lt;/strong&gt; even after being passed two &amp;ldquo;integers&amp;rdquo; to operate on.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Integer division is the division of two integers resulting in another integer. It discards the fractional part of the division and returns only the whole number quotient&lt;/li&gt;
&lt;li&gt;In Python &lt;code&gt;print(6/4)&lt;/code&gt; returns 1.5 (round edge); however, &lt;code&gt;print(6//4)&lt;/code&gt; would return 1, discarding the remainder. We’ll see later on that DuckDB has similar syntax!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However, &lt;code&gt;SELECT 6.0 / 4&lt;/code&gt;; or &lt;code&gt;SELECT CAST(6 AS FLOAT) / 4&lt;/code&gt;; would result in &lt;strong&gt;1.5&lt;/strong&gt; as the DBMS performs implicit type coercion and returns the result to the client as a float.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Floating-point division is an operation involving at least one floating-point number that results in a floating-point (decimal) number. Floating-point division is used when precision is important, and the fractional part of the result is significant.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;/images/DBMS_DIV.png&#34; alt=&#34;DBMS_DIVISION&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Different DBMS have different defaults for this coercion behavior. Sometimes its: &amp;ldquo;Hey Big Dog looks like you gave me two integers two divide, I&amp;rsquo;m going to assume that the remainder is important to you and not return an integer&amp;rdquo; OR &amp;ldquo;Big DOG! You just served me up two integers and guess what&amp;hellip; you are getting an integer back!&amp;rdquo;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;SQL Standard is for the DBMS to refer to their users as &lt;a href=&#34;https://www.youtube.com/shorts/lsFplEkBZkE&#34;&gt;Big Dog&lt;/a&gt;, just like Tiger.&lt;/p&gt;
&lt;p&gt;I’m only talking about type coercion, but keep in mind that there are A LOT of DBMS and they do A LOT of things &lt;a href=&#34;https://aws.amazon.com/compare/the-difference-between-mysql-vs-postgresql/#:~:text=MySQL%20has%20limited%20support%20of,stored%20procedures%20in%20multiple%20languages.&amp;amp;text=MySQL%20supports%20numeric%2C%20character%2C%20date,spatial%2C%20and%20JSON%20data%20types&#34;&gt;differently&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    Quick side note, in DuckDB there are two division operators: / and //.
    They are equivalent when at least one of the operands is a FLOAT or a DOUBLE.
    When both operands are integers, / performs floating point division (5 / 2 = 2.5)
    while // performs integer division (5 // 2 = 2).
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On top of this, admin can make &lt;a href=&#34;https://dev.mysql.com/doc/refman/8.4/en/sql-mode.html&#34;&gt;configuration changes&lt;/a&gt; to the DBMS you’re using, possibly making its behavior different than what I describe here! &lt;strong&gt;Developing a sound understanding of the environment you plan to write queries in before you or some text to SQL engine starts spinning off queries is important!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you’d like to compare for yourself, &lt;a href=&#34;https://sqlfiddle.com/&#34;&gt;SQL Fiddle&lt;/a&gt; is a nice online SQL compiler. You can also use &lt;a href=&#34;https://docs.docker.com/get-docker/&#34;&gt;docker&lt;/a&gt;. With docker installed, you can pull the official &lt;a href=&#34;https://hub.docker.com/_/mysql&#34;&gt;MySQL image&lt;/a&gt; and try for yourself:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-BASH&#34; data-lang=&#34;BASH&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Start a new MySQL container named &amp;#39;testsql&amp;#39; with the root password set&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# The -d flag runs the container in detached mode (in the background)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ docker run --name testsql -e MYSQL_ROOT_PASSWORD&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;ilovemysql -d mysql:latest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# List all running Docker containers&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# This should show the &amp;#39;testsql&amp;#39; container we just started&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ docker ps
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Start an interactive bash shell inside the running &amp;#39;testsql&amp;#39; container&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# The -it flags allow for an interactive terminal session&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ docker exec -it testsql bash
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Inside the container, start the MySQL client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# The -u flag specifies the user (root in this case)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# The -p flag prompts for the password we set earlier&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ mysql -u root -p
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Now we&amp;#39;re in the MySQL prompt. We can run SQL commands here, for example:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SHOW DATABASES;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SELECT 6/4;  &lt;span style=&#34;color:#75715e&#34;&gt;# This will return 1.5000 in MySQL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# To exit the MySQL client&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;EXIT;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# To exit the container&amp;#39;s bash shell&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ exit
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Stop the &amp;#39;testsql&amp;#39; container&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ docker stop testsql
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# List running containers again to verify &amp;#39;testsql&amp;#39; has stopped&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ docker ps
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# List all containers, including stopped ones&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# This will still show &amp;#39;testsql&amp;#39;, but in a stopped state&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ docker ps -a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;in-practice&#34;&gt;In Practice&lt;/h1&gt;
&lt;p&gt;In my day job, 99% of the time people want floating point division, and I will advise them to explicitly cast one of the operands. For example in Redshift I would write: SELECT 6/4::FLOAT.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A good question might be: “Why bother casting if one or both of my columns is already a Decimal/Float, isn’t it irrelevant?”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In current state you would be 100% correct, but are you 100% sure nobody will alter the table and change that one column that was a Decimal to an INT…&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Hey remember that old column we created as a Decimal type, we only write integer values between +/- 100000. We can save some space by storing it as an integer… nobody will have any problem with that! Sounds good: &lt;code&gt;ALTER TABLE TBLONE ALTER COLUMN COLUMNONE TYPE INTEGER USING (NULLIF(COLUMNONE, ‘’)::INTEGER);&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hey that table we produce yeah we are actually deleting that column you use, but its ok because you can recalculate it using a JOIN on this other table to bring in another column… make sure it doesn’t break your transform… thanks!
&lt;code&gt;(We sent the email about the migration 3 months ago but must have missed you.. haha sorry lol… well we are making the change on Friday, thanks so much!)&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I typically prefer writing defensive SQL and checking what I’m being defensive against rather than having the data producer &lt;a href=&#34;https://rekt.news/swaprum-rekt/&#34;&gt;pull the rug&lt;/a&gt; on me. Which is why I prefer to be the data producer, and why I prefer not to buy Meme Coins.&lt;/p&gt;
&lt;p&gt;I’ll leave a final furthering thought for anyone interested. I’ve gone ahead and stolen this little exercise from the &lt;a href=&#34;https://dev.mysql.com/doc/refman/8.4/en/precision-math-examples.html&#34;&gt;MySQL docs&lt;/a&gt; and re-written it for Redshift (should work identically in Postgres as well)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Three variables: i (an integer), d (a decimal with 10 digits total and 4 digits after the decimal point), and f (a floating point).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- The WHILE loop runs 10,000 times, incrementing both d and f by 0.0001
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- After the loop, RAISE INFO prints the values of d and f.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;OR&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;REPLACE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;PROCEDURE&lt;/span&gt; test_precision()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;LANGUAGE&lt;/span&gt; plpgsql
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;DECLARE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    i INT :&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    d DECIMAL(&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;) :&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    f FLOAT :&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;BEGIN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    WHILE i &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10000&lt;/span&gt; LOOP
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        d :&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; d &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;0001&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        f :&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; f &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;0001&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        i :&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;END&lt;/span&gt; LOOP;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    RAISE INFO &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;DECIMAL result: %, FLOAT result: %&amp;#39;&lt;/span&gt;, d, f;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;END&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$$&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Call the stored procedure
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CALL&lt;/span&gt; test_precision();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here&amp;rsquo;s a &lt;a href=&#34;https://en.wikipedia.org/wiki/IEEE_754&#34;&gt;hint&lt;/a&gt; if you&amp;rsquo;re curious about the output, or you can just smash this stored procedure into ChatGPT and it’ll rattle off a coherent answer &lt;a href=&#34;https://www.youtube.com/watch?v=b7k0a5hYnSI&#34;&gt;the choice is yours&lt;/a&gt;.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>NY Times Connections Solver PT. 1</title>
      <link>/projects/connections/</link>
      <pubDate>Sun, 16 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>/projects/connections/</guid>
      <description>&lt;h1 id=&#34;olive-oil&#34;&gt;Olive Oil:&lt;/h1&gt;
&lt;p&gt;During my daily morning ritual of waking up at 4:30 AM and &lt;code&gt;immediately ingesting&lt;/code&gt; a ½ cup of [Trader Joes Extra Virgin Spanish Olive Oil] (Sponsored link), I decided I’d like to try and solve the &lt;a href=&#34;https://www.nytimes.com/games/connections&#34;&gt;NY Time’s Connections&lt;/a&gt;. So, with greasy fingers, lets begin.&lt;/p&gt;
&lt;p&gt;This is part one, where I:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Review the rules of Connections&lt;/li&gt;
&lt;li&gt;Gather historical Connections games into a structured dataset&lt;/li&gt;
&lt;li&gt;Come up with some strategy for a program that’s somewhat capable of playing the game well&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In part two, I’ll try and generate a solver for the game. I am not an expert on NLP, nor do I know much about word embeddings, nor do I know much about word embeddings given context, but I’m quite curious to learn. Here in part one, I’m going to nail out something semi-interesting and treat part two as a learning experience.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;olive-oil&#34;&gt;Olive Oil:&lt;/h1&gt;
&lt;p&gt;During my daily morning ritual of waking up at 4:30 AM and &lt;code&gt;immediately ingesting&lt;/code&gt; a ½ cup of [Trader Joes Extra Virgin Spanish Olive Oil] (Sponsored link), I decided I’d like to try and solve the &lt;a href=&#34;https://www.nytimes.com/games/connections&#34;&gt;NY Time’s Connections&lt;/a&gt;. So, with greasy fingers, lets begin.&lt;/p&gt;
&lt;p&gt;This is part one, where I:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Review the rules of Connections&lt;/li&gt;
&lt;li&gt;Gather historical Connections games into a structured dataset&lt;/li&gt;
&lt;li&gt;Come up with some strategy for a program that’s somewhat capable of playing the game well&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In part two, I’ll try and generate a solver for the game. I am not an expert on NLP, nor do I know much about word embeddings, nor do I know much about word embeddings given context, but I’m quite curious to learn. Here in part one, I’m going to nail out something semi-interesting and treat part two as a learning experience.&lt;/p&gt;
&lt;h1 id=&#34;overviewdefinitions&#34;&gt;Overview/Definitions:&lt;/h1&gt;
&lt;p&gt;Connections is one of many NY Times games. It began in June 2023 and releases a puzzle daily. Outside of drinking straight oil, it’s one of my favorite things to do in the morning… so why not ruin it by figuring out a way to convert all historical games into a table and write SQL against it!&lt;/p&gt;
&lt;p&gt;Connections is quite simple. You’re provided a 4x4 grid of word tiles. Words are grouped into sets of four based on a connecting category of varying difficulty. I’ll write about some patterns I discovered in the categories later.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Connections_min.png&#34; alt=&#34;Connections&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Above is a picture containing the Connections game from 6/05/2024. Funny enough, this particular game so-happens to contain the most common word used across the history of connections which is &lt;code&gt;Ring&lt;/code&gt; used, now, 11 times.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;In this example, the four words “Sick”, “Nice”, “Cool”, and “Sweet” can be used to form the “Awesome!” category. This category was designated the “easiest” of all categories, although this definition differs from person to person as not everyone would associate Sick as a synonym for “Awesome!”. Personally, I associate sick with what happens after I drink my ½ cup of oil which, in my opinion, is pretty awesome… so, for me, it makes sense, but you do you. Rinse and repeat with the remaining 12 words, and that’s Connections.&lt;/p&gt;
&lt;p&gt;Defining a few things to stay on the same page moving forward:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Category: A grouping of 4 words in a game&lt;/li&gt;
&lt;li&gt;Words: A single tile in a game&lt;/li&gt;
&lt;li&gt;Difficulty: How “Straightforward (easy)” or “Tricky (hard)” a category was in a game.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;how-does-chatgpt-4o-do&#34;&gt;How does ChatGPT-4o Do?&lt;/h1&gt;
&lt;p&gt;I’ll start with a single days example from June 8th , 2024. This example aligns with a status quo Connections game, you’ll see why I say this in the analysis section.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;**SPOILER ALERT**&lt;/code&gt; Below is the solution to the puzzle with the difficulty, category and words.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[Easiest] Grab One’s Attention: ABSORB, ENGROSS, HOLD, RIVET&lt;/li&gt;
&lt;li&gt;[Easy] Document with Video: FILM, RECORD, SHOOT, TAPE&lt;/li&gt;
&lt;li&gt;[Medium] ANAGRAMS: PASTEL, PETALS, PLEATS, STAPLE&lt;/li&gt;
&lt;li&gt;[Hard] PRETTY ___: GOOD, PENNY, PLEASE, WOMAN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I made sure that the model is familiar with the game; however, at this point, I don’t offer it any previous connections data or answers to go off of.&lt;/p&gt;
&lt;h6 id=&#34;prompt&#34;&gt;Prompt:&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;&amp;quot;Solve today’s game, providing the category defining each word grouping.
Words: Pleats, Please, Hold, Record, Woman, Film, Good, Pastel, Penny,
Staple, Tape, Rivet, Absorb, Petals, Engross, Shoot.&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h6 id=&#34;response&#34;&gt;Response:&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Words related to movies:&lt;/strong&gt; Shoot, Film, Tape, Record &lt;code&gt;[CORRECT]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Words related to types of fasteners:&lt;/strong&gt; Rivet, Staple, Pleats, Hold &lt;code&gt;[WRONG]&lt;/code&gt;, but I also considered this possibility&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Words related to artistic or aesthetic qualities:&lt;/strong&gt; Pastel, Penny, Woman, Good &lt;code&gt;[WRONG]&lt;/code&gt; but close&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Words related to engagement or involvement:&lt;/strong&gt; Absorb, Please, Petals, Engross &lt;code&gt;[WRONG]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When provided limited context or historical data, the LLM typically gets the two easier categories right (some cluster of closely related words). However, without any additional context, the model tends to miss the harder categories sometimes even letting mistakes spill back into the easier ones causing additional misses. This isn’t news to anybody, but illustrates that better prompts get better responses… if you’re going to go Oscar the Grouch mode (his birthday was June 1 BTW) expect a garbage in -&amp;gt; garbage out scenario.&lt;/p&gt;
&lt;p&gt;Let’s provide an additional prompt denoting that the possibility of certain categories exists.&lt;/p&gt;
&lt;h6 id=&#34;prompt-1&#34;&gt;Prompt:&lt;/h6&gt;
&lt;pre&gt;&lt;code&gt;“These are incorrect, take into account that answers can involve grouping words
 that have similar meaning with the addition of a given prefix or suffix, homophones,
 and anagrams can all be at play to create a category. Please try again.”
&lt;/code&gt;&lt;/pre&gt;
&lt;h6 id=&#34;response-1&#34;&gt;Response:&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Recording-related terms:&lt;/strong&gt; Record, Tape, Film, Shoot &lt;code&gt;[CORRECT]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anagrams of &amp;lsquo;Staple&amp;rsquo;:&lt;/strong&gt; Pleats, Pastel, Staple, Petals &lt;code&gt;[CORRECT]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Words that can follow &amp;lsquo;Please&amp;rsquo;:&lt;/strong&gt; Please, Hold, Absorb, Engross &lt;code&gt;[WRONG]&lt;/code&gt;. The words almost form the easiest category, but it forces the prefix concept unnecessarily.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terms associated with monetary or value:&lt;/strong&gt; Penny, Good, Woman, Rivet (stretch, but possibly in terms of securing value) &lt;code&gt;[WRONG]&lt;/code&gt; Switching “Rivet” and “Please” would yield a correct puzzle, but the categories are off significantly. It evens notes “Rivet” is a stretch.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While this attempt recognizes the anagram, the “Pretty ___ “ category seems to be fairly elusive for it and there is no idea of “Attention” in any category.&lt;/p&gt;
&lt;p&gt;Final time… I provided a month’s worth of historical connections games with the categories, their associated difficulty and the four words. &lt;code&gt;This, initially, caused it to regress significantly&lt;/code&gt;, providing an output that no longer followed the rules of the game. After re-orienting back to the task on hand, it butchered its previous progress and… umm… gave a response that added “Woman” to a category called “Objects”…&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Response.png&#34; alt=&#34;Connections&#34;&gt;&lt;/p&gt;
&lt;p&gt;After providing thirty Connections puzzles, I found it was possible for the model to get them correct but only on easier days and after several prompts. If the model receives an extra hint, such as “I’m sure these three words together are in category “X”, but I don’t know the fourth word,” it usually manages to provide a correct answer.&lt;/p&gt;
&lt;p&gt;There are probably better prompts, more prompts, or a curated LLM that could accurately solve most of these puzzles. There is certainly a good amount to explore in prompting an LLM and trying to get it to solve Connections.&lt;/p&gt;
&lt;h1 id=&#34;retrieving-historical-connections-games&#34;&gt;Retrieving historical Connections games:&lt;/h1&gt;
&lt;p&gt;I figured a good place to start would be to create a table containing all historical connections games properly labeled with words, categories, difficulty, and date. This dataset would serve as the basis for understanding common patterns in Connections, as well as a clean set of labeled training data I could use for whatever solution I envisioned.&lt;/p&gt;
&lt;p&gt;While the NY Times has a Wordle Archive, there is no such Connections archive. Luckily, there are a myriad of websites that host all historical connections games.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So, I &lt;a href=&#34;https://www.instagram.com/davis.clarke/reel/C22PwvNO2kA/?hl=en&#34;&gt;LOCKED IN&lt;/a&gt; and spent ~5 days copying…&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Nah&amp;hellip; actually, I sent a couple cold emails to any address I could find on these sites asking if they would share a file containing the games and answers. No response. I did a quick search of Github and Reddit to see if I could uncover any leads, but no… ok sooooo web-scraping, Yay!&lt;/p&gt;
&lt;p&gt;I wrote a quick &lt;a href=&#34;https://github.com/sschnei8/connections_solver/blob/master/data_functions/scrape.py&#34;&gt;script&lt;/a&gt; to scrape one of the historical Connections sites into a text file. It quickly loops through each month of connections data on the site, extracts the paragraphs with the games and writes them to a text file with a separator. I’m going to leave the URL out, but you can find the site quite easily if you look. After writing 335 connections games to the text file, I convert it to a &lt;a href=&#34;https://github.com/sschnei8/connections_solver/blob/master/data_functions/transform.py&#34;&gt;csv and remove duplicates&lt;/a&gt;. Now, nobody needs to scrape. They can just &lt;a href=&#34;https://github.com/sschnei8/connections_solver/blob/master/data/clean_data.csv&#34;&gt;steal from me&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is probably a good time to point out that this whole &lt;a href=&#34;https://github.com/sschnei8/connections_solver/blob/master/pipeline.py&#34;&gt;process&lt;/a&gt; should be a &lt;a href=&#34;https://dagster.io/&#34;&gt;DAG&lt;/a&gt;, but I dont care about robustness or repeatability right now so&amp;hellip; shortcuts!&lt;/p&gt;
&lt;h1 id=&#34;analytics-cleaning&#34;&gt;Analytics (Cleaning):&lt;/h1&gt;
&lt;p&gt;Cool, so now that we have our &lt;code&gt;“Clean”&lt;/code&gt; CSV, we can copy it directly into a table using duckDB and explore all these historical games. With duckDB you can directly COPY a CSV from disk into a table in a database. Ten lines of code later, and we’ve got a table.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-PYTHON&#34; data-lang=&#34;PYTHON&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# duckdb.connect(dbname) creates a connection to a persistent database&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;conn &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; duckdb&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;connect(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;connections.db&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Create DuckDB table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;conn&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sql(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;DROP TABLE IF EXISTS CONNECTIONS_DATA;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;CREATE TABLE CONNECTIONS_DATA (
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    GAME_DATE DATE,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    DIFFICULTY VARCHAR,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    CATEGORY VARCHAR,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;    WORD VARCHAR
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# COPY CSV from disk&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;conn&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sql(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&amp;#34;COPY CONNECTIONS_DATA FROM &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;clean_csv_location&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; (FORMAT CSV, HEADER);&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In our new table:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each game consists of 16 rows, one for each word&lt;/li&gt;
&lt;li&gt;A category, on a particular day, can be described with four rows&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I choose this because I didn’t want to deal with any unnesting logic for viewing individual words, which would be necessary if I collapsed a game into 4 rows and saved the words in an &lt;a href=&#34;https://duckdb.org/docs/sql/data_types/list.html&#34;&gt;ARRAY/LIST&lt;/a&gt; or just LISTAGG’ed the strings together.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;FYI, duckDB &lt;a href=&#34;https://github.com/duckdb/duckdb/issues/2575&#34;&gt;adopted&lt;/a&gt; the SQL standard of 1 based indexing a &lt;a href=&#34;https://github.com/duckdb/duckdb/pull/3178&#34;&gt;couple years ago&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;You may have noticed I put “CLEAN” in quotes earlier. I’ve got some half-baked web-scraping and transform logic I cheffed up in ~ 1 hour, so I figured there was about a 1% chance I missed some stuff… and it turns out I did indeed miss some stuff.&lt;/p&gt;
&lt;p&gt;Date-category combinations should have four rows. A count of rows (CNT) divided by four should return 1, and then, 1 mod 1 should equal zero. However, the below query returned six instances where CNT equaled 1.25. I discovered hyphenated words like “Yo-Yo” were written as two rows.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; GAME_DATE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , CATEGORY
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;::FLOAT &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; CNT &lt;span style=&#34;color:#75715e&#34;&gt;-- BECASUE THERE WILL BE 4 ROWS FOR EACH INSTANCE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; CONNECTIONS_DATA
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;GROUP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;HAVING&lt;/span&gt; CNT &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ORDER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; CNT &lt;span style=&#34;color:#66d9ef&#34;&gt;DESC&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Alright, probably good but let’s run some summary stats to be sure:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; TOTAL_WORDS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;::FLOAT &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; TOTAL_DISTINCT_CONNECTIONS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , &lt;span style=&#34;color:#66d9ef&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;::FLOAT &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; TOTAL_DISTINCT_DAYS
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; CONNECTIONS_DATA
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Oops, why is TOTAL_DISTINCT_DAYS 334.5?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I assumed every game was unique&lt;/li&gt;
&lt;li&gt;There was some boiler plate text in the text file from the web scrape that was duplicated&lt;/li&gt;
&lt;li&gt;So&amp;hellip; why not remove rows in the text file that were duplicates of a previously seen row to clean it up?&lt;/li&gt;
&lt;li&gt;Wrong! Connections reuses categories with identical words:
&lt;ul&gt;
&lt;li&gt;August 30th, 2023, and May 30th, 2024: “Influence” category.&lt;/li&gt;
&lt;li&gt;January 11th, 2024, July 25th, 2023, and August 15th, 2023: “States of matter” category.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Instead of fixing this in the extract code, I just &lt;a href=&#34;https://github.com/sschnei8/connections_solver/blob/master/data_functions/create_db.py#L37&#34;&gt;stripped them out&lt;/a&gt; of the table and called the clean_table funtion at the end of pipeline.py. Sweet, clean CSV, no quotes this time.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I also removed 4/1/2024, April Fools day, when all words were Emojis &lt;strong&gt;¯\_(ツ)_/¯&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;analytics-insights&#34;&gt;Analytics (insights):&lt;/h1&gt;
&lt;p&gt;I hacked together a few &lt;a href=&#34;https://github.com/sschnei8/connections_solver/blob/master/analytics.py&#34;&gt;queries&lt;/a&gt; in a Jupyter notebook style file, printing data frames to the console. Over the +/- 335 games in this dataset there were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;~3500 distinct words, not many words have spaces (fewer than 30 occurences), and most words are 4 to 5 letters.&lt;/li&gt;
&lt;li&gt;Word length is consistent across difficulties on average 5.1 letters&lt;/li&gt;
&lt;li&gt;Most commonly reused words: {RING:11, BALL:10, COPY:9, LEAD:9, WING:8, JACK:8, CUT:8, HEART:8}&lt;/li&gt;
&lt;li&gt;Shortest words are individial letters like &amp;ldquo;X&amp;rdquo;, occuring only twelve times&lt;/li&gt;
&lt;li&gt;Longest words include Peppermint Patty, Concentration, Mashed Potato, and Horsefeathers. Horsefeathers is synonymous with nonsense or rubbish (I could see myself yelling this in an argument)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pivoting out difficulty by category type:
&lt;img src=&#34;/images/Pivot.png&#34; alt=&#34;Connections&#34;&gt;&lt;/p&gt;
&lt;p&gt;Unpacking a few things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;This is biased towards the “Hard” categories, describing ~70% of them. This is due to this category being pattern focused and based on challenging word play each day. The only way I’m going to be able to solve these is to reduce the degrees of freedom in selection or determine the pattern with high confidence.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Dunderscores are extremely common, describing ~40% of hard categories:
- ROCK ___: (Star, Candy, Bottom, Garden)
- ___ MOON: (Sailor, New, Blue, Harvest)

Homophones show up a few times, and I should probably just do a static check
for these against a database of English language homophones.

Anagrams should be checked similarly.
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Prefix_String, Suffix_String, Minus, Added_Plus all denote occasions where the words are similar due to having some character(s) appended or removed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WITH categories are a significant challenge. I’m not sure how to approach them yet.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Things With Trunks: (Cars, Elephants, Swimmers, Trees)
Tarot Carods With “THE”: (Fool, Lovers, Magician, Tower)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;THINGS overlaps WITH 11 times in the data, so I could have included the intersection of the two: THINGS WITH ___. Instead, I’ve just pulled the intersections into the WITH category.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Things People Shake: (Hands, Maraca, Polaroid, Snowglobe)
Things to crack: (Egg, Knuckle, Smile, Window)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Medium is typically some niche knowledge like countries with red and white flags, weapons in the game Clue, or British cuisine. To some, this is akin to “Easy” if they are familiar with the terms. For the less familiar, these can be confounding and lead to misses.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Easiest/Easy difficulties are generally tightly related words without requiring a layer of context. However, they aren’t always so straightforward.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Connect: (Couple, Link, Tie, Join)
Attach with adhesive: (Adhere, Glue, Paste, Stick)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Filtering for the triple dunderscore categories was a bit tricky, with &lt;code&gt;_&lt;/code&gt; being reserved. In Redshift, I was able to do &lt;code&gt;LIKE ‘%\\\\\_\_\_%’&lt;/code&gt; , but this doesn’t seem to work in duckDB. Instead, I went with some length based logic checking for at least a difference of 2 characters once stripping them out:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;LENGTH&lt;/span&gt;(CATEGORY) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;LENGTH&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;REPLACE&lt;/span&gt;(CATEGORY, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;\_&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;)) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;final-thoughts-on-a-solution&#34;&gt;Final thoughts on a solution:&lt;/h1&gt;
&lt;p&gt;One advantage of this problem is that its surface area decreases exponentially with the reduction in the size of the initial set. Something I never explicitly provided Chat-GPT was information regarding which categories it had gotten right and what was wrong. Allowing it to build on top of past decisions, and reducing the size of the problem.&lt;/p&gt;
&lt;p&gt;For combinations, the formula: C(n,r)=n!/r!(n-r)!&lt;/p&gt;
&lt;p&gt;Evaluates the number of ways a sample of “r” elements can be obtained from a larger set of “n” distinguishable objects where order does not matter (unlike permutations) and repetitions are not allowed.&lt;/p&gt;
&lt;p&gt;At the beginning of any Connections game, a player will choose 4 words from a set of 16 yielding 1820 possible combinations.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C(16,4)=16!/4!(16-4) = 1820&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As categories are found and labeled as correct the set is reduced: 16-&amp;gt;12-&amp;gt;8-&amp;gt;4&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C(12,4)=12!/4!(12-4) = 495&lt;/li&gt;
&lt;li&gt;C(8,4)=8!/4!(8-4) = 70&lt;/li&gt;
&lt;li&gt;C(4,4)=4!/4!(4-4) = 1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;/images/Problem_Space_min.png&#34; alt=&#34;Connections&#34;&gt;&lt;/p&gt;
&lt;p&gt;Like I mentioned in the intro, I find NLP interesting, but I am by no means an expert. After my manual checks to catch some of the tricky categories in Connections, I’m not entirely sure what an optimal framework looks like for grouping four words and iterating over a solution:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Solution_min.png&#34; alt=&#34;Connections&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Maybe I don’t even need to perform these manual checks if I provide the right context to the correct algorithm?&lt;/li&gt;
&lt;li&gt;I’ve noted “confidence” several times in the diagram, but I’m not sure how to objectively arrive at this or if I’ll need to normalize “confidence” across different categories/difficulties?&lt;/li&gt;
&lt;li&gt;I’ll want to operate on a reduced set of words given that a category has correctly been identified, but I’m not sure if I should throw out previous work to avoid any noise created by the larger set of words?&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;ll need to figure out how to handle Nouns, single letters, and words with spaces (Maybe this requires injecting a word classification layer between the raw set of words and the cached check for specific categories)&lt;/li&gt;
&lt;li&gt;Not sure I’ll be able to get this category: Reads the Same Rotated 180 degrees: 96, MOW, NOON, SIS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anyway, that’s part one. Who knows what part two will be, stay greasy!&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Temporary Tables</title>
      <link>/posts/redshift_temp_tables/</link>
      <pubDate>Sun, 05 May 2024 00:00:00 +0000</pubDate>
      
      <guid>/posts/redshift_temp_tables/</guid>
      <description>&lt;p&gt;The database management system (DBMS) I’ll reference today is &lt;a href=&#34;https://aws.amazon.com/redshift/&#34;&gt;Redshift&lt;/a&gt; (AWS Cloud Datawarehouse offering) which is based on &lt;a href=&#34;https://www.postgresql.org/&#34;&gt;Postgres&lt;/a&gt;. I’ll dive into some of the anti-patterns around &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html#r_CREATE_TABLE_NEW-parameters&#34;&gt;Temporary Tables&lt;/a&gt; I’ve seen abused during my work experience, why they don’t make sense, and how to fix them.&lt;/p&gt;
&lt;p&gt;Lets get it out of the way… Temporary Tables are not “better” than &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/r_WITH_clause.html&#34;&gt;Common Table Expressions&lt;/a&gt; (CTEs) and CTEs are not “better” than temporary tables. It is entirely dependent on the context, the data, the DBMS, the query, upstream tables, etc… &lt;strong&gt;because at the end of the day the stakeholder wants the 1MM row output in excel so they can make a pivot table&lt;/strong&gt;. They don’t care if it was procured via CTEs, TEMP Tables, or that you put another hole in the home-office dry wall.&lt;/p&gt;</description>
      <content>&lt;p&gt;The database management system (DBMS) I’ll reference today is &lt;a href=&#34;https://aws.amazon.com/redshift/&#34;&gt;Redshift&lt;/a&gt; (AWS Cloud Datawarehouse offering) which is based on &lt;a href=&#34;https://www.postgresql.org/&#34;&gt;Postgres&lt;/a&gt;. I’ll dive into some of the anti-patterns around &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html#r_CREATE_TABLE_NEW-parameters&#34;&gt;Temporary Tables&lt;/a&gt; I’ve seen abused during my work experience, why they don’t make sense, and how to fix them.&lt;/p&gt;
&lt;p&gt;Lets get it out of the way… Temporary Tables are not “better” than &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/r_WITH_clause.html&#34;&gt;Common Table Expressions&lt;/a&gt; (CTEs) and CTEs are not “better” than temporary tables. It is entirely dependent on the context, the data, the DBMS, the query, upstream tables, etc… &lt;strong&gt;because at the end of the day the stakeholder wants the 1MM row output in excel so they can make a pivot table&lt;/strong&gt;. They don’t care if it was procured via CTEs, TEMP Tables, or that you put another hole in the home-office dry wall.&lt;/p&gt;
&lt;p&gt;A few other notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In Redshift (and many other DBMS for that matter) there are plenty of excellent use cases for Temp Tables (I&amp;rsquo;ll provide a few at the end)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Be wary of Premature Optimization. If analytics workloads are running in an acceptable amount of time and not incurring unacceptable expenses, then effort is probably better spent elsewhere&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;read-write-read-write&#34;&gt;Read, Write, Read, Write:&lt;/h1&gt;
&lt;p&gt;Internally, most analytics queries we run scan TBs of data (&lt;code&gt;Redshift Spectrum costs $5 per TB of data scanned from S3&lt;/code&gt;, but hey… screw it SELECT * it’s a business expense, Right!, Right?). Most commonly, large Transform or Extract jobs are a series of Temporary tables, there is nothing &lt;del&gt;necessarily&lt;/del&gt; wrong with this. The issues come about when large chunks of unfiltered data are passed through this series of Temporary tables, being read and written over and over again.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;SELECT statements encased in a &lt;code&gt;CREATE TEMP TABLE AS&lt;/code&gt; will read data from the upstream source and write it to disk.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In a particular session these tables can be seen in STV_TBL_PERM, they will be collected after the session is closed (obviously permanent tables will not).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Repeatedly reading and writing data too and from temp tables throughout the course of a query can be costly both monetarily and temporally.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;issue-1-create-a-temp-table-just-to-select-everything-out-of-it&#34;&gt;Issue 1: Create a temp table just to SELECT everything out of it&lt;/h5&gt;
&lt;p&gt;Uselessly writing the entire result set to disk just to read it all back out. Just run the final SELECT, there is no need for the temp table. This also presents an additional opportunity for a statement to get stuck in the que behind other workloads.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- NOT GREAT, I SEE THIS WAY TOO OFTEN
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; TEMP &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FINAL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; EVERYTHING
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; SOME_SCHEMA.BIG_TABLE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FINAL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- BETTER
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; EVERYTHING
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; SOME_SCHEMA.BIG_TABLE
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;issue-2-unnecessary-data-and-losing-optimizations&#34;&gt;Issue 2: Unnecessary data and losing optimizations&lt;/h5&gt;
&lt;p&gt;Redshift is a columnar database. Each column is stored separately, meaning if you don’t need a column Redshift can ignore scanning the data entirely. &lt;code&gt;Yes, if you&#39;re using Spectrum for your OLAP queries and your data is sitting in S3 in abunch of .csv, Redshift will have to scan the whole file... but its probably time for&lt;/code&gt; &lt;strong&gt;&lt;a href=&#34;https://parquet.apache.org/&#34;&gt;Parquet&lt;/a&gt;?&lt;/strong&gt; In the below SQL:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Redshift is forced to read and store columns BT.COL4, BT.COL5, BT.COL6 , BT.COL7 in TEMP_1 even though they are never referenced again in the rest of the query.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The query optimizer can’t parse further down in the query that all that was wanted were some fairly specific predicates; it could have skipped many blocks of data. Each of the select statements is on its own island in a way. Redshift stores data in 1MB blocks, with additional metadata about these blocks. This meta data (a.k.a zone maps) is what allows the DBMS to avoid scanning irrelevant blocks.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; TEMP &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; TEMP_1 &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; BT.COL1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            , BT.COL2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            , BT.COL3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            , BT.COL4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            , BT.COL5
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            , BT.COL6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            , BT.COL7
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; THIS_IS_A.BIG_TABLE BT
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-----------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Now that we’ve read everything and written to disk lets read it back out
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-----------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; TEMP &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; TEMP_2 &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; BT.COL1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            , BT.COL2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            , BT.COL3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            , ST.COL9
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; THIS_IS_A.BIG_TABLE BT
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;INNER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;JOIN&lt;/span&gt; TINY.SMALL_TABLE ST &lt;span style=&#34;color:#66d9ef&#34;&gt;ON&lt;/span&gt; BT.COL1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ST.COL1 &lt;span style=&#34;color:#66d9ef&#34;&gt;AND&lt;/span&gt; BT.COL2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ST.COL2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;------------------------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- FINAL SELECT, lets read everything back out, after creating TEMP_2 for… no reason?
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;------------------------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; TEMP_2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; COL1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;‘&lt;/span&gt;I Should Have&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;’&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;AND&lt;/span&gt; COL2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;‘&lt;/span&gt;Applied these predicates&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;’&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;AND&lt;/span&gt; COL3 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;‘&lt;/span&gt;Earlier
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;SQL is a declarative language, you indicate to the DBMS what you want and the DBMS goes off and determines the best way to retrieve that for you. The series of TEMP TABLES above augments this process and confines the DBMS to only performing rudimentary optimizations without broader context.&lt;/p&gt;
&lt;p&gt;These optimizations can be implemented manually by the author of the query, but would otherwise be done automatically by the DBMS. &lt;code&gt;Its like paying your chauffer a bunch of money to drive you to the airport, but, instead, you wrestle him for the keys, tie him up in the back seat of the car, turn on Maroon 5 (You love Maroon 5), and drive to the airport yourself?&lt;/code&gt; Why do that?&lt;/p&gt;
&lt;h5 id=&#34;issue-3-sort-keys-multiple-sort-keys&#34;&gt;Issue 3: Sort Keys, Multiple Sort Keys???&lt;/h5&gt;
&lt;p&gt;Something that seems to be fairly common is defining a &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/t_Sorting_data.html&#34;&gt;SORT KEY&lt;/a&gt; within the CTAS syntax when the column used in the sort key should already have been filtered on in the first place during the creation of the Temp Table. This is essentially identical to my point above about filtering after the Temp Table Creation. Defining multiple sort keys at this point just makes things worse.&lt;/p&gt;
&lt;p&gt;The kicker is that Redshift will attempt to determine the optimal SORY KEY and &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/c_choosing_dist_sort.html&#34;&gt;DIST KEY&lt;/a&gt; for any Temp Table based on the query plan. Manually specifying it in the temp table only to filter it out later is just a bit painful to see and flies in the face of aggregate early and often. More info can be found in the &lt;a href=&#34;https://aws.amazon.com/blogs/big-data/amazon-redshift-engineerings-advanced-table-design-playbook-distribution-styles-and-distribution-keys/&#34;&gt;advanced table design playbook&lt;/a&gt;. This is probably a good time to mention that its important to make sure &lt;a href=&#34;https://docs.aws.amazon.com/redshift/latest/dg/r_ANALYZE.html&#34;&gt;table statistics&lt;/a&gt; are up to date.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;------------------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- THE ADDITIONAL SORTING MAKES THE WRITE MORE EXPENSIVE WITH NO DOWNSTREAM BENEFIT
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- WE&amp;#39;VE DISTRIBUTED THE DATA ACROSS THE NODES IN THE CLUSTER USING COL4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;------------------------------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; TEMP &lt;span style=&#34;color:#66d9ef&#34;&gt;TABLE&lt;/span&gt; TEMP_1 SORTKEY(COL1, COL2, COL3) DISTKEY(COL4) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; (
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; BT.COL1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , BT.COL2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , BT.COL3
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , BT.COL4
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , BT.COL5
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , BT.COL6
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , BT.COL7
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     , &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;…&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; THIS_IS_A.BIG_TABLE BT
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; BT.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; TEMP_1_SORT BTA
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;INNER&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;JOIN&lt;/span&gt; ANOTHER_TABLE ATA &lt;span style=&#34;color:#66d9ef&#34;&gt;ON&lt;/span&gt; BTA.COL4 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; ATA.COL4 &lt;span style=&#34;color:#75715e&#34;&gt;-- AT LEAST WE COLLOCATED THE JOIN COL...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; BTA.COL1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;‘&lt;/span&gt;Yikes&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;’&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;-- SHOULD HAVE FILTERED ABOVE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In regard to distributing on COL4 someone may think:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;“I want to save data in a Temp Table and specify a distribution key, so that I can improve my JOIN later on”&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is certainly some thought going into this argument, but there is no free lunch.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The redistributed data may improve the later join by collocating data across the cluster&amp;rsquo;s nodes, however, all that shuffling across different nodes still had to occur when the temp table was created!&lt;/li&gt;
&lt;li&gt;While this is a valid argument, it would be important to benchmark the run times to actually determine what is most optimal here.&lt;/li&gt;
&lt;li&gt;If the current query patterns don’t utilize the table’s partitions (sort keys) and rarely join on the column its distributed on… it might be time to think about adjusting the upstream table rather than having all subsequent queries cache the table in a temp table just to sort and redistribute it before further processing.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&#34;when-are-temp-tables-a-good-choice&#34;&gt;When are temp tables a good choice?&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;If the temporary table is going to be read from numerous times, it may be best to filter once and read several times from the aggregated data. This was especially handy when Redshift used to lack &lt;a href=&#34;https://aws.amazon.com/about-aws/whats-new/2023/02/amazon-redshift-rollup-cube-grouping-sets-group-by-clause/&#34;&gt;ROLLUP, CUBE, and GROUPING SETS&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Using Temp Tables to chunk up pieces of a query can be very handy in development, as they are persisted for the duration of the session, things like tests, logical checks, and quick aggregations can be run against them&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Using a series of CTEs within a temp table can be a happy medium, doing more work and writing out less often&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Honestly, I&amp;rsquo;d take 100 temp tables over having to parse through some nested sub query mess&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; (COL1 &lt;span style=&#34;color:#66d9ef&#34;&gt;IN&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        )
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content>
    </item>
    
    <item>
      <title>Blindness and a Chess Puzzle</title>
      <link>/musings/blindess/</link>
      <pubDate>Thu, 25 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>/musings/blindess/</guid>
      <description>&lt;h1 id=&#34;a-chess-puzzle&#34;&gt;A Chess Puzzle&lt;/h1&gt;
&lt;p&gt;I recently encountered a &lt;a href=&#34;https://lichess.org/training/G7WEi&#34;&gt;chess puzzle&lt;/a&gt; that revolved around capturing my opponents material due to a forced mate in one threat. While exploring various permutations of moves, I struggled to choose the right piece (between the bishop and the knight) to simultaneously block my opponent’s mate in one threat while allowing me to freely capture a few of his minor pieces. After a brief though I played Knight C3 -&amp;gt; D5, blocking my opponents mate threat on g2 and adding an additional attacker to the black knight on F6. I completely missed that by moving the knight I was unveiling my opponents Queen to be able to attack my queen. &lt;strong&gt;Just a single move, only 64 squares, and I was entirely blind to the undermining of my idea.&lt;/strong&gt; After black captures on D5 with the pawn and I take the knight on F6 with my bishop, my opponent can simply capture my queen, negating my mate threat and forcing me to respond by taking back with my bishop.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;a-chess-puzzle&#34;&gt;A Chess Puzzle&lt;/h1&gt;
&lt;p&gt;I recently encountered a &lt;a href=&#34;https://lichess.org/training/G7WEi&#34;&gt;chess puzzle&lt;/a&gt; that revolved around capturing my opponents material due to a forced mate in one threat. While exploring various permutations of moves, I struggled to choose the right piece (between the bishop and the knight) to simultaneously block my opponent’s mate in one threat while allowing me to freely capture a few of his minor pieces. After a brief though I played Knight C3 -&amp;gt; D5, blocking my opponents mate threat on g2 and adding an additional attacker to the black knight on F6. I completely missed that by moving the knight I was unveiling my opponents Queen to be able to attack my queen. &lt;strong&gt;Just a single move, only 64 squares, and I was entirely blind to the undermining of my idea.&lt;/strong&gt; After black captures on D5 with the pawn and I take the knight on F6 with my bishop, my opponent can simply capture my queen, negating my mate threat and forcing me to respond by taking back with my bishop.&lt;/p&gt;
&lt;p&gt;To my surprise, the solution was quite simple: I moved the rook one square up instead of to the right. I had been fixated on the idea of the rook moving horizontally, a pattern I was familiar with in trapping queens. Faced with this new scenario, I failed to reevaluate the rook&amp;rsquo;s positioning and didn&amp;rsquo;t realize that a slight vertical shift would solve the puzzle.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I had been trapped in my accustomed patterns and couldn&amp;rsquo;t see the obvious queen attack that should have been my initial consideration.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;inattentional-blindness&#34;&gt;Inattentional Blindness?&lt;/h1&gt;
&lt;p&gt;It&amp;rsquo;s interesting how we can become blind in opposite degrees of experience. When we&amp;rsquo;re beginners, we struggle to discern crucial elements in a sea of information, unable to recognize common patterns and solutions. Our thoughts are malleable, as we miss many things but discover new patterns. As we become more seasoned, the details start to fade into the background, and a sort of &amp;ldquo;flow state&amp;rdquo; takes over, making everything seem almost automatic and fast. Taking a familiar walk around the block can feel like teleportation, with the journey happening almost unnoticed. Conversely, exploring a new place can overload our senses, making it easy to miss small details in the midst of absorbing so much new information.&lt;/p&gt;
&lt;p&gt;There’s some fine balance between routine and new. New is good, it seems to slow down time and deepens perspective. However, routine seems to be critical to making considerable progress on activities I’d like to be good at, it removes the newness and mental overhead. I can focus on getting better or ‘teleport’ my way through difficult moments I might otherwise struggle to make it through.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Redlining</title>
      <link>/musings/redlining/</link>
      <pubDate>Sat, 18 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>/musings/redlining/</guid>
      <description>&lt;p&gt;For some people, not red lining all the time is a skill in and of itself. Why wait until you have an injury or a mental health crisis to take a breath?&lt;/p&gt;
&lt;h1 id=&#34;reflection&#34;&gt;Reflection&lt;/h1&gt;
&lt;p&gt;I was brushing my teeth recently, paused, turned to my girlfriend and proclaimed that I wasted all four years of college on two degrees that were not challenging. I said that I should’ve majored in something “more difficult” like Engineering, Math or Computer Science because “I could have” and people wouldn’t “default to questioning my abilities”. The constant grappling with “I could have done more” or “I could have challenged myself” is probably good in some regard, but I believe the above scenario is unhealthy and bleeds into why I have found myself redlining &lt;del&gt;for no reason&lt;/del&gt; at work over the last year or so.&lt;/p&gt;</description>
      <content>&lt;p&gt;For some people, not red lining all the time is a skill in and of itself. Why wait until you have an injury or a mental health crisis to take a breath?&lt;/p&gt;
&lt;h1 id=&#34;reflection&#34;&gt;Reflection&lt;/h1&gt;
&lt;p&gt;I was brushing my teeth recently, paused, turned to my girlfriend and proclaimed that I wasted all four years of college on two degrees that were not challenging. I said that I should’ve majored in something “more difficult” like Engineering, Math or Computer Science because “I could have” and people wouldn’t “default to questioning my abilities”. The constant grappling with “I could have done more” or “I could have challenged myself” is probably good in some regard, but I believe the above scenario is unhealthy and bleeds into why I have found myself redlining &lt;del&gt;for no reason&lt;/del&gt; at work over the last year or so.&lt;/p&gt;
&lt;p&gt;Redlining: drive with (&lt;del&gt;a car engine&lt;/del&gt; the human brain) at or above its rated maximum rpm.&lt;/p&gt;
&lt;p&gt;My girlfriend refuted the above points pretty quickly. Reflecting on the above, I realized I was being quite harsh on an 18 year old that had no idea what he wanted to do. I was being insecure about my background and over indexing on some irrational fear of my inability to learn and produce good work. I was discounting the fact that I have had and will have future opportunities to pursue furthering education in a variety of fields. I understand that there is some amount of life I can’t control, responding erratically and sprinting as fast as I can toward certain goals is suboptimal.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Consistency is efficiency&lt;/strong&gt;, going 100 mph in most vehicles is not as fuel efficient as going 55 mph. You do not need to impress everyone at all time. Although I am not a car or a transformer, I think this applies.&lt;/p&gt;
&lt;h1 id=&#34;at-work&#34;&gt;At Work&lt;/h1&gt;
&lt;p&gt;At work, I would find myself trying to accommodate all types of requests as quickly as possible. There is a consistent sense of urgency about most things that people want done. &lt;strong&gt;I think the urgency is caused by people wanting to believe that what they are working on is urgent/important or being told that it’s urgent/important.&lt;/strong&gt; In addition, others may also want to impress their peers/boss and the urgency surrounding that is subsequently passed on to the person they require something from. The presence of urgency in combination with the desire to help/impress coworkers, fuels a sense of wanting to get things done as quickly as possible redlining and stressing to deliver.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Most things are not important, if ten people come to you in a day telling you they have a hugely important task think twice&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When evaluating a large project don’t assume that its value add, has been properly vetted, and the timelines make sense. Default to being skeptical&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If extremely value add work could be done easily/quickly it would probably already be done, approach these types of request cautiously&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Be flexible on implementation, the hot topic changes, do not take a change of direction to heart and pivot as necessary&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Refrain from doing as much as possible:
If you get a ton of cool stuff done but have no time to document it, iterate on it, and tell people about it… it will go unknown.
If you work on a ton of stuff and get it all done fast most of that stuff is probably not useful, will require corrections, and be prone to going unnoticed&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/images/Valuable_Work.jpeg&#34; alt=&#34;Redlining&#34;&gt;&lt;/p&gt;
&lt;p&gt;Spending more time investigating and figuring out why something is needed &lt;strong&gt;&lt;del&gt;is this actually valuable&lt;/del&gt;&lt;/strong&gt; is worth way more in the long run than solving useless problems. You can spin your wheels all day, redlining, while only having a small portion of your work be actually useful or… spend the extra time investigating to avoid useless work in the first place.&lt;/p&gt;
&lt;p&gt;Investigating is not as mentally taxing. Working on a difficult problem, writing a bunch of code, figuring out why the code you wrote is wrong and doesn’t work is stressful and difficult. Asking people to provide you better inputs as to what they want, asking why they need what they asked for, asking how much benefit is to be derived, openly asking a plethora of questions to verify exactly what is needed all increases the quality of your work while reducing the mental bandwidth required in producing a useful artifact.&lt;/p&gt;
&lt;p&gt;At the end of the day:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Most things will become out of date unless they are maintained, nobody will take the time to maintain them unless they are useful.&lt;/li&gt;
&lt;li&gt;Nobody will have time to maintain many useful things if no-one uses them.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also think this opens the door to more interesting job and role opportunities. Sure, you may not have produced as many artifacts as someone else but the depth and usefulness of the projects you did complete should outshine in comparison. Going deep on a few topics, creating something with tangible benefit, and then adequately documenting and sharing that thing scales exponentially while the ability to produce more and more “Stuff” scales linearly with the amount of time you want to sink into it.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>On Stress</title>
      <link>/musings/on_stress/</link>
      <pubDate>Tue, 27 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>/musings/on_stress/</guid>
      <description>&lt;h1 id=&#34;stress&#34;&gt;Stress&lt;/h1&gt;
&lt;p&gt;I’ve been meaning to jot down my thoughts on this for a while, but I keep running into things that tweak my mental model about stress.&lt;/p&gt;
&lt;p&gt;Recently, I watched some old home videos. Twenty years ago, my parents moved us into the home we still live in today. Around this time, my dad filmed a video of my brother and I walking the quarter mile from our house to a canal that runs through metropolitan Phoenix. It’s about a ten-minute walk
that probably took us thirty as we stopped for a snack on a small berm of grass, waddled around with empty backpacks that hit the backs of our knees and ran at my dad fists clenched
screaming “Power!” for some reason.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;stress&#34;&gt;Stress&lt;/h1&gt;
&lt;p&gt;I’ve been meaning to jot down my thoughts on this for a while, but I keep running into things that tweak my mental model about stress.&lt;/p&gt;
&lt;p&gt;Recently, I watched some old home videos. Twenty years ago, my parents moved us into the home we still live in today. Around this time, my dad filmed a video of my brother and I walking the quarter mile from our house to a canal that runs through metropolitan Phoenix. It’s about a ten-minute walk
that probably took us thirty as we stopped for a snack on a small berm of grass, waddled around with empty backpacks that hit the backs of our knees and ran at my dad fists clenched
screaming “Power!” for some reason.&lt;/p&gt;
&lt;h2 id=&#34;recently&#34;&gt;Recently&lt;/h2&gt;
&lt;p&gt;Over the last few years, I’ve done this walk, probably, several thousand times. Walking, which I previously thought was only for old folks or people with nothing better to do, is something I now cherish and serves as my focal point for both learning and introspection. The walk to the canal hasn’t changed much over the last two decades, in fact, barring new people moving into the neighborhood the most drastic change would be me. Now an unrecognizable twenty-four year old strolling down the side-walk, sometimes still with my father.&lt;/p&gt;
&lt;p&gt;I’ve become quite accustomed to this walk; it’s a routine for me, and for better or worse I like routines. Sometimes I switch it up, try a different path, walk to a different neighborhood; I like to pick out things that I’ve never noticed before each time to keep myself present. I’m comfortable; I find myself slipping into this state of comfortability, time passes by quickly. Walking in a new place alters time for me, my normal walk feels smooth I know where to go, I don’t even think, and before I know it I’m home again. A new place ‘slows’ down time.&lt;/p&gt;
&lt;h2 id=&#34;panic&#34;&gt;Panic&lt;/h2&gt;
&lt;p&gt;Over the last year, I’ve suddenly begun to struggle with new places. I’ve done a fair bit of traveling in this period and, for the first time in my life, primarily by myself. Instead of taking on the whimsical nature of four-year-old me carelessly walking to the canal, I’ve become rigid. I have an underlying level of stress I can’t shake. Dealing with crowded places, meeting new people, taking in new sights; in my head I’m certain these are valuable moments. Yet I can’t shake the tension in the back of my neck, the nervous thoughts of what if I get sick, what if a lose my passport, what if I twist my ankle. These thoughts culminate in a panic that ebbs and flows coming to peaks in enclosed spaces where I have to sit for a while (restaurants, airplanes, etc…). Instead of enjoying these experiences, I usually just want to go home where I feel safe.&lt;/p&gt;
&lt;p&gt;My initial reaction was that I had some kind of disease. The nervousness, loss of appetite and sweaty palms felt like I had a stomach flu. Yet the consistent pattern these symptoms lead me to believe I was just panicking. My concern for my health quickly turned to anger, why are you ruining this for yourself? Why can’t you just sit through a nice dinner with your family? Why are you shaking in the Uber to the airport? Just snap out of it. Shaming myself was not a successful strategy and did nothing to address the root cause of the problem.&lt;/p&gt;
&lt;h2 id=&#34;root-causing&#34;&gt;Root Causing&lt;/h2&gt;
&lt;p&gt;Part of the reason I’ve struggled to write this is because I’m still working through it. I have a better understanding of what’s going on, and I’m much kinder to myself and can calm myself down. However, I’m still unnerved when I’m traveling and I’m still figuring out a root cause(s).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;I’m doing a lot of new things fully on my own and assuming the risk and responsibility in doing so.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I think I’m social and outgoing, but I did spend 18 months between 2020 and 2021 almost completely isolated from social interaction outside of my parents.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;During those 18 months, I would rarely leave home outside of going for my walks or bike rides, spending the rest of the time studying.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I put immense pressure on myself at work, currently, my work is one of the few avenues I have to get approval from other people I respect, and I value approval/recognition more than my monetary compensation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A sense of urgency around staying up to date with new technologies and everything that’s going on in the world; I feel that taking time to relax is causing me to regress and will be detrimental to my long-term happiness (I know this is wrong but struggling to shake it).&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I’m trying to find a middle ground between the happy, curious, unknowing toddler and the ridged, white knuckled, and loss-averse adult that I’ve found myself becoming.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Business Intelligence Engineer</title>
      <link>/musings/bie/</link>
      <pubDate>Fri, 12 May 2023 00:00:00 +0000</pubDate>
      
      <guid>/musings/bie/</guid>
      <description>&lt;h1 id=&#34;two-months-as-a-bie&#34;&gt;Two months as a BIE&lt;/h1&gt;
&lt;p&gt;Promoted to BIE on the same team I have been on since September.&lt;/p&gt;
&lt;p&gt;Worked hard during my first four months on the team, put together a doc with my boss and got
approved starting about two months ago. Since Septmeber I&amp;rsquo;ve done a lot of stuff:&lt;/p&gt;
&lt;h2 id=&#34;a-little-background&#34;&gt;A little Background&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;- Redshift Cluster Maintenance and Query optimization of our longest running jobs
- Working toward establishing code reviews and a central code repository
- Created new production tables for partner teams
- Made adjustments/additions to some of our most critical tables that buoy all reports
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;how-to-improve&#34;&gt;How to improve&lt;/h2&gt;
&lt;p&gt;Looking back, I am very happy with my effort, but I want to do two things better.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;two-months-as-a-bie&#34;&gt;Two months as a BIE&lt;/h1&gt;
&lt;p&gt;Promoted to BIE on the same team I have been on since September.&lt;/p&gt;
&lt;p&gt;Worked hard during my first four months on the team, put together a doc with my boss and got
approved starting about two months ago. Since Septmeber I&amp;rsquo;ve done a lot of stuff:&lt;/p&gt;
&lt;h2 id=&#34;a-little-background&#34;&gt;A little Background&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;- Redshift Cluster Maintenance and Query optimization of our longest running jobs
- Working toward establishing code reviews and a central code repository
- Created new production tables for partner teams
- Made adjustments/additions to some of our most critical tables that buoy all reports
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;how-to-improve&#34;&gt;How to improve&lt;/h2&gt;
&lt;p&gt;Looking back, I am very happy with my effort, but I want to do two things better.&lt;/p&gt;
&lt;p&gt;ONE) I have not asked &amp;ldquo;WHY?&amp;rdquo; enough. I often get a request and my mind instantly goes into solve
mode: how do I do this, how do I do this optimally, how quickly can I do this, etc&amp;hellip; I need to
clarify the ask and get a better understanding of if they EVEN need what they are asking for.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Hey can you add this to the output of the model?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Why do you want that?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;I&amp;rsquo;m not sure someone else just mentioned it&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Ok let me know what the use case is, and I can see what I can do&amp;rdquo;
&lt;strong&gt;_ Never hear about it again _&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This helps to avoid useless work&amp;hellip;&lt;/p&gt;
&lt;p&gt;TWO) I&amp;rsquo;m struggling to detach from work. I just took two full weeks off; it was nice, I went to
Europe, hung out with my girlfriend, saw family&amp;hellip; but I also wanted to be working. I get way to
attached to work, and I feel like my greatest source of satisfaction right now is recognition/
appeciation from people I work with.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve recognized that my level of committment is 24/7 and my derivation of self-worth is much too
entwined with my job. I am grateful to be passionate about what I do, and I am not saying that I
want to de-commit, care less, and avoid work&amp;hellip; I need an off button. I will work 7AM to 7PM no
problem, when I&amp;rsquo;m done working I will go to the gym and think about how to solve work problems,
and when I get home I will check my computer to see if any emails came in. I need to learn that
throwing more effort, more concern, and more intent at a problem isn&amp;rsquo;t always the way&amp;hellip;
sometimes you need to close your copmuter at 5PM and leave it shut until the next day. I&amp;rsquo;m
trying.&lt;/p&gt;
&lt;h2 id=&#34;forward-looking&#34;&gt;Forward Looking&lt;/h2&gt;
&lt;p&gt;One thing that might help with my above problem is I&amp;rsquo;m being forced into an office 3 days a week
starting July 1. None of my team is in the same state is I am, but I will have to drive 30
minutes to plug my computer into a different monitor to take calls and write code.&lt;/p&gt;
&lt;p&gt;On learning, I&amp;rsquo;ve been deep diving DBMS internals mostly through Andy Pavlo&amp;rsquo;s CMU lectures (so
good). I have been tinkering around with different AWS resoruces, GIT, read a book on SPARK,
learned about a python library called Polars, and continue to just consume a ton of information
on data engineering tools/topics.&lt;/p&gt;
&lt;p&gt;I love what I do everyday, I&amp;rsquo;m having a great time learning new technologies, and I&amp;rsquo;m grateful I
get to help others with my learnings.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>4 Months as an Analyst</title>
      <link>/musings/analyst/</link>
      <pubDate>Sat, 28 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>/musings/analyst/</guid>
      <description>&lt;h1 id=&#34;four-months-as-an-analyst-at-amazon&#34;&gt;Four Months as an Analyst at Amazon&lt;/h1&gt;
&lt;p&gt;My perspective switching to the Supply Chain BI team.&lt;/p&gt;
&lt;h2 id=&#34;a-little-background&#34;&gt;A little Background&lt;/h2&gt;
&lt;p&gt;The first four months have been interesting. Last week, Amazon laid off 18,000 people. Fortunately, nobody on my team or, I think, my whole org got the axe. This really hit home the fact that jobs come and go, and that I should be prioritizing employment that allows me to work on what I’m interested in and gain meaningful skills.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;four-months-as-an-analyst-at-amazon&#34;&gt;Four Months as an Analyst at Amazon&lt;/h1&gt;
&lt;p&gt;My perspective switching to the Supply Chain BI team.&lt;/p&gt;
&lt;h2 id=&#34;a-little-background&#34;&gt;A little Background&lt;/h2&gt;
&lt;p&gt;The first four months have been interesting. Last week, Amazon laid off 18,000 people. Fortunately, nobody on my team or, I think, my whole org got the axe. This really hit home the fact that jobs come and go, and that I should be prioritizing employment that allows me to work on what I’m interested in and gain meaningful skills.&lt;/p&gt;
&lt;p&gt;I’ve been working ~60-70 hours a week, mostly because I want to be good (I want to be the best) at my job, I’m learning a lot, and I’m about to transition to a BIE (given that 10 different people and our VP signs off that I am capable/deserve it). I have a deep desire to fulfill every request of me as quickly and accurately as possible which is both a good/bad trait. I’m learning how to prioritize my work and focus on one thing rather than bouncing around.&lt;/p&gt;
&lt;p&gt;While I would be lying if promotions or wide-spread recognition isn’t nice, I’ve found that individuals reaching out to tell me they appreciate my work and my attentiveness to detail means the most to me. I also derive a lot of meaning from the 1:1 conversations I have with the people I view as mentors.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-Personally, I’ve been enjoying spending time with friends (Even reaching out and
getting together with people I haven’t seen in years). I’ve also been actively
organizing and spending time with my family; this is something I didn’t do in
high school/college outside of major holidays, now in my early 20’s,
I’ve attempted to rectify this before it becomes a major regret in my 30s/40s+.

-I’ve been studying poker, I played for the first time at a casino recently:
my hands were shaking the entire time, and I lost ~$300 over the course of
3 hours. I got an espresso machine, and I’ve enjoyed using it
(I am not a coffee snob!).

-One of my child-hood friends got married. It was surreal remembering
playing pool basketball and watching Iron Man at my 4th grade
birthday party/sleepover, now he has a wife.

-I’ve been continuing to run my book club at work, this month we are reading
Talking to Strangers by Malcolm Gladwell.

-I’m working on being the best son, brother, friend, peer, and partner I can be.
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;what-has-been-not-so-appealingdifficult&#34;&gt;What has been not so appealing/difficult?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Creating reports, models, and queries for a new part of the supply chain that I’m less familiar with has been challenging. There are a variety of teams that create complex models that generate complex outputs to optimize different parts of our network. We consume these outputs into our Datawarehouse. I must interpret those results, figure out if they make sense, figure out if they make sense for our specific network, and then create visualizations that make those results easily accessible to PMs/Leadership.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Supply Chain Program Managers and their bosses each have a unique set of jargon and metrics for their silo/role in the supply chain. Understanding what everything means and what it means in the context of other jargon is quite complex!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We have close to 500 tables containing over a Petabyte of data on our Redshift Custer (Datawarehouse). Figuring out what tables are useful and accurate for my queries has taken months to develop. I now use a subset of 30-40 tables for almost all asks. 100/500 tables cover almost all asks from supply chain teams, the other 400 tables are used for the mist niche of requests and queried a handful of times per year. However, those tables still had to have long initial syncs and then subsequent data syncs (daily) that use up valuable/limited cluster resources.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I don’t like when other people’s reports break or when the numbers “aren’t quite right” for a dashboard. This usually entails digging through a ton of SQL (Sometimes poorly written) or trekking through all the steps in someone’s data pipeline, or worst of all digging into their scrappy solution where we are web-scraping into a an excel file and reformatting with VBA. At the end of the day, this is an important part of the job, but I feel like its thankless/non-value add work.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dealing with issues that have been kicked down the road: Poor organization of our tableau dashboards, scrappy process’ that few people actually know about/can fix, POOR DOCUMENTATION (Please add comments in your queries, an info tab in your dashboards, and links to your ETL process), poor data validation/inadequate testing, and improper error handling/alert systems/code reviews.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;what-have-i-enjoyed&#34;&gt;What have I enjoyed?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;I’m quite passionate about writing complex and performant SQL and helping to educate others do the same. I’ve written a couple documents about optimizing queries to scan less data and run faster, how to use the explain plan, and reached out to folks to help them write better queries. I’m going to be the mentor for one of our new interns starting next week, so I’ll be learning what the best way to get these concepts across quickly is. I’ve also written some stored procedures for database admin tasks, identified and fixed tables with improper sort/dist keys and retention policies, and adjusted poor performing ETL jobs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I’ve gotten to work on some fascinating projects. How do we position/spread inventory as close to customer demand as possible? How do we improve our buying/forecasting systems and our responses to overbuying of inventory? Automating hundreds of hours of manual data gathering and reporting into a succinct/performant report. Why are we sending more inventory to warehouses that already have a significant % of our on hand quantity of that item? Building on Native AWS using CDK (Infrastructure as Code) and maintaining the with a CI/CD pipeline. Using AWS Sagemaker, can we predict how often a particular item will be within X miles of our customer at the time of order? What factors are driving our fulfillment optimization system to plan specific paths that will be used to fulfill customer demand for a particular fulfillment set?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I work with some incredibly intelligent folks who I’ve learned a lot from.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I have very few meetings each week, and the meetings I do have are generally quite interesting; I can actively contribute.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I’ve never been told &lt;code&gt;not&lt;/code&gt; to pursue something I’m interested in. I am constantly presented the opportunity to learn new things; whenever we are looking into a new project that I’m interested in working on (Not time sensitive) or I have an idea, I don’t get the responses: “Let’s leave that to the data science team”, “Lets let the Sr. BIE handle this one”. It’s more along the lines of “Yeah go for it, reach out to _ for help, and don’t delete any of our AWS resources!”. At this point in my career, I’m very grateful for this.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;overall&#34;&gt;Overall&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;-I’d like to start writing on here more. I’m going to maintain these longer career posts
at their current cadence 1-2x per year, but I think I’ll start writing some
shorter technical pieces, maybe some about supply chain optimization problems,
and some personal thoughts I can look back on and see what I was thinking
as a 23 year old.
&lt;/code&gt;&lt;/pre&gt;
</content>
    </item>
    
    <item>
      <title>Year 1</title>
      <link>/musings/year_1/</link>
      <pubDate>Thu, 25 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>/musings/year_1/</guid>
      <description>&lt;h1 id=&#34;year-1-at-amazon&#34;&gt;Year 1 at Amazon&lt;/h1&gt;
&lt;p&gt;My perspective working at Amazon as my first job out of college.&lt;/p&gt;
&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;
&lt;p&gt;After graduating college in May of 2021, I took a job at Amazon. I also had offers from PepsiCo and a small logistics company, but I felt I would learn the most, have the biggest impact, and gain the most opportunities from working at Amazon.&lt;/p&gt;
&lt;p&gt;When people hear you work at Amazon, they think that you&amp;rsquo;re a part of everything. I&amp;rsquo;m not. Specifically, I work for AMAZON XL (AMXL). We are the heavy bulky/large parcel arm of our transportation network, delivering things like TVs, Treadmills, Mattresses, etc&amp;hellip; (The big stuff).&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;year-1-at-amazon&#34;&gt;Year 1 at Amazon&lt;/h1&gt;
&lt;p&gt;My perspective working at Amazon as my first job out of college.&lt;/p&gt;
&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;
&lt;p&gt;After graduating college in May of 2021, I took a job at Amazon. I also had offers from PepsiCo and a small logistics company, but I felt I would learn the most, have the biggest impact, and gain the most opportunities from working at Amazon.&lt;/p&gt;
&lt;p&gt;When people hear you work at Amazon, they think that you&amp;rsquo;re a part of everything. I&amp;rsquo;m not. Specifically, I work for AMAZON XL (AMXL). We are the heavy bulky/large parcel arm of our transportation network, delivering things like TVs, Treadmills, Mattresses, etc&amp;hellip; (The big stuff).&lt;/p&gt;
&lt;h2 id=&#34;my-job&#34;&gt;My Job&lt;/h2&gt;
&lt;p&gt;My role involved helping launch new warehouses, new connections between warehouses, changing times trucks would depart warehouses, other supply chain related changes, automating tasks for partner teams (Python, VBA, SQL), writing queries for partner teams (ETL, SQL, VBA), etc&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;accomplishments&#34;&gt;Accomplishments&lt;/h2&gt;
&lt;p&gt;Automated the analysis of launching new lanes between warehouses based on distance and number of packages that would be added to those trucks.&lt;/p&gt;
&lt;p&gt;Implementing a directed graph in Python, I evaluated every opportunity to connect an unconnected Origin-Destination pair given current network constraints.&lt;/p&gt;
&lt;p&gt;Saved my team and partner teams thousands of hours of work annually through a variety of automation projects and queries.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve done other cool things, but it&amp;rsquo;s difficult to describe some of them in a way that would make sense in the context of our supply chain in less than 400 words&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;what-i-dislike-about-amazon&#34;&gt;What I dislike about Amazon&lt;/h2&gt;
&lt;p&gt;My Value:&lt;/p&gt;
&lt;p&gt;-I feel like some of the best data visualizations, automation projects, and queries I&amp;rsquo;ve built are
underappreciated/underused&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-Disheartens me from continuing to go above and beyond for any other reason
than my own learning

-Maybe this is my own doing: failure to distribute, educate, and advertise
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There&amp;rsquo;s a lot of people:&lt;/p&gt;
&lt;p&gt;-Many upstream/downstream stake holders must sign off on every change making things slow and difficult to approve (Not necessarily anyone&amp;rsquo;s fault, probably unavoidable with the size of the org)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-It&#39;s difficult to loop all relevant stakeholders in on a change that will affect them
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Organizational Silos:&lt;/p&gt;
&lt;p&gt;-People are good at what they do but often have no clue what most others due&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-This leaves large gaps when people leave that may or may not have documentation to
clarify things with new hires

-This makes explaining things to other people cumbersome and time consuming
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;-It can be difficult to explain your wins/accomplishments to hiring managers/partner teams who aren&amp;rsquo;t deeply familiar with what you do&lt;/p&gt;
&lt;h2 id=&#34;what-i-like-about-amazon&#34;&gt;What I like about Amazon&lt;/h2&gt;
&lt;p&gt;There are lots of smart people to meet:&lt;/p&gt;
&lt;p&gt;-Most people genuinely try to do a decent job. The distribution is skewed toward smart/hardworking employees&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-The vast majority of people who have made it decently high up work hard, are smart, and
genuinely care about what they do.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Interesting projects/initiatives:&lt;/p&gt;
&lt;p&gt;-There are always interesting/high impact projects that you learn about and get involved in if you poke around enough&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-It&#39;s not very difficult or time consuming to develop a reputation as a hardworking
individual contributor

-Your large wins are broadcast to hundreds/thousands of people
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Career:&lt;/p&gt;
&lt;p&gt;-You have access to a variety of different jobs/orgs that you can switch to based on your interests/career trajectory&lt;/p&gt;
&lt;h2 id=&#34;the-future&#34;&gt;The Future&lt;/h2&gt;
&lt;p&gt;Overall, I&amp;rsquo;ve had a positive experience. After a little over a year, I&amp;rsquo;m being promoted to a business-analyst with the hopes of becoming a BIE or Data Scientist. I&amp;rsquo;ve opted for more of a tech path, but feel like I could transfer back into a supply chain management role should I want to&amp;hellip; I don&amp;rsquo;t know if I could do the other way around, thus, I&amp;rsquo;ve chosen this path to keep my options open.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m starting to understand that I know little in a large pool of people, working on a variety of different goals, with different ambitions, and an underlying directive to meet pre-defined metrics.&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>About</title>
      <link>/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/about/</guid>
      <description>&lt;h1 id=&#34;hi-there&#34;&gt;Hi there&lt;/h1&gt;
&lt;p&gt;My name is Sam, and, sometimes, I like to write.&lt;/p&gt;
&lt;div class=&#34;belief-animation-container&#34;&gt;
    &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 400 300&#34;&gt;
        &lt;defs&gt;
            &lt;g id=&#34;person&#34;&gt;
                &lt;circle r=&#34;5&#34; cy=&#34;-25&#34; fill=&#34;currentColor&#34;/&gt;
                &lt;line x1=&#34;0&#34; y1=&#34;-20&#34; x2=&#34;0&#34; y2=&#34;-10&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
                &lt;line x1=&#34;0&#34; y1=&#34;-10&#34; x2=&#34;-5&#34; y2=&#34;0&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
                &lt;line x1=&#34;0&#34; y1=&#34;-10&#34; x2=&#34;5&#34; y2=&#34;0&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
                &lt;line x1=&#34;0&#34; y1=&#34;-17&#34; x2=&#34;-5&#34; y2=&#34;-10&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
                &lt;line x1=&#34;0&#34; y1=&#34;-17&#34; x2=&#34;5&#34; y2=&#34;-10&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
            &lt;/g&gt;
            &lt;path id=&#34;curvePath&#34; d=&#34;M 50,200 Q 100,100 150,180 T 250,140 T 350,80&#34; fill=&#34;none&#34;/&gt;
        &lt;/defs&gt;
        
        &lt;line x1=&#34;50&#34; y1=&#34;250&#34; x2=&#34;350&#34; y2=&#34;250&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1&#34;/&gt;
        &lt;line x1=&#34;50&#34; y1=&#34;50&#34; x2=&#34;50&#34; y2=&#34;250&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1&#34;/&gt;
        
        &lt;path d=&#34;M 50,200 Q 100,100 150,180 T 250,140 T 350,80&#34;
              fill=&#34;none&#34;
              stroke=&#34;currentColor&#34;
              stroke-width=&#34;2&#34;/&gt;
        &lt;use href=&#34;#person&#34;&gt;
            &lt;animateMotion
                id=&#34;personMotion&#34;
                dur=&#34;12s&#34;
                repeatCount=&#34;indefinite&#34;
                keyPoints=&#34;0;0.3;0.2;0.5;0.4;0.7;0.44;0.44;0.44&#34;
                keyTimes=&#34;0;0.2;0.3;0.5;0.6;0.8;0.9;0.95;1&#34;
                calcMode=&#34;linear&#34;
                rotate=&#34;auto&#34;
                begin=&#34;indefinite&#34;&gt;
                &lt;mpath href=&#34;#curvePath&#34;/&gt;
            &lt;/animateMotion&gt;
        &lt;/use&gt;
    &lt;/svg&gt;
&lt;/div&gt;
&lt;script&gt;
document.addEventListener(&#39;DOMContentLoaded&#39;, function() {
    
    const observer = new IntersectionObserver((entries) =&gt; {
        entries.forEach(entry =&gt; {
            
            const animation = entry.target.querySelector(&#39;#personMotion&#39;);
            if (entry.isIntersecting) {
                
                animation.beginElement();
            } else {
                animation.endElement();
                animation.setAttribute(&#39;begin&#39;, &#39;indefinite&#39;);
            }
        });
    }, {
        
        threshold: 0.2  
    });
    
    document.querySelectorAll(&#39;.belief-animation-container&#39;).forEach(container =&gt; {
        observer.observe(container);
    });
});
&lt;/script&gt;
&lt;p&gt;My hobbies are chess, poker, riding bikes, hiking, computer science, and being a good person.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;hi-there&#34;&gt;Hi there&lt;/h1&gt;
&lt;p&gt;My name is Sam, and, sometimes, I like to write.&lt;/p&gt;
&lt;div class=&#34;belief-animation-container&#34;&gt;
    &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 400 300&#34;&gt;
        &lt;defs&gt;
            &lt;g id=&#34;person&#34;&gt;
                &lt;circle r=&#34;5&#34; cy=&#34;-25&#34; fill=&#34;currentColor&#34;/&gt;
                &lt;line x1=&#34;0&#34; y1=&#34;-20&#34; x2=&#34;0&#34; y2=&#34;-10&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
                &lt;line x1=&#34;0&#34; y1=&#34;-10&#34; x2=&#34;-5&#34; y2=&#34;0&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
                &lt;line x1=&#34;0&#34; y1=&#34;-10&#34; x2=&#34;5&#34; y2=&#34;0&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
                &lt;line x1=&#34;0&#34; y1=&#34;-17&#34; x2=&#34;-5&#34; y2=&#34;-10&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
                &lt;line x1=&#34;0&#34; y1=&#34;-17&#34; x2=&#34;5&#34; y2=&#34;-10&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34;/&gt;
            &lt;/g&gt;
            &lt;path id=&#34;curvePath&#34; d=&#34;M 50,200 Q 100,100 150,180 T 250,140 T 350,80&#34; fill=&#34;none&#34;/&gt;
        &lt;/defs&gt;
        
        &lt;line x1=&#34;50&#34; y1=&#34;250&#34; x2=&#34;350&#34; y2=&#34;250&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1&#34;/&gt;
        &lt;line x1=&#34;50&#34; y1=&#34;50&#34; x2=&#34;50&#34; y2=&#34;250&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;1&#34;/&gt;
        
        &lt;path d=&#34;M 50,200 Q 100,100 150,180 T 250,140 T 350,80&#34;
              fill=&#34;none&#34;
              stroke=&#34;currentColor&#34;
              stroke-width=&#34;2&#34;/&gt;
        &lt;use href=&#34;#person&#34;&gt;
            &lt;animateMotion
                id=&#34;personMotion&#34;
                dur=&#34;12s&#34;
                repeatCount=&#34;indefinite&#34;
                keyPoints=&#34;0;0.3;0.2;0.5;0.4;0.7;0.44;0.44;0.44&#34;
                keyTimes=&#34;0;0.2;0.3;0.5;0.6;0.8;0.9;0.95;1&#34;
                calcMode=&#34;linear&#34;
                rotate=&#34;auto&#34;
                begin=&#34;indefinite&#34;&gt;
                &lt;mpath href=&#34;#curvePath&#34;/&gt;
            &lt;/animateMotion&gt;
        &lt;/use&gt;
    &lt;/svg&gt;
&lt;/div&gt;
&lt;script&gt;
document.addEventListener(&#39;DOMContentLoaded&#39;, function() {
    
    const observer = new IntersectionObserver((entries) =&gt; {
        entries.forEach(entry =&gt; {
            
            const animation = entry.target.querySelector(&#39;#personMotion&#39;);
            if (entry.isIntersecting) {
                
                animation.beginElement();
            } else {
                animation.endElement();
                animation.setAttribute(&#39;begin&#39;, &#39;indefinite&#39;);
            }
        });
    }, {
        
        threshold: 0.2  
    });
    
    document.querySelectorAll(&#39;.belief-animation-container&#39;).forEach(container =&gt; {
        observer.observe(container);
    });
});
&lt;/script&gt;
&lt;p&gt;My hobbies are chess, poker, riding bikes, hiking, computer science, and being a good person.&lt;/p&gt;
&lt;p&gt;I am currently working as a Data Engineer at Amazon.&lt;/p&gt;
&lt;p&gt;My work includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AWS (Redshift, SNS/SQS, Glue, EMR, Lambda, etc..) managed via CDK&lt;/li&gt;
&lt;li&gt;Database Administration/Maintenance (Multiple Redshift Clusters, RDS, and Dynamo DB)&lt;/li&gt;
&lt;li&gt;I read/write a lot of SQL (mostly in Redshift which is a fork of Postgres or EMR using the Spark SQL API) also Python, TypeScript, and Java&lt;/li&gt;
&lt;li&gt;Creating batch &amp;amp; streaming data pipelines, data modeling&lt;/li&gt;
&lt;li&gt;Develop LP models, simulations, etc&amp;hellip; to optimize small aspects of our supply chain&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What I&amp;rsquo;m learning about/deep diving right now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Writing/Understanding &lt;a href=&#34;https://cs3110.github.io/textbook/cover.html&#34;&gt;OCaml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://aws.amazon.com/certification/certified-advanced-networking-specialty/&#34;&gt;AWS Advanced Networking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Trying to finish &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Count_of_Monte_Cristo&#34;&gt;The Count of Monte Cristo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;My stand up comedy routine&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;relevant-links&#34;&gt;Relevant Links:&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.linkedin.com/in/samschneider8/&#34;&gt;My LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://optimistic-booth-059a6b.netlify.app/&#34;&gt;My Cycling Team&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;“I cannot remember the books I&amp;rsquo;ve read any more than the meals I have eaten; even so, they have made me.”
― Ralph Waldo Emerson&lt;/p&gt;
</content>
    </item>
    
  </channel>
</rss>
