RCOS

Opening up and getting grounded with OpenCircuits

OpenCircuits, an online circuit designer, is seeing increased usage in classrooms at Rensselaer. Recently, Professor Konstantin Kuzmin decided to use OpenCircuits as his main circuit simulator when teaching Computer Organization. To learn more about the project, The Polytechnic interviewed the OpenCircuits RCOS project team.

OpenCircuits was initially conceived out of the frustration of its creator, graduate student Leon Montealegre, when trying to find a capable, free circuit simulator for his Digital Logic Design and Boolean Algebra class at Pasadena City College while he was in high school. Montealegre wanted to make a circuit simulator that was user-friendly, free, and accessible on all platforms unlike existing alternatives that are “really slow and really far reaching and [not] super intuitive.” In early 2017, the project grew from an idea to reality after Montealegre worked with his class’ professor at Pasadena, Paul Wilkinson, in independent study to create OpenCircuits. The project is even used in Wikinson’s classroom. Shortly after, Montealegre and OpenCircuits found a new home here at Rensselaer; OpenCircuits is now a growing RCOS project.

OpenCircuits continues to see consistent updates both in features and in fixes. A notable recent addition is the ability for users to type a Boolean logic expression and automatically create a circuit corresponding to the logical expression. The team is also considering long term improvements to OpenCircuits. One of the main long-term initiatives of the project is allowing users to both share and work together on circuit designs. Collaborative editing is one such feature where multiple different users can simultaneously work on the same circuit design. Another feature is circuit sharing, where an individual can share their circuit design, making a “giant library of circuits.”

For those curious about OpenCircuit’s techstack, the OpenCircuits team uses TypeScript, similar to JavaScript for overall logic, React for the front-end user interface, SASS, an layer on top of CSS to make development easier styling, Redux, to handle state or the storage of data, and Go, a programming language for the backend development.

Montealegre is excited to see OpenCircuits being used in Professor Kuzmin’s class. But, he hopes to see OpenCirucits “used in more classes at RPI and other schools” because he views OpenCircuits “...at its heart as an educational tool.” And, like Submitty, OpenCircuits has added and continues to add features specifically to address the unique needs of students and faculty here at RPI. For instance, an oscilloscope was recently added at the behest of Professor Kuzmin to help users analyze circuit signals over time, an important feature for Kuzmin’s Computer Organization class.

One of OpenCircuit’s strengths as a project is its focus on the developer experience. This philosophy is so integral to OpenCircuit’s design that the codebase has been significantly rewritten just to make it easier for new developers to get accustomed to the codebase. And, according to Harshita Garg ’24, a member of the team, the “code is really nice and organized. I can read it.”

The project also makes development easier through its online documentation. If one wanted to add a new item to the circuit editor, referred to as a “component”, the online documentation provides a detailed guide to ease development making it a “theoretically streamlined process at this point,” an apparent success with 2-3 components being added in the last semester alone. Montealegre hopes this allows anyone with programming experience who “...notices that this site doesn’t have some other gate we didn’t even know existed…[to] figure out how to add one pretty easily.”

Natasha Rosa ’21, a member of OpenCircuits, emphasized the impact of Montealegre’s efforts in improving the developer experience by saying that “[t]he best part about it [seeing the project grow over time] is that Montealegre continues to change OpenCircuits so that it can be understandable on a developer level and also a user level. He actively finds ways to make life easier for everyone, not just the user...[i]n other projects, everything seems to be kind of free for all, [a] figure it out on your own type thing. Being on this team is very refreshing.”

When it comes to organizing the team, OpenCircuits heavily and effectively utilizes Github’s organization features to ensure that all issues and feature requests have a detailed explanation, designation of priority, status, type, difficulty, and relevant development area. The requests are additionally associated with the appropriate milestone, a mark which defines the most highly prioritized near-term objectives within a development team. The current milestone, according to Montealegre, is to have “an official full stable release on the website by the end of the semester or the beginning of next semester.”

When asked about some cool, unknown features in OpenCircuits, Montealegre emphasized the help menu, available by clicking the question mark, as a good place to get familiar with the software. He expanded by saying that a user can click the Alt key on circuit components to automatically wire them with switches and LEDs as inputs and outputs when dropped on a part of the circuit, a useful feature when trying to first learn about the action of Boolean logic gates.

For prospective web developers, Montealegre recommends “watching YouTube tutorials but also...[joining] RCOS. There are other web projects here.” Montealegre likes “to advertise OpenCircuits as a beginner-friendly project, so people with very little experience, they can help, hopefully get started on the project, and learn quite a bit.”

When asked about the team’s feeling of RCOS as a whole, Montealegre remarked that, “RCOS is probably one of the coolest things at this school. It is one of the craziest things...that I think more schools should have because it really does...give you experience…Through RCOS, you can actually work on real projects.” Trevor Crystal ’21, another member of the RCOS team, highlighted the practical benefit to joining an RCOS project explaining that “In nearly every job interview I have had since starting OpenCircuits, it has been a relevant experience to talk about. Between the software itself, the process for suggesting and approving changes, and the overall team dynamic, OpenCircuits has provided much relevant and applicable experience.”

For those interested in joining OpenCircuits, Montealegre recommended joining through RCOS to gain credit or by contacting him through Discord. Montealegre iterated that with over 100 issues ranging from bug fixes to enhancements, there is always something to work on. Graduate student Owen McGee, a member of OpenCircuits, stressed that OpenCircuits is “considered one of the better beginner [projects]...here in RCOS...It's well-organized so that it is a good introduction on how to do web development” and added that there are a “lot of people you can ask for help.” Even if someone does not participate in RCOS through developing, the team stressed that anyone can contribute by writing bug reports or feature requests on their Github page.

If I had to recommend a beginner RCOS project to someone, my main concern would be recommending a project that expects developers to run before they can walk. OpenCircuits ranks highly on my list and is important because it avoids this quintessential pitfall with its friendly atmosphere and focus on the developer experience.