Ricky Reusser b147b8de1b
🥸
2025-08-08 12:23:24 -07:00

27 lines
19 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<title>
Projects
</title>
<meta property="og:title" content="Projects">
<meta name="twitter:title" content="Projects">
<meta charset="utf-8">
<meta property="og:image" content="https://raw.githubusercontent.com/rreusser/rreusser.github.io/5516ed49/sketches/images/thumbnail.jpg">
<meta name="twitter:image:src" content="https://raw.githubusercontent.com/rreusser/rreusser.github.io/5516ed49/sketches/images/thumbnail.jpg">
<meta name="twitter:card" content="summary_large_image">
<meta property="og:type" content="article">
<meta property="og:description" content="Assorted small projects and notebooks">
<meta property="description" content="Assorted small projects and notebooks">
<meta name="twitter:description" content="Assorted small projects and notebooks">
<meta name="twitter:creator" content="rickyreusser">
<link rel="stylesheet" href="../styles.css">
</head>
<body>
<div id="idyll-mount"><div data-reactroot=""><div class="idyll-root"><nav class="menu"><a class="menu__item" href="/">rreusser.github.io</a><a class="menu__item" href="/notebooks/">notebooks</a><a class="menu__item" href="/sketches/">sketches</a><a class="menu__item" href="/projects/">projects</a><a class="menu__item" href="/trains-and-trails/">running</a></nav><div class="article-header"><div class="article-header__feature-container"></div><div class="article-header__content"><h1 class="hed">Projects</h1></div></div><div class="projectDesc__container"><a href="https://observablehq.com/collection/@rreusser/writeups" class="projectDesc"><img src="static/observable.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">December 1, 2022</span><h2>Observable Notebooks</h2><p>A collection of Observable notebooks covering a wide range of topics and visualizations, spanning the gamut from half-baked experiements to detailed writeups.</p></div></a><a href="https://observablehq.com/@rreusser/eqn?collection=@rreusser/writeups" class="projectDesc"><img src="static/eqn.png" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">December 25, 2022</span><h2><code>eqn</code></h2><p>An experimental equation parser which turns text like <code>y = m * x + b</code> into an <a href="https://en.wikipedia.org/wiki/Abstract_syntax_tree">Abstract Syntax Tree</a> (AST) and then plugs into the <a href="https://stdlib.io/">Stdlib</a> library to expose a wide variety of special math functions, at the end of the day wrapped up as a sort of drop-in replacement for Observables <code>tex</code> helper.</p></div></a><a href="https://rreusser.github.io/maps/night-and-day/" class="projectDesc"><img src="static/night-and-day.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">November 1, 2022</span><h2>Night and Day</h2><p>Using the <code>CustomRasterSource</code> API and Volodymyr Agafonkins <a href="https://github.com/mourner/suncalc">SunCalc</a> library to render a solar terminator on a Mapbox map.</p></div></a><a href="https://rreusser.github.io/trains-and-trails/" class="projectDesc"><img src="static/trains-and-trails.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">August 30, 2022</span><h2>Trains and Trails</h2><p>An interactive map-based exploration, In which I run Bay Area trails via public transportation.</p></div></a><a href="https://github.com/rreusser/regl-gpu-lines" class="projectDesc"><img src="static/regl-gpu-lines.png" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">February 15, 2022</span><h2><code>regl-gpu-lines</code></h2><p>A small library to facilitate rendering vertex or texture data as lines using instanced rendering.</p></div></a><a href="https://observablehq.com/@rreusser/strange-attractors-on-the-gpu-part-1?collection=@rreusser/writeups" class="projectDesc"><img src="static/strange-attractors.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">November 17, 2021</span><h2>Strange Attractors on the GPU</h2><p>A walkthrough of how to organize data on the GPU to iterate and render strange attractors as lines, without data leaving the GPU. See <a href="https://observablehq.com/@rreusser/strange-attractors-on-the-gpu-part-1?collection=@rreusser/writeups">Part 1: Implementation</a> and <a href="https://observablehq.com/@rreusser/strange-attractors-on-the-gpu-part-2?collection=@rreusser/writeups">Part 2: Fun</a></p></div></a><a href="https://observablehq.com/@rreusser/locally-scaled-domain-coloring-part-1-contour-plots?collection=@rreusser/writeups" class="projectDesc"><img src="static/adaptive-contouring.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">December 14, 2020</span><h2>Adaptive Contouring in Fragment Shaders</h2><p>A detailed walkthrough of how to draw adaptively-scaled contours in a fragment shader without prior knowledge of the range of data.</p></div></a><a href="https://observablehq.com/@rreusser/complex-function-plotter?collection=@rreusser/writeups" class="projectDesc"><img src="static/domain-coloring-3.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">July 29, 2020</span><h2>Complex Function Plotter</h2><p>The <span style="display:inline-block"><span> <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>n</mi><mo>+</mo><msup><mn>1</mn><mrow><mi>t</mi><mi>h</mi></mrow></msup></mrow><annotation encoding="application/x-tex">n+1^{th}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.849108em;"></span><span class="strut bottom" style="height:0.932438em;vertical-align:-0.08333em;"></span><span class="base"><span class="mord mathit">n</span><span class="mord rule" style="margin-right:0.2222222222222222em;"></span><span class="mbin">+</span><span class="mord rule" style="margin-right:0.2222222222222222em;"></span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.849108em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight">t</span><span class="mord mathit mtight">h</span></span></span></span></span></span></span></span></span></span></span></span> </span></span> iteration of my approach to domain coloring for complex functions, this time with a function parser to automatically turn a mathematical expression into GLSL code.</p></div></a><a href="https://rreusser.github.io/explorations/sphere-eversion/" class="projectDesc"><img src="static/eversion.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">June 29, 2020</span><h2>Sphere Eversion</h2><p>While a circle in two dimensions cannot, a sphere in three dimensions can be smoothly turned inside-out! An interactive walkthrough to help visualize the eversion of Bednorz and Bednorz.</p></div></a><a href="https://observablehq.com/@rreusser/gpgpu-boids?collection=@rreusser/writeups" class="projectDesc"><img src="static/boids.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">May 28, 2020</span><h2>GPU Boids</h2><p>Classic boids requires some sort of strategy for nearest-neighbor lookup, whether thats a tree or brute-force pairwise interactions. This notebook follows a Particle Mesh method strategy and uses a grid to transmit locally averaged properties to neighboring boids.</p></div></a><a href="https://www.shadertoy.com/view/wdffWj" class="projectDesc"><img src="static/monte-carlo-geometry.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">May 10, 2020</span><h2>Figure Reproduction: Monte-Carlo Geometry Processing</h2><p>A reproduction of Figure 2 from Sawhney and Cranes oustanding paper, Monte Carlo Geometry Processing. My very first foray into SDF rendering with sphere-tracing!</p></div></a><a href="https://observablehq.com/@rreusser/toiletpaperfullerenes-and-charmin-nanotubes?collection=@rreusser/writeups" class="projectDesc"><img src="static/toiletpaper.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">April 28, 2020</span><h2>Toiletpaperfullerenes and Charmin Nanotubes</h2><p>Toilet paper tubes have the curious property that you can flatten them, cut out loops, and link the loops together without fasteners. This notebook provides some instructions and implements a simple point and click editor to construct your own!</p></div></a><a href="https://observablehq.com/@rreusser/3d-reaction-diffusion?collection=@rreusser/writeups" class="projectDesc"><img src="static/reaction-diffusion.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">March 15, 2020</span><h2>3D Reaction-Diffusion</h2><p>A 3D WebGL simulation of Gray-Scott reaction-diffusion, implementing using two-dimensional WebGL 1 textures and a bit of clever bookkeeping.</p></div></a><a href="https://observablehq.com/@rreusser/integers-in-single-precision-floating-point" class="projectDesc"><img src="static/float.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">February 9, 2020</span><h2>Integers in Single-Precision Floating-Point</h2><p>Youre likely to get scolded for using a floating-point variable to represent an integer, but floating-point represents most integers perfectly well. Scroll through all of the integers representable in single-precision floating point!</p></div></a><a href="https://observablehq.com/@rreusser/half-precision-floating-point-visualized" class="projectDesc"><img src="static/half-float.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">February 9, 2020</span><h2>Half-Precision Floating-Point, Visualized</h2><p>Half-precision floating-point can be surprisingly difficult to work with. This notebook plots all possible numbers with the special cases illustrated clearly.</p></div></a><a href="https://www.shadertoy.com/view/wld3zl" class="projectDesc"><img src="static/rect-domain-coloring-shadertoy.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">December 26, 2019</span><h2>Shadertoy: Adaptive Domain Coloring</h2><p>A Shadertoy implementation of my domain coloring technique using <a href="https://www.shadertoy.com/view/wld3zl">rectangular contours</a> or alternatively, <a href="https://www.shadertoy.com/view/tlcGzf">polar contours</a>.</p></div></a><a href="https://observablehq.com/@rreusser/binary-input" class="projectDesc"><img src="static/binary-input.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">December 12, 2019</span><h2>Binary Input</h2><p>My favorite feature of Observable is the ease with which you can create surprisingly sophisticated ad-hoc user interfaces. This notebook implements an input field which allows you to toggle the bits of various numerical types.</p></div></a><a href="https://observablehq.com/@rreusser/eigen" class="projectDesc"><img src="static/eigen.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">December 10, 2019</span><h2>Linear Algebra via Eigen and WebAssembly: A proof of concept</h2><p>Numerical computing in JavaScript remains difficult due to the lack of robust, complete libraries. This notebook explores compiling a subset of the Eigen linear algebra library to WebAssembly using Emscripten and tries to remedy some of the ergonomic memory management issues which result.</p></div></a><a href="https://observablehq.com/@rreusser/2d-n-body-gravity-with-poissons-equation?collection=@rreusser/writeups" class="projectDesc"><img src="static/gravity.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">October 30, 2019</span><h2>2D (Non-physical) N-body Gravity with Poissons Equation</h2><p>N-body simulations get expensive very quickly, with the number of interactions growing with <span style="display:inline-block"><span> <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>O</mi><mo>(</mo><msup><mi>n</mi><mn>2</mn></msup><mo>)</mo></mrow><annotation encoding="application/x-tex">O(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.8141079999999999em;"></span><span class="strut bottom" style="height:1.064108em;vertical-align:-0.25em;"></span><span class="base"><span class="mord mathit" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathit">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span> </span></span>. This notebook takes a shortcut and uses the somewhat inaccurate Particle-Mesh method to simulate 2D Newtonian gravity on a grid. It solves Poissons equation via an FFT and plots the results entirely on the GPU.</p></div></a><a href="https://observablehq.com/@rreusser/periodic-planar-three-body-orbits?collection=@rreusser/writeups" class="projectDesc"><img src="static/periodic-three-body-orbits.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">October 18, 2019</span><h2>Periodic Planar Three-Body Orbits</h2><p>This notebook collects over 2200 periodic, planar three-body orbits and explains one of the normal topological ways to classify them.</p></div></a><a href="https://observablehq.com/@rreusser/finding-roots-in-the-complex-plane?collection=@rreusser/writeups" class="projectDesc"><img src="static/complex-roots.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">August 18, 2019</span><h2>Finding Roots in the Complex Plane</h2><p>Students of complex analysis will recall that a path integral quickly tells you how many roots are inside a given contour, but this notebook walks through the method of Delves and Lyness which transforms integrals around a contour into a polynomial whose roots are exactly the encircled roots!</p></div></a><a href="https://observablehq.com/@rreusser/adaptive-domain-coloring?collection=@rreusser/writeups" class="projectDesc"><img src="static/domain-coloring.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">July 26, 2019</span><h2>Domain Coloring with Adaptive Contouring</h2><p>Domain coloring for complex-valued functions is tricky since the function and rate of change may vary over many orders of magnitude. This notebook iterates on the previous technique and tries out automatic differentiation and screen-space derivatives to compute the rate of change and automatically scale contours.</p></div></a><a href="https://observablehq.com/@rreusser/control-panel-2-prototype-test" class="projectDesc"><img src="static/control-panel.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">March 25, 2019</span><h2>Control Panel Prototype</h2><p>Dat.gui is the gold standard in simple control GUIs. This notebook illustrates a prototype libary based on Preact and with the goal of being simple and extensible.</p></div></a><a href="http://rreusser.github.io/multiscale-turing-pattern-gallery-2/" class="projectDesc"><img src="static/turing-2.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">March 15, 2019</span><h2>Multi-Scale Turing Patterns 2</h2><p>A second set of multi-scale Turing patterns</p></div></a><a href="https://observablehq.com/@rreusser/debugging-normals-without-duplicating-geometry-data?collection=@rreusser/writeups" class="projectDesc"><img src="static/bunny-normals.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">December 17, 2018</span><h2>Drawing indexed mesh data as screen-space normals without duplicating data</h2><p>We typically just send triangles to the GPU and draw them on the screen. This notebook uses instanced rendering to draw plain, unadorned mesh data as normals with arrowheads and foreshortening.</p></div></a><a href="http://rreusser.github.io/multiscale-turing-pattern-gallery/" class="projectDesc"><img src="static/turing-1.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">October 19, 2018</span><h2>Multi-Scale Turing Patterns 1</h2><p>An implementation of multi-scale Turing patterns following the method of Jonathan McCabe.</p></div></a><a href="http://rreusser.github.io/aligning-3d-scans/" class="projectDesc"><img src="static/aligning-scans.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">July 28, 2018</span><h2>Aligning 3D scans</h2><p>In which I have fun rediscovering Principal Component Analysis by stating what I want from a problem, realizing Lagrange multipliers actually work, then finding out its just Principla Component Analysis on the normal vectors.</p></div></a><a href="http://rreusser.github.io/from-nothing-to-something-in-webgl-with-regl/" class="projectDesc"><img src="static/hello-regl.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">December 7, 2016</span><h2>From Nothing to Something in WebGL Using regl</h2><p>A pretty good portion of the material on this site is implemented in WebGL using Mikola Lysenkos oustanding regl library. This post walks through my still-favorite method of getting off of the ground in and into regl.</p></div></a><a href="http://rreusser.github.io/things-i-learned-the-hard-way-using-react-native/" class="projectDesc"><img src="static/react-for-some-reason.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">May 5, 2016</span><h2>Things I Learned the Hard Way Using React Native</h2><p>This post exists because I wish someone had sat me down and told me half of these things on Day One of using React Native.</p></div></a><a href="http://rreusser.github.io/a-series-of-unfortunate-things-i-programmed-one-time/" class="projectDesc"><img src="static/hard-things.jpg" class="projectDesc__thumb"/><div class="projectDesc__meta"><span class="projectDesc__date">March 16, 2015</span><h2>A Series of Unfortunate Things I Programmed One Time</h2><p>A walkthrough of how I got started and what motivates me to seek better ways to communicate.</p></div></a></div><div class=" idyll-text-container"><div></div></div><footer class="footer"><div class="footer__content"><div class="footer_copy">© 2025 Ricky Reusser</div></div></footer></div></div></div>
<script src="index.js"></script>
</body>
</html>