<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Sam Breed&apos;s modest personal website.</title><description>Welcome to my website!</description><link>https://sambreed.dev/</link><item><title>Building With Intent</title><link>https://sambreed.dev/writing/2026/intent/</link><guid isPermaLink="true">https://sambreed.dev/writing/2026/intent/</guid><description>Figma comp to working site in 45 minutes, and other workflow notes</description><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;m writing this from inside &lt;a href=&quot;https://www.augmentcode.com/intent&quot;&gt;Augment Intent&lt;/a&gt;. I&apos;ve mentioned it before (&lt;a href=&quot;/writing/2026/chrome-cool-copy&quot;&gt;Chrome Cool Copy&lt;/a&gt;, &lt;a href=&quot;/writing/2025/little-better-vector-search&quot;&gt;AgentDB search migration&lt;/a&gt;) but I did a &lt;a href=&quot;https://www.youtube.com/watch?v=Ednpn1mjKiY&quot;&gt;livestream&lt;/a&gt; recently and wanted to get into the actual workflow.&lt;/p&gt;
&lt;h2&gt;Figma comp, 45 minutes&lt;/h2&gt;
&lt;p&gt;We had a full Figma design for a marketing site. Ten pages, a design system with custom fonts and gradients, responsive layouts, the works. The kind of thing where you&apos;d normally spend a day or two squinting at the inspector panel, copying hex codes, and nudging padding values until it looks right.&lt;/p&gt;
&lt;p&gt;Intent has a Figma MCP integration. The MCP server pulls the design tokens, spacing values, and component structure directly into the workspace context, so the agents aren&apos;t guessing at the design. They&apos;re reading it. Fonts, colors, breakpoints, layer hierarchy. It all comes in as structured data the agents can actually use.&lt;/p&gt;
&lt;p&gt;I opened a workspace, pointed it at the Figma file, and let the agents scaffold the pages. Forty-five minutes later I had a working build that matched the comp most of the way there. Not pixel-perfect, but close enough that the remaining work was tweaking, not rebuilding.&lt;/p&gt;
&lt;h2&gt;What I&apos;ve learned about using it well&lt;/h2&gt;
&lt;p&gt;The Figma project worked because I set it up right. I seed every workspace with my preferences and opinions before delegating anything. The coordinator drafts the spec, but because I&apos;ve front-loaded good context, it has real material to work with. Garbage in, garbage out still applies.&lt;/p&gt;
&lt;p&gt;The work that goes smoothest fits in a single PR. You can go bigger, hundreds of files, tens of thousands of lines, but those need more planning and are harder to evaluate. When the plan starts contradicting itself, I merge what I have and start a fresh workspace. Knowing when to stop and reset is a skill.&lt;/p&gt;
&lt;p&gt;Context precision matters more than volume. A million tokens is a stack of phone books two meters tall. You don&apos;t need all that. Less but accurate context means faster responses and less wandering.&lt;/p&gt;
&lt;h2&gt;Writing this post&lt;/h2&gt;
&lt;p&gt;An agent is doing the typing right now. The editorial decisions are still mine. I cut two sections from an earlier draft because they were boring, and I rewrote the Figma section three times because the agents kept making it sound like a press release. The work shifted from typing to editing, and I spend more time thinking about what I actually want to say than I used to.&lt;/p&gt;</content:encoded></item><item><title>Cool Copy Chrome Extension</title><link>https://sambreed.dev/writing/2026/chrome-cool-copy/</link><guid isPermaLink="true">https://sambreed.dev/writing/2026/chrome-cool-copy/</guid><description>I wrote a pretty good junk drawer extension</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Winter break 2025 will be remembered as the time of vibe coding. &lt;a href=&quot;https://github.com/vercel-labs/just-bash&quot;&gt;Several&lt;/a&gt; &lt;a href=&quot;https://github.com/amilich/isometric-city&quot;&gt;noteworthy&lt;/a&gt; &lt;a href=&quot;https://x.com/rauchg/status/2004621125129830729&quot;&gt;projects&lt;/a&gt; were launched by a tidal wave of claude code sessions over the holidays.&lt;/p&gt;
&lt;p&gt;And I wrote a pretty good &lt;a href=&quot;/wiki/computers/junk-drawer&quot;&gt;junk drawer&lt;/a&gt; chrome extension, &lt;a href=&quot;https://github.com/wookiehangover/chrome-cool-copy&quot;&gt;Chrome Cool Copy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Recently I switched back to Chrome and found myself reaching for a few &quot;missing&quot; features. So, of course, it started modestly. A chrome extension to add a simple feature, well, two simple features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Copy link to current page&lt;/li&gt;
&lt;li&gt;Copy that link as markdown&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Things progressed from there. I had some more features I wanted to add:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Universal dark mode / page theme tweaks&lt;/li&gt;
&lt;li&gt;Smart copy elements&lt;/li&gt;
&lt;li&gt;Reader mode / page clips&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;and because that&apos;s all a lot of keyboard shortcuts to remember,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Command palette&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then, simply because I could, I added the now-ubiquitous AI-browser must-have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chat with the current page&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of course, chatting with the current page wasn&apos;t enough. What if I could prompt an agent to write code to modify the current page? Like a greasemonkey script, but modern and dynamic. Finally hackernews will bend to my will and open tabs on new pages!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agent-authored JavaScript &quot;boosts&quot; for any page&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By now I had reached the &quot;hedonic agentic treadmill phase&quot; of cyberpsychosis. Reader and clips need some much needed bells and whistles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Highlights and comments&lt;/li&gt;
&lt;li&gt;text-to-speech mode&lt;/li&gt;
&lt;li&gt;Clip elements as screenshots, text, and html content&lt;/li&gt;
&lt;li&gt;Save images&lt;/li&gt;
&lt;li&gt;Sharing by republishing to my website&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Coding feels like it has completely changed over the past year. If you can imagine and describe a feature, you can develop it. I&apos;ve been working closely with &lt;a href=&quot;https://www.augmentcode.com/&quot;&gt;Augment&lt;/a&gt; on new ways to plan and orchestrate agents and my chrome extension would not have nearly as many features without them!&lt;/p&gt;</content:encoded></item><item><title>Links, Fall 2025</title><link>https://sambreed.dev/writing/2025/fall-links/</link><guid isPermaLink="true">https://sambreed.dev/writing/2025/fall-links/</guid><description>Links from the end of the internet</description><pubDate>Wed, 31 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Posting this very very late but this is a good batch from Sept-Dec 2025.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I started following this project from an X thread wherein a very talented developer used to working in Three.js moved over to the Godot framework for a week and ended up writing a very impressive x-wing fighter game.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Lunakepio/x-wing-godot&quot;&gt;x-wing-godot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;sandboxes, we&apos;ve got &apos;em
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Katakate/k7&quot;&gt;Katakate/k7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/anthropic-experimental/sandbox-runtime&quot;&gt;anthropic/sandbox-runtime&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Long-running background execution has long been an area marred by shitty DX. Kudos to Vercel for trying out something novel to fix it.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://useworkflow.dev/&quot;&gt;Workflow DevKit - Make any TypeScript Function Durable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;boy do people have really strong feelings about directives! All metaprogramming is fine up until the point it isn&apos;t, and it&apos;s on you to know when that is. So, like, do it if there&apos;s a reasonable payoff.&lt;/li&gt;
&lt;li&gt;The syntax doesn&apos;t bother me because javascript decorators have been in contention for a decade and only apply to classes. Frameworks and typescript already rely on compiler tricks to do many things, so I&apos;m not clutching my pearls over this.&lt;/li&gt;
&lt;li&gt;My only complaint is that its missing Vite support!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;jhey has been making wonderful ux demos for years and is kind enough to open source them all on codepen.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/jh3yy/status/1789359851094614449&quot;&gt;jhey ʕ•ᴥ•ʔ on X: &quot;Scroll masking with CSS scroll animation as a progressive enhancement ⭐️ .scroller [...]&quot; / X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I always learn something new when I spend time picking through the examples he shares, painstakingly extracting the most relevant parts of the demos.
&lt;ul&gt;
&lt;li&gt;here&apos;s my &lt;a href=&quot;https://gist.github.com/wookiehangover/da0723f678028bae9c9cf8827760b900&quot;&gt;bare bones adaptation of the scroll fog effect&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I&apos;ve been thinking about what my ideal database setup for rapid development looks like in 2025, and pgschema feels like one of the last missing pieces
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pgschema.com/quickstart&quot;&gt;Quickstart - pgschema&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Mediapipe hand tracking interfaces are cool but unfortunately useless in practive
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/rathniley/status/1988902798390341823&quot;&gt;Nathan Riley on X: &quot;We&apos;re getting closer to Minority Report interactions everyday, the sound design is so satisfying too 🤤 Amazing work by @sho4771k Live → https://t.co/gogF2BF4TG #webgl #threejs #touchdesigner https://t.co/mPgcI6G9SH&quot; / X&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cursed CSS knowledge
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/the-weird-parts-of-position-sticky/&quot;&gt;The Weird Parts of position: sticky; – Frontend Masters Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Linux From Scratch for GPT 2. This is essential reading for anyone in tech grappling with the changes of the last few years. What are models made of and how do we run them? Just like how small scale experiments can teach you about physics, growing a small model on your own GPUs is the best way to learn how the parts fit together
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/karpathy/nanochat/discussions/1&quot;&gt;nanochat&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I was skeptical of the usefulness of MCP last year, then warmed to it over time. The pendulum has swung back the other way as people discover unbridled proliferation of tool definitions quickly pollutes context. Short of automatic discovery, delegating to subagents with access to the &lt;em&gt;right tools&lt;/em&gt; is the best current solution.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pulsemcp.com/posts/agentic-mcp-configuration&quot;&gt;Agentic MCP Configuration: A Better Solution to Tool Overload | PulseMCP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Maybe some context compaction ideas in here? In practice this is a hard problem that nobody does great at.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/papers/2510.24699&quot;&gt;Paper page - AgentFold: Long-Horizon Web Agents with Proactive Context Management&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;More and more rumblings like this in late 2025. Watch this space.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.joemag.dev/2025/10/the-new-calculus-of-ai-based-coding.html&quot;&gt;Joe Magerramov&apos;s blog: The New Calculus of AI-based Coding&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Bullish
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.luminarycloud.com/blog/a-new-structural-advantage-how-physics-ai-is-transforming-spacecraft-design-at-northrop-grumman&quot;&gt;A New Structural Advantage: How Physics AI Is Transforming Spacecraft Design at Northrop Grumman | Luminary Cloud&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Careerism isn&apos;t great but keeping pace with titles and definitions never hurts
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.humaninvariant.com/blog/titles&quot;&gt;Title Arbitrage as Status Engineering&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Early internet nostalgia
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gyford.com/phil/writing/2025/10/15/1995-internet/&quot;&gt;My first months in cyberspace (Phil Gyford’s website)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Many such cases where being consistently wrong doesn&apos;t get you fired
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://tedium.co/2025/10/25/web-dead-predictions-george-colony/&quot;&gt;The Man Who Keeps Predicting The Web’s Death&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Any yet
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://timdettmers.com/2025/12/10/why-agi-will-not-happen/&quot;&gt;Why AGI Will Not Happen — Tim Dettmers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;See also
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bloomberry.com/blog/i-analyzed-180m-jobs-to-see-what-jobs-ai-is-actually-replacing-today/&quot;&gt;I analyzed 180M jobs to see what jobs AI is actually replacing today&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Finally, a good read
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.generalist.com/p/observations-on-people-the-world&quot;&gt;Observations on People, the World, and Everything Else&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, late summer 2025</title><link>https://sambreed.dev/writing/2025/links-august-sept/</link><guid isPermaLink="true">https://sambreed.dev/writing/2025/links-august-sept/</guid><description>links and commentary</description><pubDate>Tue, 30 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;ve been flipping between different browsers this year and have been accumulating links for a few months. It&apos;s halfway through October already but I&apos;m backdating this.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;two markdown things from Vercel. Markdown is tricky to get right and it often means customizing an existing parser and renderer to get it right. Streamdown does that for you with sane defaults meant for streaming.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/vercel/markdown-sanitizers/tree/main/markdown-to-markdown-sanitizer&quot;&gt;markdown-sanitizers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://streamdown.ai/&quot;&gt;Streamdown&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;normally I go for motion.dev but these GSAP components are exceptionally clever and there&apos;s lots of them
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reactbits.dev/&quot;&gt;React Bits - Animated UI Components For React&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;another design trend made easy
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dither.floriankiem.com/&quot;&gt;Dither Plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a &lt;a href=&quot;http://codepen.io/simeydotme/pen/ZEgJoXB&quot;&gt;neat button&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;a &lt;a href=&quot;https://github.com/openstatusHQ/data-table-filters&quot;&gt;really good data table&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;web browsers continue to grow to eat every category of application, including video
&lt;ul&gt;
&lt;li&gt;https://github.com/Vanilagy/mediabunny&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;this is cool and not easy to build from scratch
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://tldraw.dev/blog/tldraw-sdk-4-0&quot;&gt;Announcing tldraw SDK 4.0 - tldraw: Build whiteboards in React with the tldraw SDK&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I don&apos;t tend to go in for shock-and-awe changes to time honored workflows, but I have worked with folks who swear by stacked branches so maybe it&apos;s good and I&apos;m missing out.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://jj-vcs.github.io/jj/latest/tutorial/&quot;&gt;Tutorial and bird&apos;s eye view - Jujutsu docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I&apos;m rarely tempted into doing anything so complicated as to need something like this, but in the rare case that does deem it necessary, this seems like a good option
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.cloudflare.com/capnweb-javascript-rpc-library/&quot;&gt;Cap&apos;n Web: a new RPC system for browsers and web servers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ai maths
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://thinkingmachines.ai/blog/modular-manifolds/&quot;&gt;Modular Manifolds - Thinking Machines Lab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;again this is in the category of things that I would fuck with if I were making things intentionally difficult or absurdly robust.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://flox.dev/docs/&quot;&gt;Introduction - Flox Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;a nice logger:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://logtape.org/&quot;&gt;LogTape&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I hope this doesn&apos;t link rot! it&apos;s a great little game.
&lt;ul&gt;
&lt;li&gt;https://x.com/abeto_co/status/1971219002614779991&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://t.co/FNKiXFPk2K&quot;&gt;https://messenger.abeto.co&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;databases&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I haven&apos;t tried this strategy but I like the idea: consume every possible stripe webhook and mirror their data in your database. feels much more sane than having a split-brained app with important details sequestered away in a thing that says to not use it as a database
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://supabase.com/blog/stripe-engine-as-sync-library&quot;&gt;Stripe-To-Postgres Sync Engine as standalone Library&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;next postgres db I spin up will be on planetscale.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://planetscale.com/blog/planetscale-for-postgres&quot;&gt;Announcing PlanetScale for Postgres — PlanetScale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I&apos;ve wanted a reason to use them for years but I rarely go for MySQL over Postgres, and until I wrote this sentence I had never really thought about why. MySQL was the first database I used heavily as programmer. I started using Postgres in the early 2010s and then again in the 2020s when I changed jobs and started building greenfield projects more frequently.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/spullara/agile-database-schema-migration-tool-for-java-379c8db8b248&quot;&gt;Agile database schema migration tool for Java | by Sam Pullara | spullara | Medium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;another piece of benevolent open source from Vercel, this time to help clean up database connections when you&apos;re on their fluid compute platform.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://vercel.com/blog/the-real-serverless-compute-to-database-connection-problem-solved&quot;&gt;The real serverless compute to database connection problem, solved - Vercel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vercel.com/docs/functions/functions-api-reference/vercel-functions-package#attachdatabasepool&quot;&gt;&lt;code&gt;attachDatabasePool&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;an aside: I really like the Vercel fluid compute runtime. In many ways, it&apos;s like the web infrastructure that I built at Credit Karma: a Node.js execution layer that&apos;s quasi-ephemeral and scales gracefully. There are many differences but the end result has the same quality: you push your code and it runs without issue.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;caro&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I have been deep into the works of Robert Caro since 2022 after I first spotted the doorstopper-size copy of The Power Broker in my brother&apos;s Brooklyn office. Little did I know that I was entering a golden age of Caro readership, with lots of Caro-adjacent podcast media to consume in the years ahead. In addition to the thousands pages of reading. First, a link from my co-worker &lt;a href=&quot;https://kwokchain.com&quot;&gt;Kevin Kwok&lt;/a&gt; of a interview with Caro and another of my favorite authors:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.robertcaro.org/post/an-interview-with-robert-caro-and-kurt-vonnegut&quot;&gt;An Interview With Robert Caro and Kurt Vonnegut&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This got me thinking about what had steered me into this rabbit hole, and the Dwarkesh post on the LBJ bios was probably the next thing in the timeline that led me on.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.dwarkesh.com/p/lyndon-johnson&quot;&gt;Lessons from The Years of Lyndon Johnson by Robert Caro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;As luck would have it, I had finished reading the book just in time for this book club series to start and I listened to every one of these running laps around the lake at Stanford after work.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://99percentinvisible.org/power-broker/&quot;&gt;The 99% Invisible Breakdown: The Power Broker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Little Better Vector Search</title><link>https://sambreed.dev/writing/2025/little-better-vector-search/</link><guid isPermaLink="true">https://sambreed.dev/writing/2025/little-better-vector-search/</guid><description>improvements to my vector search</description><pubDate>Thu, 07 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import SearchForm from &quot;~/components/search/SearchForm.astro&quot;;&lt;/p&gt;
&lt;p&gt;I recently upgraded the search on my website to use &lt;a href=&quot;https://agentdb.dev&quot;&gt;AgentDB&lt;/a&gt; instead of a JSON file with the embeddings and vibe-coded dot products.&lt;/p&gt;
&lt;p&gt;Try it out:&lt;/p&gt;
&lt;p&gt;The search feature had been a broken and unnoticed for a while. I have very little tracking or and zero error monitoring in place, so when the api key to make the embeddings had stopped working I was unaware anything was amiss.&lt;/p&gt;
&lt;p&gt;When I eventually noticed and got around to fixing it, I decided that the dead-simple JSON file setup was perhaps a bit too gritty and needed to be brought closer to something I might actually build and tell people about.&lt;/p&gt;
&lt;p&gt;Now that it&apos;s easier than ever to add low-effort features, it felt like a good time to give the search backend and upgrade.&lt;/p&gt;
&lt;p&gt;Enter &lt;a href=&quot;https://agentdb.dev&quot;&gt;AgentDB&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;AgentDB was a good fit for my needs: easy to host, difficult to break, generous free usage limits, and support for vector search.&lt;/p&gt;
&lt;p&gt;Since we live in an age of wonders, the migration path was easy. I connected the AgentDB MCP server to &lt;a href=&quot;https://www.augmentcode.com&quot;&gt;Augment&lt;/a&gt; and asked politely for it to draft a schema and then create the table. Then I had Augment migrate the old embeddings, update the generation script, and change the search implementation to use the new table.&lt;/p&gt;
&lt;h2&gt;Setup&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;create a uuid to namespace the table&lt;/li&gt;
&lt;li&gt;generate a schema and create tables&lt;/li&gt;
&lt;li&gt;import existing embeddings into the d
b&lt;/li&gt;
&lt;li&gt;query the db using &lt;code&gt;vec_distance_cosine()&lt;/code&gt; to filter results&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It was straightforward to replace the crude cosign similarity against the JSON file with a database query that uses a native cosign distance. At the pace I update my website, I&apos;ll be able to operate comfortable for decades before I need to worry about storage or compute for similarity searches.&lt;/p&gt;</content:encoded></item><item><title>Links, July 2025</title><link>https://sambreed.dev/writing/2025/links-july/</link><guid isPermaLink="true">https://sambreed.dev/writing/2025/links-july/</guid><description>refreshingly hand-curated links, zero AI this month</description><pubDate>Thu, 31 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I haven&apos;t posted an AI-generated video since &lt;a href=&quot;/writing/2023/links-november-2023&quot;&gt;November 2023&lt;/a&gt; and it is remarkable how far things have come since SD Video. For several years I&apos;ve heard rumors that Google had the best video and image gen models but was sitting on them for various Google-y reasons.&lt;/p&gt;
&lt;p&gt;Google finally started shipping the good models this year, and let me tell you, Veo 3 is very impressive, especially given where the SOTA was less than 2 years ago. From my POV, video models are improving faster than the equivalent jumps in image models, which suggests fully coherent, guidable video models coming online in the near future.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://x.com/sambreed/status/1947478698455900407&quot;&gt;I wrote about the process&lt;/a&gt; of making video above with Reve and Veo 3. Can&apos;t wait to see what&apos;s in store.&lt;/p&gt;
&lt;p&gt;Anyway, so I switched browsers again, going from Arc to Dia as my daily driver, once again shifting my tab habits in subtle and hard-to-predict ways. The lack of spaces or folders in Dia made the leftover articles and interesting pages stand out, needing to be closed or moved on. Then I remembered that I have a reliable note taking system and I could just start tossing the links in. Or maybe I found better content this month, who&apos;s to say.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://worksinprogress.co/issue/the-maintenance-race/&quot;&gt;The Maintenance Race - Works in Progress Magazine&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Almost sensing that the next preview chapter was about to drop, this piece from Stewart Brand was on my mind&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.notboring.co/p/ramp-and-the-ai-opportunity&quot;&gt;Ramp and the AI Opportunity - Not Boring by Packy McCormick&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Packy McCormick&apos;s writing is really great here. I&apos;ve been enjoying his podcast over the past few months and finally circled back to this piece. It makes me want to be more ambitious with what I build.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://joincolossus.com/article/flounder-mode/&quot;&gt;Flounder Mode - Colossus&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I had my own run-in with Kevin Kelley a few months ago which led me write &lt;a href=&quot;/writing/2025/39-lessons&quot;&gt;39 Lessons&lt;/a&gt; and I had been maybe subconsciously avoiding the Flounder Mode piece because I didn&apos;t want it to undercut my own encounter with him. So I&apos;ve been listening to Packy&apos;s podcast a few times a week while I go running around Stanford campus and I decided to give the episode with Brie Wolfson a try, and got over trying to avoid this piece, which is worth a read.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hipcityreg.substack.com/p/a-tale-of-two-vaticans-or-openai?r=joqd&amp;#x26;utm_medium=ios&amp;#x26;triedRedirect=true&quot;&gt;A tale of two Vaticans (or, OpenAI building an unholy spirit)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;another piece I found through Packy.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kwokchain.com/2025/07/15/the-halo-effect/&quot;&gt;The HALO Effect - kwokchain&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;My colleague Kevin spots the emergent pattern of not-really-acquihires that have come to prominence in the post-ZIRP AI boom talent wars.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;cool chair &lt;a href=&quot;https://store.hermanmiller.com/living-room-furniture-lounge-chairs-ottomans/wireframe-chair/100602933.html?lang=en_US&amp;#x26;sku=100602933&quot;&gt;Wireframe Chair – Herman Miller Store&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Rabbit holes&lt;/h2&gt;
&lt;p&gt;One of the most rewarding parts of working with AI agents is that they make it easy to pull on loose threads to see where they go.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Browsers. I&apos;ve been wanting to understand the current strategy behind the rush to create AI-infused web browsers.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bench.io/artifact/fcc47221-8a28-46e9-9192-72766f803f76&quot;&gt;The History of Google Chrome Browser: Primary Sources and Key Player Accounts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bench.io/artifact/2100e60b-f59f-4554-bfca-923f670faebb&quot;&gt;AI Browsers Research: Official Statements from The Browser Company, Perplexity, and OpenAI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bench.io/artifact/e8389d47-6195-4f1e-811d-d12233ba2a65&quot;&gt;Social Browsers Research: Flock and Rockmelt (2005-2013)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bench.io/artifact/7b7174da-b2c0-4768-86dc-0c55b7041bf3&quot;&gt;AI Browsers vs Social Browsers: Why This Time Might Be Different - Strategic Analysis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bench.io/artifact/e8657555-d6c8-4422-bc23-c9a5942463e5&quot;&gt;Stripe Usage-Based Billing Features and Fixed Allocation Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bench.io/artifact/19acf0c1-fe97-4e0f-9503-ea035881bd4c&quot;&gt;The Best and Most Iconic 360 Flips in Skateboarding History&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;This was a fun one. @theo posted about none of the AI models having good responses to this, and these days I can&apos;t look at a potential research/tool-use benchmark and not throw it into Bench.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Dev&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.unicorn.studio/&quot;&gt;unicorn.studio&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;really impressive work on display here&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencut.app/&quot;&gt;opencut.app&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;if there&apos;s a theme, it&apos;s that video editing is coming to the browser. or rather, it&apos;s already here and we&apos;re still reckoning with how to build for it.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencut.app/roadmap&quot;&gt;Roadmap - OpenCut&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ai.google.dev/gemini-api/docs/video-understanding&quot;&gt;Video understanding&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;we live in the age of wonders&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Three cool 3D things
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codepen.io/VoXelo/full/jENavYV&quot;&gt;3D Pyramid Animation with Three.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dimsum007.resn.global/&quot;&gt;Resn — Dim Sum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/emollick/status/1949306100278263912?s=61&quot;&gt;Ethan Mollick on using LLMs to code sci-fi dashboards&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://yorickpeterse.com/articles/three-http-versions-later-forms-are-still-a-mess/&quot;&gt;Three HTTP versions later, forms are still a mess&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tanstack/db&quot;&gt;tanstack/db&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I&apos;ve been slow to come around to tanstack. Not because of any particular bias against it; I simply haven&apos;t been in a good spot to adopt it in any projects over the last few years&lt;/li&gt;
&lt;li&gt;which led me to &lt;a href=&quot;https://electric-sql.com/&quot;&gt;ElectricSQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kibty.town/blog/arc/&quot;&gt;gaining access to anyones browser without them even visiting a website - eva&apos;s site&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;an animated cat follows your cursor around the page. also discusses security problems in Arc. Using Firebase seems correlated to lazy security.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andrewkchan.dev/posts/crawler.html&quot;&gt;Crawling a billion web pages in just over 24 hours&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;good tips in here&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2506.21734&quot;&gt;[2506.21734] Hierarchical Reasoning Model&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I can never tell with these papers if they mean something or not, but I&apos;ll keep reading them when they float across my transom.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://manus.im/blog/Context-Engineering-for-AI-Agents-Lessons-from-Building-Manus&quot;&gt;Context Engineering for AI Agents: Lessons from Building Manus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.chrome.com/blog/masonry-update&quot;&gt;Brick by brick: Help us build CSS Masonry  |  Blog  |  Chrome for Developers&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;after many years of waiting, it seems like native CSS Masonry is finally materializing&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, June 2025</title><link>https://sambreed.dev/writing/2025/links-june/</link><guid isPermaLink="true">https://sambreed.dev/writing/2025/links-june/</guid><description>browser archaeology strikes again</description><pubDate>Wed, 18 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;ve been accumulating browser tabs again, and &lt;a href=&quot;https://bench.io/&quot;&gt;Bench&lt;/a&gt; makes it easy to turn my browser upside down and shake out all the good stuff I&apos;ve looked at recently. AI is like a dirt bike for the mind.&lt;/p&gt;
&lt;h2&gt;AI and code&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://pitchbook.com/news/articles/y-combinator-is-going-all-in-on-ai-agents-making-up-nearly-50-of-latest-batch&quot;&gt;Y Combinator is going all-in on AI agents, making up nearly 50% of latest batch&lt;/a&gt; · 67 out of 144 startups are AI agent companies. That&apos;s... a lot.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I didn&apos;t actually read any of this, but rather spend ~$3 for Bench to do it all for me: &lt;a href=&quot;https://bench.io/artifact/5e8de496-2ae2-4784-a085-c6f4002eede8&quot;&gt;Y Combinator Spring 2025 Batch: Comprehensive Market Analysis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.infoworld.com/article/3489925/github-survey-finds-nearly-all-developers-using-ai-coding-tools.html&quot;&gt;GitHub survey finds nearly all developers using AI coding tools&lt;/a&gt; · 97% of developers use AI tools but only 38% of US orgs encourage it. Classic corporate lag.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Again, this isn&apos;t really me browsing. This is an eval for Bench: &lt;a href=&quot;https://bench.io/artifact/4367fca7-9c52-497d-9ba5-3a0b2f1cb750&quot;&gt;What Top Developers Want in 2025&lt;/a&gt;. Prompt here:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;Analyze the latest Stack Overflow Developer Survey, GitHub&apos;s State of the Octoverse, and other major developer research reports. Create a comprehensive report on &apos;What Top Developers Want in 2025&apos; covering compensation expectations, preferred tech stacks, work-life balance priorities, and career development preferences.
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://fly.io/blog/youre-all-nuts/&quot;&gt;My AI Skeptic Friends Are All Nuts&lt;/a&gt; · Tired of AI skepticism, makes the case that modern agents can actually do useful things like interact with Git and run tools. The discourse is exhausting but this is a good counterpoint.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://x.com/karpathy/status/1930354382106964079&quot;&gt;Andrej Karpathy on UIs and AI collaboration&lt;/a&gt; · Products with rich UIs but no scripting are &quot;ngmi&quot; in the AI era. dobe is probably sweating.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://x.com/sriramk/status/1930153058924683280&quot;&gt;Sriram Krishnan&apos;s LLM wishlist&lt;/a&gt; · Wants personal data always in context and automatic task agentification. Same, honestly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=44185913&quot;&gt;After court order, OpenAI is now preserving all ChatGPT user logs&lt;/a&gt; · Court ordered them to keep all logs, including &quot;deleted&quot; chats. Turns out delete doesn&apos;t actually delete. Shocker.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/unjs/unpdf&quot;&gt;unpdf: PDF extraction and rendering across all JavaScript runtimes&lt;/a&gt; · Works everywhere, optimized for serverless. I needed this for making Bench documents render markdown for SSR.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Web rabbit holes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://thehistoryoftheweb.com/postscript/web-apps-web-sites-are-they-all-the-same/&quot;&gt;A History of DHTML and Web Applications&lt;/a&gt; · Deep dive on BrainMatter, a 1999 web spreadsheet that only worked in IE. The more things change...&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/ryanflorence/status/1928560016073572668&quot;&gt;Ryan Florence on iframes&lt;/a&gt; · &quot;This time I&apos;d like you to read up on iframes.&quot; Cryptic but Ryan&apos;s usually onto something.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.latimes.com/archives/la-xpm-1993-06-07-mn-611-story.html&quot;&gt;New wave of &apos;pog&apos; mania crests over Hawaii (1993)&lt;/a&gt; · Kids in 1993 preferred cardboard milk caps over Nintendo because &quot;everything is different every time.&quot; There&apos;s probably a lesson here about unpredictability vs. algorithmic content.
&lt;ul&gt;
&lt;li&gt;these were all part of generating &lt;a href=&quot;https://bench.io/artifact/2052df34-ee80-4fa9-9458-3c122c4eb34d&quot;&gt;History of Pogs&lt;/a&gt; with Bench.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/adamnash/status/1932224216960758070&quot;&gt;Adam Nash&apos;s Apple transparency story&lt;/a&gt; · Teaser for a Steve Jobs story involving volleyball and transparency in 1997. Need the full story.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Hot takes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/yacineMTB/status/1934383646854557760&quot;&gt;Document databases as &quot;sloppy software&quot;&lt;/a&gt; · &quot;Stinky software engineers pervert it with document DBs and other sloppy software.&quot; Harsh but not wrong.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/johnfreehayes/status/1934312768070639651&quot;&gt;The quoted tweet is a cathedral&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/sambreed/status/1933674022853881986&quot;&gt;I encourage all my competitors to take weekends off.&lt;/a&gt; More time for the rest of us to read links and build things.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>39 Lessons</title><link>https://sambreed.dev/writing/39-lessons/</link><guid isPermaLink="true">https://sambreed.dev/writing/39-lessons/</guid><description>39 lessons to live by</description><pubDate>Tue, 27 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today is my birthday, and &lt;a href=&quot;https://themorningshakeout.com/&quot;&gt;Mario Fraioli&apos;s newsletter The Morning Shakeout&lt;/a&gt; had &lt;a href=&quot;https://themorningshakeout.com/43-life-lessons-for-my-43rd-birthday/&quot;&gt;his list of 43 lessons for his 43rd birthday&lt;/a&gt;, a tradition he cribbed from none other than &lt;a href=&quot;https://kk.org/thetechnium/68-bits-of-unsolicited-advice/&quot;&gt;Kevin Kelly&lt;/a&gt; who posted 68 Bits of Unsolicited Advice for his birthday a few years ago. I got to meet Kevin at his studio in Pacifica last month, so that post was top of mind. I decided to have a crack at my own list.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You get good at the stuff you do all the time.&lt;/li&gt;
&lt;li&gt;Feeling bad? You&apos;re probably not drinking enough water.&lt;/li&gt;
&lt;li&gt;You can&apos;t coach enthusiasm.&lt;/li&gt;
&lt;li&gt;The default state of any deal is ‘dead’. Your job is to keep it alive.&lt;/li&gt;
&lt;li&gt;Make eye contact with people when they&apos;re presenting, and nod along if you agree with them. It&apos;s a helpful way to encourage people to be at their best.&lt;/li&gt;
&lt;li&gt;&quot;Yes, and&quot; is infinitely better than &quot;no, but&quot;&lt;/li&gt;
&lt;li&gt;If you &quot;don&apos;t disagree&quot; than you &quot;agree.&quot; Say that if it&apos;s what you mean. If it isn&apos;t, then say something else. Be precise.&lt;/li&gt;
&lt;li&gt;Praise in public, criticize in private.&lt;/li&gt;
&lt;li&gt;But, don&apos;t make a habit of giving unsolicited criticism, especially to a third party. Your cards are yours to see and you don&apos;t need to play them all every hand.&lt;/li&gt;
&lt;li&gt;Everyone gets their own deal, so don&apos;t compare your deal to others.&lt;/li&gt;
&lt;li&gt;If you&apos;re talking to someone and they recommend a book, even in passing, buy the book and read it. If it was good enough to mention maybe it has something to say.&lt;/li&gt;
&lt;li&gt;You do not have to finish every book you start.&lt;/li&gt;
&lt;li&gt;Alcohol is bad for you, and drinking is not something to romanticize.&lt;/li&gt;
&lt;li&gt;You can party without getting drunk.&lt;/li&gt;
&lt;li&gt;Service workers (waiters, bussers, janitors, the person who makes your coffee) have harder jobs than you. Respect their time, be nice, and always tip. The karma will make it back to you.&lt;/li&gt;
&lt;li&gt;Make backups. If you care about keeping something, store three copies in separate locations. &quot;Two is one and one is none.&quot;&lt;/li&gt;
&lt;li&gt;Oil changes are every six months or every 5,000 miles, whichever comes sooner. Don&apos;t believe the sticker, keep your own records.&lt;/li&gt;
&lt;li&gt;Keep a pair of work gloves in the glove compartment and an umbrella in the door, you may need them in a pinch someday and will glad to have them.&lt;/li&gt;
&lt;li&gt;Earplugs make loud concerts better.&lt;/li&gt;
&lt;li&gt;Good design is worth extra.&lt;/li&gt;
&lt;li&gt;Made in the USA is worth extra.&lt;/li&gt;
&lt;li&gt;Buy the cheapest version of any tool you buy for the first time. Splurge only when you know you&apos;ll use it.&lt;/li&gt;
&lt;li&gt;Attempt to put all consumables to their maximum number of uses.&lt;/li&gt;
&lt;li&gt;Bicycles are simple to fix but only if you the right tools.&lt;/li&gt;
&lt;li&gt;Humans are antifragile; we benefit from moderate amounts of disorder and deviations from routine.&lt;/li&gt;
&lt;li&gt;Tip your barber 100% and you will always be able to move your next appointment no questions asked.&lt;/li&gt;
&lt;li&gt;If you go to the Alameda flea market, start by walking all the way to the back row without stopping, then work your way back to the entrance. When you buy something heavy you&apos;ll know exactly how far you&apos;ll be walking with it.&lt;/li&gt;
&lt;li&gt;Tit-for-tat is the only winning strategy in multi-round prisoners&apos; dilemma. It punishes deviations from social norms and reinforces them.&lt;/li&gt;
&lt;li&gt;Avoid zero-sum games.&lt;/li&gt;
&lt;li&gt;Gamble on what you can afford lose without worrying about it.&lt;/li&gt;
&lt;li&gt;Investing can be painful, keep enough cash to be solvent even if the markets completely tank.&lt;/li&gt;
&lt;li&gt;Happiness is inversely proportional to how often you check your portfolio.&lt;/li&gt;
&lt;li&gt;Motorcycles are fun at the expense of danger.&lt;/li&gt;
&lt;li&gt;Stretching is the best way to check-in with your body.&lt;/li&gt;
&lt;li&gt;Say ‘Thank you‘ and mean it.&lt;/li&gt;
&lt;li&gt;Construction projects are always late and over budget, so plan accordingly.&lt;/li&gt;
&lt;li&gt;Expectations are a powerful lens through which we interpret reality. The good news is that you get to choose them for yourself.&lt;/li&gt;
&lt;li&gt;Most running should be in heartrate zone-2 (around 150bpm) punctuated by a handful of 20-second bursts of speed. Learn how to do this and you&apos;ll get faster and run further.&lt;/li&gt;
&lt;li&gt;You never have to stop learning.&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>Links, April 2025</title><link>https://sambreed.dev/writing/2025/links-april/</link><guid isPermaLink="true">https://sambreed.dev/writing/2025/links-april/</guid><description>automated link harvesting</description><pubDate>Thu, 10 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;ve been heads-down working on &lt;a href=&quot;https://bench.io/&quot;&gt;Bench&lt;/a&gt; since the end of last year, and let me tell you, it has come a long way.&lt;/p&gt;
&lt;p&gt;Bench is an AI-powered intelligent workspace. The idea is simple: Take the best models, give them well designed tools, access to files &amp;#x26; the web, and let it rip. It can do things like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;look at your open browser tabs&lt;/li&gt;
&lt;li&gt;search the web&lt;/li&gt;
&lt;li&gt;visit websites&lt;/li&gt;
&lt;li&gt;generate structured data and do data-science&lt;/li&gt;
&lt;li&gt;analyze files like PDFs, images, and videos&lt;/li&gt;
&lt;li&gt;generate images&lt;/li&gt;
&lt;li&gt;create documents&lt;/li&gt;
&lt;li&gt;plus all of the usual things a well-prompted state-of-the-art LLM can do.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bench has come so far that it can write a blog post like this one. In fact, everything in this post except the introduction was &lt;a href=&quot;https://bench.io/share/21NJLhvH5N5dYzZqBti4gN&quot;&gt;sourced and written by Bench in a few minutes&lt;/a&gt;. Bench can even serve as a publishing platform, here&apos;s a &lt;a href=&quot;https://bench.io/share/artifact/5Rs3CrNg4Wfkqk4kyfX0sN&quot;&gt;published page&lt;/a&gt; of the raw content of this post.&lt;/p&gt;
&lt;p&gt;To write this post, Bench looked at my open tabs on my iPad, wrote a draft post, I gave feedback, it visited the links to get better summaries, then it generated an image with &lt;a href=&quot;https://preview.reve.art/&quot;&gt;Reve&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Bench is currently in private preview. You can sign up with &lt;a href=&quot;https://bench.io/invite/4a6nd6&quot;&gt;this link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now to my months-long backlog of open tabs.&lt;/p&gt;
&lt;h2&gt;Front End&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://garrettdimon.com/journal/posts/fine-tuning-text-inputs&quot;&gt;Fine-tuning Text Inputs&lt;/a&gt; · Garrett Dimon&apos;s exploration of HTML form attributes is the kind of deep dive I live for. Adding attributes like &lt;code&gt;spellcheck&lt;/code&gt;, &lt;code&gt;autofocus&lt;/code&gt;, and &lt;code&gt;autocapitalize&lt;/code&gt; can dramatically improve form UX without a single line of JavaScript. It&apos;s a reminder that sometimes the browser already has what you need€”you just have to know where to look.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://leanrada.com/notes/css-only-lqip/&quot;&gt;Minimal CSS-only blurry image placeholders&lt;/a&gt; · This technique for creating blurry image placeholders using only CSS is genuinely clever. By encoding a simplified version of an image into a single integer and then decoding it with bit manipulation in CSS, the author creates a lightweight placeholder that loads instantly. The bit-packing approach feels like the kind of elegant hack that makes the web special.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://thehtml.review/about&quot;&gt;the html review&lt;/a&gt; · An annual online journal of literature made specifically for the web. In an era where everything is a React app wrapped in a NextJS wrapper inside a Vercel deployment, it&apos;s refreshing to see people celebrating the foundational technology of the web. I&apos;ve bookmarked this to revisit when I need inspiration.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Databases &amp;#x26; Code&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cs.cmu.edu/~pavlo/blog/2023/04/the-part-of-postgresql-we-hate-the-most.html&quot;&gt;The Part of PostgreSQL We Hate the Most&lt;/a&gt; · Andy Pavlo doesn&apos;t hold back in this critique of PostgreSQL&apos;s MVCC implementation. The way Postgres copies entire rows for updates rather than using delta records (like Oracle and MySQL) leads to massive bloat and performance issues. Having battled the autovacuum daemon myself, this piece resonated deeply. Sometimes the tools we love have fundamental flaws we just learn to work around.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.gitbutler.com/how-git-core-devs-configure-git/&quot;&gt;How Core Git Developers Configure Git&lt;/a&gt; · Peeking at the Git configs of Git&apos;s own developers is like getting cooking tips from professional chefs. The nine settings they consider essential€”like &lt;code&gt;merge.conflictstyle = zdiff3&lt;/code&gt; and &lt;code&gt;diff.algorithm = histogram&lt;/code&gt;€”have already made their way into my &lt;code&gt;.gitconfig&lt;/code&gt;. The fact that even Git&apos;s creators need to tweak the defaults speaks volumes about software design tradeoffs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.makingsoftware.com/&quot;&gt;MAKING SOFTWARE&lt;/a&gt; · A refreshingly honest reference manual about how everyday software works. It&apos;s not a tutorial or guide but rather an exploration of the inner workings of technology we use daily. The illustrations are delightful, and the approach of explaining complex concepts visually makes this accessible even to non-technical readers. I wish more technical content had this level of clarity.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://kvark.github.io/web/gpu/native/2020/05/03/point-of-webgpu-native.html&quot;&gt;Point of WebGPU on native&lt;/a&gt; · An older but still relevant piece on WebGPU&apos;s potential beyond browsers. The vision of a unified graphics API that works across platforms is compelling, especially as the boundaries between web and native continue to blur. I&apos;ve been experimenting with some visualization work lately, and the promise of &quot;write once, run anywhere&quot; for graphics code is tantalizing.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tech History&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.righto.com/2025/03/mother-of-all-demos-usb-keyset-interface.html&quot;&gt;A USB interface to the &quot;Mother of All Demos&quot; keyset&lt;/a&gt; · Ken Shirriff continues to be a computing archaeology hero. This modern implementation of Engelbart&apos;s chord keyset from his legendary 1968 demo makes me want to build one myself. The fact that someone is keeping this 57-year-old innovation alive in 2025 is both wonderful and slightly mad. I love these projects that connect us to computing&apos;s rich history.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;AI &amp;#x26; Future Thinking&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://darioamodei.com/machines-of-loving-grace&quot;&gt;Dario Amodei – Machines of Loving Grace&lt;/a&gt; · Anthropic&apos;s CEO offers a thoughtful perspective on AI&apos;s potential upside that avoids both doomerism and blind techno-optimism. His vision of AI transforming fields like biology, neuroscience, and economic development is compelling, though I remain cautiously skeptical about how this plays out in practice. The essay&apos;s title nod to Richard Brautigan&apos;s poem sets just the right tone.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://wellnesswisdom.substack.com/p/reclaiming-the-utopian-vision&quot;&gt;reclaiming the utopian vision - by Patricia Mou&lt;/a&gt; · Patricia&apos;s exploration of utopian thinking in urban planning hit me at the right time. Her argument that we shouldn&apos;t abandon utopian visions but rather see them as dynamic processes rather than static endpoints resonates with my own oscillation between optimism and pessimism about technology. The case studies of Auroville and Bhutan as examples of ongoing utopian experiments are particularly fascinating.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Work &amp;#x26; Life&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://nav.al/the-80-hour-myth&quot;&gt;The 80-hour Myth&lt;/a&gt; · Naval&apos;s take on work hours cuts through a lot of the hustle culture nonsense. His point that nobody truly works 80 productive hours a week€”that our best work comes in &quot;tremendous, focused bursts, surrounded by long periods of dullness and inactivity&quot;€”matches my experience. I&apos;ve been tracking my own deep work time and the results have been... humbling. Quality over quantity remains the hardest lesson to internalize.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Web Performance Blah Blah Blah</title><link>https://sambreed.dev/writing/2024/web-perf-blah-blah-blah/</link><guid isPermaLink="true">https://sambreed.dev/writing/2024/web-perf-blah-blah-blah/</guid><description>what I tell people about web performance in 2024</description><pubDate>Tue, 05 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently an engineer I&apos;m working with hit me up with a broad question about web performance:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&apos;m trying to see if I can make site loading times faster, do you have any good profiling tools besides the browser?  -- Specifically I want to make frontpage as fast as possible  I want to CDN cache the whole page (so I added a vercel header -- is that the best way to go about it?)&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is a very reasonable question. Everything should be as fast as possible, and you&apos;ve got work to do until it is. Web performance has been a recurring theme topic in my career and I have some earned wisdom on the topic.&lt;/p&gt;
&lt;h3&gt;1. Use tools to measure performance&lt;/h3&gt;
&lt;p&gt;tldr, know what you&apos;re trying to measure and collect the right data.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The performance tab in Chrome dev tools is still the best tool for diagnosing and debugging performance issues.&lt;/li&gt;
&lt;li&gt;Performance is not a single number.
&lt;ul&gt;
&lt;li&gt;Users will have slow devices, bad networks, memory pressure, etc. Assume the worst.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance is a statistical distribution of response times across a population of users with different devices and networks.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Remember that &quot;fast for me&quot; != &quot;fast for everyone&quot;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;BUT&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Making it fast on your device and your connection is the best place to start.&lt;/li&gt;
&lt;li&gt;If it&apos;s slow for you then it&apos;s definitely slow for everyone else.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;So there are limits to what you can do with local tools.
&lt;ul&gt;
&lt;li&gt;Using a remote performance test like &lt;a href=&quot;https://www.webpagetest.org/&quot;&gt;WebPageTest&lt;/a&gt; can help identify problems that you might miss with local testing.&lt;/li&gt;
&lt;li&gt;External tests offer a point-in-time measurement which might be different than what real-world users see.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Measuring performance from real users on your real infrastructure is the only way to understand the gaps in your performance architecture&lt;/strong&gt;, and the only true feedback mechanism to tell you if you&apos;re fixing them over time.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;HOWEVER&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;This is a deep rabbit-hole. Measuring on the client is not free and too much telemetry can make performance worse.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Cache when possible, but not too much&lt;/h3&gt;
&lt;p&gt;tldr, cache static requests aggressively, be very careful with dynamic content&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Physical distance between your servers and users is a large source of latency in any web request.
&lt;ul&gt;
&lt;li&gt;Goal is to make the request travel as short a distance as possible.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;So what is CDN caching?
&lt;ol&gt;
&lt;li&gt;Your server responds to an incoming request.&lt;/li&gt;
&lt;li&gt;A proxy sits between your server and the outside world, listening for a special header and caches the response.
&lt;ul&gt;
&lt;li&gt;The cached response is (usually) propagated across a globally distributed network of servers so the next request can be served from the nearest server.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;When the next request comes in, it gets served the cached response instead of hitting your server.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;This is great for content that is &lt;strong&gt;exactly the same every time&lt;/strong&gt;: your server does less work and your clients get the fastest possible response.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;BUT&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;You should never CDN cache authenticated pages&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;There is a huge risk of showing your users someone else&apos;s account data 💀&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Make sure you understand how your CDN is configured and how to flush it.
&lt;ul&gt;
&lt;li&gt;Common symptom will be the complaint &quot;I can&apos;t see my changes,&quot; and reply, &quot;Are you seeing cached content?&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. Find out what&apos;s slow and eliminate bottlenecks&lt;/h3&gt;
&lt;p&gt;tldr, know your performance floor.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How fast is your infra when you&apos;re doing zero work?&lt;/li&gt;
&lt;li&gt;Lots of architectures can go fast. Most of the things I work on follow the &quot;BFF&quot; pattern.&lt;/li&gt;
&lt;li&gt;&quot;Backend-for-the-frontend&quot; is when your web server makes calls to a separate API server for database access and business logic.
&lt;ul&gt;
&lt;li&gt;Server A handles html generation, content negotiation, and session handling.&lt;/li&gt;
&lt;li&gt;Server B talks to the database and handles the application logic of your API.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Server A&apos;s &lt;em&gt;minimum&lt;/em&gt; response time is governed by the &lt;em&gt;slowest&lt;/em&gt; response from Server B.&lt;/li&gt;
&lt;li&gt;To increase performance your best option is to reduce Server A&apos;s time spent waiting on Server B as much as possible. That means:
&lt;ul&gt;
&lt;li&gt;request only the data needed to generate a response&lt;/li&gt;
&lt;li&gt;send the fewest requests possible&lt;/li&gt;
&lt;li&gt;always send requests in parallel, avoid waterfalls&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;When the non-rendering, non-request handling parts of your workflow is fast, you can focus on the frontend.
&lt;ul&gt;
&lt;li&gt;then reduce the frontend payload as much as possible. That means:
&lt;ul&gt;
&lt;li&gt;compressing and caching all assets, with content hash fingerprints.&lt;/li&gt;
&lt;li&gt;shipping little to no JS, only the CSS you need to render the elements on the page, and optimizing and caching images and videos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4. Blame the framework, last&lt;/h3&gt;
&lt;p&gt;tldr, you&apos;re probably slower than the framework&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Look, React is fine.
&lt;ul&gt;
&lt;li&gt;anecdotally, ~100ms is a pretty typical &quot;cost of business&quot; to fetch data + do a react render + stream the results
&lt;ul&gt;
&lt;li&gt;you can make this a little faster, but if you have sub-100ms p95 then you&apos;re doing great tbh.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;usually there&apos;s lots of headroom even just in sending slimmer payloads from the API server to the client.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;HOWEVER&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;if you have optimized to the point where React is holding you back from silky smooth frame rates and instant loading, congratulations! or if you start with that as an explicit goal, React probably &lt;em&gt;will&lt;/em&gt; hold you back.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;BUT&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;if you are trying to move quickly with the best developer ergonomics and a decade+ of mass adoption, React is fine.You will not be fired for choosing it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;REMEMBER&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;This is an exhaustive topic.&lt;/li&gt;
&lt;li&gt;The web platform provides many, many ways to build the same application experiences.&lt;/li&gt;
&lt;li&gt;Every interaction can be optimized and tuned to an absurd degree, so you have to pick your battles.&lt;/li&gt;
&lt;li&gt;The ideal web site is fast, accessible, and works on every device. Don&apos;t lose track of that.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, August 2024</title><link>https://sambreed.dev/writing/2024/links-august/</link><guid isPermaLink="true">https://sambreed.dev/writing/2024/links-august/</guid><description>what&apos;s happening in the world of links</description><pubDate>Sat, 31 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://codersblock.com/blog/anchor-links-and-how-to-make-them-awesome/#adding-scroll-margin&quot;&gt;Anchor Links and How to Make Them Awesome / Coder&apos;s Block&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;scroll-margin-top will pad elements that are automatically scrolled to&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codepen.io/jh3y/pen/wvLvYWo?editors=1100&quot;&gt;Cuisine Selector with :has()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://antirez.com/news/140&quot;&gt;LLMs and Programming in the first days of 2024 - &amp;#x3C;antirez&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://aworkinglibrary.com/writing/toward-inquiry&quot;&gt;Toward inquiry | A Working Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://incolumitas.com/2021/11/03/so-you-want-to-scrape-like-the-big-boys/&quot;&gt;incolumitas.com – So you want to Scrape like the Big Boys? 🚀&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://baukunst.co/stories/obsession/art-is-dead-a-rumination-on-the-future-of-creativity-in-an-ai-curious-world&quot;&gt;“Art is Dead”: A Rumination on the Future of Creativity in an AI-Curious World&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gurwinder.blog/p/the-intellectual-obesity-crisis&quot;&gt;The Intellectual Obesity Crisis - by Gurwinder - The Prism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.hollywoodreporter.com/movies/movie-news/directors-jail-1235879871/&quot;&gt;It’s Never Been Easier to Land in Director’s Jail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vldb.org/pvldb/vol2/vldb09-583.pdf&quot;&gt;vldb.org/pvldb/vol2/vldb09-583.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://books.worksinprogress.co/book/maintenance-of-everything/communities-of-practice/the-soul-of-maintaining-a-new-machine/1&quot;&gt;The Soul of Maintaining a New Machine - First Draft | Books in Progress&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fabiensanglard.net/sf2_sheets/&quot;&gt;Street Fighter II, paper trails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://brm.io/matter-js/demo/#catapult&quot;&gt;Matter.js Demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20060612050032/http://www.techmeme.com/&quot;&gt;Techmeme June 12, 2006&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;techmeme is really timeless.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://shi-yan.github.io/webgpuunleashed/&quot;&gt;WebGPU Unleashed: A Practical Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hacksider/Deep-Live-Cam&quot;&gt;GitHub - hacksider/Deep-Live-Cam: real time face swap and one-click video deepfake with only a single image (uncensored)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pikuma.com/blog/isometric-projection-in-games&quot;&gt;Pikuma: Isometric Projection in Game Development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://leanrada.com/notes/sweep-and-prune/&quot;&gt;Sort, sweep, and prune: Collision detection algorithms · leanrada.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://alexplescan.com/posts/2024/08/10/wezterm/&quot;&gt;Okay, I really like WezTerm | Alex Plescan&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;WezTerm is nice! I have been using iTerm2 since at least 2011 or 2012. I remember first seeing Paul Irish using it during a conference presentation. I’ve used it ever since without complaint. Recently, they’ve added to add AI integrations which I’m not interested in.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;https://extension765.com/blogs/soderblog/raiders&lt;/li&gt;
&lt;li&gt;https://leonardkoscianski.com/page/3/&lt;/li&gt;
&lt;li&gt;https://blog.bitdrift.io/post/optimizing-web-ui-large-datasets?trk=feed_main-feed-card_feed-article-content&lt;/li&gt;
&lt;li&gt;https://explained.ai/matrix-calculus/&lt;/li&gt;
&lt;li&gt;https://vgel.me/posts/faster-inference/&lt;/li&gt;
&lt;li&gt;https://github.com/charlax/professional-programming&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://calculatingempires.net/?pos=16986.91,8725.00,13.0676&quot;&gt;Calculating Empires&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>The great link drought of 2024</title><link>https://sambreed.dev/writing/2024/great-link-drought/</link><guid isPermaLink="true">https://sambreed.dev/writing/2024/great-link-drought/</guid><description>whoops I stopped linkdumping</description><pubDate>Tue, 23 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I had a good run with my linkdump blog posts. Here&apos;s why I stopped, followed by a brief list of links.&lt;/p&gt;
&lt;p&gt;I&apos;ve never been able to blog consistently, despite keeping a daily writing habit going for many years now. Just look at the sad history of my posts: mostly clustered around holidays or, in true developer fashion, when I make updates to my website.&lt;/p&gt;
&lt;p&gt;The main reason for petering out after &lt;a href=&quot;/writing/2024/links-february&quot;&gt;February 2024&lt;/a&gt;: I switched to using the &lt;a href=&quot;https://arc.net/&quot;&gt;Arc Browser&lt;/a&gt; for my daily driver.&lt;/p&gt;
&lt;p&gt;Arc isn&apos;t without controversy. I&apos;ve heard complaints about their shift towards AI features like search indexing and summarization. For me, those features are not what makes Arc interesting: it&apos;s the design.&lt;/p&gt;
&lt;p&gt;One UX feature that caught me off guard when I first started using it: it automatically discards unpinned tabs after 24 hours. While the timeout can be adjusted, this significantly disrupted in my blogging strategy of letting ~~dead~~ interesting tabs accumulate for a month before compiling them into a list to post here.&lt;/p&gt;
&lt;p&gt;As source of tabs dried up, I stopped posting. As a consequence, the criteria for me saving a link became more rigorous: I needed to remember to capture it somehow, usually by moving it to a text document.&lt;/p&gt;
&lt;p&gt;It&apos;s telling how badly broken browser bookmarking is that I never considered saving these as acutal bookmarks. The same goes for Pinboard. Ideally, these linkdumps to be built up automatically, perhaps through a heuritic analysis of my browser history.&lt;/p&gt;
&lt;h2&gt;March&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://tencentarc.github.io/BrushNet/&quot;&gt;BrushNet: A Plug-and-Play Image Inpainting Model with Decomposed Dual-Branch Diffusion&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;a paper I read when working with image models earlier in the year, specifically around masked inpainting with segment anything + grounding dino and some clever masking. It&apos;s better than nothing but you still have to re-roll a lot to get good results.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://movielabs.com/production-technology/ontology-for-media-creation/&quot;&gt;Ontology for Media Creation - MovieLabs&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;just about everything you can possibly think of probably has a normative specification, should you ever need one&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.w3.org/TR/css-page-3/&quot;&gt;CSS Paged Media Module Level 3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;April&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/karpathy/llm.c&quot;&gt;GitHub - karpathy/llm.c: LLM training in simple, raw C/CUDA&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;one of my colleagues is doing a training run for gpt-2 using this code.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://craftjarvis-jarvis1.github.io/&quot;&gt;JARVIS-1: Open-world Multi-task Agents with Memory-Augmented Multimodal Language Models&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;somewhat anticipating the SeeACT link below. someday working agentic programming patterns will shake out of academia into commerical use.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://theforest.link/#info&quot;&gt;The Forest&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;clever metaphor but I wish it were more visual. also seems to be in need of curation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/blog/idefics2&quot;&gt;Introducing Idefics2: A Powerful 8B Vision-Language Model for the community&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Multimodal models unlock a lot of previously closed doors. Semantic understanding of images is a powerful primitive.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://natureofcode.com/&quot;&gt;Nature of Code&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I love a free code book and this one seems good.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9bjve67p33E&quot;&gt;Apple&apos;s Future Computer: The Knowledge Navigator - YouTube&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;had never seen this but it&apos;s an uncanny vision that seems close-ish to reality today with the right tools.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fermatslibrary.com/s/the-uncanny-valley#email-newsletter&quot;&gt;Fermat&apos;s Library | The Uncanny Valley annotated/explained version.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Collatz_conjecture&quot;&gt;Collatz conjecture - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.incompleteideas.net/IncIdeas/BitterLesson.html&quot;&gt;The Bitter Lesson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.augmentcode.com/blog/introducing-augment&quot;&gt;Introducing Augment: a company dedicated to empowering developers with AI&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I&apos;ve had the priviledge to work with the Augment team since day 1 and have been using their product constantly since the first alpha. Watch this space, Augment has a seriously talented team.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;May&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.jacobparis.com/content/remix-og&quot;&gt;Generate open graph social preview images with Remix&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Vercel has done the lion-share of the work here but I needed to do this in Remix and found this specific guide helpful. Dynamic preview card images go a long way to make a product feel more complete.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://field.io/&quot;&gt;FIELD.IO&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I still appreciate a good agency site.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.figma.com/blog/figmas-journey-to-typescript-compiling-away-our-custom-programming-language/&quot;&gt;Figma’s journey to TypeScript | Figma Blog&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;People complain about TypeScript but I don&apos;t get it. TypeScript is great, and a more sensible long term bet for your company than a homemade dialect.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=3gb-ZkVRemQ&quot;&gt;Stanford CS25: V4 I Jason Wei &amp;#x26; Hyung Won Chung of OpenAI - YouTube&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Recommended by the ai researchers I work with as a good introduction to training techniques.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://yusu.substack.com/p/language-agents&quot;&gt;Language agents: a critical evolutionary step of artificial intelligence&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://osu-nlp-group.github.io/SeeAct/&quot;&gt;SeeAct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I saw Yu Su present his work on language agents and appreciate his breakdown of the space. The hardest part of agentic programming is knowing when a task is done, especially when your history overflows the available context. My hunch is that you&apos;ll need split-brained or adversarial architectures to achieve even rudimentary autonomy.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;June&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.askamanager.org/2024/06/update-i-was-rejected-because-i-told-my-interviewer-i-never-make-mistakes.html&quot;&gt;Ask a Manager: I was rejected because I told my interviewer I never make mistakes&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;A tautology of a question, very hard work to miss something this obvious.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sandofsky.com/lambda-school/&quot;&gt;Fast Crimes at Lambda School&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I was an early advocate for code school (Galvanize and then later Turing Academy) and hired some great people that way, so it was shocking to learn about how badly things went for lambda school.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.common.wtf/&quot;&gt;common.wtf — commonly used unicodes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.crispin.com/&quot;&gt;Crispin&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;fka Crispin Porter Bogusky. I did a lot of work for them at Quick Left in the early 2010s. I &lt;em&gt;still&lt;/em&gt; appreciate a good agency website.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2406.18790#&quot;&gt;MUMU: Bootstrapping Multimodal Image Generation from Text-to-Image Data&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;The authors, &lt;a href=&quot;https://x.com/alex_peys&quot;&gt;@alexy_peys&lt;/a&gt; and &lt;a href=&quot;https://x.com/williamLberman&quot;&gt;@williamLberman&lt;/a&gt;, are on my team at shv and it was a pleasure to watch them work on this. They made very notable progress using simple architectures, clever data preparation, and limited GPU hours.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;July&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://emilkowal.ski/ui/the-magic-of-clip-path&quot;&gt;The Magic of Clip Path&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jbilcke-hf/clapper&quot;&gt;jbilcke-hf/clapper: Clapper.app, the video editor designed for the age of AI cinema&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stratechery.com/2024/the-e-u-goes-too-far/&quot;&gt;The E.U. Goes Too Far – Stratechery by Ben Thompson&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.garbageday.email/p/american-digital-backwater&quot;&gt;The American digital backwater&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, February 2024</title><link>https://sambreed.dev/writing/2024/links-february/</link><guid isPermaLink="true">https://sambreed.dev/writing/2024/links-february/</guid><description>my side of the internet</description><pubDate>Thu, 01 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Fanghua-Yu/SUPIR&quot;&gt;GitHub - Fanghua-Yu/SUPIR: SUPIR aims at developing Practical Algorithms for Photo-Realistic Image Restoration In the Wild&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://exaspark.medium.com/the-ultimate-guide-to-postgresql-data-change-tracking-c3fa88779572&quot;&gt;The Ultimate Guide to PostgreSQL Data Change Tracking | Medium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://robinrendle.com/&quot;&gt;Robin Rendle — Designer and writer.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.theverge.com/c/23194235/ai-fiction-writing-amazon-kindle-sudowrite-jasper&quot;&gt;How independent writers are turning to AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.alexmolas.com/2024/02/05/a-search-engine-in-80-lines.html&quot;&gt;A search engine in 80 lines of Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://99percentinvisible.org/episode/cooking-with-gas/&quot;&gt;Cooking with Gas - 99% Invisible&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gist.github.com/cpursley/c8fb81fe8a7e5df038158bdfe0f06dbb&quot;&gt;Postgres is Enough&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://slate.com/technology/2024/02/quora-what-happened-ai-decline.html&quot;&gt;One of Our Best Websites Died While No One Was Looking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lithub.com/rebecca-solnit-how-to-comment-on-social-media/&quot;&gt;Rebecca Solnit: How to Comment on Social Media ‹ Literary Hub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmasters.com/blog/highlight-text-when-a-user-scrolls-down-to-that-piece-of-text/&quot;&gt;Highlight Text When a User Scrolls Down to That Piece of Text&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ueberdosis/tiptap/issues/2399&quot;&gt;Auto complete plugin? · Issue #2399 · ueberdosis/tiptap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/Supabase/comments/10u96rr/comment/j7fecgk/?utm_source=share&amp;#x26;utm_medium=mweb3x&amp;#x26;utm_name=mweb3xcss&amp;#x26;utm_term=1&amp;#x26;utm_content=share_button&quot;&gt;A Yjs provider that uses Supabase Realtime for synchronization. Feedback / suggestions welcome. : r/Supabase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/AlexDunmow/y-supabase&quot;&gt;AlexDunmow/y-supabase: Supabase Provider for Yjs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/supabase/pg_crdt&quot;&gt;supabase/pg_crdt: POC CRDT support in Postgres&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/blog/how-to-generate&quot;&gt;How to generate text: using different decoding methods for language generation with Transformers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Thomson_Viper_FilmStream_Camera&quot;&gt;Thomson Viper FilmStream Camera - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hamel.dev/blog/posts/prompt/&quot;&gt;Fuck You, Show Me The Prompt.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, January 2024</title><link>https://sambreed.dev/writing/2024/links-january/</link><guid isPermaLink="true">https://sambreed.dev/writing/2024/links-january/</guid><description>what&apos;s happening in the world of links</description><pubDate>Wed, 31 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ok, I have been bad at this so far. It&apos;s already nearly the halfway point of February and I still haven&apos;t posted this (thank god for back-dating). But I have an excuse! Since mid-December I&apos;ve shifted gears into a new round of company-building at SHV and have been feverishly building prototypes to help us &quot;see around the corner&quot; as it were.&lt;/p&gt;
&lt;p&gt;Here&apos;s what I got.&lt;/p&gt;
&lt;h2&gt;AI&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.pinokio.computer/&quot;&gt;Run local models with pinokio.computer&lt;/a&gt; · good idea, great execution. I&apos;ve been writing lots of python over the last 2 months and recently compared working with python dependencies is like eating off of the floor. Pinokio makes running gradio demos for popular models much easier than wading through the swamp of pyenv, venv, conda, torch and everything else.
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cocktailpeanut/mirror/blob/main/app.py#L45-L153&quot;&gt;mirror/app.py at main · cocktailpeanut/mirror&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/PhyscalX/gradio-image-prompter&quot;&gt;PhyscalX/gradio-image-prompter&lt;/a&gt; · Gradio has become impossible to ignore, but it is still too difficult to extend. In some ways, that&apos;s not the point, but as a frontend leaning developer it has a lot of idiosyncrasies that cannot be changed, merely tolerated. Seeing high quality components in the wild is encouraging and makes me hopeful for the future.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bensu.notion.site/Repl-it-137e3120605245698e6a414a5d7dd4c4&quot;&gt;Repl.it Friction Log&lt;/a&gt; · Adding AI assistance is very challenging. I&apos;ve had an on/off relationship with Replit over the past year, most recently using it to create &lt;a href=&quot;https://frasier-bingo.replit.app/&quot;&gt;Frasier Bingo&lt;/a&gt; on my iPad, where I struggled to find their AI features and got little use out of them when I did. I think desktop web is better, but if I&apos;m on a real computer then I have no reason to use Replit.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Okapi_BM25&quot;&gt;Okapi BM25 - Wikipedia&lt;/a&gt; · hey more AI searchy things to learn about.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/papers/2312.11514&quot;&gt;Paper page - LLM in a flash: Efficient Large Language Model Inference with Limited Memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2310.20360&quot;&gt;[2310.20360] Mathematical Introduction to Deep Learning: Methods, Implementations, and Theory&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://gmays.com/how-im-relearning-math-as-an-adult/&quot;&gt;How I’m (re)learning math as an adult - Gabriel Mays&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;These are on a theme that&apos;s dear to me: learning math as an adult outside of academic contexts. My history with math is troubled, and I&apos;ve learned only-what-I-need-to in my professional life to get by, and, while I can clearly handle multi-dimensional reasoning, I long for the intuitive knowledge of even the basics of linear algebra and calculus that some of my colleagues over the years have possessed. That said, I&apos;ve been extremely utilitarian in my approach and only have learned precisely what&apos;s need to get by as a developer. The second link here is good inspiration for taking a more measured and serious approach. There&apos;s always more to learn!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://whichlight.substack.com/p/2023-reflection-on-conviction-and&quot;&gt;2023 reflection: on conviction and building 20+ AI prototypes&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Kawan&apos;s work and the energy he brings is very inspiring.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/blog/Bilal326/stable-diffusion-project&quot;&gt;Temporal Scene Generation with Stable Diffusion&lt;/a&gt; · The more I work with generative AI, the more convinced I am that my hunch that there was much deeper complexity below the surface of the iceberg than above.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Front End&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.julienthibeaut.xyz/blog/create-shine-effect-on-card-with-tailwind-css&quot;&gt;Tailwind css shine effect&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ryanmulligan.dev/blog/click-spark/&quot;&gt;Click Spark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codepen.io/brotzky/pen/JjzrzQm&quot;&gt;Border gradient CodePen by Dennis Brotzky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;· these are cheesy and perhaps overdone but I still like little effects like this. I don&apos;t have any muscle-memory for the technique so I&apos;ve found myself on this page more than once. Bookmarking.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://web.dev/articles/5-css-snippets-every-front-end-developer-should-know-in-2024&quot;&gt;5 CSS snippets every front-end developer should know in 2024&lt;/a&gt; · lots of cleverness to be done with &lt;code&gt;:has()&lt;/code&gt; now that &quot;you can finally use it.&quot; Same for nesting.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nan.fyi/svg-paths&quot;&gt;Understanding SVG Paths&lt;/a&gt; · The arcana of SVG path syntax isn&apos;t difficult on its surface but I can never remember the details.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://matthiasott.com/notes/2024-the-year-of-the-personal-website&quot;&gt;2024: The Year of the Personal Website · Matthias Ott – User Experience Designer&lt;/a&gt; · Yes.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wingolog.org/archives/2024/01/08/missing-the-point-of-webassembly&quot;&gt;missing the point of webassembly&lt;/a&gt; · I&apos;ve been a spectator and fan of WASM since before it was a standard, but I largely agree with this take. There&apos;s an odd failure to materialize around what&apos;s possible in the new design space it opened up; it seems like the forces preventing anyone from authoring high quality web experiences cannot be countermanded (solely) by improving low-level primitives. But hey at least now we have a decent version of Photoshop that runs in the browser.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.apple.com/support/alternative-browser-engines/&quot;&gt;Using alternative browser engines in the European Union - Support - Apple Developer&lt;/a&gt; · Apple seems to be playing the malicious compliance card on this one, but it is promising that the door for alternate web runtimes on iPhones is being cracked open (in the worst possible big-government-y way, but still.) Let&apos;s hope that some version of this comes to the US someday.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Code&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://interjectedfuture.com/trade-offs-between-different-crdts/&quot;&gt;Trade-offs between Different CRDTs&lt;/a&gt; · like the WASM link above, I feel like CRDTs are a trend that&apos;s failed to accelerate as fast as I thought it would. Building for multiplayer is still as hard in 2024 as it was in 2021 or 2018. CRDTs are more widely available but the problem still has a &quot;minimum complexity&quot; to it that&apos;s hard to shake.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lib.rs/crates/stitchy&quot;&gt;Stitchy — Rust application // Lib.rs&lt;/a&gt; · stupid image tricks!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ArchiveBox/ArchiveBox&quot;&gt;ArchiveBox/ArchiveBox: Open source self-hosted web archiving. Takes URLs/browser history/bookmarks/Pocket/Pinboard/etc., saves HTML, JS, PDFs, media, and more...&lt;/a&gt; · I&apos;m not a digital hoarder, but part of me deeply wants to save off a point-in-time copy of everything I link to or bookmark. The oddest quality of the web to come to terms with is how stunningly impermanent it is. The Internet Archive picks up some of the slack but there&apos;s more left on the table than there is archival bandwidth. A less busy and more-hoarderish version of myself could have fun with ArchiveBox.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://willcrichton.net/notes/portable-epubs/&quot;&gt;Portable EPUBs&lt;/a&gt; · Last year I did a much less comprehensive dive into EPUB rendering and came up without any results. It just seemed like a mountain of work and the Apple Books handling of epubs was fine. Will Crichton made it considerably further and it pleases me greatly to learn more about this. I have a small hoard of epub files that I someday hope to be able to read and browser without having to suffer through Calibre (which is great software, but terrible on the eyes.)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://alexcabal.com/posts/standard-ebooks-and-classic-web-tech&quot;&gt;How Standard Ebooks serves millions of requests per month with a 2GB VPS; or, a paean to the classic web - Alex Cabal&lt;/a&gt; · Speaking of accumulating digital ephemera, this post outlining the infrastructure at Standard Ebooks really hit the spot. I&apos;ve downloaded a good chunk of their library over the years and now I know how they&apos;ve been serving it. A very scrappy and well-run project.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.0x7d0.dev/writeups/hack-the-box/bookworm/&quot;&gt;Hack The Box: Bookworm&lt;/a&gt; · CTFs stress me out too much to be fun but man reading through a tour de force like this fills me with wonder.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Misc&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.tbray.org/ongoing/When/202x/2024/01/15/Google-2024&quot;&gt;Mourning Google&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://apod.nasa.gov/apod/ap240120.html&quot;&gt;APOD: 2024 January 20 - Falcon Heavy Boostback Burn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://johnaugust.com/2023/the-one-with-christopher-nolan&quot;&gt;The One with Christopher Nolan&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://lights0123.com/fractions/&quot;&gt;Unicode Fraction Creator&lt;/a&gt; · The web is so, so good for single use tools it&apos;s ridiculous. Sometimes you just need a fraction! Like when I wanted to specify my preferred hat size, 7⅞.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, December 2023</title><link>https://sambreed.dev/writing/2023/links-december-2023/</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/links-december-2023/</guid><description>Every month I turn my open browser tabs into a blog post.</description><pubDate>Sun, 31 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Final link dump of the year. I made it, I swear. Now that I&apos;m duty bound to keep up the posting and build a little archive for myself, I&apos;m going to try to keep the habit up into 2024. Enjoy!&lt;/p&gt;
&lt;h2&gt;AI&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bbycroft.net/llm&quot;&gt;LLM Visualization&lt;/a&gt; · this is very cool. Massive parallelism is fundamentally difficult to visualize, as evidenced by the massive increase in scope between the &apos;nano&apos; and &apos;gpt-3&apos; architectures on display here.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fleuret.org/francois/lbdl.html&quot;&gt;Little Book of Deep Learning&lt;/a&gt; · recommended by some of the AI researchers I work with and it&apos;s an excellent resource.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://education.civitai.com/quickstart-guide-to-sdxl-turbo/&quot;&gt;Quickstart Guide to SDXL Turbo - Civitai Education&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/stabilityai/sdxl-turbo&quot;&gt;stabilityai/sdxl-turbo · Hugging Face&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Models getting faster without dropping quality is a big deal. Having spent the better part of the past year with image gen models, I have come to think of them as very weird, very compressed databases for images: You put in a query, it starts with random noise and bumps each pixel until it gets closer to the target image. Do this enough times and with a specific enough prompt and you can make anything. When you can get results in less than a second on a consumer graphics card, it absolutely feels like a database.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://justine.lol/oneliners/&quot;&gt;Bash One-Liners for LLMs&lt;/a&gt; · 2023 has been a banner year for LLMs, evidenced by tools like this being readily available and easy to run.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://llm-attacks.org&quot;&gt;Universal and Transferable Adversarial Attacks on Aligned Language Models&lt;/a&gt; · Continuing on the theme that this tech is new in some ways but exactly the same as old tech in others, the various vulnerabilities of LLMs are a fascinating topic and importatnt area to study.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://simonwillison.net/2023/Dec/31/ai-in-2023/&quot;&gt;Stuff we figured out about AI in 2023&lt;/a&gt; · A late entry in this list, Simon Willison was a prolific contributor to the AI space this year through his blog and social media presence.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tech&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://retool.com/pipes&quot;&gt;Pipe Dreams - The Life and Times of Yahoo Pipes&lt;/a&gt; · I am a huge fan of Yahoo Pipes. Back in the early days of Quick Left, my co-founder Collin and I got into all sorts of shenanigans with pipes.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blakewatson.com/journal/omg-lol-an-oasis-on-the-internet/&quot;&gt;blakewatson.com – omg.lol: an oasis on the internet&lt;/a&gt; · you know the way fun ideas can make you feel out-of-the-loop? I have not tried omg.lol and probably am not the target audience, since I&apos;m already trying to &quot;do a website&quot; here and I do not need another one.
&lt;ul&gt;
&lt;li&gt;The email forwarding thing is cool, too. I&apos;ve been using &lt;code&gt;destroy.email&lt;/code&gt; as a vanity domain for myself for many years, and it makes me curious about how omg.lol is running under the hood.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lethain.com/forty-year-career/&quot;&gt;A forty-year career. | Irrational Exuberance&lt;/a&gt; · Will Larson is one of my favorite writers and thinkers in the software industry. He approaches everything so practically and thoroughly, and this is no exception. As I&apos;ve gotten further in my career, I&apos;ve been actively trying to shift towards strategic, long-term thinking while simultaneously delivering on short term goals.
&lt;ul&gt;
&lt;li&gt;It was linked from another post of his, &lt;a href=&quot;https://lethain.com/advancing-the-industry/&quot;&gt;Advancing the Industry&lt;/a&gt;, which is also a banger. He has been relentlessly publishing on his &lt;a href=&quot;https://lethain.com/&quot;&gt;website&lt;/a&gt; the past few months and I find myself bookmarking every post in Feedbin.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://linear.app/blog/why-and-how-we-do-work-trials-at-linear&quot;&gt;Why and how we do work trials at Linear&lt;/a&gt; · We did something similar at Quick Left but didn&apos;t call it work trials or write a blog post about, nor did we really know what we were doing. But that said, if you want to grow a team and have the patience to hire like this, you should try it. Working with someone over a few days is much better way to get a read on their personality and preferences than grilling them for a few hours in a traditional interview.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.dwarkeshpatel.com/p/andy-matuschak&quot;&gt;Andy Matuschak - Self-Teaching, Spaced Repetition, Why Books Don’t Work&lt;/a&gt; · Sometimes you come across a podcast and it sounds just interesting enough to bite. I run a lot, so throwing on an hour or two of something (at 1.3-1.5x speed) is not a huge commitment. I was absolutely hooked within the first five minutes of this episode. I was casually familiar with Andy Matuschak&apos;s work before, but now I am an acolyte.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codesandbox.io/blog/how-we-clone-a-running-vm-in-2-seconds&quot;&gt;How We Clone a Running VM in 2 Seconds&lt;/a&gt; · bookmarking this for the next time I need to build rapid-spinup infrastructure.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fly.io/blog/rethinking-serverless-with-flame/&quot;&gt;Rethinking Serverless with FLAME&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arstechnica.com/gaming/2023/12/dooms-creators-reminisce-about-as-close-to-a-perfect-game-as-anything-we-made/&quot;&gt;Doom Guys Reminisce&lt;/a&gt; · Doom&apos;s 30th anniversary was this year. Like most other computer users in the early 90s, DOOM completely changed what I thought of computer games.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hrvach/deskhop&quot;&gt;hrvach/deskhop: Fast Desktop Switching Device&lt;/a&gt; · bookmark&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://erinkissane.com/root-and-branch&quot;&gt;Eric Kissane - Root &amp;#x26; Branch&lt;/a&gt; · Well designed personal site and important social / internet research.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bbc.com/news/technology-67663128&quot;&gt;Lapsus$ member hacks GTA VI while in custody&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;This story was widely reported but I couldn&apos;t find any details about how, specifically, he managed to perpetrate the hack with only a phone, a hotel television, and an Amazon FireTV stick.&lt;/li&gt;
&lt;li&gt;My guess: he jailbreaks (lol) the FireTV to get a shell, then telnets to a jump host with more juice/tools than the tv stick, and then does his thing to infiltrate Rockstar from there. Presumably he&apos;d already compromised Rockstar and re-infiltrating was simply a matter of course.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arstechnica.com/security/2023/12/exploit-used-in-mass-iphone-infection-campaign-targeted-secret-hardware-feature/&quot;&gt;4-year campaign backdoored iPhones using possibly the most advanced exploit ever | Ars Technica&lt;/a&gt; · This is nuts. I can only imagine you get to this level of sophistication through years of concentrated effort to reverse engineer the hardware, or get otherwise stone-silent former Apple employees to spill their guts. Good to remember that every device can be hacked, almost like in the movies. Real life Mr Robot shit.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jjtech.dev/reverse-engineering/imessage-explained/&quot;&gt;iMessage, explained - JJTech&lt;/a&gt; · While we&apos;re security-adjacent, there&apos;s been quite a lot written about the recent attempts to skirt Apple&apos;s iMessage walled garden. This is a good read.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.blog/2023/12/25/is-software-getting-worse/&quot;&gt;Is software getting worse?&lt;/a&gt; Nope.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Stirling-Tools/Stirling-PDF&quot;&gt;Stirling-Tools/Stirling-PDF: locally hosted web application that allows you to perform various operations on PDF files&lt;/a&gt; · pdf tricks!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Front End&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.bitdrift.io/post/honey-i-shrunk-the-telemetry&quot;&gt;Honey, I shrunk the telemetry&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Story Time: when I first heard of Bit Drift, I racked my brain trying to think of why their founder Matt Klein seemed so familiar to me. Was it because I used Envoy? I didn&apos;t recall knowing any of the other core team members. It was a mystery.&lt;/li&gt;
&lt;li&gt;Finally it hit me: I met Matt very briefly in 1999 or 2000 when he was a college student at Duke University. He was with a group of my brother&apos;s friends that briefly stayed at my house while they were on their way to some other spring/winter vacation destination in Florida.&lt;/li&gt;
&lt;li&gt;The reason why he stood out in my memory was simple: Matt introduced me to Linux. He clearly noticed that I had a bedroom full of computers all networked together and connected to a big stereo and several monitors. I was roughly aspiring to Neo&apos;s desk in his real-life apartment.&lt;/li&gt;
&lt;li&gt;Matt showed me how to download distros from university servers (I remember getting Redhat and Slackware). From that moment I was hooked. It gave me a whole new way to use my computers! He also showed me &lt;a href=&quot;https://www.linuxfromscratch.org/museum/lfs-museum/1.1/LFS-HOWTO-1.1-HTML/&quot;&gt;Linux From Scratch&lt;/a&gt;, which I printed out and proceed to compile the a kernel from source and install everything to get to a gnome desktop. I remember showing my dad but he didn&apos;t really get it.&lt;/li&gt;
&lt;li&gt;Anyway, Client Telemetry is a big problem! All of the serverside solutions tend towards bloated client implementations that drain batteries and kill performance. Bit Drift&apos;s ring buffer memory and control plane architecture are both points of interest, as well as their choice to target native clients.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://meyerweb.com/eric/thoughts/2023/09/12/nuclear-anchored-sidenotes/&quot;&gt;Nuclear Anchored Sidenotes&lt;/a&gt; · great exploration of an experimental API&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stylexjs.com/docs/learn/styling-ui/defining-styles/&quot;&gt;Defining styles | StyleX&lt;/a&gt; · In 2023 I wrote more CSS than I would have guessed. While I like and appreciate &lt;a href=&quot;/wiki/computers/web-development/front-end/zen-of-tailwind&quot;&gt;Tailwind CSS&lt;/a&gt; I don&apos;t think it&apos;s the final word in styling. The main criticism that hits it is that carrying around tons of very long or complex class strings in a large project is as terrible as a dragon&apos;s hoard of unorganized CSS.
&lt;ul&gt;
&lt;li&gt;I don&apos;t think StyleX has a future outside of Facebook, but seeing the compiler-driven, close-to-the-code approach while ditching all the strings is a step in the right direction.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.jim-nielsen.com/2023/examples-of-great-urls/&quot;&gt;Examples of Great URL Design - Jim Nielsen’s Blog&lt;/a&gt; · No matter how many projects I do, I always come away feeling like I could have made better or different URL choices. Ask me about UUIDs sometime 🤡&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joshwcomeau.com/css/custom-css-reset/&quot;&gt;Modern CSS Reset / Global Styles&lt;/a&gt; · Funny story, I had been writing the CSS for this website by hand since moved from Next to Astro, and I hadn&apos;t used a proper global reset from the outset. CSS is weird when you don&apos;t reset things! I&apos;ve been using resets in some fashion my entire career without reallt appreciating their value.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nbarankings.theringer.com/&quot;&gt;The NBA, Ranked&lt;/a&gt; · Good website!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontside.com/blog/2023-12-11-await-event-horizon/&quot;&gt;The await event horizon in JavaScript&lt;/a&gt; · This is deeper than I&apos;ve every bothered to go into JavaScripts concurrency problems.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pagefind.app/&quot;&gt;Pagefind — Static low-bandwidth search at scale&lt;/a&gt; · New-to-me but not new, and as I&apos;ve been jamming a bit on search lately, this is in the to-investigate pile.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wasmer.io/posts/introducing-the-wasmer-js-sdk&quot;&gt;Introducing the new Wasmer JS SDK&lt;/a&gt; · More proof that web browsers are continuing to grow as a compile target for other platforms and runtimes. Having interop with other languages via WASM expands the types of tools that can be built. WASM hasn&apos;t caught on in a major sense, but I feel like we&apos;re going to look back in a few years and see browsers as a much richer and more capable platform than what we have today.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Misc&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/magnetic/52-things-i-learned-in-2023-a3bbb9f9323d&quot;&gt;52 things I learned in 2023.&lt;/a&gt; · End of year lists are always popular and make the rounds this time of year. I am choosing to share this one because I had the tab open.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://music.ishkur.com/&quot;&gt;Ishkur&apos;s Guide to Electronic Music&lt;/a&gt; via &lt;a href=&quot;https://www.dnalounge.com/backstage/log/2023/12/16.html&quot;&gt;jwz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ia.net/topics/ia-writer-fountain-template&quot;&gt;The iA Writer Template for Screenwriters&lt;/a&gt; · Back in college, I spent a lot of time in Final Draft and still carry the battle scars. iA Writer, on the other hand, has been making joyful software that I&apos;vehappily been using for more than a decade, so I was stoked when I heard about their screenwriting template. It&apos;s inspired me to look back on my old work and maybe write a little bit of new stuff.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.stripe.press/poor-charlies-almanack/&quot;&gt;Poor Charlie’s Almanack: The Essential Wit and Wisdom of Charles T. Munger&lt;/a&gt; · This should be required reading for everyone. I wish I had gotten on to this way earlier in my career, having only found out about it 4-5 years ago. Charlie was a great American and a singular thinker. We are blessed to have such a volume.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Aphantasia&quot;&gt;Aphantasia - Wikipedia&lt;/a&gt; · The diversity of human experience blows my mind, and I can picture that quite vividly in a variety of different ways, which itself is not universal. Some people lack the ability to project mental images at all. Brains are tricky!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thejollyteapot.com/november-2023-blend&quot;&gt;November blend of links&lt;/a&gt; · A very nice website that is also a link dump.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.johnhodgman.com/post/131161007023/judge-john-hodgman-settled-law&quot;&gt;JOHN HODGMAN — Judge John Hodgman Settled Law&lt;/a&gt; · These are all great and true, especially the Tom Waits rule. You cannot make your friends like everything you like!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://archive.org/details/Boardwatch1994-12/page/n7/mode/2up&quot;&gt;Boardwatch Magazine 1994-12 : Boardwatch Magazine : Free Download, Borrow, and Streaming : Internet Archive&lt;/a&gt; · also from jwz. I am a sucker for old tech magazines, and I had never seen Boardwatch before. Hours of fun to be had flipping through the archive here.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>An Even Worse Search</title><link>https://sambreed.dev/writing/2023/an-even-worse-search/</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/an-even-worse-search/</guid><description>Making my links posts searchable</description><pubDate>Thu, 21 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I have a new page that collects &lt;a href=&quot;/links&quot;&gt;All the Links&lt;/a&gt; from my links blog posts. This is about how I made the page and its lofi search experience.&lt;/p&gt;
&lt;p&gt;Go to &lt;a href=&quot;/links&quot;&gt;sambreed.dev/links&lt;/a&gt; or try this rickety old search box:&lt;/p&gt;
&lt;p&gt;If you tried that, welcome back.&lt;/p&gt;
&lt;p&gt;If you didn’t try that, it’s very simple. Put in a query like &lt;a href=&quot;/links?q=llm&quot;&gt;“LLM”&lt;/a&gt; (9 links) or &lt;a href=&quot;/links?q=javascript&quot;&gt;“javascript”&lt;/a&gt; (5 links) or &lt;a href=&quot;/links?q=pdf&quot;&gt;“pdf”&lt;/a&gt; (8 links) and you’ll see some matching links.&lt;/p&gt;
&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;h2&gt;Background&lt;/h2&gt;
&lt;p&gt;In 2022 I started posting all of my stray browser tabs at the end of every month. In 2023 I managed to keep the habit up for the whole year. I wasn’t always on time and I didn’t always leave a comment for every link, but I did get a modest little pile of links together: 296 at the time of writing.&lt;/p&gt;
&lt;p&gt;I think this is a response to never quite being able to make bookmarks work for me.&lt;/p&gt;
&lt;p&gt;A few weeks back, I added &lt;a href=&quot;../lil-vector-search&quot;&gt;embeddings search&lt;/a&gt; to my posts, but I felt that it was missing something. It was really hit-or-miss when it came to actually finding things I had posted. (By design, partially — it’s a toy.)&lt;/p&gt;
&lt;p&gt;It hit me that what I wanted was to see all the of links I’ve posted this year in one place. So now I have big list of links. What next?&lt;/p&gt;
&lt;h2&gt;User Experience&lt;/h2&gt;
&lt;p&gt;There are 3 elements at play:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Big list of all the links&lt;/li&gt;
&lt;li&gt;Search input that updates the list as you type&lt;/li&gt;
&lt;li&gt;Random link button&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A big list of links wasn’t entirely satisfying and not a great user experience. I didn’t want to re-create the presentation from the blog posts, where links are loosely categorized and presented with commentary.&lt;/p&gt;
&lt;p&gt;The list needed a way to filter it.&lt;/p&gt;
&lt;p&gt;I’ve always liked list filtering as a UX pattern and it almost always feels like a useful addition. I chose to have the list update as you type in addition to a working form submission.&lt;/p&gt;
&lt;p&gt;Filtering felt like only part of the puzzle.&lt;/p&gt;
&lt;p&gt;What I really wanted is a random button, an idea borrowed from &lt;a href=&quot;https://random.garbageday.email/&quot;&gt;Ryan Broderick’s excellent Garbage Day random section&lt;/a&gt;. There’s a link in the header that will open a random link from the list in a new tab.&lt;/p&gt;
&lt;h2&gt;How it works&lt;/h2&gt;
&lt;h3&gt;Aggregation&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://astro.build&quot;&gt;Astro&lt;/a&gt; provides great hooks for working with content collections, but I found that this use-case was a little bit outside the boundaries painted by their APIs.&lt;/p&gt;
&lt;p&gt;The easiest thing I could think of was to copy the pattern I established with the search embeddings: a script to look through my content at build time, grab the links, and output them in a JSON file.&lt;/p&gt;
&lt;p&gt;Armed with a JSON file of all the links, building a page to display them was trivial with Astro.&lt;/p&gt;
&lt;h3&gt;Inline Search&lt;/h3&gt;
&lt;p&gt;For the search, I started with JavaScript first. I felt that seeing the list update as you type would be a better experience.&lt;/p&gt;
&lt;p&gt;Instead of doing math-y vibe based search with embeddings, I opted to check the title and url for the search term.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-typescript&quot;&gt;const filterInput = document.querySelector(&quot;[data-filter]&quot;);
const links = document.querySelectorAll(&quot;nav[data-links] a&quot;);

