commit 55bbe8aaa2eb6770da44ce3d63ce196af196a67a Author: Glenn Y. Rolland Date: Wed Apr 8 20:29:10 2020 +0200 Initial import diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..47858c3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +\.vagrant +node_modules +_inspiration/ +*.pdf +*.epub +*.docx +/site diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6e04498 --- /dev/null +++ b/Makefile @@ -0,0 +1,39 @@ + +all: help + +prepare: + pipenv install + +watch: ## run development server + pipenv run honcho start + +watch-mkdocs: + pipenv run mkdocs serve --dev-addr 0.0.0.0:5001 + +serve: watch + +tocupdate: + while inotifywait -q -e move -e modify -e create -e attrib -e delete -r docs ; do \ + sleep 1 ; \ + pipenv run ./scripts/update-toc ; \ + done + +build:## build static pages + pipenv run mkdocs build + +install: ## deploy static pages to github + git push + pipenv run mkdocs gh-deploy + +help: ## print this help + @echo "Usage: make " + @echo "" + @echo "With one of following targets:" + @echo "" + @awk 'BEGIN {FS = ":.*?## "} \ + /^[a-zA-Z_-]+:.*?## / \ + { sub("\\\\n",sprintf("\n%22c"," "), $$2); \ + printf("\033[36m%-20s\033[0m %s\n", $$1, $$2); \ + }' $(MAKEFILE_LIST) + @echo "" + diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..8d58afa --- /dev/null +++ b/Pipfile @@ -0,0 +1,16 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] + +[packages] +mkdocs = "*" +mkdocs-material = "*" +mdx-truly-sane-lists = "*" +pymdown-extensions = "*" +honcho = "*" + +[requires] +python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..6387137 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,193 @@ +{ + "_meta": { + "hash": { + "sha256": "911097b967666f1a9771368e2f9bcd8868d417976b12d90ffdfc27ba6f3ae65e" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "click": { + "hashes": [ + "sha256:8a18b4ea89d8820c5d0c7da8a64b2c324b4dabb695804dbfea19b9be9d88c0cc", + "sha256:e345d143d80bf5ee7534056164e5e112ea5e22716bbb1ce727941f4c8b471b9a" + ], + "version": "==7.1.1" + }, + "future": { + "hashes": [ + "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d" + ], + "version": "==0.18.2" + }, + "honcho": { + "hashes": [ + "sha256:af5806bf13e3b20acdcb9ff8c0beb91eee6fe07393c3448dfad89667e6ac7576", + "sha256:c189402ad2e337777283c6a12d0f4f61dc6dd20c254c9a3a4af5087fc66cea6e" + ], + "index": "pypi", + "version": "==1.0.1" + }, + "jinja2": { + "hashes": [ + "sha256:93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250", + "sha256:b0eaf100007721b5c16c1fc1eecb87409464edc10469ddc9a22a27a99123be49" + ], + "version": "==2.11.1" + }, + "livereload": { + "hashes": [ + "sha256:78d55f2c268a8823ba499305dcac64e28ddeb9a92571e12d543cd304faf5817b", + "sha256:89254f78d7529d7ea0a3417d224c34287ebfe266b05e67e51facaf82c27f0f66" + ], + "version": "==2.6.1" + }, + "lunr": { + "extras": [ + "languages" + ], + "hashes": [ + "sha256:1208622930c915a07e6f8e8640474357826bad48534c0f57969b6fca9bffc88e", + "sha256:7be69d7186f65784a4f2adf81e5c58efd6a9921aa95966babcb1f2f2ada75c20" + ], + "version": "==0.5.6" + }, + "markdown": { + "hashes": [ + "sha256:90fee683eeabe1a92e149f7ba74e5ccdc81cd397bd6c516d93a8da0ef90b6902", + "sha256:e4795399163109457d4c5af2183fbe6b60326c17cfdf25ce6e7474c6624f725d" + ], + "version": "==3.2.1" + }, + "markupsafe": { + "hashes": [ + "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", + "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", + "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", + "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", + "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42", + "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", + "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", + "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", + "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", + "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", + "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", + "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b", + "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", + "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15", + "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", + "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", + "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", + "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", + "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", + "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", + "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", + "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", + "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", + "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", + "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", + "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", + "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", + "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", + "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", + "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", + "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2", + "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7", + "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be" + ], + "version": "==1.1.1" + }, + "mdx-truly-sane-lists": { + "hashes": [ + "sha256:4600ade0fbd452db8233e25d644b62f59b2798e40595ea2e1923e29bc40c5b98", + "sha256:cc8bfa00f331403504e12377a9c94e6b40fc7db031e283316baeeeeac68f1da9" + ], + "index": "pypi", + "version": "==1.2" + }, + "mkdocs": { + "hashes": [ + "sha256:1e385a70aea8a9dedb731aea4fd5f3704b2074801c4f96f06b2920999babda8a", + "sha256:9243291392f59e20b655e4e46210233453faf97787c2cf72176510e868143174" + ], + "index": "pypi", + "version": "==1.1" + }, + "mkdocs-material": { + "hashes": [ + "sha256:0a3ef09776d8160a1de322065d68cc05672ac47052733665fa405e8c8f263115", + "sha256:a16b7dbb2704fc911d9705881a66dba15136e1b8c2b818ba08faabfd60192155" + ], + "index": "pypi", + "version": "==5.0.1" + }, + "nltk": { + "hashes": [ + "sha256:bed45551259aa2101381bbdd5df37d44ca2669c5c3dad72439fa459b29137d94" + ], + "version": "==3.4.5" + }, + "pygments": { + "hashes": [ + "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44", + "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324" + ], + "version": "==2.6.1" + }, + "pymdown-extensions": { + "hashes": [ + "sha256:71cbc748789959d4b964fe8dc038f5436779d244399fd5ba3a0bbfe9a0e43b1f", + "sha256:d27a8bc8bb7ecac589e832465dbefe24d7fedd9792636c6d0ac521e5045bedc0" + ], + "index": "pypi", + "version": "==7.0" + }, + "pyyaml": { + "hashes": [ + "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97", + "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76", + "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2", + "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648", + "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf", + "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f", + "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2", + "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee", + "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d", + "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c", + "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a" + ], + "version": "==5.3.1" + }, + "six": { + "hashes": [ + "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a", + "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c" + ], + "version": "==1.14.0" + }, + "tornado": { + "hashes": [ + "sha256:0fe2d45ba43b00a41cd73f8be321a44936dc1aba233dee979f17a042b83eb6dc", + "sha256:22aed82c2ea340c3771e3babc5ef220272f6fd06b5108a53b4976d0d722bcd52", + "sha256:2c027eb2a393d964b22b5c154d1a23a5f8727db6fda837118a776b29e2b8ebc6", + "sha256:5217e601700f24e966ddab689f90b7ea4bd91ff3357c3600fa1045e26d68e55d", + "sha256:5618f72e947533832cbc3dec54e1dffc1747a5cb17d1fd91577ed14fa0dc081b", + "sha256:5f6a07e62e799be5d2330e68d808c8ac41d4a259b9cea61da4101b83cb5dc673", + "sha256:c58d56003daf1b616336781b26d184023ea4af13ae143d9dda65e31e534940b9", + "sha256:c952975c8ba74f546ae6de2e226ab3cc3cc11ae47baf607459a6728585bb542a", + "sha256:c98232a3ac391f5faea6821b53db8db461157baa788f5d6222a193e9456e1740" + ], + "version": "==6.0.4" + } + }, + "develop": {} +} diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..7b79df1 --- /dev/null +++ b/Procfile @@ -0,0 +1,2 @@ +web: make watch-mkdocs +toc: make tocupdate diff --git a/Procfile.watch b/Procfile.watch new file mode 100644 index 0000000..8e9a068 --- /dev/null +++ b/Procfile.watch @@ -0,0 +1,3 @@ +mkdocs: make watch-mkdocs +slides: make watch-slides +toc: make tocupdate diff --git a/QUESTIONS.md b/QUESTIONS.md new file mode 100644 index 0000000..e69de29 diff --git a/REFERENCES.md b/REFERENCES.md new file mode 100644 index 0000000..ed3f0a2 --- /dev/null +++ b/REFERENCES.md @@ -0,0 +1,42 @@ + +# Kubernetes + + +## Beginner guides & bootcamps + + +## Books + + +## Beginner courses + + +## Advanced courses + + +## Focused Articles + +## Cheat Sheet + +## Awesome + +## Free Courses + +## Unsorted Courses + +## Docker? + +## Workshops / Full tutorials + +## Interview questions + +## Video + +## Outils tiers + +## Tags / Topics + +## Infrastructures / test + +## Question + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..e69de29 diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..08bed51 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,181 @@ +site_name: Kubernetes + +# theme_dir: 'themes/mkdocs-material/material' +# theme_dir: 'themes/mkdocs-material' + +site_author: 'Glenn Y. Rolland' +site_url: 'http://glenux.github.io/teaching-devops-kubernetes' + +# copyright: 'Copyright (c) 2016 El Gadjo Ridículo' + +repo_name: 'GitHub' +repo_url: 'https://github.com/glenux/teaching-devops-kubernetes' +# site_favicon: 'favicon.ico' + +theme: + language: fr + # name: 'gitbook' + # name: 'alabaster' + # name: 'windmill' + # name: 'ivory' + name: 'material' + palette: + primary: 'white' + accent: 'black' + neutral: 'black' + feature: + tabs: false + +i18n: + prev: 'Chapitre précédent' + next: 'Chapitre suivant' + +extra_css: + - css/extra.css + +extra_javascript: + - js/extra.js + +#author: +# github: 'elgadjo' +# twitter: 'elgadjo' + +# Extensions +markdown_extensions: + - footnotes + - admonition + - toc: + permalink: '#' + - codehilite: + guess_lang: false + - mdx_truly_sane_lists # pip install mdx_truly_sane_lists + - pymdownx.emoji: # pip install pymdown-extensions + emoji_generator: !!python/name:pymdownx.emoji.to_svg + - pymdownx.superfences: # pip install pymdown-extensions + +extra: + search: + language: 'fr, en' + +# run the following line to update toc +# pipenv run ./script/update-toc + +# BEGIN MKDOCS-TOC +nav: + - "Préambule": + - 000-attic-preambule/010-histoire.md + - 000-attic-preambule/020-rappels-docker.md + - 000-attic-preambule/030-limites-docker.md + - "Rappels sur Docker": + - 000-attic-using-docker/010-dockerfile.md + - 000-attic-using-docker/020-build.md + - 000-attic-using-docker/030-run.md + - 000-attic-using-docker/040-registry.md + - "Introduction": + - 010-about-kubernetes/010-kubernetes.md + - 010-about-kubernetes/010-privitives-concepts.md + - 010-about-kubernetes/020-yaml-syntax.md + - 010-about-kubernetes/030-cli.md + - "Installation": + - 020-installing/020-local-minikube.md + - 020-installing/030-local-kind.md + - 020-installing/035-local-docker-client.md + - 020-installing/040-baremetal-kubeadm.md + - 020-installing/050-baremetal-rancher.md + - 020-installing/060-baremetal-openshift.md + - 020-installing/070-baremetal-k3s.md + - 020-installing/080-cloud-gcp.md + - 020-installing/090-kubectl.md + - "Premiers pas": + - 030-first-steps/005-verif-config.md + - 030-first-steps/007-first-steps.md + - 030-first-steps/015-namespace.md + - 030-first-steps/017-nodes.md + - 030-first-steps/020-pods.md + - 030-first-steps/030-services.md + - 030-first-steps/040-archi.md + - "Les bases": + - 050-basics/010-scalability.md + - 050-basics/020-deployment.md + - 050-basics/050-volumes.md + - 050-basics/060-autoscaling.md + - 050-basics/080-readiness.md + - 050-basics/090-events.md + - 050-basics/basics-deployments.md + - 050-basics/basics-healthchecks.md + - 050-basics/basics-labels.md + - 050-basics/basics-node-architecture.md + - 050-basics/basics-pods-state-lifecycle.md + - 050-basics/basics-readiness.md + - 050-basics/basics-scaling-pods.md + - 050-basics/basics-secrets.md + - 050-basics/basics-services.md + - 050-basics/basics-webui.md + - "Gestion des resources": + - 060-resources/060-requests-limits.md + - 060-resources/070-quotas.md + - "Secrets": + - 080-secrets/010-intro.md + - 080-secrets/020-configmap.md + - 080-secrets/030-secrets.md + - 080-secrets/040-security.md + - "Ingress & Egress": + - 090-ingress-egress/010-ingress.md + - 090-ingress-egress/020-egress.md + - "Packages et extensions": + - 100-packaging/010-helm.md + - 100-packaging/020-creating-helm-chars.md + - 100-packaging/030-help-repository.md + - 100-packaging/040-building-deploying.md + - 100-packaging/050-fission.md + - "Monitoring": + - 800-monitoring/010-dashboard.md + - 800-monitoring/020-prometheus.md + - 800-monitoring/030-logs.md + - "Bonnes pratiques": + - 900-good-practices/010-arbo.md + - 900-good-practices/020-ci-cd.md + - 900-good-practices/025-development.md + - 900-good-practices/030-score.md + - 900-good-practices/040-troubleshooting.md + - 900-good-practices/060-other-tools.md + - 900-good-practices/090-pdb.md + - "999-3rd-party": + - 999-3rd-party/introduction-to-orchestration.md + - "999-other": + - 999-other/admin-high-availability.md + - 999-other/admin-master-services.md + - 999-other/admin-namespaces.md + - 999-other/admin-networking.md + - 999-other/admin-node-maintenance.md + - 999-other/admin-quotas-limits.md + - 999-other/admin-rbac.md + - 999-other/admin-tls-on-elb.md + - 999-other/admin-user-management.md + - 999-other/adv-auto-discovery.md + - 999-other/adv-autoscaling.md + - 999-other/adv-configmap.md + - 999-other/adv-daemon-sets.md + - 999-other/adv-ext-dns.md + - 999-other/adv-ingress.md + - 999-other/adv-interpod-anti-affinity.md + - 999-other/adv-monitoring.md + - 999-other/adv-node-affinity.md + - 999-other/adv-operators.md + - 999-other/adv-pod-presets.md + - 999-other/adv-stateful-sets.md + - 999-other/adv-taints-tolerations.md + - 999-other/adv-volumes.md + - 999-other/extra-kubeadm.md + - 999-other/extra-tls-cert-manager.md + - 999-other/intro-build-container-image.md + - 999-other/intro-build-container.md + - 999-other/intro-cluster-setup.md + - 999-other/intro-run-first-app.md + - 999-other/kops.md + - 999-other/other.md + - 999-other/pimp-k9s.md + - 999-other/pimp-tubekit.md +# END MKDOCS-TOC + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..8b4a40e --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "teaching-framework-nodejs-advanced", + "version": "1.0.0", + "description": "", + "main": "index.js", + "directories": { + "doc": "docs" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@marp-team/marp-cli": "^0.16.2", + "foreman": "^3.0.1", + "node-sass": "^4.13.0" + } +} diff --git a/scripts/update-toc b/scripts/update-toc new file mode 100755 index 0000000..e8c6f35 --- /dev/null +++ b/scripts/update-toc @@ -0,0 +1,128 @@ +#!/usr/bin/env python3 + +import click + +import os +import re +import pdb +import pprint + +from pathlib import Path + +pp = pprint.PrettyPrinter(indent=4).pprint + +class TocBuilder: + def __init__(self, root_path): + self.root_path = root_path + + # Helper for titles + def __get_title(self, fn): + if not os.path.exists(fn): + return None + f1 = open(fn, "r") + for line in f1: + m = re.match(r"^#\s(.*)$", line) + if m: + f1.close() + return m.groups()[0] + f1.close() + return None + + def lookup(self): + md_files = [] + for root, dirs, files in os.walk(self.root_path): + for fn in files: + # compute absolute and relative path + abs_path = os.path.join(root, fn) + rel_path = os.path.relpath(abs_path, self.root_path) + + # split name into parts + bname = os.path.basename(rel_path) + bname_split = os.path.splitext(bname) + dname = os.path.dirname(rel_path) + + # skip files in docs/ root + if dname == "": + continue + + # skip index files + if bname_split[0] == 'index': + continue + + # keep only .md files + if bname_split[1] == '.md': + md_files.append(rel_path) + return md_files + + def format(self, md_files): + lines = ["nav:"] + lastdir="" + for f in sorted(md_files): + bname = os.path.basename(f) + bname_split = os.path.splitext(bname) + dname = os.path.dirname(f) + + if lastdir != dname: + lastdir = dname + title = self.__get_title(os.path.join(self.root_path, dname, 'index.md')) + if title is not None: + lines.append(" - \"%s\":" % title) + else: + lines.append(" - \"%s\":" % dname) + + lines.append(" - %s" % f) + return lines + +class FileInjector: + def __init__(self, delimiter): + self.delimiter = delimiter + + def inject(self, filename, lines): + suffix = '~update_toc' + src_fh = open(filename, 'r') + dst_fh = open(filename + suffix, 'w') + + inject_mode = False + end_pattern = r"^#\s+END {0}\s*$".format(self.delimiter) + begin_pattern = r"^#\s+BEGIN {0}\s*$".format(self.delimiter) + for src_line in src_fh: + if (not inject_mode) and re.match(begin_pattern, src_line): + # activate inject_mode, write begin pattern and lines + inject_mode = True + dst_fh.write(src_line) + for line in lines: + dst_fh.write(line + "\n") + + elif inject_mode and re.match(end_pattern, src_line): + # disable inject_mode and write end pattern + inject_mode = False + dst_fh.write(src_line) + elif inject_mode: + # skip line if injection mode is active + next + else: + # simple copy if injection mode is NOT active + dst_fh.write(src_line) + # si la ligne < + # FIXME: error if inject_mode is still True + src_fh.close() + dst_fh.close() + os.rename(filename + suffix, filename) + +# build TOC in-memory +# +# open mkdocs.yml file +# save part before + +@click.command() +def build(): + root_path = Path(__file__).parent.parent + toc = TocBuilder(str(root_path / 'docs')) + md_files = toc.lookup() + md_toc = toc.format(md_files) + fi = FileInjector('MKDOCS-TOC') + fi.inject(str(root_path / 'mkdocs.yml'), md_toc) + +if __name__ == '__main__': + build() + diff --git a/slides/images/0.png b/slides/images/0.png new file mode 100644 index 0000000..33b05d6 Binary files /dev/null and b/slides/images/0.png differ diff --git a/slides/index.md b/slides/index.md new file mode 100644 index 0000000..1ebfdbb --- /dev/null +++ b/slides/index.md @@ -0,0 +1,69 @@ +# Gestion de projet DATA + +## Introduction + +* De quoi on parle ? + +* C'est quoi les DATA ? + + + +## L'écosysteme DATA actuel + + + +## Les DATA au sein de votre processus métier + +* Collecte de données et objets connectés + +* Analyse et préparation des données + +* Intelligence Artificielle et Machine Learning + +* Flux de données et actionautomatiques + +## Enjeux, opportunités, coûts et business models + +* Quelle stratégies gagnantes adopter ? + +* Exemples de mise en oeuvre + +## Gestion de la qualité + +* Mise en production + +* Formats, normes et standards + +* Aspects règlementaires (RGPD et données personnelles, etc.) + + + +## Collecte de données + +Papier + +Téléphone + +Mesure + +Capteurs + + + +## Préparation des données + + + +## Transformation des données + + + +## Export des données + + + +## Stockage des données + + + +## diff --git a/slides/intro.md b/slides/intro.md new file mode 100644 index 0000000..c17e515 --- /dev/null +++ b/slides/intro.md @@ -0,0 +1,165 @@ +# Gestion de projet data - Introduction + +## Définition + + * Latin DATUM, DATA | Du latin data (« choses données (au pluriel) ») + +data \da.ta\ féminin +(Philosophie) Se dit de faits connus dans le domaine scientifique et servant +de +départ à des recherches futures. (corrélatif de desiderata) +Données. +Dans le cadre de l'option à 1,99€/20Mo, la data sera-t-elle décomptée par +paliers de 1Mo ? 100Ko ? 20Ko ? 10Ko ? 1Ko ? — (Forum LesMobiles.com) +Et si Uber, le premier d’entre eux, y investit (et au sens plein du terme, +puisqu’elle se dit prête « à voir ses recettes s’effriter dans un premier +temps +»), c’est parce que ses data confirment un raccourcissement du trajet moyen +des +courses réalisées par les chauffeurs. — (Olivier Haralambon , « Un vélo +électrique pour tous ? » sur LEquipe.fr. Mis en ligne le 11 septembre 2018) +---|--- + * ce qui est donné + * un fait + * une information + * A quoi sert la data + * à des machines + * in fine, à d'autres humains + +## Contexte + + * Dans une entreprise capitaliste on veut de la croissance + * Vendre plus cher + * Vendre plus + * Elargir le marché (croissance horizontale) + * Mieux cibler sa prospection + * connaitre le consommateur + * Payer moins cher les ressources + * Etre plus efficace / ressource + * Produire plus / ressource + * Acquérir de nouvelles compétences (croissance verticale) + * De plus en plus de projet data + * De plus en plus d’entreprises du secteur optent pour des stratégies data-driven et se lancent dans un marathon de projets Data Science et Intelligence artificielle, espérant ainsi profiter des avantages des nouvelles technologies et de la donnée. + * Quelle est la meilleure approche pour réussir un projet Data Science ou Intelligence artificielle ? + * Quels sont les acteurs nécessaires aux changements ? + * Comment se déclinent les différentes étapes de conception et de déploiement de projets dans le temps ? + * De plus en plus de demande pour les compétences data + * Data scientist + * data analyst + * data engineer + * ...tout le monde peut inclure de l'analyse data dans sa pratique professionnelle. + +## Enjeux de la data et de son analyse + + * Analyse de données + * = être capable de collecter, organiser, nettoyer, manipuler, décortiquer, analyser et visualiser des données internes ou externes, qualitatives ou quantitatives, que chaque entreprise a à sa disposition + * Nouvelle forme de capital (valeur + levier de pouvoir) + * Information + * = Valeur + * = Influence + * = Temps d'avance + * Analyse de données + * Information... qui produit de l'information + * => Levier de pouvoir + * => Nouvelle forme de capital + +## Différents types de projets data + + * Les usages sont innombrables. + * Objectifs concrets + * l’automatisation des processus + * l’analyse des insights (soit pour comprendre l’existant, détecter des patterns ou prédire des événements) + * l’amélioration du niveau de service et l’engagement vis-à-vis de l’utilisateur final. + * Trois grandes classes + * 1\. Robotic Process Automation | Le Robotic Process Automation (RPA) est la forme de l’IA la plus facile et la +moins coûteuse à mettre en place. En général, elle porte ses fruits à court +terme et son ROI est remarquable. Toutefois, malgré la facilité de sa mise en +place et ses bénéfices considérables, de nombreuses entreprises ont encore du +chemin à faire dans ce domaine. +---|--- + * Le transfert de données et des emails collectés dans divers systèmes d’information pour mettre à jour les bases de données clients ou les opportunités détectées ; + * Le rapprochement et contrôle des factures et commandes afin de rendre plus robuste les processus comptables ; + * La lecture et analyse des contrats et documents légaux pour extraire des contraintes ou anomalies possibles. + * 2\. Analyse de données | La deuxième forme la plus commune et connue de l’IA et de la Data Science est +l’analyse de l’information et l’extraction de la valeur depuis un vaste volume +de données (Big Data) pour des fins descriptives ou prédictives. Par exemple : + +Les techniques les plus développées de Machine Learning, dites de Deep +Learning, +permettent de réaliser des fonctions comme la reconnaissance vocale ou d’image +ou encore du [Natural Language +Processing](https://fr.blog.businessdecision.com/replay-data-science-5-text- +mining-nlp/) (NLP). +---|--- + * Faire de la maintenance prédictive sur les chaines d’industrie + * Identifier les fraudes possibles dans les systèmes bancaires ou d’assurance ou les systèmes de santé + * Automatiser le ciblage clientèle lors des campagnes marketing + * Fournir aux assureurs des modèles plus précis sur les potentiels clients + * Engagement et prise de décision | La troisième forme consiste à engager l’utilisateur final (employé ou client) +dans un processus d’interaction avec la machine afin de récolter de +l’information ou de fournir un service. + +La richesse des fonctions que peuvent s’offrir les organisations est très +attractive. Toutefois, la mise en place de projets d’Intelligence Artificielle +est confrontée à plusieurs obstacles de natures différentes : +organisationnelle, +financière, technologique ou stratégique. +---|--- + * Les [agents conversationnels](https://fr.blog.businessdecision.com/chatbot-agent-conversationnel-experience-client/) (chatbots) intelligents qui sont sollicités 24/7 et qui couvrent une panoplie de services dépendant du niveau d’apprentissage du robot. + * Les [moteurs de recommandation](https://fr.blog.businessdecision.com/moteur-de-recommandation-temps-reel-le-graal-du-marketing-digital/) qui orientent l’utilisateur dans ses choix de services ou produits + +## Limites et enjeux actuels + + * Initiative complexe + * En terme de RH + * En terme de processus + * En terme de technologies + * Manque de recul + * Des modeles difficilements industrialisables + * Encore en POC + * Pas de méthodes sur la partie OPS + * Approche centrée sur la technologie + * Collecte + * capable de ratisser tres large mais.. + * quelle est la qualité de la donnée ? + * pertinente ou déchet ? + * Chaine opérationnelle + * Organisation non mobilisée + * Faible collaboration liées aux différences culturelles + * Vision transverse aux différentsmétiers + * Quels temps de réactions + * entre la collecte + * le traitement + * et l'action + * Vision à 360° et humanisme + * La machine ne fait pas de prise en compte globale + * L'analyse du contexte, une vision à 360° autour de la donnée, importe tout autant que cette dernière + * Risque juridique + * données perosnnelles dans les modeles (RGPD) + * a qui appartient le modele entrainé sur la base de données d'un tiers (propriété intellectuelle / industrielle) + +## Références + + * [READ. La Tribune : Mener à bien un projet data : une route encore semée d'embûches![Flag: url](flags/flag-url.png)](https://www.latribune.fr/opinions/tribunes/mener-a-bien-un-projet-data-une-route-encore-semee-d-embuches-792583.html) + * [Data Analytics Post : CHEF DE PROJET DATA : L’EXPERT BUSINESS DE L’ENTREPRISE![Flag: url](flags/flag-url.png)](https://dataanalyticspost.com/fiche-metier/chef-de-projet-data/) + * [Op Team : Quelle gestion de projet pour le BIG DATA![Flag: url](flags/flag-url.png)](https://www.opteam.fr/blog/quelle-gestion-de-projet-pour-le-big-data) + * [PLB : Formation Big Data : Concevoir et piloter un projet Big Data![Flag: url](flags/flag-url.png)](https://www.plb.fr/formation/aide-%C3%A0-la-d%C3%A9cision/formation-gestion-projet-big-data,31-700375.php) + * [READ. Chefdentreprise.com : PME : les 5 étapes clés pour réussir un projet data![Flag: url](flags/flag-url.png)](https://www.chefdentreprise.com/) + * ROI + * PME + * [READ. BusinessDecisions : Data Science et IA : comment bien cadrer vos projets d’entreprise ?![Flag: url](flags/flag-url.png)](https://fr.blog.businessdecision.com/data-science-ia-cadrer-projets-entreprise/) + * https://www.s-h.fr/la-data-analytics/ + +## Other topics + + * Data visualisation + * DATA vs Business intelligence + * Big DATA + * Data Steward + +* * * + +/home/warbrain/src/Glenux/teaching-mgmt-data/slides/intro.html | 2020-04-08 | +[vym 2.6.11](http://www.insilmaril.de/vym) +---|---|--- +