Skip to content

Recent Posts

Post 5

p.s. Going to be changing up my style of writing (nobody wants to read AI slop), been inspired by alot of technical writing as read by @Primeagen.

College Updates and Semester Recap

Finished my first semester, and it has been the most amazing experience anyone could ask for. The bonus free time I have has allowed me to grow so much technically and personally. I would like to attribute much of this boost intellectual curiosity to the amazing people I have met at Cornell, and I am so grateful for the opportunity to be here.

What Have I Been Working On?

Cornell University CS 2112: Object-Oriented Design and Data Structures (Honors)

I’m sure many others who have taken this course would relate to my experience in this course. This has definitely been the most technically demanding course I’ve taken yet. Even coming in with a solid foundation in Java from StuyPulse and knowledge of most of the common data structures, the new concepts and A<1-6> assignments have been a challenge. However, I wouldn’t trade it for anything and definitely recommend the course to anyone who is interested in learning more about object-oriented programming and design patterns.

I am currently wrapping up the course’s final project, which is a desktop game called Critter World, built using JavaFX to be a desktop application. The game is a simulation-based game that involves creating critters with different attributes that can interact with each other and their environment.

Critter World

Critter Design Sketches

This was a very well-designed assignment, with clear parallels and setup towards building advanced computer applications. For example:

  • Critters are composed via a domain-specific language (DSL), which required writing a parser, lexer, and implementing an AST and a visitor pattern.
  • Game’s logic is implemented using a state machine, which required writing a state machine and implementing a state transition table.
  • Multi-threading is used to simulate the game’s logic in real-time, which required writing a thread-safe data structure and implementing a thread-safe state transition table.
  • GUI and MVC design patterns were used to separate the concerns of the game’s user interface and logic.
  • Dependency injection was used to decouple the game’s logic from its dependencies, such as the game’s user interface and data storage.
  • Unit testing was used to ensure the correctness of the game’s logic and behavior.

Reflections I didn’t do as well as I could have, as finals season was approaching and the overwhelming week-by-week sprint style of the assignment made it difficult to keep up with the pace whilst managing my workload effectively. This resulted in my multithreaded implementation being not thread-safe, albeit functional.

CUAUV

I’m proud to share that I joined Cornell University Autonomous Vehicle Team (CUAUV) as a software engineer. Being able to work on such a storied team (over 25 years old) has been an incredible experience. The team’s culture of using a monorepo and the robustness of their infrastructure was what drew me in comparison to other teams I had worked with. Never have I worked in a project with this many languages involved.

Subcode

There used to be Rust and OCaml as well!

I think I’m currently more interested in the team’s infrastructure rather than the AUV at this point. Most particularly, their in-house submarine simulation system looks absolutely insane. Look at how they’ve implemented fog from water as well as computer vision onto simulated submarine environments:

Submarine Simulation

Field elements can be detected using YOLO same as you would in real life

Being on this team has been wildly exciting. I hope to learn from the shoulders of giants from those before me, and apply their knowledge to my own projects.

Rust Rust Rust and Advent of Code

This is was the month of Rust for me. Perhaps I had been so numbed to all the code I had to write from Java’s verbosity. Or perhaps I had watched one too many videos on Rust’s hypetrain. So, similar to last year, I chose to use Advent of Code as the vehicle to drive my Rust learning journey. I started by solving the first few problems in Rust, which helped me get familiar with the language and its ecosystem. Much thanks to fspoettel’s Advent of Code template, which taught me much of how the cargo system works.

I wanted to extend this learning into adjacent fields I was interested in. I wasn’t confident in building CLIs or full high-frequency trading applications yet, but I was eager to learn more about them. This led to me to think about what applications Rust would be suitable for… and that’s when it hit me. Machine Learning!

Machine Learning with Rust

I want to justify the choice of Rust for machine learning applications. Because at this point, it was very clear I could use Python especially with its wealth of support. However, when thinking about Rust’s performance and safety guarantees, it became apparent that Rust was a better choice. The only barrier would be the lack of a mature ecosystem for deep learning in Rust, but I see this as an opportunity to apply myself to building a robust and efficient deep learning framework in Rust.

