Author Archives: gkitenge

Sprint retrospective #1

To start off, our first print went very well. Our project for this class is
the LibreFoodPantry Identity and Access Management System. Our main goal in
this sprint was to get familiar with Keycloak and learn how to implement it and
also building a small API. The issue that was created for Keycloak and what I
did researches on are “Keycloak authentication”, which had a weight
of two and “Deploying Keycloak on AWS Kubernetes” which had a weight
of two as well based on the time it took to do research and find good resources
to help us move forward with our projects.

In our team, we decided to divide and separate tasks. It was actually a way
for us to do multiple tasks at the same time and go forward with the plan. So,
Mike and Lena started working with frontend and backend, then with API after,
George who was the scrum master, took care of managing everything, handling the
whole group, creating documents. I and Andrew did researches on Keycloak and how
to implement it. Even though we all had our tasks to do, we were also able to
help others in case of need.

Doing research seems an easy task, but in reality, it is not. When I started
first doing research on Keycloak authentication, I had a lot of different links
but it was hard for me to find one that had the exact information that me and
the group were looking for. Not saying that there were no good links but Keycloak
is pretty broad and I had to do a lot of research and dig in to find good ones.
One of my mistakes here was that I was trying to find good links, good articles
and completely neglected the side of watching videos. Then, with a couple of
videos I have been able to understand and find good resources that I shared
with the group.

Looking to my personal achievement and work, I want to improve the way I
share my thoughts with the team. I barely created issues during the first
sprint planning, and was not really involved in sharing my ideas and opinions. I was
contributing to the conversations but never putting anything visual on GitLab
as a proof of my contribution. So, for the next sprint, I decided that I will
be more involved and put up my work to show my contribution to the group.

Looking at the team work, we did an amazing job working together on our
first sprint. We all listened to each other, everyone felt comfortable talking
and sharing their ideas. Also, everyone put a good effort and got the work
done. But one thing I think we need to work more on is the communication among
us out of class. Having a little time of communication did not make the first
sprint planning easy. We were all working on our tasks and talking about it
just in class either on Mondays and Wednesdays. So, organizing ourselves and
try to find a time for all of us that works and schedule weekly meetings out of the
class so we can talk more about the project, our tasks and express whatever
thoughts, opinions and questions we have at the moment will be very helpful. And, we
can meet via zoom or discord voice channels and talk more about the project.

The two issues that I worked on:

Keycloak authentication: https://gitlab.com/LibreFoodPantry/common-services/identity-and-access-management-system/general/-/issues/1

Deploying Keycloak on AWS Kubernetes: https://gitlab.com/LibreFoodPantry/common-services/identity-and-access-management-system/general/-/issues/5

From the blog CS@Worcester – Gracia's Blog (Computer Science Major) by gkitenge and used with permission of the author. All other rights reserved by the author.

Apprenticeship (Chapter 1, 2-6 Introductions)

While I was reading the chapters’ introductions for the book Apprenticeship Patterns Guidance for the Aspiring Software Craftsman, I was amazed and drowned in the book because those introductions, examples from other software craftsmen, and their journey made me understand that we should not see or underestimate ourselves when looking at others’ successes in computer science. It doesn’t mean it has always been easy for them since the beginning. They had to work hard, fell, and failed many times but still stood up and kept working harder and harder.

The story of Dave really stood up to me and while I was reading that story, I realized that many times, in the computer science field, I felt like giving up because I was not doing anything right. Or maybe I was but it was very low compared to all my classmates who were stronger and smarter than me. But with this story, I understood that it’s all a matter of sacrifice and always keep standing up after a fall. If Dave had given up, he probably wouldn’t have learned and gotten better. As a computer science major, interested in software development, this book will be my best friend because I can tell that I am going to learn how to become a good, excellent software developer.

One thing I also learn while reading chapter 4, is that we should not compare in computer science. Especially when that comparison makes you feel inferior or not capable of achieving great things. We don’t know what those people who are better than us in a certain domain have been through. So, we cannot just envy or feel less smart than them. Maybe they also felt that way when they were at our level. With computer science, it is about learning every day, every time, everywhere, and always trying to become our best version and do better than yesterday. That is why I loved what the zen master said about emptying the cup: “If you come to me with a cup that is already full, how can you expect me to give you something to drink?”. Even though we feel like we already know everything about computer science, software development, the experience we already have should push us and motivate us to put into emptying the cup, meaning clearing our mind of bad habits, setting aside the pride we have in our skills, and opening ourselves up to the different, often counterintuitive, approaches of our more experienced colleagues.