filterInput.addEventListener(&quot;input&quot;, () =&gt; {
	const filter = filterInput.value.toLowerCase();

	if (!filter) {
		for (const link of links) {
			link.classList.remove(&quot;hidden&quot;);
		}
		return;
	}

	for (const link of links) {
		const text = link.textContent?.toLowerCase();
		if (text?.includes(filter) || link.href.includes(filter)) {
			link.classList.remove(&quot;hidden&quot;);
		} else {
			link.classList.add(&quot;hidden&quot;);
		}
	}
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This pattern is pretty dumb but it works. You wouldn’t want to do this with a large dataset, but it fits just fine for a few hundred links.&lt;/p&gt;
&lt;p&gt;JavaScript is at its best when it is enhancing HTML to provide a more dynamic user experience.&lt;/p&gt;
&lt;h3&gt;Form Submission&lt;/h3&gt;
&lt;p&gt;With inline search working, I figured that I might as well make the form capable of submitting like an honest, old-fashioned web-site would have.&lt;/p&gt;
&lt;p&gt;Again, Astro makes this simple. The site is deployed to Cloudflare Pages and has SSR on every page.&lt;/p&gt;
&lt;p&gt;When the links page is requested, it checks for an query string in the url and then filters the links list by hiding any links that don’t match the incoming query.&lt;/p&gt;
&lt;p&gt;The JavaScript search picks up seamlessly, restoring the full list when you clear the input without having to submit the form to refresh the page. Best of both worlds!&lt;/p&gt;
&lt;h3&gt;Random Links&lt;/h3&gt;
&lt;p&gt;An API endpoint with an HTTP redirect did the trick here, and can be linked to from anywhere. Give it a try:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/api/random-link&quot;&gt;sambreed.dev/api/random-link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It even works with search queries!&lt;/p&gt;
&lt;h2&gt;Going Further&lt;/h2&gt;
&lt;h3&gt;Fighting Link Rot&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Link_rot&quot;&gt;Link rot&lt;/a&gt; is a thing. I’m sure even some of the links I’ve collected in the past year have changed or moved or even disappeared entirely.&lt;/p&gt;
&lt;p&gt;The next step is to use the Internet Archive’s Wayback Machine to make archived versions of each of the links in my trove, and present them as an option to follow.&lt;/p&gt;
&lt;p&gt;This is already a convention I use in my &lt;a href=&quot;/cv.html&quot;&gt;résumé&lt;/a&gt; for the Quick Left website, which is now long gone from the web but still alive and well in the Wayback machine.&lt;/p&gt;
&lt;p&gt;Or maybe something more ambitious, like scraping the content (for research purposes, not to re-publish) and splitting it into embeddings or a full-text search, and build a proper little micro-search engine for the content I post about.&lt;/p&gt;
&lt;h3&gt;A little time capsule&lt;/h3&gt;
&lt;p&gt;What’s emerged for me from aggregating these links is that I’m making what amounts to a little time capsule of my web browsing every month. But unlike a time capsule, the quality of these links is guaranteed to degrade over time.&lt;/p&gt;
&lt;p&gt;The web is in constant motion and often ephemeral. This is my attempt to capture some of that tempest in a teapot.&lt;/p&gt;</content:encoded></item><item><title>Little Vector Search</title><link>https://sambreed.dev/writing/2023/lil-vector-search/</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/lil-vector-search/</guid><description>How to build a toy search engine with vector similarity search</description><pubDate>Sun, 17 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import SearchForm from &quot;~/components/search/SearchForm.astro&quot;;&lt;/p&gt;
&lt;p&gt;You might have noticed that there are now some search boxes on the site. They&apos;re powered by a toy vector search that I built. I like to call it &lt;em&gt;vibe based search&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Here&apos;s one:&lt;/p&gt;
&lt;p&gt;If you tried it out and came back, welcome back.&lt;/p&gt;
&lt;p&gt;If you didn’t try it, it’s pretty standard: enter a term like &lt;a href=&quot;/search?q=css&quot;&gt;“css”&lt;/a&gt; or &lt;a href=&quot;/search?q=web%20components&quot;&gt;“web components”&lt;/a&gt; or &lt;a href=&quot;/search?q=running&quot;&gt;“running”&lt;/a&gt; and it will show you some relevant posts. Pretty neat!&lt;/p&gt;
&lt;h2&gt;How it works&lt;/h2&gt;
&lt;p&gt;The caveman version goes like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;put numbers in file and search go brr&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The short, non-caveman version goes like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Encode the content as &lt;a href=&quot;https://huggingface.co/blog/getting-started-with-embeddings&quot;&gt;embeddings&lt;/a&gt; at build time.&lt;/li&gt;
&lt;li&gt;Encode incoming the search query.&lt;/li&gt;
&lt;li&gt;Use math to find the embeddings closest to the search query.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That’s it. Step 3 returns a list of content from Step 1. An API endpoint then returns the frontmatter for the top 6 results and I use that to render a list of results.&lt;/p&gt;
&lt;p&gt;Going a level deeper, there are 3 main problems to solve to make this work:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Encoding - create the embeddings correctly&lt;/li&gt;
&lt;li&gt;Retrieval - do math to find the right embeddings&lt;/li&gt;
&lt;li&gt;Web glue - render search results&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Encoding&lt;/h2&gt;
&lt;p&gt;I’m using OpenAI’s API to generate a vector for each blog post and wiki entry. A script runs at build time to retrieve and store all of the embeddings into JSON files, one for blog posts and one for wiki entries.&lt;/p&gt;
&lt;p&gt;The script itself is not very interesting.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;globs files to embed&lt;/li&gt;
&lt;li&gt;find previous embeddings, if any exist&lt;/li&gt;
&lt;li&gt;iterates through the files
&lt;ul&gt;
&lt;li&gt;extract frontmatter&lt;/li&gt;
&lt;li&gt;check if a previous embedding exists and if needs to be updated&lt;/li&gt;
&lt;li&gt;call OpenAI to create an embeddings using &lt;code&gt;text-embedding-ada-002&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;write the embeddings to a JSON file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At runtime, an embedding is generated for incoming search queries and are cached in the runtime.&lt;/p&gt;
&lt;h2&gt;Retrieval&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Cosine_similarity&quot;&gt;Cosine similarity&lt;/a&gt; is used to rank the embeddings. Given the paltry size of my data and the speed of modern programming languages, this can be done with brute force.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-typescript&quot;&gt;export type Vector = number[];

export type Embedding = {
	slug: string;
	embedding: Vector;
};

export type Score = {
	embedding: Embedding;
	score: number;
};

export function cosineSimilarity(a: Vector, b: Vector): number {
	const dotProduct = a.reduce((acc, val, i) =&gt; acc + val * b[i], 0);
	const magnitudeA = Math.sqrt(a.reduce((acc, val) =&gt; acc + val * val, 0));
	const magnitudeB = Math.sqrt(b.reduce((acc, val) =&gt; acc + val * val, 0));

	return dotProduct / (magnitudeA * magnitudeB);
}

export function findSimilarEmbeddings(query: Vector, embeddings: Embedding[], topK: number): Score[] {
	const scores: Score[] = embeddings.map((embedding) =&gt; ({
		embedding,
		score: cosineSimilarity(query, embedding.embedding),
	}));

	scores.sort((a, b) =&gt; b.score - a.score);

	return scores.slice(0, topK);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;h/t to the new &lt;a href=&quot;https://docs.mistral.ai/&quot;&gt;mistral-medium model&lt;/a&gt; for helping author this code.&lt;/p&gt;
&lt;h2&gt;Web glue&lt;/h2&gt;
&lt;p&gt;My website uses &lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt; and is deployed to Cloudflare Pages.&lt;/p&gt;
&lt;p&gt;The first step was to write an API endpoint. This provided good scaffolding while writing the retrieval code.&lt;/p&gt;
&lt;p&gt;Step two was to make a page with the search form that can render results. In the server portion of this page, I call the API endpoint, passing along the query string parameters from the page. This seems to be what &lt;a href=&quot;https://docs.astro.build/en/guides/data-fetching/#fetch-in-astro&quot;&gt;Astro recommends&lt;/a&gt; for data fetching.&lt;/p&gt;
&lt;p&gt;There is no JavaScript on the search page and it is not required to perform a search. After many years using React for everything, it is refreshing to use a framework that supports a JavaScript-free experience out of the box.&lt;/p&gt;
&lt;p&gt;Searches are simple GET requests and can be linked directly, e.g.: &lt;a href=&quot;/search?q=marathon&quot;&gt;marathon&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I considered moving the retrieval code directly into the page, since the API endpoint is otherwise unused.&lt;/p&gt;
&lt;h2&gt;Caveats&lt;/h2&gt;
&lt;p&gt;This is definitely a toy! It will always return results and they will not always be accurate!&lt;/p&gt;
&lt;p&gt;But then again, (and here’s the fun of cherry-picking my examples) some results &lt;em&gt;just work&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;One way to see past the shortcomings are to consider this as &lt;em&gt;vibe based&lt;/em&gt; search. Some of the posts have good vibes, so they return often.&lt;/p&gt;
&lt;p&gt;Full text search would likely be better overall, but would &lt;em&gt;not&lt;/em&gt; be vibe based so I’m not interested.&lt;/p&gt;
&lt;h2&gt;Areas for Improvement&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cache search query embeddings somewhere durable.
&lt;ul&gt;
&lt;li&gt;Searches are cached in memory in the Cloudflare worker, which has a short and unpredictable lifespan.&lt;/li&gt;
&lt;li&gt;These could be stored in one of Cloudflare’s database products. It’s small data but costs money to generate, so durable search embeddings would prevent repeatedly paying to encode the same search terms.&lt;/li&gt;
&lt;li&gt;Cloudflare even has &lt;a href=&quot;https://developers.cloudflare.com/vectorize/get-started/embeddings/&quot;&gt;a dedicated product for this&lt;/a&gt; called Vectorize. Fancy!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Increase granularity of embeddings
&lt;ul&gt;
&lt;li&gt;I’m only generating a single embedding for each piece of content.&lt;/li&gt;
&lt;li&gt;This is not ideal, but offered passable results and good performance. I experimented with adding text chunking, but the search felt worse and the JSON payload was much bigger.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Search has long been a default expectation on the web but perilously out of reach for many websites.&lt;/p&gt;
&lt;p&gt;Full text search frameworks like Elastic and OpenSearch offer a better out of the box experience than previous generations of search tech, but they do pose a steep learning curve and discrete infrastructure.&lt;/p&gt;
&lt;p&gt;Third-party providers like Algolia have long been a common solution, offering robust managed services and well-designed client integrations. Once your data is indexed correctly, it’s mostly hands-off.&lt;/p&gt;
&lt;p&gt;I set out to try adding vector search for my content to see where it netted out. I think the results are pretty good, given how dumb and blunt the technique feels: “put numbers in file and search go brrrr.”&lt;/p&gt;
&lt;p&gt;I’m excited to see where this goes and it&apos;s fun to see how practical a small machine learning task can be.&lt;/p&gt;</content:encoded></item><item><title>Little Web Components</title><link>https://sambreed.dev/writing/2023/lil-web-components/</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/lil-web-components/</guid><description>How I use little Web Components (Custom Elements) to improve my website</description><pubDate>Mon, 04 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;For as long as I can remember, I had assumed Web Components (Custom Elements) were in the &quot;still baking&quot; phase of the standards lifecyle. Not yet ready for consumption unless you wanted a more hazardous life as a web developer.&lt;/p&gt;
&lt;p&gt;That&apos;s no longer true: Web Components are ready to use.*&lt;/p&gt;
&lt;p&gt;Dave Rupert recently &lt;a href=&quot;https://daverupert.com/2023/10/fitvids-has-a-web-component-now/&quot;&gt;shared a post&lt;/a&gt; about his &lt;code&gt;&amp;#x3C;fit-vids&gt;&lt;/code&gt; component that caught my attention. For the first time, Web Components seemed simple and approachable. I didn&apos;t have to re-write my entire website to use them! I decided to follow his example of giving Custom Elements a try the next time I need a little DOM thing.&lt;/p&gt;
&lt;p&gt;As of today, I have three little components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;share-button&gt;&lt;/code&gt; wraps a standard &lt;code&gt;&amp;#x3C;button&gt;&lt;/code&gt; to trigger the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Web_Share_API&quot;&gt;Web Share API&lt;/a&gt; if available, otherwise copying the link to the clipboard.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;reply-link&gt;&lt;/code&gt; uses the Shadow DOM to keep my email address out of crawlers.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;#x3C;code-block&gt;&lt;/code&gt; adds a little &quot;copy to clipboard&quot; button to every preformatted code element&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;*&lt;em&gt;More or less.&lt;/em&gt; If you want a full framework, look at something like &lt;a href=&quot;https://enhance.dev/&quot;&gt;Enhance&lt;/a&gt;. My examples are not by any means comprehensive.&lt;/p&gt;
&lt;h2&gt;ShareButton&lt;/h2&gt;
&lt;p&gt;This is a case where I normally would have written a few lines of vanilla JS and called it a day. With Web Components I can write a few lines of vanilla JS and call it a day, but this time with newer tools.&lt;/p&gt;
&lt;p&gt;The component launches a share sheet using the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Web_Share_API&quot;&gt;Web Share API&lt;/a&gt; when available, otherwise it copies the current link to the clipboard (and changes the button text to indicate what just happened).&lt;/p&gt;
&lt;p&gt;The user experience doesn&apos;t seem that much different. But after years of using UI components in other contexts, I prefer the custom element:&lt;/p&gt;
&lt;p&gt;Custom Element:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;#x3C;share-button data-title=&quot;Little Web Components&quot; data-link=&quot;/writing/2023/lil-web-components&quot;&gt;
	&amp;#x3C;button&gt;Share&amp;#x3C;/button&gt;
&amp;#x3C;/share-button&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CSS Selector:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;#x3C;button class=&quot;share-button&quot; data-title=&quot;Little Web Components&quot; data-link=&quot;/writing/2023/lil-web-components&quot;&gt;
	Share
&amp;#x3C;/button&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I like the Custom Element because it clearly delineates between presentation and function. &lt;code&gt;&amp;#x3C;button&gt;&lt;/code&gt; is a visual element. &lt;code&gt;&amp;#x3C;share-button&gt;&lt;/code&gt; is a functional element.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;class ShareButton extends HTMLElement {
	constructor() {
		super();

		const { title, link, description } = this.dataset;
		if (!link) return;

		const $button = this.querySelector(&quot;button&quot;);
		if (!$button) return;

		$button.addEventListener(&quot;click&quot;, () =&gt; {
			if (&quot;share&quot; in navigator) {
				share();
			} else if (&quot;clipboard&quot; in navigator) {
				copyToClipboard();
			}
		});

		function share() {
			// call navigator.share()
		}

		function copyToClipboard() {
			// call navigator.clipboard.writeText()
			// swap the button text
		}
	}
}

customElements.define(&quot;share-button&quot;, ShareButton);
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;ReplyLink&lt;/h2&gt;
&lt;p&gt;This one seems a little silly and is definitely an afterthought. Instead of dumping a plain old anchor tag with a &lt;code&gt;mailto:&lt;/code&gt; URL scheme, I&apos;ve wrapped that into a custom element. Similar to ShareButton, I pass in a &lt;code&gt;title&lt;/code&gt; and &lt;code&gt;link&lt;/code&gt; and the component formats the URL scheme to open an email with a subject and a body.&lt;/p&gt;
&lt;p&gt;Before / without JavaScript, the link is inert. Maybe you&apos;re not a fan, but I&apos;m fine with this. There&apos;s a little extra work to go through in order to get the link styled correctly, but that&apos;s the cost of &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_shadow_DOM&quot;&gt;using the Shadow DOM&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;#x3C;reply-link data-title=&quot;Little Web Components&quot; data-link=&quot;/writing/2023/lil-web-components&quot;&gt; → Reply &amp;#x3C;/reply-link&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can see this and ShareButton in action at the bottom of this page.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;class ReplyLink extends HTMLElement {
	constructor() {
		super();
	}
	connectedCallback() {
		const { title, link } = this.dataset;
		if (!link) return;

		const shadow = this.attachShadow({ mode: &quot;closed&quot; });
		const subject = encodeURIComponent(`Re: ${title}`);
		const body = encodeURIComponent(`\n\nLink to: ${link}\n`);

		const style = document.createElement(&quot;style&quot;);
		style.textContent = `
      a {
        color: var(--text-dim);
        text-decoration: none;
      }
      a:hover {
        text-decoration: underline;
        text-underline-offset: 2px;
      }
    `;

		const a = document.createElement(&quot;a&quot;);
		a.setAttribute(&quot;href&quot;, `mailto:test@example.com?subject=${subject}&amp;#x26;body=${body}`);
		a.innerHTML = &quot;→ Reply&quot;;

		shadow.append(style, a);
	}
}

customElements.define(&quot;reply-link&quot;, ReplyLink);
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;CodeBlock&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;&amp;#x3C;code-block&gt;&lt;/code&gt; adds a &quot;Copy to Clipboard&quot; button to code blocks. Code highlighting is already done by Astro. An earlier version of this component handled syntax highlighting, but it is only suitable for client-generated text.&lt;/p&gt;
&lt;p&gt;I&apos;m using the &quot;Light DOM&quot; pattern again here. The component simply wraps its children and adds functionality.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;#x3C;code-block&gt;
	&amp;#x3C;pre&gt;
    &amp;#x3C;code&gt;
      console.log(&quot;Wow, look at that copy button up there 👆&quot;)
    &amp;#x3C;/code&gt;
  &amp;#x3C;/pre&gt;
&amp;#x3C;/code-block&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;class CodeEmbed extends HTMLElement {
	constructor() {
		super();
	}

	connectedCallback() {
		const button = document.createElement(&quot;button&quot;);
		button.innerHTML = `&amp;#x3C;svg viewBox=&quot;0 0 20 20&quot; width=&quot;16&quot; height=&quot;16&quot;&gt;
      &amp;#x3C;use href=&quot;/icon-sprite.svg#icon-copy&quot;&gt;&amp;#x3C;/use&gt;
    &amp;#x3C;/svg&gt;`;

		button.addEventListener(&quot;click&quot;, () =&gt; {
			navigator.clipboard.writeText(this.querySelector(&quot;pre&quot;)?.textContent ?? &quot;&quot;);
			const span = document.createElement(&quot;span&quot;);
			span.innerHTML = &quot;Copied!&quot;;
			button.prepend(span);
			setTimeout(() =&gt; {
				span.remove();
			}, 1000);
		});

		this.append(button);
	}
}

