Skip to content

Instantly share code, notes, and snippets.

@aavogt
aavogt / CSG.hs
Last active February 21, 2025 21:19
attempted geometry as functions
{-# LANGUAGE ApplicativeDo #-}
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE PatternSynonyms #-}
-- |
--
-- Constructive solid geometry. Not quite FRep or signed distance function.
module CSG where
@aavogt
aavogt / 4bar2.jl
Created January 27, 2025 17:17
4 bar linkage filament cutter
# %%
using BSplineKit, LinearAlgebra, Optimization
using Plots
using RCall
using SplitApplyCombine
using Symbolics
@rlibrary ggplot2
import OptimizationOptimisers, DataFrames
@aavogt
aavogt / fc2stl.py
Last active May 22, 2025 14:22
freecad export stls (on save)
#!/usr/bin/env -S freecad --console
import os
import sys
import textwrap
import FreeCAD
import PartDesign
import tempfile
import shutil
from typing import TypeVar
@aavogt
aavogt / Defun.hs
Last active December 1, 2024 06:31
Defun
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TupleSections #-}
{-# HLINT ignore "Functor law" #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
@aavogt
aavogt / bmp_tptp.rs
Created November 25, 2024 19:40
esp-rs bme280
fn bmp_tptp(
i2c_ref: Arc<Mutex<I2C0>>,
sda: AnyIOPin,
scl: AnyIOPin,
config: Config,
) -> anyhow::Result<[f32; 4]> {
use bme280::i2c::BME280;
let i2c = i2c_ref.lock().unwrap();
let i2c = RefCell::new(I2cDriver::new(i2c, sda, scl, &config)?);
@aavogt
aavogt / string_vs_list.R
Created November 17, 2024 21:09
benchmarking ghc (`elem` "{([") vs. (\c -> c `elem` "{([") vs. ...
library(pacman)
p_load(tidyverse, tictoc, glue, e1071, directlabels, cache)
split <- function(x) unlist(strsplit(x, ""))
sample(c(letters, split("{}[]()")), 10^5, replace = TRUE) %>% as.list() %>% do.call(str_c, .) %>% writeLines("input0.txt")
# map_chr(commands, function(command) readLines(paste0(command, ".hs"))) %>% setNames(commands) %>% deparse %>% writeLines
mains <- c(
@aavogt
aavogt / VVariable.hs
Created November 11, 2024 18:13
ghc parser plugin to assign IORefs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators #-}
module VVariable where
import Control.Monad
import Control.Monad.Trans.Writer
@aavogt
aavogt / warping.R
Created September 18, 2024 14:51
Wang 2006 equation plot
# https://link.springer.com/article/10.1007/s00170-006-0556-9
library(pacman)
p_load(tidyverse, directlabels)
delta <- function(dh,alpha,hdt,dt,L,H) {
n <- H / dh
te <- hdt - dt
tibble(n=n, te=te, delta = n^3 * dh / (6*alpha*dt*(n-1)) * (1 - cos(3*alpha*L/(n*dh) * dt * (n-1)/n^2 )))
}
@aavogt
aavogt / a.Rmd
Created September 16, 2024 01:55
fire tube
# Water Heater
For backpacking weight is an important constraint. Often boiling water is
enough for food and drink -- the food can be precooked and/or dehydrated etc.
such that it doesn't need to simmer. Therefore a stove and a pot could be
unnecessary, if a tube containing burning fuel is put inside a water bottle.
Methanol stoves where the pot has a shield ("caldera cone", jetboil etc.)
@aavogt
aavogt / valliers.jl
Last active August 15, 2024 14:35
values don't change
# Success[0.1, 0.1, 0.1, 0.1, 0.1, 0.09999999999999999, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.09999999999999999, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.09999999999999999, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]%
# The problem is probably the pressure tank composition equation.
# challenge Valliers 2004 sweep gas claim
# flanges are a,b,c,d etc.
# where "a" is upstream and "b" is downstream
#
##
using ModelingToolkit, Plots, DifferentialEquations