<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[alex nodeland]]></title><description><![CDATA[ai engineer and mathematician. agent systems, distributed infrastructure, and audio dsp. previously ceo of a supercomputing startup.]]></description><link>http://github.com/dylang/node-rss</link><generator>GatsbyJS</generator><lastBuildDate>Sun, 13 Sep 2026 22:49:18 GMT</lastBuildDate><item><title><![CDATA[StatusBar: Is It Down, or Is It Me?]]></title><description><![CDATA[Why I built a macOS menu bar app to watch the status pages I depend on, and the CLI, prompt glyph, and webhooks that grew around it.]]></description><link>https://alexnodeland.com/timeline/260913_statusbar/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/260913_statusbar/</guid><pubDate>Sun, 13 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;i depend on a lot of things i don&apos;t run. anthropic, github, cloudflare, whatever is underneath the thing i am shipping that afternoon. so when something misbehaves the first question is never &quot;what&apos;s the bug&quot;. it is &quot;is it me, or is it them&quot;, and answering it used to mean opening five status pages that each say &quot;operational&quot; a different way.&lt;/p&gt;
&lt;p&gt;statusbar is my answer to that. it lives in the menu bar, watches the pages i care about, and shows me the worst one at a glance.&lt;/p&gt;
&lt;p&gt;the thing that actually started it: no two providers agree on how to say &quot;broken&quot;. atlassian statuspage says &quot;degraded performance&quot;, incident.io has its own words, gatus just tells you an endpoint is down. i didn&apos;t want to keep five of these straight, so the app maps all of them onto four levels: operational, degraded, partial outage, major outage. the icon shows the worst one across everything i watch. green means i don&apos;t think about it. anything else means i open the popover. adding a source is pasting a url, and it detects the provider from that.&lt;/p&gt;
&lt;p&gt;i wanted the status in the terminal too, where i already am, so there is a cli that caches it on every poll and reading it costs nothing:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;statusbar wait npm &amp;#x26;&amp;#x26; npm publish
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;wait&lt;/code&gt; blocks until a service comes back, so i can hang a deploy off it instead of refreshing a page. &lt;code&gt;prompt&lt;/code&gt; prints a glyph i drop into starship or tmux, and a &lt;code&gt;.statusbar&lt;/code&gt; file in a repo narrows both down to just that project&apos;s upstreams. there is a widget, webhooks into slack, discord and teams, shortcuts, and an applescript dictionary.&lt;/p&gt;
&lt;p&gt;native swiftui, macos 26 and up. no electron, no dock icon, no telemetry. it talks to the status pages you add and nowhere else. free and open source.&lt;/p&gt;
&lt;p&gt;incident detail is only as good as the provider hands over. statuspage gives full timelines; incident.io and instatus expose less through their apis; gatus has no incident history at all and reports per-endpoint health instead. and it is macos-only.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/alexnodeland/StatusBar&quot;&gt;view on github&lt;/a&gt; · &lt;a href=&quot;https://alexnodeland.github.io/StatusBar/&quot;&gt;project site&lt;/a&gt; · &lt;a href=&quot;https://ournature.gumroad.com/l/statusbar&quot;&gt;support it&lt;/a&gt; · &lt;code&gt;brew tap alexnodeland/tap &amp;#x26;&amp;#x26; brew install --cask statusbar&lt;/code&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Chat Box Is a Language Model on Your Machine]]></title><description><![CDATA[A 1.2B model runs in your browser and answers questions from this site, with no server and no API key. How the retrieval works, what it costs, and which models did not make the cut.]]></description><link>https://alexnodeland.com/timeline/260726_in-browser-chat/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/260726_in-browser-chat/</guid><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;there is a chat box on this site. when you open it, your browser downloads a 760mb language model and runs it on your gpu. nothing is sent anywhere, because there is no server to send it to. it answers questions about me from the pages you are already reading.&lt;/p&gt;
&lt;p&gt;this is how it works, and what the numbers look like.&lt;/p&gt;
&lt;h2&gt;the shape of it&lt;/h2&gt;
&lt;p&gt;the first version put my entire cv, about 4,500 tokens, in front of every question. it also ran two throwaway yes/no generations before each answer, to decide whether the question was on-topic at all. three model calls per question, and it knew nothing about the blog or the projects page.&lt;/p&gt;
&lt;p&gt;now the site is chunked into 95 passages at build time and embedded into a 111kb file that ships with the page. your browser embeds only your question, one forward pass over about fifteen tokens and roughly two milliseconds, then searches that index.&lt;/p&gt;
&lt;p&gt;the search is hybrid, and it needs to be. this corpus is one person&apos;s life, so everything in it is semantically adjacent to everything else; a 384-dimension vector cannot reliably separate &quot;musiio&quot; from &quot;influize&quot;. exact term matching carries the proper nouns, embeddings carry the paraphrases (&quot;where did he go to school&quot;), and reciprocal rank fusion combines them without needing the two score scales to be comparable, which they are not.&lt;/p&gt;
&lt;p&gt;then there is a gate. if nothing in the index is close enough to the question, there is nothing to ground an answer in, so it says so, in about a tenth of a second and without running the model. that gate replaced both classifier calls and is more accurate than they were. three generations per turn became one.&lt;/p&gt;
&lt;p&gt;what reaches the model is a short instruction block, the passages that came back, and your question. it cites what it used, and those citations become links under the answer.&lt;/p&gt;
&lt;h2&gt;what it costs&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;download, once&lt;/td&gt;
&lt;td&gt;760mb, cached after&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cold load&lt;/td&gt;
&lt;td&gt;~21s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;search&lt;/td&gt;
&lt;td&gt;~26ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reading the prompt&lt;/td&gt;
&lt;td&gt;~830ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;writing the answer&lt;/td&gt;
&lt;td&gt;~540ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;a refused question&lt;/td&gt;
&lt;td&gt;~0.1s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;prefill dominates decode here, about 2:1. tokens per second is the number usually quoted for these models, and for a grounded chat it is the smaller cost.&lt;/p&gt;
&lt;h2&gt;the cache&lt;/h2&gt;
&lt;p&gt;the instruction block is identical on every turn, so it is run through the model once at load and its key-value cache is reused. that is worth about 420ms a turn, a quarter of the total.&lt;/p&gt;
&lt;p&gt;the cached part was 975 tokens and stayed 975 tokens no matter how long the conversation ran, so the &lt;em&gt;share&lt;/em&gt; of each prompt it covered went down as you talked, from 55% to 51%. a cache that stops growing matters less the longer the conversation runs.&lt;/p&gt;
&lt;p&gt;a cache can only skip a prefix that matches token for token, so what it can cover is decided by the order the prompt is assembled in. more of the prompt is fixed than it first appears: earlier questions have their retrieved passages stripped out, and earlier answers have their citation markers removed, and both of those edits happen exactly once, when a turn stops being the current one. after that the history is frozen, so it can all be carried forward, and the cached region grows by one exchange per turn instead of standing still. seven turns in it covers 1,290 tokens rather than 975, and the conversation is prefilling about a quarter fewer tokens than it was.&lt;/p&gt;
&lt;p&gt;two other arrangements measure worse. keeping every turn&apos;s passages in the prompt caches the most, but spends the savings carrying stale context, which is what used to make it answer turn four out of turn one&apos;s passages. pinning the passages to a fixed position so a repeated search matches came out no better than doing nothing, because retrieval has to return the same set in the same order for that to pay, which is rare in practice.&lt;/p&gt;
&lt;h2&gt;model selection&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;smaller is not faster.&lt;/strong&gt; a model with half the parameters ran two to four times slower, because it wrote several hundred words where the larger one writes forty. decoding cost is per token, so verbosity dominates parameter count.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;the fast one fabricates.&lt;/strong&gt; a 230m model loads in nine seconds instead of twenty-one and answers in under a second, but asked whether i know a language that appears nowhere in my skills list, with that list in its context, it says yes. asked whether i worked at a company i never worked at, it says yes to that too. few-shot examples showing it declining exactly that kind of question, two hundred tokens above the point of use, did not change the behavior. at this size the model accepts the premise of whatever it is asked.&lt;/p&gt;
&lt;p&gt;the same examples degraded the larger model. one of them mentioned musiio, and that was enough for musiio to start appearing in unrelated answers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;reasoning does not help.&lt;/strong&gt; the step-by-step variant of the same model scored worse in every category and took four times as long, spending 658 tokens reasoning before the visitor saw a word. reading four retrieved passages is not a reasoning problem. the answer is already in the context.&lt;/p&gt;
&lt;p&gt;so the lineup is one model.&lt;/p&gt;
&lt;h2&gt;the evals&lt;/h2&gt;
&lt;p&gt;there is a graded battery of 68 questions covering grounded lookups, multi-passage synthesis, follow-ups that depend on the previous turn, questions built on false premises, things that must be refused, and things that must &lt;em&gt;not&lt;/em&gt; be refused.&lt;/p&gt;
&lt;p&gt;the first version of the battery had twelve cases and the model passed all of them, which made it useless for comparing versions. a saturated test can only show that something broke.&lt;/p&gt;
&lt;p&gt;expanding it exposed a class of failure the small set never touched: false premises. asked where i got my mba (i don&apos;t have one), the model reported a doctorate i never finished. asked how old i am, it worked it out from my job dates and offered &quot;early thirties.&quot; asked why i left a company, it invented a motive and hedged it with &quot;probably.&quot;&lt;/p&gt;
&lt;p&gt;it currently scores 55/68. the remaining failures are dates it gets wrong, gibberish it answers instead of refusing, and a couple of roleplay prompts that talk it out of its job. each case is scored on a scale rather than pass/fail, with a note on every lost point.&lt;/p&gt;
&lt;h2&gt;what it still gets wrong&lt;/h2&gt;
&lt;p&gt;ask it &quot;archanan?&quot;, just the word, and it recites where that company sits in my timeline instead of telling you what it was. the answer is coming from the career summary that sits in every prompt, and suppressing it breaks the follow-up questions the summary is there to serve.&lt;/p&gt;
&lt;p&gt;if your browser has no webgpu, it does not work at all, and it says so. it can&apos;t fall back to your cpu, and the reason is narrower than &quot;too slow&quot;, though it is also too slow. every compressed version of this model stores its vocabulary in a format the cpu engine cannot read. the gpu engine can, which is why one works and the other does not. a faster cpu engine would not fix it either: the best one available runs a model this size at two to five words a second.&lt;/p&gt;
&lt;p&gt;it also will not tell you anything that is not on this site, which is most things. that is by design. it can tell you where i worked and what i have built. it cannot tell you what i think about your architecture. for that, &lt;a href=&quot;mailto:alex@ournature.studio&quot;&gt;email me&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[What Is Running Behind This Page]]></title><description><![CDATA[Six simulations render the backgrounds on this site: Conway's Life, a simulated-annealing graph search, an FM synthesizer, A*, and a finite-difference PDE solver. What each one computes and what the controls do.]]></description><link>https://alexnodeland.com/timeline/250928_interactive-algorithm-visualizations/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/250928_interactive-algorithm-visualizations/</guid><pubDate>Sun, 28 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;the backgrounds on this site are simulations, not video loops. every one is computed per frame in your browser. the landscape icon in the corner opens a panel with the parameters for whichever is on screen, and they cycle every twelve seconds unless you turn that off.&lt;/p&gt;
&lt;p&gt;six of them, in cycle order:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;background&lt;/th&gt;
&lt;th&gt;what it is&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;cellular automaton&lt;/td&gt;
&lt;td&gt;conway&apos;s life, plus five other b/s rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;simple waves&lt;/td&gt;
&lt;td&gt;three summed sine waves&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;job scheduling&lt;/td&gt;
&lt;td&gt;simulated annealing over a clustered graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dual fm oscillator&lt;/td&gt;
&lt;td&gt;a working fm synth, oscilloscope and spectrogram&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;shortest path&lt;/td&gt;
&lt;td&gt;dijkstra, a*, and greedy search, side by side&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pde solver&lt;/td&gt;
&lt;td&gt;finite-difference heat and wave equations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;&lt;a id=&quot;cellular-automata&quot;&gt;&lt;/a&gt;cellular automaton&lt;/h2&gt;
&lt;p&gt;a grid of cells, a rule, and a state buffer stepped one generation at a time. each cell counts its eight neighbors on a wrapping torus, then lives, dies, or is born according to the rule, which is conway&apos;s b3/s23 by default, with highlife, maze, coral, day &amp;#x26; night and seeds in the dropdown.&lt;/p&gt;
&lt;p&gt;the shader only draws; the rule runs on a real buffer. newborn cells take the newborn color and shift toward the established color the longer they survive, and links are drawn between live neighbors, the same eight-cell neighborhood the rule is evaluated over.&lt;/p&gt;
&lt;p&gt;random soup under conway settles into still lifes and period-two oscillators within a couple of hundred generations, which is too static for a background. &lt;code&gt;perturbation rate&lt;/code&gt; flips a small fraction of cells each step to keep things moving. set it to zero to watch it stall.&lt;/p&gt;
&lt;h2&gt;&lt;a id=&quot;wave-interference&quot;&gt;&lt;/a&gt;simple waves&lt;/h2&gt;
&lt;p&gt;three sine waves summed in a shader. one runs along x, one along y at 0.8× the frequency, one diagonally at 0.6×, each drifting at a different rate. color maps amplitude: bright where they reinforce, dark where they cancel.&lt;/p&gt;
&lt;p&gt;it is nothing but superposition. interference is the mechanism behind a great deal of signal processing, and it takes three lines of arithmetic. i spent a couple of years on wavelet bases for audio compression at stony brook, and what stayed with me is how little machinery the underlying physics needs.&lt;/p&gt;
&lt;p&gt;turn &lt;code&gt;wave frequency&lt;/code&gt; up and &lt;code&gt;wave speed&lt;/code&gt; down to freeze the interference pattern in place.&lt;/p&gt;
&lt;h2&gt;&lt;a id=&quot;job-scheduling&quot;&gt;&lt;/a&gt;job scheduling&lt;/h2&gt;
&lt;p&gt;the most interesting one, and the worst named.&lt;/p&gt;
&lt;p&gt;it builds a clustered graph: nodes grouped into tight clusters with dense, high-bandwidth links inside each cluster and sparse, high-latency links between them. roughly the shape of a real datacenter. then it searches for the subgraph of size &lt;em&gt;n&lt;/em&gt; with the highest total conductivity, the best-connected group of that size.&lt;/p&gt;
&lt;p&gt;that search is simulated annealing with an exponential cooling schedule. it proposes a swap, accepts it outright if it scores better, and accepts it with a temperature-dependent probability if it scores worse. early on, while it is hot, it takes bad trades freely and wanders. as the temperature drops it stops accepting losses and settles. the two highlight colors are separate things: one is the candidate set it is considering right now, the other is the best set it has found so far. early on they diverge constantly. near the end they lock together.&lt;/p&gt;
&lt;p&gt;the layout is force-directed and running at the same time, so the graph is still settling while the search runs over it.&lt;/p&gt;
&lt;p&gt;set &lt;code&gt;number of clusters&lt;/code&gt; to 2 and &lt;code&gt;requested subgraph size&lt;/code&gt; to something close to one cluster&apos;s worth of nodes, then watch how long it takes to commit to one side.&lt;/p&gt;
&lt;h2&gt;&lt;a id=&quot;fm-synthesis&quot;&gt;&lt;/a&gt;dual fm oscillator&lt;/h2&gt;
&lt;p&gt;a working synthesizer. two oscillators, one modulating the other&apos;s phase. that is all fm synthesis is, and it is how a dx7 could make a bell out of two sine waves when a subtractive synth needed a filter bank. the signal then runs through filter, delay, distortion and reverb.&lt;/p&gt;
&lt;p&gt;top display is an oscilloscope: amplitude against time. bottom is a spectrogram: frequency low-to-high, scrolling left-to-right, brightness as intensity. every bin is a hann-windowed discrete fourier transform of the same samples the oscilloscope is drawing, so the sidebands, the harmonic series of a square wave, and the sum and difference tones from the ring modulator are all measured rather than drawn. seeing one signal in both domains at once shows what fm does to a spectrum.&lt;/p&gt;
&lt;p&gt;push &lt;code&gt;vco 1 fm amount&lt;/code&gt; up slowly and watch the sidebands appear in pairs either side of the carrier, spaced at the modulator frequency.&lt;/p&gt;
&lt;p&gt;it makes sound. hold the speaker button in the settings panel.&lt;/p&gt;
&lt;p&gt;i built synthesizers as artist in residence at cewit for a year, mostly analog.&lt;/p&gt;
&lt;h2&gt;&lt;a id=&quot;pathfinding&quot;&gt;&lt;/a&gt;shortest path&lt;/h2&gt;
&lt;p&gt;seeded random graph, real priority frontier, and one slider that changes which algorithm you are running.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;heuristic weight&lt;/code&gt; scales the heuristic term in &lt;code&gt;f = g + w·h&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;w = 0&lt;/strong&gt;: the heuristic vanishes and it is dijkstra. explores outward in every direction equally. always finds the optimal path, looks at far more of the graph than it needed to.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;w = 1&lt;/strong&gt;: a*. the heuristic is admissible, so the path is still optimal, but exploration stretches toward the goal instead of spreading evenly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;w &gt; 1&lt;/strong&gt;: greedy. it over-trusts the heuristic, drives almost straight at the goal, and gives up the optimality guarantee to do it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;watch the shape of the explored region: a circle, then an ellipse, then a corridor. that is the optimality-versus-effort tradeoff drawn as a shape, and it is why i kept this one in the rotation.&lt;/p&gt;
&lt;p&gt;turn &lt;code&gt;steps per second&lt;/code&gt; down to about 5 to watch the frontier expand node by node.&lt;/p&gt;
&lt;h2&gt;&lt;a id=&quot;pde-solver&quot;&gt;&lt;/a&gt;pde solver&lt;/h2&gt;
&lt;p&gt;explicit finite differences on a grid, solving either the heat equation &lt;code&gt;∂u/∂t = α∇²u&lt;/code&gt; or the wave equation &lt;code&gt;∂²u/∂t² = c²∇²u&lt;/code&gt;. the laplacian is a five-point stencil; heat uses forward-time centered-space, wave uses a centered second difference in time. grid runs at 64², 128² or 256².&lt;/p&gt;
&lt;p&gt;the parameters that change the physics rather than the look are &lt;code&gt;boundary condition&lt;/code&gt; and &lt;code&gt;initial condition&lt;/code&gt;. dirichlet fixes the edge value, so waves reflect inverted. neumann sets the edge derivative to zero, so they reflect upright. periodic wraps, so anything leaving the right edge arrives at the left. pick a gaussian pulse on the wave equation and switch between the three. the difference in reflection is immediate. it is the clearest demonstration of boundary conditions i know of.&lt;/p&gt;
&lt;p&gt;you cannot make it explode. explicit schemes are only conditionally stable. heat needs &lt;code&gt;α·dt·(1/dx² + 1/dy²) ≤ 0.5&lt;/code&gt; and wave needs the cfl condition &lt;code&gt;c·dt·√(1/dx² + 1/dy²) ≤ 1&lt;/code&gt;, so the timestep is clamped to the stable maximum before every step. push thermal diffusivity to its limit and the simulation slows down rather than diverging.&lt;/p&gt;
&lt;h2&gt;on the whole thing&lt;/h2&gt;
&lt;p&gt;they render to webgl or canvas depending on the background, pause when the tab is hidden, and cycle on a twelve-second timer with a 1.2-second crossfade. every parameter you change is live.&lt;/p&gt;
&lt;p&gt;why they exist: a static background is a wasted surface, and i wanted somewhere to put the numerical methods i do not get to write at work.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Fugue: Monadic Probabilistic Programming for Rust]]></title><description><![CDATA[A probabilistic programming library for Rust built around a monad: models compose in direct style, and pluggable interpreters decide what running one means.]]></description><link>https://alexnodeland.com/timeline/250819_fugue/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/250819_fugue/</guid><pubDate>Tue, 19 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;a probabilistic programming library for rust, built around a monad.&lt;/p&gt;
&lt;p&gt;a model in fugue is a &lt;code&gt;Model&amp;#x3C;T&gt;&lt;/code&gt; value that you compose in direct style with &lt;code&gt;bind&lt;/code&gt; and &lt;code&gt;map&lt;/code&gt;. what that composition &lt;em&gt;means&lt;/em&gt; is decided later, by the interpreter you hand it to: sample from the prior, replay a trace, score it, or run mcmc, hmc, smc, variational inference or abc over it. separating the model from the inference is the main idea. in most probabilistic languages the algorithm is entangled with how you declare the model, so trying a different sampler means rewriting the thing you were trying to hold constant.&lt;/p&gt;
&lt;p&gt;the distributions are typed with their natural return types. bernoulli gives you a &lt;code&gt;bool&lt;/code&gt;, poisson and binomial give you &lt;code&gt;u64&lt;/code&gt;, categorical gives you a &lt;code&gt;usize&lt;/code&gt;, rather than everything collapsing to &lt;code&gt;f64&lt;/code&gt; and being cast back at the point of use, which is where the off-by-one bugs come from. seventeen distributions, all with validated parameters, and log-space arithmetic throughout so that multiplying a few thousand small probabilities does not quietly become zero.&lt;/p&gt;
&lt;p&gt;there are macros for do-notation (&lt;code&gt;prob!&lt;/code&gt;) and vectorization (&lt;code&gt;plate!&lt;/code&gt;), because monadic code in rust is unreadable without them.&lt;/p&gt;
&lt;p&gt;it is 0.2.x: pre-1.0, no semver guarantees yet, one primary maintainer. extensively tested, including property-based tests and statistical regressions against closed-form posteriors, but that is not the same as production-ready. pin an exact version and read the changelog before upgrading.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/alexnodeland/fugue&quot;&gt;view on github&lt;/a&gt; · &lt;a href=&quot;https://fugue.run&quot;&gt;learn it interactively at fugue.run&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Finance Crew: AI-Powered Financial Analysis]]></title><description><![CDATA[A CrewAI system for market analysis: agents that pull data, develop a strategy, and separately assess the risk of running it.]]></description><link>https://alexnodeland.com/timeline/240809_finance-crew/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/240809_finance-crew/</guid><pubDate>Fri, 09 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;a crewai system for market analysis: agents that pull financial data, work a strategy up against it, and assess the risk of running it.&lt;/p&gt;
&lt;p&gt;the useful idea is the separation between the agent that proposes and the agent that assesses. a system that only proposes always sounds confident, because a fluent argument for a trade and a good trade come out of the same machinery. giving risk assessment its own step, with its own context and no stake in the proposal, is a cheap correction for that.&lt;/p&gt;
&lt;p&gt;it is a study in multi-agent design, not financial advice, and i would treat any number it produces as a prompt for your own analysis rather than a conclusion.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/alexnodeland/finance-crew&quot;&gt;view on github&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Vanilla ReAct: Minimalist Agent Framework]]></title><description><![CDATA[A ReAct agent in Python with no framework underneath it: the loop, in the open, against the OpenAI API.]]></description><link>https://alexnodeland.com/timeline/240709_vanilla-react/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/240709_vanilla-react/</guid><pubDate>Tue, 09 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;a react agent in python with no framework underneath it, written when every agent library was adding abstraction faster than i could read it.&lt;/p&gt;
&lt;p&gt;react is a small idea. the model reasons about what to do, takes an action, observes the result, and repeats until it decides it is finished. that is a loop, a prompt template, and a way to dispatch tool calls, and it fits on a page against the openai api.&lt;/p&gt;
&lt;p&gt;the repository is that page, kept readable. it is not competing with the frameworks; it is meant to be read first, so that when you adopt one you can tell which parts solve your problem and which parts solve the framework&apos;s. a lot of what gets called an agent is this loop with retries and logging around it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/alexnodeland/vanilla-react&quot;&gt;view on github&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Crewlit: Multi-Agent AI Systems in Your Browser]]></title><description><![CDATA[CrewAI in a browser: define agents, tasks and crews in a Streamlit UI instead of a Python file.]]></description><link>https://alexnodeland.com/timeline/240706_crewlit/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/240706_crewlit/</guid><pubDate>Sat, 06 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;crewai in a browser, so that building a multi-agent system does not have to start with a python file.&lt;/p&gt;
&lt;p&gt;it is a streamlit app for defining agents, tasks and crews, wiring them together, and running them with the output streaming back as it happens. you can do all of it from a script. what the app removes is the hour of boilerplate between understanding what a multi-agent system is and having one running.&lt;/p&gt;
&lt;p&gt;a crew is a graph of agents with dependencies, and most people&apos;s first instinct is to build it as a list. the ui mostly exists to make the graph visible before you run it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/alexnodeland/crewlit&quot;&gt;view on github&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Resume Crew: AI-Powered Career Tools]]></title><description><![CDATA[A CrewAI system that tailors a resume to a specific posting and prepares you for the interview that follows.]]></description><link>https://alexnodeland.com/timeline/240630_resume-crew/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/240630_resume-crew/</guid><pubDate>Sun, 30 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;a crewai system that tailors a resume to a specific job posting, then prepares you for the interview that follows.&lt;/p&gt;
&lt;p&gt;the agents split the work rather than sharing it. one reads the posting and separates the real requirements from the boilerplate. one rewrites the resume against that reading. one generates the questions you should expect given the gap between the two.&lt;/p&gt;
&lt;p&gt;the separation is why it works better than one long prompt. critiquing a resume and rewriting it are different jobs, and a model asked to do both at once tends to soften the critique to fit the rewrite. splitting them means the criticism gets written down before anything acts on it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/alexnodeland/resume-crew&quot;&gt;view on github&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Musiio Acquired by SoundCloud]]></title><description><![CDATA[SoundCloud acquired Musiio, the Singapore music-AI company founded out of the same Entrepreneur First cohort as Archanan. I was in the office the day it was signed.]]></description><link>https://alexnodeland.com/timeline/220503_musiio-soundcloud/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/220503_musiio-soundcloud/</guid><pubDate>Tue, 03 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;on 3 may 2022 soundcloud acquired musiio. i was in the office the day the papers were signed.&lt;/p&gt;
&lt;p&gt;musiio&apos;s ai listens to music, which is harder than it sounds: audio reference search, automated tagging, playlisting, aimed at catalogues holding more tracks than any person will ever get through. hazel savage and aron pettersson founded it in june 2018, out of &lt;a href=&quot;/timeline/180724_ef-investor-day/&quot;&gt;entrepreneur first&apos;s third singapore cohort&lt;/a&gt;, the same cohort archanan came out of, pitching at the same investor day. i had been tech lead there for about a year when the deal closed.&lt;/p&gt;
&lt;figure&gt;
  &lt;img
    src=&quot;/images/2022-11_hazel-savage-web-summit.webp&quot;
    alt=&quot;Hazel Savage seated on a conference stage mid-sentence, hands raised as she explains something, against a pale blue Web Summit backdrop.&quot;
    width=&quot;2000&quot;
    height=&quot;1387&quot;
    loading=&quot;lazy&quot;
    decoding=&quot;async&quot;
  /&gt;
  &lt;figcaption&gt;
    hazel six months later, on the music notes stage at web summit, billed as
    vp of music intelligence at musiio by soundcloud. photo by ben mcshane /
    web summit via sportsfile,
    &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:2022_-_Music_Notes_BE6_8451_(52476395146).jpg&quot;&gt;cc by 2.0&lt;/a&gt;.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;hazel and aron went across as vp of music intelligence and vp of ai and machine learning, and soundcloud kept the team on. i went over to the soundcloud office in the states as incoming director of engineering for music intelligence. four years from a desk in a cohort room to this. congratulations to hazel, to aron, and to everyone who built it.&lt;/p&gt;
