Profile avatar
kristoff.sh
kristoff.sh I'm a software engineer in Bozeman, Montana! I'm really sinking my teeth into Elixir and looking for others who are like minded! My other interests include Magic the Gathering, Improvisation, Yoga, the Cosmere, POE, Godot, and Rock Climbing.
76 posts 35 followers 93 following
Prolific Poster
Conversation Starter

Claude dot AI's artifacts are such a great way to iterate, share, and visualize changes over time. I especially love the versioning and how easy updates are performed. #Claude

Monitoring LLM usage is essential for sustainable AI. Track token counts by model to find efficiencies, spending by use case to validate ROI, request latency for UX impact, and error rates to improve performance. #LLMOps #AIEngineering

I made an assistant REPL which retains state! This loop updates a simple context object which stores previous assistant and user turns! The program also respects important commands like 'quit' and 'inspect' to exit and look at previous turns. gist: gist.github.com/Gearhartlove... #AI #Claude

OK surely I'm not the first one to point out how jank this Python tuple syntax is for creating a tuple with one element. Use case is creating an immutable data structure. >>> t = 1, >>> type(t) <class 'tuple'> >>> t = (1,) >>> type(t) <class 'tuple'> >>> i = (1) >>> type(i) <class 'int'> #Python

Anthropic's brand is super clean and attracted me almost instantly. It feels soft, smart, and approachable. I set up their a Console account, bought 5$ worth of tokens, and used their Python SDK this morning to send in a prompt. I actually got an output back which feels amazing!!! ✨

OK it's official, I'm an AI Engineer starting tomorrow! I'm eager to wrap up my backend work and dive into Python and prompting best practices. On top of my list is learning the basics around Retrieval-augmented generation (RAG), prompt chaining, model comparisons, and output coherence. #AI

Python's 'uv' package manager seems pretty slick. Happy to give it a shot for my future projects! source: github.com/astral-sh/uv #Python

We said we will focus on interoperability for 2025 and we are ready to share the first results. Embedding Python in Elixir, it's Fine: dashbit.co/blog/running... More updates likely at ElixirConf EU 2025 :)

Work has me delving more into Python these days. Happy to learn the details of this dynamic language and build upon my first two semesters at college with it. I liked it then and I'm excited to dive in again!

Restricted Python is a great way to keep your app configurable but safe. It's a subset of your programming language, without all the security risks like deleting files, reading passwords, and writing malicious code. It also allows you to restrict imports via a whitelist feature!

New handle, who's this 😅 ! It was actually really easy to change, happy to have my website as my handle!

Anyone have good screen recording recommendations for Ubuntu, not a fan of the bulit-in application that ships with Ubuntu 22.04.5 LTS. Use cases include posting screenshots and recordings on Bluesky 🦋!

I'm finally doing elixir things! I created a GenServer to store my project info for my website. I can query the server for favorites or chronologically sorted projects. I'm then rendering the projects using HEEx HTML Extensions. Little ⭐ = favorite project! TODO hookup a LiveView 😅

Rule Engines. A highly configurable per user solution that entails wildly different levels of ownership. Standards and common patterns should be documented and enforced to prevent outlandish setups. I've mainteined too many bad configs to fully trust this setup without constant vigilance.

Working on a new site with Elixir & Phoenix (kristoff.sh). I'm having a ton of fun designing with tailwindcss and deploying with fly.io! #ElixirLang

Yellow borders in Aetherdrift are awesome! All lands look like Mario Cart plains 🤣

Sigils seem super powerful and convenient. I want to explore having a MTG database which would allow me to do something like ~M[Lighting Bolt]. I want to have a "MTG database" much like the UTC time database bundled in the standard library. To prevent bloat, you could even specify the sets you want.

What's the best way to become comfortable programming website UIs? As a backend dev, this is a major block for me. I just want to see a basic layout and reproduce it quickly (bonus points if it looks good). Flexbox and grid apis have been good starting points for me. #programming

Really fantastic podcast with José Valim about all things elixir. Really liking the hosts backend POV. www.youtube.com/watch?v=yk9x...

If anyone is looking for contributes on a project hit me up. I'm eager to start contributing in the Elixir space! #ElixirLang

Can I stay in my terminal all day?

I started to use nvim recently. I use lazy vim to manage my plugins. I've only really downloaded the basics like lsp, treesitter, and telescope. I'm happy with the dev experience so far, but doubly so because I know I can continue to grow my own configuration. I'm excited to try lazy git soon.

I'm trying out the new Ghostty terminal on Ubuntu. NGL it feels very similar to Alacrity at first glance. It feels fast and more native to the linux platform. You need don't tmux to create tabs and extra windows. I also like the default selection of themes.

Has anybody used the 'oauth2' library? I've found myself in a situation where I need to complete an oauth2 flow from code and have no idea where to begin. I wish it wouldn't re-direct me 😭 #ElixirLang

Bitstring pattern matching in Elixir feels like I'm cheating! It's so easy to match on arbitrary binaries. There are so many modifiers to help with matching edge cases like big and small endian. I saw WoW Vanilla sent binaries through tcp and I want to try replicating that. #ElixirLang

Charlists in Elixir are fun 😅 #ElixirLang

I'm working my way up to binary pattern matching across a TCP connection. The relationship between the number of bytes a character uses to it's String.length is not always equal (UTF-8 variable encoding) iex(53)> String.length("é") 1 iex(54)> IO.inspect("é", binaries: :as_binary) <<195, 169>> "é"

Document, relational, and graph databases are all widely used today. Here's what they are good at: Document: localized data, flexible schema Relational: relationships, strict schema Graph: Many to many relationships, evolving schema Each model can emulate each other, but the result is clunky.

#TIL that NoSQL means not only SQL

Who knew this was a thing. Pretty cool to see base 36 conversion making legible phrases.

Triggering faults deliberately can be great way to exercise and test fault-tolerant machinery. It's counterintuitive but aligns with reality. Hardware is error prone. Software is error prone. Humans are something else.

I'm very happy to see 4+ reprints of Edgar Markov in Innistrad Remastered. A banger of a commander should not cost 100$! #MTG

I've never really heard of Tina Fey before but man does she have a unique back story. In reading Fey's Bossypants her vulnerability shows through hilarious excepts. She writes who she wants to be and contrasts it with what everyone else thinks she should be. Highly recommend!

Had a fantastic time playing Da Doo Ron Ron on stage last night. It's such a great game to warm up the crowd and contribute to a scene without really doing much. I didn't know the tune, but it came naturally. I died thinking of 3 sociology facts 🤣 reference: improvnotes.com/improvnotes/... #Improv

Elixir 1.18 latest hotness - JSON module! iex(1)> json = """ ...(1)> { "foo": "bar"} ...(1)> """ " { \"foo\": \"bar\"}\n" iex(2)> JSON.decode!(json) %{"foo" => "bar"} iex(3)> --- I'm curious what will happen to Jason and Poison and other parsers; are they still useful? #Elixir