RustNet

That led to RustNet, a machine learning framework built in Rust. It’s mean to be as simple as possible, using no external crates. I wanted to write my own gradient descent, backpropagation, and other machine learning algorithms from scratch. Through it, I was able to learn how to write efficient Rust code using concepts such as reference methods, ownership, and borrowing. Here is a small 3-layered neural network example to solve XOR:

Terminal window
Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.27s
Running `target/debug/rust_neural_network`
0 XOR 0: [0.01494395806615838]
0 XOR 1: [0.9901374180200915]
1 XOR 0: [0.9793930055164223]
1 XOR 1: [0.017800014939907967]

My verdict of the language: Rust is a great language for machine learning applications. It’s made me a proponent of the language’s usage in this field. I hope to contribute to this space via open source contributions to active projects such as burn-rs and tch-rs.

Conclusion

Overall, this has been a great year for my learning. I think I’m going to conclude these more “diary-like” blog tho. I’ve been working on so many projects that talking about all of them has become unsustainable. So moving forward, these blog posts will be more tailored to a specific topic I have interest or want to share. So thank you, and I hope 2025 goes well for whoever is reading this.

Post 4

What Has Happened Since Post 3?

It has been almost half a year since I’ve lasted posted (did not accomplish the mid-winter break post sadly), but that means there is alot to be updated on! With most of my final projects requiring some form of programming, I have been able to apply my knowledge in a multitude of fields. So heres a quick rundown of what I have been working on since my last post.

What Have I Been Working On?

Robotics

With this year being my final season of being on StuyPulse Team 694, there was a multitude of projects I worked on during this build and competition season this year. For the uninitiated, StuyPulse is part of the FIRST Robotics Competition, a global robotics community that builds robots to compete an annual game, but it is so much more than that. The friends, community, and soft skills I’ve picked up in my three years on this team has been invaluable to my growth as a person.

This season, I worked as one of the senior programmers for Izzi, our competition robot. Being initially responsible for the swerve drivetrain and LED subsystems during the build season. (see here for what a swerve drive is). To me, the swerve drivetrain has been one of the more challenging programming hurdles, far greater then the traditional tank drive. The swerve drive requires a much more complex control system, with the need to control both the rotation and translation of the robot. I am especially proud of the alignment code, which used both our vision code as well as some trigonometric calculations for simplifying the driver’s job when it comes to specific tasks.

As the season progressed, and much of the codebase matured, my tasks become smaller, side projects, but they were honestly my favorite things to work on. Heres a list of some of them:

  • LED Subsystem: An entire overhaul of our LED subsystem, which used an addressable LED strip to display robot states and information to the drivers. (shame we used a shorter strip so we couldn’t use the odometry feature in LEDAlign.java)

  • Dynamic and Ferry Autons: As Izzi’s capabilities grew and the season progressed, so did the complexity of our autonomous routines. Once we realized that this season’s meta was the ferrying strategy, we created ferry autos and dynamic autos that could adapt to the centerline pieces being present or not. This was my personal favorite feature to work on, and I hope the team could expand it in the future.

  • PulseCrewPrep: A project I started to help the team’s efforts in PulseCrew, our “tech-support” efforts for other teams who are running in issues during the competition. As many teams would show up without code, this project was designed to help teams get their robots running as quickly as possible, with code templates for common mechanisms and hardware.

  • Kitbot: The Kitbot is a starter bot provided by FIRST for newer teams to get a head start on their robot. This was a project in which I rewrote the template code provided in the team’s style as well as adding additional features that would make the robot more competitive. (e.g. vision, autos, better control algorithms)

  • there were also other projects such as robot vision detection with convolutional neural networks, ROS integration, and a turret subsystem towards the end of the season, as you can see I was quite busy this season.

