• No results found

AutoPacker - An open-source project

N/A
N/A
Protected

Academic year: 2022

Share "AutoPacker - An open-source project"

Copied!
59
0
0

Laster.... (Se fulltekst nå)

Fulltekst

(1)

Bachelor’s thesis

AutoPacker - An open-source project

May 2021

NTNU

Norwegian University of Science and Technology

Faculty of Information Technology and Electrical Engineering Department of Computer Science

(2)

2021

(3)
(4)
(5)

Bachelor’s thesis

AutoPacker - An open-source project

May 2021

NTNU

Norwegian University of Science and Technology

Faculty of Information Technology and Electrical Engineering Department of Computer Science

(6)
(7)

Obligatorisk egenerklæring/gruppeerklæring

Den enkelte student er selv ansvarlig for å sette seg inn i hva som er lovlige hjelpemidler, retningslinjer for bruk av disse og regler om kildebruk. Erklæringen skal bevisstgjøre studentene på deres ansvar og hvilke konsekvenser fusk kan medføre. Manglende erklæring fritar ikke studentene fra sitt ansvar.

Du/dere fyller ut erklæringen ved å klikke i ruten til høyre for den enkelte del 1-6:

1. Jeg/vi erklærer herved at min/vår besvarelse er mitt/vårt eget arbeid, og at jeg/vi ikke har brukt andre kilder eller har mottatt annen hjelp enn det som er nevnt i besvarelsen.

2. Jeg/vi erklærer videre at denne besvarelsen:

ikke har vært brukt til annen eksamen ved annen

avdeling/universitet/høgskole innenlands eller utenlands.

ikke refererer til andres arbeid uten at det er oppgitt.

ikke refererer til eget tidligere arbeid uten at det er oppgitt.

har alle referansene oppgitt i litteraturlisten.

ikke er en kopi, duplikat eller avskrift av andres arbeid eller besvarelse.

3. Jeg/vi er kjent med at brudd på ovennevnte er å betrakte som fusk og kan medføre annullering av eksamen og utestengelse fra universiteter og høgskoler i Norge, jf. Universitets- og høgskoleloven §§4-7 og 4-8 og Forskrift om eksamen §§14 og 15.

4. Jeg/vi er kjent med at alle innleverte oppgaver kan bli plagiatkontrollert i Ephorus, se Retningslinjer for elektronisk innlevering og publisering av studiepoenggivende studentoppgaver

5. Jeg/vi er kjent med at høgskolen vil behandle alle saker hvor det forligger mistanke om fusk etter høgskolens studieforskrift §31

6. Jeg/vi har satt oss inn i regler og retningslinjer i bruk av kilder og referanser på biblioteket sine nettsider

(8)

Bachelor Thesis Page II

Publiseringsavtale

Studiepoeng: 20

Veileder: Girts Strazdins

Fullmakt til elektronisk publisering av oppgaven

Forfatter(ne) har opphavsrett til oppgaven. Det betyr blant annet enerett til å gjøre verket tilgjengelig for allmennheten (Åndsverkloven §2).

Alle oppgaver som fyller kriteriene vil bli registrert og publisert i Brage HiM med forfatter(ne)s godkjennelse.

Oppgaver som er unntatt offentlighet eller båndlagt vil ikke bli publisert.

Jeg/vi gir herved NTNU i Ålesund en vederlagsfri rett til å

gjøre oppgaven tilgjengelig for elektronisk publisering: ja nei

Er oppgaven båndlagt (konfidensiell)? ja nei

(Båndleggingsavtale må fylles ut) - Hvis ja:

Kan oppgaven publiseres når båndleggingsperioden er over? ja nei

Er oppgaven unntatt offentlighet? ja nei

(inneholder taushetsbelagt informasjon. Jfr. Offl. §13/Fvl. §13) Dato: 20.05.2021

(9)

Preface

In this thesis described AutoPacker as an open-source project, which contain the

experiences of working in an open-source project, the research needed to enter an already established project and the development that goes with it. The project initially started in 2020 where the foundation to the project lies.

This thesis is written at NTNU Ålesund as part of a requirement fulfil the requirement for a computer engineering bachelor’s degree.

(10)

Bachelor Thesis Page IV

Abstract

AutoPacker is a program that configure a virtualized environment and make you able to setup this locally or a remote server. These projects can be submitted to an organization, which can contain many projects, an organization can be created by anyone. The creator of an organization can chooses who get to join and submit something to the organization.

Anyone in an organization can utilize the projects that are already submitted, and they can add it to their own server while also control what the users roles are or if they are to be removed from the organization.

(11)

Acknowledgement

I want to thank Girts Strazdins for the help as supervisor on this project

I also want to give a thanks to Aron Mar Nicholasson form Avento for helping as mentor for this project.

(12)

Bachelor Thesis Page VI

Contents

Obligatorisk egenerklæring/gruppeerklæring ... I Publiseringsavtale ... II Preface ... III Abstract ... IV Acknowledgement... V Contents ... VI Terminology ... VIII Figures ... X

1. Introduction ... 1

1.1 Background ... 1

1.1 Scope and objective ... 1

2. Theoretical Basis ... 1

2.1 Privacy ... 1

2.1.1 GDPR ... 1

2.1.2 Personal Data Act ... 1

2.2 Security ... 2

2.2.1 Hash ... 2

2.2.2 Web Token ... 2

2.2.3 What is HTTPS and common attacks?... 2

2.3 REST API ... 3

2.3.1 What is REST? ... 3

2.4 Concepts in programming ... 4

2.4.1 Cohesion and Coupling ... 4

2.4.2 Object Oriented Programming ... 4

2.4.3 Version Control Systems ... 4

2.5 Programming ... 5

2.5.1 IDE ... 5

2.5.2 Java ... 6

2.5.3 Spring ... 6

2.5.4 SQL ... 6

2.5.5 Maven ... 6

2.5.6 Yarn ... 6

2.5.7 Continuous Integration ... 6

2.5.8 Continuous Deployment ... 7

2.6 Docker ... 8

2.6.1 Containers ... 8

2.6.2 Docker Mount and Registry ... 8

2.7 Management ... 9

2.7.1 Agile ... 9

2.7.2 Scrum ... 9

2.8 Open-Source ... 10

2.8.1 What is open source? ... 10

2.8.2 Differences ... 10

3. Material and Methods ... 11

3.1 Project Organization ... 11

3.1.1 The Team ... 11

(13)

3.1.2 Scrum Workflow ... 11

3.1.3 Communication ... 11

3.1.4 Project Management... 11

3.2 Programming ... 11

3.2.1 JavaScript ... 11

3.2.2 Java ... 12

