week 7 🤯NEW FRIENDS or, : teaming up! 2

how i’m feeling in this group

Biggest obstacle so far has definitely been deciding which project we want to contribute to. Looks like we’re going with Oppia though! I haven’t successfully set up the development environment yet, which is something some of my other team members expressed difficulties with too. Looks like I’ll mostly be writing in Python, and I was hoping to do a project in C, but I need practice writing Python so I’m happy with this as well! I am also personally very passionate about access to education and very scared of the current culture of rising anti-intellectualism, so I’m excited about the project itself as well :D

I slept in the day of the first meeting, and then I got on the wrong bus (ijbol), so I showed up pretty late to the decision-making process, but we all seem pretty aligned in our goals, so it wasn’t too much of a problem. Well, given how many different projects we picked from, maybe we aren’t thaaat aligned, but at the very least we all seem pretty flexible and understanding, so we were able to find something we are all excited about.

Read More

week 6...........things are getting real!

I really hope to contribute to a project where I get to do C programming, or if not that, C-style C++, or if not that, modern C++. Unfortunately, this semester has been insanely busy, and I have also been going through some issues in my personal life, so I have been really struggling to keep up with my workload. However, I hope that my life will have some balance soon, and that I can successfully catch up on everything. But at least until Spring break, the fact that I am so behind on my work will probably be in my way. I’ll probably do really long, insane bursts of work at inconsistent rates, rather than small, consistent work that’s better for a team setting.

Working like that is also a habit, in general, that I am trying to change. I sort of am most productive when I have way too much work and I’m basically sleeping only every other day. I hope that in this course and in my work with my group that I can figure out a more balanced and structured work-life balance.

However, I also know that I can contribute a lot of work really fast when it needs to be done! I do consistently find that software development is a slower process than I anticipate, and that I need to spend a lot of time thinking about the design of a system and the structure of my code before actually writing it so that the code stays maintainable (obviously), but I deeply enjoy the adrenaline rush of crunch work.

Although I have a pretty bad sense of time, I think that I am good at allocating work among different people. It’s just that I am very bad at estimating how much time is needed for different tasks. Actually, I’m writing this at 4:48 AM because I have been sewing and stuffing tubes that also have metal wires put into them the entire night, and I have a soft sculpture that I was supposed to finish tonight that I will likely need until tomorrow night for (I am considering March 2 4:50 AM as the night of March 1 in this statement). That being said!!!! Because I always need more time than I have, I have become very good at knowing exactly when to scale back, figuring out the most time-efficient way to approach a problem/task, adapting this strategy when I realize that it wasn’t actually the most time-efficient method, and deciding what specific things have less effort put into it in favor of the greater vision.

I also have not made a ton of open-source contributions so far. I have added a song by the artist xxharbit3s to the RYM database, which was actually pretty cool, since I’ve been a user of the site for many years and I have never done that before, and I have added the deli that is very near my apartment to OpenStreetMap. I was surprised that it wasn’t correctly being displayed before, since it is seemingly a fairly popular deli. I have sort of been hoping that I could find contributions I could make simply by finding bugs in software that I use regularly, but that hasn’t really happened. I did find a bug in OBS, where if you have multiple windows of the same application name, you can’t do a Window Capture of each thing separately, since it thinks each window is the same thing. However, I looked at the issue tracker on OBS, and it was already there (and has been for a long time). What’s interesting is that there is also already a working fix that hasn’t been merged into the main release/master repository. It has also become pretty clear to me that any contributions involving code are a lot more involved than something like these two things I’ve described, so I haven’t done any of those.

Read More

week 5 c[_] HOW TO presentations

Monday this week, the class presented in groups on the open source projects we created. I enjoyed the presentation on QuoteDaily, because there was a sense of performance to it, like the presentation had some aesthetic value and resonance beyond solely the communication of information. The presenters used rhetorical strategies in a self-aware, ironic-but-not-totally-ironic way that made it entertaining and easy to engage with the work being presented.

Another presentation that I watched was Kelsey Hightower’s Thoughts on Open Software. In this, he makes the point that creation and advancement relies on the innovations of countless others. He discusses HashiCorp creating a clone of his project, confd, and how he saw his influence as a personal success instead of a loss, like something was stolen from him. He intertwines these two points, mentioning how HashiCorp greatly contributed to confd and how he didn’t write the programming language and operating system that confd relies upon. He argues that developers and startups should focus on offering value in an open, collaborative ecosystem instead of building a “moat” around one’s ideas.

For a long time, I’ve held two opposing mindsets in tension with each other, and been trying to reconcile them: I very firmly believe in community and collaboration and transparent, universal access to information, but I also intuitively feel a drive to become totally independent – able to rely solely on myself, own knowledge, my drive to learn, and my own work. I am the type of person who wants to reinvent the wheel. As I have gotten older, I have become more receptive to help and more cognizant of the fact that I’ve always gotten help, just maybe in ways I didn’t understand before. But, that’s all just intellecutalizing my emotions; really, I like doing everything myself and getting to be like “yupppp i did it all myself🙂‍↕️🙂‍↕️🙂‍↕️”.

I bring this up because Hightower’s points reminded me of this internal conflict I have. I mean, like, there really is nothing more gratifying to me than total self-sustainability, even knowing that the instinct irrational and ahistorical. After watching the presentation, I thought about if I am at odds with open source software. I thought about how I like to rely on myself, and how it is important to me that my work is known to be my work, and how I would probably be more bothered than him about the Consul Template thing.

It’s interesting to me how the connection between protecting one’s work and being able to profit from it is so immediate in this presentation. It’s so assumed that it’s almost unspoken. After some reflection, I’ve come to the conclusion that I am, in fact, definitely not at odds with the ethos of open source development, and that I don’t equate these two things as strongly as most working, professional developers probably do. Still being in school, maybe it’s just lower stakes for me. I see the importance of my work, and work in general, as being greater than, if not totally disjoint from, the amount of profit it generates. That’s more the reason open source resonates with me than the collaborative nature of the work.

Side Note: Watching the presentation, I take note of his style of presentation, particularly how he goes on a lot of tangents and sort of rambles on about various stories in the middle of making arguments to support or ground them. It mostly works for me. Similarly, in prose, I have a tendency for tangential, exploratory, wandering writing.

So https://github.com/ossd-s26/MindMelt-Extension is the open source project I helped develop and contribute to. I found this group work experience gratifying, despite all of the stuff about liking to do everything by myself, because the division of labor was pretty clear. I can pretty firmly take credit for the stuff I did. This helped reconcile my mindsets I hold in tension with each other. Also, I enjoyed that this project was less serious and more humorous in nature. I think aesthetic value is just as “useful” as useful things, and I think that it’s useful to deconstruct the notion of usefulness under capitalism :) It made me very happy to hear everybody laugh while my group and I presented this! That’s the success to me. I also now am even more sure that I really don’t want to do a web related project, and that I would much prefer contributing to an open source project in C.

Read More

week 4 !!! version control + project evals :)

Finally learning how to use Git is like…..woah. Like, learning how to use it beyond a super simple workflow in private repos of adding -> committing -> pushing or copying Bash commands given by my professors. The thing I learned in class that has benefitted me the most, although this is related to Bash not Git, is that adding & to the end of a command that starts a process makes it run as a background process. I’ve been using this so that I can preview the website which contains the blog by running “jekyll serve &”, and now I don’t have to end the process if I need to run other Bash commands. It also helps because I created an alias to open STM32CubeIDE, which I can now run as a background process as well!

I think I’m going to start using Git with my music, so that I can edit the project files without worrying about if it’s going to end up worse or not. On some level, I do feel like having access to such a large-scale undo operation could end up detrimenting my creative workflow in that getting rid of the limitation of only being able to move forward might make me opt for safer decisions. Despite this, I think it’ll be very useful for more technical things, like the mixing and mastering process. I also might use it if I’m working on a project I haven’t touched in like years or something.

Looking at more possible projects to contribute to, I still think I’m most interested in contributing to Blender. I am a longtime user of the program, going on about 5 years now, on and off. Wow, I did not realize I started using Blender so long ago!! That’s crazy. However, I’m also interested in Exercism, since I like teaching people things and I think it would be fun to design or improve coding exercises to help people learn concepts.

I came into this course expecting to contribute to some open source embedded system/firmware project, like Arduino or FreeRTOS or something, but given that we will be picking the projects to contribute to as groups, I don’t think this will happen, since embedded firmware is a less popular career path in the computer science major. I expect the biggest challenge of working on an open source project to be working outside of my main skillset of embedded C development. However, I’m excited about that being an opportunity to practice C++ or C for non-embedded contexts! Like, I never even really touch dynamic memory allocation in embedded. I tend to tunnel vision a bit, and now I’m kind of set on contributing to Blender, since it’s primarily written in C++ and I use the program regularly.

Read More

week 3 : teaming up!

I am working in a group with two other students to create our first (my first, at least) open source project !! We started off by following this tutorial to learn the basics of making Chrome browser extensions, since that is what the project will be, and we looked through the Chrome Extensions samples repository to gain an understanding of things typical to open source projects e.g. a README.md file, a LICENSE file, and a code of conduct. We also looked a bit through existing browser extensions. One that I have been using since forever is Picture-in-Picture, which lets you play videos as floating windows. I like doing multiple things at once and receiving as much overlapping visual and auditory stimuli as possible, so this is nice 🧟‍♀️.

We have not made a ton of progress on our project yet. We are still settling on a final idea. However, we have established a clear, asynchoronous way to communicate outside of class about the project, which is good. We plan on finalizing our roles and what we are going to make on Monday, February 9. I’m excited to make a project as a group! I haven’t really done many collaborative programming projects, and even in collaborative, multidisciplinary work, I usually get assigned the task of programming, instead of it being a shared task. I think it’ll be fun (^ム^)

Read More

week 2 social interaction tutorial

Code of Conduct documents, such as this one for the Go Project, set standards for social interactions, accountability, and community-building that otherwise would not be well-defined. Given that such members of such an online community, as well as other projects’ communities, will inevitable come from different, varied cultures with different social norms, it’s beneficial to have clear definitions of what is okay and how to resolve conflict, even if these things might seem like common sense, given that this ‘common sense’ would depend on each community member’s respective upbringing. Additionally, not only does this help maintain a healthy and productive community for pre-existing members, but this also helps invite new contributors to the community by establishing a welcoming, professional, and respectful reputation regardless of your background.

The Go Project adapted the Contributor Covenant Code of Conduct, version 1.4, to make theirs. One major difference is that the Enforcement section in the Contributor Covenant’s document is replaced with a Conflict Resolution section in the Go Project’s. This conflict resolution section similarly provides a contact email to report bad behavior, but it does not explicitly state what action would be taken against a perpetrator, while the Contributor Covenant states that bad actors “may face temporary or permanent repercussions as determined by other members of the project’s leadership.” Additionally, the Go Project encourages direct communication between two parties in conflict to resolve issues. I’m not entirely sure why they wouldn’t state exactly what action they might take other than the fact that it might be decided on a case-by-case basis. I still think the possibilities should probably be stated, especially considering the large scale of the Go Project’s community. There must be overlap in how action is taken against different violations. Moreover, the second difference, that being the encouragement of direct, one-on-one conflict resolution, seems to be a reaction to the scale of the project as well; if every little conflict was reported, that contact email would probably be flooded with requests.

The Eclipse Foundation’s Code of Conduct document is also adapted from the same document as the Go Project’s. However, it is structured differently. In addition to keeping the Enforcement section instead of replacing it with a Conflict Resolution section, there are added sections titled “Responsibility”, “Investigation of Potential Code Violations”, “Actions”, “No Retaliation”, and “Amendments”. It can also be noted that the Go Project’s document has a summary at the end, while the Eclipse Foundation does not provide that. This difference in structure seemingly comes from the Eclipse Foundation stating how action against bad actors is enforced instead of just how to report it, who enforces the Code, how retaliating against raising behavioral concerns is also a violation of the Code, and, directly, that “The Eclipse Foundation Board of Directors may amend this Code from time to time and may vary the procedures it sets out where appropriate in a particular case.”

Sugar Labs’s Code of Conduct document is based on the Ubuntu Code of Conduct. Because of this, there are various differences between it and the Go Project’s Code. At a high level, Sugar Labs’s Code focuses less on specific behaviors to strive for and avoid, and instead it chooses to opt for broader behavioral goals stated in different section’s titles (e.g. “Be considerate”, “Be respectful”, “Be collaborative”), with the text in each section offering more rationale for the rule as opposed to exact guidance. Notably, there is no stated method for reporting violations of the Code.

The Arduino StackExchange’s Code of Conduct document is divided into six subsections: “Our expectations for users”, “Unacceptable Behavior”, “Reporting”, “Site Policies”, and “Usernames and profiles”, listed in order of appearance. Well, seven sections if you also count the introduction before the first subsection. There is no mention of it being adapted from another Code of Conduct document. This Code seems to mainly apply to StackExchange, particularly “Usernames and profiles”, but “Site Policies” states that it works “alongside individual site policies”, meaning that it applies to other Arduino online community spaces as well. It is more similar to the Contributor Covenant Code than the Ubuntu Code in that it very explicitly defines what behavior to strive for, what behavior to avoid, and how to go about reporting malicious behavior.

This presentation given by Jill Lovato and Trishan de Lanerolle also presents good points about how to behave in Open Source communities such as the ones discussed. One slide I found insightful was the one about lazy consensus/rough consensus. Finding perfect, exact consensus is not realistic a large amount of the time, and I think the model of lazy consensus, which is essentially just agreeing on a decision as long as nobody raises objections to it within a certain amount of time, is quite smart, because it avoids having to go one-by-one and approve something when approval can be assumed to save time. I also think it is smart to document decision-making processes during meetings and such so that the alternative options and the rationale behind each decision can be remembered and discussed as needed in the future.

Read More

week 1 #opensourcevibe!😍

The term “open source”, for me, most immediately evokes a notion of project development more for the sake of bettering the world than purely for creating profit. My understanding of open source is located somewhere between that and sentiments of online community, anti-corporatism, and a vague, intuitive sense of political importance. Vague in a way that makes me want to learn about it to figure out the feeling, and intuitive in a way that makes me think this political importance is real and has been studied. It seems like an odd, surprisingly leftist tech movement that stands out from my jaded perspective on much of the tech world as actively making the world worse.

It does seem to me that that this perspective on open source has been a bit drowned out by the state of the job market. I think that the making of open source contributions into a goal in and of itself and into a method of getting a job for novice developers contradicts the rhetoric I described in my last paragraph and undermines the notion of communal development in that people may want to a work on a project they don’t use or even particularly care about just to be able to put some contributions under their belt. Ideally, it seems like the biggest contributers should also be the biggest users of the project, since they would have an understanding of what the project actually needs.

Bit of a non-sequitur; here are some open source projects I use.

STM32CubeF4

github
From the GitHub page:

STM32Cube is an STMicroelectronics original initiative to ease developers’ life by reducing efforts, time and cost.
STM32Cube covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series.
… The STM32CubeF4 MCU Package projects are directly running on the STM32F4 series boards.

The first non-Arduino development board I used was an STM32F411CEU6, which I programmed using STM32CubeIDE and this firmware package’s HAL (Hardware Abstraction Layer) drivers and CMSIS modules. The transition from Arduino to STM32 is not very smooth!!!!!!!!! The existence of this project helped a lot, especially since I started doing STM development while I was still learning computer architecture and C programming instead of afterwards.

Arduino

github
From the GitHub page:

This org contains the official Arduino tools (IDE, CLI…), documentation and cores.

I’ve created a decent amount of Arduino-based projects, including a custom MIDI instrument connected to Ableton Live 11 and TouchDesigner, a tapestry with a camshaft motorized to stretch at procedurally generated speeds, and an altar-like sculptural installation with neon red “bloodspatter” and a hanging purple laser pointed into the corner of an acrylic mirror that I used an Arduino to flash on and off in different ways to create different visual effects. I made these without, really, any knowledge of firmware development or systems programming, and the fact that these were one-of-one art projects that didn’t need to be mass-produced made it so that Arduino development boards being more expensive than other, less hobbyist boards didn’t matter as much. I will always appreciate Arduino for getting me into embedded systems engineering, even if I feel that I’ve outgrown it.

Prism Launcher

github
From the GitHub page:

A custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once

I reallyyyyyy like modded minecraft………like i rlyyyy enjoy it -_-. The most popular custom Minecraft launcher, is CurseForge, which I do not like using because it is not lightweight (which is especially important for modded Minecraft, since it takes up so much RAM), it constantly runs ads while its open, and it is owned by a company that I do not want to support. Curseforge also happens to be the go-to platform for downloading mods and modpacks for Minecraft, not just running them. Luckily, Prism Launcher has a feature that lets the user import modpacks and mods that are hosted on Curseforge without the user needing to have Curseforge installed.

Blender

github
From the GitHub page:

Blender is the free and open source 3D creation suite. It supports the entirety of the 3D pipeline: modeling, rigging, animation, simulation, rendering, compositing and motion tracking, even video editing.

I love Blender!! I started using it in high school, it being the first way I started creating visual art too instead of just music, and I haven’t looked back. The Blender community is, like, insanely active and helpful. My favorite feature is Geometry Nodes, which is a nodes-based visual programming language inside of Blender used for procedural 3D modelling and animation. Recently, I’ve been using it as a tool for rapid prototyping of promo visuals for music I’m planning on releasing soon. The non-destructive, procedural workflow of nodes lets you create tooling for visuals that are similar, but not the same, so you can make content that is consistent but still different. One example is a simple tool I made that lets you iterate through a text file and display it word-by-word as a mesh, so that all you have to do is keyframe when to switch words. It takes longer than AI captioning tools, but it is very flexible as it lets you visually modify the lyrics as 3D models. And, it’s much faster than manually inputting each word.

Read More