Category Archives: Week 10

Software Development Through Video Conferencing Software

Over the past few weeks, we’ve learned about the importance of collaboration in a team. Whether that team is using Scrum or some other software development methodology, communicating with one another is one of the key pieces to achieving whatever goals they have. 

While going through the syllabus, I saw “Collaboration tools” as one of the course topics. I thought about what would exist under this category and the first one that came to mind were video calls. Zoom specifically was the one that came to mind and I wondered how it is or would be used in a software development environment.

In an article from Shari Cleare, they share that “video conferencing software provides powerful communication and collaboration tools that scrum masters can use to engage participants, especially those who cannot attend these meetings in person.” One of my first thoughts regarding this topic was that not every person on the team physically has to be at the meetings; or better yet, no one no one has to physically meet at all. This allows for greater flexibility in choosing members or in general as members can be anywhere or from anywhere, as long as they are able to be present for these online meetings.

The Scrum Master or whoever is hosting the meetings doesn’t even have to be present. Zoom allows for automatic meetings at a set time for the team so, If they are unable to make the meeting, in person or online, the other members can still perform their Sprint Planning, Daily Scrum, or other meeting.

If a team choses to meet online only due to location constraints or other reasons, you may think that it would be nice being able to work from home. I’m sure many people would rather work from the comfort of their own home, but that comfort could turn into the thing that holds them and the team back. 

Zoom can be a great tool for members that are unable to make the physical meeting, but as the main form of communication, I feel that it can easily go downhill over time. Personally, I get distracted with other things when I’m at home so doing work takes much longer than it needs to. It is also why I try to do my work while on campus. I feel that many people can relate to this and if they want to get work done and contribute to meetings and such, they should separate where they work and where they can relax.

I hope that I can have the option to do both in the future and am able to find a good balance. Going into the workplace to get work done before going home and having the freedom to work online should I be unable to make it would be great. I believe that this has become more commonplace as well. During Covid, people had to work from home, and now that it has died down, many companies are allowing either option.

https://blog.zoom.us/using-zoom-agile-software-development/

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

Cloud Infrastructures – GitPod vs. Coder

Integrative softwares and tools like Dev Containers and GitPod can be invaluable for development teams/tasks, commonly used for its benefits in ensuring portability and uniformity in team based development environments – amongst others. However setting these tools up to be ready to begin working can be time consuming; furthermore, development projects often require running several hardware-intensive applications simultaneously which can cause delays due to hardware constraints and inconsistencies across teammates. These factors can quickly eat into time allocated for team/project work and create a weak link in a team if one (or more) teammates are falling behind trying to get set up. 

Recently, this is something that I’ve experienced and observed frequently in class as we incorporate more toolkits and work on more intensive projects. With Dr. Wurst’s suggestion of implementing GitPod as a way of addressing these difficulties, I decided to do some reading into what GitPod is and other solutions. 

Coder is another cloud-based developer environment which is an alternative to GitPod with some key differences. In Coder vs. GitPod: Which is Better for Your Team? Computer Science professionals Ben Potter and Mark Milligan consider the pros and cons of both with a focus on helping readers choose the best fit for their development teams. GitPod targets individuals and small teams with SaaS offerings focusing on an easy start and integration with several IDEs and containers, making it a great fit for web application development. Plus, with their current offering of 50 hours free monthly (and modestly affordable packages if this isn’t enough) there’s minimal price barrier.

On the other hand, Coder is oriented towards large-scale teams and organizations/enterprises, offering a self-hosted solution for on-premises or public cloud deployment. It prioritizes security and flexibility, allowing workspaces to be operated on a variety of infrastructures like Docker and other VMs. Being business-focused, Coder also provides several enterprise related features like single-sign-on, audit logs, usage metrics and more while supporting several IDE’s and containers, VM’s, etc.

It’s important to keep in mind that the original post was hosted on the Coder blog medium and may be biased as such, though the authors seem to try to take a fair stance and highlight the cases where GitPod would likely be more applicable than Coder. This comparison helped me get a better understanding of some of the capabilities and advantages of tools like GitPod/Coder. Plus, learning about Coder as an alternative to GitPod focused on large-scale enterprises that may be geographically spread out is awesome as an individual who intends on entering the CS field after graduating this coming Spring. 

