About me
Hello, I am VinothKumar Raman. I live in Chennai, India. I have over 15 years of experience building software systems. Particularly large data systems. I am very interested in functional programming languages and type systems. I began a PhD at Chennai Mathematical Institute focusing on the same area but had to discontinue due to time constraints. I have a Masters in Software Engineering from Coimbatore Institute of Technology.
I have a ton of experience in Scala, Java, JavaScript and Typescript.
I have worked on small personal and professional projects Haskell, Purescript, Rust, Zig, Julia, Elixir and Python

Personal projects
BTC
An idiomatic work in progress scala library for Bitcoin. This is my implementation of things I learnt from reading Programming Bitcoin.
Chess engine
A work in progress chess engine implementation to understand Data oriented design. There is a beautiful documentation on stockfish here, which I am using to build.
Godel
A proof checker based on Calculus of constructions. The idea was to have math books which can run on browser but help you to prove things using the proof checker. I've built the initial proof checker working based on a paper by Simon Peyton Jones. I was experimenting a bit with implicit arguments, this one is a working version Godel.purs.
Stonks
Notebook-like UI backed by Apache derby to query and analyze stock ticks. Added few cool aggregation functions on derby to do linear regression. Also added a vector data type. Originally wanted to use duckdb, but it was very unstable at that time. If I were to do this now, that would be my choice of Database.
Zerodha.jl
Fascinated by Julia's performance with type-stable functions. I aimed to build the first version of the algo trading platform at Quantman with Julia. Built an api client for Zerodha stock broker's api in Julia. Later for other reasons stuck to JVM.
Statistically
Small library to do Ordinary Least Squares and Dickey fuller's (ADF, CADF too) stationary timeseries analysis in Nodejs. This was used at my work to analyse timeseries of stock symbols to see if they have enough correlation to do pair trading.
Galois
Idea was to emit metrics as monoid representations into Kafka topic per key. They are consolidated into rocksdb databases which can be queried per key. There were lot of metrics (aggregations) that are supported from averages, histogram, approximate unique counts (hyperloglog), approximate percentiles (qdigest).
bubblewrap
Built an async crawler library used at work to crawl the web for e-commerce product pages. It's tailored to internal use, so adapting it externally might require effort.
Interesting gists / Micro projects
AutoDiff.scala
Reverse mode automatic differentiation based on Provably Correct, Asymptotically Efficient, Higher-Order Reverse-Mode Automatic Differentiation by Simon Peyton Jones
RegExp.scala
An extremely fast O(mn)
(m is length of the regex and n is the length of the string) algorithm for regex matching based on Glushkov automata.
It could be extended to capture groups too by generalising the Ring structure. Based on functional pearl A play on regular expressions.
Hindley
An implementation of type inference algorithm for Simply Typed Lambda Calculus.
SpatialMap.scala
A geospatial index idea using prefix scans, sort of how MongoDB does geo spatial indexes.
SKIEquivalence.scala
Convert lambda to SKI combinator calculus and vice versa to prove they are equivalent in expressive power.
Regex.js
A very simple regex matching based on Regex derivatives.
DomanMath.hs
Generate number flash cards with solid circles for my kid. This uses a really cool Haskell library called diagrams. A functional pearl Monoids: Theme and Variations, how elegant that library is.
zig-timestamp
A utility that represents UTC timestamp (excluding leap seconds for simplicity). Allows us to get weekday, month, parse dates etc.
amoeba
A small utility to directly map case classes to configs in Typesafe config (HOCON). I think these days there are better ways to do this.
brainsuck
A brainfuck interpreter in C.
zig-rocksdb
An incomplete wrapper over RocksDB in zig.