Categories
Uncategorized

Capstone 3: Looking Under the Hood

Hi everyone!

I’m making this post to provide more updates and let you look ‘under the hood‘ of our Bevy car (simulation).

We’re currently running a single-camera setup for testing self-driving algorithms to avoid unnecessary complexity and to also avoid putting out half-baked features.

Our simulated car communicates with our server code using a WebSocket! We chose websockets because they offer bidirectional, persistent communications.
You might be wondering, why bidirectional? Well, the Python server doesn’t just get a video stream from the Simulation; it also sends decisions to it, and, as such, having a bidirectional, persistent connection fits our use case perfectly.

We are using OpenCV for object recognition. Currently, we are running a color-based recognition system to demo a ‘line-following-car’ algorithm.

We opted out of doing an object recognition system for the following reasons:

  • Object recognition requires time to implement and test.
  • We started from zero on this project, so the learning curve would also need to be considered.
  • We considered creating a top-down spline transpose system to generate a set of decisions in a ‘deque’, but this would also need object recognition since the lines would not be on a static part of the screen.
  • Even after implementing such a system, integration with the main codebase would need even more time.

As a result, we opted to use the ‘line following’ algorithm, but instead adapted it to ‘lane following’, similar to how cars use lane detection.

We’re currently working on developing differently colored lanes that will help the server make decisions based on a ‘guided system’, which would be predrawn lanes in this case, but we have designed the system in a way that each component is modular, i.e., if you wanted, you could even swap out our simulation with your own!

Another thing we are working on is developing static lanes for demos, since our current lanes are drawn using a ‘lane-drawing’ feature that my brilliant teammates ideated and implemented rather than adding in static lanes.
This system doesn’t actually draw lanes! Instead, it creates a 3D object of two parallel line segments and attempts to overlay them on the terrain.

As such, even this system can be improved down the line to create obstructions, or even pedestrians! This is because Bevy (our 3D engine) uses an Entity Component System (ECS) rather than traditional Object Oriented Programming (OOP), which makes it easy to swap component systems, as compared to object class variables and methods.

Our current goal is to have a perfectly working demo, and we are almost done!

Buckle up; the simulation may be virtual, but the progress is very real, and there is a long road ahead with the end in sight. See you at the next milestone!

Categories
Uncategorized

Capstone 2: Blog Post #3

Hello reader!

Work has slowed down and stabilized to a decent degree.

There is a lot to learn, but our Capstone project is coming along quite smoothly!

The most difficult parts of this project were some of the bugs.
One bug for example, involved a control conflict between the code for remote input handling and the code for keyboard input handling.
It took me the whole term to understand that this is likely a threading issue and I have been able to find a very simple fix for it (to make the simulation check if the Web Socket has been binded to, only use keyboard keys otherwise).

I chose this project because it had an interesting premise with a mentor assisting us. I figured this would be great to gain experience with working in a team.
Specifically in regards to teamwork, I feel a bit disappointed since we worked completely remotely so it was still solitary work, but my teammates have been a pleasure to work with.

The project has been great and we’ve managed it as well as we could.
If there was one thing I would redo it would be the fact that we started the project with neat little divisions and that became a huge problem.
This was due to the fact that one of our teammates dropped out of the project. As such, we had to redistribute our workload.

I didn’t have any doubts on my ability to complete this project and feel even better about it now than I did before.
There was definitely a massive learning curve and losing a key teammember was a bit daunting initially but we pulled through!

We have managed to get this project working with a lot of interesting quirks such as the fact that we use are using a virtual camera through OBS, Python code and Rust code, a game simulation in 3D, video streaming, input handling, input logging, and a ton of other small tweaks that we did not initially plan on adding.

Our project can be used by anyone who would wish to test their self driving algorithm and see if it is able to control a car remotely on a predefined path with prechosen terrain objects.

This project has been very scary but also fun and has been a great learning experience.

I learned these 5 things from this project:

1. Sometimes the most basic solution is also the best long-term.
2. Feature bloat is a massive deal, especially when using a Sprint based model.
3. Having good basics such as with algorithms, debugging, and lower level coding is a must have for most projects.
4. Team members that choose their own work tend to be far more motivated than when work is assigned.
5. Prioritization and reminders of prioties are much needed for long term projects. All teams will eventually drift off track with enough time

If I could start over I would prioritize different things than we did before. Our lack of experience played a huge role in not understanding proper time allocation for specific code sections and features.
For example, input handling proved to be a pain, but video streaming and line recognition was something we got working quite quickly.

There were a lot of such ups and downs on this project and the best way I found to handle getting stuck was to write down my thought process.
Stepping away from the computer and not coding but using pen-and-paper sounds counterintuitive but has been superb in helping me organize my thoughts and switch up my approach.

This is my main life hack for handling any work. Giving your mind time to breathe, stepping away from the screen and from work and going for a walk, writing, or any exercise or art is best to improve your efficiency and your overall relationship with your work.
I personally like playing guitar to destress.

Work has slowed down now that we have a few bugs and only one feature: the Decision System, left.
The project will be completed and ready to demo soon!

Thank you for reading!

If you enjoyed reading this, consider connecting with me:
LinkedIn
Email

P.S.: I have updated my LinkedIn link so the previous links may not work

Categories
Uncategorized

Capstone 2: Blog Post #2

Hello reader!

This term has been a wild ride!

Our project has hit some major roadblocks but we are making steady progress and have had no major conflicts or issues with our teamwork.

I’ve had to get better with Flask (Python) this term and so far that hasn’t been too bad.
Learning OpenCV has been a significant task for me and I’ll definitely need to work on it more.

I’ve had difficulty using Bevy specifically (not so much with Rust), but I’ve come to appreciate the program’s verbose and clear error messages. Identifying errors early on has helped me save a ton of time.

There wouldn’t be much I could change in terms of these technologies since we were given a fairly large codebase with some base requirements which meant that we needed to rely on this specific combo.

All the technologies were new to me so there was no technology that was significantly easier than others, but it made for some great learning.

I feel a lot more comfortable with using Rust but Flask and OpenCV will need more work.

If I could start over, I would prefer to go with a more mainstream 3D library, such as Unity or Godot, since Bevy is incredibly bleeding edge and oftentimes I find that the help sources I look at (Reddit mostly) are outdated after a recent update.

There isn’t a particular technology that I would add since our current workflow, despite looking very messy, actually performs quite well.

I had a hard time with Bevy but so far it has been very nice with compilation errors and error handling.
Bevy relies on an Entity Component System (ECS) rather than using Object Oriented Programming (OOP) that other engines such as Unity use.
This has been incredibly useful with compile times, compilation errors being verbose and detailed enough for quick fixes (without needing to read pages and pages of documentation), and overall smoothness and reaction time of the compiled project.
It took a while to wrap my head around concepts and features such as the “Cargo.toml”, the layout, the way the ECS works in theory and in Bevy specifically, but it has been a blessing.

I have yet to learn more and keep finding nice little features that I did not notice earlier in Bevy and Rust.

OpenCV will be the greatest challenge now, and after that, having solid remote input handling in our simulation.

That’s it for our project updates.
I will see you again in my next post on Imposter Coding.

Thank you for reading!

If you enjoyed reading this, consider connecting with me:
LinkedIn
Email

P.S.: I have updated my LinkedIn link so the previous links may not work

Categories
Uncategorized

2025 Capstone 2 Check in!

Happy New Year, dear reader!

2025 has been great to me so far and is shaping up to be a far more organized year than 2024.

I’ve entered the second stage of my Capstone project and for the most part, this blog name is not as relevant as before.
Daily LeetCode practice, job applications, coding, resume building, personal projects, and networking have made me feel more capable than before.
However, I feel it may be best for my results to speak for themselves, so we’ll touch base on this later!

For the first blog post of Capstone 2, I had to read through an article for Code Smells and I chose
Clean code — Does code smell? Part 1
and
Clean code — Does code smell? Part 2