&lt;p&gt;the team&apos;s next move was berlin. i decided not to go, and left in november.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20220503150256/http://press.soundcloud.com/213899-soundcloud-acquires-cutting-edge-music-ai-company-musiio&quot;&gt;soundcloud&apos;s announcement&lt;/a&gt; · &lt;a href=&quot;https://soundcloud.com/&quot;&gt;soundcloud&lt;/a&gt; · &lt;a href=&quot;https://web.archive.org/web/20220128123732/https://musiio.com/&quot;&gt;musiio, while it was still musiio&lt;/a&gt; (the domain points at soundcloud now)&lt;/p&gt;</content:encoded></item><item><title><![CDATA[QCSim: Quantum Circuit Simulator in Python]]></title><description><![CDATA[A small quantum circuit simulator in Python, written to understand the subject rather than to be fast at it.]]></description><link>https://alexnodeland.com/timeline/200817_qcsim-quantum-simulator/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/200817_qcsim-quantum-simulator/</guid><pubDate>Mon, 17 Aug 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;a quantum circuit simulator in python, written to understand the subject rather than to be fast at it.&lt;/p&gt;
&lt;p&gt;it implements the fundamental gates and lets you assemble and run circuits, which is enough to build up the standard algorithms and watch the state vector do what the textbook says it does. simulating a quantum circuit is linear algebra on a vector of 2^n amplitudes, where gates are unitary matrices and measurement is sampling from the squared magnitudes, and there is not much more to it than that.&lt;/p&gt;
&lt;p&gt;the 2^n is also why simulation is no substitute for hardware: thirty qubits is a billion amplitudes.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/alexnodeland/QCSim&quot;&gt;view on github&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Try Before You Buy? Test Driving a Supercomputer System]]></title><description><![CDATA[A piece for HPCwire on emulating a supercomputer before you buy one, turning procurement from a bet on benchmarks into a question you can answer with your own code.]]></description><link>https://alexnodeland.com/timeline/191007_hpcwire-feature/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/191007_hpcwire-feature/</guid><pubDate>Mon, 07 Oct 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;a follow-up piece for hpcwire, this one about procurement rather than development.&lt;/p&gt;
&lt;p&gt;buying a supercomputer means committing tens of millions to a configuration chosen largely from benchmarks that are not your workload. get it wrong in one direction and you have paid for capability that sits idle; get it wrong in the other and the machine is saturated the month it arrives. the usual mitigations are vendor benchmarks, reference customers, a proof of concept on last generation&apos;s hardware, and none of them tell you how your own codes will behave on this machine.&lt;/p&gt;
&lt;p&gt;emulating the system first turns that into an empirical question. run the real applications against a digital twin of the proposed configuration and find out whether you are short on interconnect bandwidth or on node count, before the purchase order rather than after. that helps the vendor as much as the buyer: most of the risk in a deal that size is a customer discovering eighteen months later that they bought the wrong shape of machine, and unhappy reference customers are expensive.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.hpcwire.com/2019/10/07/try-before-you-buy-test-driving-a-supercomputer-system/&quot;&gt;read the full article&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Singapore Startup Hatches At-Scale HPC Dev Cloud]]></title><description><![CDATA[HPCwire covers Archanan's emergence from stealth: a cloud platform that emulates a target supercomputer so you can develop and debug at full scale.]]></description><link>https://alexnodeland.com/timeline/190426_archanan-launch/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/190426_archanan-launch/</guid><pubDate>Fri, 26 Apr 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;hpcwire covered our beta launch, the first detailed account of what archanan did.&lt;/p&gt;
&lt;p&gt;the problem we were built around: most supercomputing centers allocate ten percent or less of the machine to development work. if your production run needs thirty thousand cores, you are writing and debugging that code somewhere much smaller and hoping. plenty of organizations have no on-premise cycles for development at all, and anyone evaluating an architecture they do not own yet has nowhere to try it.&lt;/p&gt;
&lt;p&gt;what we sold was a functional replica. you develop against an emulation of your target machine&apos;s topology and interconnect, at the core count you will actually run on, through a web ide with a parallel debugger attached. it is explicitly not a performance model, since the layers of virtualization mean the timings are not the production timings, but it answers the question that burns allocation: does the code run at scale at all, and how does mpi behave when it does. at launch you could target emulated systems including nscc singapore&apos;s aspire-1, or specify a machine that did not exist yet.&lt;/p&gt;
&lt;p&gt;lukasz orlowski and i founded it in february 2018, raised a seed round led by sginnovate, and had john gustafson, of gustafson&apos;s law, as lead scientific advisor.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.hpcwire.com/2019/04/26/singapore-startup-hatches-hpc-dev-cloud/&quot;&gt;read the full article&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Supercomputing Shouldn't Be Rocket Science]]></title><description><![CDATA[A piece for Asian Scientist arguing that the hard part of supercomputing is not the computing but the gap between a working laptop simulation and code that survives at scale.]]></description><link>https://alexnodeland.com/timeline/190301_hpc-accessibility/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/190301_hpc-accessibility/</guid><pubDate>Fri, 01 Mar 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;a piece for asian scientist, written while running archanan, arguing that the hard part of supercomputing is not the computing.&lt;/p&gt;
&lt;p&gt;picture a researcher with a simulation that works on their laptop and an allocation on a national machine. between those two things sits weeks of work that has nothing to do with their science: mpi topologies, schedulers, queue etiquette, and the first genuinely large run is usually also the first time anyone finds out whether the code scales. that run is expensive, and when it fails it usually fails for a reason that has nothing to do with the physics.&lt;/p&gt;
&lt;p&gt;the argument is that this gap is an engineering problem, not a fact of nature, and that treating it as a rite of passage keeps the field closed to anyone who does not already know the folklore. domain scientists should be able to spend their allocation on science, not on discovering that their halo exchange deadlocks above four thousand ranks.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.asianscientist.com/2019/03/features/supercomputing-shouldnt-be-rocket-science/&quot;&gt;read the full article&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Archanan in Ho Chi Minh City]]></title><description><![CDATA[Opening an Archanan engineering office at The Hive in Thảo Điền, five months after the EF investor day, and flying down every month until covid closed the borders.]]></description><link>https://alexnodeland.com/timeline/181215_archanan-ho-chi-minh/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/181215_archanan-ho-chi-minh/</guid><pubDate>Sat, 15 Dec 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;archanan opened an office in ho chi minh city in december 2018, five months after &lt;a href=&quot;/timeline/180724_ef-investor-day/&quot;&gt;the investor day&lt;/a&gt;, and after a few other spots settled at &lt;a href=&quot;https://thehive.com.vn/&quot;&gt;the hive in thảo điền&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;we built the team out to five engineers. every month i flew down and worked from the office with them rather than managing it from singapore, and that held until covid closed the borders.&lt;/p&gt;
&lt;figure&gt;
  &lt;img
    src=&quot;/images/ho-chi-minh-city.webp&quot;
    alt=&quot;Ho Chi Minh City seen across the Saigon River: the district one skyline, a cable-stayed bridge, and a tower under construction at the right.&quot;
    width=&quot;2000&quot;
    height=&quot;895&quot;
    loading=&quot;lazy&quot;
    decoding=&quot;async&quot;
  /&gt;
  &lt;figcaption&gt;
    ho chi minh city from across the saigon river. photo by
    &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Ho_Chi_Minh_City_Skyline.jpg&quot;&gt;pimnl&lt;/a&gt;,
    cc0.
  &lt;/figcaption&gt;