3.3 Environment & Frameworks ... 12

3.3.1 GitHub ... 12

3.3.2 MySQL ... 12

3.3.3 IntelliJ ... 12

3.3.4 Spring Boot ... 12

3.3.5 Postman ... 13

3.3.6 React ... 13

3.4 Open-Source in GitHub ... 14

3.4.1 What is an issue? ... 14

3.4.2 How to write an issue? ... 15

4. Results ... 16

4.1 Contribution to open source ... 16

4.1.1 Process of contributing ... 16

4.1.2 Issues ... 16

4.1.2 Work done ... 17

4.2 System Architecture ... 18

4.2.1 System design ... 18

4.3 Database ... 19

4.3.1 User Table ... 19

4.3.2 Organization Table ... 19

4.3.3 Org_member Table ... 20

4.3.4 Member_applications Table ... 20

4.3.5 Project Table ... 20

4.3.6 Module Table ... 20

4.4 Backend ... 21

4.4.1 Postman ... 21

4.4.2 Security Design ... 22

4.4.3 Organization Controller Layer ... 23

4.4.4 Organization Service Layer (Business logic) ... 23

4.4.5 Organization Repository Layer ... 24

4.5 Front end ... 25

4.5.1 Graphical Design ... 25

4.5.2 API Communication ... 26

4.5.3 Organization Views ... 27

5. Reflection ... 37

5.1 Scrum Workflow ... 37

5.2 Front-end ... 37

5.3 Back end ... 38

5.4 Code Quality ... 38

5.5 Limitations ... 39

6. Conclusion ... 40

Bibliography ... 41

(14)

Bachelor Thesis Page VIII

Terminology

Agile - Agile Development is a way of working in iterations, where each iteration is a set period between 1 to 4. In the end each iteration you have a meeting about this iteration and what to do in the next one.

API - Application Programming Interface, is a way to communicate and extract data.

Back-end – Is the part of the system the user does not see, but it is code that handle logic, user’s data and how/where to save it.

CD - Continuous deployment is a way to deploy Docker – Is a program that handles docker containers

Docker Container – Docker container is an instance of a docker image.

Docker Image – Is an executable package, this can be any software.

Front-end – Is the part of the program the users can directly interact with.

GDPR - General Data Protection Regulation, new rules for handling user data that came in 2018.

GUI - Graphical User Interface, how the softer look like

HTML - Hypertext Markup Language, is the language most websites are structured upon.

HTTP - Hypertext Transfer Protocol, is a protocol to share webpages

HTTPS - Hypertext Transfer Protocol Secure, is a further develop HTTP that is more secure so one can share sensitive data between client and server.

Issues – A issue can be a lot of different things, it is a work order on something that is categorized usually as a bug or an enhancement for the project.

JDK - Java Development Kit, a tool to develop Java applications.

JSON - JavaScript Object Notation, is a minimal language to share information between client and server.

JWT - JSON Web Token, is a way to keep hold of user’s settings and how long they should be logged in.

Open Source – A project where whomever can work on and improved since the code is open to the public.

Server – A computer that give information to other computers

Sprint – A limited period usually ranging from a week to a month where you work on specific task that you laid out for that sprint.

(15)

SQL - Structured Query Language, a programmable language for speaking with databases.

SSH - Secure Shell, is a network protocol that is making it secure to communicate without someone listening in.

SSL - Secure Sockets Layer, is a certificate for

TCP - Transmission Control Protocol, is one of the common ways servers can talk to each other

(16)

Bachelor Thesis Page X

Figures

Figure 1: Hashing explanation [7] ... 2

Figure 2: Version Control [19] ... 5

Figure 3: Syntax highlight side to side [21] ... 5

Figure 4: CI Cycle Explanation [29] ... 7

Figure 5: Docker containers [33] ... 8

Figure 6: Scrum Process [39] ... 10

Figure 7: API explanation ... 13

Figure 8: Traditional Page vs SPA [54] ... 14

Figure 9: Issue, what is it?... 14

Figure 10: How to write an issue ... 15

Figure 11: Issue list ... 16

Figure 12: Total closed issues ... 16

Figure 13: Example issue ... 17

Figure 14: Work done during bachelor ... 17

Figure 15: System Design ... 18

Figure 16: Database overview ... 19

Figure 17: Postman test ... 21

Figure 18: Security in backend ... 22

Figure 19: Organization controller layer ... 23

Figure 20: Organization service layer ... 23

Figure 21: Repository Layer ... 24

Figure 22: Graphical design wireframe... 25

Figure 23: API Communication ... 26

Figure 24: Your organization ... 27

Figure 25: Create your own organization... 27

Figure 26: Organization dashboard ... 28

Figure 27: Accept project request ... 28

Figure 28: Admin edit project ... 29

Figure 29: Member overview ... 30

Figure 30: Member applications ... 30

Figure 31: Member application if accept ... 31

Figure 32: Role Control ... 31

Figure 33: Confirm roles ... 32

Figure 34: Confirm deletion ... 32

Figure 35: Submit project ... 33

Figure 36: Choosing the project ... 33

Figure 37: Submission list ... 34

Figure 38: Delete project request ... 34

Figure 39: Edit project request ... 35

Figure 40: Organization projects ... 36

Figure 41: Add project to server ... 36

Figure 42: Webapp Source / API Source ... 38

(17)

1. Introduction

1.1 Background

The reason why I choose this task is because I wanted to work in an open-source

environment, and I knew about the project already had knowledge about how it operated. I was presented with a handful of roads to go down, where the tool was lacking features, my mentor wanted to improve upon. In the end I settled on working with the organization part of project where there were limited features to

1.1 Scope and objective

The scope of this is to be able to enter an open-source project and research their technology so it can be further developing the product in the organization area.

Document how to work in an open-source project, what is the challenges and how is what is the procedure working with open-source.

In the end of the project a user should be able to create their own organization, control roles member has, accept/decline new member, accept/decline project submissions and be able to use those submissions by any user of an organization and add it to your own server.

Main objects would be:

• Research the technologies tied to the project

• Research and document how it is to work in an open-source project

• To make organizations fully functional within AutoPacker so anyone can utilize it

2. Theoretical Basis

2.1 Privacy

2.1.1 GDPR

GDPR stands for General Data Protection Regulation and is a law became applicable 25th of May 2018 for the European Union. The goal for this regulation is to ensure protection for privacy and personal information to citizen within the EU. This enforces businesses to follow specific rules of how they should handle information and it gives more rights for the user what should happen with their data. A user could ask for a business to delete all their data and the business would have to due to the GDPR

Norway is not part of the EU but have embedded it into their Personal Data Act. [1] [2]