Check out more on Coder here: https://coder.com/why

Resources:
1. https://coder.com/blog/coder-or-gitpod-which-is-better-for-your-team

From the blog CS@Worcester – Tech. Worth Talking About by jelbirt and used with permission of the author. All other rights reserved by the author.

Software Copyright Licensing

The blog I chose to write about today will be on copyright and licensing in software with that being one of the main topics in the course and to get a better understanding on licensing. In the blog “What is a software license?” by the website Synk.io, provides an in depth blog on types of software licenses, how it works, uses, as well as management of them. The blog mentions how software that is not covered by a license is categorized as “public domain software” or “private unlicensed software”. In the example Professor Wurst mentioned in class previously about wanting to implement a software in the course which had no license falls into private unlicensed software. The software although unlicensed still falls under copyright protection thus unusable for others. The blog mentions examples of when common users would see software license agreements. These are often listed in the terms of conditions prior to installing any software under a end-user license agreement (EULA).

The graphic above displays the 5 different kinds of licenses and shows the level of restrictiveness depicted by the arrow going from less restrictive to most restrictive. The article further goes in depth for each of the 5 license types software.

The article describes how software that use Public Domain Licenses typically run into the issue where the code might not follow the best procedures and standards. Which is a consequence of the nature of the license. I can see a lot of educational software or software for non profit being released under a public domain license.

The next license that the article talks about is LGPL and how “developers have rights to link open source libraries within their software”. In other words, LGPL lets you add licenses to code without completely releasing the entire source code.

Permissive licenses are what we have researched the most in class which ranged from Apache to MIT licenses that often require copy right notes within the software.

Interestingly when the article talks about Copyleft licenses it mentions how it probably is not the best license for software developers due to the reciprocal licensing of resulting code in other words, all derived code has to follow the same copyleft licensing. With that being said, copyleft licenses are probably best used for research/educational purposes or for very transparent community collaborations.

Lastly, the most restrictive licensing type proprietary are often used by large corporations and protects the owners/developers from unauthorized use. When doing further research for applications that use Proprietary licensing I found that the application Skype a proprietary license thus the source code is not provided publicly and is owned by Microsoft.

Overall, when reflecting at the different types of licensing and my personal goals. I see myself in the future using a permissive license like the MIT license for straightforwardness and simplicity. To add to that, currently for our program on Markdown to HTML my group is using a MIT license for those reasons.

https://snyk.io/learn/what-is-a-software-license/

From the blog CS@Worcester – Anthony Duong CS Blog by anthony duong and used with permission of the author. All other rights reserved by the author.

Software Licenses

Recently in class I have been learning about a bunch of different types of software licenses and just how important they are to include on my future projects. A software license is essentially a type of legal instrument that controls the use and redistribution of software in order to help protect the author. According to a website called TechTarget, the main use of a software license is “Software licenses typically provide end users with the right to one or more copies of the software without violating copyrights. The license also defines the responsibilities of the parties entering into the license agreement and may impose restrictions on how the software can be used.” Before taking CS-348 I didn’t know much about software licenses and how they worked. I knew there were a couple different types, but I didn’t realize how many types there are actually are and I also didn’t understand how important that they are. Personally, I think TechTarget did a great job explaining the differences between licenses and how they work. While most people think that these licenses are just to protect developers and their code, they are also used in order to protect users. They help the users avoid and protect themselves from infringement claims and also limit their legal liability if something were to happen. Sadly, these software licenses are not free. There isn’t a set price that every license costs, most of them have their own prices which depends on the type of license that it is. Some of these prices include a one time fee, some are a subscription fee, and others include a purchase fee plus a subscription fee. Although these licenses can be expensive, I think that it is worth it in order to help protect yourself and your users.