&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Archanan at EF Singapore Investor Day]]></title><description><![CDATA[The three-minute Archanan pitch that closed Entrepreneur First's third Singapore cohort, arguing that access to a supercomputer is a developer tooling problem.]]></description><link>https://alexnodeland.com/timeline/180724_ef-investor-day/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/180724_ef-investor-day/</guid><pubDate>Tue, 24 Jul 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;entrepreneur first runs its singapore program in cohorts, and each one ends with an investor day. twenty-three companies pitched at the end of efsg3 on 17 july 2018, all of them built from scratch since the cohort opened in january. this is the three minutes archanan got.&lt;/p&gt;
&lt;figure&gt;
  &lt;img
    src=&quot;/images/2018-07_ef-investor-day.webp&quot;
    alt=&quot;Alex Nodeland sitting in the darkened auditorium before pitching, hands clasped, wearing an Archanan t-shirt.&quot;
    width=&quot;2000&quot;
    height=&quot;1333&quot;
    loading=&quot;lazy&quot;
    decoding=&quot;async&quot;
  /&gt;
  &lt;figcaption&gt;
    backstage, waiting to go on. photo by
    &lt;a href=&quot;https://medium.com/entrepreneurs-first/behind-the-scenes-at-efsg3-investor-day-b665dd21ec27&quot;&gt;entrepreneur first&lt;/a&gt;.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;supercomputers solve problems that nothing else can, from aircraft design to the behavior of a single cell, and almost nobody can use them. what stops people is the development loop. you book a slot on the machine months ahead, write your code on a laptop while you wait, and find out on the day that it does not run at scale. the only place to develop code for a supercomputer is on a supercomputer, and leaving one switched on costs tens of thousands of dollars a day.&lt;/p&gt;
&lt;p&gt;so we proposed a machine in the cloud that looks and behaves like the one you are targeting, at a tenth of the cost, with the tools built for it and nothing to install beyond a browser. by then that meant pilots with research groups in singapore, a deal in progress with a supercomputing center, and john gustafson advising.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=svnD72vdk18&quot;&gt;watch the pitch&lt;/a&gt; · &lt;a href=&quot;https://medium.com/entrepreneurs-first/behind-the-scenes-at-efsg3-investor-day-b665dd21ec27&quot;&gt;ef&apos;s photos from the day&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Moving to Singapore]]></title><description><![CDATA[Leaving for Singapore on 12 January 2018 for Entrepreneur First's third cohort, on the recommendation of two friends: one who had already been through it, and one who came with me.]]></description><link>https://alexnodeland.com/timeline/180112_moving-to-singapore/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/180112_moving-to-singapore/</guid><pubDate>Fri, 12 Jan 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;i moved to singapore on 12 january 2018, before entrepreneur first&apos;s third singapore cohort opened.&lt;/p&gt;
&lt;p&gt;two people are why. łukasz orłowski, who i met at stony brook and &lt;a href=&quot;/timeline/170515_leaving-the-phd/&quot;&gt;worked with at scala&lt;/a&gt;, and who was joining the same cohort. and my friend martin sawtell, who had been through the second cohort himself, and before that spent a decade at lucasfilm doing visual effects, on the dynamics and rendering side. martin had done it himself before recommending it.&lt;/p&gt;
&lt;p&gt;singapore was also where the machines were. i had been talking with people at nscc for a while by then, and moving there did not end that relationship so much as put it in the same time zone. one-north held a*star&apos;s institute of high performance computing and its computational resource centre too. research groups there gave letters of intent, and nscc&apos;s aspire 1 became a machine archanan modeled. &lt;a href=&quot;/timeline/180724_ef-investor-day/&quot;&gt;six months later&lt;/a&gt; łukasz and i were pitching archanan.&lt;/p&gt;
&lt;figure&gt;
  &lt;img
    src=&quot;/images/fusionopolis-one-north.webp&quot;
    alt=&quot;Looking up at the curved blue-green glass towers of Fusionopolis at one-north, Singapore, against a bright sky.&quot;
    width=&quot;1900&quot;
    height=&quot;1425&quot;
    loading=&quot;lazy&quot;
    decoding=&quot;async&quot;
  /&gt;
  &lt;figcaption&gt;
    fusionopolis, at one-north, where a*star&apos;s institute of high performance
    computing and computational resource centre were. photo by
    &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Fusionopolis,_One-North,_Singapore_(3321960431).jpg&quot;&gt;yeowatzup&lt;/a&gt;,
    cc by 2.0.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://www.joinef.com/&quot;&gt;entrepreneur first&lt;/a&gt; · &lt;a href=&quot;https://www.nscc.sg/&quot;&gt;nscc singapore&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Grand Central Tech]]></title><description><![CDATA[Scala Computing got into the Grand Central Tech accelerator in August 2017 and moved from the CEWIT office to 335 Madison Avenue, going from seven people to fifteen.]]></description><link>https://alexnodeland.com/timeline/170801_grand-central-tech/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/170801_grand-central-tech/</guid><pubDate>Tue, 01 Aug 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;scala got into grand central tech in august 2017, and the company moved from &lt;a href=&quot;/timeline/170515_leaving-the-phd/&quot;&gt;the office at cewit&lt;/a&gt; to 335 madison avenue, third floor, across the street from grand central terminal.&lt;/p&gt;
&lt;p&gt;we went from seven people to fifteen.&lt;/p&gt;
&lt;figure&gt;
  &lt;img
    src=&quot;/images/335-madison-avenue.webp&quot;
    alt=&quot;335 Madison Avenue seen from across East 42nd Street: a bronze-and-blue glass tower stepping back as it rises, with pedestrians and green construction hoarding along the sidewalk at its base.&quot;
    width=&quot;1100&quot;
    height=&quot;1662&quot;
    loading=&quot;lazy&quot;
    decoding=&quot;async&quot;
  /&gt;
  &lt;figcaption&gt;
    335 madison avenue, from across 42nd street. photo by
    &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:335_Mad_Av_across_42_%26_Vanderbilt_jeh.jpg&quot;&gt;jim henderson&lt;/a&gt;,
    cc by 3.0.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;the product had moved as well. it started as spare office machines linked into a grid; by that summer the pitch was the job scheduler module, which used spectral graph theory to decide how work was distributed across a cluster, and it was being sold against public clouds, private clouds and bare metal.&lt;/p&gt;
&lt;p&gt;we also did work for new york city&apos;s department of environmental protection.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20170929171513/https://grandcentraltech.com/&quot;&gt;grand central tech, as it looked then&lt;/a&gt; · &lt;a href=&quot;https://web.archive.org/web/20170611134002/http://scalacomputing.com/jsm&quot;&gt;scala computing, as it looked that summer&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Leaving the PhD]]></title><description><![CDATA[Leaving the computational applied mathematics PhD at Stony Brook in May 2017, a year after starting a company out of my advisor's push to aim graph theory at job scheduling.]]></description><link>https://alexnodeland.com/timeline/170515_leaving-the-phd/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/170515_leaving-the-phd/</guid><pubDate>Mon, 15 May 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;i left the computational applied mathematics phd at stony brook in may 2017, a little over a year after starting a company out of it.&lt;/p&gt;
&lt;p&gt;yuefan deng was my advisor. the research i was there for was &lt;a href=&quot;/timeline/161101_optimal-wavelet-bases/&quot;&gt;optimal wavelet bases for audio compression&lt;/a&gt;, but he kept pointing me at a different problem: take what you know about graph theory and aim it at networks. resource allocation. task management in job scheduling.&lt;/p&gt;
&lt;p&gt;the interconnect topology can be modeled as a graph. in a distributed system the connectivity and latency between nodes are not uniform, and job sizes and durations keep changing, so the scheduler is balancing fairness, dynamicity and utilization all at once, while trying to place jobs on high-conductance subgraphs of the network, which matters most when the workload is network-intensive.&lt;/p&gt;
&lt;p&gt;yuefan deng advised arjun kapoor and me on starting it. scala computing, march 2016, in an office at cewit across the hall from the one i had as artist in residence. satya sharma was cewit&apos;s director and an advisor to the company as well. we grew to seven people in that room.&lt;/p&gt;
&lt;figure&gt;
  &lt;img
    src=&quot;/images/cewit-stony-brook.webp&quot;
    alt=&quot;An aerial view of the Center of Excellence in Wireless and Information Technology at Stony Brook&apos;s research and development park: a low building with a curved dark-glass wing, backed by autumn woods and fronted by an almost empty parking lot.&quot;
    width=&quot;1024&quot;
    height=&quot;575&quot;
    loading=&quot;lazy&quot;
    decoding=&quot;async&quot;
  /&gt;
  &lt;figcaption&gt;
    cewit, in stony brook&apos;s research and development park. photo by
    &lt;a href=&quot;https://www.flickr.com/photos/62424772@N08/23274203131&quot;&gt;john feinberg&lt;/a&gt;,
    cc by 2.0.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;what it sold at the start was grid-style clusters on commodity office hardware: the spare capacity already sitting in a building, linked into something that could take work no single machine there could. later it grew into clusters on any distributed set of machines, on-prem, in the cloud, or across the web.&lt;/p&gt;
&lt;p&gt;i left before advancing to candidacy. i wanted to build it rather than publish about it.&lt;/p&gt;
&lt;p&gt;leaving the program did not mean leaving the building. the residency and the research post both ran on through the year.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://web.archive.org/web/20170430003352/http://scalacomputing.com/&quot;&gt;scala computing, as it looked in 2017&lt;/a&gt; · &lt;a href=&quot;https://www.cewit.org/&quot;&gt;cewit&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Wavelet Talk at IACS]]></title><description><![CDATA[Giving a talk on the wavelet compression search at Stony Brook's Institute for Advanced Computational Science, whose machines had been running it.]]></description><link>https://alexnodeland.com/timeline/161207_iacs-wavelet-talk/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/161207_iacs-wavelet-talk/</guid><pubDate>Wed, 07 Dec 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;on 7 december 2016 the institute for advanced computational science at stony brook had me in to talk about the wavelet work, under the title the research already carried: optimal wavelet bases for audio compression.&lt;/p&gt;
&lt;p&gt;iacs was where the search had been running.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://calendar.stonybrook.edu/site/iacs/event/optimal-wavelet-bases-for-audio-compression/&quot;&gt;the listing&lt;/a&gt; · &lt;a href=&quot;/timeline/161101_optimal-wavelet-bases/&quot;&gt;the research behind it&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[InfiniCortex]]></title><description><![CDATA[Stony Brook was one of four subnets on InfiniCortex, A*STAR's InfiniBand fabric stretched around the planet. I went to SC16 in Salt Lake City on an IACS travel award for the unveiling of our end of it.]]></description><link>https://alexnodeland.com/timeline/161114_infinicortex/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/161114_infinicortex/</guid><pubDate>Mon, 14 Nov 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;infiniband is the interconnect inside a supercomputer: short range, one subnet, the fabric a machine uses to talk to itself. infinicortex was a*star&apos;s attempt to stretch it across oceans, using range extenders over optical fibre and routing separate subnets into one another, so that machines in singapore, australia, europe and north america could be driven as a single system. what circled the planet was a supercomputer&apos;s own internal network rather than a network between supercomputers.&lt;/p&gt;
&lt;figure&gt;
  &lt;img
    src=&quot;/images/infiniband-switch.webp&quot;
    alt=&quot;Close-up of an InfiniBand switch with thick black copper cables plugged into its ports, a green status light showing on the left.&quot;
    width=&quot;2000&quot;
    height=&quot;960&quot;
    loading=&quot;lazy&quot;
    decoding=&quot;async&quot;
  /&gt;
  &lt;figcaption&gt;
    an infiniband switch and the short copper that normally plugs into it. photo
    by
    &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Infiniband_switch_%26_cables_(2717795166).jpg&quot;&gt;chrisdag&lt;/a&gt;,
    cc by 2.0.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;marek michalewicz, who ran a*star&apos;s computational resource centre, &lt;a href=&quot;https://iacs.stonybrook.edu/_archived/event/seminars/infinicortex-another-path-to-reach-exascale-supercomputing.html&quot;&gt;gave the talk on it at iacs&lt;/a&gt; on 27 august 2015. stony brook became one of the sites on the fabric.&lt;/p&gt;
&lt;p&gt;that meant dealing with obsidian directly to get the longbow and crossbow units to us on loan. i took delivery myself and carried the package over to the iacs supercomputing center to be installed.&lt;/p&gt;
&lt;p&gt;in november 2016 i went to sc16 in salt lake city on an iacs travel award, for the unveiling of stony brook&apos;s addition to the network. the fabric ran as four subnets that year and stony brook was one of them, with five longbow units tying the show floor back to a*crc in singapore at fifty gigabits.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://superfri.org/index.php/superfri/article/view/139&quot;&gt;infinicortex, from proof-of-concept to production&lt;/a&gt; · &lt;a href=&quot;https://iacs.stonybrook.edu/&quot;&gt;iacs&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Optimal Wavelet Bases For Audio Compression]]></title><description><![CDATA[Searching for a general procedure to pick the best wavelet basis for a class of audio, rather than choosing one by taste. Run on the IACS supercomputers.]]></description><link>https://alexnodeland.com/timeline/161101_optimal-wavelet-bases/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/161101_optimal-wavelet-bases/</guid><pubDate>Tue, 01 Nov 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;jpeg 2000 swapped the discrete cosine transform for wavelets and got visibly better images at the same bitrate, with none of the block artifacts that give away ordinary jpeg. the obvious question is why the same move is not standard for audio.&lt;/p&gt;
&lt;p&gt;part of the answer is that nobody agrees on which wavelet to use. unlike the dct, which is one fixed transform, &quot;wavelet&quot; is a family, and the right member depends on the signal you are compressing. in practice people pick one that has worked before and tune around it.&lt;/p&gt;
&lt;p&gt;this research was an attempt at a procedure for picking the basis for a given class of audio, instead of choosing by taste: define what optimal means for that class, then search the space of admissible bases against a real corpus. the search needed the iacs supercomputers. the criterion needed the mathematics.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cewit.org/programs/_documents/CEWITNewsletter_NOV2016.pdf&quot;&gt;read the full article&lt;/a&gt;, inside the november 2016 newsletter pdf.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[All Shook Up at CK Productions]]></title><description><![CDATA[Playing guitar for the Elvis jukebox musical staged by CK Productions at Town Hall West in Islip.]]></description><link>https://alexnodeland.com/timeline/160625_all-shook-up/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/160625_all-shook-up/</guid><pubDate>Sat, 25 Jun 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/All_Shook_Up_(musical)&quot;&gt;all shook up&lt;/a&gt; ran at town hall west in islip for two weeks in the summer of 2016, and i played guitar in a band led by zack aretakis.&lt;/p&gt;
&lt;p&gt;it is a jukebox musical built on the elvis presley catalog, and the book underneath it, by joe dipietro, is &lt;a href=&quot;https://playbill.com/article/all-shook-up-the-musical-gets-its-inspiration-from-shakespeare-and-elvis-com-122910&quot;&gt;twelfth night&lt;/a&gt; moved to a midwestern town in 1955, with a few of the other comedies borrowed from along the way. ck productions staged it together with the town of islip, and the run went from 25 june to 10 july.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.ckproductionsnewyork.com/&quot;&gt;ck productions&lt;/a&gt; · &lt;a href=&quot;https://events.longisland.com/all-shook-up4.html&quot;&gt;the listing&lt;/a&gt; · &lt;a href=&quot;https://www.facebook.com/ckproductionsny/videos/our-main-stage-production-of-all-shook-up-opens-tonight-at-8pmhere-is-our-promov/1031361406952749/&quot;&gt;the promo video&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Supercomputers For Audio Research and Development]]></title><description><![CDATA[CEWIT's newsletter on my use of Stony Brook's supercomputing time for audio synthesis and modeling.]]></description><link>https://alexnodeland.com/timeline/160201_hpc-audio-research/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/160201_hpc-audio-research/</guid><pubDate>Mon, 01 Feb 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;cewit&apos;s newsletter ran a short piece on what i was doing with the university&apos;s supercomputing allocation: audio synthesis and modeling at a scale that does not fit on a desktop.&lt;/p&gt;
&lt;p&gt;having that much compute changes which questions you can ask. a lot of audio engineering is choosing a filter design or a basis function on the strength of experience and then tuning it until it sounds right. with a cluster you can search the space instead, evaluating thousands of candidates against a real corpus to find out whether the conventional choice was ever the best one.&lt;/p&gt;
&lt;p&gt;the same models apply outside music. forensic audio and medical imaging are both problems of pulling a signal out of noise when you have a decent prior for what the signal should look like.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cewit.org/programs/_documents/CEWITNewsletter_FEB2016.pdf&quot;&gt;read the full article&lt;/a&gt;, inside the february 2016 newsletter pdf.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Future of Sound]]></title><description><![CDATA[The Stony Brook Press on the intelligent synthesizers I was building as an undergraduate: pitch-tracking bass synthesis and convolution reverb.]]></description><link>https://alexnodeland.com/timeline/151111_future-of-sound/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/151111_future-of-sound/</guid><pubDate>Wed, 11 Nov 2015 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;the stony brook press came to talk to me about synthesizers that listen back. i was twenty and halfway through an applied maths degree, building pedals that tried to work out what a player was doing rather than waiting to be told.&lt;/p&gt;
&lt;p&gt;two of them made the article. a bass synthesizer that tracks the pitch of whatever it hears and calculates the harmonically correct lower note in real time, so it stays in key and in time without being configured. and a convolution reverb, which takes an impulse response of a room and lets you play as though you were standing in it: carnegie hall, or the basement venue down the road, from a recording of the space.&lt;/p&gt;
&lt;p&gt;i had been building audio hardware at pigtronix on long island for a few years by then, so the pedals were real hardware. the new part was putting a learning system in the loop: something that proposes a sound, watches which ones you keep, and gets better at proposing.&lt;/p&gt;
&lt;p&gt;this was the motiff technologies era, my first company, run out of an undergraduate degree with pigtronix advising.&lt;/p&gt;
&lt;p&gt;i told the reporter that music is data processing, just with an error metric of whether it sounds good. i still think that is right.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://sbpress.com/2015/11/the-future-of-sound/&quot;&gt;read the full article&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Sweet Charity at New Haarlem Arts Theatre]]></title><description><![CDATA[Playing bass guitar and double bass for the Latino re-conception of Sweet Charity at Aaron Davis Hall, which the New York Times reviewed and filmed.]]></description><link>https://alexnodeland.com/timeline/120726_sweet-charity/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/120726_sweet-charity/</guid><pubDate>Thu, 26 Jul 2012 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;new haarlem arts theatre staged &lt;a href=&quot;https://en.wikipedia.org/wiki/Sweet_Charity&quot;&gt;sweet charity&lt;/a&gt; at aaron davis hall in the summer of 2012, and i played bass guitar and double bass in a band led by my friend brett pontecorvo. we were onstage in costume and worked with the cast through the show.&lt;/p&gt;
&lt;figure&gt;
  &lt;img
    src=&quot;/images/aaron-davis-hall.webp&quot;
    alt=&quot;The entrance to Aaron Davis Hall on the City College campus in Harlem.&quot;
    width=&quot;1600&quot;
    height=&quot;1200&quot;
    loading=&quot;lazy&quot;
    decoding=&quot;async&quot;
  /&gt;
  &lt;figcaption&gt;
    aaron davis hall, on the city college campus at 135th and convent. photo by
    &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Aaron_davis_hall_entrance.jpg&quot;&gt;HPPYCYCLNG&lt;/a&gt;,
    &lt;a href=&quot;https://creativecommons.org/licenses/by-sa/4.0/&quot;&gt;cc by-sa 4.0&lt;/a&gt;.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Julio_Agustin&quot;&gt;julio agustin&lt;/a&gt; directed it as a latino re-conception rather than a straight revival. the characters moved toward the cast, so charity became caridad, while cy coleman&apos;s music, dorothy fields&apos;s lyrics and neil simon&apos;s book were left as written. edlyn gonzález played caridad, and agustin, who had spent years on broadway in fosse, chicago and steel pier before he moved to &lt;a href=&quot;https://www.julioagustin.com/director&quot;&gt;directing&lt;/a&gt;, took an audelco nomination for this one.&lt;/p&gt;