We learn every day, we never cease learning and we will always be learning no matter what. So, a certain position of knowledge should not make us feel that we’ve reached the highest point and stop there, because there can be another who will come and do better and surpass us all. knowledge never ends, it actually extends.

From the blog CS@Worcester – Gracia's Blog (Computer Science Major) by gkitenge and used with permission of the author. All other rights reserved by the author.

Thea’s Pantry

I was reading the user stories under the documentation of Thea’s Pantry and had an idea of how everything works. When we take a look at the user stories, we can see how well organized is the system and the step-by-step procedure according to different domains like “Identity and Access Management”, “A Guest Visiting Thea’s Pantry” and many others. Also, I took a look at the Architecture and the UML Design was so impressive. I can see what work has to be done and worked on. I love the way it was divided into different parts, (GuestInfoSystem, IneventorySystem, ReportingSystem, and so on) which makes it easier for developers to understand and have an idea of what to work on.

From the blog CS@Worcester – Gracia's Blog (Computer Science Major) by gkitenge and used with permission of the author. All other rights reserved by the author.

LibreFoodPantry

I was reading the items linked in the LibreFoodPantry website and I was mostly interested in the Code of Conduct. It is important to know that the community is protected and valued. That anything inappropriate is not tolerated and that everyone from everywhere is accepted just the way they are. That sense of safety and protection is important because when the community feels safe, even their work is done perfectly. I can tell that the community of LibreFoodPantry offers and guarantees security which is very essential. Safety is the most important factor in any company, community because when it’s not the case, no one would want to be in such an environment.

From the blog CS@Worcester – Gracia's Blog (Computer Science Major) by gkitenge and used with permission of the author. All other rights reserved by the author.

GRASP

What is GRASP?

GRASP, standing from “General Responsibility Assignment Software Patterns” is a design pattern in object-oriented software development used to assign responsibilities for different modules of code.

The different patterns and principles used in GRASP are controller, creator, indirection, information expert, low coupling, high cohesion, polymorphism, protected variations, and pure fabrication. GRASP helps us in deciding which responsibility should be assigned to which object/class.

The following are the main design principle

  1. Creator
  • Who creates an Object? Or who should create a new instance of some class?
  • “Container” obejct creates “contained” objects.
  • Decide who can be creator based on the objects association and their interaction.

2. Expert

  • Provided an object obj, whoch responsibilities can be assigned to obj?
  • Expert principle says that asign those responsibilities to obj for whoch obj has the information to fultill that responsibility.

3. Low Coupling

  • How strongly the objects are connected to each other?
  • Coupling – object depending on other object.
  • Low Coupling – How can we reduce the impact of change in depended upon elements on dependant elements.
  • Two elements can be coupled, by following if:
    • One element has aggregation/composition or association with another element.
    • One element implements/extends other element.

4. High Cohesion

  • How are the operations of any element are functionally related?
  • Related responsibilities in to one manageable unit.
  • Prefer high cohesion
  • Benefits
    • – Easily understandable and maintainable.
    • – Code reuse
    • – Low coupling

5. Controller

  • Deals with how to delegate the request from the UI layer objects to domain layer objects.
  • It delegates the work to other class and coordinates the overall activity.
  • We can make an object as Controller, if
    • Object represents the overall system (facade controller)
    • Object represent a use case, handling a sequence of operations

6. Polymorphism

  • How to handle related but varying elements based on element type?
  • Polymorphism guides us in deciding which object is responsible for handling those varying elements.
  • Benefits: handling new variations will become easy.

7. Pure Fabrication

  • Fabricated class/ artificial class – assign set of related responsibilities that doesn’t represent any domain object.
  • Provides a highly cohesive set of activities.
  • Behavioral decomposed – implements some algorithm.
  • Benefits: High cohesion, low coupling and can reuse this class.

8. Indirection

  • How can we avoid a direct coupling between two or more elements.
  • Indirection introduces an intermediate unit to communicate between the other units, so that the other units are not directly coupled.
  • Benefits: low coupling, e.g Facade, Adapter, Obserever.

