Week 10: My first PR

Sorry for the late blog post, I didn’t realize we had one due (but I probably should have assumed we did).

My Progress

Last weekend, I submitted my PR for the issue I chose to work on. This was fun to work on, and definitely a bit challenging. The problem ended up being much bigger than what was initially reported, but it was still narrow in scope, which let me be really comprehensive within the file I was working on and get a deeper understanding of that part of the codebase.

The bug initially reported that there was an issue in filtering Category Groups when changing the operator from “is” to “contains”, where it would populate the input field with the UUID of the Category Group instead of the display name. After reproducing the issue myself, I realized it extended beyond Category Groups. It also affected “contains”, “matches”, and “does not contain” for Accounts, Categories, Category Groups, and Payees.

I first focused on fixing the issue in one direction: going from ID-based operators (like “is”) to text-based ones (like “contains”). This part was relatively straightforward since I could map the stored ID to its corresponding display label.

Then I had to handle the reverse direction, which was more challenging. Converting from a label back to an ID isn’t always clean, since a string might not uniquely map to a single entity. I added logic to only convert back when there was exactly one valid match, and otherwise avoid making a potentially incorrect assumption.

Another layer of complexity came from the fact that different operators expect different data shapes. Some operators store a single ID, while others (like “one of”) store arrays of IDs. So I had to define clear behavior when switching between them. For example, going from a multi-ID operator to a text-based one only works cleanly if there’s exactly one value, otherwise the input has to be cleared. Similarly, when going from text to a multi-ID operator, I resolve to a single ID (if possible) and then wrap it in an array. A lot of this PR ended up being about making consistent decisions like this so the system behaves predictably.

While working through this, I also realized that certain account-specific operators (like “is on budget” and “is off budget”) don’t actually use input values at all, which was throwing off the logic. I updated the behavior so that these operators preserve whatever value was previously there, but don’t attempt to render or transform it until switching back to a normal operator.

After implementing these changes, I submitted my PR and went through a round of CodeRabbit feedback. One of the main issues it flagged was that the data shape wasn’t always what the system expected, specifically around when values should be arrays versus single values. Based on that feedback, I tightened the logic to consistently normalize values depending on the operator type, which fixed the inconsistencies.

I also tested a lot of operator transitions across accounts, categories, category groups, and payees to make sure everything behaved correctly (like ID → text, text → ID, single → multi, multi → text, etc.), and to ensure that UUIDs never leak into the UI again.

Overall, this was a great first PR experience. It forced me to think carefully about bidirectional data transformations, data shape consistency, and edge cases in UI behavior. It also showed how a small bug can reveal deeper inconsistencies in how a system handles state.

Read More

Week 8: Group Report Reflection

Group Progress

It seems that most of the other groups have made the same progress as we have in terms of setting up the development enviroment and gaining familiarity with the codebase. Some groups had already identified issues that they wanted to work on, which we had not by the beginning of the session; however, Rebecca and I had identified issues to fix by the end. Overall it soudns like all groups had made good progress and will continue to do so.

Read More

Week 7: Getting Started With Actual Budget

Team Working Agreement

This week my group and I met to create our team working agreement and choose our project to begin contributing to! I am working with Rebecca and Jaden, whom I’ve already been able to get to know very well by working on our browser extension project, affirmME. As such, it was super easy for us to create our working agreement and decide on working expectations and a regular cadence for syncs. I feel confident that we have set ourselves up for success by setting clear expectations and values for our project this semester.

Actual Budget

For our project, we decided to work on Actual Budget, which is a local-first, privacy-focused personal finance tool that follows the envelope budgeting system. I found this project while looking for good communities to join and was drawn to it because of its focus on personal finance and welcoming community. I pitched it to Rebecca and Jaden and they were extremely interested. We all liked it because it was a product that we could personally use and benefit from (making us stronger community members) and because it allowed us to touch on various parts of the development experience. There were also a decent number of issues marked “good first issues” and a very active, responsive community, which helped us all feel at ease contributing.

Read More

Week 6: Group Project and Contributions

Group Project

For my group project, I’m hoping to contribute to something beginner friendly and impactful. I’m still a little intimidated by open source, and I’d rather build confidence by contributing consistently to a project where I can actually understand what’s going on instead of feeling lost in a huge codebase.