While there are a bunch of different software licenses, there are two main types that are viewed differently under copyright law. One of the main types of software licenses are free and open source software licenses, otherwise known as FOSS licenses. These types of licenses give the user a lot of freedom, and even allow them to use the source code. FOSS may allow these customers to change the software themselves if the user desires it. The other main type of software license is known as a proprietary license. These licenses are more commonly known as closed source licenses. Closed source licenses are much more strict than FOSS licenses, and don’t give the user much freedom. The users receive operational code, however they are not allowed to freely alter the software that they have been given. On top of that, these users are not allowed to obtain the source code through reverse engineering.

Synopsis: https://www.techtarget.com/searchcio/definition/software-license

From the blog CS@Worcester – One pixel at a time by gizmo10203 and used with permission of the author. All other rights reserved by the author.

Managing Software Licenses

Introduction

I found an article by Ibrahim Ogunbiyi called Seven Best Practices for Managing Software Licenses. Just based on the title, it seemed to be what I was looking for. It starts off with the basics; what is software license management? According to Ogunbiyi, it’s simply “a document that provides guidelines for the use and distribution of software” (Ogunbiyi). It assists with the controlling, auditing, tracking, and management of a software in an organization and ensures that users comply with the regulations set in place.

Importance

The article discusses the importance of licenses. The reasons include but aren’t limited to:

  • Legal compliance with regulations set by organizations/manufacturers
  • Keeps track of software due dates; leads to productivity
  • Helps manage/reduce costs through enhanced planning
  • Optimizes software usage through usage and license tracking data
  • Ensures only the use of authorized and secure software, avoiding malware or malicious attacks/breaches

At this point, I think many of those new to software licensing have already taken a huge step forward in their knowledge of the subject. It’s easy to dismiss licensing as something that only grand organizations deal with, but it can be necessary for any small business or individual who wants to protect their work. 

Best Practices

Finally, we reach the best practices as given by Ogunbiyi. In no particular order, these practices are: 

  1. Documenting the process of obtaining the software
    1. Who, where, when, how it was purchased
    2. When it is due for renewal
    3. Keep documentation up to date and to certain standards
  2. Centralize your list of software licenses
    1. This practice is good for organizations with multiple departments that each have separate licenses
  3. Understand the agreements for your software license(s)
    1. Read terms and conditions
  4. Use a software license management tool
    1. Assists in tracking, optimizing, and managing software licenses
  5. Track license usage regularly
    1. Ensures compliance with rules and regulations
  6. Make sure your software license(s) are up to date
    1. Keeps them tracked
    2. Prevents them from expiring
  7. Teach employees about managing software licenses
    1. Ensures correct usage of software
    2. Keeps them knowledgeable about the license process and its guidelines

Why This Topic?

I chose this topic because it’s very underappreciated and not mentioned enough in the software development community (from my experience). This could also be useful for an organization or small team that is new to software development.

Conclusion

For me, this article was quite beneficial to my learning. Personally, I previously didn’t know anything about software licensing and the entire process about it. I won’t claim to be an expert on it now, but this article has helped me become a novice in understanding the subject. Although this article didn’t recommend specific licenses, it did teach me the process I should go about when acquiring or dealing with a license. In the future, when I am working on a project either individually or with a team, I’ll be more familiar with the guidelines and process around licensing, and can help my colleagues if they are unfamiliar.

From the blog CS@Worcester – Josh's Coding Journey by joshuafife and used with permission of the author. All other rights reserved by the author.

Blog Post Title: Exploring the World of REST APIs: A Journey Through Modern Web Development


In the realm of computer science and web development, understanding the intricacies of Application Programming Interfaces (APIs) is indispensable. My recent exploration into this subject led me to an enlightening IBM article about REST APIs, a cornerstone of modern web services and architecture. This article, fittingly titled “What is a REST API?” (IBM Article Link), delves into the principles and practices of RESTful APIs, offering a comprehensive overview that resonates deeply with our course material.

Selecting this resource was a no-brainer for me. The blend of theoretical concepts and practical applications it offers aligns perfectly with our current coursework on web development and API integration. The article’s clear delineation of REST API characteristics, alongside examples of their use in microservices architecture, provided a solid foundation for understanding their role in contemporary web development.