2.1.2 Personal Data Act

The Personal Data Act is a Norwegian law regarding handling, using and storing data.

This makes sure that citizens data is handle well and give them their right to privacy.

(18)

Bachelor Thesis Page 2 Norwegian citizens and businesses follow this specific law, but also the GDPR. [3]

[4]

2.2 Security

2.2.1 Hash

Hash is often used as a one-way operation method. It takes the raw data adding it to the hash function and give you a hash sum, this sum has is mainly to hide the original value you started with. Your hash sum is usually a fixed sum that changes when the data changes, just a just a little change in the data and you get a different result. As an example, if your password list is leaked for your website, the password is not clear text and if you used a good one-way hash function it is most likely the intruders cannot reverse it into the original value. [5] [6]

Figure 1: Hashing explanation [7]

2.2.2 Web Token

Web tokens are usually used for places you need to sign in and keep you sign in while you are on the page. It contains the user’s authentication values, but they are usually hashed to secure the users so if they land in someone else’s hands, it still will not compromise the user’s logins, however it still could be used to gain access of an account. [8]

JSON Web Token is one that is used a lot of instances where you need either

authorization or API calls. It is composed of what they call “Header”, “Payload” and

“Signature”. [9] [10]

• Headers contain the algorithm and what type of token it is

• Payloads contain the data, example: Username/Password for login

• Signatures contain verification for the integrity of the message

2.2.3 What is HTTPS and common attacks?

It stands for Hypertext Transfer Protocol Secure, that make you able to communicate on the internet without someone being able to listen in. This is done through a layer

(19)

that is called “Transport Layer Secure” with encrypt your data, so it is harder for someone to pick up the communication that goes between a client and a server. [11]

Some typical attacks that happen would be: [12]

Man in the Middle Attacks usually ends up in the secure TLS gets exploited and someone gets access to listen in to the data that gets sent and received. Worst case it ends up with the attacker modifying the information, so you receive or give away information that the attack wants you to send or see.

SQL Injection Is the form of using SQL queries where they are not intended. If your webpage has an unsecure text submit field there can be possible to send a SQL query to extract usernames or passwords.

Denial of service Attacks is carried out by a machine that try to send as many requests as it can to a server. If the server has no filter for the request, it might think all the request is valid request and try to handle all of them. If the server gets too many of these, it will eventually shut down due to

overworking itself. Meaning the request coming from computers that want to use the service will not get access.

Cross-Site Scripting happens when an attacker can inject a script into your website. The usage of this for the attacker can be different from case to case, but usually the scripts are used to capture user’s input. Like usernames, passwords, personal information, etc.

2.3 REST API

2.3.1 What is REST?

REST also known as RESTful API, stands for Representational State Transfer, which enable web services to interact. [13] [14]For the API to be considered RESTful however it needs to meet certain criteria:

Client-Server Architecture needs to be built up of server, clients and resources. To change anything, it needs to go through a HTTP request.

Stateless which means every request is separated and unconnected.

The API is not saving any prior or future calls and the calls coming in is not depending on another call to go through. All the session data is only locally on the client computer.

Cacheable data that can streamline and make the client to server interactions faster, this way the API do not need to recreate data every time a call is made.

Uniform interface, this includes various components:

o Resources that can be requested are identifiable

(20)

Bachelor Thesis Page 4 o Resources can be manipulated by the client

o Message’s clients receive are self-descriptive so client can understand the process

o Hypermedia, meaning a user can see all the actions they can do in a system

Layered system, the client should not know if they are connected directly or just intermediary to the API. If there are intermediary servers or services, they should not feel different than being connected directly.

2.4 Concepts in programming

2.4.1 Cohesion and Coupling

They are some key principals in Object Oriented Programming. [15]

Cohesion is referring to what a class should do. Low cohesion means that the class is unfocused on what it should do and have various actions. High cohesion means the class is focused on what its purpose is and all the methods within the class fits what the intention to the class.

Coupling is referring how tightly the different classes are together. High coupling is not what you want, that means that the classes are highly dependent on each other to work. If you change one class, it might break the whole system. Low coupling is the opposite where they depend less on each other and make it easy to change one file, so you do not need to change the whole system

Usually what you would want in a system is high cohesion and low coupling

2.4.2 Object Oriented Programming

Is the way of constructing objects which is an instance of a class. There are many popular program languages built on this foundation of thinking, some of them are:

• Java

• C++

• Phyton

The classes will be defining what type of attributes any object can have, but the attribute value is specific to the object itself. Let us say you have a class car, where one of the attributes to the class is color. If you have multiple objects (instances), one car can have the color attribute white and the other black. So, it is operated as two different entities, as a black and a white car [16].

2.4.3 Version Control Systems

Version control is a system which is made to keep track of all the changes made to your code. It keeps a record of any changes made so you can always reference back to it, while making sure that what changes was made by who. Version control also makes it easy for developers to work together on a project, even within the same file. If both developers are submitting their changes and there are any conflicts, the control helps to ensure it can be solved by the developer in terms of what to keep or what to not keep [17, 18]

(21)

Figure 2: Version Control [19]

Above you can see the way the version control is using the master branch, copies it from that and then develops further until the developer are done. Then the changes are merged back into master for a new version of the project to emerge.

2.5 Programming

2.5.1 IDE

An IDE stands for integrated development environment and it is essentially a text editor, with extra set of features specific for programming [20]. The main features would be:

Auto Completion on what you are writing, if you are trying to do a function call the IDE would know what you are trying to write before you have. So, you can work faster with the Auto completion of the sentence.

Syntax Highlighting each IDE is often built for one or more languages and will detect which language it is and give a specific color to certain part of the code to make it more readable. As an example, you can find on the picture under, part of the project. On the left side there is a file with syntax highlight and right side without.

Figure 3: Syntax highlight side to side [21]

Building & Compiling your programs for you, when you are done with the code it is just text. Before it gets built and compiled of the IDE and made into an

executable program.

Debugging is one of the most powerful tools in the whole program. Debugging is a way of either showing you where you have error in your code or follow the data that goes through your system to figure out where a problem might arise.

(22)

Bachelor Thesis Page 6 2.5.2 Java

Java is object-oriented program language, where everything is built up on all the attributes for a given object is inherent form the class. Java can run on all devices that support JVM, which stands for Java Virtual Machine. When you want to start any Java program, it is started within the JVM which runs on your operating system. This ensure that Java can run on most common systems today, the JVM can varies in different programs. But most are forked off the OpenJDK’s Hotspot JVM. One of the strongest points within the JVM is the garbage collector, which makes it possible not worry of an overflooded ram. When you make instances of different classes it will take up space, but when you close those instances the garbage collector will make it [22, 23]