Now that the season has ended, I am excited to see how the team will grow in the future. I’m not sure if I will be immediately involved with FIRST next year as a mentor, but maybe I could be a CSA in the future!

Physics Demos and Projects

AP Physics C, my achilles heel. It has been a struggle of mine the entire year as I try to keep up with the class. But one of the things I enjoyed the most from the class was the labs and projects we did. But some new projects I did this year were an electric field simulation and a brushless motor simulation. Both were done in Python, with the electric field graph visualization with matplotlib and the brushless motor simulation using vpython. I will be posting these projects on my GitHub soon, so stay tuned! I think these projects are a great way to demonstrate knowledge in physics and programming, and I hope to do more in the future.

Presentation of Foo Food Fighters

June 18th was the final presentation day of my Google mentorship project. This was honestly one of my most fun and complete side projects, using the multitude of skills and experiences I’ve picked up over the years. Using CV from robotics, ML from my last project, and fullstack development from my time at XCave, I was able to create a fully functional web app that could detect food items from a photos, text, or a live camera feed and return correct nutritional information in order to aid someone’s nutritional needs. I was able to present this project to a panel of Google engineers, and even was able to visit the Google office in NYC! I am very thankful for my mentor, Anthony Lui, for guiding us through the project and helping us learn so much.

Cybersecurity

Having taken a cybersecurity course this year, I have been able to learn a lot about the field and its applications. I am so happy to have been exposed to a whole field of computer science that I had never even thought about before. Working with tools like hydra, nmap, gobuster, etc, has provided real-world applications in my daily life. My final project in the course was recreating the AES encryption algorithm that is the global standard for transmitting information on the internet. My favorite memory involving using the knowledge from cybersecurity was getting the wifi password of semi-public (“public” but password protected) wifi networks in my neighborhood. I hope to continue learning more about cybersecurity in the future, especially in college.

What Am I Planning to Work On?

After that long rant on my projects over the last few months, I think you can guess that I’m fairly exhausted. But that doesn’t mean no code will be written this summer. While I don’t plan on starting any new projects, I do plan on continuing/ expanding prior projects I’ve worked on.

Farewell

I plan on visiting Europe this summer, hoping to hit Spain, Italy, and the Netherlands. After that it will be working some summer jobs until I head off to college. I plan on updating you guys on my projects right before I go off to college, so stay tuned! Until then, peace!

Post 3

What Has Happened Since Post 2?

I am glad to say that the intro from Post 2 has paid off, as I have been accepted to Cornell University’s College of Engineering! I am very excited to be attending Cornell this fall, and I am looking forward to the next four years. Although I still have to finish the remainder of my senior year, I am glad that I have been able to take a break from the stress of college applications as it gives me the option to work on my projects again. Speaking of projects, I have been working on a few things since my last post.

What Am I Working On?

I had to cram a lot of work before submitting my college applications, so I don’t have many updates on the larger projects I started in Post 2. However, I have been working on a few other things since then…

Newbie ED Completed