The six foundational principles of REST APIs, as elucidated in the article, were particularly enlightening. They include uniform interface, client-server decoupling, statelessness, cacheability, layered system architecture, and code on demand. Each principle contributes to the overall functionality and efficiency of web services, emphasizing the importance of a well-structured API.

What struck me most was the concept of statelessness in REST APIs. The idea that each request from a client to a server must contain all the information needed for the server to respond, without relying on any stored context, highlighted the need for efficient data management and transfer in web applications. This insight has reshaped my understanding of client-server interactions and will undoubtedly influence my future projects.

Furthermore, the article’s discussion on the importance of security in REST APIs, such as using OAuth 2.0 for authorization and HTTPS for secure data transmission, was particularly relevant. It underscored the critical nature of protecting data and maintaining user privacy, aspects I intend to prioritize in my future work.

In summary, this IBM article not only broadened my knowledge of REST APIs but also reinforced the importance of secure, efficient web development practices. The principles of RESTful design will be an integral part of my toolkit as I progress in my computer science career. I strongly recommend this resource to my peers for its clarity, depth, and relevance to our course.

As I continue my journey in computer science at Worcester, I am excited to apply these concepts in practical scenarios, especially in web development projects. This article has been a stepping stone in my understanding of how web technologies work in harmony to create seamless user experiences and secure, efficient web services.

Citation: “What is a REST API?” IBM. https://www.ibm.com/topics/rest-apis

From the blog CS@Worcester – Abe's Programming Blog by Abraham Passmore and used with permission of the author. All other rights reserved by the author.

Record What You Learn

Hello and welcome back to another week of my blog. This week, I looked through chapter 5 of the book Apprenticeship Patterns by Dave Hoover named Perpetual Learning. One particular apprenticeship pattern I found interesting was “Record What You Learn.” This pattern is about taking notes and keeping track of what you learn in your journey as an apprentice or a learner. The idea is that if you write things down, you can look back on them later and remember what you’ve learned. Plus, by sharing your notes with others, you can improve your communication skills and help others learn too. There can be several ways to record what you have learned throughout your journey, such as constantly updating a journal, personal wiki, or writing a blog, such as me writing these blog posts when I learn about the different apprenticeship patterns. Those listed have only writing involved. Other ways you could record down what you have learned include making a drawing or even making video recordings of yourself. No matter what way you choose to record what you have learned, it is important to keep a date on them. This way, your recorded notes will be organized and sorted in chronological order.

I should start following this apprenticeship pattern especially since I tend to forget things that I have learned such as a stack versus a queue in Java. Sure, I could just look up what the differences are online, but actually writing it down in my own style would help me remember it more easily. In addition, if I forget anything in the future, I could always just refer back to my old notes. When I start incorporating this apprenticeship pattern into my journey, the main way I would like to take notes would be to find something digital and write stuff down in it. I prefer writing stuff down with a stylus, like using an Apple Pencil on an iPad, since I tend to remember things more when writing notes down rather than typing them out. I hope to start using “Record What You Learn” because it will be highly beneficial to my computer science career.

From the blog Comfy Blog by Angus Cheng and used with permission of the author. All other rights reserved by the author.

Record What You Learn

Hello and welcome back to another week of my blog. This week, I looked through chapter 5 of the book Apprenticeship Patterns by Dave Hoover named Perpetual Learning. One particular apprenticeship pattern I found interesting was “Record What You Learn.” This pattern is about taking notes and keeping track of what you learn in your journey as an apprentice or a learner. The idea is that if you write things down, you can look back on them later and remember what you’ve learned. Plus, by sharing your notes with others, you can improve your communication skills and help others learn too. There can be several ways to record what you have learned throughout your journey, such as constantly updating a journal, personal wiki, or writing a blog, such as me writing these blog posts when I learn about the different apprenticeship patterns. Those listed have only writing involved. Other ways you could record down what you have learned include making a drawing or even making video recordings of yourself. No matter what way you choose to record what you have learned, it is important to keep a date on them. This way, your recorded notes will be organized and sorted in chronological order.

