Skip to content

Instantly share code, notes, and snippets.

View phyllisstein's full-sized avatar

Daniel P. Shannon phyllisstein

View GitHub Profile
@phyllisstein
phyllisstein / llm.md
Created June 24, 2026 14:58
Claude explains LLM "contracts"

An LLM in code is just a function call over HTTP. There's no magic "spinning up" — you either hit a local daemon or a cloud endpoint, send {model, messages, options}, and get text back. For this spike I'd use Ollama (local): it's the on-prem, llama.cpp-family runtime we identified as the production sharp tool, so what you learn transfers directly; no API key; and it has a JSON mode. If ollama serve is running, you POST http://localhost:11434/api/chat with {"model": "llama3.1" (or any instruct model you've pulled), "messages": [...], "format": "json", "stream": false, "options": {"temperature": 0}}, and the JSON you want is in response ["message"]["content"] (as a string you still have to json.loads). urllib from the stdlib is enough — no new deps.

Three concepts that are the whole skill, each a deliberate choice:

  1. The system prompt is the component's contract, not chit-chat. You're not conversing; you're defining a function in English. It must state the job ("identify spans likely
//! Exploration of different strategies for handling optional/missing Neo4j node
//! properties in neo4rs 0.8.
//!
//! The problem: Neo4j nodes seeded at different times may or may not have a
//! given property. In Rust, we model this as `Option<String>`. But neo4rs's
//! `Node::get::<Option<String>>("words")` fails with `NoSuchProperty` when the
//! key is entirely absent from the node — the HashMap lookup fails before the
//! `Option` type parameter ever gets a chance to run.
//!
//! This binary exercises seven different approaches against live Neo4j data,
@phyllisstein
phyllisstein / lead-pipe.md
Last active December 2, 2025 00:18
Go go gadget idempotence

You're right to be confused! The lens composition actually does work in the order you expected - colorsLens first, then semanticLens, etc., ending with hoverLens.

The reason it looks backwards is that R.compose reads right-to-left for regular functions, but with lenses it's different:

How Lens Composition Works

When you compose lenses with R.compose, they execute in left-to-right order (the order written):

  1. colorsLens - focus on theme.colors
  2. semanticLens - within that, focus on semantic
@phyllisstein
phyllisstein / ublock-twitterneue.txt
Created May 19, 2024 15:15 — forked from beep/ublock-twitterneue.txt
uBlock Origin rules for new twitter website
# hides engage-y modules from the rightmost sidebar
twitter.com##[data-testid="sidebarColumn"] div[aria-label]
twitter.com##[data-testid="sidebarColumn"] div:has(> aside[aria-label])
x.com##[data-testid="sidebarColumn"] div[aria-label]
x.com##[data-testid="sidebarColumn"] div:has(> aside[aria-label])
# hides promoted tweets
twitter.com##article :has(svg[d="M20.75 2H3.25C2.007 2 1 3.007 1 4.25v15.5C1 20.993 2.007 22 3.25 22h17.5c1.243 0 2.25-1.007 2.25-2.25V4.25C23 3.007 21.993 2 20.75 2zM17.5 13.504c0 .483-.392.875-.875.875s-.875-.393-.875-.876V9.967l-7.547 7.546c-.17.17-.395.256-.62.256s-.447-.086-.618-.257c-.342-.342-.342-.896 0-1.237l7.547-7.547h-3.54c-.482 0-.874-.393-.874-.876s.392-.875.875-.875h5.65c.483 0 .875.39.875.874v5.65z"])
x.com##article :has(svg[d="M20.75 2H3.25C2.007 2 1 3.007 1 4.25v15.5C1 20.993 2.007 22 3.25 22h17.5c1.243 0 2.25-1.007 2.25-2.25V4.25C23 3.007 21.993 2 20.75 2zM17.5 13.504c0 .483-.392.875-.875.875s-.875-.393-.875-.876V9.967l-7.547 7.546c-.17.17-.395.256-.62.256s-.447-.086-.6
{
"slug": "punk-hardcore-photos-sunday-matinee",
"byline": [
{
"names": [
{
"twitter": "",
"facebook": "",
"name": "Caryn Rose",
"instagram": "",
[64290:1024/082914.178063:INFO:CONSOLE(83)] "Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' https://*.vscode-cdn.net 'nonce-icgVV3j6VgF5uX05ewOoIA==' 'unsafe-hashes' 'sha256-zCS+ubUbQ2s89oA2fBkOFRlQUjbq1DjjsiGY9OlmDMk=' 'sha256-0oUKC05+rMUna2WV/1dh4gYJXRAMAEtVgf+n8LpKnfE='". Either the 'unsafe-inline' keyword, a hash ('sha256-TMLnGHcHuaP1IGfOIlow4y9VuEmkzaBSGhTQHF7CzWM='), or a nonce ('nonce-...') is required to enable inline execution.
", source: https://file+.vscode-resource.vscode-cdn.net/tmp/code-git-lens-extensions/eamodio.gitlens-13.0.3/dist/webviews/settings.js (83)
@phyllisstein
phyllisstein / .dockerignore
Last active August 15, 2022 14:02
Dockerize Node app without installing or linking node_modules.
**/node_modules/**
**/.git/**
**/dist/**
import { babel, css } from '@nymag/configs/webpack/loaders/index.js'
import {
client,
development as developmentEnvironment,
} from '@nymag/configs/webpack/environments/index.js'
import {
context,
entrypoints,
resolveExtensions,
resolveModules,
require 'active_support/all'
map_recircs = {}
map_venues = {}
average_recirc = 0
MapStack.all.each do |map|
next unless map.map_cards.present?
title = map.title.parameterize(separator: '_').to_sym
@phyllisstein
phyllisstein / components.jsx
Last active July 12, 2022 15:03
Two patterns for sharing MapStack UI.
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ⭑ Approach Two ⭑ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
// ~~~~~~~~~~~~~~~~~~~~~ Component Components Component ~~~~~~~~~~~~~~~~~~~~~ //
/**
* Our package exposes a number of React components purpose-dedicated to
* building a map; the downstream app composes the React components we expose.
* The Unison component, not our code, would call ReactDOM::render. This is the
* pattern one normally sees with React libraries.
*/
import { MapsStack, Map, Pin } from '@voxmedia/maps-ui'