2.5.3 Spring

Spring is a framework is a controller container which have most common API tools, it is built for the Java platform. It contains Spring Boot that is minimal tool that is friendly for people to setup and contain most tools you would need for setting up your own API for a webservice.

2.5.4 SQL

Structured Query Language or SQL for short is the common standard for interacting with databases. It is mainly used for creating, deleting or gathering data in tables and have been marked as an ISO standard. [24, 25]

Common syntax usages:

Use – To set the database you would use to find a table. In case there are multiple databases.

Select – Which help you select what data be returned from a query.

From – Defines which tables this data comes from.

Where – Gives the query a specific requirement for what data it want back.

Update – Tell the query to modify already existing data.

Set – Helps to select which columns to update.

Delete – Tell the query which tables to delete.

2.5.5 Maven

Maven is a powerful managing tool for projects, it works around POM which stand for Project Object Model. That means everything you need for a project you will add to a XML file, where you tell the Maven what version and dependencies your program needs, and Maven gather those programs automatically for you and help build the project files for mainly Java applications. [26]

2.5.6 Yarn

Yarn is one of the most popular package manager tools, it saves what Yarn calls a manifest

“package.json” which contains all the versions and dependencies for JavaScript applications. [27]

2.5.7 Continuous Integration

CI or Continues Integration refers to the automatic implementation of changes that happens to the repository. The reason this have become a popular way of programming is that the changes get automatically built and tested. So, if you have problems in your code,

(23)

they will be detected faster than if you tested the system after many iterations of updates.

Then doing it manually which takes way longer than an automatic system. [28]

Figure 4: CI Cycle Explanation [29]

2.5.8 Continuous Deployment

CD or Continuous Deployment differ from CI in the way it automatically deploys the software after it is built. Then in the test environment bugs and other problems become apparent. It is not the same as CI, but in practice it achieves the same goal, but in another way of doing so. [30]

(24)

Bachelor Thesis Page 8

2.6 Docker

Docker have become widely popular since when it started up back in 2014, the reason for this popularity is the virtualization technology. It the container structure that docker is building is making it faster than regular VM (Virtual machine) [31, 32]

2.6.1 Containers

The reason containers are faster than regular VM is due to how it is layered, where you would make all the containers being able to access the same bins or libraries. This way of structuring as well cut out the middleman of having a hypervisor that connect to a guest OS for each virtualization like in the picture under. This way it become a more portable platform where containers can be independent of the platform and will not experience problems that are OS specific. [31]

Figure 5: Docker containers [33]

2.6.2 Docker Mount and Registry

Docker volume is usually the preferable way of mounting docker containers to your computer, you can choose an option called blind mount but that is an older way of structuring docker components.

The difference is that in blind mounts, a directory on the computer will be used as the placement and the absolute path of where the containers are mounted will be used. [34]

Where volumes would create another directory within the docker environment and will only behave within that. [35]

(25)

Within these dictionaries the docker images are executed, but to what images are stored where you use Docker Registry, which is a stateless, scalable, distribution software. This will control where everything gets stored, making you get more control of your own distribution pipeline and make storage and distribution tied into your workflow. For every time new code is pushed, this registry would register this as a new commit and keep a record of the changes. [36]

2.7 Management

2.7.1 Agile

In software development, Agile workflow means that you work with the costumer and meet every few weeks. A meeting that is often referred to as an iteration, where they go through the same phases. There are 6 in total:

• Requirements

• Design

• Development

• Testing

• Deployment

• Review

All this happens during the iteration, the “Requirements” and the “Review” is the meeting in the beginning/end of an iteration. Agile rely on not making too big steps, due to the nature of the methodology which want to be always done with what is worked on during an iteration. So next iteration you can keep developing on top of what you have already produced. [37, 38]

2.7.2 Scrum

Scrum utilizes Agile and builds on it, everyone to four weeks you make a backlog of problems or new features you should work on during the next sprint. Usually, you utilize a scrum board where you have all your backlog collected in different categories. Were you place new backlog in a “To do” category, when you start working on a specific backlog you move it to different categories to show where you are with the progress of the backlog.

The type of categories is often up to the group, but usually it can be setup like this:

• To do

• In progress

• Done – Sprint 1, 2, 3. (And further depending on how long the project is) This way you can keep track on what is in progress, what is done and what you got left to do. One can add different subcategories on the way depending on the teams need, as example:

• “Verification” if your group verifies updates.

• “Testing” if you test for every update.

• “Deployment” if the updates are not going automatically and you have a dedicated person to push it.

(26)

Bachelor Thesis Page 10

Figure 6: Scrum Process [39]

2.8 Open-Source

2.8.1 What is open source?

Open-source development refer to the open access to the source code of a software, where modification or re-distribution of the software goes under an open-source license. This means that people or companies can modify and improve the code for their own needs.

[40] [41]

2.8.2 Differences

The main difference between an in-house team and open source comes down to how it is operated. The development process may vary, but it looks like this usually:

• Fork: Implies the code is copied for inspection by an interested individual.

• Modify: The person having interests in the project can choose to modify the source doe due to the open-source license that allow them.

• Release: After it is modified this costume software that was altered can be shared by the individual. Often back to the same community as their own contribution, when it is reviewed it is merged back to the code based it was forked from.

This loop of fork, modify, release can be reproduced anyone that want to work with a project. [42, 43]

(27)

3. Material and Methods

3.1 Project Organization

3.1.1 The Team

The team is based on myself Eirik Thue that is writing this bachelor thesis, one supervisor Girts Strazdins and one mentor Aron Mar Nicholasson.

3.1.2 Scrum Workflow

The projects workflow that we choose in the beginning of the project is Scrum form of agile development. We decided 2 weeks per sprint and from there adjusted the workload based on what needed to be done as next step in the progress of moving into the project.

To track issues, we used GitHub’s project feature, where you can have a scrum board with your issues and expanding the scrum board as you go.

3.1.3 Communication

The groups communication was mainly based on Discord or GitHub Discussions for general topics around the project or sharing resources. Meetings were done though

Microsoft Teams on the same day every two weeks for an hour to decide what to work on next sprint.

3.1.4 Project Management

GitHub Projects – I have used GitHub projects to keep track of issues during each sprint and organizing what have been done.

Confluence – Confluence gives a lot of different templates and storage options for

wireframes, diagrams, etc. Most type of documents and I have used confluence to store it.

Draw.io – Draw.io is an easy and free to use wireframe program that have been used to make the different wireframes for each individual changes of the website.

3.2 Programming

