Sign in

Dr Frames Catherine White

@oxinabox.net
274 followers 122 following 122 posts

(She/her) PhD. Working on biology cell simulations. Engineering, ML, Constrained Optimization, Modelling, JuliaLang, AutoDiff, Programming This is my professional bsky.

PostsRepliesMedia
Dr Frames Catherine White @oxinabox.net · 23/09/2026
Like I don't think it's that unreasonable to say Workflow as root trace. Span for each job inside. Optional: span for each step inside Plus job (and optionally step) making available a traceparent envvar to hook up to otel tooling within the steps.
000
Dr Frames Catherine White @oxinabox.net · 23/09/2026
It seems there is actually no great way to do open telemetry over GitHub actions. Solutions seem to be: Kinda broken: eg setup-opentelemetry Completely nuts: eg thoth Not opentelemetry: gha_buildevents Or only run in post, so can't be traceparent of stuff running in steps. Everything else.
100
Dr Frames Catherine White @oxinabox.net · 07/09/2026
Also LLM generated text often has a unpleasantness to it. Somewhat similar to academic passive voice but much more so. They are excessively smooth and personalityless. This is like how AI generated movies give me almost motion sickness? though thats because things are constantly reshaping slightly
150
Dr Frames Catherine White @oxinabox.net · 07/09/2026
I do not like been given 2+ page long reports generated by claude They violate the expectation that anything i am being asked to read took at least 2x as long to write as it will for me to read it. And documents that I can't trust not to be lying to me with a great deal of confidence hurt my brain
191
Reposted by Dr Frames Catherine White
Dr Frames Catherine White @oxinabox.net · 29/08/2026
Slides from my pycon-au lightning talk. "There is only one operation for which humans care about enough to implement quintuple dispatch" It's either pro-or-anti multiple dispatch I guess. (For screen reader accessible see on canva: canva.link/jg27bz1t3q5n... It's almost all text)
292
Dr Frames Catherine White @oxinabox.net · 30/08/2026
It's true. Visitor pattern is a hack around not having true double dispatch. And really gross vs having it in the language. But i have never seen it used in the wild. Admittedly, a majority of my experience is in Julia where it isn't needed
010
Dr Frames Catherine White @oxinabox.net · 29/08/2026
Yes. But what about outside of math?
100
Dr Frames Catherine White @oxinabox.net · 29/08/2026
"you might ask 'Frames are you giving a Julia talk at a python conference?' I am not, I have before and I will again but I ain't today"
020
Dr Frames Catherine White @oxinabox.net · 29/08/2026
Slides from my pycon-au lightning talk. "There is only one operation for which humans care about enough to implement quintuple dispatch" It's either pro-or-anti multiple dispatch I guess. (For screen reader accessible see on canva: canva.link/jg27bz1t3q5n... It's almost all text)
292
Dr Frames Catherine White @oxinabox.net · 12/08/2026
I also know, because people often open issues on it, that it gets used relatively often for projects that never get put in the general registry. I suspect for projects that i am the sole maintainer on, it is one of my most frequent used open source packages. (less than DataDeps though)
000
Dr Frames Catherine White @oxinabox.net · 12/08/2026
And that was good enough for my needs. Yes it gets pretty slow when you have thousands of items. But I didn't. And yes it has some pretty heavy dependancies for a MILP solver. But since this is the only algorithm for DAG layout in julia people just use it.
000
Dr Frames Catherine White @oxinabox.net · 12/08/2026
I also couldn't be bothered translating a heuristic algorithm in Julia. But I am quiet good at writing MILPs by hand so i did that. (though for a key improvement I ended up looking at the Zarate paper, who basically came up with same MILP but knew a trick to speed up solving i didn't)
100
Dr Frames Catherine White @oxinabox.net · 12/08/2026
Since the real algorithm is NP-hard. It is a MILP. All the places I have seen DAG layout algorithms implemented they use the heuristic. And were written decades ago or based on references from decades ago. But in the last decade we have got way better at solving MILPs and computers have got faster
100
Dr Frames Catherine White @oxinabox.net · 12/08/2026
See in general in DAG layout you want to reorder the nodes to minimize number of crossings. And if you have ever used `autoarrange` on a DAG in say graphviz you will see you can often improve on the ordering if you did it by hand. Because they are using a heuristic algorithm.
100
Dr Frames Catherine White @oxinabox.net · 12/08/2026
it's quiet amusing to me that LayeredLayouts.jl has 11 direct dependants (and 2 more indirect). Laying out DAGs is useful. Its why many languages implement smart heuristic algorithms for them. I did not implement a smart heuristic algorithms. I implemented the NP-Hard always optimal algorithm.
200
Dr Frames Catherine White @oxinabox.net · 15/05/2026
A discussion after juliacon London in 2018, with Michael Krabbe Borregaard: "Basically I don't trust it will be maintained unless it's supported by a faculty not a student. People graduate and move on." (3/3)
000
Dr Frames Catherine White @oxinabox.net · 15/05/2026
A presentation at ACL in 2018 by Christofer Manning, who maintain(ed?) Stanford CoreNLP: "I once let a student write a korean tokenizer in Scala. It broke 3 years later and noone could fix it. So i deleted it. No java component has ever needed maintainance." (2/3)
100
Dr Frames Catherine White @oxinabox.net · 15/05/2026
On the maintaince of academic software there are two things I will always remember: (1/3)
100
Reposted by Dr Frames Catherine White
Catherine Frames @oxinabox.bsky.social · 15/05/2026
Then: "why doesn't your kinetic model have any parameters" Me: "😭they are all state😭 why does everything effect everything?😭" Them: "how's your solver doing?" My solver: 😭
022
Dr Frames Catherine White @oxinabox.net · 15/05/2026
added to my startup.jl `ENV["JULIA_PKG_PRESERVE_TIERED_INSTALLED"] = "true"` so hopefully i can stop precompiling things constantly when making minor changes to dependencies a package that indirectly depends on hundreds of packages. Somethings always getting updated at that scale
000
Dr Frames Catherine White @oxinabox.net · 11/05/2026
love having PRs from 2020 merged, on active projects. It's like "I was right back then, and now you all see it" github.com/JuliaLang/ju...
github.com
empty fall back to emptymutable rather than Set() directly by oxinabox · Pull Request #34676 · JuliaLang/julia
I am going over the AbstractSet interface and it seems odd to define both of these seperatately as fallbacks to Set()
070
Dr Frames Catherine White @oxinabox.net · 13/03/2026
It is starting to feel like I am going to have to learn all the theory behind Hit-and-run samplers, and other MCMC / probabilistic programming stuff.
010
Dr Frames Catherine White @oxinabox.net · 07/03/2026
Had a PR merged without further changes, after 5 years github.com/queryverse/Q...
github.com
More informative error message for noniterators by oxinabox · Pull Request #47 · queryverse/QueryOperators.jl
It was confusing when I was trying to implement a able and I got an error with no message
040
Dr Frames Catherine White @oxinabox.net · 06/03/2026
was thinking back about my first vaguely significant open source PR today. Almost a decade ago. Feels much longer. github.com/JuliaLang/ju...
github.com
Fast exp2(::Int) (fixs #17412) by oxinabox · Pull Request #17447 · JuliaLang/julia
This Fixes #17412, using bit twiddling to find exp2(::Int). The method for doing subnormal results is from @ScottPJones The testing code may be a bit excessive, but it is fast. And it is important ...
030
Dr Frames Catherine White @oxinabox.net · 11/02/2026
My employer did a spotlight on me for their social media. 😊😊😊 www.linkedin.com/posts/meet-o...
linkedin.com
Meet Our Team: Frames C White | Cell Bauhaus
Meet the people making Cell Bauhaus work – and making it a place worth working for. First up: Frames Catherine White.
010
Dr Frames Catherine White @oxinabox.net · 02/02/2026
It's a good point. And that feels less of a nasty system to work with
000
Dr Frames Catherine White @oxinabox.net · 30/01/2026
In general it feels like it should be useful for things to know stuff like "this collection is unordered". Which implies maps over it, should be allowed to be parallelized. (And so implies properties about the function being mapped also).
000
Dr Frames Catherine White @oxinabox.net · 30/01/2026
I feel like this isn't particularly novel. I just haven't seen it exposed to user. But to be fair I haven't seen closely any compiler tech focused on automatic parallism.
100
Dr Frames Catherine White @oxinabox.net · 30/01/2026
I think we could probably hack something together using nonnative type lattices in Julia to do all the inference around it But the tooling for that isn't stable or nice if you don't have access to Keno. Which we did have when I was at juliahub working with him in DAECompiler.
200
Dr Frames Catherine White @oxinabox.net · 30/01/2026
Compilers do do a fair bit of reasoning around this kinda thing. Eg using purity to perform common sub expression elimination and loop invariant code motion. But I haven't seen it very exposed to the end user as properties they could write code that dispatches on.
100
Dr Frames Catherine White @oxinabox.net · 30/01/2026
And if an operation is nilpotent then when mapping it over a sparse array then you don't have to map the structural zeros. And if it's pure you can cache it. Etc etc.
100
Dr Frames Catherine White @oxinabox.net · 30/01/2026
For example: if you have a scan (accum, fold) over an associate function (which you can infer) then you can use various prefix sum operations to parallelize it. See dspace.mit.edu/bitstream/ha...
dspace.mit.edu
100
Dr Frames Catherine White @oxinabox.net · 30/01/2026
Something I have been thinking about on and off is about the annotation of function primatives with properties, like nilpotent, associative, commutative, etc, then using (type) inference to infer this about functions built in them. Then using that for automatic parallelism and other optimisations.
120
Reposted by Dr Frames Catherine White
Catherine Frames @oxinabox.bsky.social · 29/01/2026
I accidentally turned on AI completion in VS-Code yesterday. And I though "_fine_, I will finally try this thing" and I am really not liking having my tab completion lie to me? I just have to check it when it doesn't work, then look up the right way. When I could have just immediately looked it up
3352
Reposted by Dr Frames Catherine White
Dr Frames Catherine White @oxinabox.net · 19/11/2025
the amount of hatred i have for good tests that were marked "skip" because they are too slow that have bit rotted, is only exceeded by my hatred for good tests that were marked "skip" that are still good and would have caught bugs had they not been set to skip
051
Reposted by Dr Frames Catherine White
GomahuAzarashi @gomahuazarashi.bsky.social · 17/12/2025
I've just created a #JuliaLang package BlueskyClient.jl github.com/AtelierArith... . You can post text, images with ALT text, GIFs, and MP4 videos from the package. Give it a try!
github.com
GitHub - AtelierArith/BlueskyClient.jl: Client application for Bluesky based on AT Protocol
Client application for Bluesky based on AT Protocol - AtelierArith/BlueskyClient.jl
3145
Dr Frames Catherine White @oxinabox.net · 14/01/2026
I did yes. www.oxinabox.net/2024/12/08/b... It's mostly a nice tutorial on how to work with typical JSON over REST with pagenation APIs. bsky is shockingly easy API wise since no auth
oxinabox.net
Querying the Bluesky API
030
Dr Frames Catherine White @oxinabox.net · 14/01/2026
this is a really cool page on all the tricks you can use to express different ideas in terms of (Mixed Integer) linear programming. Cos the whole thing is very tricky. Like the trick of splitting variables so you can have L1 regularisation which is nonlinear in naive implementation
docs.mosek.com
9 Mixed integer optimization — MOSEK Modeling Cookbook 3.4.0
110
Dr Frames Catherine White @oxinabox.net · 02/12/2025
I have spent far too much time dealing with flakey tests and nondeterministic failures today
040
Dr Frames Catherine White @oxinabox.net · 19/11/2025
devo
000
Dr Frames Catherine White @oxinabox.net · 19/11/2025
the amount of hatred i have for good tests that were marked "skip" because they are too slow that have bit rotted, is only exceeded by my hatred for good tests that were marked "skip" that are still good and would have caught bugs had they not been set to skip
051
Reposted by Dr Frames Catherine White
Dr Frames Catherine White @oxinabox.net · 11/11/2025
yes, I find i often in python I have modules that are really just one function (at least in their public API). Because it makes sense for all that to be in one file. Combined with explict imports and it makes quiet a complexity of import headers.
111
Dr Frames Catherine White @oxinabox.net · 14/11/2025
Also like if you really care about performance for languages not using latin-1 there are considerations about storing code-points rather than code-units. And you might want a string to be memory mapped etc etc.
020
Dr Frames Catherine White @oxinabox.net · 14/11/2025
does python 3 have an abstract base class for strings? I feel like it should. because for data-structures like a rope you want the string API, but you definately do not want to store it like a string, so inheriting from str is no good. en.wikipedia.org/wiki/Rope_(d...
en.wikipedia.org
Rope (data structure) - Wikipedia
220
Dr Frames Catherine White @oxinabox.net · 11/11/2025
I am not sure if my copyright is registered anywhere. I am Australian, the imprint of Springer that was my publisher is based on Singapore. Australian copyright applies without need for registration. You need to register to take someone to court over it, but you can do that long after.
010
Dr Frames Catherine White @oxinabox.net · 11/11/2025
I wanted to see if I was part of the Anthropic settlement class: ✅ Book on LibGen before 2021 ✅ Book has ISBN ❎ were registered with the United States Copyright Office Alas, I am not. While my rights have obviously been violated, it is not in a way that is covered by this court case.
110
Dr Frames Catherine White @oxinabox.net · 11/11/2025
It means means you end up with lots of ``` from package.component.foo_do import foo from package.component.bar_do import bar ``` I have seen it worked around by reexporting foo and bar from `component`
010
Dr Frames Catherine White @oxinabox.net · 11/11/2025
yes, I find i often in python I have modules that are really just one function (at least in their public API). Because it makes sense for all that to be in one file. Combined with explict imports and it makes quiet a complexity of import headers.
111
Dr Frames Catherine White @oxinabox.net · 30/09/2025
I have successfully convinced folk to call it a SalamanderModel
0100
Dr Frames Catherine White @oxinabox.net · 30/09/2025
So we had a model incorporating thermodynamic constrains called a ThermoModel. And another model with enzyme constraints called a GeckoModel. (Gecko = Genome-scale model Enzyme Constraints, using Kinetics and Omics.) And we were making a model to combine them. Some kind of ThermoGecko.
140