I have finished teaching the 2023-2024 Newbie ED curriculum for StuyPulse. The three-month-long curriculum is meant to teach new members of the team the basics of Java programming, Robotics concepts like control theory, the WPILib library, and the mindset of being a good software developer that I had adopted from my internship. The curriculum is currently split into 16 lessons, each with a slide deck found via README.md in each lesson, with code examples and answer keys when applicable. The final lessons that took place this past week were a “final exam” of the knowledge they have learned over the past three months. It was a project to create their own DifferentialDrivetrain subsystem, commands to control the subsystem, as well as using PID and filters to smoothen the robot’s actions. The final project’s key can be found in the key branch of [ianshi] (https://github.com/BenG49/ianshi).

Physics Gravitational Orbit Simulation

This is a simulation built in VPython of how the Earth orbits the Sun as a result of their gravitational forces. The simulation is based on a couple of different variables, such as the mass of the Earth, the mass of the Sun, the distance between the two, and the initial velocity of the Earth. The simulation is meant to be used as a tool to help students understand the effects of gravitational force on a projectile. By adjusting the fields in the simulation, students can see which variables affect the projectile’s motion and come out with an ansatz for the gravitational force equation. I had expanded on this program as well, such as creating presets for both circular and elliptical orbits, as well as a custom input for the Earth’s initial velocity, coupled alongside a “prediction” on the behavior of the orbit of the Earth (whether it would crash towards the sun, stay in orbit, or escape out into space) as well as a graph demonstrating how the system’s angular momentum remains constant over time regardless of its orbit type.

What Am I Planning to Work On?

As a continuation of the last post, I want to continue learning a system-level language like C or Rust (no more C++…). I also want to learn more about machine learning and data science, as there are certain prediction model ideas I have. There is a bunch of other stuff I want to work on, but I will update you guys on that in the next post.

Foo Food

It’s that time of the year again, my chance to work with Google mentors to create a 🔥 project! This year, my group wanted to delve even deeper into what we have learned in machine learning from last year’s Science Question Study Tool project, while this time incorporating another topic we would be interested in learning more about computer vision. So our proposal for Foo Food is to create a machine-learning model that can analyze the visual media of various plates of food using computer vision. Our inputs will be images of plates of food, obtained via either importing from files or taking a photo in real-time. We plan on using tools like OpenCV, GoogleVision, or Detectron2 for object detection and image cleaning. Next in the backend, we plan on utilizing machine learning algorithms like RCNNs as well as supplementation from multi-modal large learning models like Gemini to analyze the type of food as well as the amount of food present in the photo. Then we can run it through a large database like Google’s Nutrition5K or Nutritionix API that can generate nutritional information regarding the food present in the photo. Finally, we plan on showcasing this on the front end through a stylized website that presents the information in multiple formats (per food/ overall plate) as well as a tracker for someone’s daily nutritional intake. We have many plans including many other features, so stay tuned for updates!

My C journey on 2023’s Advent of Code

This is my very first year doing Advent of Code, and I have heard from many in the developer community that it is the best way to learn a new language. So I decided to take on the challenge and learn C. I have been working on the problems for the past few days, and I have been learning a lot about the language. I have been using the C standard libraries, and I have been learning a lot about the language’s syntax and quirks. I even took this as a chance to learn how to write bash scripts using the AOC-cli tool to help create a script that would automatically get the problem of the day for me. Thankfully, I have not been troubled much by pointers as much as people have feared it to be; and for that, I greatly thank Mr. Holmes, my AP-CS A teacher, for hammering those fundamentals into me. However, I still severely struggle with working with strings in C, especially when it comes to splicing, tokenizing, and other common operations. I plan on continuing this challenge throughout December, and I hope to learn a lot more about the language.

Farewell

That’s all for now. I am glad to be back to working on my projects, and I am excited to see what I can accomplish in the next few months. I will try to post again sometime before or during midwinter break perhaps. Until then, peace!

Post 2

What Has Happened Since Post 1?

It’s been a while since I last posted, but I have been busy with school and college applications. However, I have finally finished all my early college applications (praying for the Cornell ED acceptance!) and even though I have a Macroeconomics test tomorrow, I have decided to take a break from studying and write this post.

Updates on Projects from Post 1:

A basic update on the projects I have worked on since Post 1 as well provide a summary regarding my internship at XCave LLC.

Linear Algebra Library Reforged

Since my last post, I have been working on my linear algebra library in JavaScript, and I have finished the Matrix and Vector classes along with their respective methods. I plan to start working on the ComplexNum class and its methods. However, before I begin with those classes, I intend to recode the entire library in a low-level language like C, C++, or Rust. The purpose of starting this project at the beginning of the summer was to become familiar with the syntax of JavaScript as well as the npm package manager. Now that I have a better understanding of the language, I want to rewrite the library in a low-level language to improve performance. I also want to take advantage of the portability of a language like C, making the library usable by other languages.

I plan on using tools like Emscripten[https://emscripten.org/] and SWIG[http://www.swig.org/] to port the library to JavaScript, Python, and Java for now. I am using this as a learning experience for these tools as well as the low-level language I choose to rewrite the library in.

RT Translator Discord Bot Shutdown (for now)

I have put a hiatus on the RT Translator Discord Bot project for now. I have been running into issues with the translation API I was using (LibreTranslate) as I wanted to host my local instance of the API for it to be free. However, I have been unable to get it to work. I have also been looking into using the Google Translate API, but while it works, the limits of the paid API model make me wary about releasing this to the public. I will be putting this project on hold until I can find a solution to this issue. However, this has been a great learning experience for me as I have learned a lot about APIs, JavaScript syntax, and the DiscordJS library. I plan to revisit this project in the future.

Update on XCave Internship

Having finished my internship at XCave LLC this August, I am proud to have said that I have learned more in these last two months about web development, data engineering, and data science than I have ever had the chance to learn. I worked with amazing colleagues while working such as my coworkers Ray and Tina, as well as my boss, Adarsh.

Having worked at XCave LLC for about 2 months, I have learned a lot about web scraping and data engineering (details about my tasks). The early weeks had been mini-projects to get us familiar with the basic scrapping and data analysis tools (Selenium, Pandas, etc) and the later weeks had been working on a project for the company. Our team’s project was to create a job aggregation website similar to that of Indeed.com or LinkedIn Jobs.

What I learned to use from Jobs Lounge

We had to scrape data from multiple job posting websites and organize them into a MySQL database, which later evolved into using PostgreDB + ElasticSearch database. While I had created MVP versions of pages via straight HTML, CSS, and JavaScript, the final front end of the website was done using React and TailwindCSS for styling. The backend was done using both Flask(Python) as well as NextJS(JavaScript). The reason for this was my lack of experience with JavaScript frameworks, so I suggested to Adarsh that I would start creating the product using Flask and then later on, I would rewrite the backend using NextJS as I learned. However, by the time I had grown comfortable enough to start rewriting the backend, the project was already in its final stages and all of the routing and database calls were already done in Flask. However, we were able to take advantage of Flask’s built-in Werkzeug library in conjunction with Redis for security and authentication, so it was not a complete waste. This was my first experience ever using Docker and Kubernetes to deploy a website, so I learned a lot about containerization and deployment. All in all, I am very proud of the work I have done and I am excited to see how the website will grow in the future.

What Am I Working On?

Now that school has started, I am back to fully dedicating my time to school as well as my extracurricular activities, namely my job as Director of Software Education at StuyPulse Robotics. I have been heavily involved in the team’s recent projects, which include:

Newbie ED Curriculum

I have been working on a brand new curriculum for new members of the team. The curriculum is for Java on the WPILib’s version of Visual Studio Code and includes topics such as Git, GitHub, Java, and the WPILib library. The curriculum has currently 13 lessons, and I plan to have around 16-20 lessons by the end of the year. Anyone can access the slides as well as the code for the lessons in the [newbie-ed] (http://github.com/StuyPulse/newbie-ed) GitHub repository.

ShooterLabs

I have also been working on a shooter lab for the team. It is a series of challenges meant to get someone who has no experience in Robotics programming familiar with writing FRC code. By completing the lab, you will be creating a Shooter subsystem in both its logic as well as hardware behaviors, while learning how to work with every part of the robot coding process (creating constants, writing commands, configuring RobotContainer, etc.). If you wish to attempt it, fork from the [ShooterLabs] (http://github.com/Keobkeig/ShooterLabs) GitHub repository and follow the instructions in the README.md file.

Physics Drag Force Simulation

Using Python’s VPython library, I have created a simulation of a ball being thrown in the air with drag force. The simulation is based on the equations of motion for a projectile with drag force. The simulation is meant to be used as a tool to help students understand the effects of drag force on a projectile. By adjusting the fields in the simulation, students can see which variables affect the projectile’s motion and come out with an ansatz for the drag force equation. The simulation can be found in the [DragForceSim] (https://www.glowscript.org/#/user/Richie_Xue/folder/MyPrograms/program/Lab1) folder in my GlowScript account.

What Am I Planning to Work On?

While I am busy with school and extracurriculars, I still have a few projects I want to work on. For example, I want to learn a system-level language like C, C++, or Rust. I also want to learn more about machine learning and data science, as there are certain prediction model ideas I have. There is a bunch of other stuff I want to work on, but I will update you guys on that in the next post.

Farewell

That’s all for now. The upcoming months will be finals and exams season for me, so I will be busy studying for them (gotta work on my Physics grades 😭). I feel like the quality of these blog posts is marginally improving, maybe the next post might have media elements too?! I will try to post again sometime during Winter Break perhaps. Until then, peace!

Post 1

What Has Happened Since Post 0?

In chronological order, a lot has happened in the past week. Besides working on this blog website, I have also started working on a linear algebra library in JavaScript with plans on releasing it to npm soon so it can be used by anyone. As of this moment, I have finished all the matrix methods but I will have to also start the vectors class and methods. However, that will have to wait for Post#2 as I have begun my internship at XCave LLC this week as a data engineering intern.

What is XCave LLC? + About My Internship

XCave LLC (Executive Placement Network on Google, LinkedIn, etc) is a hiring executive search firm based in New York City. What that essentially means is that they look through resumes and find the best candidates for a job. It’s quite a small company, located in the Financial District, but that also means that my work will be meaningful for the company and there will be more effort spent on my training.

My internship role is a data engineering intern, working with the Web Scraping and Data Engineering team. Since it is my first week, I am still learning about the company and what they do, as well as the tools they use. So far I have learned about web scraping and how to use Python to scrape data from websites to then be organized into functional data. Although I already have experience working in data analytics back from my Google Mentorship project, I have never worked with web scraping before so it is a new experience for me. I hope to learn a lot from this opportunity and I am excited to see what I can do for the company.

What Am I Working On?

I am currently working on a personal project, a linear algebra library in JavaScript. I have finished all the matrix methods but I will have to also start the vectors class and methods. I will be posting updates on my progress on this blog, so stay tuned for that.

Why Am I Making A Linear Algebra Library?

I had multiple reasons for wanting to start this project. First off, I was always very interested in developing a tool that would do linear algebra, as it’s my favorite math subject at the moment. However, when looking at linear algebra libraries, I found certain aspects missing, so I wanted to write them myself. The decision to write this library in JavaScript as opposed to Java or Python was to treat this sort of a learning “quiz” for JavaScript. Having only started learning it in the summer, I had tried to develop a Discord bot that would translate messages in real time, but the project had to be put on hiatus. It was because despite being functional, the code was very messy and I was running into troubles with the translation API I was using (both LibreTranslate and Google Translate API). I think the reason the project was such a disaster was due to the lack of experience with APIs and JavaScript syntax overall, so hopefully this library project will help build up that experience.

I hope to release this library to npm soon, so stay tuned for that.

Farewell

That’s all for this post. I hope you enjoyed reading it and I hope to see you at the next one. (Working on writing blog posts is teaching me how to write better markdown files, so I hope the future post will be nicer looking.)

Post 0

This is the start of my blog, documenting my journey through the world of programming. I will be posting about my projects, my thoughts, and my learnings. I hope you enjoy reading it as much as I enjoy writing it.

Why am I doing this?

I wanted to get experience working with the Astro framework, practicing hosting a website, and writing blog posts. I also wanted to document my journey through programming, so I can look back and see how far I’ve come. I learned from Mr.Holmes in my Computer Science class in high school about the importance of good documentation, and I hope to apply that here.

What will I be posting about?

I will post about my projects, my ideas, and my learning. Hopefully, this blog doesn’t just become a vent page of me complaining about my code not working. I will try to post at least once a month.

Github

I will be posting all my code on Github, so you can check it out there. I will also be posting my projects on my website, so you can see them in action. The link is https://github.com/Keobkeig.