Due to the project were already existing before the work started on it, it is only natural to keep using the same languages and frameworks that already is in place.

3.2.1 JavaScript

React.js is the language most of the front-end development for this project is based on and I am further developing within the same language. React is becoming very popular within web development, making it only natural to keep using this language.

(28)

Bachelor Thesis Page 12 3.2.2 Java

Java programming in this project is on the back end, it was built around Spring Boot framework which is the API solution that is being used for this project.

3.3 Environment & Frameworks

3.3.1 GitHub

GitHub is a version control tool where a user or a team of users can build a repository, in the repository the code will be uploaded and altered over time. This can be done in a private or a public repository, since this is an open-source project the repository for this project is open. When the repository is open to anyone, there will be some hierarchy where when changes are made, the moderators of the repository can take the changes in effect.

You can add a CI/CD solution as well to GitHub, making it able to deploy any changes that is made directly. [44]

3.3.2 MySQL

MySQL is an open-source RDBMS for the ones that do not like acronyms, that stands for relational database management system. It is one of the most common and used database systems out there. [45, 46, 47]

3.3.3 IntelliJ

IntelliJ was used for both back & front-end development in this project, it is a JetBrains IDE that support various languages like Java and JS, making it a solid choice for further developing this project. [48]

3.3.4 Spring Boot

Spring Boot is an open-source framework that uses “Inversion of control” that helps the developer early on to configure the business logic for the API. [49] The way of setting up spring boot is often done in a “Controller”, “Service” and “Repository” partition. [50]

It would be used in this way:

Controller class is the first stop for data when the API is called. Here you will obtain the data from the call, authenticate user that it is allowed and have quality testing (Checking if the call is empty). If the API call is valid the data is sent to the service class.

Service class is the business logic of the system, where the data is handled.

Depending on the API call, it can be altering existing data, adding new data or deleting data. Usually, this class interact a lot with different repository classes.

Repository is an interface that is tasked with talking to the database, here you either save or gather information to or from the database.

(29)

Figure 7: API explanation

3.3.5 Postman

Postman is a powerful API tool, it helps the developer testing or documenting their API when they are developing them. The tool makes you able to make HTML request with JSON bodies, making you able to use the APIs without going through the website and testing each API call. Instead, you pre-configure all the calls with the necessary JSON body and authorization, when this is done you can just run the test every time you want to try if the API works. [51, 52]

3.3.6 React

React is web framework that based to make single page applications (SPA), the way SPA works is different from traditional webpages. In traditional pages every time you do some sort of request, you will be refreshing the whole site and new content will be loaded in.

For react this work differently, react have a dynamic way of dealing with it where only the relevant content is updated. It gives you control over DOM elements; Therefore, you can control what is added to the page next. [53]

(30)

Bachelor Thesis Page 14

Figure 8: Traditional Page vs SPA [54]

React is buildup of what we call components, props and states. A component is a function that can be used anywhere, it is often just an empty shell before they get handed their props. Props stand for properties and will give component their data, this can be

transferred from component to component. Last we got state, which is what controls your components, where your components are and what they look like at any time. [55, 56]

3.4 Open-Source in GitHub

3.4.1 What is an issue?

When you are working in an open-source environment you might not have access directly to anyone that works beside you on the project. Giving you a great tool called issues, it is a backlog of any project. Any operation that is performed on a project is an issue, weather it is a bug or an enhancement to the project. In these issues you suggest improvements or problems/vulnerabilities with the current version of a software.

It gets sorted into a list of issues where anyone can contribute by commenting or even assign the issue to themselves and solve it. [57]

Figure 9: Issue, what is it?

(31)

3.4.2 How to write an issue?

When you have found a bug or something you think can be improved, the first thing you should do to improve the project is to write an issue. The way you do this in the best practice, is in the following fashion (Numbered picture to follow under) [57]:

1. Title: The title should be encapsulating the problem or the enhancement that needs to take place without having to delve into the issue in depth. A reader should be able to understand what it is about only from reading the title.

2. Description: Is the main body of an issue, here you will describe what the problem or enhancement is and in some cases suggestions on how to solve the problem if you know a way it can be solved. The description field in GitHub is an advanced text editor with markdown capabilities, where you can reference other issues, mentions users, make text fields or share pictures.

3. Assignees: Can be non or as many people you want to this issue. If none are selected, then it will be in a backlog for a later date when someone else picks it up.

4. Labels: Is custom made label you add your issue, they are usually specific to the type of project you are working on to signal what type of issue and where in the project is this issue located. However, sticking to some generic ones are useful as well. Like in the figure 10 under, you will see we have priority

“Low”, we also have one for “Medium” and “High” as well to distinguish what need faster attention than others.

5. Projects: Projects are not the same as a milestone, where they do the same thing of being a collection of issues. Projects will have a bigger scope than a milestone and containing many milestones within a project.

6. Milestone: Is used for corresponding to individual goals or features within a project. Where you have a collection of issues needed for fulfilled for that feature or goal to be done. You use milestones to track the progress.

7. Linked pull request: This is often added later when the job is performed, where you could look back to a pull request from the assignee on the issue. To see what was done and review the code for adjustments or giving feedback on the work that was done

Figure 10: How to write an issue

(32)

Bachelor Thesis Page 16

4. Results

4.1 Contribution to open source

4.1.1 Process of contributing

When it comes to process of contributing it start with looking at the product itself, while the most obvious implementations you would want to do is new features that can be added to make the product more versatile. But also bug and things that is not working should be made issues of, when a potential case appears one should make an issue on it.

4.1.2 Issues

During the project I created 43 issues regarding the project, this have been general bug fixes, but mainly focus on the organization part of the project where my main

responsibility lied.

Figure 11: Issue list

I have also closed 85 issues for the project during the whole bachelor period, this shows of course assigned issues that was given to me from other contributors. Not only the issues I was creating hence the bigger list of issues completed.

Figure 12: Total closed issues

Going from issues to implementations are not always straight forward, many occasions you would most likely add a type of wireframe to show the changes that are going to take place so if others are working on the same issue, you are. There will be no surprises of how thing will turn out, here is an example of that, I made a wireframe to this that can be found in appendix.

(33)

Figure 13: Example issue

4.1.2 Work done

According to GitHub I added 4778 and removed 1030 during this project, due to this being already an established project before I started to work on it. A lot of my work revolved around refactoring code that was already in place, making the numbers may be lower than a newly established project.

Figure 14: Work done during bachelor

(34)

Bachelor Thesis Page 18

4.2 System Architecture

4.2.1 System design

The general system designs of the system have become less complicated over time, when I started working on it was a microservice where we had a General, File, Organization and User API.

