# Introduction
{id: introduction}

## Overview of the Course
{id: overview-of-the-course}

* Goal: Become familiar with tools and processes used for software development both in the industry and in the academic institutions through contribution to open source projects.
* List of tools we learn, they are all used in both academy and corporation, they could be used better in both places.

* Overview of the [Open Source Development Course](https://osdc.code-maven.com/)

* git
* GitHub - Issues
* GitHub - Pull Request
* GitHub - Pages
* GitHub - Actions
* (GitLab)
* Markdown (journal, issues, etc.)
* Docker
* Programming languages: Python, JavaScript
* (Functional) Testing
* Static analysis
* Communication
* Slack

## Expected End results
{id: expected-end-results}

* Blog posts (journal entries)
* Personal web site
* Issues (tickets) opened on various projects
* Pull-Requests sent to various projects
* Development of a personal open source project

## Background of the lecturer
{id: background-of-the-lecturer}

* Self employed
* Training
* Introducing testing, CI etc. to teams in corporations.

## Planned Assignments
{id: planned-assignment}

* Will be in some public GitHub or GitLab repositories
* At the end of each assignment you'll write a report - a blog post / journal entry.
* You will add it to your personal JSON file and send a Pull-Request with the change. (We'll learn these soon)

* In order to create a substantial contribution to an established project you would probably have to spend 10s of hours learning about the project.
* Contributing to small, relatively new projects needs less time as there are a lot more "easy" things to do.
* Contributiong "meta" data, instructions on how to setup development environment needs almost no internal knowledge of the project.
* Setting up CI needs knowledge about the programming language and the tooling of that language, but not the specific project.
* Writing test requires you to know how to USE the project, but not necessarily the internals.

* We start with a few projects developed by the lecturer - that way you can get fast feedback.
* Then we'll have a few relatively simple changes to a number of open source projects.
* Then we'll have a few slightly more difficult contributions.

## Grades if relevant
{id: grades}

* Grades are based on the work done during the course.
* There is no end-project or exam at the end.

## Version Control
{id: version-control}

* Why use version control?
* Version 1, 2, 3 of some document
* Version by date

* Collaboration
* Two people cannot edit the same file at the same time
* Who changed what, when and why?


## Version Control in Wikipedia
{id: version-control-in-wikipedia}

* Wikipedia and the verion control there. Recommended to watch:

* [How to edit wikipedia](https://code-maven.com/edit-wikipedia)
* [How to edit wikipedia (in Hebrew)](https://he.code-maven.com/edit-wikipedia)
* [Como editar una página en Wikipedia](https://es.code-maven.com/editar-wikipedia)

## GitHub
{id: github}

* [GitHub](https://github.com/): process of contributing to an Open Source project using the GitHub web site.
* Creating a file and sending a Pull-Request.
* Use a the `cm-demo` user to add the json file of the user.
* Show how the CI fails when we add an incorrectly formatted file.
* What is [JSON](https://www.json.org/)?

* Show the Git repository of the project and the web site generated from it.

* https://kantoniko.com/

## Docker
{id: docker}

* [Docker](https://code-maven.com/slides/docker/)






