Projects
Highlights of My Software Engineering Work
Better Texter is an innovative iMessage application that enhances text communication using artificial intelligence. It allows users to convert texts into various tones like professional, friendly, or humorous, and offers translation into nine languages. A key feature is its smart voice texting, which lets users dictate messages, transforming them into well-structured texts with perfect grammar in any chosen tone. Additionally, it offers personalization options through a companion app outside of iMessage. Without any dedicated marketing efforts, Better Texter has organically garnered attention and surpassed 100 downloads on the App Store, highlighting its potential and user interest.
The Workout API is a RESTful service utilizing the FastAPI framework and a Postgres database hosted on Supabase. It offers endpoints for user management, workout recommendations, logs, and goal setting. A standout feature of the Workout API is its predictive model that estimates weight loss from workout activities, and designs personalized workout plans based on the user's basal metabolic rate and daily calorie deficit. Working on this project, I gained experience using FastAPI, Alembic, Faker, and SQLAlchemy, and learned important lessons such as the significance of thorough documentation, managing concurrent requests, and protecting against injection attacks.
This library provides an API for C programmers to create and manage threads. It uses a round-robin scheduler, a simple method based on a queue, to decide which thread runs next. The journey of creating threads in C was both challenging and rewarding, and it involved two critical stages. The first stage was allocating memory for each thread's stack. This meant setting aside a specific area in memory for each thread's operations. More than just allocating space, I meticulously prepared each stack, ensuring it was correctly configured and primed for the thread's execution. The second stage focused on smoothly transitioning control between threads while maintaining an accurate record of each thread's current state. For this, I employed a data structure to track the essential elements of each thread, such as their registers and stack pointer. Diving into this project opened my eyes to the intricate world of thread management. And I won't sugarcoat it - the debugging process was a real challenge!
This project dives into the complexities of marital relationships using Data Science to predict divorce likelihood from survey data. Our study is based on responses from Romanian couples, covering 54 aspects of a relationship, such as communication and compatibility. Our analysis involved several stages, including data preprocessing, correlation analysis, K-Means clustering, cross validation for feature selection, K-Nearest Neighbors (KNN) modeling, and sentiment analysis. A significant challenge was creating K-Means and KNN algorithms from the ground up, providing profound insights into algorithm mechanics and their application in the realm of human relationship analysis.
Screen Squad is a dynamic website that transforms movie exploration, review sharing, and personal watchlist curation into an engaging experience. Utilizing the TMDB API, it showcases a diverse range of movie details through a React-driven front end. The project features a comprehensive login system, and offered me deep insights into essential web development aspects, from crafting aesthetically pleasing React interfaces to building a robust REST API with Node.js and Express. Through this project, I gained experience in a wide range of software engineering subject areas like GitHub, sprint planning, continuous integration with GitHub Actions, code reviews, test-driven development, and agile methodologies.
OAZO is a functional programming language I developed, inspired by Lisp's syntax and built using Typed Racket. This project involved designing the language's syntax, parsing it into an Abstract Syntax Tree (AST), and interpreting this AST to execute OAZO code. It features anonymous functions, closures, syntactic sugar for function naming, and essential library functions. Through creating OAZO, I deepened my skills in functional programming, parsing, and language interpretation, exploring core concepts like syntactic elements, reduction rules, scope, and the transition from mutation-based to purely functional code. OAZO is a testament to applying theoretical computer science principles in language design, offering insights into the mechanics and versatility of programming languages.
The file compression tool is a command-line utility that compresses and decompresses files using Huffman Codes. My implementation achieves a compression ratio of around 50% on average.
The Tiny File System (TFS) is a minimalist file system designed to execute fundamental file operations like creation, reading, writing, and deletion. It integrates four main block types – superblock, inode blocks, data blocks, and free blocks – and efficiently manages them using linked lists. A key challenge in this project was the complex management of these lists and ensuring rigorous error handling. I also developed a simulated disk driver library using a file to replicate disk storage. This project advanced my understanding of file system architecture, teaching me about the nuances of designing and maintaining a robust and efficient file system.
The Memory Simulator is a Python script designed to emulate the functionalities of a computer's memory system. This simulator translates logical memory addresses into physical addresses, while also replicating the operations of critical components such as the Translation-Lookaside-Buffer (TLB), Page Table, Disk, and RAM. A focal point of the simulator is its tracking of page faults and TLB hits, allowing us to analyze the effectiveness of different page replacement algorithms. It incorporates three page replacement algorithms: First In First Out (FIFO), Least Recently Used (LRU), and Optimal. This project provided me with an exploration into the dynamics of memory management, deepening my understanding of its intricate processes and the role it plays in computing systems.
Developed Minimally Useful SHell (mush2) a compact yet powerful shell program capable of handling essential file operations, including creation, reading, writing, and deletion. Key features include interactive and batch processing modes, advanced input/output redirection with pipe support, built-in 'cd' command functionality, and signal handling. Designed to manage complex command pipelines and arguments efficiently, mush2 demonstrates advanced understanding of shell architecture and process management in a Unix environment.