Hi, I’m

Kian Kasad.

CS @ Purdue
LinkedIn

About me

I’m a second-year Computer Science student at Purdue University. I enjoy writing software, managing servers, and learning about new technologies. I’m a big fan of open-source software and self-hosting. I enjoy lower-level development systems programming the most, though I have experience in several other areas as well. Lately, I’ve found system design and architecture to be quite interesting, and am actively learning more about that field.

Outside of the digital world, I’m an Eagle Scout, an amateur radio operator, a former gymnastics coach, and a pole vaulter. I also love plants! I have a small collection of houseplants as well as a bonsai tree in my dorm room.

I currently work as a teaching assistant for Purdue’s CS 240 course, Programming in C. There, I design and write homework assignments, and program the solutions and test modules. Outside of school, I spend much of my free time tinkering with computers. My current primary project is an Ansible playbook to automatically set up a home server.

Languages & Tools

These are many of the languages, tools, frameworks, etc. that I have experience with. I’ve used all of these in my projects and/or coursework, though some I have more experience with than others. There are several tools & languages that I used to use many years ago, but I don’t list them here because I am no longer confident in my ability to use them effectively.

The lists below are in no particular order.

Languages

Tools

Projects

Home server

Since 2024
A Debian-based home server running on a tiny, power-efficient mini-PC, deployed fully automatically and reproducibly using Ansible.
Screenshot of the Grafana dashboard monitoring my home server
Screenshot of the Grafana dashboard which monitors my home server and displays statistics such as CPU, memory, disk, and network usage.

Over the past few years, I have experimented with self-hosting several services, using a variety of hardware. But when the laptop I was using as a server died, I realized I needed a more reproducible and maintainable setup.

This summer (2024), I dove into learning Ansible so I could create a fully-reproducible server deployment. Ansible is an infrastructure-as-code tool, which allows me to define the desired state of my server in a set of YAML files with some custom modules written in Python. Over the span of a few months, I wrote a playbook that installs and configures all the services I need for my home server.

This allows me to not only set up the server quickly, but I also track the entire server configuration in a single Git repository, including details such as packages installed, firewall rules, and much more. This makes it easy to recover from inevitable mistakes or hardware failures.

The playbook is hosted in a GitHub repository with an automated CI pipeline that runs the playbook in a virtual machine every time I push a commit. This ensures that the playbook will always work properly on a fresh installed of Debian or Ubuntu Linux.

The server runs several services in Docker containers, all served behind a Traefik reverse proxy, complete with TLS certificates and domain names. The services include monitoring and observability tools such as Grafana, Prometheus, and Loki, so I can keep an eye on the server’s health and performance. I even get alerts sent to my email when unusual events occur!

Skills/concepts applied

  • Ansible
  • Infrastructure as code
  • Monitoring & observability
  • Docker containerization
  • Linux system administration
  • Continuous Integration testing

WebQM (in progess)