Figure 15: System Design

As you can see above the system have become way less complicated and straight forward in the path the data takes. We took all the microservice APIs and merged them to one, now we only have one back-end API we need to call. My focus was pivoting towards the organization part of the site, although I helped in the process of the merging of the APIs.

(35)

4.3 Database

Figure 16: Database overview

I will go over the ones I used in my project under.

4.3.1 User Table

• Id varchar (255): Primary Key. A unique value to identify the user

• Email varchar (255): Holds the users email that was used to registered on the page

• Image varchar (255): Hold the location of the user’s personal image

• Name varchar (255): Users real name

• System_role varchar (255): This is for if you are a system admin for the whole system or not, which would make it able to give you access to different part of the system a normal user should not use.

• Username varchar (255): User another unique

Not too many fields were change here but the system_role, it gave us greater control over who was an admin of the site so they could get greater access and made it easier to extinguish roles for the whole system and different organizations.

4.3.2 Organization Table

• Id varchar (255): Primary Key. A unique value to identify the organization

• Description varchar (255): Holds the description value to the organization

• Image varchar (255): Hold the location of the organization’s logo

• Name varchar (255): Name of the organization owner’s name

• URL varchar (255): Holds URL to relevant pages for the organization

• Owner_id varchar (255): Foreign key. Reference to org_member table

(36)

Bachelor Thesis Page 20 The biggest change to organization making the way of reusing the information from other tables to the base information for an organization.

4.3.3 Org_member Table

• Organization_id bigint(20): Primary Key / Foreign Key to organization table id.

• User_id varchar (255): Primary Key / Foreign Key to user table id.

• Role varchar (255): Holds the role within a given organization.

Org_member is a whole new table made entirely to hold the different roles different users have in different organizations.

4.3.4 Member_applications Table

• Id bigint (20): Primary Key. A unique value to identify the application.

• Comment varchar (255): Value containing the comment made for the application.

• Created date: The date of creation.

• Is_accepted bit (1): True / False statement if the member is accepted.

• Organization_id bigint (20): Foreign Key to organization table id.

• User_id varchar (255): Foreign Key to user table id.

Member applications is to see request for joining an organization.

4.3.5 Project Table

• Id varchar (255): Primary Key. A unique value to identify the project.

• Description varchar (255): Holds the description value to the project.

• Image varchar (255): Hold the location of a picture for the project.

• Is_private bit (1): True / False statement to hide or show the project.

• Last_updated datetime (6): Show date and time when the project was last updated.

• Location varchar (255): Shows where on server the project is located.

• Name varchar (255): Holds the value for the name of the project.

• Tags varchar (255): Holds the tags for the project.

• Website varchar (255): Holds any links connected to the project.

• Organization_id bigint (20): Foreign Key. Holds the id for the organization that owns the project.

• Owner_id varchar (255): Foreign Key. Holds the id for the user that owns the project.

Project table have changed a bit from the original where all project information is stored here and there are no individual table for organization project. This way we added organization_id as a foreign key so when a project is submitted to an organization, you can add an organization value to change ownership instead of a whole different table for the same information.

4.3.6 Module Table

• Id varchar (255): Primary Key. A unique value to identify the module.

• Description varchar (255): Holds the framework value to the module.

• Framework varchar (255): Holds the description value to the module.

(37)

• Image varchar (255): Hold the location of a picture for the module

• Language varchar (255): Holds the language value to the module.

• Location varchar (255): Holds the location to the module.

• Name varchar (255): Holds the name to the module.

• Port int (11): Holds the port for the module

• Version varchar (255): Holds version number of the module

• Project_id: Foreign Key. Value to the project id.

Module table stand mostly unchanged but are mentioned because it was needed to perform project in organizations.

4.4 Backend

The backend has a layered approach where controller will have to the verify that the information that is coming in is correct, the service layer handing the data and repository layer that saves it.

4.4.1 Postman

When I was building the backend, I was taking good usage out of Postman. It helps you with various task that you would have to have a front end to test. If we add the correct JSON body that the

Figure 17: Postman test

(38)

Bachelor Thesis Page 22 4.4.2 Security Design

The website got their security for the people logging in, but the organization part did not have any way of distinguishing any of their users. We made use of what user sent the http request, if the user is not there or the body is null it will be dismissed right out of the gate.

If the data is correct the formula will check if the user have admin access to the given organization.

This formula will be used for most the instances where organization members need admin access.

Figure 18: Security in backend

(39)

4.4.3 Organization Controller Layer

Figure 19: Organization controller layer

The way the controller is setup is that every resource contains their own mapping, as you can see above as an example. “API/organization/new-organization” is the path, this is true for all our resources. We use @Autowire for our controller to be able to collaborate with the other Repository/Service classes.

4.4.4 Organization Service Layer (Business logic)

Figure 20: Organization service layer

The business logic for all the different calls check, as in the case above if the organization is already created. If it is created, you would get a bad request, if it is not, you can go

(40)

Bachelor Thesis Page 24 ahead, and it gets created with the user as their admin. For all the request you send either a HttpStatus.OK or HttpStatus.Bad_Request back to the user depending on the outcome.

4.4.5 Organization Repository Layer

Figure 21: Repository Layer

For the repository layer we used JPA to save and retrieve the data from the database. We the reason JPA is that it gives us a way of writing our own queries when it comes to retrieving data, you can speed up the process with being able to be writing your own queries.

Giving us the control, we wanted of the data we retrieved from the database as you can see in the picture above.

(41)

4.5 Front end

4.5.1 Graphical Design

Figure 22: Graphical design wireframe

Due to the nature of the project being already being established, I continued with the same style of resources the project was founded up on which was Ant Design and heavily invested in React.js which will continue to be the main component in the front end of the website.

The design philosophy that is used, is taking the information and adding them to cards.

These cards contain a small amount of the information, usually the name, description and picture like in the wireframe above. This is the core design choices for displaying

information in quantity in Auto Packer.

(42)

Bachelor Thesis Page 26 4.5.2 API Communication

Figure 23: API Communication

Every API call in the front end is built up like in the picture above. This one is under a handle submit so it does not create a new organization without an event happens.

The request checks if the account that makes the request is verified, if it is verified it would build up the request. Giving it a method (In this case is a post), URL to contact the right API path, header taking a keycloak token for verification and the data.

If the creation of an organization is a success the user will be prompted with a success alert, otherwise a failed one based on what happen.

(43)

4.5.3 Organization Views 4.5.3.1 Your Organizations

Figure 24: Your organization

This is the dashboard where you will see all the organizations you are apart of, up to the right you will see that you can create a new organization based on your own needs.

4.5.3.2 Create Organization