customElements.define(&quot;code-block&quot;, CodeEmbed);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And here&apos;s the plugin that adds it to code blocks automatically:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;function rehypeCodeWrapperPlugin() {
	return function transformer(tree) {
		visit(tree, &quot;raw&quot;, (node) =&gt; {
			if (node.value.startsWith(&quot;&amp;#x3C;pre&quot;)) {
				const rawContent = node.value;
				node.value = `&amp;#x3C;code-block&gt;${rawContent}&amp;#x3C;/code-block&gt;`;
			}
		});
		return tree;
	};
}
&lt;/code&gt;&lt;/pre&gt;</content:encoded></item><item><title>Links, November 2023</title><link>https://sambreed.dev/writing/2023/links-november-2023/</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/links-november-2023/</guid><description>Every month I turn my open browser tabs into a blog post.</description><pubDate>Thu, 30 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Year of the Large Language Model&lt;/p&gt;
&lt;p&gt;It has been one year since ChatGPT was released. Being in the AI space before then now qualifies as having been &quot;early.&quot; And things still seem to be speeding up.&lt;/p&gt;
&lt;p&gt;Although multi-modal capabilities have existed in some fashion for some time (namely, that CLIP embeddings offer a shared latent space for text and images), crossing between modalities seamlessly with a single model has been challenging. No more.&lt;/p&gt;
&lt;p&gt;The ChatGPT-4V lineage of models successfully interpret and produce images, which has almost immediately led to some very interesting use cases. Watch the video below from Twitter user @tazsingh to get the sense for what I mean.&lt;/p&gt;
&lt;p&gt;https://twitter.com/tazsingh/status/1729578330200891552&lt;/p&gt;
&lt;p&gt;The first link on deck is about the platform used to make the demo, tldraw.&lt;/p&gt;
&lt;p&gt;What’s more, good video generation seems to be right around the corner. Stability AI released SDVideo this month, their model and weights for generating short 1-2s of video. The video at the top of the page of a oceanside mountain framed by clouds was first generated in Dalle3 and then animated with SDVideo. Of a number of samples I tried, this was the best one. It&apos;s not quite there yet, but it&apos;s getting close to being quite good.&lt;/p&gt;
&lt;p&gt;Skeptics may argue that LLMs are neither new nor special, and that the hype around them is just that. But the bottom line is that computers are getting new features and abilities that were &lt;em&gt;very&lt;/em&gt; out of reach even 4 years ago. There is something happening here.&lt;/p&gt;
&lt;h2&gt;AI&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://tldraw.substack.com/p/make-real-the-story-so-far&quot;&gt;make real, the story so far - by Steve Ruiz - tldraw&lt;/a&gt; · Really impressed by what they&apos;ve built here. It&apos;s simple and refreshing, and now getting very powerful AI tools.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/docs/diffusers/using-diffusers/sdxl&quot;&gt;Stable Diffusion XL&lt;/a&gt; · Image generation is quickly becoming a commodity feature, largely due to Stable Diffusion continuing to release open&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joshwcomeau.com/css/interactive-guide-to-grid/&quot;&gt;An Interactive Guide to CSS Grid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lmstudio.ai/&quot;&gt;LM Studio - Discover, download, and run local LLMs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/spaces/dylanebert/igf&quot;&gt;IGF - a Hugging Face Space by dylanebert&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;paper (pdf): &lt;a href=&quot;https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gaussian_splatting_low.pdf&quot;&gt;3D Gaussian Splatting for Real-Time Radiance Field Rendering&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.ai/prompt-ide/&quot;&gt;PromptIDE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Front End&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://vitejs.dev/&quot;&gt;Vite&lt;/a&gt; - Vite has been a refreshing “just does the thing” type of tool. It’s fast, versatile, and seems to now be the defacto starting point for new web projects. Remix is considering move to a Vite plugin. Astro and Sveltekit are already there.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://meyerweb.com/eric/thoughts/2023/11/01/blinded-by-the-light-dom/&quot;&gt;Blinded By the Light DOM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vercel.com/blog/partial-prerendering-with-next-js-creating-a-new-default-rendering-model&quot;&gt;Building towards a new default rendering model for web applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/transition-behavior&quot;&gt;Transition Behavior&lt;/a&gt; - very cool new property tat I’ve added to my &lt;a href=&quot;/wiki/computers/web-development/front-end/new-css&quot;&gt;CSS Wiki page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Misc&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.robinsloan.com/moonbound/introduction/&quot;&gt;Notes toward a pitch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cabel.com/2023/11/06/dak-and-the-golden-age-of-gadget-catalogs/&quot;&gt;DAK and the Golden Age of Gadget Catalogs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cabel.com/2023/10/06/nintendo-corporate-brochure-2015/&quot;&gt;Nintendo Company Brochure (2015) – cabel.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sunglasscity.com/&quot;&gt;Wink Optics San Anselmo (formerly Sunglass City)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.icasf.org/calendar/159-illuminate-an-evening-with-rupy-c-tut&quot;&gt;Illuminate: An Evening with Rupy C. Tut - ICA SF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nature.com/articles/ncomms4677&quot;&gt;Social heuristics shape intuitive cooperation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://simonwillison.net/2019/Feb/19/eleven-laws-showrunning/&quot;&gt;The Eleven Laws of Showrunning&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://okbjgm.weebly.com/uploads/3/1/5/0/31506003/11_laws_of_showrunning_nice_version.pdf&quot;&gt;11 laws of showrunning NICE VERSION&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tech&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://maggieappleton.com/folk-interfaces&quot;&gt;Folk Interfaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://snarkmarket.com/2010/6498/&quot;&gt;A hypothetical path to the Speakularity / Snarkmarket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cra.mr/a-seven-dollar-subscription&quot;&gt;A $7 Subscription&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://12mv2.com/2023/10/05/2851-miles-bill-gurley-transcript-slides/&quot;&gt;2,851 Miles // Bill Gurley (Transcript + Slides)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vadimkravcenko.com/shorts/habits-of-great-software-engineers/&quot;&gt;Habits of great software engineers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codemanship.wordpress.com/2023/11/20/the-bluffers-guide-to-the-mythical-man-month/&quot;&gt;The Bluffer’s Guide to The Mythical Man-Month&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://engineering.fb.com/2023/09/07/culture/threads-inside-story-metas-newest-social-app/&quot;&gt;Threads: The inside story of Meta’s newest social app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://josem.co/the-beauty-of-finished-software/&quot;&gt;The beauty of finished software | Jose M.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jvns.ca/blog/2023/11/01/confusing-git-terminology/&quot;&gt;Confusing git terminology&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And one very nice personal website:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://manuelmoreale.com/&quot;&gt;Manu – I write&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, October 2023</title><link>https://sambreed.dev/writing/2023/links-oct-2023/</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/links-oct-2023/</guid><description>shorter days for links</description><pubDate>Tue, 31 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;October is the longest month in Q4. This is somewhat cursed knowledge.&lt;/p&gt;
&lt;p&gt;You only know that if you&apos;ve been on a tight deadline as the end of the year approaches, and if you ever bother to count the work days, excluding the holidays. Close to 20 in October. Less in November and even fewer in December because of the holidays.&lt;/p&gt;
&lt;p&gt;So it&apos;s only fitting that I completely blew it and am doing this a few days late, having made sure that my October was as jam packed with work as possible, an unconscious reaction from years of quarterly grinding, but I am not complaining. Here are the links from October 2023.&lt;/p&gt;
&lt;p&gt;I&apos;ve been reading &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Vineland&quot;&gt;Vineland&lt;/a&gt; by Thomas Pynchon, a book I remember starting but never finishing. I picked it back up after reading &lt;a href=&quot;&quot;&gt;The Ghost Forest&lt;/a&gt; by Greg King, which had reminded me of Vineland in some key details.&lt;/p&gt;
&lt;h2&gt;Front End&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.epicweb.dev/why-i-wont-use-nextjs&quot;&gt;Why I Won&apos;t Use Next.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;https://chriscoyier.net/2023/10/17/a-couple-of-new-css-functions-id-never-heard-of/&lt;/li&gt;
&lt;li&gt;https://lp.jetbrains.com/javascriptday2023/&lt;/li&gt;
&lt;li&gt;https://sockets-api.proposal.wintercg.org/&lt;/li&gt;
&lt;li&gt;https://benv.ca/blog/posts/the-story-of-third-party-javascript&lt;/li&gt;
&lt;li&gt;https://github.com/rafunderscore/Layers&lt;/li&gt;
&lt;li&gt;https://marvinh.dev/blog/speeding-up-javascript-ecosystem-part-5/&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://csswizardry.com/2023/10/the-three-c-concatenate-compress-cache/&quot;&gt;The Three Cs: 🤝 Concatenate, 🗜️ Compress, 🗳️ Cache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thehistoryoftheweb.com/postscript/wait-whats-a-bookmarklet/&quot;&gt;Wait, what&apos;s a bookmarklet? - The History of the Web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;https://webkit.org/blog/13813/try-css-nesting-today-in-safari-technology-preview/&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Software (other)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://tonsky.me/blog/unicode/&quot;&gt;The Absolute Minimum Every Software Developer Must Know About Unicode in 2023&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ludic.mataroa.blog/blog/i-accidentally-saved-half-a-million-dollars/&quot;&gt;I Accidentally Saved Half A Million Dollars&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://posthog.com/founders/dev-marketing-paid-ads&quot;&gt;Burning money on paid ads for a dev tool – what we&apos;ve learned - PostHog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mitchellh.com/writing/github-changesets&quot;&gt;Reorient GitHub Pull Requests Around Changesets – Mitchell Hashimoto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fermatslibrary.com/s/ancient-babylonian-algorithms#email-newsletter&quot;&gt;Fermat&apos;s Library | Ancient Babylonian Algorithms annotated/explained version.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;https://cra.mr/work-life-balance&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codeconfessions.substack.com/p/gpu-computing&quot;&gt;What Every Developer Should Know About GPU Computing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;AI&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://electricarchaeology.ca/2023/10/24/using-simon-willisons-llm-package-to-extract-a-knowledge-graph/&quot;&gt;Using Simon Willison’s LLM Package to Extract a Knowledge Graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/microsoft/autogen&quot;&gt;microsoft/autogen: Enable Next-Gen Large Language Model Applications. Join our Discord: https://discord.gg/pAbnFJrkgZ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://agentprotocol.ai/endpoints#create-agent-task&quot;&gt;Agent Protocol Description - Agent Protocol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ben-evans.com/benedictevans/2023/10/5/unbundling-ai&quot;&gt;Unbundling AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;https://river.maxbittker.com/?id=7304306&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Misc&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://www.youtube.com/watch?v=Gk-9Fd2mEnI
&lt;ul&gt;
&lt;li&gt;Look, I&apos;m not in the Steve Jobs cult. But it&apos;s hard to deny the impact his work has had on the world. I&apos;m typing this into a Macbook. And the content on display in this MIT Lecture he gave in 1992 is first rate.
&lt;ul&gt;
&lt;li&gt;hardware churns every 18 months&lt;/li&gt;
&lt;li&gt;software churns much more slowly. 9 years for Microsoft to ape the Mac.
&lt;ul&gt;
&lt;li&gt;going further: 20 years for NEXT to become the default OS for most software dev (1990-2010), 10 years for Microsoft to flip the dev market back to them by giving up on Windows hegemony (2012-2022)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Moral_luck&quot;&gt;Moral luck - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://apod.nasa.gov/apod/image/2310/HiResSprites_Escurat_3000.jpg&quot;&gt;HiResSprites_Escurat_3000.jpg (3000×2000)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.c82.net/hummingbirds/posters&quot;&gt;Posters - Humming-Birds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.jofreeman.com/joreen/tyranny.htm&quot;&gt;The Tyranny of Stuctureless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://books.worksinprogress.co/book/maintenance-of-everything/vehicles/digression-4-sustainment-how-poor-maintenance-loses-wars-1973-israel-maintains/1&quot;&gt;Digression 4 - SUSTAINMENT - How Poor Maintenance Loses Wars - 1973, Israel Maintains - First Draft | Books in Progress&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, September 2023</title><link>https://sambreed.dev/writing/2023/links-sept-2023/</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/links-sept-2023/</guid><description>faintly falling, falling faintly, fall links</description><pubDate>Sat, 30 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I write these posts on the last day of the month, so it&apos;s very easy for recency bias to creep in. This month, I kept a document open as a running list of the links I felt were noteworthy.&lt;/p&gt;
&lt;p&gt;In addition to these swell links, a few months ago I added an RSS feed that mirrors my favorites from Feedbin: https://sambreed.dev/starred.xml&lt;/p&gt;
&lt;h2&gt;AI&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Simon Wilson continues to have excellent takes on AI. https://simonwillison.net/2023/Sep/29/llms-podcast/#comparing-llms-to-crypto
&lt;ul&gt;
&lt;li&gt;Particularly, what he says about being able to convince yourself that it&apos;s useless. This type of motivated reasoning is shallow skepticism.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;https://maggieappleton.com/squish-structure
&lt;ul&gt;
&lt;li&gt;Maggie&apos;s website and takes on, well, everything are fantastic. The content here has a lot of parallels to work that I&apos;ve been party to on the SHV design team for the last 3 years, and I&apos;m excited to see similar ideas presented so well here.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;https://www.leebutterman.com/2023/06/01/offline-realtime-embedding-search.html&lt;/li&gt;
&lt;li&gt;https://supabase.com/blog/increase-performance-pgvector-hnsw&lt;/li&gt;
&lt;li&gt;https://arxiv.org/abs/1901.05103&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Long Reads&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.neversaw.us/2023/09/04/understanding-wasm/part3/you-are-here/&quot;&gt;Understanding WASM&lt;/a&gt; Part 3 of a tour-de-force blog post by Chris Dickinson. I&apos;ve never met Chris, but know some of the folks he&apos;s worked with and have been following him for several years. He&apos;s a sharp thinker and this is an all-timer. It opens with the most concise definition of how processes work that I&apos;ve ever read.&lt;/li&gt;
&lt;li&gt;https://www.ben-evans.com/benedictevans/2023/8/24/when-tech-says-no
&lt;ul&gt;
&lt;li&gt;People like to rag on Ben Evans but I don&apos;t get it. I&apos;ve always gotten a lot out of his newsletter, and posts like this that help frame broader problems of the tech industry&apos;s interplay with politics and legislation are a primary example of that.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;https://thetaoofwealth.wordpress.com/2013/02/17/harry-brownes-17-golden-rules-of-financial-safety/
&lt;ul&gt;
&lt;li&gt;a 10+ year old post, gotta love the web.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tomcritchlow.com/wiki/books/bookshelves/&quot;&gt;List of digital bookshelves&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I used to do this (sort of) but then fell off. Sourcing cover images and links and keeping it up to date was a pain. I don&apos;t want to give in to Goodreads, I have enough Amazon in my life already without giving them even more data.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;https://pluralistic.net/2023/09/05/not-that-naomi/
&lt;ul&gt;
&lt;li&gt;If I linked to every Cory Doctorow post I read, this blog would mostly be links to Cory Doctorow posts. I&apos;ve been reading him since 2007, when I first started noticing &quot;blogging&quot; and &quot;bloggers&quot; were a thing. I read Eastern Standard Tribe and Someone Comes to Town, Someone Leaves Town&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;https://books.worksinprogress.co/book/maintenance-of-everything/vehicles/digression-3-corrosion-rust-never-sleeps/3
&lt;ul&gt;
&lt;li&gt;Rust is super interesting and I&apos;m looking forward to reading more of this book as it comes out, BUT&lt;/li&gt;
&lt;li&gt;My hot takes from reading his biography last year are still heavy in my mind:
&lt;ul&gt;
&lt;li&gt;Brand is a trust fund baby and an unrepentant asshole, treated his first wife like shit, entertaining multiple affairs while stringing her along. If I knew someone that did this IRL, I would not want to associate with them. If you&apos;re unhappy and want to be with other people, fine. End it and move on. Don&apos;t hurt the other party. The book describes him as being miserably depressed during all of this, to which my response was, &quot;yes.&quot;&lt;/li&gt;
&lt;li&gt;He frequently used people. He didn&apos;t ever comprehend that his easy relationship to money wasn&apos;t universal. It&apos;s easy to think that nobody needs something you have in abundance.&lt;/li&gt;
&lt;li&gt;He shows up at the right place at the right time. It&apos;s luck. He&apos;s just a lucky guy.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Frontend&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://deck-24abcd.netlify.app/
&lt;ul&gt;
&lt;li&gt;https://vercel.com/blog/building-an-interactive-webgl-experience-in-next-js&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;https://github.com/shikijs/shiki
&lt;ul&gt;
&lt;li&gt;I used this to add code highlighting to and AI chat ui I maintain for work.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;https://xtermjs.org/
&lt;ul&gt;
&lt;li&gt;This is cool!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/tigt/why-not-react-2f8l&quot;&gt;why not react&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Q3 2023 will be marked as the quarter that I lost faith in React, embraced Svelte, and learned that not all choices will stand the test of time. React will remain the leader in frontend imaginations for a bit longer, but I think that its time in the sun is starting to wane. The failure and complexity of Next.js&apos;s App directory.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;https://www.joshwcomeau.com/react/server-components/ &apos;splainer on React Server components. I love Josh&apos;s website.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.partykit.io/posts/live-polls-with-stencil/&quot;&gt;Using Stencil to make a live poll Web Component&lt;/a&gt; Someday, somehow, Web Components will be something that we all use. Not yet, however, we&apos;re getting closer.&lt;/li&gt;
&lt;li&gt;https://begin.com/blog/posts/2023-09-28-introducing-enhance-music More jangle and discord concerning Web Components. I wish this weren&apos;t shackled to a custom deployment infrastructure (squints) that&apos;s somehow not considered a build step by the authors. Get this tech on other platforms and it&apos;s way more interesting.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chriscoyier.net/2023/09/16/live-coding-interviews/&quot;&gt;Chis Coyier on Live Coding Interviews&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;This is a complex issue! and I have opinions!
&lt;ul&gt;
&lt;li&gt;Everyone hates coding interviews.&lt;/li&gt;
&lt;li&gt;Interviewing a candidate is fundamentally a low trust situation.&lt;/li&gt;
&lt;li&gt;Interviews must build trust between the company and the developer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Background. I hired 120 front end developers at Credit Karma between 2015-2019. By the time I left in 2020, I had conducted over 400 interviews. I helped build the interview loop that was used by the entire company as it grew by 5x during my tenure. Before that, at my consultancy, I hired ~60 developers in 6 years (unfortunately I only have the numerator here, but it&apos;s safe to assume that I interviewed more developers here than we hired.) Since 2020, I&apos;ve been advising and building companies at Sutter Hill Ventures.&lt;/li&gt;
&lt;li&gt;Live coding helps build conviction that the candidate can do the work themselves.
&lt;ul&gt;
&lt;li&gt;Take homes place a lot of trust in a candidate. Take-homes can be the source of a hiring signal, but there&apos;s not a good way to falsify that the candidate did the work themselves. AI tools have made this even more difficult.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Take-homes present a Moral Hazard for the candidate. Nobody wants to assume bad intent. But there is an opportunity for a candidate to misrepresent themselves in a take home exercise in ways that insert doubt into the process.
&lt;ul&gt;
&lt;li&gt;Taking longer than the time allocated. The separation between a new developer and one with years of experience is the time it takes to solve an unfamiliar problem. This is fine, but if you&apos;re hiring someone for their experience, you can&apos;t judge the speed of their responses. If someone completes a take home successfully but takes 8 hours instead of 1, you&apos;ll never know without blindly trusting the candidate.&lt;/li&gt;
&lt;li&gt;Using outside resources. Phone a friend, ask AI, crib from an open source project. Of course, given the situation on the job, these behaviors are normal and appropriate in the day to day. Resourcefulness is good! But so is situational awareness. If you wouldn&apos;t do it during a coding interview, you shouldn&apos;t do it during a take home. But who&apos;s watching...&lt;/li&gt;
&lt;li&gt;Sharing evaluation materials. Your interview questions will get out no matter what. Having a backup is important.&lt;/li&gt;
&lt;li&gt;At best, a take home should be time-boxed and then evaluated in a follow-up session with the candidate. This is more work for both parties.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Hiring is tough. The company is trying to find someone to perform in a technical role. Finding out if they&apos;ll be able to fulfill the job expectations. Trust cannot be built up instantly. In a negotiation, each party must be willing to give something up in order to proceed. For the company, they&apos;re willing to part with their time, resources, and capital.&lt;/li&gt;
&lt;li&gt;Good hiring is about building trust. The company must trust that a candidate is representing themselves honestly. Likewise, a candidate must trust that the company is presenting the role and benefits accurately.
&lt;ul&gt;
&lt;li&gt;Everyone lies a little. It&apos;s what humans do!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Take-home&apos;s are great, if
&lt;ul&gt;
&lt;li&gt;You have limited time to conduct in-person interviews.&lt;/li&gt;
&lt;li&gt;You can balance out moral hazards.&lt;/li&gt;
&lt;li&gt;You understand that they provide different signals than live-coding.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Backend&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://avestura.dev/blog/explaining-the-postgres-meme&lt;/li&gt;
&lt;li&gt;More postgres things. Serverless Status, one of the newsletters that I&apos;ve been subbed to for many years, wound down in September. This was offered as something to replace it with? ok, I&apos;ll drop it in feedbin. https://postgresweekly.com/issues/522&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Etc&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;https://platinuminch24.notion.site/platinuminch24/100-lesser-known-but-useful-websites-78a9949a56fa422997a76f5331da02c9
&lt;ul&gt;
&lt;li&gt;I&apos;m not sure about notion as a long-term hosting platform, but what do I know. Lists are good and cool.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;https://journals.sagepub.com/doi/10.1177/17456916221148147&lt;/li&gt;
&lt;li&gt;https://motd.co/2023/09/postmarks-launch/&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, August 2023</title><link>https://sambreed.dev/writing/2023/links-august-2023/</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/links-august-2023/</guid><description>shaking out the tabs from the bottom of the bag</description><pubDate>Thu, 31 Aug 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Tech&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.theverge.com/23846048/google-search-memes-images-pagerank-altavista-seo-keywords?utm_source=substack&amp;#x26;utm_medium=email&quot;&gt;How Google made the world go viral - The Verge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.allthingsdistributed.com/2023/07/building-and-operating-a-pretty-big-storage-system.html&quot;&gt;Building and operating a pretty big storage system called S3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://redmonk.com/sogrady/2023/08/03/why-opensource-matters/&quot;&gt;Why Open Source Matters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://indies.substack.com/p/providing-payment-transparency-with&quot;&gt;Providing payment transparency with Indie Protocol&apos;s subgraph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adactio.com/journal/20363&quot;&gt;Adactio: Journal—Opportunity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1968.PDF&quot;&gt;nato1968.indd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://loup-vaillant.fr/articles/hsm-done-right&quot;&gt;Hardware Security Modules Done Right&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://robinrendle.com/essays/systems-mistakes-and-the-sea/&quot;&gt;Systems, Mistakes, and the Sea&lt;/a&gt; - a beutiful website&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ffmpeg.lav.io/&quot;&gt;FFmpeg Explorer!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;AI&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.anyscale.com/blog/fine-tuning-llama-2-a-comprehensive-case-study-for-tailoring-models-to-unique-applications&quot;&gt;Fine-Tuning Llama-2: A Comprehensive Case Study for Tailoring Models to Unique Applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://srush.github.io/annotated-s4/&quot;&gt;The Annotated S4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/steven2358/awesome-generative-ai&quot;&gt;steven2358/awesome-generative-ai: A curated list of modern Generative Artificial Intelligence projects and services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/hegelai/prompttools&quot;&gt;hegelai/prompttools&lt;/a&gt; - another one&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/normal-computing/outlines/blob/main/outlines/models/hf_transformers.py#L263-L266&quot;&gt;steer json generation with logits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://neon.tech/blog/pg_embedding-on-disk-hnsw-index&quot;&gt;On-sidk HNSW index for Postgres&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/papers/2305.16311&quot;&gt;Break-A-Scene: Extracting Multiple Concepts from a Single Image&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fontend&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bryanbraun.com/after-dark-css/all/flying-toasters.html&quot;&gt;Flying Toasters Screensaver | After Dark in CSS&lt;/a&gt; - I remember buying the After Dark screensavers in the 90s. I liked this one and the dog that dug up holes on your desktop.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dodov.dev/blog/why-does-email-development-have-to-suck&quot;&gt;Why Does Email Development Have to Suck?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://alistapart.com/article/axiomatic-css-and-lobotomized-owls/&quot;&gt;Axiomatic CSS and Lobotomized Owls – A List Apart&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;which was featured in this list &lt;a href=&quot;https://esif.dev/&quot;&gt;Educational Sensational Inspirational Foundational&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fontsource.org/&quot;&gt;Fontsource&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://htmx.org/essays/hypermedia-on-whatever-youd-like/&quot;&gt;&amp;#x3C;/&gt; htmx ~ Hypermedia On Whatever you&apos;d Like&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/raunofreiberg/interfaces&quot;&gt;Web Interface Guidelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ui.gallery/&quot;&gt;User Interface Gallery&lt;/a&gt; - I love this. Great url too.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nolanlawson.com/2023/08/23/use-web-components-for-what-theyre-good-at/&quot;&gt;Use web components for what they’re good at&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Microsoft/fast&quot;&gt;microsoft/fast&lt;/a&gt; - Web Component framework from Microsoft&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://openusd.org/release/intro.html&quot;&gt;Introduction to USD — Universal Scene Description 23.08 documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;This is neat&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://phoboslab.org/log/2023/08/rewriting-wipeout&quot;&gt;Rewriting Wipeout&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;and &lt;a href=&quot;https://fabiensanglard.net/ega/&quot;&gt;Commander Keen&apos;s Adaptive Tile Refresh&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;and &lt;a href=&quot;http://alexey.stomakhin.com/research/siggraph2022_loki.pdf&quot;&gt;Loki: A Unified Multiphysics Simulation Framework for Production (pdf)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tbeseda.com/experiments/omnivore&quot;&gt;Taylor Beseda /experiments/omnivore&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.omnivore.app/&quot;&gt;Welcome to Omnivore | Omnivore Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://zachklein.com/Sidewalk+Garden&quot;&gt;Sidewalk Garden - Zach Klein&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://us.carhartt-wip.com/products/essentials-bag-small-highland-1829&quot;&gt;Carhartt WIP Essentials Bag&lt;/a&gt; - I don&apos;t need another bag, I don&apos;t need another bag, I don&apos;t...&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.robinsloan.com/newsletters/feeling-of-something-waiting-there-for-you/&quot;&gt;Robin Sloan - The feeling of something waiting there for you&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rauno.me/craft&quot;&gt;The best portfolio site I&apos;ve seen in a long time. Wow.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, July 2023</title><link>https://sambreed.dev/writing/2023/links-july-2023/</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/links-july-2023/</guid><description>too many tabs, not enough time</description><pubDate>Mon, 31 Jul 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;AI&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sdxl.replicate.dev/&quot;&gt;SDXL – A settings guide by Replicate&lt;/a&gt; - most important AI link this month, how to generate cats real good&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.understandingai.org/p/large-language-models-explained-with&quot;&gt;Large language models, explained with a minimum of math and jargon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://deeprevision.github.io/posts/001-transformer/&quot;&gt;AI Research Blog - The Transformer Blueprint: A Holistic Guide to the Transformer Neural Network Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.oneusefulthing.org/p/how-to-use-ai-to-do-stuff-an-opinionated&quot;&gt;How to Use AI to Do Stuff: An Opinionated Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://a16z.com/2023/06/23/the-next-token-of-progress-4-unlocks-on-the-generative-ai-horizon/&quot;&gt;The Next Token of Progress: 4 Unlocks on the Generative AI Horizon | Andreessen Horowitz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hacks.mozilla.org/2023/07/so-you-want-to-build-your-own-open-source-chatbot/&quot;&gt;So you want to build your own open source ChatGPT-style chatbot... - Mozilla Hacks - the Web developer blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Front-End&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@NateBaldwin/creating-a-flexible-design-token-taxonomy-for-intuits-design-system-81c8ff55c59b&quot;&gt;Creating a flexible design token taxonomy for Intuit’s Design System | by Nate Baldwin | Jun, 2023 | Medium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.smashingmagazine.com/2023/07/writing-css-2023/&quot;&gt;Writing CSS In 2023: Is It Any Different Than A Few Years Ago? — Smashing Magazine&lt;/a&gt; - There really has been a watershed moment in the past few years, and CSS features have been popping up left and right.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ishadeed.com/article/new-viewport-units/&quot;&gt;New Viewport Units&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kizu.dev/position-driven-styles/&quot;&gt;Position Driven Styles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/readme/featured/typescript-gradual-types&quot;&gt;TypeScript and the dawn of gradual types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://amiaopensource.github.io/ffmprovisr/&quot;&gt;ffmprovisr&lt;/a&gt; and &lt;a href=&quot;https://amiaopensource.github.io/ffmpeg-artschool/activities.html&quot;&gt;Activities and Exercises - ffmpeg-artschool&lt;/a&gt; - once upon a time I dreamed of doing things with film and video. In retrospect it was a brief couple of years, but one of the things that I did not learn in film school was how to manipulate &lt;em&gt;digital&lt;/em&gt; video outside of editing software. Luckily, I got to work on a project in the early days of &lt;a href=&quot;/cv.html#quick-left&quot;&gt;Quick Left&lt;/a&gt; that touched ffmpeg, and I&apos;ve been a casual user of it ever since. Both of these links are interesting. The first is what you always want to have when using a dauntingly complex CLI like &lt;code&gt;ffmpeg&lt;/code&gt;. The second link is mad science.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Cozy Web&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://maggieappleton.com/programmatic-notes&quot;&gt;Programmable Notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://notes.andymatuschak.org/Work_with_the_garage_door_up&quot;&gt;Work with the garage door up&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://andymatuschak.org/prompts/&quot;&gt;How to write good prompts: using spaced repetition to create understanding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://julian.digital/2023/07/06/multi-layered-calendars/&quot;&gt;Multi-layered calendars « julian.digital&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.benshoof.org/blog/sci-scripts&quot;&gt;Sierra Creative Interpreter – Scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://justinjaffray.com/joins-13-ways/?a=b&quot;&gt;Joins 13 Ways&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.robinsloan.com/newsletters/feeling-of-something-waiting-there-for-you/&quot;&gt;The feeling of something waiting there for you&lt;/a&gt; and;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.robinsloan.com/newsletters/lit-up-like-a-sparkler/&quot;&gt;Lit up like a sparkler&lt;/a&gt; - This is the first time that a tab is intentionally leaking from one month to the next. This set of links is just too good.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.newyorker.com/magazine/2023/07/10/samuel-r-delany-profile&quot;&gt;How Samuel R. Delany Reimagined Sci-Fi, Sex, and the City | The New Yorker&lt;/a&gt; - I caved and upgraded my Apple account to bundle several separate accounts into a single bill, with the added benefit of Apple News+. I didn&apos;t realize that came with a large selections of free magazines like The New Yorker. I was a subscriber for several years but the print issues pile up quickly. This is a profile of a new-to-me author, Samuel R. Delany. I picked up Dhalgren and am reading it now.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tertulia-moderna.blogspot.com/2010/12/overflowing-brain-by-torkel-klingberg.html&quot;&gt;&apos;The Overflowing Brain&apos; by Torkel Klingberg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://books.worksinprogress.co/book/maintenance-of-everything/vehicles/digression-1-precision-how-america-made-machines-make-machines/1&quot;&gt;Digression 1 - PRECISION: How America Made Machines Make Machines - First Draft | Books in Progress&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tech Misc.&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://lethain.com/building-prestige/&quot;&gt;Building personal and organizational prestige | Irrational Exuberance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sentry.engineering/&quot;&gt;Sentry Engineering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vercel.com/blog/framework-defined-infrastructure&quot;&gt;Framework-defined infrastructure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.lennysnewsletter.com/p/how-snowflake-builds-product&quot;&gt;How Snowflake builds product - by Lenny Rachitsky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://martinfowler.com/bliki/TeamTopologies.html&quot;&gt;Team Topologies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.burntsushi.net/regex-internals/&quot;&gt;Regex engine internals as a library - Andrew Gallant&apos;s Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://patrickcollison.com/fast&quot;&gt;Fast · Patrick Collison&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://triviahappy.com/articles/welcome-to-the-net-every-webpage-from-the-1995-movie-the-net&quot;&gt;Welcome to The Net: every webpage from the 1995 movie The Net - Trivia Happy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://lettersofnote.com/2011/07/22/the-internet-tidal-wave/&quot;&gt;The Internet Tidal Wave&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, June 2023</title><link>https://sambreed.dev/writing/2023/links-jun-2023/</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/links-jun-2023/</guid><description>like a playlist but for my open tabs</description><pubDate>Fri, 30 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;June 2023.&lt;/p&gt;
&lt;p&gt;The summer solstice in the Northern hemisphere came and went. I was busy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I started turning up the dial on my running volume in preparation for the Headlands 50k in August.&lt;/li&gt;
&lt;li&gt;We took a road trip down to Los Angeles to see my favorite band, King Gizzard and the Lizard Wizard, play their biggest gig yet at the Hollywood Bowl.&lt;/li&gt;
&lt;li&gt;We also spent a day at DisneyLand (but not California Adventure), which was my first time in a Disney park since the early 2000s and my first visit to the original location.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Gee, a couple things happened in tech this month:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reddit decided that it did not want all the free labor from 3rd party app developers and moderators, and that a thumb in the eye would be better for both parties.&lt;/li&gt;
&lt;li&gt;The AI hype wave has crested? As normal media moves on and all the &quot;big news&quot; around the possibilities of LLMs sobers up after 6+ months of drunken chatter.&lt;/li&gt;
&lt;li&gt;Twitter is still broken and about to break a whole lot more, with Facebook throwing it&apos;s hat in the ring in the upcoming months.&lt;/li&gt;
&lt;li&gt;Apple announced that the headset is indeed real (admittedly, I was skeptical) and has a name but not a launch date. It promises... something interesting. For next year. Something different than what Facebook tried for the better part of a decade? Maybe. At least the industrial design will be high quality, that part is already clear.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With all that as context, I humbly submit this batch of links.&lt;/p&gt;
&lt;h2&gt;Code&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bower.sh/who-will-understand-consciousness&quot;&gt;Who will understand consciousness?: Software engineers will be first to grok consciousness&lt;/a&gt; - This is the closest thing to an AI post in the list and it resonated with me a lot. I&apos;ve been reading &lt;a href=&quot;https://worldcat.org/en/title/1275359186&quot;&gt;A Thousand Brains&lt;/a&gt; by Jeff Hawkins recently and this post feels related.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.gopenai.com/how-to-speed-up-llms-and-use-100k-context-window-all-tricks-in-one-place-ffd40577b4c&quot;&gt;The Secret Sauce behind 100K context window in LLMs: all tricks in one place&lt;/a&gt; - While the breathless tech press might have slowed down, the technical explainer posts have kept up! This is about the various techniques used to expand context windows, or how to send more text in and get more text back from LLMs.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cohost.org/tef/post/1764930-how-not-to-write-a&quot;&gt;cohost! - &quot;how (not) to write a pipeline&quot;&lt;/a&gt; - Writing software is hard because you can easily describe a whole system with a few terms and think you know what you would have to build to make it work. But then, a fractal-like explosion of features and sub-features and errors and edge-cases to handle gets in the way of it ever being as simple as you first thought it would be. It&apos;s like having a box, knowing it&apos;s outer dimensions, and then having an uncountable number of equally sized boxes fall out of it.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cybertec-postgresql.com/en/unexpected-downsides-of-uuid-keys-in-postgresql/&quot;&gt;Unexpected downsides of UUID keys in PostgreSQL - CYBERTEC&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I had defaulted to using UUIDs over incremental numeric IDs a few years ago but now this has me questioning the reasoning behind it. Absolutely this is something that I cargo-culted along the way.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jetpack-io/typeid&quot;&gt;jetpack-io/typeid: Type-safe, K-sortable, globally unique identifier inspired by Stripe IDs&lt;/a&gt;- Relatedly, this seems somewhat better? At least it overcomes some of the ergonomic annoyances of UUIDs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/juliangarnier/anime/&quot;&gt;juliangarnier/anime: JavaScript animation engine&lt;/a&gt; - This is slick; Great docs and demos.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.mux.com/blog/swiftui-against-react&quot;&gt;SwiftUI stole the best parts of React…and my heart&lt;/a&gt; - I&apos;ve used SwiftUI a few times in the last 2 years. I&apos;m not an iOS developer but I found it to be an easier entry point for what I&apos;d like to build than SDKs of years past.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://surma.dev/things/compile-js/index.html&quot;&gt;I turned JS into a compiled language (for fun and Wasm) — surma.dev&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://shopify.engineering/javascript-in-webassembly-for-shopify-functions&quot;&gt;Bringing Javascript to WebAssembly for Shopify Functions (2023)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;These are two links that were in the &quot;this should exist&quot; folder in 2021/22 that have now materialized. As the web platform continues to evolve, there are lots of gaps that one could imagine being filled by a small, isolated, interoperable runtime that supports everyone&apos;s (least) favorite language.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://linear.app/blog/scaling-the-linear-sync-engine&quot;&gt;Scaling the Linear Sync Engine - Linear Blog&lt;/a&gt; - Websockets are hard. Syncing is hard. Linear is very good. Good scaling story here.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tech Journalism&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.theverge.com/23778253/google-reader-death-2013-rss-social&quot;&gt;How Google Reader died — and why the web misses it more than ever - The Verge&lt;/a&gt; - Ok so I will admit that I mainly use these posts like a playlist for bookmarks. I haven&apos;t been &quot;good&quot; at bookmarks since 2009, and despite paying for a decade of Pinboard, I rarely use it for it&apos;s intended purpose. Google Reader was in heavy rotation for me back then, along with the &quot;social&quot; bookmarking site delicio.us. I&apos;ve &lt;a href=&quot;/writing/links-march-2023#rss&quot;&gt;written before&lt;/a&gt; about RSS coming back into my media diet as mainstream social media continues to wane in usefulness. Nostalgia for Google Reader is misplaced. It was just a website, and now we have better websites.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wheresyoured.at/p/techs-reckoning&quot;&gt;Tech&apos;s Reckoning&lt;/a&gt; - Wherein Ed Z correctly identifies the trend toward absurd headcount growth, but missed the opportunity to point out how nakedly stupid &quot;hypergrowth&quot; is in absence of a coherent business model to support it.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.entrepreneur.com/growing-a-business/the-damaging-results-of-the-mandated-return-to-office-is/454043&quot;&gt;The Damaging Results of The Mandated Return to Office is Worse Than We Thought | Entrepreneur&lt;/a&gt; - Nuance is one of the harder things for most people to grasp, when two contradictory ideas can be equally true. Certain functions benefit massively from in person interactions and don&apos;t translate well to remote teams. Other work is much better and healthier when optimized for remote workers. There&apos;s not silver bullet, each requires effort and imposes different constraints.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.holloway.com/g/remote-work/sections/remote-communication-concepts&quot;&gt;Remote Communication Concepts — The Holloway Guide to Remote Work&lt;/a&gt; - The other half of the previous argument.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://daringfireball.net/2023/06/first_impressions_of_vision_pro_and_visionos&quot;&gt;First Impressions of Vision Pro and VisionOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://webkit.org/blog/14205/news-from-wwdc23-webkit-features-in-safari-17-beta/&quot;&gt;News from WWDC23: WebKit Features in Safari 17 beta&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Misc&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.robinsloan.com/newsletters/lit-up-like-a-sparkler/&quot;&gt;Lit up like a sparkler&lt;/a&gt; - Of the many newsletters I get over the course of the month, this was a nice entry from author Robin Sloan. Eclectic selection of curiosities and links.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://archives.design/&quot;&gt;archives.design&lt;/a&gt; - Bunch of neat &quot;further reading&quot; in here. Glad to live in an era where it&apos;s very difficult to run out of something interesting to read.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://2023.northbaypython.org/&quot;&gt;North Bay Python&lt;/a&gt; - A conference in the North Bay! I may very well attend. Single track conferences can be hit or miss, but I have always preferred a small community organized conference to a corporate-mega-conf.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Dipsea 2023 Race Report</title><link>https://sambreed.dev/writing/dipsea-2023-race-report/</link><guid isPermaLink="true">https://sambreed.dev/writing/dipsea-2023-race-report/</guid><description>Race overview from my very first running of The Dipsea on June 11, 2023</description><pubDate>Mon, 12 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { Image } from &apos;astro:assets&apos;;
import finishLineImage from &apos;./1B9CED58-0ECD-47B3-B640-A1514447C7F5_1_105_c.jpeg&apos;;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://www.dipsea.org&quot;&gt;The Dipsea Race&lt;/a&gt; is a 7.4 mile trail race from Mill Valley to Stinson Beach. It was first run in 1905 and has a unique handicapping system that makes it competative for runners of all ages. 2023 was my first year participating, after almost 9 years of living in Mill Valley and 4 years of running.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I woke up early before my alarm went off. It&apos;s near the height of summer so it was already light out before 6am. I made breakfast, found my kit (ready from the night before) and dressed, then stretched out on the yoga mat. I had very little prep left to do and was out the door by 7, leaving at jog to wind through the neighborhood to get downtown.&lt;/p&gt;
&lt;p&gt;I was at the bag check-in by 7:15 but wasn&apos;t ready to ditch my hoodie yet, I still had lots of time to mill around the start area and stay warm. I waited through the line for the bathroom a few times, and jogged up and down the block a few times, but stayed close to the corral. I bumped into a former co-worker from Credit Karma. We exchanged pleasantries before separating into the crowd.&lt;/p&gt;
&lt;p&gt;I could have arrived much later, but would have needed to bring my own bag. I overheard one of the volunteers saying they had run out. I recognized a few of the runners I&apos;ve seen around town. I saw Jeffrey, one of the owners of the art gallery that carries Amy&apos;s ceramics, in a yellow volunteer&apos;s vest. He offered to take my photo under the start gate. He took good photos! I thanked him and continued pacing the town square waiting for my group.&lt;/p&gt;
&lt;p&gt;The race start is divided into two groups. The &quot;invitational&quot; group finished in the top half of the field of last year&apos;s race, and their heats start first. The &quot;runners&quot; group, which I am in, comprises the back half of the field, and positions are given by lottery (but they do accept bribes and sob stories. I gave both and was accepted. Pity works.) The heats are handicapped by age and gender: children and the elderly starting first, priority going to the very oldest and very youngest. The first heat in each group is larger than you assume it would be. I started 50 minutes behind the first group with 140 other mostly-fit runners in their 30s. I only saw 1 woman in the group.&lt;/p&gt;
&lt;p&gt;I didn&apos;t race anyone out of the gate. The 1/4 mile to the stairs sets your place in line for the queue. I passed a good number of people but the whole mess was crowded and there wasn&apos;t much rooms to move much quicker than the average pace of the pack. I jogged away from the top step, power hiked strategically passing the first mile marker, and was greeted by dense fog at the top of the hill. I was already starting to pass people from the very first waves of runners. Those kids didn&apos;t know what hit &apos;em. I had saved enough that I could push a bit on the road down to Muir Woods. I opted to not take the suicide route, and bypassing it seemed to only get me down a few places, some of which I recovered.&lt;/p&gt;
&lt;p&gt;The Muir Woods parking lot flew by. The climb up to the fire road through &quot;the forest&quot; was humid and grueling, a single-file line on the right with only the strongest making passes on the left. I am convinced that you cannot run this section. I was needing to recover some from the sprint downhill so I was glad to not attempt to run. Some mild nausea kicked up when my heartrate was in the mid 180s, so I backed off the throttle and hiked with my hands on my waist until I felt my body calm down.&lt;/p&gt;
&lt;p&gt;When we hit the fire road the trail widened some and the slope lessened, forking to a graded fire road on the left and the continuation of the single-track to the right. The single-track looked very crowded, so I broke left up the fire road where I could finally jog again, trading a bit more distance for a minor break from climbing. I was passing people again on this section, but I don&apos;t know if the trade was worth it. Probably evened out in the end.&lt;/p&gt;
&lt;p&gt;The fire road climb continued and at the next fork I merged back onto the trail. Again, I power hiked as needed to keep my heart rate in check. Though I was mostly past the nausea, I definitely felt more tapped than I expected. The climbing you do on the stairs and in the forest are no joke. With a bit more running I could have made up a few minutes here, but without it I didn&apos;t get to the top of Cardiac Hill until 55 minutes had gone by, so finishing sub-1:20 was going to be a stretch. I stopped and choked down 2 sips of water down before continuing on to the descent.&lt;/p&gt;
&lt;p&gt;I was moving well in this section. When the trail forked for another shortcut after a particularly muddy slope, I decided to tempt fate and take it. I wasn&apos;t happy with this decision in the end. The shortcut was aggressively narrow and jammed single file with people, including a kid directly in front of me who couldn&apos;t have been more than 10. This section meandered a bit, despite being the straighter path, I would have been better off going around the long way where I could have run. Across the bridge and then up the last climb, I power hiked past a few people who had muscled there way around me in the shortcut and prepared myself to give the last mile everything I could throw at it.&lt;/p&gt;
&lt;p&gt;I ran a 7 minute split for the last 1.3 miles. My training shined through. When compared to the same section I ran last November in the half marathon I did here last November, going more than 30 seconds a mile faster. At a cadence of 180 and strides that are about a yard means that I would have cleared my previous performance by nearly a football field. Given that I arrived in the same spot on the map with similar amounts of climbing in my legs in both races, I am quite pleased to drop my past-self that conclusively.&lt;/p&gt;
&lt;p&gt;Only the final mile felt like a true race. I was attempting to pass as many people as I could and provoked a good little footrace at the end with another runner. We passed each other back and forth, crossing the line together for a photo finish. The final push was very taxing and my heartrate peaked here at 194, which is thoroughly in &quot;holy shit&quot; territory and my body did not like much of that. I pulled off to the left just after the line and stood with my head between my legs for a good 20 seconds trying to get myself together and not puke. A volunteer asked if I was ok, so it must have looked bad, but I choked out an &quot;I&apos;m ok,&quot; followed by a zombie-like shuffle to the t-shirt and medal hand out.&lt;/p&gt;
&lt;p&gt;I found the end of a table to put my stuff on, and by the time I was collecting myself enough to text Amy, she was standing next to me.&lt;/p&gt;
&lt;p&gt;Result
|Time|Overall Position|&quot;Runners&quot; Position|
|-|-|-|
|1:21:04.86|905 / 1364|309 / 756|&lt;/p&gt;</content:encoded></item><item><title>Links, May 2023</title><link>https://sambreed.dev/writing/2023/links-may-2023/</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/links-may-2023/</guid><description>A bouquet of open tabs</description><pubDate>Wed, 31 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;All the wet weather this winter has indeed brought May flowers in Northern California.&lt;/p&gt;
&lt;p&gt;Since the high of the marathon last month I have fully recovered and started a new training cycle for my first &lt;a href=&quot;https://www.dipsea.org&quot;&gt;Dipsea&lt;/a&gt; on June 11. The Dipsea is an 8 mile elevation-heavy trail race from downtown Mill Valley to Stinson Beach and is the oldest organized trail race in the US. It&apos;s limited to 1500 people and berths go first to previous participants before opening to new racers, so I feel very lucky to have been accepted on my first try. I&apos;ll drop a race report when it&apos;s done.&lt;/p&gt;
&lt;p&gt;Meanwhile, the tabs collected. No individual-link hot takes this month, but the AI content is unrelenting and difficult to absorb and reflect on.&lt;/p&gt;
&lt;p&gt;Ok, maybe just one 🔥. The &lt;a href=&quot;https://a16z.com/2023/05/25/ai-canon/&quot;&gt;AI Cannon&lt;/a&gt; post from a16z has tens of hours of reading, which may or may not be required (&lt;em&gt;essential?&lt;/em&gt;) to understand the nature of the current boom. They last boom they hyped was &lt;a href=&quot;https://davekarpf.substack.com/p/web3s-fake-version-of-the-history&quot;&gt;quite hollow&lt;/a&gt;, but that shouldn&apos;t discount the &lt;a href=&quot;https://twitter.com/illscience/status/1661045161328263170&quot;&gt;insights they are sharing&lt;/a&gt; about the AI canard.&lt;/p&gt;
&lt;h2&gt;Dev&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cs.cmu.edu/afs/cs/academic/class/15462-s13/www/lec_slides/Jakobsen.pdf&quot;&gt;Advanced Character Physics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://worrydream.com/EarlyHistoryOfSmalltalk/&quot;&gt;The Early History Of Smalltalk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://radu-matei.com/blog/practical-guide-to-wasm-memory/#exchanging-strings-between-modules-and-runtimes&quot;&gt;A practical guide to WebAssembly memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cohost.org/mcc/post/1406157-i-want-to-talk-about-webgpu&quot;&gt;cohost! - &quot;I want to talk about WebGPU&quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/onebigthought/the-ux-research-reckoning-is-here-c63710ea4084&quot;&gt;The UX Research Reckoning is Here | by Judd Antin | One Big Thought | May, 2023 | Medium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://davekarpf.substack.com/p/web3s-fake-version-of-the-history&quot;&gt;Web3&apos;s fake version of Web history - by Dave Karpf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.julienthibeaut.xyz/blog/create-shine-effect-on-card-with-tailwind-css&quot;&gt;Creating a shine effect on a card with Tailwind CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.almaer.com/building-a-modern-design-system-in-layers/&quot;&gt;Building a modern design system in layers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@vamptvo/pixels-vs-ems-users-do-change-font-size-5cfb20831773&quot;&gt;Pixels vs. Ems: Users DO Change Font Size | by Evan Minto | Medium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gist.github.com/kconner/cff08fe3e0bb857ea33b47d965b3e19f&quot;&gt;macOS Internals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.apple.com/design/awards/&quot;&gt;2023 Apple Design Award Finalists - Apple Design Awards - Apple Developer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Blogs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amygoodchild.com/blog/computer-art-50s-and-60s&quot;&gt;Early Computer Art in the 50’s &amp;#x26; 60’s — Amy Goodchild&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kocienda.micro.blog/&quot;&gt;Ken Kocienda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://aaadaaam.com/notes/building-vs-optimizing/&quot;&gt;Building vs. optimizing | Adam Stoddard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://erinkissane.com/blue-skies-over-mastodon&quot;&gt;Erin Kissane&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://crookedtimber.org/2023/05/06/the-cult-of-the-founders/&quot;&gt;The Cult of the Founders&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;AI&lt;/h2&gt;
&lt;h3&gt;Navel-gazing&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://simonwillison.net/2023/May/4/no-moat/&quot;&gt;Leaked Google document: “We Have No Moat, And Neither Does OpenAI”&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://a16z.com/2023/05/25/ai-canon/&quot;&gt;AI Canon | Andreessen Horowitz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/illscience/status/1661045161328263170&quot;&gt;thread from a16z GP Anish Acharya&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jayalammar.substack.com/p/llm-university-generative-ai-ai-product?r=27wcsl&amp;#x26;utm_campaign=post&amp;#x26;utm_medium=web&quot;&gt;LLM University, Generative AI, AI Product Moats&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://idlewords.com/talks/superintelligence.htm&quot;&gt;Superintelligence: The Idea That Eats Smart People&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doctorow.medium.com/googles-ai-hype-circle-6158804d1299&quot;&gt;Google’s AI Hype Circle. We have to do Bard because everyone… | by Cory Doctorow | May, 2023 | Medium&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Papers / Models&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/blog/starcoder&quot;&gt;StarCoder: A State-of-the-Art LLM for Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://shishirpatil.github.io/gorilla/&quot;&gt;Gorilla&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://voyager.minedojo.org/&quot;&gt;Voyager | An Open-Ended Embodied Agent with Large Language Models&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Code&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ianarawjo/ChainForge&quot;&gt;ianarawjo/ChainForge: An open-source visual programming environment for battle-testing prompts to LLMs.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ray-project/llm-numbers&quot;&gt;ray-project/llm-numbers: Numbers every LLM developer should know&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://simonwillison.net/2023/May/8/jsonformer/&quot;&gt;Jsonformer: A Bulletproof Way to Generate Structured JSON from Language Models&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SamurAIGPT/privateGPT&quot;&gt;SamurAIGPT/privateGPT: An app to interact privately with your documents using the power of GPT, 100% privately, no data leaks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/brexhq/prompt-engineering&quot;&gt;brexhq/prompt-engineering: Tips and tricks for working with Large Language Models like OpenAI&apos;s GPT-4.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Okapi_BM25&quot;&gt;Okapi BM25 - Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Search&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://thegigabrain.com/&quot;&gt;GigaBrain - Search Reddit and Other Communities for Answers from Real People&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://metaphor.systems/&quot;&gt;Metaphor Search - Search the internet with large language models using Metaphor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Big Sur Marathon 2023 Race Report</title><link>https://sambreed.dev/writing/big-sur-marathon-2023/</link><guid isPermaLink="true">https://sambreed.dev/writing/big-sur-marathon-2023/</guid><description>Race overview from my very first marathon at Big Sur on April 30, 2023</description><pubDate>Tue, 02 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We stayed about 2 miles from the start line in Big Sur, which meant that I didn&apos;t have to wake up at 3am to catch a bus from Monterey down to the start. The resort we stayed at was able to shuttle me to within 1/4 mile of the start line, which bought me some extra sleep and spared me a bumpy 90 minute ride down a windy, hilly stretch of highway.&lt;/p&gt;
&lt;p&gt;I woke up at 4:30, ate the breakfast I had packed, and was to the starting area by 5:20. I waited around for a bit before checking my gear bag, and then found a place to stretch. It was really crowded, over 5000 people! I downed 1 gel about 15 minutes before the start of the race. Based on my (self-reported) projected finish time, I was in the &quot;A&quot; corral and was at the very front. Gulp.&lt;/p&gt;
&lt;p&gt;I started slow out of the gate, as there was a lot of traffic and it was tough to get locked into a good cadence for the first few minutes. I was shocked by how many people (dudes) peeled off the pack to go relieve themselves in the woods during the first two miles. The lines for the bathrooms were really long before the start but there was quite literally nothing else to do but wait in line for the bathroom. Weird strategy. The other odd moment from the opening miles was the significant amount of clothing that was collectively shed in the first 10 minutes of the race. Any clothing you dropped would get donated, so maybe a bunch of people planned on that?&lt;/p&gt;
&lt;p&gt;I was feeling good and moving well after the first 5km. I ate another gel around 20 minutes in, knowing it was early but figuring that I should take something in while I was feeling good.&lt;/p&gt;
&lt;p&gt;The race moved out of the trees and into a long, straight section of coastal highway with gently rolling hills. I was about 10 seconds behind the 3:30 pace group, which I knew meant that I was going too fast for my race plan. I slowed my pace a little bit, aiming for around 8 minute miles, which widened the gap between me and the pace group. This was a minor mistake. The wind started to pick up significantly, swapping between a crosswind and headwind every few minutes, but never stopping or losing strength. People&apos;s hats were blowing off. Out of the pace group in no man&apos;s land, it felt like I was running with a parachute. I took another gel around 45 minutes in and struggled running into the wind.&lt;/p&gt;
&lt;p&gt;After 20 minutes in the wind, I honestly needed a break and had to pee, so I stopped at the 8 mile aid station for a little under a minute, used the bathroom, and drank some of my sports drink. When I stopped I could still see the 3:30 pace group, but they were long gone by the time I got going again. The wind didn&apos;t let up and the course passed the lighthouse at Sur Point and started to climb as the highway lifted up along the cliffside for the next 4 miles. Climbing in the wind was brutal. There was some release at the crest of the first big hill, except that&apos;s exactly where you come around a corner to see the next 3 miles of climbing immediately ahead of you. That section was punishing. I didn&apos;t worry about pace at all, just tried to keep moving well, and remembered to keep eating and drinking.&lt;/p&gt;
&lt;p&gt;I passed the half marathon mark around 1:48:00 so I felt like I was in pretty good shape. The second half of the course had lots and lots of rolling hills. Let me be more clear: the second half of the course was as grueling as the first half. I finished my handheld with a good portion of the race left, and I started to be on the lookout for aid stations to get water at every opportunity. I went through my gels a little before the 3 hour mark, having taken 8 up to this point, I was probably 1-2 short of what I needed. I only felt mild stomach discomfort once or twice during the second half, but nothing serious or prolonged. I took the cue to slow down a bit. I did not look at my time much, any watch glances were to see how much distance I had left until the next pace increase. I definitely wasn&apos;t holding 7:45 in all those hills.&lt;/p&gt;
&lt;p&gt;I felt ok but not great when I passed the 20 mile mark. I knew that it would be very challenging to step on the gas for the next 10km. I did my best to maintain pace, trying to maintain speed coming downhill and keeping my arms moving as my legs were starting to get heavy. At the very end, I had enough in the tank to sprint the last 1/10th of a mile. Maybe I could have done more, but I&apos;m glad that I finished strong. I did not stop and I did not walk.&lt;/p&gt;
&lt;p&gt;Stats&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Final time: 3:40:37&lt;/li&gt;
&lt;li&gt;306 of 5089. Top 10%.&lt;/li&gt;
&lt;li&gt;250 of 2559 men, also top 10%.&lt;/li&gt;
&lt;li&gt;55 of 411 men my age, just outside of the 10% bracket, but still pretty good thinking that only 54 guys my age running that marathon could go faster than me. And it&apos;s my first one!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finishing in the top 500 in such a big field is very cool! I think I approached the race cautiously, didn&apos;t make too many mistakes, and stuck with the plan. I&apos;m very proud of this result and I know I have room to improve.&lt;/p&gt;</content:encoded></item><item><title>Links, April 2023</title><link>https://sambreed.dev/writing/2023/links-april-2023.html</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/links-april-2023.html</guid><description>Free range tabs</description><pubDate>Sun, 30 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Free range tabs edition. I was quite busy at the end of this month &lt;a href=&quot;/writing/big-sur-marathon-2023&quot;&gt;running in Big Sur&lt;/a&gt; so I only had a passing glance at the tab dump. Forgive me for not categorizing or writing any pithy summaries. Remember, all tabs are mortal!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://maggieappleton.com/forest-talk&quot;&gt;Talk: The Expanding Dark Forest and Generative AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.fileside.app/blog/2023-03-17_windows-file-paths/&quot;&gt;The weird world of Windows file paths | Fileside&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.inferless.com/serverless-gpu-market&quot;&gt;The State of Serverless GPUs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://farawaytimes.blogspot.com/2023/02/how-to-make-good-small-games.html&quot;&gt;How To Make Good Small Games&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dgross.ca/blog/linux-home-server-auto-sleep/&quot;&gt;Making a Linux home server sleep on idle and wake on demand — the simple way&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://samwho.dev/load-balancing/&quot;&gt;Load Balancing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/yoavbls/pretty-ts-errors&quot;&gt;yoavbls/pretty-ts-errors: 🔵 Make TypeScript errors prettier and human-readable in VSCode 🎀&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.bleepingcomputer.com/news/security/new-sandbox-escape-poc-exploit-available-for-vm2-library-patch-now/&quot;&gt;New sandbox escape PoC exploit available for VM2 library, patch now&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huyenchip.com/2023/04/11/llm-engineering.html&quot;&gt;Building LLM applications for production&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arstechnica.com/gadgets/2023/04/isim-vs-esim-vs-sim-the-constantly-shrinking-ways-carriers-id-your-phone/&quot;&gt;iSIM vs eSIM vs SIM: The constantly shrinking ways carriers ID your phone | Ars Technica&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fermatslibrary.com/s/the-education-of-a-computer#email-newsletter&quot;&gt;Fermat&apos;s Library | The Education of a Computer annotated/explained version.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.jarretthousenorth.com/2022/06/18/herbie-hancock-maiden-voyage/&quot;&gt;Herbie Hancock, Maiden Voyage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.dylanpaulus.com/posts/postgres-is-a-graph-database/&quot;&gt;Postgres: The Graph Database You Didn&apos;t Know You Had&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://html.energy/join.html&quot;&gt;join - html energy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ben-evans.com/benedictevans/2020/5/16/not-even-wrong&quot;&gt;Not even wrong: predicting tech — Benedict Evans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/pdf/1901.01973.pdf&quot;&gt;Looking Back at Postgres&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://retool.com/visual-basic/&quot;&gt;Something Pretty Right: A History of Visual Basic | Retool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://simonwillison.net/2023/Apr/4/substack-observable/&quot;&gt;Semi-automating a Substack newsletter with an Observable notebook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://justinjackson.ca/pessimistic&quot;&gt;Pessimism vs Optimism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adrianhon.substack.com/p/cyberpunk-2077&quot;&gt;Cyberpunk 2077 - by Adrian Hon - Have You Played?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://magrawala.substack.com/p/unpredictable-black-boxes-are-terrible&quot;&gt;Unpredictable Black Boxes are Terrible Interfaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.geoffreylitt.com/2023/03/25/llm-end-user-programming.html&quot;&gt;Malleable software in the age of LLMs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, March 2023</title><link>https://sambreed.dev/writing/2023/links-march-2023/</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/links-march-2023/</guid><description>The AI Overlords have approved of these links</description><pubDate>Fri, 31 Mar 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Yes, I had all of these tabs open.&lt;/p&gt;
&lt;h2&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://cdn.openai.com/papers/gpt-4.pdf&quot;&gt;gpt-4.pdf&lt;/a&gt; - I&apos;ll start with the headline. I could stop here and that would be enough links for the entire month. I really could. So much is being written every day about AI that you need an LLM to generate a summary if you want to keep up.&lt;/p&gt;
&lt;h4&gt;Opinion Section&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://writings.stephenwolfram.com/2023/03/chatgpt-gets-its-wolfram-superpowers/&quot;&gt;ChatGPT gets its Wolfram superpowers&lt;/a&gt; - And just like that, a large subset of criticism levied at LLMs (&quot;they don&apos;t tell the &lt;em&gt;truth&lt;/em&gt;!&quot; and &quot;their knowledge can&apos;t be up-to-date!&quot;) gets washed away by integration with a &lt;em&gt;strongly correct&lt;/em&gt; existing system.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://about.sourcegraph.com/blog/cheating-is-all-you-need&quot;&gt;Cheating is All You Need&lt;/a&gt; - I strongly agree with the sentiment in the title. One thing that&apos;s always drawn me to programming is how easy it is to &quot;cheat&quot; by finding working code and modifying it until it does what you want. Now that LLMs are collasping the slope of the learning curve, tools that help you &quot;cheat&quot; your way to a working program will soon be common place. The goal of programming is unchanged!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://simonwillison.net/2023/Mar/11/llama/&quot;&gt;Large language models are having their Stable Diffusion moment&lt;/a&gt; - Exciting developments in generative AI - ControlNet leads the pack, while LLaMA model allows GPT-3 class models to run on personal hardware. Potential for harm, but let&apos;s steer it towards positive applications.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.lesswrong.com/posts/D7PumeYTDPfBTp3i7/the-waluigi-effect-mega-post&quot;&gt;The Waluigi Effect (mega-post) - LessWrong&lt;/a&gt; - An example from last month&apos;s link about (somewhat) &apos;failing the mirror test&apos;, but interesting reading none the less. Large language models like GPT-3/4 can give wrong answers due to training on internet misconceptions, lies, and memes. The Waluigi Effect explains how LLMs interpret prompts. Flattery may not work and simulacra theory shows RLHF won&apos;t eliminate deceptive waluigis.&lt;/p&gt;
&lt;h4&gt;OSS&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/dan-kwiat/openai-edge&quot;&gt;dan-kwiat/openai-edge&lt;/a&gt; - Vercel&apos;s edge supports streaming, but the OpenAI client does not (yet).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/microsoft/visual-chatgpt&quot;&gt;microsoft/visual-chatgpt&lt;/a&gt; - Multi-modal LLMs are going to be undeniably useful. I&apos;m still in awe that image-gen and text-gen are co-evolving because there&apos;s so much obvious potential to combine them in interesting ways. It&apos;s hard to imagine a future where having a single model that can handle many modalities won&apos;t come in handy.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/microsoft/X-Decoder&quot;&gt;microsoft/X-Decoder&lt;/a&gt; and &lt;a href=&quot;https://github.com/unum-cloud/uform&quot;&gt;unum-cloud/uform&lt;/a&gt; On that same note, progress towards collapsing the world into a single, interchangable latent space of patterns continues apace.&lt;/p&gt;
&lt;h4&gt;Stable Diffusion&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/Gustavosta/MagicPrompt-Stable-Diffusion?text=Portrait+of&quot;&gt;MagicPrompt StableDiffusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/blog/controlnet&quot;&gt;ControlNet in 🧨 Diffusers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.marktechpost.com/2023/02/18/huggingface-publishes-lora-scripts-for-efficient-stable-diffusion-fine-tuning/&quot;&gt;HuggingFace Publishes LoRA Scripts For Efficient Stable Diffusion Fine-Tuning - MarkTechPost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/blog/blip-2&quot;&gt;Zero-shot image-to-text generation with BLIP-2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Lil&apos; tools&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/anypagegpt/keelaohbekengdipnogignilgbabhhec&quot;&gt;AnyPageGPT - Chrome Web Store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/chatgpt-search-engine/copaigionceiijiolkfnbgpcnkeclhhd/related&quot;&gt;ChatGPT search engine - Chrome Web Store&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gist.github.com/spullara/0fc3e88150f66179017b9aa1758d49d2&quot;&gt;Use this command to get suggestions on how to do things on the command line.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Computer Chronicles&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://retool.com/visual-basic/&quot;&gt;Something Pretty Right: A History of Visual Basic | Retool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://spectrum.ieee.org/xerox-alto&quot;&gt;50 Years Later, We’re Still Living in the Xerox Alto’s World - IEEE Spectrum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://charity.wtf/2023/03/09/architects-anti-patterns-and-organizational-fuckery/&quot;&gt;Architects, Anti-Patterns, and Organizational Fuckery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://apenwarr.ca/log/20201227&quot;&gt;Systems design explains the world: volume 1 - apenwarr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/pdf/1901.01973.pdf&quot;&gt;Looking Back at Postgres [pdf]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tech&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.domenic.me/youre-missing-the-point-of-promises/&quot;&gt;You&apos;re Missing the Point of Promises&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://missing.csail.mit.edu/&quot;&gt;The Missing Semester of Your CS Education&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.sentry.io/2023/02/23/sentrys-frontend-tests-migrating-from-enzyme-to-react-testing-library/&quot;&gt;Sentry’s Frontend Tests: Migrating from Enzyme to React Testing Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.defer.run/platform/executions/&quot;&gt;Defer: Zero infrastructure Node.js background jobs.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/typescript/typescripts-migration-to-modules/&quot;&gt;TypeScript&apos;s Migration to Modules - TypeScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mcarter.me/posts/my-first-failed-product&quot;&gt;Reflecting on my first failed product&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/RedditEng/comments/11xx5o0/you_broke_reddit_the_piday_outage/&quot;&gt;You Broke Reddit: The Pi-Day Outage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Blogs &amp;#x26; Newsletters&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ericwbailey.design/published/&quot;&gt;Writing – Eric Bailey&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Specifically &lt;a href=&quot;https://ericwbailey.website/published/i-doubled-down-on-rss/&quot;&gt;I doubled-down on RSS&lt;/a&gt;. Me too! This was really helpful. &lt;a href=&quot;#rss&quot;&gt;(See below)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;And also &lt;a href=&quot;https://buttondown.email/ericwbailey/archive/sc-244/&quot;&gt;[SC 2.4.4] If you are so inclined • Buttondown&lt;/a&gt;. Favorite new extremely online person to read.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.newyorker.com/magazine/2023/03/06/the-end-of-the-english-major&quot;&gt;The End of the English Major | The New Yorker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adrianhon.substack.com/p/pentiment&quot;&gt;Pentiment - by Adrian Hon - Have You Played?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Misc&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.punctuationmatters.com/en-dash-em-dash-hyphen/&quot;&gt;How to use the en dash, em dash and hyphen (also ndash, mdash)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://whomtofollow.com/?account=sambreed%40mastodon.social&quot;&gt;Whom to Follow | Find New Fediverse Accounts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;RSS&lt;/h2&gt;
&lt;p&gt;Much has been written about the resurgence of RSS. Here&apos;s my story:&lt;/p&gt;
&lt;p&gt;I used RSS quite a bit from 2008 - 2012 but my usage fell off as my consultancy grew and more and more of my time was devoted to working on client projects instead of working on my RSS backlog. When Google Reader was killed, I was relieved. I had tens of thousands of unreads in an uncurated heap. That incarnation kept me away from RSS readers almost entirely for a decade.&lt;/p&gt;
&lt;p&gt;But time passes and seasons change, and in 2022 my media habits were shifting yet again, this time away from Twitter and newspapers. RSS was still there and still worked better than ever. I found a good reader in Feedbin and got to work building up a &lt;em&gt;well curated&lt;/em&gt; list of blogs, newsletters, and Twitter feeds.&lt;/p&gt;
&lt;p&gt;Here&apos;s the shotgun-blast of one tool and all of the things I starred in feedbin. RIP to the ability to follow twitter feeds there.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://opml.glitch.me/&quot;&gt;Twitter OPML Export&lt;/a&gt; - Recommended by Eric Bailey in the posts linked above, this is a tool for helping shake the good RSS feeds out of your twitter follows.&lt;/li&gt;
&lt;li&gt;https://twitter.com/cramforce/status/1640820365378338816&lt;/li&gt;
&lt;li&gt;https://stratechery.com/2023/chatgpt-learns-computing/&lt;/li&gt;
&lt;li&gt;https://www.jarretthousenorth.com/2023/03/21/old-mix-faith-and-blues/&lt;/li&gt;
&lt;li&gt;https://twitter.com/wesbos/status/998993638578376709&lt;/li&gt;
&lt;li&gt;https://kottke.org/23/03/kottke-is-25-years-old-today&lt;/li&gt;
&lt;li&gt;https://twitter.com/cramforce/status/1633140273885872128&lt;/li&gt;
&lt;li&gt;https://lethain.com/engineering-onboarding-programs/&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;YouTube&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=EiZhdpLXZ8Q&quot;&gt;The Future is a Dead Mall - Decentraland and the Metaverse - YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, February 2023</title><link>https://sambreed.dev/writing/2023/links-feb-2023/</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/links-feb-2023/</guid><description>The link posting will continue until morale improves!</description><pubDate>Tue, 28 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Winter. Low light. Short days. Cool weather. And finally, a month so short that it seems to be anticipating Spring waiting around the corner.&lt;/p&gt;
&lt;p&gt;For me, this winter has been characterized by &lt;a href=&quot;https://www.strava.com/athletes/3256286&quot;&gt;lots of low-effort running&lt;/a&gt; to train for my upcoming &lt;em&gt;first&lt;/em&gt; marathon at Big Sur in April.&lt;/p&gt;
&lt;p&gt;I have also been collecting tabs.&lt;/p&gt;
&lt;h3&gt;AI&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.theverge.com/23604075/ai-chatbots-bing-chatgpt-intelligent-sentient-mirror-test&quot;&gt;Introducing the AI Mirror Test, which very smart people keep failing&lt;/a&gt; - We&apos;re in the third month of frenzy following the release of ChatGPT and the hot takes simply will not stop coming. I&apos;ve been working in-and-around the LLM / transformers / diffusers space since 2020, so finding journalism that resonates with me has been challenging, this piece being a clear exception. Bottom line: it is waaaay easy to oversell or invent capabilities of, or explanations of &quot;how&quot;, a model like ChatGPT produces completions. There&apos;s definitely something cool and spooky going on here, but it&apos;s probably not what you think it is! Developing intuition for how these models behave and how to manipulate their output is challenging. They seem to have net-new qualities but are still very raw, so writing soberly about them seems to be very difficult.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thakkarparth007.github.io/copilot-explorer/posts/copilot-internals.html&quot;&gt;Copilot Internals&lt;/a&gt; - Impressive piece of reverse engineering! Co-pilot is great and it&apos;s nice to think of it as an assemblage of pieces on top of an LLM rather than as something magic or abstruse.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/blog/rlhf&quot;&gt;Illustrating Reinforcement Learning from Human Feedback (RLHF)&lt;/a&gt; - Staying on the theme of explicating the complex, this is how you grow a &lt;em&gt;very&lt;/em&gt; sophisticated model out of a merely sophisticated one.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://supabase.com/blog/openai-embeddings-postgres-vector&quot;&gt;Storing OpenAI embeddings in Postgres with pgvector&lt;/a&gt; - The team at Supabase rocks. I&apos;ve been a customer of theirs for 2 years and I feel like it&apos;s more than paid off with the features that they&apos;ve added since I started using them. This is a perfect example, where in the same week that I needed do this very task, they release a blog post telling me exactly how to do it. Pretty on point. Gotta appreciate a freebie like that when it comes your way!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.david-smith.org/blog/2023/02/02/podsearch-reborn/&quot;&gt;PodSearch Reborn&lt;/a&gt; - Very clever to index podcasts with OpenAI Whisper to make a searchable audio database.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://arxiv.org/abs/2301.06015&quot;&gt;Diffusion-based Generation, Optimization, and Planning in 3D Scenes&lt;/a&gt; - The last 5 months since the release of Stable Diffusion have been very exciting. There are papers like this one being published every week, and &lt;a href=&quot;https://huggingface.co/spaces/kadirnar/stable-diffusion-2-infinite-zoom-out&quot;&gt;new techniques&lt;/a&gt; to &lt;a href=&quot;https://huggingface.co/spaces/akhaliq/Analog-Diffusion&quot;&gt;generate&lt;/a&gt; &lt;a href=&quot;https://huggingface.co/lllyasviel/ControlNet&quot;&gt;images&lt;/a&gt;, 3D scenes, and animation are coming online as an outcome. It&apos;s breathless and no one has time to read and digest everything. It will be great to look back in 5 - 10 years and see where the high water mark left its line.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Code&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/flaviocopes/status/1627609246014619649&quot;&gt;Dark mode one-liner&lt;/a&gt; - I &lt;em&gt;gasped&lt;/em&gt; when I tried this and saw the results. Granted this might not work everywhere, but if you want a dark mode (or light mode if you&apos;re dark-first) without having to do, well, anything, then buddy this tweet&apos;s for you.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dev.to/tigt/making-the-worlds-fastest-website-and-other-mistakes-56na&quot;&gt;Making the world’s fastest website, and other mistakes&lt;/a&gt; - This echoes a lot of my experience working at Credit Karma and being responsible for website performance. I used all of the tricks mentioned here: measuring bare infrastructure and being a bit shocked at how slow sending 0 bytes could be; eliminating as much 3rd party JS as possible and quarantining the rest in an iframe; inlining important CSS; swapping out React for Preact in places; and event using an &lt;a href=&quot;https://jasonformat.com/islands-architecture/&quot;&gt;islands architecture&lt;/a&gt; to render parts of the page on the server with zero client-side scripting.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://shopify.engineering/javascript-in-webassembly-for-shopify-functions&quot;&gt;Bringing Javascript to WebAssembly for Shopify Functions&lt;/a&gt; - This idea was kicked around on my team in 2021 but we didn&apos;t execute on it, but I&apos;m glad someone else did because this is, in many ways, so obvious. Sandboxing code is very tricky and it&apos;s one of the core qualities of WASM, so getting a way to run untrusted JS in safely and reliably is very useful and cool.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://marvinh.dev/blog/speeding-up-javascript-ecosystem-part-3/&quot;&gt;Speeding up the JavaScript ecosystem - eslint&lt;/a&gt; - Another style of deep dive on super in-the-weeds optimizations found in eslint. Some really good strategies at play here, especially looking for subtle gotcha&apos;s in modern syntax that&apos;s de-optimized with outdated transpiling. I bet you could find this everywhere if you went looking for it.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause&quot;&gt;Error: cause&lt;/a&gt; - TIL that you can pass a contextual data specifying a &lt;code&gt;cause&lt;/code&gt; to an Error in JavaScript. This is fairly new. I remember wanting to do this years ago and not being able to. Love it when intellisense hints at an field that&apos;s new-to-you.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Software&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://sarharibhakti.substack.com/p/a-better-way-to-build-software&quot;&gt;A better way to build software&lt;/a&gt; - Karri Kivela, CEO of Linear, talks about the importance of design for success, reducing friction &amp;#x26; providing defaults for momentum, measuring engineering productivity &amp;#x26; shipping velocity, and the challenges of remote work.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fly.io/blog/carving-the-scheduler-out-of-our-orchestrator/&quot;&gt;Carving the Scheduler Out of Our Orchestrator&lt;/a&gt; - Over the years I&apos;ve been increasingly impressed with the high-quality content coming out from the team at Fly.io. They first got my attention in 2019 with their open source work around V8 isolates, and I&apos;ve been following them ever since. They&apos;re solving common infrastructure problems in modern, novel ways. Like Vercel but without the JS-eats-the-world endgame. Anyway I love by-the-numbers engineering pieces like this, and orchestrators / schedulers are classic &quot;hard&quot; problems that are fun to think about but tough to get right.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.blog/2023/02/19/developer-with-adhd-youre-not-alone/&quot;&gt;Developer with ADHD? You&apos;re not alone.&lt;/a&gt; - I wasn&apos;t diagnosed with ADHD until my early 30s, but the diagnosis snapped a lot of aspects of my personality, career, and relationships into sharp relief. Not surprising to learn that there&apos;s a large number of programmers who share a similar diagnoses, I only took the steps to see someone about it after a friend had shared about their story on twitter. But it makes sense, the structure and feedback of programming are intensely rewarding and can be self-taught, perfect fit for the dopamine seekers in the world.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://henrikwarne.com/2023/02/12/algorithmic-trading-a-practitioners-guide/&quot;&gt;Algorithmic Trading: A Practitioner’s Guide&lt;/a&gt; - wow, please print a copy of this and send it back to me circa 2016-2017. I read several books on the topic and wrote a bit of automation but ultimately put it aside as a hobby.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.dkriesel.com/en/blog/2013/0802_xerox-workcentres_are_switching_written_numbers_when_scanning&quot;&gt;Xerox scanners/photocopiers randomly alter numbers in scanned documents&lt;/a&gt; - yes, you read that correctly. Software in Xerox copy machines could, under certain conditions, scramble numbers in scanned documents. This was a bug in the wild for several &lt;strong&gt;years&lt;/strong&gt; before it was fixed!&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Opinion Section&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://noahpinion.substack.com/p/dont-be-a-doomer&quot;&gt;Don&apos;t be a doomer&lt;/a&gt; - Point: modernity and human psychology make it easier and more rewarding to be a pessimist, especially as a reactionary reward-seeking mechanism. Things are pretty good even though they can still get a hell of a lot better. Both can be true at the same time!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jonathanhaidt.substack.com/p/social-media-mental-illness-epidemic&quot;&gt;Social Media is a Major Cause of the Mental Illness Epidemic in Teen Girls. Here’s the Evidence.&lt;/a&gt; Counter-point: there are big harms that we&apos;re self-inflicting and maybe we should cut it out? or at least not deny the mounting piles of evidence? Jonathan Haidt is an author I came across last year while actively seeking out books recommended by people I don&apos;t agree with, and his Moral Foundations theory really resonated with me a way to frame contemporary history and political division. I don&apos;t agree with everything he has to say, but he&apos;s a good and thought-provoking writer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Misc.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://alertca.live/cam-console/2192&quot;&gt;Mt Tamalpais Webcam&lt;/a&gt; - I&apos;ve been in the habit of regularly checking the Mt Tam webcams for a few years now, ever since I moved closer to the center of Mill Valley. That is until a few months ago, when the two cameras went offline. I looked again today and they&apos;re back online and have added more, better cameras. There is even a full panorama now! It&apos;s cool that there&apos;s a continuous live feed from the top of the the mountain which I live at the foot of.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://personalsit.es/&quot;&gt;personalsit.es&lt;/a&gt; - Everyone should have a personal website! I love seeing the clever things that people get up to. Really under-appreciated genre.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, January 2023</title><link>https://sambreed.dev/writing/2023/links-january-2023/</link><guid isPermaLink="true">https://sambreed.dev/writing/2023/links-january-2023/</guid><description>what&apos;s happening in the world of links</description><pubDate>Tue, 31 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;m making good on tab purging this year. Now featuring favorites pulled from my RSS reader!&lt;/p&gt;
&lt;p&gt;Every month (or whenever I get to it) I use the &lt;a href=&quot;https://chrome.google.com/webstore/detail/session-buddy/edacconmaakjimmfgnblocblbcdcpbko&quot;&gt;SessionBuddy&lt;/a&gt; extension to export a list of all of my open tabs, so that I can trap them in a mirror and hurl them out into space.&lt;/p&gt;
&lt;h3&gt;Media Diet&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://feedbin.com/&quot;&gt;Feedbin&lt;/a&gt; – I have begun slowly ease back into RSS after more than a decade away.&lt;/p&gt;
&lt;p&gt;RSS was both good and bad for me in the past. I enjoyed it thoroughly back in the day, but I remember Google Reader was starting to feel like an overflowing inbox rather than a stroll in the park. Feeds, chronological or otherwise, came to dominate my internet consumption since Google Reader shut down. I never replaced it with anything. It was a mixture of dead blogs and hyperactive feeds from publishers. &lt;a href=&quot;https://chriscoyier.net/2023/01/05/a-big-pile-of-personal-developer-designer-blogs-in-an-opml-file/&quot;&gt;Chris Coyier made a list of all of his feeds, which is a neat idea&lt;/a&gt;. I&apos;m not looking to get all of them, but I should look through them and see if anything strikes me.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://roman.computer/finding_information/&quot;&gt;tools for finding information on the internet | Roman Hauksson&lt;/a&gt; – Finding things online is underrated. This is a great list of tools, some of which I know and use, like &lt;a href=&quot;https://metaphor.systems&quot;&gt;metaphor.systems&lt;/a&gt; and &lt;a href=&quot;https://annas-archive.org&quot;&gt;anna&apos;s archive&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://daverupert.com/rss-club/&quot;&gt;RSS Club - daverupert.com&lt;/a&gt; - very cool idea (shh!)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;AI&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://writings.stephenwolfram.com/2023/01/wolframalpha-as-the-way-to-bring-computational-knowledge-superpowers-to-chatgpt/&quot;&gt;Wolfram|Alpha as the Way to Bring Computational Knowledge Superpowers to ChatGPT—Stephen Wolfram Writings&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/spaces/JavaFXpert/Chat-GPT-LangChain&quot;&gt;GPT+WolframAlpha+Whisper - a Hugging Face Space by JavaFXpert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Systems for orchestrating feedback loops and re-entrant style processing on top of one-shot models are starting to pop up, and this is a clever example of how LLMs can be scripted and patched into other tools to produce novel results. Watch this space.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/isekaidev/stable.art&quot;&gt;isekaidev/stable.art: Photoshop plugin for Stable Diffusion with Automatic1111 as backend (locally or with Google Colab)&lt;/a&gt; – There&apos;s &quot;fast&quot; and then there&apos;s &quot;the first 6 months of the Stable Diffusion era&quot; fast. Too many papers, models, and demos to even look at. This one sticks out for being one of many in the category of enriching &quot;old media&quot; tools with AI models.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.beskar.co/blog/streaming-openai-completions-vercel-edge&quot;&gt;Streaming OpenAI completions with the Vercel Edge Runtime&lt;/a&gt; — Really belongs to the &quot;code&quot; heading but the AI-adjacency lands it here. Truly some black magic going on here, this must have been a real pain to figure out how to piece together. The Web API-only compute tier continues to evolve in novel ways.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stratechery.com/2023/ai-and-the-big-five/&quot;&gt;Stratechery - AI and the Big Five&lt;/a&gt; – Long read that amounts to &quot;the story up until now.&quot; Essential reading.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Social Web&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://maggieappleton.com/garden-history&quot;&gt;A Brief History &amp;#x26; Ethos of the Digital Garden&lt;/a&gt; – I absolutely love this idea. It is a very inspiring vision for what the personal web can and should be. Blogging is not the only modality of self-publishing! It&apos;s a good one but not the only game in town. I want to make good on the challenge here and start a few digital gardens here.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rknight.me/adding-webmentions-to-your-site/&quot;&gt;Adding Webmentions to Your Site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/wildebeest&quot;&gt;cloudflare/wildebeest: Wildebeest is an ActivityPub and Mastodon-compatible server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/microfeed/microfeed&quot;&gt;microfeed/microfeed: a lightweight cms self-hosted on cloudflare, for podcasts, blogs, photos, videos, documents, and curated urls.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Tech Nostalgia&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://computerhistory.org/blog/apple-lisa-still-more-to-uncover/&quot;&gt;Apple Lisa: Still More to Uncover&lt;/a&gt; – I have never used a Lisa but I&apos;ve been fascinated with this era of computing since I was 13 and saw the made for tv movie Pirates of Silicon Valley (1999) about young Steve Jobs and Bill Gates. Part of it touches on the Lisa and so I&apos;ve always had a vision of it in the back of my head that more or less lines up with what it really was. I really need to make it to the computer history museum someday!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://rknightuk.github.io/mac-30-font-svg/&quot;&gt;Mac 30th Anniversary Icons&lt;/a&gt; – This was widely shared and very well done, even the &quot;garbage can&quot; Mac tower gets a treatment.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Opinion Section&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.frontiersin.org/articles/10.3389/frma.2022.1104460/full&quot;&gt;Editorial: Scarcity, regulation, and the abundance society&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://laughingmeme.org//2023/01/16/software-and-its-discontents-part-1.html&quot;&gt;Software and its Discontents, January 2023, Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://danluu.com/productivity-velocity/&quot;&gt;Some reasons to work on productivity and velocity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sashachapin.substack.com/p/five-mildly-anti-buddhist-essays&quot;&gt;Five Mildly Anti-Buddhist Essays - by Sasha Chapin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.newyorker.com/books/page-turner/the-artist-whose-book-covers-distilled-the-nineteen-eighties&quot;&gt;The Artist Whose Book Covers Distilled the Nineteen-Eighties | The New Yorker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://noahpinion.substack.com/p/actually-japan-has-changed-a-lot&quot;&gt;Actually, Japan has changed a lot - by Noah Smith&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pluralistic.net/2023/01/21/potemkin-ai/&quot;&gt;Pluralistic: Tiktok’s enshittification (21 Jan 2023) – Pluralistic: Daily links from Cory Doctorow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Code&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.felixge.de/reducing-gos-execution-tracer-overhead-with-frame-pointer-unwinding/&quot;&gt;Reducing Go Execution Tracer Overhead With Frame Pointer Unwinding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tomcritchlow.com/2023/01/27/small-databases/&quot;&gt;The Magic of Small Databases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.builder.io/blog/numbers-and-dates&quot;&gt;A Better Way to Work With Number and Date Inputs in JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/google/cdc-file-transfer&quot;&gt;google/cdc-file-transfer: Tools for synching and streaming files from Windows to Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://forgeorganizing.org/article/building-resilient-organizations&quot;&gt;Building Resilient Organizations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.beskar.co/blog/streaming-openai-completions-vercel-edge&quot;&gt;Streaming OpenAI completions with the Vercel Edge Runtime&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links, December 2022</title><link>https://sambreed.dev/writing/2022/links-december-2022/</link><guid isPermaLink="true">https://sambreed.dev/writing/2022/links-december-2022/</guid><description>More links to tabs I&apos;ve kept open for 4 months</description><pubDate>Sat, 31 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Yikes! When I last posted a batch of links, I said I would get to this every month. That didn&apos;t happen. September rolled into October, Fall became winter and here we are, at the end of the year with a big crop of tabs to round up.&lt;/p&gt;
&lt;h3&gt;Technology&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ooh.directory/blogs/technology/hardware/&quot;&gt;Blogs about Hardware (ooh.directory)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I had been secretly wanting for something just like this to come back in fashion, essentially the Yahoo! directory concept from 1995 but curated, up to date, and with modern features.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.blog/2022/11/23/why-writing-by-hand-is-still-the-best-way-to-retain-information/&quot;&gt;Why writing by hand is still the best way to retain information&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I prefer to take meeting notes by hand, since typing is difficult to be discrete about and I&apos;m not enough of an inborn stenographer to take verbatim notes and stay engaged in a conversation. My notes during meetings tend to me for me to organize my thoughts around what I&apos;m hearing, capturing themes and motives and plot points but rarely dialog or executive summaries in real time. These notes often aren&apos;t even helpful when I look back at them! Yet I have a dozen notebooks full of them covering as many years of meetings, and rarely if ever have I returned to the content of a specific note after more than a few weeks.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://redmonk.com/sogrady/2022/12/09/faster-horse/&quot;&gt;A Faster Horse&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Some AWS history and ruminations on it&apos;s future, in the context of its own ever-increasing complexity and the emergence of higher level platforms like Vercel, Fly, et al. In broad strokes, AWS in 2022 is similar to Microsoft in 2005 when AWS first launched. Do they innovate by building for customers or developers?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://codahale.com/work-is-work/&quot;&gt;Work Is Work | codahale.com&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;An exceptionally clever take on what grinds the gears in large organizations and some advice on how to combat them. None of this is bad advice.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.epicweb.dev/the-webs-next-transition&quot;&gt;The Web’s Next Transition | Epic Web Dev by Kent C. Dodds&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;It&apos;s taken me 15+ years to have strong intuition and first hand experience with different application patterns discussed here, and Kent gets it all right. I&apos;ve been using Remix for some time now and their implementation of these patterns make for a powerful and flexible way to build things quickly. Say what you will about React, but it&apos;s undeniable that there&apos;s something good going on in this part of the web development community if these types of frameworks are the end result.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.robinsloan.com/lab/new-avenues/&quot;&gt;A year of new avenues&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Before the events prompting this post, I had written a bit about why I was dissatisfied with Twitter and social media in general in 2022. The specific circumstances don&apos;t warrant any more than, &quot;I don&apos;t post there anymore&quot; but Robin Sloan&apos;s post nails the obituary for the last generation of platforms with a tone of optimism that can still be found in the right places online.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.techdirt.com/2022/12/29/some-tricks-to-making-mastodon-way-more-useful/&quot;&gt;Some Tricks To Making Mastodon Way More Useful&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Continuing on the thread of life online after Twitter, the new website has some interesting quirks and features and ways to use it. Protocols are more resilient than platforms.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Code / Software&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;*&lt;a href=&quot;https://img.ly/blog/ultimate-guide-to-ffmpeg/&quot;&gt;FFmpeg - Ultimate Guide | IMG.LY Blog&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;(In no particular order here,) ffmpeg is a swiss army knife of video and audio processing that I got to know well for a project for Freeskier Magazine in 2009 and have been using when the need arises ever since. It&apos;s a daunting tool so having a crisp how-to around is a good thing.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://madebyevan.com/algos/crdt-fractional-indexing/&quot;&gt;CRDT: Fractional Indexing - Made by Evan&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Conflict-Resistant Data Types continue to be cool!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://meiert.com/en/blog/web-developer-pilgrimage/&quot;&gt;Making the Web Developer’s Pilgrimage · Jens Oliver Meiert&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;What a great idea that I&apos;ll never have time to do! This is a level of pedantry that I can really appreciate. I learned so much from reading the JavaScript spec when I was getting deeper knowledge of the language but I hadn&apos;t ever considered exploring the HTML spec in the same way.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fasterthanli.me/articles/the-http-crash-course-nobody-asked-for&quot;&gt;The HTTP crash course nobody asked for&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Continuing on the theme from the link above.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.cloudflare.com/the-state-of-http-in-2022/&quot;&gt;The state of HTTP in 2022&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;A late addition to the list. HTTP/3 had been on my radar but I hadn&apos;t done much reading about it before this. I knew part of the story with HTTP/2 push being hollow from following Jake Archibald but didn&apos;t know that it was enough of a wash for Chrome to remove it altogether in favor of 103 response hints and it absent from all HTTP/3 implementations (but still present in the spec.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://web.stanford.edu/class/cs168/index.html&quot;&gt;The Modern Algorithmic Toolbox (CS168), Spring 2022&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I love collecting bookmarks like this. I&apos;ll likely never go through these course materials but it&apos;s always fun to dunk my head into the icy fresh waters of academia sometimes and pretend I was a college student who wanted to learn about computers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.bytebytego.com/p/algorithms-you-should-know-before?triedSigningIn=true&quot;&gt;Algorithms you should know before you take system design interviews&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I don&apos;t believe in quiz style interviews but these types of lists are useful because they usually corelate to real world use cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.steveruiz.me/posts/zoom-ui&quot;&gt;Creating a Zoom UI - Steve Ruiz&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Having learned this the hard way, this was worth bookmarking.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://aws.amazon.com/architecture/well-architected/?wa-lens-whitepapers.sort-by=item.additionalFields.sortDate&amp;#x26;wa-lens-whitepapers.sort-order=desc&amp;#x26;awsm.page-wa-lens-whitepapers=1&amp;#x26;wa-guidance-whitepapers.sort-by=item.additionalFields.sortDate&amp;#x26;wa-guidance-whitepapers.sort-order=desc&quot;&gt;AWS Well-Architected - Build secure, efficient cloud applications&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;The Redmonk article linked above is not wrong about the labyrinthian complexity that one can get mired in when doing just about anything in AWS. So much so that a compendium of best practices and example architectures spanning the myriad choices within AWS is more than necessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://benhoyt.com/writings/rob-pike-regex/&quot;&gt;Rob Pike&apos;s simple C regex matcher in Go&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Coding is tough and people are really clever about it!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://macwright.com/2022/11/18/optimism-updates.html&quot;&gt;Web technology optimism hour&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;The note from above on Kent C. Dodd&apos;s article listed above, The Web&apos;s Next Transition, hits on this same theme: it&apos;s a great time to be a web developer! Things can be better but I&apos;d rather be building things today than 10 or 20 years ago. The tools are better, the browsers are better,&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.allthingsdistributed.com/2022/11/amazon-1998-distributed-computing-manifesto.html&quot;&gt;The Distributed Computing Manifesto&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;AWS-heavy linkage this go around, but man oh man is this a good one. I had the pleasure of meeting Wernver Vogels when I was on business in Amsterdam some years ago, and spent an afternoon watching the Seahawks in the playoffs in a bar with him and a large group of people. I don&apos;t remember talking to him beyond introducing myself and that he was in a Marshawn Lynch jersey. A few years later I would be sitting at my desk on the 7th floor of the Credit Karma office and I would see Marshawn Lynch pop his head out of the door to the stairwells, look in either direction with big eyes before scampering (light feet on a big dude!) down the hall. He was looking for his sister, who worked there, but I didn&apos;t have that fact in that moment. Anyway, this post should be essential reading for any software engineer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tailscale.com/blog/modules-monoliths-and-microservices/&quot;&gt;Modules, monoliths, and microservices&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;More good information on systems design. Remined me of &lt;a href=&quot;https://www.destroyallsoftware.com/talks/boundaries&quot;&gt;Boundaries&lt;/a&gt; because most anything that touches on modularity will remind me of &lt;em&gt;Boundaries&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.yossarian.net/2022/12/28/ReDoS-vulnerabilities-and-misaligned-incentives&quot;&gt;ReDoS &quot;vulnerabilities&quot; and misaligned incentives&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Can&apos;t agree with this more. I posted about it here: https://mastodon.social/@sambreed/109598537983995990&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://httptoolkit.com/blog/cache-your-cors/&quot;&gt;Cache your CORS, for performance &amp;#x26; profit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hynek.me/articles/productive-fruit-fly-programmer/&quot;&gt;How I’m a Productive Programmer With a Memory of a Fruit Fly&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I&apos;m a sucker for descriptions of other people&apos;s workflows. In practice people use computers in wildly different ways to accomplish the same task. This is both frustrating and amazing.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://macwright.com/2022/12/09/activitypub.html&quot;&gt;Playing with ActivityPub&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;The reason why the events surrounding social media platforms at the end of this year seem different than the last schism is that there are now alternative platforms that have a few years of hardening under their belt. Underlying these new platforms are a set of protocols and conventions for distributing content across independent host applications, rather than a single central authority. ActivityPub and its ilk are noteworthy and ought to be explored. The prospect that any website can become follow-able across a large network feels like a concept from an earlier era being brought back to life.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Design&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hpjansson.org/blag/2022/08/16/adventure-game-graphics-with-dall-e-2/&quot;&gt;Adventure game graphics with DALL-E 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://towardsdatascience.com/fundamentals-to-clustering-high-dimensional-data-3d-point-clouds-3196ee56f5da&quot;&gt;Clustering high-dimensional data: 3D point clouds | Towards Data Science&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;AI&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://stratechery.com/2022/the-ai-unbundling/&quot;&gt;The AI Unbundling – Stratechery by Ben Thompson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stratechery.com/2022/nvidia-in-the-valley/&quot;&gt;Nvidia In the Valley – Stratechery by Ben Thompson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/sw-yx/ai-notes/&quot;&gt;sw-yx/ai-notes: notes for my AI studies, writing, and product brainstorming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pub.towardsai.net/stable-diffusion-based-image-compresssion-6f1f0a399202&quot;&gt;Stable Diffusion Based Image Compression | by Matthias Bühlmann | Towards AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jalammar.github.io/illustrated-stable-diffusion/&quot;&gt;The Illustrated Stable Diffusion – Jay Alammar – Visualizing machine learning one concept at a time.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;etc.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.worksinprogress.co/issue/biases-the-wrong-model/?utm_campaign=%22Securities%22%20by%20Lux%20Capital&amp;#x26;utm_medium=email&amp;#x26;utm_source=Revue%20newsletter&quot;&gt;We don’t have a hundred biases, we have the wrong model - Works in Progress&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.noemamag.com/the-disappearing-art-of-maintenance/?utm_campaign=%22Securities%22%20by%20Lux%20Capital&amp;#x26;utm_medium=email&amp;#x26;utm_source=Revue%20newsletter&quot;&gt;Maintenance Is Sorely Needed In The Fight Against Global Warming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://druriley.com/100-rules-2020/&quot;&gt;100 Rules To Live By - Dru Riley&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links Blog August 2022</title><link>https://sambreed.dev/writing/2022/links-august-2022.html</link><guid isPermaLink="true">https://sambreed.dev/writing/2022/links-august-2022.html</guid><description>Links! more links to things I&apos;ve had open for most of August 2022</description><pubDate>Tue, 30 Aug 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;ve committed to blogging more while also paying down my open tab debt. Once a month, I&apos;ll use the Session Buddy extension to export my current tabs on my personal computer.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://nenadmarkus.com/p/picojs-intro/&quot;&gt;pico.js, a face-detection library in 200 lines of JavaScript&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;a few years old already, but things like this never cease to amaze me. When I was learning JavaScript, I would joke with my colleagues about far-fetched behavior like realtime face detection being done in JS, so to see it laid out so tersely makes me excited for the future.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://architecturenotes.co/&quot;&gt;Architecture Notes — System Design &amp;#x26; Software Architectures Explained&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;the write-up here about Redis made it into my social feeds. I&apos;m a sucker for diagrams and short paragraphs and database internals. I love systems, and I love Redis, despite having not used it for anything recently. Early on at Quick Left, I built a number of client projects that used Redis for caching or lightweight storage. I even made the mistake of trying to build an entire app with a Redis backend until it collapsed under it&apos;s own schema-less weight.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://shoelace.style/&quot;&gt;Shoelace.style&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I really, really don&apos;t want web components to be vaporware. Shoelace seems like a deliberate step in the right direction: making web-native components that are compatible with React (because that&apos;s where the developers are). Tools should embrace where developers are and help make them better at their jobs.&lt;/li&gt;
&lt;li&gt;The Next.js integration looks ugly today, but I&apos;m willing to bet that it improves over time.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://webhooks.fyi/&quot;&gt;Webhooks.fyi&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;filed under: essential information. h/t to &lt;a href=&quot;https://progrium.com&quot;&gt;Jeff Lindsay&lt;/a&gt; for inventing webhooks in the first place.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.pkh.me/p/33-deconstructing-be%CC%81zier-curves.html&quot;&gt;Deconstructing Bézier curves&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;tutorials about once-byzantine concepts are my jam. I could collect these infinitely.&lt;/li&gt;
&lt;li&gt;Two more links fell out of this one:
&lt;ul&gt;
&lt;li&gt;http://blog.pkh.me/p/29-the-most-useful-math-formulas.html&lt;/li&gt;
&lt;li&gt;https://en.m.wikipedia.org/wiki/De_Casteljau%27s_algorithm&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://stratechery.com/2022/instagram-tiktok-and-the-three-trends/&quot;&gt;Instagram, TikTok, and the Three Trends – Stratechery by Ben Thompson&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;too long to summarize, but tldr social media destroyed the traditional media and now the next generation of apps are reshaping things again; we&apos;re all living through the consequences of it and won&apos;t know what trends matter for another decade.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cannedtxt.com/&quot;&gt;CannedTXT&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;widely shared, but a smart little source of &quot;canned responses.&quot; It&apos;s tough to be terse, polite, and direct in writing without a lot of practice; this is a masterclass.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://druriley.com/100-rules-2020/&quot;&gt;100 Rules — Personal Philosophy - Dru Riley&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;aphorisms are another fun thing to collect. I&apos;d never thought of keeping a running list of the good ones.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://matt-rickard.com/the-unreasonable-effectiveness-of-makefiles&quot;&gt;The Unreasonable Effectiveness of Makefiles&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I&apos;m on the fence about this hypothesis. At Credit Karma, I put Makefiles in lots of my projects because it seemed like a universal solution.&lt;/li&gt;
&lt;li&gt;I&apos;ve been using linux since I was a teenager, so the idea of running &lt;code&gt;make&lt;/code&gt; in a project and just having it do the right thing appealed to me.&lt;/li&gt;
&lt;li&gt;In practice, I found it to be less than ideal. Make syntax is &quot;yet another&quot; technology to weave into a project that&apos;s not already going to use it.&lt;/li&gt;
&lt;li&gt;Using it to invoke npm commands and interface to other build and test scripts was fine, but it didn&apos;t remove any complexity. Rather, it added complexity in exchange for very little utility.&lt;/li&gt;
&lt;li&gt;The only correct take on &lt;code&gt;make&lt;/code&gt; is that there&apos;s really only &lt;em&gt;one&lt;/em&gt; Makefile. Every Makefile you encounter has been copypasta&apos;d from the original.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.patterns.dev/&quot;&gt;Patterns.dev - Modern Web App Design Patterns&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;huge collection of design patterns. Materials like this would have been extremely effective when I was learning how to build apps. Reading Stoyan Stefanov&apos;s JavaScript Patterns book was an eye-opening experience for me 10 years ago, so it&apos;s heartening to see that tradition continued.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://software-engineering-books.com/&quot;&gt;Software Engineering Books&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;In a similar vein to the previous tab, here is a curated reading list. I&apos;ve read a number of these already and the remainder are on the list.&lt;/li&gt;
&lt;li&gt;I&apos;ve already finished The Personal MBA because it was the only book listed in two different categories. It was dense, which is the only compliment for a business book, which tend to be 2 paragraphs worth of ideas spread across 100 pages of filler.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://weh.wtf/34-blockchain-projects.html&quot;&gt;I Looked Into 34 Top Real-World Blockchain Projects So You Don’t Have To | Niko’s Blog&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;This is tongue-in-cheek because the &quot;list&quot; of 34 companies comes from an unknown media outlet and the original author is obviously pro crypto.&lt;/li&gt;
&lt;li&gt;The original piece could very well be a link farming or affiliate marketing situation, and if you pick a year-old post on a site like that, you&apos;d be shocked if the majority of the links weren&apos;t dead or redirects.&lt;/li&gt;
&lt;li&gt;But yeah, crypto has so far only been provably good at creating exchanges to trade crypto, which exist to get market makers (the shills) and retail investors (the marks) to trade crypto. QED.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.worksinprogress.co/issue/the-maintenance-race/&quot;&gt;The Maintenance Race&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Long read by Stewart Brand. I recently finished reading his biography, Whole Earth, so Brand has been top of mind lately.&lt;/li&gt;
&lt;li&gt;My only notes from the biography is that he occasionally seemed like a jerk, but I&apos;m glad they left that stuff in, because honestly who&apos;s &lt;em&gt;not&lt;/em&gt; a jerk every now and then.&lt;/li&gt;
&lt;li&gt;Anyway this is an interesting story and re-enforces an aphorism from Nassim Taleb that I&apos;m fond of: &quot;prepare for the worst, the best will work itself out&quot;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thebrowser.com/&quot;&gt;The Browser&lt;/a&gt; this is a paid newsletter that I don&apos;t pay for but seemed interesting, Brand tweeted about it having run a blerb about the article.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://supabase.com/blog/2022/07/18/seen-by-in-postgresql&quot;&gt;Implementing &quot;seen by&quot; functionality with Postgres&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;smarties over at supabase demonstrating hyperloglog tables in postgres&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/codecrafters-io/build-your-own-x#build-your-own-3d-renderer&quot;&gt;codecrafters-io/build-your-own-x: Master programming by recreating your favorite technologies from scratch.&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;yet-another Rosetta Stone for building a wide variety of software projects&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://commoncog.com/g/burnout/&quot;&gt;Burnout Guide: Symptoms, Causes, and Prevention - Commoncog&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;haha an article about burnout that&apos;s a bit too long to read given my current energy and commitment levels. &quot;I knows it when I sees it&quot;. Come back to this one later on down the road.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.mollywhite.net/cryptocurrency-market-caps-and-notional-value/&quot;&gt;Cryptocurrency &quot;market caps&quot; and notional value&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I spent many years being biased &lt;em&gt;towards&lt;/em&gt; crypto.
&lt;ul&gt;
&lt;li&gt;In order to counteract that, I&apos;m planning on spending as many years being well informed on the arguments against the industry.&lt;/li&gt;
&lt;li&gt;My real opinion is more neutral. I look at it like gambling or day trading, neither of which I engage in, but I also don&apos;t care if my neighbor chooses to. Be safe and have fun!&lt;/li&gt;
&lt;li&gt;That said, in a just society, regulatory frameworks should exist to protect people who gamble or trade securities from being scammed, mislead, or exploited.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The author, Molly White, is exceptionally good at presenting balanced and well-reasoned descriptions of current events and industry slip ups.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fermatslibrary.com/s/the-teletel-minitel-system-in-france&quot;&gt;Fermat&apos;s Library | The Teletel/Minitel System in France annotated/explained version.&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;France&apos;s pre-web barely-internet information services were ahead of their time and simultaneously offer a view into an alternate history of what could have been if that technology caught on like the web did.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://clipasso.github.io/clipasso/?utm_campaign=%22Securities%22%20by%20Lux%20Capital&amp;#x26;utm_medium=email&amp;#x26;utm_source=Revue%20newsletter&quot;&gt;CLIPasso: Semantically-Aware Object Sketching&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I&apos;m not quite there with the maths in all the AI papers I read, but I still read them and try to understand what&apos;s going on at a casual level. I have the rest of my lifetime to get a grasp on the math parts.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://xn--gckvb8fzb.com/running-an-open-source-home-area-network/&quot;&gt;マリウス . Running an Open Source Home Area Network&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;extremely detailed, extremely neckbeard (no offense intended) home networking setup. I simply don&apos;t have the patience to do anything more basic than running hard wired cables to a couple devices and plugging things into an unmanaged switch. Mad respect to the people that get creative with things like this.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.quantamagazine.org/elegant-six-page-proof-reveals-the-emergence-of-random-structure-20220425/&quot;&gt;Elegant Six-Page Proof Reveals the Emergence of Random Structure | Quanta Magazine&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Journalism about math is never boring.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nadia.xyz/idea-machines&quot;&gt;Nadia Asparouhova | Idea machines&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;remined me of the disney circular business model&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fly.io/blog/soc2-the-screenshots-will-continue-until-security-improves/&quot;&gt;SOC2: The Screenshots Will Continue Until Security Improves · Fly&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Security is such a deep topic, I could read about the procedural blood and guts like this all day. I&apos;m glad to have done a stint with a security focused industry and for a company that treated it rigorously. But I don&apos;t miss being paranoid.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://scrty.io/&quot;&gt;Starting Up Security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pathlock.com/learn/internal-control-framework-a-practical-guide-to-the-coso-framework/&quot;&gt;Internal Control Framework: A Practical Guide to the COSO Framework | Pathlock&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Robert-van-Engelen/tinylisp&quot;&gt;Robert-van-Engelen/tinylisp: Lisp in 99 lines of C and how to write one yourself. Includes 20 Lisp primitives, garbage collection and REPL. Includes tail-call optimized versions for speed and reduced memory use.&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;wow&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wasp-lang.dev/blog/2022/06/24/ML-code-gen-vs-coding-by-hand-future&quot;&gt;ML code generation vs. coding by hand - what we think programming is going to look like | Wasp&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;an area that I&apos;m still in the &quot;thinking deep thoughts&quot; phase of&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stateful/vscode-awesome-ux&quot;&gt;stateful/vscode-awesome-ux: Showcase of how to employ best practices to provide a high-fidelity user experience inside of VS Code extensions.&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;lots more can be done in vs code extensions than I had previously thought. Great seeing open source explorations like this.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/Euler_equations_(fluid_dynamics)&quot;&gt;Euler equations - fluid dynamics&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;more math-person envy on display&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=941vlJw5y8I&quot;&gt;The Troubled History of Batman (1989): Burton! Keaton! Nicholson! Batmania! - YouTube&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I like this channel.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Twitter</title><link>https://sambreed.dev/writing/twitter.html</link><guid isPermaLink="true">https://sambreed.dev/writing/twitter.html</guid><description>Leaving Twitter</description><pubDate>Mon, 18 Jul 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Update: I left the site in early November 2022 and locked my account. A searchable copy of my bad tweets is available at &lt;a href=&quot;https://hellsite.sambreed.dev&quot;&gt;hellsite.sambreed.dev&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So I&apos;m thinking about getting off twitter.&lt;/p&gt;
&lt;p&gt;The more I use it, the less I get out of it.&lt;/p&gt;
&lt;p&gt;I&apos;ve turned into a passive user, one loathe to create and barely there to engage.
I don&apos;t want to see my retweets from people I follow.&lt;/p&gt;
&lt;p&gt;Only a handful of people see and interact with what I post, and those feel mechanical.&lt;/p&gt;
&lt;p&gt;The friends I met on the platform in the early 2010s have all moved on or have large followings.&lt;/p&gt;
&lt;p&gt;My following has stayed modest, which I attribute to my considerate pull-back in 2015 when I abdicated my company, got a corporate job, and stopped pursing speaking engagements at conferences.&lt;/p&gt;
&lt;p&gt;Now it&apos;s 7 years later and the way I see the world has changed.&lt;/p&gt;
&lt;p&gt;I no longer envy engagement for engagement&apos;s sake; I can see through the shills and marketers and shit-posters to the dark heat of the feedback loop.&lt;/p&gt;
&lt;p&gt;My phone is not a positive force for my ADHD; if it&apos;s in front of me, I will pick it up and flip through a few screens, seeking the pleasure of the dopamine hit I get from the right type of content: a like, a reply, a recognition, or (usually) just the guilty pleasure of schadenfreude.&lt;/p&gt;
&lt;p&gt;I stopped using Instagram on my phone because it felt like an attention trap that I knew well-enough to not interact with too frequently, but like driving past a multi-car pile up, something I couldn&apos;t keep myself from gawking at.&lt;/p&gt;
&lt;p&gt;If I had anything important to say, why bother saying it on Twitter when I can self-publish just as easily?&lt;/p&gt;
&lt;p&gt;And while we&apos;re asking questions, are the platform and the format even good?&lt;/p&gt;
&lt;p&gt;Forced brevity can yield increased clarity of thought, but it&apos;s far from a guarantee.&lt;/p&gt;
&lt;p&gt;Ending on a positive note, there are a few &lt;strong&gt;good&lt;/strong&gt; ways to use Twitter:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chronological Timeline.&lt;/strong&gt; Yes, I recognize that much has been made of this. The common joke being that the algorithmic timeline is so bad they have to give you a way to disable it or they wouldn&apos;t have any users. I&apos;m sure this isn&apos;t all true, the algorithmic timeline &lt;strong&gt;must&lt;/strong&gt; have add value for &lt;strong&gt;someone&lt;/strong&gt;, I just know that it isn&apos;t for me.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://glitch.com/~turn-off-retweets&quot;&gt;Disable all Retweets.&lt;/a&gt;&lt;/strong&gt; I can&apos;t recommend this enough. One of the things that has kept me on the platform has been the ability to read things by the people I follow. When retweets were added, it seemed good, but some of my favorite tweeters are prolific and indiscriminate retweeters, which can make for a feed that&apos;s unpredictably filled with angry content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lists.&lt;/strong&gt; I feel like this feature isn&apos;t well-promoted in the app for how good it is. Private, pinned lists (named with emoji characters, of course) let you greatly expand the content you&apos;ll see without polluting your main timeline.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Never tweet.&lt;/strong&gt; I&apos;m lifting this advice directly from my colleague Keith. Unless you&apos;re a journalist, a marketer, or otherwise earn a living from shitposting, the best possible way to use Twitter is to never tweet under any circumstances.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Links Blog</title><link>https://sambreed.dev/writing/2022/links-part-one.html</link><guid isPermaLink="true">https://sambreed.dev/writing/2022/links-part-one.html</guid><description>Links! more links to things I&apos;ve had open</description><pubDate>Wed, 13 Jul 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;another link dump, some of these have been open for months and need to be closed or forgotten. It&apos;s healthy to pay down the tab debt at least once a quarter.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://meteor10.sachagreif.com/&quot;&gt;10 Years of Meteor&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;meteor had some good parts but missed the mark on several. I didn&apos;t care for meteor at the time, but did go on to use Apollo GraphQL heavily at Credit Karma. It was ok, but perhaps overly complicated.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sidebar.io/&quot;&gt;Sidebar&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;linked from the meteor piece, it&apos;s a daily link aggregator&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.miriamsuzanne.com/2022/07/04/body-margin-8px/&quot;&gt;Body Margin 8px | Miriam Eric Suzanne&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;a few too many words on the history of browser resets, specifically the 8px body margin&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/supabase-community/auth-helpers/tree/main/packages/nextjs?utm_medium=email&amp;#x26;_hsmi=218642387&amp;#x26;utm_content=218642387&amp;#x26;utm_source=hs_email#migrating-from-supabasesupabase-auth-helpers-to-supabaseauth-helpers&quot;&gt;auth-helpers/packages/nextjs at main · supabase-community/auth-helpers&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;supabase might have finally fixed their auth? I need to update this in [redacted]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://frontendmastery.com/posts/the-new-wave-of-react-state-management/&quot;&gt;The new wave of React state management&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;everything is new, again. this time it&apos;s state management, because flow was fucked and redux is too repetitive, so we need more of these.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pmndrs/zustand&quot;&gt;pmndrs/zustand: 🐻 Bear necessities for state management in React&lt;/a&gt; looks cool though&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/titzer/virgil/blob/master/doc/tutorial/Overview.md&quot;&gt;virgil/Overview.md at master · titzer/virgil&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;[redacted] has been designing a programming language, so I collected this to send to him&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ai.googleblog.com/2022/06/minerva-solving-quantitative-reasoning.html&quot;&gt;Google AI Blog: Minerva: Solving Quantitative Reasoning Problems with Language Models&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;more AI research for the pile.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://architecturenotes.co/things-you-should-know-about-databases/&quot;&gt;Things You Should Know About Databases&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I can&apos;t produce this knowledge a priori, but this tread over territory I was already familiar with from reading Martin Kleppmann&apos;s Warthog book. (Everyone should read the Warthog book.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/multiprocessio/datastation&quot;&gt;multiprocessio/datastation: App to easily query, script, and visualize data from every database, file, and API.&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;another notebook alternative. under-designed imo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tailscale.com/&quot;&gt;Tailscale · Best VPN Service for Secure Networks&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;[redacted] is using this. But does look interesting, trad-VPN is so wasteful&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://til.simonwillison.net/sqlite/one-line-csv-operations&quot;&gt;One-liner for running queries against CSV files with SQLite | Simon Willison’s TILs&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;stoopid sqlite tricks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://addyosmani.com/blog/software-engineering-soft-parts/&quot;&gt;AddyOsmani.com - Software Engineering - The Soft Parts&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;thoughtful post from Addy about being a human who also works with other humans and also computers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gabe.pizza/notes-on-component-libraries/&quot;&gt;Notes on maintaining an internal React component library | Gabe&apos;s blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://macro-ops.com/the-bill-gurley-chronicles-an-above-the-crowd-mba-on-vcs-marketplaces-and-early-stage-investing/&quot;&gt;The Bill Gurley Chronicles: VCs, Marketplaces, and Early-Stage Investing&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;This might be the single most informative blog post I have ever read. It summarizes 20 years of Bill Gurley&apos;s blog, which is just nugget after interesting nugget of shrewd analysis and galaxy-brain predictions that were more accurate than not.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://tylergaw.com/blog/css-repeating-svg-masks/&quot;&gt;CSS: Flexible Repeating SVG Masks&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;[redacted] designed me something like this for &lt;a href=&quot;https://webrtc.party/&quot;&gt;WebRTC.party&lt;/a&gt; and I did my own half-baked version and then found this post. For next time.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fly.io/blog/all-in-on-sqlite-litestream/&quot;&gt;I&apos;m All-In on Server-Side SQLite · Fly&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;more SQLite hype&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.worksinprogress.co/issue/local-warming/&quot;&gt;Local warming - Works in Progress&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I like the design. The content didn&apos;t stick with me, but the design did.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.quantamagazine.org/elegant-six-page-proof-reveals-the-emergence-of-random-structure-20220425/&quot;&gt;Elegant Six-Page Proof Reveals the Emergence of Random Structure | Quanta Magazine&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I always save the tab on this genre Math shit after I read half of it and move onto something else. I long for the timeline where I studied a bit harder and got the muscle memory worn into me to fully understand this realm instead of feeling like a lost child.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://news.ycombinator.com/item?id=31060362&quot;&gt;How to write more clearly, think more clearly, and learn complex material&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://freakingrectangle.wordpress.com/2022/04/15/how-to-freaking-hire-great-developers/&quot;&gt;How to Freaking Find Great Developers By Having Them Read Code | Freaking Rectangle&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Lotsa people opine on how to do interviews, or otherwise bemoan the modern leetcode-style panel interview, but this is a novel hot take. Analyzing is better than synthesizing.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://css-tricks.com/send-an-http-request-on-page-exit/&quot;&gt;Reliably Send an HTTP Request as a User Leaves a Page | CSS-Tricks - CSS-Tricks&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Still hard to do! There&apos;s a built-in &lt;code&gt;ping&lt;/code&gt; attribute on the anchor tag, but Firefox doesn&apos;t support it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://logicmag.io/clouds/agile-and-the-long-crisis-of-software/&quot;&gt;Agile and the Long Crisis of Software&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;my favorite dead horse to beat: discourse on project management techniques! though this is a good history, the subject is fraught. It&apos;s a distraction from building.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://aeon.co/ideas/what-i-learned-as-a-hired-consultant-for-autodidact-physicists&quot;&gt;What I learned as a hired consultant for autodidact physicists | Aeon Ideas&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;good germ of a story here&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://robert.kra.hn/posts/2022-04-03_rust-web-wasm/&quot;&gt;A Rust web server / frontend setup like it&apos;s 2022 (with axum and yew) | Robert Krahn&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I deeply, deeply want to write Rust but feel like I can&apos;t ever afford to slow down and suffer through the learning curve. I just end up writing JavaScript (TypeScript).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://coda.io/@lshackleton/two-way-writeups-coda-s-secret-to-shipping-fast&quot;&gt;Two-way writeups: Coda’s secret to shipping fast&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;hey look, more discourse on project management techniques! this is good though, coda makes good tools&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cult.st/recipes/mapo-tofu&quot;&gt;Mapo Tofu | Cult Favorite&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I want to cook this!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cult.st/recipes/sichuanish-celery&quot;&gt;Sichuan(ish) Celery | Cult Favorite&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I want to cook this too!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://queue.acm.org/detail.cfm?id=3454124&quot;&gt;The SPACE of Developer Productivity - ACM Queue&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;yet another piece adjacent to project management discourse. this time a framework to measure developer productivity. I discussed this with Sean in 2016/17 as being a multi-dimensional gradient descent problem.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nadia.xyz/idea-machines&quot;&gt;Nadia Asparouhova | Idea machines&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&quot;effective altruism&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gist.github.com/mohanpedala/1e2ff5661761d3abd0385e8223e16425&quot;&gt;set -e, -u, -o, -x pipefail explanation&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;I don&apos;t write bash as regularly as I used to (thank god) and I can never remember which of these I need to do. Bash is the pits.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>16 open tabs</title><link>https://sambreed.dev/writing/16-open-tabs.html</link><guid isPermaLink="true">https://sambreed.dev/writing/16-open-tabs.html</guid><description>I have 16 open browser tabs RIGHT NOW</description><pubDate>Mon, 12 Aug 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Right now, I have 16 open tabs in my browser.&lt;/p&gt;
&lt;p&gt;By all measures, this is not a lot of tabs. I see people at work that have tab stacks so dense only a single pixel rendering the faintest sliver of each tab. Or multiple windows, 6 or 7 layers deep, each with 10 tabs or more, the tab bar taking up the full width of the screen. I try and do better than that.&lt;/p&gt;
&lt;p&gt;I like to treat my work environment with a little more respect by closing things down at the beginning or end of each day, or at very least once a week.&lt;/p&gt;
&lt;p&gt;So that leaves my pc at home. That&apos;s where the tabs pile up, unread and unwanted, for weeks on end. I come back to them every day, occasionally adding to them, and sometimes nuking the whole session altogether.&lt;/p&gt;
&lt;p&gt;But on any given day I have an accretion of internet detritus to ponder over. It was Jorge Luis Borges who said that reading is a more intellectual activity than writing; I never read most of them.&lt;/p&gt;
&lt;p&gt;Here is the (annotated) list of tabs I currently have open:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://pinboard.in/popular/&quot;&gt;Pinboard: popular bookmarks&lt;/a&gt; - I usually have this one open. It&apos;s replaced &lt;a href=&quot;http://n-gate.com/hackernews/&quot;&gt;the orange website&lt;/a&gt; and reddit for me. I don&apos;t bookmark very many things these days but I like the format of &quot;a whole bunch of links&quot; to peruse&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://web.dev/native-lazy-loading&quot;&gt;Native lazy-loading for the web  |  web.dev&lt;/a&gt; - haven&apos;t read this yet, sounds like I&apos;ll get to continue not writing lazy image loading code and get the whole thing backfilled for me by browser vendors&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://danshipper.com/nothing-happens-until-the-sale-is-made&quot;&gt;How to get your first 10 customers&lt;/a&gt; - a link from pinboard I kinda looked at and moved on from&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cheats.rs/&quot;&gt;Rust Language Cheat Sheet&lt;/a&gt; - I bought the Rust book a few months ago and will use it in future projects, so this seems like a keeper&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ben-evans.com/benedictevans/2019/7/31/Netflix&quot;&gt;Netflix is not a tech company — Benedict Evans&lt;/a&gt; - in general, I try to avoid thought leaders like Ben Evans, with the exception of him specifically, to be taken with a healthy amount of salt&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.empathybox.com/post/19574936361/getting-real-about-distributed-system-reliability&quot;&gt;Getting Real About Distributed System Reliability - Jay Kreps&lt;/a&gt; - I haven&apos;t read this yet. I like horror stories about hard problems that involve lots of computers.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://standardebooks.org/ebooks/aristotle/nicomachean-ethics/f-h-peters&quot;&gt;Nicomachean Ethics, by Aristotle. Translated by F. H. Peters - Standard Ebooks: Free and liberated ebooks, carefully produced for the true book lover.&lt;/a&gt; - Nassim Nicholas Taleb turned me on to NICOMACHEAN ETHICS and it&apos;s some heavy shit. This is a free ebook version that&apos;s not completely fucked.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thereader.mitpress.mit.edu/umberto-eco-how-to-write-a-thesis/&quot;&gt;How to Write a Thesis, According to Umberto Eco | The MIT Press Reader&lt;/a&gt; - big ups to Umberto Eco, whom I&apos;m totally down with. FOUCAULT&apos;S PENDULUM is a great read, as is his collection of essays, TRAVELS IN HYPERREALITY&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://craigmod.com/essays/fast_software/&quot;&gt;Fast Software, the Best Software — by Craig Mod&lt;/a&gt; - this is a name I recognize and might be interesting. Skimmed the title and opened the tab.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://begriffs.com/posts/2019-07-19-history-use-vim.html&quot;&gt;History and effective use of Vim&lt;/a&gt; - heavy nerd shit. An internet wrote about vim, nerds will read this and nitpick and drool.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://patrickcollison.com/bookshelf&quot;&gt;Bookshelf · Patrick Collison&lt;/a&gt; - one of the brothers Stripe has a bookshelf that&apos;s ridiculously intimidating and also somewhat ridiculous. Stripe Press is dope thought&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kottke.org/19/06/daft-punk-live-dj-sets-from-the-90s&quot;&gt;Daft Punk Live DJ Sets from the 90s&lt;/a&gt; - babby boomer blogger discovers old daft punk; I&apos;ve had this one open for weeks&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.defmacro.org/2019/03/26/startup-checklist.html&quot;&gt;Startup idea checklist | defmacro&lt;/a&gt; - an (famous) internet has a do&apos;s / dont&apos;s list but like for startup ideas; who cares but it&apos;s probably worth consulting&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@bgalbs/sixteen-years-of-listening-my-audible-favorites-dc7386737cc5&quot;&gt;Sixteen Years of Listening: My Audible Favorites - Ben Galbraith - Medium&lt;/a&gt; - sick list of good audiobooks, for which I am a fiend. I plan on putting together a similar (running) list of my favorite because this is a good idea for a post, and exhibits demonstrably better curation than Audible ever has&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://thenewstack.io/observability-a-3-year-retrospective/&quot;&gt;Observability — A 3-Year Retrospective - The New Stack&lt;/a&gt; - recommended by a colleague, to read&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ogn.theonion.com/nintendo-never-should-have-pandered-to-women-and-create-1837027540&quot;&gt;Nintendo Never Should Have Pandered To Women And Created A Female Mario&lt;/a&gt; - satire from THE ONION surfaced to me by THE FACEBOOK&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Books I&apos;m reading</title><link>https://sambreed.dev/writing/books.html</link><guid isPermaLink="true">https://sambreed.dev/writing/books.html</guid><description>A non-exhaustive list of the books I&apos;m reading in &lt;year&gt;</description><pubDate>Mon, 28 May 2018 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Books, continued&lt;/h1&gt;
&lt;p&gt;Keeping reading lists year-over-year has been fun. This year felt a bit different. I was still reading a couple of holdovers from my 2017 list and simply didn&apos;t have the energy to create a new post for 2018. It felt unsustainable, like I was forcing it. So instead I&apos;m following the lead of other smart folks who keep a single running list.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Currently&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/gp/product/198481981X&quot;&gt;Incerto&lt;/a&gt; by Nassim Nicholas Taleb. A hardcover edition of 5 books that I already own. Taleb is one of a few writers good enough to buy multiple copies of when better editions come out. This is an excellent priting.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/dp/1732265186&quot;&gt;An Elegant Puzzle: Systems of Engineering Management&lt;/a&gt; by Will Larson. Published by Stripe Press. This is a beautiful book.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/840013131&quot;&gt;The Timeless Way of Building&lt;/a&gt; by Christoper Alexander. I never really put this one down from last year, the clarity of language and thought is unmatched. I foresee myself deep-reading (and re-reading) this for a long, long time.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/216941696&quot;&gt;2666&lt;/a&gt; by Roberto Bolaño. Keep at least one fiction book going at all times; the longer, the better. Started after finishing 100 Years of Solitude, staying on the theme of english translations of spanish lit.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/747193445&quot;&gt;The Wind-up Bird Chronicle&lt;/a&gt; by Haruki Murakami&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;2019&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/dp/0812988191&quot;&gt;Good Morning, Midnight&lt;/a&gt; by Lily Brooks-Dalton&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/dp/1982113472&quot;&gt;Every Tool&apos;s a Hammer: Life Is What You Make It&lt;/a&gt; by Adam Savage&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/gp/product/0735220174&quot;&gt;Black Leopard Red Wolf&lt;/a&gt; by Marlon James&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/dp/0553447238&quot;&gt;Makers and Takers&lt;/a&gt; by Rana Foroohar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/dp/1780992262&quot;&gt;Ghosts of My Life&lt;/a&gt; by Mark Fisher&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;2018&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/1030241785&quot;&gt;Bullshit Jobs&lt;/a&gt; by David Graeber&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/41071867&quot;&gt;The Workbench Book&lt;/a&gt; by Scott Landis and &lt;a href=&quot;http://www.worldcat.org/oclc/973537637&quot;&gt;Best Workbenches&lt;/a&gt; by the Editors of Fine Woodworking. I&apos;ve taken on woodworking/joinery as hobby over the past year or so and a mentor recommended my next project be a cabinetmaker&apos;s workbench.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/1027035134&quot;&gt;Skin in the Game&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/nntaleb&quot;&gt;Nassim Nicholas Taleb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/881869530&quot;&gt;100 Years of Solitude&lt;/a&gt; by Gabriel García Márquez&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/932001597&quot;&gt;NeuroTribes&lt;/a&gt; by Steve Silberman&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/884955043&quot;&gt;Lao Tzu: Tao Te Ching&lt;/a&gt; translation by Urula K Le Guin&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/1012127153&quot;&gt;The Lathe of Heaven&lt;/a&gt; by Ursula K Le Guin&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/1027559077&quot;&gt;They Can&apos;t Kill Us Until They Kill Us&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/NifMuhammad&quot;&gt;Hanif Abdurraqib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/24467494&quot;&gt;Pale Fire&lt;/a&gt; by Vladimir Nabokov&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Upcoming&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/670128324&quot;&gt;The Time Machine Did It&lt;/a&gt; by John Swartzwelder&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/854809464&quot;&gt;Midnight&apos;s Children&lt;/a&gt; by Salaman Rushdie&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/930928743&quot;&gt;Underworld&lt;/a&gt; by Don DeLillo&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/889324546&quot;&gt;City of God&lt;/a&gt; by E.L. Doctorow&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Technophilia&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/dp/B07GBCX7YC&quot;&gt;The Dream Machine&lt;/a&gt; by M. Mitchell Waldrop&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/436030574&quot;&gt;Cryptography Engineering: Design Principles and Practical Applications&lt;/a&gt; by Nies Ferguson, Bruce Schneier, and Tadayoshi Kohno&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/951650600&quot;&gt;Code Complete 2&lt;/a&gt; by Steve McConnell&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/995161733&quot;&gt;Programming Beyond Practices&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/practicingdev&quot;&gt;Gregory T. Brown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.worldcat.org/oclc/981929715&quot;&gt;SVG Animations&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/sarah_edo&quot;&gt;Sarah Drasner&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>2017 Reading List</title><link>https://sambreed.dev/writing/2017-reading-list.html</link><guid isPermaLink="true">https://sambreed.dev/writing/2017-reading-list.html</guid><description>A non-exhaustive list of the books I&apos;m reading in 2017</description><pubDate>Sun, 31 Dec 2017 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;2017 Reading List&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/930828718&quot;&gt;Digital Gold&lt;/a&gt; – Nathaniel Popper&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/949639536&quot;&gt;Bed of Procrustes&lt;/a&gt; – Nassim Taleb&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/960457556&quot;&gt;Machine Learning&lt;/a&gt; – Ethem Alpaydin&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://www.worldcat.org/oclc/868280617&quot;&gt;Mathematics and the Imagination&lt;/a&gt; – Edward Kasner and James Newman&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/989979099&quot;&gt;Snow Crash&lt;/a&gt; – Neil Stephenson&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/699737863&quot;&gt;Capitalist Realism&lt;/a&gt; – Mark Fisher&lt;/li&gt;
&lt;li&gt;[ ] ~~&lt;a href=&quot;http://www.worldcat.org/oclc/957021213&quot;&gt;Being a Beast : adventures across the species divide&lt;/a&gt; – Charles Foster~~&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/950976674&quot;&gt;On the Move&lt;/a&gt; – Oliver Sacks&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://www.worldcat.org/oclc/468447420&quot;&gt;The Open Society &amp;#x26; Its Enemies&lt;/a&gt; – Karl Popper&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/982257490&quot;&gt;Neuroplasticity&lt;/a&gt; – Moheb Costandi&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/817924069&quot;&gt;Universe of Consciousness&lt;/a&gt; – Gerald M Edelman &amp;#x26; Giulio Tononi&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/962005553&quot;&gt;On Trails&lt;/a&gt; – Robert Moor&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/900727970&quot;&gt;Lawrence in Arabia&lt;/a&gt; – Scott Anderson&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://www.worldcat.org/oclc/989503369&quot;&gt;Americanah&lt;/a&gt; – Chimamanda Ngozi Adichie&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/966392652&quot;&gt;Time Travel&lt;/a&gt; – James Gleick&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/964793272&quot;&gt;Hallucinations&lt;/a&gt; – Oliver Sacks&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://www.worldcat.org/oclc/981550824&quot;&gt;The Handmaid’s Tale&lt;/a&gt; – Margaret Atwood&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/695702570&quot;&gt;The Origin of Wealth&lt;/a&gt; – Eric D. Beinhocker&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/51998481&quot;&gt;Real Estate Investing Loopholes&lt;/a&gt; – Diane Kennedy and Garret Sutton&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/951153646&quot;&gt;A Random Walk Down Wall Street&lt;/a&gt; – Burton G. Malkiel&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/949639536&quot;&gt;Antifragile&lt;/a&gt; – Nassim Taleb (re-read from 2016&apos;s list)&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/925332622&quot;&gt;Debugging Teams&lt;/a&gt; – Brian W. Fitzpatrick and Ben Collins-Sussman&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://www.worldcat.org/oclc/989085713&quot;&gt;Hands-On Machine Learning with Scikit-Learn &amp;#x26; TensorFlow&lt;/a&gt; – Aurélien Géron&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/992492753&quot;&gt;Tragic Design&lt;/a&gt; – Jonathan Shariat and Cynthia Savard Saucier&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://www.worldcat.org/oclc/248444643&quot;&gt;Barbarians at the Gate&lt;/a&gt; – Bryan Burrough abd John Helyar&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/717738730&quot;&gt;Orientalism&lt;/a&gt; – Edward W Said&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/981123286&quot;&gt;How Money Got Free&lt;/a&gt; – Brian Patrick Eha&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/945232398&quot;&gt;Why Information Grows&lt;/a&gt; – César Hildago&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/615926697&quot;&gt;Hackers&lt;/a&gt; – Steven Levy&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://www.worldcat.org/oclc/750541259&quot;&gt;Gödel, Escher, Bach: an Eternal Golden Braid&lt;/a&gt; – Douglas R. Hofstadter&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/695866330&quot;&gt;The Cathedral and the Bazaar&lt;/a&gt; – Eric S. Raymond&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/946058566&quot;&gt;Dune&lt;/a&gt; – Frank Herbert&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/72799929&quot;&gt;Decoding the Universe&lt;/a&gt; – Charles Seife&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;https://www.worldcat.org/oclc/926699676&quot;&gt;Code&lt;/a&gt; – Charles Petzold&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/934422966&quot;&gt;The Soul of a New Machine&lt;/a&gt; – Tracy Kidder&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;https://www.worldcat.org/oclc/864772458&quot;&gt;Payback&lt;/a&gt; – Margaret Atwood&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/1003168303&quot;&gt;We Were 8 Years in Power&lt;/a&gt; – Ta-Nehisi Coates&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://www.worldcat.org/oclc/64685014&quot;&gt;One Hundred Years of Solitude&lt;/a&gt; – Gabriel Garcia Márquez&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/971922979&quot;&gt;I Contain Multitudes&lt;/a&gt; – Ed Young&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;https://www.worldcat.org/oclc/778420584&quot;&gt;Mean Genes&lt;/a&gt; – Terry Burnham and Jay Phelan&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/944380361&quot;&gt;The Wisest One in the Room&lt;/a&gt; – Thomas Gilovich and Lee Ross&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://www.worldcat.org/oclc/840013131&quot;&gt;The Timeless Way of Building&lt;/a&gt; – Christopher Alexander&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/943261694&quot;&gt;Creativity, Inc.&lt;/a&gt; – Ed Catmull&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://www.worldcat.org/oclc/846915197&quot;&gt;Still Life With Woodpecker&lt;/a&gt; – Tom Robbins&lt;/li&gt;
&lt;li&gt;[x] &lt;a href=&quot;http://www.worldcat.org/oclc/913844897&quot;&gt;Philip K. Dick: The Last Interview&lt;/a&gt; – Philip K. Dick&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;~~Strikethrough~~ &lt;em&gt;Abandoned and back on the shelf&lt;/em&gt; 🙅‍&lt;/li&gt;
&lt;li&gt; In Progress 🙇&lt;/li&gt;
&lt;li&gt; Finished! 💁‍&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>2007</title><link>https://sambreed.dev/writing/2007.html</link><guid isPermaLink="true">https://sambreed.dev/writing/2007.html</guid><description>In 2007 I had no job, no insurance, and was in debt. But it was still a good year.</description><pubDate>Wed, 16 Aug 2017 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;2007&lt;/h1&gt;
&lt;p&gt;In January of 2007 I was 20 years old.&lt;/p&gt;
&lt;p&gt;I had no job.&lt;/p&gt;
&lt;p&gt;I could no longer afford to pay for college and simultaneously failed out.&lt;/p&gt;
&lt;p&gt;Then I got a D.U.I.&lt;/p&gt;
&lt;p&gt;Then I wrecked my car.&lt;/p&gt;
&lt;p&gt;With no license. And no insurance. And in an accident with another vehicle. I had to beg my brother to loan me money to fix the other car. Meanwhile, my car sat unmoving and wrecked, collecting parking tickets until I sold it, as is, for next to nothing.&lt;/p&gt;
&lt;p&gt;When I did get a job, it only paid $9 an hour. For 32 hours a week. Technically part time.&lt;/p&gt;
&lt;p&gt;In 2007 I didn&apos;t have health insurance. In January, I had a three day fever and my tonsils were swollen enough to justify visit to the Emergency Room without health insurance. I watched Prince&apos;s infamous Super Bowl halftime show in the ER waiting room.&lt;/p&gt;
&lt;p&gt;It would be three years before I would pay the bill for the hospital trip that night, which would ruin my credit and follow me for years afterwards.&lt;/p&gt;
&lt;p&gt;In 2007 I owed the University of Colorado $12,000. The tuition for the semester that I didn&apos;t finish. Eventually, it sent to collections, which I ignored while it accrued 20% annual interest for four years.&lt;/p&gt;
&lt;p&gt;In 2007, my girlfriend and I became very good at grocery store math, because having to put stuff back after it was rung up was mortifying. A year earlier I had been living off a trust fund; the payments had stopped that winter.&lt;/p&gt;
&lt;p&gt;2007 was the worst year of my life.&lt;/p&gt;
&lt;p&gt;But it was also one of the best.&lt;/p&gt;
&lt;p&gt;2007 was the year I moved in with my then-girlfriend (and now-wife.)&lt;/p&gt;
&lt;p&gt;I got promoted to assistant manager at the retail job. My pay was raised to $11 an hour, and I would get 36 hours a week on the schedule. That extra $108 a week was a lot of money. It meant less math at the grocery store.&lt;/p&gt;
&lt;p&gt;My wife and I adopted a beat up little shelter dog that winter and named him Jack. He&apos;s still here, but now he&apos;s old and cranky after 10 years of being doted on and loved unconditionally.&lt;/p&gt;
&lt;p&gt;2007 was the year I started riding a bike (at first for transportation, then for fun) and picked up skateboarding again (for fun, then transportation.)&lt;/p&gt;
&lt;p&gt;2007 was the year I started taking any job on any film shoot I could find that would take me. Most of them were unpaid, on the hope of paid gigs in the future.&lt;/p&gt;
&lt;p&gt;And 2007 was the year I started to code.&lt;/p&gt;
&lt;p&gt;I used the money from selling the car to buy a white plastic MacBook. My PowerBook from college had finally died that fall. I remember tracking the shipment from the pc in the back office at work and racing home on my bike during my lunch so the package wouldn&apos;t get stolen.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It was the first computer I would get paid to write code on.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I was so excited to get that computer. I used it to climb out of debt and into a career I love. In 2007 I would write my first website and re-discover the love of building stuff on the internet that I had honed a decade earlier on Geocities and Tripod and Angelfire (and later, MySpace profiles.)&lt;/p&gt;
&lt;p&gt;That year I listened to MGMT, Peter, Bjorn and John, and Kanye West. I can remember riding my bike to those albums as fall in Boulder started to turn cold.&lt;/p&gt;
&lt;h2&gt;2008&lt;/h2&gt;
&lt;p&gt;Across town, TechStars was hosting its first class. A year later one of those companies would be acquired by AOL for seven figures. One night at a local meetup the founder of that company, who was only a year or two older than me, ended his presentation by throwing $500 in singles into the air. For him, it must have been a moment of jubilant celebration, but I don&apos;t remember the point I was trying to make. From the back row of the auidence, as a 22 year old college drop-out still working in retail and trying to get in to the Boulder tech community, I only remember the hot pang of shame and regret for not being &quot;in&quot; already. For not having $500 to throw in the air.&lt;/p&gt;
&lt;p&gt;That guy is still around and I still hate him for doing that. It made me feel so worthless in that moment. I didn&apos;t have a job in tech yet, despite wanting one, and was only slightly better off than I had been a year earlier. And here comes some jerkoff that was first given money for a fucking &lt;em&gt;idea&lt;/em&gt; and then turned around and &lt;em&gt;sold&lt;/em&gt; it for even more money! &lt;em&gt;Why couldn&apos;t I do that?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A year earlier I was excited to get a raise for less money than he just threw on the ground.&lt;/p&gt;
&lt;p&gt;That night fueled my resolve to work as hard as I could to never feel that way again. Poor and put out. An outsider looking in. And it gave me a model of something I never wanted to do.&lt;/p&gt;
&lt;p&gt;I saw a tweet from that guy today. It got me thinking about that night and the terribly un-fun year before it. The funny thing is that he doesn&apos;t even know me. But he pissed me off so badly a decade ago that I&apos;m still stewing about it now.&lt;/p&gt;
&lt;p&gt;But that night wasn&apos;t all bad.&lt;/p&gt;
&lt;p&gt;That was also the night I would meet &lt;a href=&quot;https://twitter.com/electromute&quot;&gt;Ingrid&lt;/a&gt;, who would eventually be my co-founder at Quick Left. But we wouldn&apos;t know that for another year. We just hung out and talked about bikes and software.&lt;/p&gt;
&lt;p&gt;And maybe I owe something to the guy who threw the money after all. After that I started hustling for web design jobs on Craigslist and less than a year later I would have a full time job. That job turned into Quick Left, a company that I would become a founder of and lead for 6 years.&lt;/p&gt;
&lt;p&gt;2007 and 2008 were when I started to read a lot of science fiction.&lt;/p&gt;
&lt;p&gt;The second retail job had me unpacking boxes, lots of boxes, in the back of an American Apparel. I listened to Isaac Asimov and Robert Heinlein for the first time back there. I would fold t-shirts thinking about Psychohistory and the Seldon Plan.&lt;/p&gt;
&lt;p&gt;I found a used bookstore that my girlfriend and I would ride our bikes to, our backpacks bulging with paperbacks on the way home. Science Fiction was a great way to escape my broke-and-scary Non Fiction reality.&lt;/p&gt;
&lt;p&gt;Then I fell hard for the work of Philip K. Dick. &lt;em&gt;A Scanner Darkly&lt;/em&gt; had been made into a movie by Richard Linklater the year before. A well-adapted and underrated movie, it&apos;s still one of my favorites. I listened to the audiobook version, recorded by Paul Giamatti, and then devoured the paperback.&lt;/p&gt;
&lt;p&gt;I was so desperate to have a copy but I couldn&apos;t wait for a copy to show up at the used bookstore, so I condescended to buy it new from Borders. The only copy at Borders was the kind with the movie poster on it, the type that &lt;em&gt;everyone&lt;/em&gt; hates on because it&apos;s the most backwards type of marketing, and never lasts for more than one edition. The one way you can make a good book less good is by forever shackling it to the most recent film adaptation. If the book has something to gain via association with the movie adaptation, you can safely skip the book.&lt;/p&gt;
&lt;p&gt;I still have that copy of &lt;em&gt;A Scanner Darkly&lt;/em&gt;, with Keanu and Winona and pre-Iron Man Robert Downey Jr. on the cover. I hate the cover, but I love the book so I can&apos;t get rid of it.&lt;/p&gt;
&lt;p&gt;The text inside is too good.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;But in this dark world where he now dwelt, ugly things and surprising things and once in a long while a tiny wondrous thing spilled out at him constantly; he could count on nothing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Good things and bad things can happen in startlingly close proximity. 2007 was a &quot;bad&quot; year, but I wouldn&apos;t trade any of the lessons it taught me.&lt;/p&gt;</content:encoded></item><item><title>How to Make a Static Website with Next.js</title><link>https://sambreed.dev/writing/static-sites-with-next-js.html</link><guid isPermaLink="true">https://sambreed.dev/writing/static-sites-with-next-js.html</guid><description>I recently used Next.js 3 to make a static blog. Learn how I did it!</description><pubDate>Tue, 15 Aug 2017 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;How to Make a Static Website with Next.js&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;/img/next-blog-1.gif&quot; alt=&quot;make a static next.js blog&quot;&gt;&lt;/p&gt;
&lt;p&gt;👋 Hey, so I recently figured out how to upgrade &lt;em&gt;this very website&lt;/em&gt; to use &lt;a href=&quot;https://github.com/zeit/next.js&quot;&gt;Next.js 3&lt;/a&gt; as a static blog engine. No longer is my corner of the internet a cobbled-together mess of node and of shell scripts. No, now it&apos;s a fully-fledged modern JavaScript app with &lt;a href=&quot;https://github.com/zeit/next.js&quot;&gt;Next.js 3&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Now I can write and edit posts in Markdown and can even drop in custom HTML if I need to (I mean how else am I gonna incorporate &lt;code&gt;&amp;#x3C;marquee&gt;&lt;/code&gt; tags into my writing?). With &lt;a href=&quot;https://github.com/zeit/next.js&quot;&gt;Next.js&lt;/a&gt;, I get all sorts of fancy features like service worker prefetch, code splitting, and SPA style route changes–all for free. &lt;em&gt;Here&apos;s how I did it.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://zeit.co/blog/next3&quot;&gt;If you haven&apos;t heard of Next.js it&apos;s a pretty cool, live reloading, totally-out-of-your-way tool for building webapps with React. You should use it.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As soon as the Zeit team announced plans to support serverless static exports, I was ready to go: I had already tried out Next.js for a few side projects, but didn&apos;t want to worry about running a server (even if it&apos;s free and painless) to keep my website up. I even tried scraping a compiled Next.js 2 app with &lt;code&gt;wget&lt;/code&gt; to make a static site, so Next&apos;s official support for static sites had me running out of excuses.&lt;/p&gt;
&lt;p&gt;Here were my requirements for my humble website:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fully static and deployable on Github pages.&lt;/li&gt;
&lt;li&gt;Author posts in Markdown, with support for HTML things like &lt;code&gt;&amp;#x3C;details&gt;&lt;/code&gt; tags.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Fast.&lt;/em&gt; Nobody&apos;s got time for slow websites.&lt;/li&gt;
&lt;li&gt;Support my CSS preferences: &lt;a href=&quot;http://tachyons.io/&quot;&gt;Tachyons&lt;/a&gt; and some custom CSS compiled with &lt;a href=&quot;http://postcss.org/&quot;&gt;postcss&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next.js seems to have checked off all my boxes, so I dug in and started prototyping.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;Plan to throw one away; you will, anyhow&quot;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/wookiehangover/wookie-next&quot;&gt;I built a prototype on the Next.js 3 beta&lt;/a&gt; to kick the tires. I learned a few things along the way but didn&apos;t end up with a website that was ready to deploy.&lt;/p&gt;
&lt;p&gt;Too bad I wasn&apos;t very happy with my first pass. I added a necessary-but-clunky build step to convert my old posts to Next&apos;s routing model. The plan was to compile my markdown posts and write out files to the &lt;code&gt;pages/&lt;/code&gt; directory. Next.js would pick them up whenever they changed, but I didn&apos;t like having to run two build scripts.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Next&apos;s biggest selling point is having live reloading figured out already!&lt;/em&gt; Having to run more than one script felt wrong, so I abandoned the prototype.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Every good work of software starts by scratching a developer&apos;s personal itch.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;🐰 Rabbit Hole: React from HTML Markdown&lt;/h3&gt;
&lt;p&gt;One of the itches I &lt;em&gt;really&lt;/em&gt; wanted to scratch was the minor annoyance of having to use &lt;code&gt;__dangerouslySetInnerHtml&lt;/code&gt; to use most off-the-shelf markdown libraries with React. I even made it a bit harder on myself by lazily abusing markdown and sprinkling bits of markup in many of my posts, since most React components that render markdown tend to fall back to &lt;em&gt;dangerouslySet&lt;/em&gt; instead of parsing the markdown to generate a valid React component for the entire markdown document. This isn&apos;t a new or unsolved problem, so I did some research and ended up geeking out on text processing and abstract syntax trees. Turns out that there are already a bunch of well documented AST parser/compilers that support markdown on npm!&lt;/p&gt;
&lt;p&gt;I really didn&apos;t want to make clients do any of the parsing work. Even though parsing markdown can be optimized to be fast in modern browsers, making users download additional JavaScript and spend CPU time to convert posts clientside just didn&apos;t sit well with me.&lt;/p&gt;
&lt;p&gt;I decided that in order to handle all of my posts with their mix of markdown and html, I would use &lt;a href=&quot;https://unifiedjs.github.io/&quot;&gt;Unified&lt;/a&gt; to make a rendering pipeline to go from markdown to HTML to a set of React components. There were already unified plugins for everything I wanted to do!&lt;/p&gt;
&lt;p&gt;There was even a &lt;a href=&quot;https://github.com/mapbox/remark-react&quot;&gt;ready-made solution for my exact gripe about &lt;code&gt;__dangerouslySetInnerHtml&lt;/code&gt;&lt;/a&gt;! Unfortunately, remark-react handles &lt;em&gt;most&lt;/em&gt; cases but didn&apos;t want to parse the raw HTMl generously sprinkled throughout my posts. Either way, I had found a small ecosystem of node modules that would make short work of lots of text processing problems. Neat!&lt;/p&gt;
&lt;p&gt;Here&apos;s what the code ended up looking like:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;const unified = require(&quot;unified&quot;);

unified()
	.use(require(&quot;remark-parse&quot;), {
		gfm: true,
		footnotes: true,
	})
	.use(require(&quot;remark-rehype&quot;), {
		allowDangerousHTML: true,
	})
	.use(require(&quot;rehype-raw&quot;))
	.use(require(&quot;rehype-react&quot;));
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To my surprise and delight, that process pipeline resulted in a totally usable React component! But it still would require some redundant processing on the client since the React component was being generated dynamically from a string of markdown.&lt;/p&gt;
&lt;p&gt;So how do you &lt;em&gt;cache&lt;/em&gt; a React component? Like, a whole component, not just the serialization of it&apos;s virtual dom. React provides tools to server render components in multiple ways, but you can&apos;t easily generate &lt;em&gt;jsx&lt;/em&gt; from a dynamically generated components. But there &lt;em&gt;is&lt;/em&gt; a technique for dealing with a React as a compile output of an AST, evidenced by &lt;a href=&quot;https://github.com/rhysd/rehype-react&quot;&gt;react-rehype&lt;/a&gt; at the end of that Unified markdown pipeline.&lt;/p&gt;
&lt;p&gt;React has a dead simple API for creating components without JSX in &lt;code&gt;React.createElement()&lt;/code&gt;. Since it&apos;s just plain JavaScript and doesn&apos;t require any functions or non-json data structures, it turns out that you can make a JSON structure that represents a set of React components pretty easily. I had run into a use case for this same trick at work, so I put it to use again here: I modified the last step of my Unified pipeline to return JSON instead of a React component. &lt;a href=&quot;https://github.com/rhysd/rehype-react&quot;&gt;&lt;code&gt;rehype-react&lt;/code&gt;&lt;/a&gt; made this a cinch, since they allow you to pass a custom method for &lt;code&gt;createElement&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;remarkPipeline().use(rehypeReact, {
	createElement: (type, props, children) =&gt; ({ type, props, children }),
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From there, I made a &lt;a href=&quot;https://github.com/wookiehangover/wookiehangover.com/blob/master/src/components/component-tree.js&quot;&gt;simple component&lt;/a&gt; to transform the result from &lt;a href=&quot;https://github.com/rhysd/rehype-react&quot;&gt;&lt;code&gt;rehype-react&lt;/code&gt;&lt;/a&gt; back into a React component:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-jsx&quot;&gt;&amp;#x3C;ComponentTree components={components} /&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now I have an pipeline where you can put markdown with crazy embedded HTML in one end, and well-formed &lt;em&gt;serializable&lt;/em&gt; React components come out of the other end. With that, I can write out JavaScript files containing valid React components without having to reconstruct any JSX literals from the rehype AST. Either way that&apos;s a step that I wanted to be transparent when I was writing posts. Mission accomplished 😎&lt;/p&gt;
&lt;p&gt;There are a couple of benefits from going through all that trouble:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wooorm/remark/blob/master/doc/plugins.md&quot;&gt;remark plugins&lt;/a&gt; can do just about anything. Seriously. I was able to add code highlighting &lt;em&gt;while I was writing this post&lt;/em&gt; with 1 npm install, 1 line of JavaScript, and 1 line of CSS!&lt;/li&gt;
&lt;li&gt;Unified&apos;s &lt;a href=&quot;https://github.com/vfile/vfile&quot;&gt;vfile&lt;/a&gt; format makes adding post metadata easy.&lt;/li&gt;
&lt;li&gt;No format lock in. When the wind blows a differnt direction and React falls out of favor, outputting to a different format will be easy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Markdown ➡️ Webpack ➡️ Next.js&lt;/h2&gt;
&lt;p&gt;I wanted to write in Markdown and have Next.js pick up the changes automatically.&lt;/p&gt;
&lt;p&gt;By default, next will use any JavaScript modules that export a React component in your &lt;code&gt;pages/&lt;/code&gt; directory. While writing markdown next to code is possible, it&apos;s gross. Same goes for duplicating the same boilerplate file for each post and importing the markdown source from some other directory. I wanted to skip all that an go straight from Markdown into Next&apos;s build and compile pipeline.&lt;/p&gt;
&lt;p&gt;💡 The light bulb moment came when I realized the power of Next&apos;s support for custom Webpack configuration.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://webpack.js.org/concepts/loaders/&quot;&gt;webpack loader&lt;/a&gt; can transform markdown source files into modules on the spot! And better yet, I already had a build script from my prototype that was doing most of what I needed to do in the loader. I needed to change was how my build script found out about files (reading them from disk vs. passed in by webpack) and how it output the results (again, writing to disk vs. passing the result back to webpack). The loader plugin interface was dead simple:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;module.exports = function (source) {
	const done = this.async();

	renderPost(source, this.resourcePath)
		.catch(done)
		.then((post) =&gt; done(null, post));
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Where &lt;code&gt;renderPost(source, resourcePath)&lt;/code&gt; was the middle bit of my prototyped static rendering pipeline, refactored to only need a string of the file content and the path of the file being rendered. This is one of the easiest changes to make, since it took a method formerly reliant on &lt;em&gt;side effects&lt;/em&gt;, namely reading and writing to disk, and made it a pure function. Any time you can make a method that&apos;s passed an input and return a result, you should. Decomposing your assumptions about side effects will almost always save time. I learned this from Gary Bernhardt&apos;s talk &lt;em&gt;&lt;a href=&quot;https://www.destroyallsoftware.com/talks/boundaries&quot;&gt;Boundaries&lt;/a&gt;&lt;/em&gt;, and I remember it every time I see it.&lt;/p&gt;
&lt;p&gt;The last step was to add it to the webpack extension point in &lt;code&gt;next.config.js&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;module.exports = {
	webpack(config) {
		config.module.rules.push({
			test: /\.html\.js$/,
			include: &quot;./pages/writing&quot;,
			loader: &quot;./src/post-loader&quot;,
		});
		return config;
	},
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Building and Deploying&lt;/h2&gt;
&lt;p&gt;Unlike in my earlier versions, Next.js 3 supports creating a complete static site from any next app with &lt;code&gt;next export&lt;/code&gt;. To tell it what routes and pages to export, you need to add some configuration to &lt;code&gt;next.config.js&lt;/code&gt;. Here&apos;s what mine looks like:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;module.exports = {
	exportPathMap() {
		return {
			&quot;/&quot;: { page: &quot;/&quot; },
			&quot;/cv.html&quot;: { page: &quot;/cv.html&quot; },
			&quot;/writing/2016-reading-list.html&quot;: { page: &quot;/writing/2016-reading-list.html&quot; },
			&quot;/writing/2017-reading-list.html&quot;: { page: &quot;/writing/2017-reading-list.html&quot; },
			// ...
		};
	},
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then I changed my build step to run &lt;code&gt;next build &amp;#x26;&amp;#x26; next export --docs&lt;/code&gt; and I with surprisingly little drama was ready to deploy to Github pages!&lt;/p&gt;
&lt;p&gt;Normally I&apos;d be worried that I&apos;d have missed some minor detail in a major change like swapping out the entire backend of a website, but in essence what I was doing here wasn&apos;t all that big of a change: my static HTML, JavaScript, and CSS in the &lt;code&gt;docs/&lt;/code&gt; directory was still there, but was being built by a different tool chain. I pushed the first commit with the switch to Next.js and waited patiently while the build ran on Travis CI.&lt;/p&gt;
&lt;p&gt;...And that was it. I had more or less completely moved my static site into a totally modern React app with Next.js. The whole thing is &lt;a href=&quot;https://github.com/wookiehangover/wookiehangover.com&quot;&gt;open source&lt;/a&gt;, so feel free to kick the tires and ask questions if you have any 😊&lt;/p&gt;
&lt;p&gt;Here are the relevant parts of the app:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;post-loader.js&lt;/strong&gt; – &lt;a href=&quot;https://github.com/wookiehangover/wookiehangover.com/blob/master/src/post-loader.js&quot;&gt;webpack loader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;static-sites-with-next-js.html.js&lt;/strong&gt; – &lt;a href=&quot;https://github.com/wookiehangover/wookiehangover.com/blob/master/pages/writing/static-sites-with-next-js.html.js&quot;&gt;a markdown post with embedded HTML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;react-to-hast.js&lt;/strong&gt; – &lt;a href=&quot;https://github.com/wookiehangover/wookiehangover.com/blob/master/src/react-to-hast.js&quot;&gt;markdown compiler with Unified.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;component-tree.js&lt;/strong&gt; – &lt;a href=&quot;https://github.com/wookiehangover/wookiehangover.com/blob/master/src/components/component-tree.js&quot;&gt;React component for rendering JSON AST&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Gotcha&apos;s! 😝&lt;/h3&gt;
&lt;p&gt;A few snags I ran into:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Github pages still perversely retains some of it&apos;s Jekyll roots, and ignores file and directory names that start with an underscore 🙄
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fix:&lt;/strong&gt; add &lt;code&gt;.nojekyll&lt;/code&gt; to your &lt;code&gt;docs/&lt;/code&gt; directory (or whatever is configured in the &quot;Pages&quot; portion of your repo config in Github)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;.html.js&lt;/code&gt; file extension on the posts was because I wanted backwards compatibilty with my static html version, which used plain old html files
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Minor annoyance:&lt;/em&gt; &lt;code&gt;next export&lt;/code&gt; adds directories for every static file to avoid the .html extension showing up in the path, but now I have urls with trailing slashes.&lt;/li&gt;
&lt;li&gt;If I ever want to change a URL (like to drop the &lt;code&gt;.html&lt;/code&gt; extension because it&apos;s not 1998), I&apos;ll need to figure out how to manage the redirects.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I need to remember to add new posts to &lt;code&gt;next.config.js&lt;/code&gt;, which I seem pathologically incapable of. I&apos;ll probably make the webpack plugin emit a JSON file with all the post metadata, but I haven&apos;t done that yet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And here&apos;s that &lt;code&gt;&amp;#x3C;marquee&gt;&lt;/code&gt; tag to prove I wasn&apos;t joking about supporting arbitraty HTML in posts. And thanks &lt;a href=&quot;https://twitter.com/ddtrejo&quot;&gt;@ddtrejo&lt;/a&gt; for feedback and edits!&lt;/p&gt;</content:encoded></item><item><title>Tragic Design is...</title><link>https://sambreed.dev/writing/tragic-design-is.html</link><guid isPermaLink="true">https://sambreed.dev/writing/tragic-design-is.html</guid><pubDate>Sun, 06 Aug 2017 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Tragic Design is...&lt;/h2&gt;
&lt;p&gt;When an app lets you accidentally enter a zip code instead of a full address and still completes your order. Optimizing for click-throughs, I guess?&lt;/p&gt;
&lt;p&gt;~~This was too boring for a tweet and now I want to find more examples.~~ Then I made some tweets.&lt;/p&gt;
&lt;p&gt;The following was adapted using &lt;a href=&quot;http://tinysubversions.com/&quot;&gt;Darius Kazemi&apos;s&lt;/a&gt; wonderful new alternative to twitter moments™, &lt;a href=&quot;https://tinysubversions.com/spooler/?url=https://twitter.com/sambreed/status//885343588485259264&quot;&gt;spooler&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;A thread by very un-dude (that&apos;s me)&lt;/h3&gt;
&lt;p&gt;Why do twitter &amp;#x26; instagram go out of their way to make it impossible to either right click or drag images out of the browser to save? I mean I know why but it fucking sucks.[&lt;a href=&quot;https://twitter.com/sambreed/status/8853397799439441931&quot;&gt;1&lt;/a&gt;] It&apos;s a god damn browser feature that you have to go out of your way to obscure. Web devs: push back![&lt;a href=&quot;https://twitter.com/sambreed/status/885340468485120000&quot;&gt;2&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;Twitter stop spending time fucking up built in features. The contents of an &amp;#x3C;img&gt; tags aren&apos;t DRM&apos;ed (yet), here&apos;s to hoping they never are.[&lt;a href=&quot;https://twitter.com/sambreed/status/885341066592870400&quot;&gt;3&lt;/a&gt;] I should not have to do this to save silly images, you shitheels![&lt;a href=&quot;https://twitter.com/sambreed/status/885341803079016448&quot;&gt;4&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;oh shit I made a dope new feature tho — that image is now &lt;em&gt;every&lt;/em&gt; image. twitter, if you hire me I will gladly ruin this product with you...[&lt;a href=&quot;https://twitter.com/sambreed/status/885341803079016448&quot;&gt;5&lt;/a&gt;]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Why is this tragic?&lt;/h3&gt;
&lt;p&gt;In the case of &lt;em&gt;Uber&lt;/em&gt;, it&apos;s just stupid that it let me complete an order without confirming the address. The checkout flow on web seems to have changed since I recorded that screenshot.&lt;/p&gt;
&lt;p&gt;For &lt;em&gt;Twitter&lt;/em&gt;, this is a case of wanting to optimize sharing over saving and reposting. The only problem is that taints an essential underpinning of the world wide web: URIs are the lowest common denomonator of sharing. It&apos;s excessively inefficient to embed media &lt;em&gt;without&lt;/em&gt; having it hosted somewhere that you can identify with a publicly readable URI. Using DOM and CSS to try to prevent users from discovering the &lt;em&gt;resource idenfiers&lt;/em&gt; for media you just served them is antithetical to building an open web. The irony is that Twitter is that it&apos;s biggest redeeming quality is that it&apos;s not an &lt;em&gt;entirely closed&lt;/em&gt; walled garden, like Facebook or Snapchat. Working against a platform feature that&apos;s a core property of something you benefit from seems doubly wasteful.&lt;/p&gt;
&lt;h3&gt;What is &lt;em&gt;Tragic Design&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;For one, &lt;a href=&quot;http://a.co/eP48MQx&quot;&gt;Tragic Design&lt;/a&gt; is a book by Jonathan Shariat &amp;#x26; Cynthia Savard Saucier that made it&apos;s way onto my &lt;a href=&quot;https://wookiehangover.com/writing/2017-reading-list.html&quot;&gt;2017 Reading List&lt;/a&gt;. Go figure. It&apos;s a clever title and describes an obvious-yet-undescribed idea: design that&apos;s harmful to users can cause a disproportionate amount of trouble, beyond just looking bad. For all the talk about the human element being paramount in the thoughts of designers, it&apos;s surprisingly easy for this to be the first thing that&apos;s lost when software developers (or even worse, bureaucrats) get involved.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Footnotes&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;https://twitter.com/sambreed/status/885339779943944193&lt;/li&gt;
&lt;li&gt;https://twitter.com/sambreed/status/885340468485120000&lt;/li&gt;
&lt;li&gt;https://twitter.com/sambreed/status/885341066592870400&lt;/li&gt;
&lt;li&gt;https://twitter.com/sambreed/status/885341803079016448&lt;/li&gt;
&lt;li&gt;https://twitter.com/sambreed/status/885343588485259264&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>Protect your DNS history with DNSCrypt</title><link>https://sambreed.dev/writing/protect-your-history.html</link><guid isPermaLink="true">https://sambreed.dev/writing/protect-your-history.html</guid><description>DNSCrypt is a great way to ensure that your browsing history isn&apos;t being spyed on. Learn how to set up DNSCrypt to keep your DNS traffic from prying eyes.</description><pubDate>Mon, 17 Apr 2017 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Protect your DNS history with DNSCrypt&lt;/h2&gt;
&lt;p&gt;In light of the recent rollback(s) of regulations meant to restrict how ISP&apos;s share and sell the data they gather about you, I started wondering what I could do to make my internet traffic a bit harder for them to monetize. How would I prevent my ISP from selling details about my shopping habits and personal preferences to the highest bidder?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#first-steps&quot;&gt;Or skip straight to how to do it.&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Why DNS and why should you care?&lt;/h3&gt;
&lt;p&gt;Standards for encrypting web traffic have become widely adopted since their introduction in the late 90s. It&apos;s not my first day, so I knew that content sent over HTTPS would be difficult (but not impossible) for a third party to do much with, and I already use HTTPS-everywhere and Brave to help keep things on the up-and-up. Unfortunately, even exclusively using HTTPS doesn&apos;t mean that 100% of your traffic is encrypted and secure.&lt;/p&gt;
&lt;p&gt;A crucially important part of how your computer or phone loads a website is completely unencrypted in practice. The Domain Name System, or DNS, is how your web browser knows how to find the domain &quot;google.com&quot; when you type &lt;code&gt;https://www.google.com&lt;/code&gt; into your browser&apos;s address bar, and DNS isn&apos;t normally encrypted. Anyone who handles the traffic can take a peek if they&apos;re so inclined.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ability plus incentive makes for easy temptation. DNS is an easy target if your ISP wanted to profit from a complete list of the websites you visited.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Even worse, an ISP could resolve a DNS entry for a different website altogether or send you to a &quot;toll booth&quot; captive portal for whatever nefarious reasons they could think of.&lt;/p&gt;
&lt;p&gt;Which means that even if I took every reasonable precaution and always made sure &lt;code&gt;https&lt;/code&gt; was in the URL when buying John Tesh cd&apos;s on Amazon, watching John Tesh videos on Youtube, or posting updates to my John Tesh fanzine, Comcast would still be able to see the URLs of the pages and sell them to anyone who cared. That is unacceptable. My secret love of John Tesh is too precious for a greedy corporate entity to harvest for profits.&lt;/p&gt;
&lt;p&gt;Good thing for me, a bunch of smart folks who are well versed in &quot;the cyber&quot; had already thought this one through enough to write RFC standards for the DNS protocol that can make it much harder for a third party to see the paper trail of domains and URLs left by a furious session of John Tesh related browsing. Even better, these standards have been implemented with open source and are available to use for free, without too much overhead.&lt;/p&gt;
&lt;p&gt;Unfortunately, encrypting your DNS isn&apos;t yet as ubiquitous or widely support as HTTPS, so there are still a few hoops to jump through if you want to start obfuscating this aspect of your web traffic.&lt;/p&gt;
&lt;p&gt;It&apos;s also important to note that encrypting your DNS isn&apos;t a silver bullet with regards to online privacy. True privacy is a fleeting concept, or at least one that&apos;s impossible to make sane guarantees about. Like any encryption technology, it&apos;s only as strong as the implementation being used, and in recent years those have been known to be compromised with some degree of regularity. Even when you&apos;re encrypting your communications doesn&apos;t mean you should automatically trust the person on the other end of the line. Not to sound paranoid, but be careful about who you place blind trust in and always look before you leap.&lt;/p&gt;
&lt;h3&gt;Enter DNSCrypt&lt;/h3&gt;
&lt;p&gt;DNSCrypt is a great collection of software tools that let you get up and running with encrypted DNS really quickly. Don&apos;t take my word of it. Head over to dnscrypt.org for comprehensive info about what it is and all the ways you can use it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;dnscrypt + httpseverywhere is 9/10s of a vpn imo&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;DNSCrypt is a way to run an encrypted dns server and clients for every platform to connect with it. There are already plenty of servers around the world that you can connect to out-of-the-box with a gui clients, so getting up and running is super easy. And there are plenty of command line tools, too. Everything is open source and the community seems active, with multiple projects to choose from for most layers of tooling.&lt;/p&gt;
&lt;p&gt;The client apps work by changing your network settings to use a dns server running DNSCrypt, and lets you quickly switch back and forth between your previous &quot;normal&quot; dns and an encrypted configuration. It does this by running a local dns server on your computer, which handles one end of the encryption and decryption, with the public server you&apos;re connecting with on the other end. Since all the traffic is encrypted on your computer before it&apos;s sent to the server, an intermediary like your ISP can&apos;t see the domain being requested.&lt;/p&gt;
&lt;h3&gt;What&apos;s the catch? Why isn&apos;t this everywhere already?&lt;/h3&gt;
&lt;p&gt;The catch is that ultimately your dns request will be served from an unencrypted (but authenticated) channel because the global network of DNS servers does not implement the DNSCrypt protocol.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;First steps&lt;/h3&gt;
&lt;p&gt;Better instructions here: https://dnscrypt.org/&lt;/p&gt;
&lt;p&gt;Install the &lt;a href=&quot;https://github.com/alterstep/dnscrypt-osxclient&quot;&gt;dnscrypt-client&lt;/a&gt; and connect to one of the public nodes. I chose https://nxt.ist. You can &quot;trust&quot; these because they issue keypairs or something(?) but, caveat emptor.&lt;/p&gt;
&lt;p&gt;But roll with the thick client because it&apos;s convenient and you&apos;ll get to see what you&apos;re in for... which is pretty boring if you&apos;re not running &lt;code&gt;dig&lt;/code&gt; or &lt;code&gt;nslookup&lt;/code&gt; all the time to see where your DNS entries are coming from. But then again, it&apos;s pretty boring. But at least they&apos;re encrypted?&lt;/p&gt;
&lt;h3&gt;Paranoid mode: Roll your own DNSCrypt server&lt;/h3&gt;
&lt;p&gt;I chose a droplet that came with Ubuntu 16.04 and Docker 1.17 pre-installed. Created a new keypair (always, always create a new keypair) and give it a good name, a static IPv4 address, and an IPv6 address if you hate yourself (or want to learn about docker&apos;s nightmare factory networking layer).&lt;/p&gt;
&lt;p&gt;SSH to the server and fire up the &lt;a href=&quot;https://github.com/jedisct1/dnscrypt-server-docker&quot;&gt;DNSCrypt Server Docker Image&lt;/a&gt; with the instructions from the README:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run --name=dnscrypt-server -p 443:443/udp -p 443:443/tcp \
    jedisct1/unbound-dnscrypt-server init -N example.com

docker start dnscrypt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The first command returns a public key. You&apos;ll need this. It&apos;s also in your docker logs if you forget it &lt;code&gt;docker logs dnscrypt-server | head&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now you have a server running, note the IP and setup a client to connect to it.&lt;/p&gt;
&lt;h3&gt;Connecting clients with dnscrypt-proxy&lt;/h3&gt;
&lt;p&gt;I tried 2 ways of connecting devices to my new dnscrypt server from my local network.&lt;/p&gt;
&lt;p&gt;1 - Run the proxy client everywhere&lt;/p&gt;
&lt;p&gt;Run dnscrypt-proxy on every device where you want encrypted dns, which makes a local dns server which sends encrypted requests to your server. This is the &quot;safest&quot; way of doing things because you&apos;re not trusting anyone else to do the encryption for you, making it a bit more difficult for someone to spy on your dns traffic.&lt;/p&gt;
&lt;p&gt;Install it for mac with homebrew: &lt;code&gt;brew install dnscrypt-proxy&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Then connect to your server using the IP and public key:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo dnscrypt-proxy --provider-key=YOUR_PUBLIC_KEY \
  --resolver-address=YOUR_IPv4_ADDRESS:443 \
  --provider-name=2.dnscrypt-cert.example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now edit your DNS settings to point at your IP. This is actually really convenient if you&apos;re already using dnscrypt-client: in the &quot;Advanced&quot; tab, add your IP to the field labeled &quot;When not using DNSCrypt, use the following static DNS servers&quot;. Now, when you turn off the DNSCrypt thick client, it will try to use the proxy you started from the command line.&lt;/p&gt;
&lt;p&gt;It&apos;s a pain in the ass that you can&apos;t point to your own server on the client. There, I said it. Pull requests welcome, I guess?&lt;/p&gt;
&lt;p&gt;2 - Run it from one place on your local network&lt;/p&gt;
&lt;p&gt;Run dnscrypt-proxy somewhere on your local network, and tell devices to use that as their source of truth for dns. If you trust your local network (which, depending on how many IOT devices you have running or you don&apos;t control router/modem settings, might not be a good idea,) then you can avoid extra process overhead and it works for phones and tablets.&lt;/p&gt;
&lt;p&gt;Basically the same steps as above, but make sure that you start the dnscrypt-proxy client with &lt;code&gt;--local-address=0.0.0.0&lt;/code&gt; so that it broadcasts to your network.&lt;/p&gt;
&lt;p&gt;And, uh, make sure your router doesn&apos;t liberally port forward or you&apos;ll live to regret it.&lt;/p&gt;
&lt;p&gt;I did this on my ubuntu media server and I ran into dnsmasq issues, because ubuntu is stupid and runs a dnsmasq process as part of it&apos;s network stack, but it&apos;s not the &quot;real&quot; dnsmasq so you can&apos;t configure it to broadcast (go figure).&lt;/p&gt;
&lt;p&gt;To get everything working without just nuking the unconfigurable dnsmasq process, I had to run dnscrypt-proxy on another port, &lt;code&gt;127.0.0.1:40&lt;/code&gt; and then install the &quot;real&quot; dnsmasq, &lt;code&gt;sudo apt-get install dnsmasq&lt;/code&gt; and tell it to use dnscrypt-proxy as a nameserver. All this is from here, conveniently: https://wiki.debian.org/HowTo/dnsmasq&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ini&quot;&gt;no-resolv
server 127.0.0.1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then I switched all the dns settings on my phones and computers to point at the local ip of my media server for DNS, falling back to google&apos;s &lt;code&gt;8.8.8.8&lt;/code&gt; and &lt;code&gt;8.8.4.4&lt;/code&gt; to avoid being inconveninced if the process dies.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Encrypting DNS is boring, but satisfying.&lt;/p&gt;
&lt;p&gt;Happy Hacking 🤓&lt;/p&gt;</content:encoded></item><item><title>Why I Read What I Read in 2016</title><link>https://sambreed.dev/writing/why-I-read-what-I-read-in-2016.html</link><guid isPermaLink="true">https://sambreed.dev/writing/why-I-read-what-I-read-in-2016.html</guid><pubDate>Sun, 01 Jan 2017 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Why I Read What I Read in 2016&lt;/h2&gt;
&lt;p&gt;January 1, 2017&lt;/p&gt;
&lt;p&gt;I tried to read more this year, I really did. I had serious intentions about it, so I did what serious people do, I started keeping a list. Or at least I decided to publish it and keep it up to date. There was a natural satisfaction, an additional dopamine rush of accomplishment, to checking off an title right after I finished it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So far this book has no kissing in it at all and is totally boring&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I started on Wunderlist. Probably around the second half of 2015 enough static had built up around the problem to trigger a release, a single spasm of output into list form, tapped diligently onto the keyboard of my iPhone. That list, of things I was currently reading and thing I remembered reading up to that point in the year and books I had already purchased and were waiting for me on my bookshelf, was what source my 2015 post, which I still wrote in a hurry on New Year’s Day 2016.&lt;/p&gt;
&lt;p&gt;I kept up the practice of maintaining a reading list in Wunderlist. It unfurled itself ahead of me and pushed the past books forever below the fold. I got ambitious a couple of times and added dozens of titles, so many in fact that the list became a burden. I couldn’t look at it. And the format, for however much it rewarded me with the initial thrill of checking off a title, downplayed the previous items in a way that was a little unsatisfying. I had also taken to using Wunderlist (which I love, btw, despite the criticism) for work task tracking, so it became a thing that now did two things, which is far to many functions for my limbic brain to remember how to reward. So I let that list wither a little until finally I abandoned it entirely.&lt;/p&gt;
&lt;p&gt;That’s when I finally re-did my website and by doing a classic thing-you-shouldn’t-do and rolled my own publishing software from scratch. Mostly so I could maintain a list in markdown, which, I kinda did?&lt;/p&gt;
&lt;p&gt;Last year’s was a Medium post. Medium is great. I’m mad jellz of what they built. But I like writing in thick app, and I like writing in markdown, and I like being able to keep and move around my own files.1&lt;/p&gt;
&lt;p&gt;So I once again went through the act of translating my reading history from Wunderlist into a more sharable format. Hence the list you’ll find archived at the bottom of this post.2&lt;/p&gt;
&lt;h3&gt;How to read this list:&lt;/h3&gt;
&lt;p&gt;Because decisions are hard, I’ve gone through the trouble of preparing a few variations:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The “Classic” list, as maintained in earlier versions of this post. If you don’t like introspective bullshit, skip to this one — &lt;a href=&quot;2016-reading-list.html&quot;&gt;Classic List&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The Esoteric List, my first thoughts on how to properly formulate a wrap up post that sums up my life this year — &lt;a href=&quot;#so-you-like-books-huh-&quot;&gt;Esoteric&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Up / down recommendations, my no frills recommendations: read it or skip it — &lt;a href=&quot;#up-down&quot;&gt;Up/Down&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I now present these, out of order:&lt;/p&gt;
&lt;h3&gt;So you like books, huh?&lt;/h3&gt;
&lt;p&gt;Fuck man, this was a hell of a year, wasn’t it? I’ve probably said that exact phrase a couple of dozen times in the waning days of 2016. But, fuck, man, wasn’t it tho?&lt;/p&gt;
&lt;p&gt;While trying to narrowly avoid &lt;a href=&quot;https://en.m.wikipedia.org/wiki/Inner_emigration&quot;&gt;inner emigration&lt;/a&gt;, I’ve put myself on a full press embargo after the months of frenzy leading up to the US Presidential Election: I’m terrified that the 24 hour news cycle is designed only to distract, and there’s very little to distinguish honest journalism from partisan hackery in the echo chambers we’ve spent the last few years building for ourselves.&lt;/p&gt;
&lt;p&gt;So I read some fuckin books.&lt;/p&gt;
&lt;h3&gt;Fiction&lt;/h3&gt;
&lt;p&gt;I read three pieces of fiction this year that stand out. None were published any time recently. They have with very little to do with one another, save for that &lt;em&gt;Flow My Tears…&lt;/em&gt; and &lt;em&gt;Cat’s Cradle&lt;/em&gt; could loosely be thrown into the Science Fiction section at a used bookstore and no crime would have been committed, and I enjoyed each one of them for entirely different reasons.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/Flow-My-Tears-Policeman-Said/dp/0547572255/&quot;&gt;&lt;em&gt;Flow My Tears, the Policeman Said&lt;/em&gt;&lt;/a&gt; by Philip K. Dick ★★★★☆&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Philip K. Dick often wrote about men who suddenly find themselves out of place, where their underlying assumptions about the world are either slowly subverted if not turned entirely upside down. &lt;em&gt;Flow My Tears…&lt;/em&gt; is one of the latter.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/Cats-Cradle-Novel-Kurt-Vonnegut/dp/038533348X/&quot;&gt;&lt;em&gt;Cat’s Cradle&lt;/em&gt;: A Novel&lt;/a&gt; by Kurt Vonnegut ★★★★★&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kurt Vonnegut knows how to keep things brief and always remembers to include a punchline. And there’s a main character in this book with the same last name as me, go figure why I liked it. You should read this, it’s short and funny and leaves you thinking about big questions about humanity. And Ice-9.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/American-Gods-Tenth-Anniversary-Novel/dp/0062472100/&quot;&gt;&lt;em&gt;American Gods&lt;/em&gt;&lt;/a&gt; by Neil Gaiman ★★★★☆&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Neil Gaiman is not an author that I’ve ever really gotten into. He seems like a soft spoken British man who spins somewhat boring stories infused with “magick” and “faeries’ or something like that, right? Either way, I was probably quick to judge Gaiman on his observable aesthetic and film adaptations. American Gods is great.&lt;/p&gt;
&lt;p&gt;More importantly, these three works bring into question the notion of identity: in &lt;em&gt;Flow My Tears…&lt;/em&gt;, the protagonists celebrity identity is stripped away in an instant with no explanation; &lt;em&gt;Cat’s Cradle&lt;/em&gt; centers around a group of people failing to understand each other and their means of relating to the world, all while foolishly toying with scientific advances that carry devastating consequences; finally, American Gods serves as modern mythology-cum-Bildungsroman and is about a character literally named “Shadow” who’s piecing together his present version of himself from fractured memories of his past life while struggling to separate reality from fantasy or illusion.&lt;/p&gt;
&lt;p&gt;Phew, ok, that was a mouthful. On with the rest of the list.&lt;/p&gt;
&lt;h3&gt;Non-Fiction&lt;/h3&gt;
&lt;p&gt;Last year’s wrap up post was assembled in a hurry, and while I certainly had chosen a few vectors in my non-fiction selections, I had of course done it somewhat haphazardly. I largely discovered the things on my 2015 list myself by way of the internet. In 2016 I went about it a bit differently2 and I’m pleased with the results.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/Fire-Valley-Birth-Personal-Computer/dp/1937785769/&quot;&gt;&lt;em&gt;Fire in the Valley&lt;/em&gt;: The Birth and Death of the Personal Computer&lt;/a&gt; by Michael Swaine and Paul Freiberger ★★★★★&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you work in tech, read this book. &lt;a href=&quot;2016-reading-list.html#fire-in-the-valley-details&quot;&gt;See previously&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.amazon.com/Incerto-Fooled-Randomness-Procrustes-Antifragile/dp/0399590455/&quot;&gt;&lt;em&gt;Incerto&lt;/em&gt;&lt;/a&gt; by Nassim Nicholas Taleb ★★★★★
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Fooled By Randomness&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;The Black Swan&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Antifragile&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The last thing I expected to find this year was yet another author to do a deep-dive into, but Nassim Taleb is my man this year. I picked up Antifragile in February based off of Joe’s glowing recommendation. I had recalled seeing the covers of Fooled By Randomness and The Black Swan in bookstores in recent years, but I glibly assumed that they were of the Malcom Gladwell variety of disposable pop-science / psychology non ficton, full of bluster and anecdote but otherwise lacking in anything concrete. Similar to the genre of business books, but for people who think they’re smarter than people who read business books.&lt;/p&gt;
&lt;p&gt;Boy was I wrong.&lt;/p&gt;
&lt;p&gt;Full of bluster: yes. Taleb is absurdly bumptious, but in a way that I find endearing. Lacking in content: hardly. The only similarity to cheapie business books is some of the repetitiveness in the arguments being presented, but that’s at best a superficial criticism. I poured through &lt;em&gt;Antifragile&lt;/em&gt;, the cumulative argument in the &lt;a href=&quot;https://www.amazon.com/Incerto-Fooled-Randomness-Procrustes-Antifragile/dp/0399590455/&quot;&gt;&lt;em&gt;Incerto&lt;/em&gt;&lt;/a&gt; series, but the prologue assured me that I wouldn’t need to read the previous three volumes as a prerequisite to grokking the subject matter.&lt;/p&gt;
&lt;p&gt;After reading &lt;em&gt;Antifragile&lt;/em&gt; I let its ideas stew in my brain for a few months, as I dug through other non-fiction in nearby fields and concepts, particularly by Niall Ferguson. But &lt;em&gt;Antifragile&lt;/em&gt; kept on bugging me. I wanted to re-read it.&lt;/p&gt;
&lt;p&gt;The fundamental asymmetries that exist between what we think we know and everything else in the universe, and we’re hardwired to misinterpret events. As a species we excel at &lt;em&gt;predicting the past&lt;/em&gt; and are generally terrible at keeping score when we make predictions about the future — and our past losses can always be summarized in convenient and intelligent-sounding justifications.&lt;/p&gt;
&lt;p&gt;Around that same time I started following Nassim Taleb on twitter (worth it) and that he had recently published &lt;a href=&quot;https://www.amazon.com/Incerto-Fooled-Randomness-Procrustes-Antifragile/dp/0399590455/&quot;&gt;&lt;em&gt;Incerto&lt;/em&gt;&lt;/a&gt; as a handsome box of paperbacks. Sold. Also gave as a gift to a few smartypants people I know.&lt;/p&gt;
&lt;p&gt;Presented as a series of essays, anecdotes, and diatribes, with copious footnotes and even a technical essay or two, &lt;em&gt;Fooled By Randomness&lt;/em&gt;, &lt;em&gt;The Black Swan&lt;/em&gt;, and &lt;em&gt;Antifragile&lt;/em&gt; just about made my anti-academic year, and are now prized possessions on my bookshelf. I look forward to finishing &lt;em&gt;Bed of Procrustes&lt;/em&gt; this year and to re-reading the series again in the future. I’ve never encountered so many powerful and challenging ideas all in one place. It’s a piece of non-fiction that begs to be read for pleasure over and over again, just like a good sci-fi or fantasy series would. Amazing.&lt;/p&gt;
&lt;h3&gt;Up / Down&lt;/h3&gt;
&lt;p&gt;Cold, meaningless ratings.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Science Fiction / Fantasy&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;The Three Body Problem&lt;/em&gt; by Cixin Liu ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;em&gt;The Killing Moon&lt;/em&gt; by N.K. Jemisin ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Influx&lt;/em&gt; by Daniel Suarez ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Daemon&lt;/em&gt; by Daniel Suarez ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Dirk Gently’s Holistic Detective Agency&lt;/em&gt; by Douglas Adams ★★☆☆☆&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Historical Fiction&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Burr&lt;/em&gt; by Gore Vidal ★★★☆☆&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;“Fiction” section fiction&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Inherent Vice&lt;/em&gt; by Thomas Pynchon ★★★★★&lt;/li&gt;
&lt;li&gt;&lt;em&gt;The Illuminatus! Trilogy&lt;/em&gt; by Robert Shea and Robert Anton Wilson ★★★★☆&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finance / Economics / History&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;The (Mis)Behavior of Markets&lt;/em&gt; by Beniot Mandlebrot ★★★★★&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Against the Gods: the Remarkable Story of Risk&lt;/em&gt; by Peter L. Bernstein ★★★★★&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Superforecasting&lt;/em&gt; by Philip E. Tetlock and Dan Gardner ★★★★★&lt;/li&gt;
&lt;li&gt;&lt;em&gt;The Ascent of Money&lt;/em&gt; by Niall Feguson ★★★★☆&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Civilization&lt;/em&gt; by Niall Ferguson ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Sapiens&lt;/em&gt; by Yuval Harari ★★★☆☆&lt;/li&gt;
&lt;li&gt;&lt;em&gt;The Sovereign Individual&lt;/em&gt; by James Dale Davidson and Lord William Rees-Mogg ★☆☆☆☆&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Digital Gold&lt;/em&gt; by Nathaniel Popper ★★★☆☆&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Memoir / Biography&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Barbarian Days&lt;/em&gt; by William Finnegan ★★★★★&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Kissinger: 1923 - 1969 The Idealist&lt;/em&gt; by Niall Ferguson ★★★★☆&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Learning to Live Finally: the Last Interview&lt;/em&gt; by Jacque Derrida ★★★☆☆&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Brian Eno: Visual Music&lt;/em&gt; by Christopher Scoates ★★★★☆&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;7 Days in Ohio&lt;/em&gt; by Nathan Rabin ★★★★☆&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;File ownership and content exportability are typically the first rights you wave to operate in someone else’s walled garden. It’s not hard to imagine a future wherein a change to a Terms of Service agreement suddenly applies restrictive licensing to content you’ve created and uploaded. The right to access the bits that make up one’s work is essential. Also note that filesystem access in mobile is a far cry from what it is in the realm of desktop computing, another dark shadow on the horizon for those interested in keeping platforms open and free.&lt;/li&gt;
&lt;li&gt;(but above the footnotes)&lt;/li&gt;
&lt;li&gt;Rather than having to do all the hard work of choosing what to read, I let my notable internet person Joe McCann do most of the heavy lifting. I borrowed heavily from his &lt;a href=&quot;https://medium.com/@joemccann/don-t-read-these-books-in-2016-ee07f1ad8d3e&quot;&gt;2015 list&lt;/a&gt; and presumably nabbed a few titles off his 2016 shelf as well. Thanks for saving me the effort of finding interesting non-ficton, Joe.&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>2016 Reading List</title><link>https://sambreed.dev/writing/2016-reading-list.html</link><guid isPermaLink="true">https://sambreed.dev/writing/2016-reading-list.html</guid><description>A non-exhaustive list of the books I&apos;m reading in 2016</description><pubDate>Sat, 31 Dec 2016 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;2016 Reading List&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;[x] How to Make Sense of Any Mess — Abby Covert&lt;/li&gt;
&lt;li&gt;[x] Daemon — Daniel Suarez†&lt;/li&gt;
&lt;li&gt;[x] Burr – Gore Vidal †&lt;/li&gt;
&lt;li&gt;[x] Fire in the Valley – Michael Swaine and Paul Freiberger&lt;/li&gt;
&lt;li&gt;[x] Antifragile – Nassim Nicholas Taleb&lt;/li&gt;
&lt;li&gt;[x] The Ascent of Money – Niall Feguson&lt;/li&gt;
&lt;li&gt;[x] The (Mis)Behavior of Markets – Beniot Mandelbrot&lt;/li&gt;
&lt;li&gt;[x] Barbarian Days – William Finnegan&lt;/li&gt;
&lt;li&gt;[x] Sapiens – Yuval Harari&lt;/li&gt;
&lt;li&gt;[x] Learning to Live Finally: The Last Interview – Jacques Derrida&lt;/li&gt;
&lt;li&gt;[x] The Killing Moon – N.K. Jemisin&lt;/li&gt;
&lt;li&gt;[x] Dirk Gently&apos;s Holistic Detective Agency – Douglas Adams&lt;/li&gt;
&lt;li&gt;[x] Flow My Tears, the Policeman Said – Philip K. Dick&lt;/li&gt;
&lt;li&gt;[x] Cat&apos;s Cradle – Kurt Vonnegut&lt;/li&gt;
&lt;li&gt;[x] American Gods – Neil Gaiman&lt;/li&gt;
&lt;li&gt;[x] Influx — Daniel Suarez†&lt;/li&gt;
&lt;li&gt;[x] The Illuminatus! Trilogy — Robert Shea and Robert Anton Wilson&lt;/li&gt;
&lt;li&gt;[ ] ~~Kissinger: 1923-1969 The Idealist — Niall Ferguson~~&lt;/li&gt;
&lt;li&gt;[x] Brian Eno: Visual Music — Christopher Scoates&lt;/li&gt;
&lt;li&gt;[x] The Three-Body Problem — Cixin Liu&lt;/li&gt;
&lt;li&gt;[x] Civilization — Niall Ferguson&lt;/li&gt;
&lt;li&gt;[x] Inherent Vice — Thomas Pynchon†&lt;/li&gt;
&lt;li&gt;[x] 7 Days In Ohio — Nathan Rabin&lt;/li&gt;
&lt;li&gt;[ ] Time Travel — James Gleick&lt;/li&gt;
&lt;li&gt;[x] Against the Gods: The Remarkable Story of Risk — Peter L. Bernstein&lt;/li&gt;
&lt;li&gt;[ ] ~~The Sovereign Individual — James Dale Davidson and Lord William Rees-Mogg~~&lt;/li&gt;
&lt;li&gt;[x] Fooled By Randomness — Nassim Nicholas Taleb&lt;/li&gt;
&lt;li&gt;[x] The Black Swan — Nassim Nicholas Taleb&lt;/li&gt;
&lt;li&gt;[x] Superforecasting – Philip E. Tetlock and Dan Gardner&lt;/li&gt;
&lt;li&gt;[ ] Digital Gold – Nathaniel Popper&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;~~Strikethrough~~ &lt;em&gt;Abandoned and back on the shelf&lt;/em&gt; 🙅‍&lt;/li&gt;
&lt;li&gt; In Progress 🙇&lt;/li&gt;
&lt;li&gt; Finished! 💁‍&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Addendum&lt;/h3&gt;
&lt;p&gt;Related: &lt;a href=&quot;https://medium.com/@sambreed/2015-books-504cb79ac5c0#.f8izs5mpq&quot;&gt;2015 reading list&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Lessons from The Jerk (1978)</title><link>https://sambreed.dev/writing/lessons-from-the-jerk.html</link><guid isPermaLink="true">https://sambreed.dev/writing/lessons-from-the-jerk.html</guid><pubDate>Sat, 26 Nov 2016 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Lessons from The Jerk (1978)&lt;/h2&gt;
&lt;p&gt;If you&apos;re not familiar with &lt;a href=&quot;http://www.imdb.com/title/tt0079367/&quot;&gt;The Jerk (1978)&lt;/a&gt; starring Steve Martin, do yourself (well really, do &lt;em&gt;me&lt;/em&gt; a favor) and watch it. It&apos;s streaming on Amazon Video. Just go watch it. I&apos;ll wait.&lt;/p&gt;
&lt;p&gt;Now that you&apos;re back, I want to share 3 very important pieces of advice that the star of our story, Maven Johnson, receives from his loving family before he departs on his Hero&apos;s Journey:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The Lord loves a working man&lt;/li&gt;
&lt;li&gt;Don&apos;t trust whitey&lt;/li&gt;
&lt;li&gt;See a doctor and get rid of it&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;This is universally good advice.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I may not believe in any higher power, but showing up and being willing to get your hands dirty gives you more advantages than not.&lt;/p&gt;
&lt;p&gt;I may not be anything other than an average white american man, but I sure as hell don&apos;t trust any authority figure. It&apos;s a reasonable precautionary measure.&lt;/p&gt;
&lt;p&gt;And I may not follow all good advice, but seriously you should see a doctor every once in a while. And call your mom.&lt;/p&gt;
&lt;p&gt;I first saw these painted on a plaque in a tattoo shop in Boulder, completely removed from their context in The Jerk, which I had already seen but didn&apos;t connect at the time. I had remembered the signage despite missing the connection to the film. I re-watched it last week and finally noticed, and reveled in the warmth of a pop-culture reference coming full circle: it was a moment of life&apos;s weird interconnected on full display. I spent a lot of time in that tattoo shop.&lt;/p&gt;
&lt;p&gt;What difficult-to-ignore advice has influenced you?&lt;/p&gt;</content:encoded></item><item><title>Picking up the pieces</title><link>https://sambreed.dev/writing/picking-up-the-pieces.html</link><guid isPermaLink="true">https://sambreed.dev/writing/picking-up-the-pieces.html</guid><description>A story about how I&apos;ve come to embrace odd metaphors to color language</description><pubDate>Tue, 13 Sep 2016 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Picking up the pieces; or How I learned to stop worrying and embrace weird metaphors&lt;/h2&gt;
&lt;p&gt;Metaphors are fractals of language: once you start to examine them closely, you end up seeing the same pattern over and over and over again.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This is not my first rodeo but it is my first day&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I tend to find myself re-using the same (usually tired) metaphors in all sorts of different situations. But let&apos;s not &lt;em&gt;chalk it up&lt;/em&gt; to laziness right away. I can&apos;t turn a blind eye once I start seeing a particular pattern that&apos;s useful for solving problems and, well, as they (I) say, &lt;em&gt;I&apos;ve found my hammer and everything becomes a nail&lt;/em&gt;.&lt;a href=&quot;#picking-up-the-pieces-01&quot;&gt;1&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Helpful Metaphors&lt;/h3&gt;
&lt;p&gt;Travel metaphors are always useful, bringing in words like &lt;em&gt;eyeline&lt;/em&gt;, &lt;em&gt;takeoff&lt;/em&gt;, and &lt;em&gt;landing&lt;/em&gt; into conversations makes work feel more like a swashbuckling adventure than a boring slog through a checklist.&lt;/p&gt;
&lt;p&gt;Eggs rolling towards the edge of a table is a particularly good image I&apos;ve borrowed from Matt Work. It&apos;s so damn useful when you need show how to deal with decision overload. All management problems work like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There are a dozen eggs rolling toward the edge of the table. You can only catch one.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It&apos;s an argument against micromanagement and interventionism, while offering practical advice for most types of people wrangling problems.&lt;/p&gt;
&lt;h3&gt;Unhelpful Metaphors&lt;/h3&gt;
&lt;p&gt;Have you ever found somehwere in the middle of the back half of a sentence when you realize you&apos;re using an obtuse or obscure metaphor, and the feeling sinks in that your captive audience is making a face, because you are in the middle of a cognitive leap so bizarre it would make an anti-comedian blush? Me too.&lt;/p&gt;
&lt;p&gt;I call that an &quot;unhelpful metaphor.&quot; Even if it does make sense without being a stretch, if it makes the poor audience question the sanity of the speaker it&apos;s safe to say it should probably be left out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Finding balance&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Usually when I start employing these colorful turns of phrase it&apos;s because I&apos;m trending to frame a concept, and I&apos;m using roughly hewn idioms in an imprecise language to do it. Like how a charcoal rubbing brings out the detail hidden to the naked eye, an applicable metaphor, however weird, can help drawn out a details that might not be readily apparent.&lt;/p&gt;
&lt;p&gt;So these days I just say it, whether or not it&apos;s a weird comparison. I&apos;m lending my point of view, and in a subjective world, the sooner you understand someone&apos;s perspective, the sooner you&apos;l be able to establish empathy.&lt;/p&gt;</content:encoded></item><item><title>Making Things For Fun</title><link>https://sambreed.dev/writing/making-things-for-fun.html</link><guid isPermaLink="true">https://sambreed.dev/writing/making-things-for-fun.html</guid><pubDate>Tue, 06 Sep 2016 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Making things for fun&lt;/h2&gt;
&lt;p&gt;This isn’t a blog. It’s a fun side project done over a couple weekends. There’s a big difference.&lt;/p&gt;
&lt;p&gt;It&apos;s not a blog because it&apos;s not using any blogging software, per-se, just some elbow grease and &lt;a href=&quot;https://github.com/wookiehangover/wookiehangover.com/tree/master/build&quot;&gt;a few scripts&lt;/a&gt; that I’ve to cobbled together into a mostly-working, typo-laden, glue–and–popsicle-sticks publishing platform to unleash upon the world like some Lovecraftian horror. Or not. I may be busy.&lt;/p&gt;
&lt;p&gt;Simple products are fashionable these days, especially when it comes to media consumption. Even I’ve been known to write a post on Medium dot com upon occasion, but I didn’t set out to build this as a monument to simplicity. No, this just isn’t that type of place and I’m not that type of fella; things are always a bit messier than that in real life.&lt;/p&gt;
&lt;p&gt;So as it stands, this is just a barely functioning, loosely coherent website with weird cursor effects&lt;a href=&quot;#making-things-for-fun_footnote-01&quot;&gt;1&lt;/a&gt; (unless I&apos;ve gotten bored and removed them) and superfluous footnotes&lt;a href=&quot;#making-things-for-fun_footnote-02&quot;&gt;2&lt;/a&gt; (I probably haven&apos;t removed these.)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So why go through all the trouble to build this in the first place? Why not just use Medium?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Isn’t this what all software developers inevitably do anyway? Yes, that and add layers to things. You mean you&apos;d really rather build some crappy knock-off of good software because your ego is too big to use anything that hasn&apos;t gracefully sprung as an unbidden gift to the world from your god-like cheeto-covered fingertips? Yes. A common thought among all software devs have goes something like, &quot;let’s all create something second-rate instead of using this perfectly good off-the-shelf in order to scratch the proverbial itch? Yes, indeed!&quot; Ok, it’s probably (definitely) something like that then.&lt;/p&gt;
&lt;p&gt;The question might as well then become, &quot;why build anything at all?&quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I made this because it was fun.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It was more fun figuring out how to &lt;a href=&quot;https://github.com/remy/inliner&quot;&gt;easily inline all the assets&lt;/a&gt; and &lt;a href=&quot;https://github.com/giakki/uncss&quot;&gt;strip out unused css&lt;/a&gt; on this page than it would have been to set up Wordpress again. The first time I ever set up Wordpress in 2008 was a magical and transformative experience, so why am I so quick to shun it now? Am I really that self-important? (Yes, duh.) Wordpress is great software and I can’t make anything that comes close to it in a weekend.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Doing something from scratch, even if it&apos;s not polished, doesn&apos;t deny or invalidate what you&apos;ve done in the past.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For a long time I refused to do any writing on my website because I felt like I didn&apos;t have the time. I was afraid that anything I wrote would be bad and then I&apos;d be committed to it forever, comma splices and all. Paranoid that I would look back on it later with utter embarrassment kept me from committing to much writing since I killed my &lt;a href=&quot;http://samuelbreed.blogspot.com/&quot;&gt;first blog&lt;/a&gt; in 2008. What I guess I means is I&apos;m over that now?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.jwz.org/doc/worse-is-better.html&quot;&gt;Worse is better&lt;/a&gt; after all, so why not let the tap start flowing!&lt;/p&gt;
&lt;p&gt;In keeping with that spirit, I’ve shoddily rebuild an ode-to-a-Jekyll-site so that I can have reasonable writing experience for myself, which means markdown and not much else to fuss over (except custom tags and CSS and doing everything for myself). I’m unburdened by the need for SEO or any other such unspeakable non-sense, but I care about mobile web and I care about pagespeed so I’ve gone and done the aforementioned asset inlining, which I think has come out quite nicely. I also had service workers for no reason but then took those out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You may never see this because I didn&apos;t know how Service Workers work.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I hope this is your first visit. If this page never changes, it might be because you have a fubar&apos;ed Service Worker I installed and I&apos;m not entirely sure how to purge and don&apos;t really care to test it extensively. So good luck! This might be fun!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Go out and make something, even if it&apos;s a shoddy facsimile of something else.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Now what are you going to make for yourself?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;p.s.&lt;/em&gt; And, yes, I do plan on building an HTML guest book some day. But for now a link to twitter will have to suffice ✍️&lt;/p&gt;</content:encoded></item></channel></rss>