Category Archives: Computer Science

Happy path and “The Pride lands”

In the realm of user experience and product development, the concept of the
“Happy Path” is crucial. It refers to a streamlined, problem-free journey a user experiences when interacting with a product or service, aligning perfectly with their needs and expectations. This idea, vividly explained in a blog post by UserPilot (https://userpilot.com/blog/happy-path/), resonates deeply with the narrative of Disney’s classic, “The Lion King.” Here, I draw parallels between the Happy Path and the Pride Lands, contrasting it with the deviations that lead to the Elephants Graveyard, to underscore the importance of this concept in our course material.

The Pride Lands, in “The Lion King”, represents the ideal state or the happy path in user experience terms. This lush and vibrant ecosystem where everything works in harmony symbolizes a users journey where needs are met effortlessly, and satisfaction is guaranteed. The Pride Lands thrive under Mufasa’s reign, much like how a well-designed product or service flourishes when it aligns perfectly with user expectations and provides a seamless experience.

On the other hand, the Elephant Graveyard symbolizes deviation from the happy path. It is a place of chaos, danger and poor outcomes, the opposite of the Pride Lands. In our course, we learned that straying from the happy path in a product development or user experience can lead to complicated, unsatisfactory user interactions, Much like how Simba’s venture into the Elephant Graveyard leads to peril.

My interest in this particular blog post stems from its clear, engaging explanation of the Happy Path Concept. Making it highly relevant to our course material on product development. The analogy with “The Lion King” further sparked my curiosity, as it creatively demonstrates the importance of maintaining the Happy Path in real-world scenarios.

Reflecting on the content, I have learned that like in “The Lion King” where the well being of the Pride Lands depends on wise leadership and balance, the success of a product or services hinges on thoughtful design and understanding user needs. This has affected me by highlighting the importance of user-centered design and has made me more aware of the user journeys in the products I use daily.

In my future practices, I plan to apply these lessons by prioritizing user needs and striving to maintain the Happy Path in my designs. This approach will not only enhance user satisfaction but also contribute to the overall success of the products I will be involved with.

In conclusion, the Happy Path is a fundamental concept in user experience and product development. The comparison of the Happy Path with the Pride Lands provides a vivid illustration of its importance, straying from this path, akin to venturing into the Elephants Graveyard, can lead to unfavorable outcomes.

From the blog CS@Worcester – Josies Notes by josielrivas and used with permission of the author. All other rights reserved by the author.

Navigating the world of Software Licenses

As a student delving deeper into the world of computer science and software development, In class we recently came across the topic of software licensing. The article “Software Licenses” by Ben Lutkevich which can be found here offers a comprehensive overview of what software licenses are and why they are crucial in the software industry.

Summary of the article:

The article begins by defining a software license as a legal instrument governing the use or redistribution of software. It highlights different types of licenses, such as proprietary, free, and open-source licenses. Each with its unique set of rules and restrictions. The article shows the importance of understanding these licenses, especially for developers and business, to avoid legal pitfalls.

Why I choose this article:

I chose this resource well one because I have to make a blog post, but two because it was relevant to our coursework, and truthfully I was still slightly confused about it after our class discussions on it so I felt it would be appropriate to do further research. The article really highlighted the importance of licensing and the potential legal ramifications of non-compliance.

The content of the article was both informative and thought- provoking. It helped realize how software licensing is not just a legal formality but a critical component of software development and distribution. Understanding the different types of licenses, such as GPL, MIT, Apache and their implications can significantly impact how software is shared, modified, and commercialized.

In future practice, I anticipate to be more mindful of the licenses attached to the software I use and or develop. For instance, If I contribute to an open-source project, I now understand the importance of adhering to it terms. Similarly if I were to develop software I would be more aware of how to protect my intellectual property while respecting others.

The insights gained from this article extremely valuable for really anyone in the field of computer science. Especially those involved in software development. These lessons will for sure be a guide in my future decisions and actions

From the blog CS@Worcester – Josies Notes by josielrivas and used with permission of the author. All other rights reserved by the author.

Agile Development

As I am in my 4th year in the Computer Science program at Worcester State University, I am trying to find topics that resonate with not only what we learn in class but with practical application as well. I came across a post discussing “Agile Software Development,” A methodology I’ve only ever heard of in class last week and figured it would be a smart Idea to further investigate this method given how popular it is in the Software industry.

While everyone is moving towards a more collaborative and adaptive approach for software development, understanding agile is essential. I selected this post because it provided a comprehensive overview of Agile, and compared it with other methods such as Scrum, Kanban, and XP.

The post began with an overview of the complex nature of software and the necessity of structured project management frameworks. In this post Agile was the solution, Agile was defined as a methodology that prioritizes individuals and interactions over processes, it is a set of values. They then went to explain how the process is split up into 3 stages. Preparation, sprint planning, and the Sprint. Preparation is when the product owner creates a backlog, and the development team estimates the length of time each feature will require. Sprint planning is where the team decides which features are going to be worked on. And Finally the sprint is where the team actually builds it. They followed with the advantages and disadvantages of Agile. Such as Flexibility, Communication, risk reduction etc for Advantages, and Limited control, and the challenges of having a remote team collaborating. What was really helpful was the Comparison of Agile to other methodologies and providing insights to their strength and weaknesses.

Reading through this article I was shocked by how flexible Agile truly is. It allows for changes to be made seamlessly, which is a great solution for the unpredictability of working on real world projects. If followed correctly I can see this methodology being very successful for other careers as well since Agile is a set of values if companies have strong values and shares and teaches them to their employees everyone can make decisions and work on their own seamlessly.

However, as previously mentioned a weakness in the Agile method is its limited control reduced documentation it is important to find the correct balance. So in projects, especially those with tight deadlines combining different methodologies might be the best choice.

If you would like to read the full article on Agile Development click down below
https://www.microfocus.com/en-us/what-is/agile-development

From the blog CS@Worcester – Josies Notes by josielrivas and used with permission of the author. All other rights reserved by the author.

CS@Worcester – Zack's CS Blog 2023-10-04 12:20:04

Week 4: Understanding Software Licenses

This week I will be writing about software licensing and why I chose this topic. I chose to write about software licensing because I personally do not have much prior knowledge about the topic, so I thought that this would be an interesting (and useful) topic to learn about.

To start off, what is a software license? A software license is a legally binding contract between the software creators and the people who are using the software. The license specifies the conditions of using the software including how the user can use, modify, and distribute the technology and its source code.

Upon initial software usage, the end user usually signs an end-user licensing agreement, or EULA, to contractually agree to the terms stated by the license. Abiding by the EULA is important for both the end user and the developer.

Benefits for the developer:

Benefits for the user:

  • Protects the developer’s rights
  • Allows full control of the usage of the software
  • Prevents users from performing undesired actions that may infringe on the terms of the license
  • Clarifies how the software provider uses your private information
  • Prevents the user from paying for unnecessary tools
  • Keeps the user up-to-date on how the technology can be used

Different Types of Software Licenses (5)

  • Public Domain – Allows anyone to use, modify, and distribute the software. The developers are essentially surrendering all rights they would have under copyright laws.
  • Copyleft (Restrictive) – A type of open-source license stating that any future versions of the software must be open-source, or following the same copyright stipulations, like the source code.
  • GNU Lesser General Public License (LGPL) – A weaker type of Copyleft where the user can modify the software, implement it into their own unique software, and license their software how they see fit.
  • Permissive – Another type of open-source license, minimal amount of restrictions on what users can do with the software. However developers can protect their intellectual property by specifying some restrictions.
  • Propriety – The most strict type for users, and the most protective towards developers. Users are not allowed to modify, copy, or distribute the software. Most used for commercial software.

The resource used was chosen because it was relatively short, yet concise by clearly explaining the basics to understanding software licensing. After reading this blog, I learned a lot as I did not know much about the major types of software licenses and that there are specific licenses that fall under each major type. Therefore the article had a positive impact on me. Because my career goal is to become a software developer, understanding what and how software licenses work will be crucial throughout my entire developer journey. I expect to apply the concepts learned in not only my professional career, but also in my personal life as an end user.

Resources:

Galano, Fernando. “Understanding Software Licensing.” BairesDev Blog: Insights on Software Development & Tech Talent, 22 Mar. 2022, http://www.bairesdev.com/blog/understanding-software-licensing/. 

From the blog CS@Worcester – Zack's CS Blog by ztram1 and used with permission of the author. All other rights reserved by the author.

Hello World!

Welcome to my first blog post! My name is Zack Tram and am a senior completing my undergraduate CS degree. In the upcoming weeks, I’ll be posting about topics relating to how software is managed, designed and constructed.

I look forward to completing my degree this year, and everything that comes with it!

From the blog CS@Worcester – Zack's CS Blog by ztram1 and used with permission of the author. All other rights reserved by the author.

Josie’s Notes Introduction

So I guess I have to start blogging now. I never really thought I would be doing this but here I am. This Blog is starting out because of my class CS-348 Software Management Process but who knows where this will go, Anyways that is all I have today… Ciao Ciao

From the blog CS@Worcester – Josies Notes by josielrivas and used with permission of the author. All other rights reserved by the author.

Find Mentors

Summary:

Find Mentors pattern is about asking for help while exploring the unknown. Every time we decide to take a new path – learn a new language, we do not know what is in store for us and therefore have no clue as to how deal with problems that we might face. The pattern recognizes that as new apprentice we will need help facing these problems and in reaching our goal.

The solution pattern provides is to learn under a master craftsman in the field of your choosing – a mentor. The pattern also realizes that as a novice it is difficult to identify a true master craftsman and therefore during the process of acquiring the new skill we will be guided by a number of mentors with diverse levels of mastery. The pattern states that it might be easy to find authors, bloggers, professional speakers, and developers in computer science field. However, there are two problems; first, they might not be interested in mentoring; Second, asking someone to be your mentor can be very intimidating. The important point pattern makes here is to have determination and remember that the risk of rejection is very low compared to huge opportunities having a mentor can provide.

The pattern also warns us about blindly following someone. We need to keep our eyes open to the mentor’s weakness and resist the temptation to believe everything they say. No one knows everything about everything. Therefore, we need to keep finding other master craftsman and keep polishing our skills.

Why I choose this?

Computer science is a very difficult field to begin with and then on top of it – it is an ever-evolving field. The amount of knowledge available is immeasurable. The pattern ‘Reading List’ helps us organize the books we need to read, which as we all know does not give practical explanation, real world connections or real time feedback. Moreover, to start our reading list and even to make sure that we are reading the correct books – we need to find someone we can trust – someone like a mentor.

Over the last four years I have been able to find a number of mentors. They have ranged from professors to my peers, family and friends to people in slack and discord communities. It has been an amazing experience. I have learned from them and with them.

From the blog CS@worcester – Towards Tech by murtazan and used with permission of the author. All other rights reserved by the author.

Learn How You Fail

Summary:

Those who don’t learn from their past mistakes, are doomed to repeat it. ‘Learn how you fail’ pattern states that failure is an inevitable part of any learning process. And if we have not experienced failure than we are either not pushing ourselves to our limit or we are making a grave mistake of ignoring our faults. The pattern provides a very clear and concise solution, self- assessment. We need to identify and be self-aware of patterns, conditions, habits, and various behaviors that resulted in failure. The pattern also points that once we are conscious of our faults, we are given an opportunity to fix them. It’s like the saying,’ the first step to any solution is recognizing that there is a problem.’ The pattern also lets us know that accurate self-assessment can help us define our limitations. Pattern lets us know that its okay to not excel at everything and accepting these limitations forces us to rid ourselves of all the distractions and reprioritize our goals.

Why I chose this pattern?

To quote Thomas Edison one more time, “I have not failed, I’ve just found 10,000 ways that won’t work.” This is a very powerful quote because if we don’t remember which road is incorrect, we might very well end up drowning.

‘Learn how you fail’ fits in perfectly after ‘breakable toys’, ‘Practice, Practice, Practice…’ and ‘Record what you learn’. “Armed with that self-knowledge…you allow yourself the choice between working to fix these problems or cutting your losses.” This is a very powerful sentence from the pattern. I have always been very self-aware of my limitations and therefore had my courses for the four years of my college well planned. Unfortunately, due to a fractured foot and a death in the family, I was operating at a bare minimum of my normal capacity. After a long and hard self-evaluating process, I concluded that I will not be able to finish both my capstone courses and even if I do, I will only be doing my bare minimum to pass the course and not for the learning experience. At this point, I decided to cut my losses- drop one of the capstone and do my best in the other one.

From the blog CS@worcester – Towards Tech by murtazan and used with permission of the author. All other rights reserved by the author.

Crafts over art

Summary:

Craft over art pattern makes an important point about quality over beauty. Pattern points out the ugly truth that “For a craftsman to starve is a failure; he’s supposed to earn a living at his craft.” A scenario like this can happen when the craftsman is not skilled but mostly occurs when craftsman decide to prioritize art over their craft. Craftsman should build a software based on the product owner’s need and not just indulge their desires. It is a craftsman’s responsibility to develop a software that is beautiful. However, this should not be done by sacrificing the utility and productivity of the software. The pattern provides a solution which uses a fifty-fifty line. The craftsman should develop a software which is aesthetically pleasing and feature rich. Creating something that is beautiful and has no use is not craftsmanship, it is a waste of craftsman’s skill and time.

Another aspect the pattern covers is that as craftsman, we need to prioritize product owner’s needs over our own. As craftsman we cannot make excuses of not being in an ideal artistic environment; we need to create a quality product that satisfies the product owner in the provided time frame.

However, craftsman should not do merely do what is expedient. The pattern states us to adhere to our standards even under high pressure. The pattern further explains that based on the product owner’s requirements, sometimes we will need to switch priorities between productivity and cosmetics. To understand, achieve and maintain all our standards, we as craftsman need to understand craft and art are not mutually exclusive but interdependent.  

Why this pattern?

As someone who just graduated and is joining the work force as a software developer, craft over art pattern can be used as a moral compass. Programming is without a doubt a form of art especially if I am working on frontend or User interface. I have been hired by a friend to create a website of his family’s construction company. They wanted a simple website with description of their work, prices, and contact information. I spent hours looking into themes, designs, photos, and live photos and barely any looking into features. After reading this pattern I was able to reorganize my thoughts and let my friend know all sorts of features I would be able to add into his website. He was pleasantly surprised with my suggestions and his family even offered a raise. The pattern helped me stay true to the programming and not get lost in the aesthetics of it all.

From the blog CS@worcester – Towards Tech by murtazan and used with permission of the author. All other rights reserved by the author.

Sprint Retrospective 3

Everything under source (src) in backend was written except for the final test files and API was also complete. We were waiting for more information about access tokens and Gitlab access keys from the IAM team. We were also waiting to hear from AWS team on templates for Kubernetes system but did not get any response. We were at the same time researching on how to import API bundle into backend so we could start building the backend server and to at least test if everything from our side was working properly.

We needed to bundle our API before we could export the file to backend and ‘npm run bundle outfile.yaml` was not working. After fixing minor issues in the API, we got our bundle file. Even after a lot of research, readings and experimentation, we were not able to connect API bundle to backend, something would not work and kept getting different errors. At this point we decided to copy the bundle file and paste it into backend lib folder manually. Since we were not able to import the bundle file, we decided to not work in main and created a separate branch called ‘issue10’.

We made a lot of mistakes from this point on. We were all working on this branch instead of making our own branch based on the issue10 branch. We also worked only on one team member – Christian’s system. We added and modified a lot files like entrypoint.sh, package.json, package-lock.json, docker-compose.yaml, Dockerfile, etc. We should have created branches based on issue10 branch, then created specific issues with proper weight assigned to them. After making all the modifications we could think so, we still were not able to build our backend server.

At this point, Dr. Wurst pointed out that we do not have frontend, which means that our docker file will not be copying yarn file and running yarn install but instead copying the package-lock file and running npm install. After making changes in the Dockerfile, our backend server was finally able to build but still could not stay up. After going over docker container logs we finally came to the conclusion that the problem for this was in the port. We had not specified proper port in many files. Once those modifications were made the backend server was up. Till this point, we were all still working on Christian’s system, without any proper issues, comments and documentation for modifications that were being made.

I created my own branch based on issue10 and then wrote calls for cooking method. However, when I tried to build the server, I got the error that docker-compose is not installed even though I have used it many times before. Using the solution, I found on stackoverflow I was now able to build the server but the process would hang up on the attaching stage. I tried running docker-compose up command after opening the branch in container. This led to an error saying ‘docker not found’. Another team member Jeffery had the same problem as mine but was able to find a solution for it and then was able to make calls. However, the same solution did not work for me. After trying everything I could find on the web till 4 am, I finally gave up.

In the next meeting I shared the calls I had written for cooking methods with the team so they could be added to the project. Noticing that I was the only person who was working on a windows PC I decided to run the project on a friends MacBook and surprisingly it worked. I did not research further into why it would not work on my system since I had limited time with the Mac.

I worked on cookingMethod.js and cookingTip.js test file. I set three constant variables: getAll, getOne with valid ID and an invalid ID. getAll would check for ‘200’ response and data in form of array. getOne with valid input would check for ‘200’ response, ID, object and value. getOne with Invalid input would check for ‘404’ response.

Links to issues:

Calls

https://gitlab.com/LibreFoodPantry/common-services/foodkeeper/foodkeeper-newbackend/-/issues/34

Backend Debugging

https://gitlab.com/LibreFoodPantry/common-services/foodkeeper/foodkeeper-newbackend/-/issues/40

Modification of files

https://gitlab.com/LibreFoodPantry/common-services/foodkeeper/foodkeeper-newbackend/-/issues/41

Cooking Method test

https://gitlab.com/LibreFoodPantry/common-services/foodkeeper/foodkeeper-newbackend/-/issues/28

Cooking tip test

https://gitlab.com/LibreFoodPantry/common-services/foodkeeper/foodkeeper-newbackend/-/issues/42

P.S. – I apologize for this retrospective being more like a summary. It proved difficult to classify the process in what worked and what did not work sections for this sprint.

From the blog CS@worcester – Towards Tech by murtazan and used with permission of the author. All other rights reserved by the author.