Ideally, I would love to work on a personal finance related project if my group is interested. Because of my background working in wealth management and studying finance, I feel like I have real domain knowledge I can bring to the table. One project that stood out to me is Actual Budget. Budgeting is such an important skill, and it is kind of crazy how true “more money, more problems” actually is. I have seen the real world impact of financial planning, and it is definitely something I want to keep improving in my own life too, so, being able to contribute to a tool that helps people manage their money better feels especially meaningful.

Read More

Week 5: Browser Extensions and OSS Conference

affirmME

I am super proud of our browser extension. I think our idea generation process was super cool, with me starting off with a super generic idea like an affirmation generator (much like another group’s quote generator) and Rohit starting with a more advanced idea with a browser extension that would use an LLM to analyze the contents of your webpage. I feel like we were able to find a happy medium with a to-do list/affirmation generator that had elements we could all contribute to. Plus, it is super useful! I wish that I had the RAM required to use it because I would definitely be a superuser. I’m curious to see if anyone else will contribute to the project because there are so many potential improvements, like different tabs of the to-do list for different topics so you could separate “shop for groceries” from all your schoolwork, or a way for users to customize affirmations or give context about themselves to improve the quality of the affirmations.

Other Extensions

It was really interesting to see the different directions other groups went in, especially considering how broad the initial ask was. There are definitely some I’d want to try out, like the highlight and tab-down extensions, both of which would be extremely helpful with jotting down notes. I’m especially interested in tab-down because I’d like to compare the experience to side-by-side application windows and contribute if I like it more, considering they mentioned a few areas for improvement.

Read More

Week 4: Git and Project Evaluations

Learning Git

I just started using git more extensively last semester, as a paert of my Operating Systems class, so I really enjoyed learning more about what the different commands do and how git as a whole works. Truthfully, I was mostly going through the motions of git without a strong understanding of what happened in the background, so it was super helpful to learn about the specific of each command, how git works has a distributed version control system, and the different stages that git manages. It makes me feel a lot more confident.

Project Evaluations

As a part of the class I’ve looked at 2 different projects: Game Zone and Jellyfin, which I feel like are two complete different ends of open source projects. Game Zone was less collaborative, with individuals developing their own web games and then adding to the repository. There were less interactions and the project as a whole was much smaller. Jellyfin is a huge project, with over 1,000 contributors and lots of active issues and PRs.

Read More

Week 3: Developing a Browser Extension

Our Progress

This week, my team and I worked together to (a) learn the basics of building a Google Chrome browser extension, (b) gain familiarity with existing open-source Chrome extensions, and (c) brainstorm ideas for our own extension. Although I use many extensions regularly, I’d never gone through the process of building one myself, so I appreciated working alongside my team to understand the basics with a simple “Hello Extensions” project.

I also loved exploring what Chrome extensions already exist because there are so many more than I had imagined. I even learned that Ghostery, my favorite ad blocker, is an open source extension.

Read More

Week 2: Exploring Codes of Conduct

Importance of Codes of Conduct

Codes of conduct for software projects are incredibly important because they help set the tone for expected behavior and ensure a vibrant, positive community. Ultimately, they establish the values of a project, escalation paths for conflicts, and guidelines for communication, while also deterring bad actors.

Investigating Different Codes of Conduct

Go’s code of conduct embodies what makes a strong document. It clearly outlines the project’s standards and how they will be enforced. Notably, it goes beyond the cookie-cutter template provided by the Contributor Covenant by listing specific values while also encouraging healthy disagreement. Go’s code of conduct doesn’t intend to create perfect harmony, but rather respectful discourse, which they continuously reinforce throughout their code of conduct with language like “respect differences of opinion” and “When we do disagree, try to understand why.”

Read More

Week 1: My Experience with Open Source

What does open source mean to me?

Open source to me means making source code accessible, leading to community, collaboration, and collective improvement. Considering I’ve been using Wikipedia for as long as I can remember, I feel strongly about the benefits of open source development, though the actual intricacies of it are still a mystery to me and something I hope to learn through this class.

Additionally, as a finance student, I’d love to learn more about how open source development is analyzed from a financial perspective. When do companies choose to use an open source business model, and what are the different routes they can take?

Read More