by Leonardo Herdy Marinho

My code has improved a lot over the years, but one thing I find to be more difficult than the others is writing meaningful comments.
Comments that are succinct, clear, and necessary tend to be harder to identify than write.

More often than not I find myself resorting to commenting a lot rather than commenting thoughtfully, which becomes a larger issue when working with big codebases.

This year I’ll be working on that and a lot more!

Thank you for reading!

If you enjoyed reading this, consider connecting with me:
LinkedIn
Email

Categories
Uncategorized

Capstone 1 Completed

The Capstone level 1 class is over and while I feel some relief I am yet again confronted by the Imposter Syndrome.

We are using the Bevy game engine in Rust to run a car simulation with Autonomous driving and control capabilities (externally).

I’m very new to Bevy, so there’s a lot to learn, such as the Entity Component System and other game dev paradigms.

Rust has proven to be fairly intuitive though, so its not all doom and gloom 🙂

Some code for this project was provided by our mentor, and MAN was that a whole ride.
It was a fairly large library with absolutely NO comments.

Learning what the code does, what I need to change, where I can add in changes was mostly a process of adding in things, breaking things, and learning from what I broke.

It’s been a fun semester.

By the next Capstone class, CS462 I think, I will feel a bit more prepared.

See you next term, fellow coder!

I will see you again in my next post on Imposter Coding.

Thank you for reading!

If you enjoyed reading this, consider connecting with me:
LinkedIn
Email

Categories
Uncategorized

Capstone Project and other updates

Hello!
Glad to have you back.

Life’s been a rollercoaster lately.
I’ve been learning a lot by putting work into projects (including the Capstone), but I’m losing motivation because of the rejections in internship applications.

I don’t feel as much of an imposter with my coding now!

Part of being an imposter meant not understanding what people were talking about and feeling as though I knew too little about any given subject.

I’m currently taking OS1, Programming Fundamentals, Cloud Computing, and the Capstone Project Class 1.

It’s a lot of learning and I’m loving it. Studying feels like traversing through the Amazon, but the payoff is that I am changed as a result.

I’ve been coding in Raku, Ruby, Rust, and C. I used to only code in Python and JavaScript (MERN Fullstack) but am learning new things due to the classes I am taking and I’m pushing myself to be better than I was.

Using Flask, Raku, and Ruby has been a humbling experience.
I still feel like an imposter sometimes, but I’m rolling with the punches a bit more.
No matter how much I learn, there will always be more to learn.

It will always be an upward climb!

Whenever I’m stressed, I go for a quiet walk in the park and spend some time reading “The Subtle Art of not giving a F***”.
I highly recommend this book for gaining clarity and perspective on who you wish to be.

Good luck, friend!

I will see you again in my next post on Imposter Coding.

Thank you for reading!

If you enjoyed reading this, consider connecting with me:
LinkedIn
Email

Categories
Uncategorized

Hello world! (and OSU)

Hello reader,

My name is Sahil Gaikwad and I’m starting this blog for my CapStone project.

I’ve lived most of my life in India and am currently in San Jose, California.

Hopefully, the title of this blog got you to click on it and read it. Like many other CS students, I struggle with imposter syndrome.
This blog will be a way for me, the author, and you, the reader, to connect on this topic, and perhaps along the way, it may help with your imposter syndrome!

I’m a senior at OSU ECampus majoring in computer science. I was initially a Molecular Genetics major at Ohio State University (a different OSU, funnily enough) but realized pretty soon that Organic Chemistry was not my thing.

CS has been great so far! I have some knowledge in the MERN stack, HTML, CSS, React, some Network basics, and a smattering of CyberSecurity and Cryptography.
I mainly use Python and JavaScript and am currently in the process of learning Java.

I am currently applying for internships and working on personal projects and LeetCode.

The projects “Cloud-Based Algorithmic Trading Strategies for Individual Investors” and the other two by AgBiz Logic sound very interesting.

Thank you for reading!

If you enjoyed reading this, consider connecting with me:
LinkedIn
Email