2024
A web-based inventory management system for Scout troops.
    Screenshot of the WebQM inventory page with sample data.
    Screenshot of the WebQM inventory page with sample data.

    WebQM is a web-based inventory management system I am building for my former Boy Scout troop. The goal is to make it easy for the troop’s quartermaster to keep track of what equipment the troop owns, what condition it’s in, who has it checked out, and when it is due back.

    WebQM is a web application built using SvelteKit for the frontend and Google Firebase for the backend. The data is stored in Firestore, a NoSQL document database.

    The end goal is to create a web application which can also cache data locally to work fully offline for weeks at a time.

    Skills/concepts applied

    • Web development
    • SvelteKit
    • Firebase
    • NoSQL databases

    CIter: Rust-style iterators for C

    2024
    A library implementing most of the Rust-style lazily-evaluated iterator features for C.
    Graphic with sample code in Rust and in C with CIter.
    Graphic with sample code in Rust and in C with CIter.

    One of the amazing features of Rust is its powerful iterator system. It allows you to chain transformations on collections of data in a way that is both efficient and easy to write. I wanted to bring this power to C, so I wrote CIter.

    CIter implements the most important parts of Rust’s iterator system, including nearly all transformations. It supports double-ended iterators, fixed-size iterators, and even iterators with known but non-exact size bounds.

    This library is one of many smaller open-source projects I’ve worked on. The main goal was practice for myself, but I also made Citer available to others who might find it useful. To ensure its quality, I set up a continuous integration pipeline which tests the code on each commit.

    Skills/concepts applied

    • C programming
    • Rust programming
    • Continuous Integration testing
    • Open-source software

    Raspberry Pi backup system for classrooms

    2023
    A custom backup solution to seamlessly and efficiently back up data from a classroom of Raspberry Pi computers to one central location.
    Screenshot of the write-up of my Raspberry Pi backup system.
    Screenshot of the write-up of my Raspberry Pi backup system.

    In high school, my computer science teacher used a classroom set of Raspberry Pi computers to teach programming. Raspberry Pis’ SD cards are not the most reliable, and that combined with students’ unfamiliarity with Linux led to lots of accidental data loss.

    To solve this, I built a software system which runs on every Raspberry Pi in the room, and automatically backs up all student data at the end of each class period and school day. The backups are sent to a central server (also a Raspberry Pi), which deduplicates and compresses the data to save space.

    The system has several key features which make it suitable for classroom use: it is fully automated, can be installed on a Pi using a single command, and allows the teacher to configure the entire system using a single configuration file. As an added bonus, this configuration file can be used to run custom shell scripts on all the nodes in the classroom. This makes it easy to, for example, install new software for all students, without having to manually perform the installation process 30 times.

    I encountered many challenges when building this system. For one, I don’t control the school’s network infrastructure, so I couldn’t hard-code IP addresses. Instead, I had to ensure that mDNS responders were set up on all nodes so they could discover each other automatically. Another issue was the thundering herd problem: having all nodes back up at the end of each class period would overload the backup server, so I had to add randomized offsets to the backup times to spread out the load. Several other problems, such as security, are laid out in the write-up linked above.

    Skills/concepts applied

    • Python programming
    • Linux/systemd service scheduling
    • Data deduplication & compression
    • Thundering herd problem
    • Incremental backups
    • Zero-configuration networking

    TI Wordle

    2022
    A Wordle clone for TI-84 graphing calculators, written in C.
    Animated image of the TI Wordle game running on a TI-84 calculator.
    Screen recording of the TI Wordle game running on a TI-84 emulator.

    What do you do when you’re bored in math class, you like programming in C, and Wordle just went viral? Duh! You write a Wordle clone for your calculator so you can play it in class. Okay maybe you wouldn’t do that, but I did.

    This project opened up a new side of C programming for me: embedded systems. On the TI-84, you don’t have the standard C library functions, so you can’t just printf() text to the screen or even dynamically allocate memory. But even more importantly, the calculator only has a few kilobytes of both RAM and storage, so I had to be very careful with how I stored data in my program.

    Because of the storage limitations, I had to get creative. Instead of using all 12,986 allowed Wordle words, I opted to use just the subset of 2,309 words which can appear as answers. This strays a bit from the original Wordle game, but it was a necessary trade-off to fit the game on the calculator.

    Skills/concepts applied

    • C programming
    • Embedded systems programming

    vnStat-web

    2021
    A web-based interface for the vnStat network traffic monitoring tool.
    Screenshot of vnStat-web, both light and dark themes
    Screenshot of vnStat-web, with both light and dark themes.

    vnStat-web is a web-based interface for the vnStat network traffic monitoring tool. It allows you to view your server’s network usage through a convenient web interface, rather than vnStat’s built-in command-line interface.

    I created this project in 2021, before I was aware of tools like Prometheus & Grafana, which I now use to monitor my servers’ network traffic. However, vnStat-web is still a useful tool and it still runs on kasad.com. Additionally, the GitHub repository has been “starred” by several people, which suggests that the tool is being used by others as well.

    vnStat-web is a fairly small project. It’s written as a static HTML/CSS/JS site, with a single API endpoint written in PHP to fetch the data. That PHP script uses vnStat’s JSON API to get the necessary data about the server it’s running on. It then filters & transforms that data before returning it to the frontend, where it is displayed using the Chart.js library.

    Skills/concepts applied

    • Web development
    • PHP programming
    • JavaScript programming
    • Open-source software

    kasad.com

    Since 2020
    The first of two servers owned and run by me. Hosts my website, personal email server, Git repositories, VPN, and more.
    Screenshot of some information about the kasad.com server
    Screenshot of the output of the neofetch command run on the kasad.com server.

    kasad.com is a Debian server I’ve been running since 2020. It’s a very low-spec VPS, but it still hosts my website (the one you’re reading now), plus a variety of services for my personal use.

    The most difficult one to set up by far was the mail server. It requires configuring SMTP, IMAP, DMARC, SPF, DKIM, DNS, spam filtering, authentication, mail aliasing/forwarding, and more in order to meet the stringent anti-spam requirements of other mail servers like Google’s Gmail. I spent several months learning about the nitty-gritty details of email protocols, and despite the challenges, I now have my very own self-hosted email server. You can reach me at kian@kasad.com!

    I first booted up the kasad.com server in 2020, and I’ve been slowly building it up ever since. Most recently, I set up metrics collection & exporting, allowing me to use the Grafana & Prometheus instances on my other server to monitor the kasad.com server.

    As this is a long-running project, I’ve written documentation on how the server is set up—mainly for my own reference, but it has helped a few other people as well. While the documentation site is not live right now, you can view an archived version using the link above.

    Skills/concepts applied

    • Web development
    • Linux system administration
    • Network security
    • Mail server configuration