Nithin Bharathi

I am a graduate student studying Computer Science at Dalhousie University. My interests revolve around Algorithmic Complexity, Data Structures, Programming Languages, Software Engineering, and Distributed Systems. Prior to this, I also worked as a Software Engineer at Odessa Inc.


Experience


Home

Odessa Inc. - Senior Software Engineer

I joined Odessa as a full time software engineer in 2020 right after my graduation.

At odessa, I was part of the data migration team wherein I worked on enhancing Odessa's Data Migration tool by developing new migration modules, improving the performance of existing modules and implementing additional product functionalities. This includes but not limited to features like logging data metrics during migration through multithreading, subroutines for processing data efficiently to avoid timeout issues, and automating migration set up tasks at the database level.

Besides, I also spent a significant amount of time working on bug fixes, writing stored procedures, tuning expensive queries, redesigning existing functionalitites, creating test scenarios, working closely with junior developers, assisting them, and handling production release activities for the team.


Projects

Wordgen contains different character-level language models which predict the next character given a sequence of characters as input using a Multi-layer perceptron. YaGPT contains implementation of a miniature version of chatgpt. It employs a Multi-layer Perceptron (MLP), to model sequential data at the character level. The model processes the input sequence through multiple fully connected layers, and generates a probability distribution over the possible next characters. In addition to the core MLP architecture, Wordgen also integrates an attention mechanism coded from scratch. This attention layer allows the model to focus on different parts of the input sequence when making predictions.

JMatrix is a Java package that is designed for working with 2-dimensional matrices efficiently. It consists of methods that support parallel execution of Numerical calculations to improve the performance. The current implementation supports operations for all the wrapper classes that extend the Number class in java and uses bounded generics to enforce type check during compile time. Additionally, the arithmetic operations (non-parallel) also support broadcasting similar to numpy library by allowing different matrix shapes to be involved in the computation if they satisfy the broadcasting rules.

Scalargrad is a reverse automatic differentiation system that supports simple arithmetic operations on scalar values. These operations are recorded internally using a directed acyclic graph and later used in computing the derivatives during backpropagation.

Versioneer is a simple version control system built in Java for file management. Inspired by Git, Versioneer offers functionalities such as init, add, commit, and showdiff. It’s a great little tool for simple version control built for educational purpose only.

C-STL : as the name suggests is a C++ STL like library built using C. It currently supports hashtable, linkedlist, stack and queue. This project is a work in progress, with plans to expand and incorporate additional data structures and algorithms.

PatternMatch-Suite : is a program that can be used to build an FM-index for large DNA sequences. It is highly space-efficient as it uses bit vectors internally for in memory storage and supports search operations like MEM finding and counting occurences of a pattern by using optimised algorithms.

Memory Management Simulation is a project aimed to manage dynamic memory with efficiency. The project focuses on Memory Allocation and Garbage Collection. It serves as a foundational tool for understanding memory management techniques.

BoringLang is a minimalistic programming language developed in Java, designed to explore the fundamentals of language design and compiler construction.

Computer vision contains implementations of various neural network architectures like k nearest neighbors, convnets for image classification from scratch using Python.

MarkovGenerator is a stochastic model based on the technique of the Markov chain that predicts new names based on the text sample provided. It also has an interactive UI where the user can import the text file based on which the words have to be generated.


Misc Links

The following are a collection of techinal links that I have found to be interesting.