Various Open Source Contributions
Oh My Posh Unity Segment
Tags: Go
Oh My Posh is a custom prompt engine for any shell that is structured around the concept of “segments”, which renders a single context like showing the current folder, user information or git status when relevant.
Because I frequently use Unity Engine and am a fan of the oh-my-posh terminal extension, I decided to contribute a custom segment that displays the Unity version and C# version of the current working directory. This was my first time using Go.
Versionize
Automatic versioning and CHANGELOG generation, using conventional commit messages
Tags: C#, conventional commits
- I’m one of two core maintainers.
- The other developer was the original creator and I joined on later.
ReactiveUI
Tags: C#, Rx.NET, iOS, Android, UWP, WPF
I was a core maintainer from about 2018 to 2022. This includes code contributions, providing support in the ReactiveUI Slack channel and answering questions on Stack Overflow.
- fix(memory leak): original view model is not released when swapped out
- fix(threading): RxApp scheduler logic makes unit tests unpredictable
PropertyChanged
Tags: C#, Rx.NET
H5P-Nodejs-library
Tags: H5P, NodeJS, TypeScript, S3, MongoDB
I contributed this repository while working as a backend engineer at KidsLoop because we were using this library.
This TypeScript library provides everything needed to create custom H5P servers running on NodeJS.
- fix(h5p-mongos3): s3 lifecycle helper not taking effect
- perf(h5p-server): reduce memory and IO when uploading package
.NET-Ogg-Vorbis-Encoder
Tags: C#, Vorbis
Major Performance Improvement PR
Before
Method | Mean | Error | StdDev | Allocated |
---|---|---|---|---|
ConvertPCMFile | 4.174 s | 0.0828 s | 0.1835 s | 608.78 MB |
After
Method | Mean | Error | StdDev | Allocated |
---|---|---|---|---|
ConvertPCMFile | 1.605 s | 0.0374 s | 0.1073 s | 162.53 MB |
- Change IList parameters to concrete types (array and OffsetArray)
- Use Span
instead of OffsetArray - Add stackalloc and MemoryPool optimizations
Allocate temporary arrays on the stack instead of the heap when the size is small enough. Otherwise, use a pool and slice it to the needed size.
float[] seedArr = null;
Span<float> seed = _totalOctaveLines <= 128
? stackalloc float[_totalOctaveLines]
: (seedArr = ArrayPool<float>.Shared.Rent(_totalOctaveLines));
seed = seed.Slice(0, _totalOctaveLines);