&lt;p&gt;previews began on 26 july, the show opened on the 28th, and it closed on 19 august. the new york times praised lainie munro&apos;s choreography and the &quot;sure-footed accompaniment from brett pontecorvo&apos;s small band&quot;. the times filmed an excerpt too, which is the only footage i know of.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.nytimes.com/2012/08/06/theater/reviews/sweet-charity-at-new-haarlem-arts-theater.html&quot;&gt;the times review&lt;/a&gt; · &lt;a href=&quot;https://www.nytimes.com/video/theater/100000001705739/excerpt-sweet-charity.html&quot;&gt;the times&apos; excerpt&lt;/a&gt; · &lt;a href=&quot;https://theatermania.com/new-york-city-theater/reviews/sweet-charity_59977.html&quot;&gt;theatermania&apos;s review&lt;/a&gt; · &lt;a href=&quot;https://www.backstage.com/magazine/article/ny-review-sweet-charity-51984/&quot;&gt;backstage&apos;s review&lt;/a&gt; · &lt;a href=&quot;https://playbill.com/article/latino-sweet-charity-will-introduce-caridad-to-harlem-audiences-in-july-com-195079&quot;&gt;playbill on the production&lt;/a&gt; · &lt;a href=&quot;https://www.theatermania.com/news/edlyn-gonzalez-allicia-lawson-jasmine-romero-set-for-new-haarlem-arts-theatres-sweet-charity_58665/&quot;&gt;the casting announcement&lt;/a&gt; · &lt;a href=&quot;https://www.ccny.cuny.edu/nhat&quot;&gt;new haarlem arts theatre&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[It Ain't Nothin' But the Blues at New Haarlem Arts Theatre]]></title><description><![CDATA[Playing bass guitar and double bass from the side-stage pit for the revue that opened New Haarlem Arts Theatre's first season at Aaron Davis Hall in Harlem.]]></description><link>https://alexnodeland.com/timeline/110727_it-aint-nothin-but-the-blues/</link><guid isPermaLink="false">https://alexnodeland.com/timeline/110727_it-aint-nothin-but-the-blues/</guid><pubDate>Wed, 27 Jul 2011 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;in the summer of 2011 i played bass guitar and double bass for &lt;a href=&quot;https://en.wikipedia.org/wiki/It_Ain&amp;#x27;t_Nothin&amp;#x27;_but_the_Blues&quot;&gt;it ain&apos;t nothin&apos; but the blues&lt;/a&gt;, at new haarlem arts theatre in harlem, alongside my friend brett pontecorvo.&lt;/p&gt;
&lt;figure&gt;
  &lt;img
    src=&quot;/images/aaron-davis-hall.webp&quot;
    alt=&quot;The entrance to Aaron Davis Hall on the City College campus in Harlem.&quot;
    width=&quot;1600&quot;
    height=&quot;1200&quot;
    loading=&quot;lazy&quot;
    decoding=&quot;async&quot;
  /&gt;
  &lt;figcaption&gt;
    aaron davis hall, on the city college campus at 135th and convent. photo by
    &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Aaron_davis_hall_entrance.jpg&quot;&gt;HPPYCYCLNG&lt;/a&gt;,
    &lt;a href=&quot;https://creativecommons.org/licenses/by-sa/4.0/&quot;&gt;cc by-sa 4.0&lt;/a&gt;.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;the company was new that year. city college&apos;s department of theatre and speech had just started it, and this was part of the opening season. &lt;a href=&quot;https://en.wikipedia.org/wiki/Alfred_Preisser&quot;&gt;alfred preisser&lt;/a&gt; directed, having founded the &lt;a href=&quot;https://en.wikipedia.org/wiki/Classical_Theatre_of_Harlem&quot;&gt;classical theatre of harlem&lt;/a&gt; and run it for its first decade, and jeffrey bolding was the musical director. the show is a revue rather than a book musical, so there is no plot to follow and no scene to underscore. as the times put it, the songs &quot;remain front and center&quot;. we played from a side-stage pit rather than out of sight under one, in costume, with the cast coming over to work with us through the evening.&lt;/p&gt;