I should start following this apprenticeship pattern especially since I tend to forget things that I have learned such as a stack versus a queue in Java. Sure, I could just look up what the differences are online, but actually writing it down in my own style would help me remember it more easily. In addition, if I forget anything in the future, I could always just refer back to my old notes. When I start incorporating this apprenticeship pattern into my journey, the main way I would like to take notes would be to find something digital and write stuff down in it. I prefer writing stuff down with a stylus, like using an Apple Pencil on an iPad, since I tend to remember things more when writing notes down rather than typing them out. I hope to start using “Record What You Learn” because it will be highly beneficial to my computer science career.

From the blog Comfy Blog by Angus Cheng and used with permission of the author. All other rights reserved by the author.

Record What You Learn

Hello and welcome back to another week of my blog. This week, I looked through chapter 5 of the book Apprenticeship Patterns by Dave Hoover named Perpetual Learning. One particular apprenticeship pattern I found interesting was “Record What You Learn.” This pattern is about taking notes and keeping track of what you learn in your journey as an apprentice or a learner. The idea is that if you write things down, you can look back on them later and remember what you’ve learned. Plus, by sharing your notes with others, you can improve your communication skills and help others learn too. There can be several ways to record what you have learned throughout your journey, such as constantly updating a journal, personal wiki, or writing a blog, such as me writing these blog posts when I learn about the different apprenticeship patterns. Those listed have only writing involved. Other ways you could record down what you have learned include making a drawing or even making video recordings of yourself. No matter what way you choose to record what you have learned, it is important to keep a date on them. This way, your recorded notes will be organized and sorted in chronological order.

I should start following this apprenticeship pattern especially since I tend to forget things that I have learned such as a stack versus a queue in Java. Sure, I could just look up what the differences are online, but actually writing it down in my own style would help me remember it more easily. In addition, if I forget anything in the future, I could always just refer back to my old notes. When I start incorporating this apprenticeship pattern into my journey, the main way I would like to take notes would be to find something digital and write stuff down in it. I prefer writing stuff down with a stylus, like using an Apple Pencil on an iPad, since I tend to remember things more when writing notes down rather than typing them out. I hope to start using “Record What You Learn” because it will be highly beneficial to my computer science career.

From the blog Comfy Blog by Angus Cheng and used with permission of the author. All other rights reserved by the author.

Record What You Learn

Hello and welcome back to another week of my blog. This week, I looked through chapter 5 of the book Apprenticeship Patterns by Dave Hoover named Perpetual Learning. One particular apprenticeship pattern I found interesting was “Record What You Learn.” This pattern is about taking notes and keeping track of what you learn in your journey as an apprentice or a learner. The idea is that if you write things down, you can look back on them later and remember what you’ve learned. Plus, by sharing your notes with others, you can improve your communication skills and help others learn too. There can be several ways to record what you have learned throughout your journey, such as constantly updating a journal, personal wiki, or writing a blog, such as me writing these blog posts when I learn about the different apprenticeship patterns. Those listed have only writing involved. Other ways you could record down what you have learned include making a drawing or even making video recordings of yourself. No matter what way you choose to record what you have learned, it is important to keep a date on them. This way, your recorded notes will be organized and sorted in chronological order.

I should start following this apprenticeship pattern especially since I tend to forget things that I have learned such as a stack versus a queue in Java. Sure, I could just look up what the differences are online, but actually writing it down in my own style would help me remember it more easily. In addition, if I forget anything in the future, I could always just refer back to my old notes. When I start incorporating this apprenticeship pattern into my journey, the main way I would like to take notes would be to find something digital and write stuff down in it. I prefer writing stuff down with a stylus, like using an Apple Pencil on an iPad, since I tend to remember things more when writing notes down rather than typing them out. I hope to start using “Record What You Learn” because it will be highly beneficial to my computer science career.

From the blog Comfy Blog by Angus Cheng and used with permission of the author. All other rights reserved by the author.