Figure 25: Create your own organization

In this picture you can see the form you need to fill out create your own organization, name and visibility is mandatory while description and URL is optional if you want to provide any extra information.

(44)

Bachelor Thesis Page 28 4.5.3.3 Organization Dashboard

Figure 26: Organization dashboard

When you have joined or setup your own organization you will be greeted to your organization overview with the projects that is tied to your organization.

4.5.3.4 Accepting Project Request

Figure 27: Accept project request

Now if you have Admin access to the organization, you can see the Project Request part of the organization page. Here you can Accept/Decline different applications for people to submit their projects. When an application is accepted the organization is taking over the ownership of the project.

(45)

4.5.3.5 Edit Project Request (Admin View)

Figure 28: Admin edit project

If an admin wants to add or change the tags on a project to correct it. They can do it in the form above.

(46)

Bachelor Thesis Page 30 4.5.3.6 Member overview

Figure 29: Member overview

All the users in an organization can see what users there are and what roles they have within the organization.

4.5.3.7 Member applications

Figure 30: Member applications

If you have admin rights in the organization, you can see the applicants screen and decline or accept applicants. If you click accept you can see the picture below to confirm if you click decline you will not get a prompt.

(47)

4.5.3.8 Member application (If Accepted)

Figure 31: Member application if accept

If accept is clicked, you must confirm that you accept this person into your organization.

4.5.3.9 Role Control

Figure 32: Role Control

Role control can be only seen by admin in the organization, it is a view that makes it able to change roles or delete members from your organization.

(48)

Bachelor Thesis Page 32 4.5.3.10 Confirm role change

Figure 33: Confirm roles

If you want to change roles of a user you will get a prompt on accepting the change, so no mistakes are made.

4.5.3.11 Confirm deletion

Figure 34: Confirm deletion

When trying to delete someone from your organization you will get a prompt you have to confirm to avoid mistakenly delete someone from your organization.

(49)

4.5.3.12 Submitting project

Figure 35: Submit project

In this view you can select one of your personal projects and submit them to the

organization, this will remove your access to the project from personal view. But you can access it through the organization.

4.5.3.13 Choosing project

Figure 36: Choosing the project

Before submitting you must choose which project to submit, this list is gathered from your own personal project list.

(50)

Bachelor Thesis Page 34 4.5.3.14 Project submission list

Figure 37: Submission list

All the projects will be added to a submission list before they get submitted to the

organization. Here you can delete your request or change it if you forget to add something.

4.5.3.15 Delete project request

Figure 38: Delete project request

By selecting delete request you will get a prompt telling you to confirm the deletion.

(51)

4.5.3.16 Edit project request

Figure 39: Edit project request

If you want to edit your project information before it is submitted you have chance to do so, hit submit to save the changes.

(52)

Bachelor Thesis Page 36 4.5.3.17 Organization Projects

Figure 40: Organization projects

Organization projects can be viewed and added to your own server. If the project has no modules, you would get a warning and get told the project is empty.

4.5.3.18 Add project to server from organization

Figure 41: Add project to server

If the project has modules, you can click add to server, then you are presented with a list of the servers you have setup in the “Your Servers” sections of the website. When selecting the right server, it is getting added.

(53)

5. Reflection

5.1 Scrum Workflow

The beginning of the project went great; however, it took a turn for the worse with the constant COVID-19 restrictions and lockdowns. It started with stabile motivation and a willing to learn but being in the project alone made prioritization and strict workflow made the content produced less than what I would have liked.

All sprints were fulfilled to some capacity, but not having the social interactions as working in teams usually have was sorely missed.

5.2 Front-end

The section of further develop the application based on Ant Design, since it was already put in place for me and being the choice of the previous developers. I did not need to choose just further develop the product.

Overall, I am happy with how it turned out, there have been some changes to the UI.

Although the main changes have happened in back end rather to front-end, due to there was some proof of concept for the organization part already there. So minimal changes had to take place to make the organization fully working.

What we ended up with is an organization section for Auto Packer where anyone can create their own organization, they become admin of the organization when they create it and can invite anyone to join. You have control over who can join, you can accept or reject members based on what they ended up with in their request to join. When they joined you can control their role and if you want to delete them from the organization, in any case someone is not fit to be there or have left the organization. Projects have been fully integrated with organizations, so they have ownership, and any user can add the project from their organizations to their servers.

There are some lacking features that I wanted to implement but did not have time for like:

- Management tool for project

- Setting view for organization project - More flexible roles

- Communication outlet within the organization

With that in mind, what was done is aimed on a complete package that works, rather than too ambitious goals that is not achievable in the limited time of this project and I did not know much about React to begin with. Makes me think I got far in this project and delivered a working package.

(54)

Bachelor Thesis Page 38

5.3 Back end

Starting off the back end looked way different and probably what went through the most changes during this project. It was a microservice format for the APIs, so there were 4 different ones instead of one.

This made a lot of issues in relation between organization and project elements, the

roughest part with working on the back end would be when we decided to merge them, we were working on getting roles into organization where which was a big change in itself but straight after came the merge which made most of the API calls not work at all.

But that’s how development are, you might not be the one destroying, but you are still the one that are ensured to make it keep working.

The result with roles in the organization also made it safer with organizations being able to know what different users should have access to or not.

5.4 Code Quality

The code quality has most definitely hit and miss some places, thankfully we had a CI/CD system, we use SonarCloud to track bugs and duplications. It made it easier to fix mistakes that I had done in the code, however some code could be even more abstract and reuse of components.

Figure 42: Webapp Source / API Source

Coming blind into an already big and growing project, with 136 files for the front end and 68 files for the back end, it is a lot to learn and get used to. While you learning what goes where there could be some better reuse of code.

(55)

5.5 Limitations

The organization have minimal control over what to do with projects after they are

submitted, I wanted to implement more but did not have time to do that. My plan is to keep working on this project at least for the parts I feel I did not get to finish.

(56)

Bachelor Thesis Page 40

6. Conclusion

The purpose with this project was to give insight in some open-source project while also developing the organization part of the Auto Packer.

I feel I achieved a new version of Auto Packer that added value to the product, the application goes some new feature added to itself that was not there before. The

organization system can be taken in use right out of the box with little explanation for the for the different parts of the site.

This was a steep learning curves in terms of how many technologies were in used there but I am happy I was given the chance on this project. Leaving the project fully working and open for the next person that want to venture into the project was always the goal.

Personally, I really liked the project and I’m open to further expand it down the line. As I mentioned there was more I wanted to expand upon but this is it for this time.

(57)

Bibliography

[1] "General Data Protection Regulation," [Online]. Available: https://gdpr-info.eu/.