9. Protected variation

  • How to avoid impact of variations of some elements on the other elements.
  • It provides a well defined interface so that the there will be no affect on other units.
  • Provides flexibility and protection from variations.

I chose to talk about GRASP because as a computer science major interested in software development, I was curious to learn more about this and how GRASP is used to assign responsibilities for different modules of code, how it provides a means to solve organizational problems.

rao.pdf (colorado.edu)

GRASP (object-oriented design) – CodeDocs

From the blog CS@Worcester – Gracia's Blog (Computer Science Major) by gkitenge and used with permission of the author. All other rights reserved by the author.

JavaScript

JavaScript is a scripting language for creating dynamic web page content. It creates elements for improving site visitors’ interaction with web pages, such as dropdown menus, animated graphics, and dynamic background colors. Developers generally use JavaScript alongside HTML and CSS to create a dynamic website. The scripting language works well with CSS in formatting HTML elements. However, it still maintains user interaction, something that CSS cannot do by itself.

JavaScript’s implementations within the web, mobile application, and game development make the scripting language worth learning. You can do so via learning platforms like BiteDegree or by exploring free JavaScript templates and applications on code hosting platforms like GitHub.  

What is the use of JavaScript?

JavaScript has continued to grow alongside new browsers like Mozilla Firefox and Google Chrome since then. The latter even started developing the first modern JavaScript engine, called V8, which compiles bytecode into native machine code. Today, JavaScript has plenty of frameworks and libraries to simplify complex projects, such as AngularJS, jQuery, and ReactJS. While it caters to web-based programs the most, JavaScript programming features have other implementations in different areas. The following are several basic uses of JavaScript.

The development of JavaScript frameworks, consisting of JavaScript code libraries, allows developers to use pre-written JavaScript code in their projects. It saves them time and effort from having to code programming features from scratch. Each JavaScript framework has features that aim to simplify the development and debugging process.

For example, front-end JavaScript frameworks like jQuery and ReactJS improve design efficiency. They allow developers to reuse and update code components without affecting each other, function or value-wise. The implementation of JavaScript code in Node.js also plays an important role in web development. Node.js can reduce server response time due to its single-threaded nature and non-blocking architecture and omit delays.

One of JavaScript’s core functions is adding dynamicity to web pages. This includes displaying animations, modifying text visibility, and creating dropdown menus.

While you can use only HTML and CSS code to build a website, it will only have a static display. With JavaScript, a user can interact with web pages and have a better browsing experience.

Additionally, JavaScript lets you change HTML content and attribute values without reloading the web page first. This is because JavaScript supports the following data types:

  • String ‒ consists of textual data written inside quotes. For example, “Hello world”‘Hello world’, and “Display ‘Hello world’ text”.
  • Number ‒ covers integer and floating-point numbers between (2^53 – 1) and -(2^53 – 1).
  • Boolean ‒ a logical data type with true and false values.
  • BigInt ‒ represents integer data of arbitrary length.
  • Null ‒ contains a null value.
  • Undefined ‒ includes declared but not assigned variables.
  • Symbol ‒ provides unique identifiers for objects.
  • Object ‒ for complex data structures written with curly braces. For example, {item:”Book”, information:”biography”}.

I chose to talk about JavaScript because it’s one of the most fundamental in programming and as computer science, I am supposed to know about JavaScript because it’s mostly used and also very important.

What is JavaScript used for? | Hack Reactor

What Is JavaScript? A Basic Introduction to JS for Beginners (hostinger.com)

From the blog CS@Worcester – Gracia's Blog (Computer Science Major) by gkitenge and used with permission of the author. All other rights reserved by the author.

SOLID

The SOLID principle helps in reducing tight coupling, which means a group of classes are highly dependent on one another which we should avoid in our code. The opposite, which is loosely coupled classes that minimize changes in our code, helps in making code more reusable, maintainable, flexible, and stable.

