Oh My Posh Unity Segment

Website

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.

Unity Segment Docs

GitHub PRs

Versionize

GitHub NuGet

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

GitHub Website

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.

PRs

PropertyChanged

NuGet

Tags: C#, Rx.NET

Performance and benchmark PRs

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.

2 Contributions

  • fix(h5p-mongos3): s3 lifecycle helper not taking effect
  • perf(h5p-server): reduce memory and IO when uploading package

.NET-Ogg-Vorbis-Encoder

NuGet

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);

Updated: