I’m Robert, an amateur programmer and avid tech enthusiast. This blog was motivated by Oregon State University’s CS 467 Capstone class, but will extend far beyond that to include my own thoughts regarding the rest of my time at OSU. Unfortunately for you it will probably include a lot of other unrelated and semi-tangential topics, but that’s why I chose the name for the blog.
code…Dump?
The prefix “code” should hopefully be self-explanatory by now. I plan on writing a lot about technology and computer science, like a LOT. And “Dump” refers to a “core dump, memory dump, crash dump, etc…” whatever you would like to refer to this phenomenon.
Wikipedia describes it thusly,
“a core dump…consists of the recorded state of the working memory of a computer program at a specific time, generally when the program has crashed or otherwise terminated abnormally.”
In other words, this blog exists to help me think through the trials and tribulations of my everyday life. It’s going to be messy, it’s going to be complicated, and it’s going to be me. And you, my reader, are going to be the rubber ducky.
So for this week I thought I would provide an insight into my thoughts as I get closer and closer to graduation.
My Past
I came into this program in the Fall Semester of 2021. Hopeful to change my career to one that satisfies my desire for growth! Previously, I worked as an animal care technician. I’ve been trying to get a job at a public aquarium from the Shedd Aquarium in Chicago, to the Monterey Bay Aquarium in California. No dice, and so I moved to the Columbia River Gorge to work with the USFWS raising Chinook Salmon. I’m passionate about conservation, and I’ve been lucky enough to work for organizations whose primary focus is conservation. However, I felt like I could do more. Both in my current position and in my career. Animal care is not something that really utilized my entire Biology knowledge-set. And many Biology careers did not encompass my passions.
Before I started my life as an animal care technician I was passionate about keeping aquatic animals in aquaria. To the point where I would like to set up self-sustaining systems, thinking through heat and flow automation with software. After working several years and exhausting myself I stopped taking care of animals myself, but I kept up with technology and software for fun. Considering this retrospective, I knew I should focus my career efforts towards technology. I have always been the “tech” savvy friend, co-worker, family member. And so now, here I am. In my last semester of a Computer Science degree.
My Present Thoughts
Wow, did I go through this degree fast. Less than two years ago I started learning Computer Science with barely an introductory C programming class under my belt. My technological prowess was setting up linux distros on Raspberry Pi’s. Now, I feel confident in learning any programmin language in front of me. Now, I can produce meaningful and creative programs that automate my own life. And now, I want to be a software developer. Uh-oh. I did not plan on this at all. And now it terrifies me, because I feel so far behind others. I went through the program so fast, so I can get back to making an income and supporting myself. But I didn’t go through the internships. And now it feels like a full-time job is locked behind internships. However, I won’t let this stop me.
Internships, in Biology I went through several. Unpaid and overworked. That’s what I saw internships as. Great experience, but keyword “unpaid.” Computer Science, different story. Very well paid. If I could do this again I would extend my experience and go through several internships. However, I did not feel ready after taking CS 162 to take on an internship. And now here I am about to graduate, unable to apply for most.
My Hopeful Future
Despite the lack of internships, I do have a game plan post-graduation. I do not have a job lined up, but I will apply, apply, apply until I get one. In the meantime I will “grind” leetcode and try and get in touch with an open-source project where I can help make a difference! I have been exhausted every single semester taking the number of courses I have along with a part-time job. However, I feel that post graduation I will be able to expand creatively, and this creativity will no doubt lead to a job. Just look at PNW Native and University of Washington alum Eric Barone. Developer, Designer, Creator of the game Stardew Valley. Basically a project to learn C# turned into a massive success. I don’t plan on creating any massive successes, but I do know that following my passions will indeed lead to future success. So here goes!
Good news! My project group in CS 467 has made great progress on the PAgCASA Device Broadband Data project. It definitely seems a bit late in the semester to be introducing our project to you, but sometimes that’s life. We are working with Precision Ag Connectivity & Accuracy Stakeholder Alliance (PAgCASA) and one of their main foci is to help provide equal representation of Americans’ internet availability. The main reason? Data collection between Federal and State is fundamentally flawed.
From our Project Report:
According to the Federal Communications Commission (FCC) in their 2019 report nearly 21 million Americans were without broadband. However, according to analysis by BroadbandNow Research they state that the former number should be nearly double, 42 million Americans are without broadband. The cause of this discrepancy? Flawed reporting by the FCC with their Form 477, basically stating that if a single household within a census block is reported to have service via an internet service provider (ISP) then all of the households in the census block are reported to be covered.
So where do we come in? We are building a cloud tool based in the Google Cloud Platform that will take raw JSON data, build a database with it (BigQuery), and then send out reports to customers. The tool will be built completely within the Google Cloud Platform utilizing services such as GCS Buckets, BigQuery, Cloud Functions, and Looker Studio.
And so far, we’re about to put it all together and create our first beta version of the tool.
What’s next?
Really at this point, each member of the team has built a microservice and we are meeting this week to put everything together. I myself have built the BigQuery database structure, the dataset and Tables. Another member is working on migrating data from the buckets to BigQuery. And the last member is working on pulling data from BigQuery and sending it to customers. Hopefully everything goes well and I can present to you a finished prototype or even final draft of the tool we’re building in the next blog!
This last week has been more uneventful than I would like. My team and I are now sitting here at the start of week 3 without having met our Project Coordinator. While, we do have some to go on thanks to the project site we are missing a large understanding of the project architecture and what sort of data we’ll be processing. This leaves us at a precarious point with the assignment “Project Plan” due tonight. However, we will have a meeting with our project coordinator tonight, so hopefully this will give us enough time to create what is needed for CS 467. In the meantime, I have created an interesting concept of what our project might look like in a tool called Figma. This is a command-line interface prototype. Check it out here.
However, despite the hiccups in our project so far, we have made enormous progress towards group coordination. I have a great feeling that all of my project partners are willing to move forward and be proactive towards our end goal. Hopefully this feeling remains for the remainder of the semester. That’s about as much of an update I can do regarding our project thus far.
What’s next?
What I would consider a more productive exercise, though, is to look at what lies ahead of me. I am making a large career change, in the hopes that this investment into myself will yield some sort of return. Will I be able to get a job after I graduate? These words definitely fill me with anxiety as I look towards the future. My first bachelor’s degree was in Biology from Purdue University. I chose to pursue a Marine Biology career with an emphasis on Ecology/Wildlife. I wanted to take care of and study animal life-cycles. However, this did not come to fruition, I bounced along the West Coast of the United States and ended up here in Oregon. Looking for more in my career I looked towards education, and I decided to follow another passion of mine, computers.
Now as I sit here in my last semester at Oregon State University. Having done as well as I could, (I worked my ass off for a 3.92 GPA, not that it matters lol) I look off towards my future with excitement and anxiety. I’m a bit overwhelmed by the space ahead of me, but I’ve decided that instead of specializing in a single area of computer science, I’m going to double down on the fundamentals (algorithms, data structures). Will this pay off? I have no idea, but I can’t imagine this to be a bad play. Algorithms and data structures lay the groundwork of good code (along with “Clean Code” habits) and I can imagine I’ll be able to get a job in many places with these fundamentals.
So what’s next?
I know I need to get my Resume, LinkedIn, and portfolio organized. And I need to start applying ASAP. I’m working on each of these items, albeit slower than I’d like. But from what I’ve learned, I’m not so worried about the interview process, but rather getting the interview in the first place. So here’s to my next step!
Ammonia breaks down into nitrite and nitrite is further broken down into nitrate. This is the nitrogen cycle.
Before this chapter in my life, I took care of aquatic animals. Fishes, salamanders, frogs, insects, and even a strange order of animals called caecilians.
Taking care of aquatic animals is unlike taking care of terrestrial ones like your dog or cat. The environment the animals live in is akin to the international space station. (Yeah I know, an analogy for an analogy is a clear sign that your analogy is bad. Get ready, my life is full of bad analogies.)
The crew aboard the ISS are kept alive thanks to their life support systems. Aquatic animals are likewise kept alive by life support systems. The wastes produced by these animals are called nitrogenous wastes, they come in the form of ammonia or urea (feces or urine). Many people think that machines can do the bulk of the life support for an aquarium. (Ever header of filters?) But what many don’t realize is that most, if not all of the life support is provided by micro-organisms. A microbiome of “nitrifying” bacteria. But when people fill their brand new aquariums with the freshest and cleanest water. They don’t realize that the good they think they’re doing will harm the new fishes they have waiting. When the fishes go into the aquarium, their environment is sterile. When the fish poop. The ammonia levels rise. No bacteria exist to break down the ammonia. The fish eventually undergo toxic shock and die. This generally occurs within 30-60 days of setting up a fish tank.
To prevent this, the solution is simple. Do not add your fish into the aquarium for 30-60 days until your aquarium grows a microbiome of nitrifying bacteria. Just add something to your aquarium that can decompose (turn into nitrogenous waste), the bacteria are already present and will grow in number. Give the bacteria time, and they will provide your aquarium with a lifetime of health.
I know you’re not here to learn about how to set up an aquarium or to raise fishes. But I bring this process up to raise a point in how I approach new chapters in my life. The process of growing the microbiome of nitrifying bacteria so that life can exist in your aquarium is called “cycling.”
Every new chapter in my life has had a period of “cycling” whether I chose to see it or not. When something new starts I am fresh and excited for this new thing. Soon thereafter, I can quickly become overwhelmed by the mountain of work ahead of me. But eventually I arrive at an equilibrium of work and understanding. From the lessons I learned above, I now try and practice patience and grace at the beginning of a new chapter. Eventually, my microbiome will grow in and I’ll arrive at where I want to be. Regardless of however many showers my girlfriend tells me to take.
Finally, onto our raison d’être ici or reason for being here. I am now starting the Online Capstone Course CS 467. This blog is intentionally written to fulfill an assignment requirement, but is unintentionally serving as my free therapy for the day. I have a lot of mixed emotions for this course, which differ from every other course I’ve taken thus far. Excitement, which is familiar. But also some apprehension. I will be graduating soon and, to be honest I am comfortable with the struggles that I know rather than the future that is unknown. However, I have decided to tackle this with the best strategy I know.
One step at a time
I’ll leave with this. My life support system consists of more than just getting the work done to finish the semester. It consists of friends, family, and my passions. The morning coffee, the homemade kombucha, the billionth Rimworld colony yet to collapse, the unfinished Arduino greenhouse project, and more. If anyone is reading this, I would love to know what your life support system consists of.
Last part of the four part accessibility in design series! Written specifically for CS 352 Intro to Usability Engineering. Hopefully this has been informative and helpful for you!
The future is accessible. By that, I mean more and more people are placing an emphasis on accessible design over designs that meet the needs of only the majority. For example let’s take a look at some headlines during the release of a AAA video game, Cyberpunk 2077.
This issue (referring only to epilepsy) only applies to roughly 1.2% of the United States population and 0.5% of the global population. But these oversights are no longer acceptable. And to their credit CD Projekt Red (the developers of Cyberpunk 2077) made a rapid patch to not only warn the player of the scene, but also make the scene more accessible for those with epilepsy by altering the flashing animation. This is, however, a prime example of reactive versus proactive development. And as developers, we should try and prevent harm to end users rather than react to situations where end users were harmed.
Nowgranted, accessible designs or universal designs cover a very large domain. EVERYTHING. So it’s not reasonable for one person to know how to create a perfectly accessible product. But it should be the social/financial responsibility of the developer to create a safe product that can be used by as large of an audience as possible. Otherwise, you’ll be in CD Projekt Red’s position where you’re apologizing to your fan base.
For example, can your users read your content, as well as hear it? Is touch screen functionality thoughtfully designed so users aren’t having to press tiny buttons? Or on the contrary, is your design so touch screen focused that users can’t interact in other ways? (keyboards, voice commands). While understandably frustrating to redesign a product in ways you hadn’t initially intended. Oftentimes the end-product is a much more well designed system for ALL users, and not just those users who you may have designed the new system for. Just like the screen reader system you may be using to read this post. Or Nike’s self-lacing shoes.
Finally, I’ll leave you with this TedxMIT talk by Judy Brewer, Director of the Web Accessibility Initiative (WAI). A great foray into understanding ways to design with accessibility in mind.
Alright! So third part in the four part series on accessibility in design. Written specifically for CS 352 Intro to Usability Engineering.
Hi again everyone,
Since this week you are conducting a heuristic evaluation, I thought I would partially analyze a little application called Canvas, maybe you’ve heard of it. Last year Canvas rolled out Dark Mode on their mobile application and Computer Scientist students everywhere cried tears of joy. And to Canvas’ credit they did a relatively good job with their side of the implementation. But there have been some hiccups, and I’ll list a few examples for you.
Take for example, the code for MatrixMultiplication() from CS 325 Analysis of Algorithms. (This is currently still a problem)
The code should be located in the white box on the bottom of the image (granted the screenshot has made the problem worse). The text is indistinguishable from the background, when viewing this natively in the mobile application, it’s slightly better with white text on perhaps an slightly gray background. Natively on light mode, the text is black on a slight gray background. In dark mode the foreground color has inverted (white), but the background color has not (light gray).
My second example is one that has since been fixed (at least as far as I’m aware, let me know if you’re still seeing this). But when viewing LaTeX equations, this is what the original view was like.
Something has gone horribly wrong here. The edges of the text are competing with the fill color, creating a very confusing contrast. Leading to many of the symbols and numbers becoming unbearable to read, or worse unreadable!
I hope I don’t have to tell you that Color Contrast is important when presenting your content! Whether you are a developer or a content creator, you should always consider whether or not people can actually see what you are trying to convey. But this is easier said than done. Especially when making digital content.
Color Contrast and Heuristics
Coming back to our Usability Heuristics, poorly chosen color palettes can unintentionally lead to violations. Take for example Number 1: Visibility of system status, if you’re making a map and you place down a “You are Here” indicator, you can say that your design has sufficiently fulfilled the heuristic. However, if your map has a white background and your indicator is white, then nobody will know where the indicator is! You can easily use this same logic for many of the usability heuristics. Especially Number 8 Aesthetic and Minimalist Design.
How can we make an visibly accessible design then?
One way to determine if people can view your content is to measure the Contrast Ratio between your foreground and background colors. This is a brightness difference ratio that ranges from 1:1(White on White) to 21:1(Black on White). Generally, if you want to be at a AA standard for accessibility (according to Web Content Accessibility Guidelines) your color contrast should be at least 4.5:1 (No rounding up allowed!).
But why is dark mode an issue sometimes?
An important concept that makes dark mode work is that color contrast ratios remain the same when you invert BOTH the foreground and background colors. i.e. Black text on white bg, or white text on black bg. Therefore, there should be no issues. Right? Riight??
But some content does not automatically invert their colors from light to dark mode. Images I’m looking at you! Some content inverts the foreground but leaves the background alone. Like the first Canvas example. Make sure to pay close attention to the elements you’re adding and how different color themes will affect them.
In the Canvas Dark Mode roll out post by jozsefdavid, they do mention Accessibility at the top of their priority list! So I really should mention that, Canvas is a platform for content creators (Instructors/Schools) and therefore should by no means take all the blame for any Dark Mode issues. Content creators like the instructing team for CS 325 should now be looking to update their courses for students using dark mode. Perhaps they could change their code blocks to be images with text (Without transparent backgrounds), but then they’ll need to provide a large alt-text block for those who use screen readers. More accessibility issues! Regardless, with the release of Dark Mode, all courses should revamped to make sure color choices fit to at least WCAG AA color contrast ratios.
Again, to preface. This is the second of a four part series on accessible design for software engineering. Written specifically for students of CS 352 Intro to Usability Engineering.
Hey all, while developing your concepts don’t forget to make your text readable to your target audience. I’ve got some tips and links if you’re interested in how to make your text more accessible. This goes for both hand drawn and typed concepts/prototypes.
” I “
Accessible fonts can make a big difference in the readability of your program.
“Is that an uppercase ‘i’ or a lowercase ‘L’?”
Sometimes letters are so close together it makes it tiring to read, or conversely the letters are so far apart that you can’t make out individual words anymore.
There are a surprising number of factors that go into choosing an accessible font including:
Sizing
Styling
Spacing
Letter similarities
Unfortunately, there are no set in stone standards for choosing a font with all of these characteristics. But if you’re looking for some guidelines, WebAIM (Web Accessibility in Mind) has a great article (https://webaim.org/techniques/fonts/) on typefaces and fonts. They do a much better job than I could do here, and with pictures to boot. Or if you want a more technical understanding of what actual standards there are for text, check out section 1.4 of the Web Content Accessibility Guidelines (WCAG) 2.1 (https://www.w3.org/TR/WCAG21/#distinguishable). Where you can learn more about color contrasting, text spacing, and more.
I’ll preface this post by saying that this was previously posted to EdStem as part of my work as an Undergraduate Learning Assistant for CS 352 Intro to Usability Engineering. This post is the first in a four part series discussing accessibility in design.
Nobody asked but..
The other week I was reminded how dependent I am on a computer mouse.
Vim.
That’s probably all I need to say to get the point across to many of you. But for those who don’t know. Vim is a text editor that runs mainly in the terminal and is the coding environment of choice for a certain type of developer. Vim gets a lot of disdain from many developers because of its steep learning curve.
Why? Vim takes primarily keyboard input when run from the terminal. Meaning a lot of things you normally do in your IDE of choice are invalid here. So simple things like copy-pasting, deleting lines, and exiting all require a quick trip to Google, or an extensive read through the manual to learn. Thus, you’ll have to re-teach yourself how to do nearly everything!
But Vim brings up a great point.
What if you could only interact with your computer using a keyboard? How would you open up applications, browse the web, use PyCharm, or turn off the computer!! Without a mouse or touch controls this would be very difficult. But for some systems/people this is a reality and so modern design must adapt. This semester I’m diving deeper into accessibility and how we can design our systems “smarter”. So I’ll post some of what I’m finding here for you all to incorporate into your designs. Whether they be for this course or other projects.
A good place to start for this is web design. W3C (The World Wide Web Consortium) has created a set of international standards for web accessibility and has resources to boot. If you’ve ever used a screen reader to listen to course readings rather than read them yourself, you can probably thank W3C for pioneering the standards for that. If you want to learn the basics of web accessibility check out their introduction to accessibility. And one of the coolest things they have is a repository of accessibility tools for you to use, from color contrast checkers, to free full stack accessibility software (Try WAVE accessibility tool).
Web accessibility development skills are in high demand in the workplace, and that’s probably not going to go away in the near future. So it would probably pay dividends to pay attention to current best practices. In the future I’ll try and highlight some great accessibility tools and practices that I’m finding in my research. Or if there are any topics you want me to dive deeper into let me know. (i.e. ARIA, HTML rules, etc.)