This principle is an acronym of the five principles which is given here below:

  • Single Responsibility Principle: This principle states that “a class should have only one reason to change” whoch means every class should have a single responsibility or single job or single purpose. Let’s take an example of the developing software, the task is divided into different members doing different things as front end designes to design, the tester does testing and back end developer takes care of back end development part then we can say that everyone has a single job or responsibility.
  • Open/Closed Principle: This principle states that “software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification” which means we should be able to extend a class behavior, without modifying it. Let’s for example, suppose developer A needs to release an update for a library or framework and developer B wants some modification or add some feature on that then developer B is allowed to extend the exiting class created by developer A vt developer B is not supposed to modify the class directly.
  • Liskov’s Substitution Principle: The principle was introduced by Barbara Liskov in 1987 and according to this principle “Derived or child classes must be substitutable for their base or parent classes”. This principle ensures that any class that is the child of a parent class should be usable in place of its parent class should be sable in place of its parent without any unexpected behavior.
  • Intterface Segregation Principle: This principle is the first principle that applies to Interfaces instead of classes in SOLID and it is similar to the single responsibility principle. It states that “do not force any client to implement an interface which is irrelevant to them“. Here your main goal is to focus on avoiding fat interface and give preference to many small client-specific interfaces. You should prefer many client interfaces rather than one general interface and each interface should have a specific responsibility.
  • Dependency Inversion Principle: Before we discuss this topic keep in mind that Dependency Inversion and Dependency Injection both are different concepts. Most people get confused about it and consider both are the same. Now two key points are here to keep in mind about this principle.
  • High-level modules/classes should not depend on low-level modules/classes. Both should depend upon abstractions.
  • Abstractions should not depend upon details. Details should depend upon abstractions.

I chose this topic because, after learning a little more about design patterns, front end, back end, I was curious to learn about SOLID principles and, also I wanted to understand more about it and how it reinforces the need for design patterns in Software.

SOLID Principle in Programming: Understand With Real Life Examples – GeeksforGeeks

From the blog CS@Worcester – Gracia's Blog (Computer Science Major) by gkitenge and used with permission of the author. All other rights reserved by the author.

Web Development/Front end vs Back end

What is a Web Development?

Web development, at its most basic, is developing a website for the internet. Web development generally refers to the more non-design aspect of a website, which includes using programming, markup, and scripting languages to create features and functionality. Developers focus on the technical part of building a website, such as constructing the layout, programming, and integrating applications and graphics.

What types of Web Development are there?

The front end, back end, and full stack web development are three separate career paths that can sometimes feel muddied in the technology space. Front end developers help build what users interact with and see, back end developers are focused on data, modeling, and the back end of a website. A full stack developer does some or all of the above.

What is a Front End Developer?

Front end development is the part of web development that codes and creates front-end elements of a website, which are features that are directly viewable and accessible by the end-user or client. A front end developer is responsible for everything we see and works to enhance the user experience to ensure it is seamless.

What are some skills required for Front End Developers?

  • A good gasp of front end programming languages
  • The ability to create a responsive design
  • A knowledge of testing and debugging
  • An understanding of front end developmemt tools and features like automation, content management systems, version control systems, and frameworks.

What is a Back End Developer?

Back end development is aptly named for web development that occurs at the back end of programs. Back end developers write codes to help a database and application communicate. Essentially, a back end developer handles what we don’t see; they are in charge of the back end of a website, which includes servers, databases, and applications.

What are some skills required for Back End Developers?

  • Database management
  • Framework utilization
  • Programming
  • Knowledge of accessibility and security compliance

Differences between front end and back end.

Front end and back-end development are quite different from each other, but still, they are two aspects of the same situation. The front end is what users see and interact with and the back end is how everything works. The visual aspects of the website that can be seen and experienced by users are the front end. On the other hand, everything that happens in the background can be attributed to the back end.

Languages used for the front end are HTML, CSS, JavaScript while those used for the back end include Java, Ruby, Python, .Net.

I chose this topic because learning about front end and back end development is really important. As a computer science major with a double concentration in software development and data analytics, this is important information I need to know in order to become a good programmer.

Front End vs Back End Development: What Is the Difference? (switchup.org)

Frontend vs Backend – GeeksforGeeks

From the blog CS@Worcester – Gracia's Blog (Computer Science Major) by gkitenge and used with permission of the author. All other rights reserved by the author.

Software Architecture

I was curious to learn more about software architecture and, based on the article “Software Intelligence for Digital Leaders” I understood what software architecture is. Much of what we do on a daily basis, from using a cell phone to clocking into sending an email depends on the software architecture of the systems that we use. Without software architecture, so much of what we know and use would not be possible, but what is it?

Software architecture is what makes it possible for innovation within an organization. It’s simply the organization of a system and this organization includes all components, how they interact with each other, the environment where they operate, and the principles used to design the software.

Software architecture is a blueprint for both the system and the project. It defines the work assignments that must be carried out by design and implementation teams. The architecture is the primary carrier of system qualities such as scalability, performance, modifiability, security, and cost reduction, none of which can be achieved without a unifying architectural vision.

Some benefits of Software Architecture

Software architecture is extremely important for a software project. Let’s see some benefits of software architecture that will tell us more about how it can help us in our project and why we should invest in good software architecture.

Identifies areas for potential cost savings. An architecture helps an organization to analyze its current IT and identify areas where changes could lead to cost savings.

It creates a solid foundation for the software project

Makes your platform scalable

Increases performance of the platform

Reduces costs, avoids codes duplicity

Implementing a vision. Looking at the architecture is an effective way to view the overall state of IT and to develop a vision of where the organization needs to or wants to go with its IT structure.

Better code maintainability. It is easier to maintain existing software, as the structure of the code is visible and known, so it’s easier to find bugs and anomalies.

Enables quicker changes in IT Systems. There is increased demand for systems to change quickly to meet rapidly evolving business needs, legislative requirements, etc.

Increases quality of the platform

Helps manage complexity

Makes the platform faster.

Higher adaptability. New technical features, such a different front ends, or adding a business rule engine is easier to achieve, as your software architecture creates a clear separation of concerns.

It helps in risk management. Helps to reduce risks and chances of failure.

Reduces its time to market, reduces development time.

Prioritize conflicting goals. It facilitates communication with stakeholders, contributing to a system that better fulfills their needs.

I talked about software architecture because as a computer science major interested in software, learning its importance is really vital and necessary. Software is important for creating projects and maintaining them, which is a huge responsibility.

To sum up, software architecture dictates technical standards, including software coding standings, tools, and platforms. It gives the right technical solutions to ensure your success.

What Is Software Architecture – Examples, Tools, & Design | CAST (castsoftware.com)

15 benefits of software architecture you should know (apiumhub.com)

From the blog CS@Worcester – Gracia's Blog (Computer Science Major) by gkitenge and used with permission of the author. All other rights reserved by the author.

API in Software

This week in class, we worked on API and did some activities on it. Was my first time trying, and I was interested in learning more about it because I have heard about API but never tried to dig more into it. Now that we did it in class, I was interested in doing some research and learning why API is important and needed.

What is an API?

API (Application Programming Interface) is a software interface that allows two applications to interact with each other without user intervention. it’s a collection of software functions and procedures. In simple terms, API means a simple code that can be accessed and executed; a code that helps two different software to communicate and exchange data with each other.

How does API work?

Now that we know the importance of API, let’s see how it works by giving an example. You’re searching for a hotel room from an online travel booking site. Using the site’s online form, you select the city you want to stay in, check-in and check-out dates, number of guests, and number of rooms. Then you click “search.” As you may know, the travel site aggregates information from many different hotels. When you click “search,” the site then interacts with each hotel’s API, which delivers results for available rooms that meet your criteria. This can all happen within seconds because of an API, which acts like a messenger that runs back and forth between applications, databases, and devices.

What does API do?

APIs also facilitate calls to a server, but they execute it more simply. They connect the web, allowing developers, applications, and sites to tap into databases and services (or, assets)—much like open-source software. APIs do this by acting like a universal converter plug offering a standard set of instructions.

Why are APIs important?

Without APIs in our tool belt, most software couldn’t exist. It’s not just access to the data we need, but it’s also the mechanics of many other APIs that we depend on to make software go. For maps, there is the Google Maps API. Amazon has an API that lets you tap into their inventory of products. There is Twilio for sending MMS campaigns, and Yelp for finding places to eat. So there is an API for just about anything you can think of, around 20,000 that we know of as reported by ProgrammableWeb.

I chose to talk about this topic because, as a computer science major, knowing the importance of API is vital. We can understand that API is used in our everyday lives and plays a big role in software development. I cannot wait to do more activities in class using API but also personal exercises to get familiar with it.

Intro to APIs: What Are They & What Do They Do? (upwork.com)

What is an API? Full Form, Meaning, Definition, Types & Example (guru99.com)

From the blog CS@Worcester – Gracia's Blog (Computer Science Major) by gkitenge and used with permission of the author. All other rights reserved by the author.