[2] Datatilsynet. [Online]. Available: https://www.datatilsynet.no/en/.

[3] A. Birkeland, 08 10 2020. [Online]. Available:

https://www.forskningsetikk.no/en/resources/the-research-ethics-library/legal-statutes-and- guidelines/the-personal-data-act/.

[4] J. Gisle, "SNL," 2018. [Online]. Available: https://snl.no/Lovdata.

[5] TechTarget. [Online]. Available: https://searchsqlserver.techtarget.com/definition/hashing.

[6] Commons, Creative, [Online]. Available: https://www.educative.io/edpresso/what-is- hashing.

[7] "Upload WIkimedia," [Online]. Available:

https://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Hash_function.svg/1200px- Hash_function.svg.png.

[8] "Wikipedia," [Online]. Available: https://en.wikipedia.org/wiki/Security_token.

[9] "JSON Web Tokens," [Online]. Available: https://jwt.io/introduction.

[10] K. Sandoval, "Nordic APIs," [Online]. Available: https://nordicapis.com/why-cant-i-just- send-jwts-without-oauth/.

[11] "Wikipedia," [Online]. Available: https://en.wikipedia.org/wiki/HTTPS.

[12] J. Melnick, "NetWrix," 15 05 2018. [Online]. Available:

https://blog.netwrix.com/2018/05/15/top-10-most-common-types-of-cyber-attacks/.

[13] RedHat, "RedHat," [Online]. Available: https://www.redhat.com/en/topics/api/what-is-a- rest-api.

[14] Wikipedia, "State Transfer," [Online]. Available:

https://en.wikipedia.org/wiki/Representational_state_transfer.

[15] JavaPoint, "JavaPoint," [Online]. Available: https://www.javatpoint.com/software- engineering-coupling-and-cohesion.

[16] E. Doherty, "Educative," [Online]. Available: https://www.educative.io/blog/object- oriented-programming.

[17] GitHub, [Online]. Available: https://git-scm.com/book/en/v2/Getting-Started-About- Version-Control.

[18] Wikipedia, "Version Control," [Online]. Available:

https://en.wikipedia.org/wiki/Version_control.

[19] Miro Medium, "https://miro.medium.com/," [Online]. Available:

https://miro.medium.com/max/2625/1*f-66KJ3QEhv9EUAHoweMVA.png.

[20] Codecademy, [Online]. Available: https://www.codecademy.com/articles/what-is-an-ide.

[21] E. Thue, Writer, Syntax Highlight side to side. [Performance].

[22] Wikipedia, "Java Program Language," [Online]. Available:

(58)

Bachelor Thesis Page 42 https://en.wikipedia.org/wiki/Java_(programming_language).

[23] M. Tyson, "Infoworld," [Online]. Available:

https://www.infoworld.com/article/3272244/what-is-the-jvm-introducing-the-java-virtual- machine.html.

[24] Wikipedia, "SQL," [Online]. Available: https://en.wikipedia.org/wiki/SQL.

[25] Khanacademy, [Online]. Available: https://www.khanacademy.org/computing/computer- programming/sql#sql-basics.

[26] The Apache Software Foundation, [Online]. Available: https://maven.apache.org/.

[27] Yarn, [Online]. Available: https://yarnpkg.com/.

[28] LF Charities Inc, "CloudBees," [Online]. Available:

https://www.cloudbees.com/continuous-delivery/continuous-integration.

[29] PagerDuty, [Online]. Available: https://www.pagerduty.com/wp- content/uploads/2020/01/continuous-integration-2.png.

[30] C. TOZZI, "DevOps.com," [Online]. Available: https://devops.com/continuous- integration-vs-continuous-delivery-theres-important-difference/.

[31] S. J. Vaughan-Nichols, "Zdnet," [Online]. Available: https://www.zdnet.com/article/what- is-docker-and-why-is-it-so-darn-popular/.

[32] Wikipedia, [Online]. Available: https://en.wikipedia.org/wiki/Docker_(software).

[33] Nuage Networks, [Online]. Available: https://www.nuagenetworks.net/wp- content/uploads/2020/06/slide1.jpg.

[34] Docker, "Blind Mounts," [Online]. Available: https://docs.docker.com/storage/bind- mounts/.

[35] Docker, "Volume Mount," [Online]. Available: https://docs.docker.com/storage/volumes/.

[36] Docker, "Docker Registry," [Online]. Available: https://docs.docker.com/registry.

[37] CPrime, [Online]. Available: https://www.cprime.com/resources/what-is-agile-what-is- scrum.

[38] Wikipedia, "Agile Software Developement," [Online]. Available:

https://en.wikipedia.org/wiki/Agile_software_development.

[39] A. Pawlicka, 23 Feb 2021. [Online]. Available: https://selleo.com/blog/agile-software- development-process-everything-you-need-to-know.

[40] Wikipedia, "Open Source License," [Online]. Available:

https://en.wikipedia.org/wiki/Open-source_license.

[41] Wikipedia, "Open Source," [Online]. Available:

https://en.wikipedia.org/wiki/Open_source.

[42] Wikipedia, "Open-Source Software," [Online]. Available:

https://en.wikipedia.org/wiki/Open-source_software.

[43] RedHat, "What is Open Source," [Online]. Available:

https://www.redhat.com/en/topics/open-source/what-is-open-source.

[44] Wikipedia, "GitHub," [Online]. Available: https://en.wikipedia.org/wiki/GitHub.

[45] MySQL , "MySQL Homepage," [Online]. Available: https://www.mysql.com/.

Referanser

RELATERTE DOKUMENTER

Proposition 5: If an organization finds a balance between the five value creation processes, it will develop strategic entrepreneurship within the organization and

The theory of convenience suggests that white-collar misconduct and crime occurs when there is a motive benefitting an individual or an organization, professional opportunity

3 The definition of total defence reads: “The modernised total defence concept encompasses mutual support and cooperation between the Norwegian Armed Forces and civil society in

15 In the temperate language of the UN mission in Afghanistan (UNAMA), the operations of NDS Special Forces, like those of the Khost Protection Force, “appear to be coordinated

• Open standards (OGC, W3C, ...), open-source tools, open services makes it possible to design an implement a whole range of novel location aware mobile applications. • Also

In a cloud context, this means moving across cloud vendors in a lean manner, customize cloud service, and all other costs related to supporting the cloud solution, including

The bothanical garden is one block away.At the same time the site is in a domestic situation with urban blocks of living in typical Oslo "bygårder" (urban blocks)

This project gives an example of an open gallery space in a park area created with the materials chosen for the project. It also show how an open glass wall can be used