diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..702c158 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,20 @@ +# EditorConfig is awesome: https://EditorConfig.org +root = true + +[*] +end_of_line = lf +charset = utf-8 +insert_final_newline = true +indent_style = space +indent_size = 4 + +[*.{yaml,yml}] +indent_style = space +indent_size = 2 + +[*.py] +indent_style = space +indent_size = 4 + +[Makefile] +indent_style = tab diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..694a0c9 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,107 @@ +on: + push: + branches: + - master + create: + tags: + +jobs: + build: + name: Build Project + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v1 + with: + submodules: true + - name: Build Docker Image + run: make pull + - name: Build + run: make + - name: Upload handout + uses: actions/upload-artifact@v2 + with: + name: pdf + path: | + _build/latex/main.pdf + if-no-files-found: error + - name: Upload man-page + uses: actions/upload-artifact@v2 + with: + name: man + path: | + _build/man/info.1 + if-no-files-found: error + - name: Upload html + uses: actions/upload-artifact@v2 + with: + name: html + path: | + _build/html + if-no-files-found: error + deploy: + name: Deploy on GH-Pages + needs: build + runs-on: ubuntu-latest + if: contains(github.ref, 'master') + steps: + - name: Checkout repository + uses: actions/checkout@v1 + - name: Download artifacts + uses: actions/download-artifact@v2 + with: + path: html + name: html + - run: ls -al html + - name: Deploy to GitHub Pages + uses: JamesIves/github-pages-deploy-action@3.5.9 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BRANCH: gh-pages + FOLDER: html + release: + name: Create Release + needs: build + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/v') + steps: + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token + with: + tag_name: ${{ github.ref }} + release_name: Release ${{ github.ref }} + draft: false + prerelease: false + - name: Download artifacts + uses: actions/download-artifact@v2 + with: + name: man + path: dist/ + - name: Download artifacts + uses: actions/download-artifact@v2 + with: + name: pdf + path: dist/ + - name: Upload Handout + id: upload-pdf-handout + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps + asset_path: dist/main.pdf + asset_name: handout.pdf + asset_content_type: application/pdf + - name: Upload Manpage + id: upload-manpage + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps + asset_path: dist/info.1 + asset_name: info.1 + asset_content_type: text/plain diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 1157508..0000000 --- a/.travis.yml +++ /dev/null @@ -1,20 +0,0 @@ -sudo: required -services: docker -script: - - make -deploy: - - provider: pages - skip_cleanup: true - github_token: $GITHUB_TOKEN - local_dir: _build/html - on: - branch: master - - provider: releases - api_key: - secure: wtzjWvYXLNcvTEP07ta8t2CDzmacdWleZtDPL2RJET0+2L55WbDHGT0aH9eNsLMv+Sdlq7EtlGdHhBb9JPGGKUkjFXMldDt8twbvWB6Krt6+NO/w+73lPfuvoupK5n2kAhgObMxmbF9pS5YAIUplZ6rLh6r78juqnFnkHGDFv/dRXKPrEakw34yMRcC66k4Io+wTSS0jFQTKyf7DDkxJFuKDyvjPMunT2PI2PSnJoE5FUKZX8wT7N4j69cCQrz1I4nWEyRniZLGNjTApvnsfAspOxdSR0OtJrH2YB616KFFms7Pphb7pgZ+qFq2dnp6Kfn+1cxNCyJbMuFBFbSdRUGS00IB/YE9FkCjkXY6nkxpXFeQVaqT2YJExG0H9wBU11KXUXn6b33hSMDzDC3WETEOBwWtK4PZg0N7f72CVXHOpV+vz8whYPAV3s78OlLsSLxe2xefhV2zuWCiPlXFAyMhvtQZyQ6H6INJopygWthnzq2/YMFM4MrN9XmmbJWcHwxr1yXBjyG2YcnPIwmtJ1NKbNVqU7JeChJQNCKMOalKgt1i7Ei5FhpOFSvddEgISClMuefbloAiWz6yR3Z2DA6ZPQ2bpbGjlAvggmR/VLokszKB6ulc0/LpASOuv7jcPjz4ZU5oknwSBKfIto/RpFzdSC0RV5a7E0LzhulCWbVU= - skip_cleanup: true - file: - - ./_build/man/info.1 - - ./_build/latex/main.pdf - on: - tags: true \ No newline at end of file diff --git a/Makefile b/Makefile index aebb27a..33a2824 100644 --- a/Makefile +++ b/Makefile @@ -6,11 +6,12 @@ SPHINXBUILD ?= sphinx-build SOURCEDIR = . BUILDDIR = _build -DOCKER = docker run -v "$$(pwd -P):/srv" -w/srv nowox/latex:2.0 +DOCKER_IMAGE = "nowox/latex:2.0" +DOCKER = docker run -v "$$(pwd -P):/srv" -w/srv $(DOCKER_IMAGE) -all: artifacts html man pdf +all: html man pdf -html: Makefile +html: Makefile | artifacts $(DOCKER) $(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) man: Makefile @@ -19,7 +20,7 @@ man: Makefile pdf: Makefile $(DOCKER) $(SPHINXBUILD) -M latexpdf "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -latex: Makefile +latex: Makefile | artifacts $(DOCKER) $(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) $(ARTIFACTS_DIR): @@ -30,7 +31,10 @@ $(ARTIFACTS_DIR)/heig-vd.pdf: artifacts: $(ARTIFACTS_DIR)/heig-vd.pdf +pull: + docker pull $(DOCKER_IMAGE) + clean: $(RM) -rf _build _static -.PHONY: all clean artifacts dist +.PHONY: all clean artifacts dist pull diff --git a/README.md b/README.md index 0c039c4..fd35d14 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,60 @@ -# Polycopié d'informatique - -[![Build Status](https://travis-ci.org/heig-tin-info/info-handout.svg?branch=master)](https://travis-ci.org/heig-tin-info/info-handout) - -Ce référentiel contient le polycopié d'informatique 1 et 2 disponible en formats: - -- PDF (voir [releases](https://github.com/heig-tin-info/info-handout/releases)) -- HTML (https://heig-tin-info.github.io/handout/) -- Manpage (voir [releases](https://github.com/heig-tin-info/info-handout/releases)) - -## Install - -```bash -git clone https://github.com/heig-vd-tin/info-handout.git -cd info-handout -git submodule init -git submodulee update -make html -make pdf -``` - -Alternativement vous pouvez utiliser Docker et suivre le contenu de `.travis.yml`. - -## Intégration continue - -Les nouvelles releases sont automatiquement générées par Travis CI: - -- A chaque nouveau tag, les version PDF et MAN sont générées -- A chaque commit sur la branche `master` une version HTML est générée - -## Build - -Make sure you have `sphinx` and the HTML theme installed `sphinx-heigvd-theme`. - -```bash -sudo apt-get install -y librsvg2-bin -sudo apt-get install -y python3 python3-pip python3-sphinx - -sudo pip3 install sphinx-heigvd-theme -sudo pip3 install sphinxcontrib-svg2pdfconverter -``` - -Then if you would like to generate the PDF version you need LaTeX as well. - -```bash -sudo apt-get install librsvg2-bin # For conversion from svg to pdf - -sudo apt-get install texlive-latex-base -sudo apt-get install texlive-fonts-recommended -sudo apt-get install texlive-fonts-extra -sudo apt-get install texlive-latex-extra - -sudo apt-get install latexmk - -sudo pip install sphinx -sudo pip install sphinxcontrib-svg2pdfconverter -``` +# Polycopié d'informatique + +![.github/workflows/ci.yml](https://github.com/heig-tin-info/handout/workflows/.github/workflows/ci.yml/badge.svg?branch=master) + +![version](https://img.shields.io/github/v/release/heig-tin-info/handout) +![downloads](https://img.shields.io/github/downloads/heig-tin-info/handout/latest/total) + +Ce référentiel contient le polycopié d'informatique 1 et 2 disponible en formats: + +- PDF (voir [releases](https://github.com/heig-tin-info/info-handout/releases)) +- HTML (https://heig-tin-info.github.io/handout/) +- Manpage (voir [releases](https://github.com/heig-tin-info/info-handout/releases)) + +## Install + +```bash +git clone https://github.com/heig-vd-tin/info-handout.git +cd info-handout +git submodule init +git submodulee update +make html +make pdf +``` + +Alternativement vous pouvez utiliser Docker et suivre le contenu de `.travis.yml`. + +## Intégration continue + +Les nouvelles releases sont automatiquement générées par Travis CI: + +- A chaque nouveau tag, les version PDF et MAN sont générées +- A chaque commit sur la branche `master` une version HTML est générée + +## Build + +Make sure you have `sphinx` and the HTML theme installed `sphinx-heigvd-theme`. + +```bash +sudo apt-get install -y librsvg2-bin +sudo apt-get install -y python3 python3-pip python3-sphinx + +sudo pip3 install sphinx-heigvd-theme +sudo pip3 install sphinxcontrib-svg2pdfconverter +``` + +Then if you would like to generate the PDF version you need LaTeX as well. + +```bash +sudo apt-get install librsvg2-bin # For conversion from svg to pdf + +sudo apt-get install texlive-latex-base +sudo apt-get install texlive-fonts-recommended +sudo apt-get install texlive-fonts-extra +sudo apt-get install texlive-latex-extra + +sudo apt-get install latexmk + +sudo pip install sphinx +sudo pip install sphinxcontrib-svg2pdfconverter +``` diff --git a/TODO.md b/TODO.md index 07558de..d17fff0 100644 --- a/TODO.md +++ b/TODO.md @@ -34,18 +34,35 @@ - [ ] Index at the end of document? - [ ] Exercice thing... - [ ] LaTeX pygments style +- [ ] Reduce PDF size (should be much smaller!) +- [ ] Glossaire -.. only:: comment +## Index - .. _fig_allocation: - .. figure:: ../assets/figures/dist/memory/malloc.* +Lien dans les index: -# Propositions +``` +Compilation, 145 + - séparée, 122, 291 + - erreurs, 111 + +``` + +## Exercices + +- Chaque chapitre à des exercices: + +``` +Exercice 3.8 + +... + +> Voir solution...(html only) +``` -- Examen - - Mettre à disposition de l'étudiant un laptop pas cher avec un éditeur de texte basic (pas de réseau) - - Facilite le rendu d'examen, facilite la correction - - Eviter les scanf.... +- La version PDF à une section "Solution des exercices" +- Sous section "Solutions du chapitre 8" +- Puis "Exercice 8.2" ## Sphinx diff --git a/assets/images/binary-tree.jpg b/assets/images/binary-tree.jpg index e29ee58..fab5b47 100644 Binary files a/assets/images/binary-tree.jpg and b/assets/images/binary-tree.jpg differ diff --git a/assets/images/eniac.jpg b/assets/images/eniac.jpg new file mode 100644 index 0000000..0ce450d Binary files /dev/null and b/assets/images/eniac.jpg differ diff --git a/assets/images/eniac.png b/assets/images/eniac.png deleted file mode 100644 index bc27b65..0000000 Binary files a/assets/images/eniac.png and /dev/null differ diff --git a/assets/images/kamaji.jpg b/assets/images/kamaji.jpg new file mode 100644 index 0000000..2cee1e5 Binary files /dev/null and b/assets/images/kamaji.jpg differ diff --git a/assets/images/kamaji.png b/assets/images/kamaji.png deleted file mode 100644 index 66925e9..0000000 Binary files a/assets/images/kamaji.png and /dev/null differ diff --git a/assets/images/kernighan-ritchie-thompson.jpg b/assets/images/kernighan-ritchie-thompson.jpg new file mode 100644 index 0000000..38c071b Binary files /dev/null and b/assets/images/kernighan-ritchie-thompson.jpg differ diff --git a/assets/images/kernighan-ritchie-thompson.png b/assets/images/kernighan-ritchie-thompson.png deleted file mode 100644 index 0c122c5..0000000 Binary files a/assets/images/kernighan-ritchie-thompson.png and /dev/null differ diff --git a/assets/images/library.jpg b/assets/images/library.jpg new file mode 100644 index 0000000..520e620 Binary files /dev/null and b/assets/images/library.jpg differ diff --git a/assets/images/loom.jpg b/assets/images/loom.jpg new file mode 100644 index 0000000..c85f9cb Binary files /dev/null and b/assets/images/loom.jpg differ diff --git a/backmatter/colophon.rst b/backmatter/colophon.rst index fed61e5..20cd9b0 100644 --- a/backmatter/colophon.rst +++ b/backmatter/colophon.rst @@ -3,41 +3,4 @@ Colophon ======== -Sources -======= - L'écriture du présent ouvrage a été réalisée en utilisant `reStructuredText `__, un langage couramment utilisé pour l'écriture de documentation et largement utilisé dans la communauté Python. Ce langage s'intègre dans le projet Docutils qui s'inspire d'outils tels que Javadoc. La compilation des sources est réalisée sous Sphinx, un paquet Python permettant de générer une documentation HTML ainsi qu'un ouvrage PDF via LaTeX. - -Conventions -=========== - -Symbole d'égalité ------------------ - -Le signe d'égalité ``=`` peut aisément être confondu avec l'opérateur d'affectation ``=`` utilisé en C. Dans certains exemples ou l'on montre une égalité entre différentes écritures, le signe d'égalité triple (:unicode:`U+2261`) est utilisé pour faire disparaître toute ambiguïté : - -.. code-block:: - - 'a' ≡ 0b1100001 ≡ 97 ≡ 0x61 ≡ 00141 - -Symbole de remplissage ----------------------- - -Dans les exemples donnés, on voit régulièrement ``while (condition) { 〰 }`` ou ``〰`` (:unicode:`U+3030`) indique une continuité logique d'opération. Le symbole exprime ainsi ``...`` (`points de suspension `__ ou *ellipsis*). Or pour ne pas confondre avec le symbole C ``...`` utilisé dans les fonctions à arguments variables tels que ``printf``. - -Types de données ----------------- - -Les conventions C s'appliquent à la manière d'exprimer les grandeurs suivantes : - -- ``0xABCD`` pour les valeurs hexadécimales (``/0x[0-9a-f]+/i``) -- ``00217`` pour les valeurs octales (``/0[0-7]+/``) -- ``'c'`` pour les caractères (``/'([^']|\\[nrftvba'])'/``) -- ``123`` pour les grandeurs entières (``/-?[1-9][0-9]*/``) -- ``12.`` pour les grandeurs réelles en virgule flottante - -Encodage de caractère ---------------------- - -Il est souvent fait mention dans ce cours la notation du type :unicode:`U+01AE`, il s'agit d'une notation unicode qui ne dépend pas d'un quelconque encodage. Parler du caractère ASCII 234 est incorrect car cela dépend de la table d'encodage utilisée; en revanche, la notation unicode est exacte. - diff --git a/content/07-programming.rst b/content/07-programming.rst index 62ca7e9..fa88ad6 100644 --- a/content/07-programming.rst +++ b/content/07-programming.rst @@ -52,7 +52,7 @@ Programmation La machine Jacquard est un `métier à tisser `__ mis au point par Joseph Marie Jacquard en 1801. Il constitue le premier système mécanique programmable avec cartes perforées. -.. figure:: https://upload.wikimedia.org/wikipedia/commons/b/b6/Jacquard_loom_p1040320.jpg +.. figure:: ../assets/images/loom.* :width: 600px Mécanisme Jacquard au Musée des arts et métiers de Paris. diff --git a/content/70-standard-library.rst b/content/70-standard-library.rst index 736f905..bee6cf8 100644 --- a/content/70-standard-library.rst +++ b/content/70-standard-library.rst @@ -2,7 +2,7 @@ Bibliothèques ============== -.. figure:: https://upload.wikimedia.org/wikipedia/commons/4/4b/Long_Room_Interior,_Trinity_College_Dublin,_Ireland_-_Diliff.jpg +.. figure:: ../assets/images/library.* Bibliothèque du Trinity College de Dublin diff --git a/frontmatter/introduction.rst b/frontmatter/introduction.rst new file mode 100644 index 0000000..091458b --- /dev/null +++ b/frontmatter/introduction.rst @@ -0,0 +1,46 @@ +============ +Introduction +============ + +Organisation de l'ouvrage +========================= + +Conçu comme un résumé du savoir nécessaire à l'ingénieur pour prendre en main le langage C, cet ouvrage n'est pas un manuel de référence. Il réfère à de nombreuses ressources internet et livres que le lecteur pourra consulter au besoin pour approfondir certains concepts. + +Chaque chapitre est composé d'exercices mais à des fins pédagogiques, toutes les solutions ne sont pas données. Certains exercices sont destinés à être faits en études. + +Ce ouvrage est destiné à des étudiants ingénieurs de première année n'ayant aucune expérience en programmation. + +Conventions +=========== + +Symbole d'égalité +----------------- + +Nous verrons que le signe d'égalité ``=`` peut aisément être confondu avec l'opérateur d'affectation (également) ``=`` utilisé en C. Dans certains exemples ou l'on montre une égalité entre différentes écritures, le signe d'égalité triple (:unicode:`U+2261`) sera utilisé pour dissiper toute ambiguïté éventuelle : + +.. code-block:: + + 'a' ≡ 0b1100001 ≡ 97 ≡ 0x61 ≡ 00141 + +Symbole de remplissage +---------------------- + +Dans les exemples qui seront donnés, on pourra voir ``while (condition) { 〰 }`` ou ``〰`` (:unicode:`U+3030`) indique une continuité logique d'opération. Le symbole exprime ainsi ``...`` (`points de suspension `__ ou *ellipsis*). Or, pour ne pas confondre avec le symbole C ``...`` utilisé dans les fonctions à arguments variables tels que ``printf``. + +Types de données +---------------- + +Les conventions C s'appliquent à la manière d'exprimer les grandeurs suivantes : + +- ``0xABCD`` pour les valeurs hexadécimales (``/0x[0-9a-f]+/i``) +- ``00217`` pour les valeurs octales (``/0[0-7]+/``) +- ``'c'`` pour les caractères (``/'([^']|\\[nrftvba'])'/``) +- ``123`` pour les grandeurs entières (``/-?[1-9][0-9]*/``) +- ``12.`` pour les grandeurs réelles en virgule flottante + +Encodage de caractère +--------------------- + +Il sera souvent fait mention dans cet ouvrage la notation du type :unicode:`U+01AE`, il s'agit d'une notation unicode qui ne dépend pas d'un quelconque encodage. Parler du caractère ASCII 234 est incorrect car cela dépend de la table d'encodage utilisée; en revanche, la notation unicode est exacte. +