&lt;p&gt;previews began on 27 july, the show opened on the 30th, and the run was held over a week past its announced close, to 28 august. the new york times was mixed on the evening but found &quot;lots of standout moments&quot; in it, from &quot;a strong, nicely varied cast&quot;. that november the production &lt;a href=&quot;https://www.theatermania.com/new-york-city-theater/news/11-2011/andre-de-shields-andre-holland-sanaa-lathan-et-al-_45003.html/&quot;&gt;tied for musical production of the year at the audelco awards&lt;/a&gt;, with tracy jack winning for choreography.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.nytimes.com/2011/08/03/theater/reviews/it-aint-nothin-but-the-blues-at-aaron-davis-hall-review.html&quot;&gt;the times review&lt;/a&gt; · &lt;a href=&quot;https://www.broadwayworld.com/off-off-broadway/article/New-Haarlem-Arts-Theatre-Presents-IT-AINT-NOTHIN-BUT-THE-BLUES-20110621&quot;&gt;broadwayworld on the production&lt;/a&gt; · &lt;a href=&quot;https://playbill.com/article/new-haarlem-arts-theatre-will-launch-with-blues-for-mister-charlie-and-it-aint-nothin-but-the-blues-com-179621&quot;&gt;playbill on the company&apos;s launch&lt;/a&gt; · &lt;a href=&quot;https://amsterdamnews.com/news/2011/11/02/audelco-nominations-are-out/&quot;&gt;the audelco nominations&lt;/a&gt; · &lt;a href=&quot;https://www.ccny.cuny.edu/nhat&quot;&gt;new haarlem arts theatre&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>