Compare commits

...

47 Commits

Author SHA1 Message Date
Nicolas Massé ac5a0ea9d5 remove dead code 1 month ago
Nicolas Massé 90e0636170 upgrade to Hugo 0.167 and replace the ./hugo script with mounts 1 month ago
Nicolas Massé 872187d165 replace the file symlinks in content with copies 1 month ago
Nicolas Massé 6a61edc1ba only publish the page resources that are actually used 1 month ago
Nicolas Massé b13180fcda fix SEO of the english articles published in the french site 1 month ago
Nicolas Massé 4f98ca8686 document the Netlify CLI and ignore local build files 1 month ago
Nicolas Massé 5315ec8a28 move the itix theme to the root of the site 1 month ago
Nicolas Massé 0c667e53e8 import the itix theme with its history 1 month ago
Nicolas Massé 995131a710 remove the itix theme submodule 1 month ago
Nicolas Massé 7d4207e94d fix video width 2 years ago
Nicolas Massé 18ab2a1724 internal links with custom title 2 years ago
Nicolas Massé 73e219f309 implement internal links 2 years ago
Nicolas Massé 667c7274ac fix missing / at the end of the URL. Thanks Google for noticing such a small change ! 2 years ago
Nicolas Massé d008dee76a fix for polyfill.io supply chain attack 2 years ago
Nicolas Massé ec469cb72f add a reference to the favicon.ico 2 years ago
Nicolas Massé 3ea5ff98f7 format tables neatly 2 years ago
Nicolas Massé 493ec60029 fix lang detection in page metadata 2 years ago
Nicolas Massé 5cffa3680e add RSS feed URL 3 years ago
Nicolas Massé 977b893562 add RSS feed URL 3 years ago
Nicolas Massé 21845d892d fix broken links by embedding svg in the search page 4 years ago
Nicolas Massé 5617cbc647 fix spaces in figure numbering 4 years ago
Nicolas Massé 7797aa0a19 enable plausible.io analytics 5 years ago
Nicolas Massé b5458a6750 Merge branch 'main' of https://github.com/nmasse-itix/hugo-theme-itix 5 years ago
Nicolas Massé ce6a11b294 two more shortcodes 5 years ago
Nicolas Massé 24e4510884 highlighted file support 6 years ago
Nicolas Massé 2901afeb78 hide scrollbars to avoid reflow 6 years ago
Nicolas Massé 8b4695154b remove flickering upon page load on mobile 6 years ago
Nicolas Massé 39293022e2 fix broken menu 6 years ago
Nicolas Massé ff420ae6a2 fix metadata style 6 years ago
Nicolas Massé e523cfd705 add nbsp 6 years ago
Nicolas Massé f9e81e23a8 Core Web Vitals: get rid of material font and replace it with inline svg 6 years ago
Nicolas Massé 7b32086d5a Core Web Vitals: inline svg 6 years ago
Nicolas Massé 1fefdd07f9 Improve Web Vitals: SEO and Accessibility 6 years ago
Nicolas Massé b44dbf83c1 Core Web Vitals: improve page loading time and accessibility 6 years ago
Nicolas Massé 51fed60756 mobile usability issue 6 years ago
Nicolas Massé 1c3e19f6d6 cleanup structured data 6 years ago
Nicolas Massé ce7caad5b3 implement the search function 6 years ago
Nicolas Massé 48adb949c8 fix structured data generation 6 years ago
Nicolas Massé d16133dbc5 minor fixes 6 years ago
Nicolas Massé 56ee4b06aa add missing anchor 6 years ago
Nicolas Massé 00566ecb75 fix long titles 6 years ago
Nicolas Massé 10a2f3146b fix summaries 6 years ago
Nicolas Massé 80d46a9b16 add comments 6 years ago
Nicolas Massé ef990d86dc hide post metadata on mobile 6 years ago
Nicolas Massé d53bf000bf add aria properties 6 years ago
Nicolas Massé 9c22dbda31 pagination 6 years ago
Nicolas Massé 080cd3f1d8 initial commit 6 years ago
  1. 4
      .gitignore
  2. 3
      .gitmodules
  3. 21
      LICENSE-theme
  4. 33
      README.md
  5. 62
      assets/css/chroma.css
  6. 859
      assets/css/itix.css
  7. 49
      config.yaml
  8. 3
      content/english/blog/_index.md
  9. 1
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-dry-run.png
  10. 3
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-dry-run.png
  11. 1
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-no-time.png
  12. 3
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-no-time.png
  13. 1
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-with-time.png
  14. 3
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-with-time.png
  15. 1
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/exercise-validation.png
  16. 3
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/exercise-validation.png
  17. 1
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-explore-opencodequest-leaderboard-hero.png
  18. 3
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-explore-opencodequest-leaderboard-hero.png
  19. 1
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-instant-snapshot.png
  20. 3
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-instant-snapshot.png
  21. 1
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-lifetime-bonus.png
  22. 3
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-lifetime-bonus.png
  23. 1
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-onetime-bonus.png
  24. 3
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-onetime-bonus.png
  25. 1
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-points-over-time.png
  26. 3
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-points-over-time.png
  27. 1
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard.png
  28. 3
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard.png
  29. 1
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-points.png
  30. 3
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-points.png
  31. 1
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/leaderboard-simulation.gif
  32. BIN
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/leaderboard-simulation.gif
  33. 1
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/redhat-acm-observability-architecture.png
  34. 3
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/redhat-acm-observability-architecture.png
  35. 1
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/redhat-acm-observability-architecture.svg
  36. 4
      content/english/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/redhat-acm-observability-architecture.svg
  37. 1
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/aws-console-efs.png
  38. 3
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/aws-console-efs.png
  39. 1
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/aws-console-security-group.png
  40. 3
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/aws-console-security-group.png
  41. 1
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/openshift-console-three-nodes-x86_64-and-arm64.png
  42. 3
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/openshift-console-three-nodes-x86_64-and-arm64.png
  43. 1
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/overview.svg
  44. 378
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/overview.svg
  45. 1
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/quay-image-containerfile.png
  46. 3
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/quay-image-containerfile.png
  47. 1
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/sources
  48. 451
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/sources/overview.svg
  49. 1
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-containerfile.png
  50. 3
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-containerfile.png
  51. 1
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-nodejs.png
  52. 3
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-nodejs.png
  53. 1
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-quarkus.png
  54. 3
      content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-quarkus.png
  55. 2
      content/english/blog/configure-redhat-sso-3scale-cli/index.md
  56. 2
      content/english/blog/deploying-invidious-openshift.md
  57. 2
      content/english/blog/deploying-miniflux-openshift.md
  58. 1
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/ampere-altra-q64-22.jpeg
  59. 3
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/ampere-altra-q64-22.jpeg
  60. 1
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/fans-air-flow.webp
  61. BIN
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/fans-air-flow.webp
  62. 1
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/final-product.webp
  63. BIN
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/final-product.webp
  64. 1
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/hp-dl20-gen9.webp
  65. BIN
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/hp-dl20-gen9.webp
  66. 1
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/innovision-m24306.jpeg
  67. 3
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/innovision-m24306.jpeg
  68. 1
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/internal-layout.webp
  69. BIN
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/internal-layout.webp
  70. 1
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/more-nvme-storage.webp
  71. BIN
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/more-nvme-storage.webp
  72. 1
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/nvme-storage.jpeg
  73. 3
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/nvme-storage.jpeg
  74. 1
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/perspective-view.webp
  75. BIN
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/perspective-view.webp
  76. 1
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/psu-fsp.webp
  77. BIN
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/psu-fsp.webp
  78. 1
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/slimsas-cables.webp
  79. BIN
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/slimsas-cables.webp
  80. 1
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/vga-not-connected.jpeg
  81. 3
      content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/vga-not-connected.jpeg
  82. 2
      content/english/blog/install-openwrt-raspberry-pi/index.md
  83. 1
      content/english/speaking/devoxx-france-2019/on-stage-1.jpg
  84. 3
      content/english/speaking/devoxx-france-2019/on-stage-1.jpg
  85. 1
      content/english/speaking/devoxx-france-2019/on-stage-2.jpg
  86. 3
      content/english/speaking/devoxx-france-2019/on-stage-2.jpg
  87. 1
      content/english/speaking/devoxx-france-2019/on-stage-3.jpg
  88. 3
      content/english/speaking/devoxx-france-2019/on-stage-3.jpg
  89. 1
      content/english/speaking/devoxx-france-2019/on-stage-4.jpg
  90. 3
      content/english/speaking/devoxx-france-2019/on-stage-4.jpg
  91. 1
      content/english/speaking/devoxx-france-2019/on-stage-5.jpg
  92. 3
      content/english/speaking/devoxx-france-2019/on-stage-5.jpg
  93. 1
      content/english/speaking/devoxx-france-2019/tweet-PetitMel_issa.png
  94. 3
      content/english/speaking/devoxx-france-2019/tweet-PetitMel_issa.png
  95. 1
      content/english/speaking/devoxx-france-2019/tweet-cgodard.png
  96. 3
      content/english/speaking/devoxx-france-2019/tweet-cgodard.png
  97. 1
      content/english/speaking/devoxx-france-2019/tweet-gbloquel.png
  98. 3
      content/english/speaking/devoxx-france-2019/tweet-gbloquel.png
  99. 1
      content/english/speaking/devoxx-france-2019/tweet-lbroudoux.png
  100. 3
      content/english/speaking/devoxx-france-2019/tweet-lbroudoux.png

4
.gitignore

@ -2,3 +2,7 @@ public
.DS_Store .DS_Store
resources resources
# Local Netlify folder
.netlify
.hugo_build.lock

3
.gitmodules

@ -1,3 +0,0 @@
[submodule "themes/itix"]
path = themes/itix
url = https://github.com/nmasse-itix/hugo-theme-itix.git

21
LICENSE-theme

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 Nicolas Massé
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

33
README.md

@ -1,5 +1,14 @@
# www.itix.fr # www.itix.fr
## Netlify CLI
```sh
npm install -g netlify-cli
netlify login
netlify link
netlify status
```
## How to update this website ## How to update this website
Create a new branch: Create a new branch:
@ -8,13 +17,16 @@ Create a new branch:
git checkout -b "$(date +%F)-update" git checkout -b "$(date +%F)-update"
``` ```
Create a new page: Create a new page (in english or in french):
```sh ```sh
hugo new speaking/my-wonderful-event.md hugo new content content/english/speaking/my-wonderful-event.md
vim content/speaking/my-wonderful-event.md hugo new content content/french/speaking/my-wonderful-event.md
``` ```
English pages that are not translated are automatically published in the
french site too (see the `module.mounts` section of `config.yaml`).
Check locally that your changes are OK: Check locally that your changes are OK:
```sh ```sh
@ -53,17 +65,18 @@ Delete the old branch:
git branch -d "$(date +%F)-update" git branch -d "$(date +%F)-update"
``` ```
## How to update the theme ## Theme
You can update a theme to the latest version by executing the following command in the root directory of your project: The theme lives directly in this repository (`layouts`, `assets`, `i18n` and
`static` directories). It was previously maintained as a git submodule in
[hugo-theme-itix](https://github.com/nmasse-itix/hugo-theme-itix), whose
history has been merged in this repository.
``` It is derived from [hugo-theme-diary](https://github.com/amazingrise/hugo-theme-diary)
git submodule update --rebase --remote and released under the MIT license (see [LICENSE-theme](LICENSE-theme)).
```
## How to change the Chroma style for syntax highlighting ## How to change the Chroma style for syntax highlighting
```sh ```sh
mkdir -p static/css hugo gen chromastyles --style=borland > assets/css/chroma.css
hugo gen chromastyles --style=perldoc > static/css/chroma.css
``` ```

62
assets/css/chroma.css

@ -0,0 +1,62 @@
/* Generated using: hugo gen chromastyles --style=borland */
/* Background */ .bg { background-color:#fff; }
/* PreWrapper */ .chroma { background-color:#fff;-webkit-text-size-adjust:none; }
/* Error */ .chroma .err { color:#a61717;background-color:#e3d2d2 }
/* LineLink */ .chroma .lnlinks { outline:none;text-decoration:none;color:inherit }
/* LineTableTD */ .chroma .lntd { vertical-align:top;padding:0;margin:0;border:0; }
/* LineTable */ .chroma .lntable { border-spacing:0;padding:0;margin:0;border:0; }
/* LineHighlight */ .chroma .hl { background-color:#e5e5e5 }
/* LineNumbersTable */ .chroma .lnt { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f }
/* LineNumbers */ .chroma .ln { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f }
/* Line */ .chroma .line { display:flex; }
/* Keyword */ .chroma .k { color:#000080;font-weight:bold }
/* KeywordConstant */ .chroma .kc { color:#000080;font-weight:bold }
/* KeywordDeclaration */ .chroma .kd { color:#000080;font-weight:bold }
/* KeywordNamespace */ .chroma .kn { color:#000080;font-weight:bold }
/* KeywordPseudo */ .chroma .kp { color:#000080;font-weight:bold }
/* KeywordReserved */ .chroma .kr { color:#000080;font-weight:bold }
/* KeywordType */ .chroma .kt { color:#000080;font-weight:bold }
/* NameAttribute */ .chroma .na { color:#f00 }
/* NameTag */ .chroma .nt { color:#000080;font-weight:bold }
/* LiteralString */ .chroma .s { color:#00f }
/* LiteralStringAffix */ .chroma .sa { color:#00f }
/* LiteralStringBacktick */ .chroma .sb { color:#00f }
/* LiteralStringChar */ .chroma .sc { color:#800080 }
/* LiteralStringDelimiter */ .chroma .dl { color:#00f }
/* LiteralStringDoc */ .chroma .sd { color:#00f }
/* LiteralStringDouble */ .chroma .s2 { color:#00f }
/* LiteralStringEscape */ .chroma .se { color:#00f }
/* LiteralStringHeredoc */ .chroma .sh { color:#00f }
/* LiteralStringInterpol */ .chroma .si { color:#00f }
/* LiteralStringOther */ .chroma .sx { color:#00f }
/* LiteralStringRegex */ .chroma .sr { color:#00f }
/* LiteralStringSingle */ .chroma .s1 { color:#00f }
/* LiteralStringSymbol */ .chroma .ss { color:#00f }
/* LiteralNumber */ .chroma .m { color:#00f }
/* LiteralNumberBin */ .chroma .mb { color:#00f }
/* LiteralNumberFloat */ .chroma .mf { color:#00f }
/* LiteralNumberHex */ .chroma .mh { color:#00f }
/* LiteralNumberInteger */ .chroma .mi { color:#00f }
/* LiteralNumberIntegerLong */ .chroma .il { color:#00f }
/* LiteralNumberOct */ .chroma .mo { color:#00f }
/* OperatorWord */ .chroma .ow { font-weight:bold }
/* Comment */ .chroma .c { color:#080;font-style:italic }
/* CommentHashbang */ .chroma .ch { color:#080;font-style:italic }
/* CommentMultiline */ .chroma .cm { color:#080;font-style:italic }
/* CommentSingle */ .chroma .c1 { color:#080;font-style:italic }
/* CommentSpecial */ .chroma .cs { color:#080;font-weight:bold }
/* CommentPreproc */ .chroma .cp { color:#008080 }
/* CommentPreprocFile */ .chroma .cpf { color:#008080 }
/* GenericDeleted */ .chroma .gd { color:#000;background-color:#fdd }
/* GenericEmph */ .chroma .ge { font-style:italic }
/* GenericError */ .chroma .gr { color:#a00 }
/* GenericHeading */ .chroma .gh { color:#999 }
/* GenericInserted */ .chroma .gi { color:#000;background-color:#dfd }
/* GenericOutput */ .chroma .go { color:#888 }
/* GenericPrompt */ .chroma .gp { color:#555 }
/* GenericStrong */ .chroma .gs { font-weight:bold }
/* GenericSubheading */ .chroma .gu { color:#aaa }
/* GenericTraceback */ .chroma .gt { color:#a00 }
/* GenericUnderline */ .chroma .gl { text-decoration:underline }
/* TextWhitespace */ .chroma .w { color:#bbb }

859
assets/css/itix.css

@ -0,0 +1,859 @@
:root {
/*
* Theme colors
*/
--main-color: #1870c9; /* Adjusted to ensure a 4.5:1 contrast ratio for accessibility */
--main-background-color: #fcfcfc;
--alternate-text-color: #145ca4;
--main-text-color: #092949; /* 50% darker than main-color */
--active-menu-background-color: #f4f8fb;
--active-menu-color: #0e4377;
--active-menu-border-color: #74abe3;
--hover-menu-background-color: #f4f8fb;
--hover-menu-color: #0e4377;
--hover-menu-border-color: #74abe3;
--post-metadata-color: #555;
--text-selection-background-color: #a2c7ec;
--quote-background-color: #f0f5fa;
--quote-border-color: #589bdd;
--codeblock-background-color: #ebf2f9;
--toc-background-color: #f0f5fa;
--pagination-disabled-color: #555;
--table-border-color: #092949;
/*
* Layout
*/
--menu-container-width: 25%;
--toolbar-container-width: 25%;
/*
* Fonts
*/
--default-font-list: "Source Serif Pro", serif;
--mono-font-list: "JetBrains Mono", monospace;
--sans-preferred-font-list: "Source Sans Pro", sans-serif;
}
/*
* Fonts
*/
@font-face{
font-family: 'JetBrains Mono';
src: url('/fonts/JetBrainsMono-Regular.woff2') format('woff2'),
url('/fonts/JetBrainsMono-Regular.woff') format('woff'),
url('/fonts/JetBrainsMono-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
/*
* Core Web Vitals / Cumulative Layout Shift.
*
* Avoid showing invisible text while custom fonts load.
*/
font-display: swap;
}
@font-face{
font-family: 'Source Serif Pro';
src: url('/fonts/SourceSerifPro-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
/*
* Core Web Vitals / Cumulative Layout Shift.
*
* Avoid showing invisible text while custom fonts load.
*/
font-display: swap;
}
@font-face{
font-family: 'Source Sans Pro';
src: url('/fonts/SourceSansPro-Regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
/*
* Core Web Vitals / Cumulative Layout Shift.
*
* Avoid showing invisible text while custom fonts load.
*/
font-display: swap;
}
/*
* General settings
*/
::selection {
/* Text selection uses the theme main color with some transparency */
background: var(--text-selection-background-color);
}
body {
background: var(--main-background-color);
padding: 0;
margin: 0;
font-family: var(--default-font-list);
color: var(--main-text-color);
}
* {
/* By default in the CSS box model, the width and height you assign to an
* element is applied only to the element's content box. If the element has
* any border or padding, this is then added to the width and height to arrive
* at the size of the box that's rendered on the screen. This means that when
* you set width and height, you have to adjust the value you give to allow
* for any border or padding that may be added.
*
* border-box tells the browser to account for any border and padding in the
* values you specify for an element's width and height. If you set an element's
* width to 100 pixels, that 100 pixels will include any border or padding you
* added, and the content box will shrink to absorb that extra width.
* This typically makes it much easier to size elements.
*/
box-sizing: border-box;
}
/*
* Heading and figure numbering
*/
main, #TableOfContents {
/*
* all counters need to be specified on one single line
* and they have to be reset on an enclosing element
*/
counter-reset: h2 figcaption;
}
h2::before, #TableOfContents > ul > li::before {
content: counter(h2) ".\0000a0\0000a0"; /* \0000a0 => Non-breakable space */
counter-increment: h2;
}
h2, #TableOfContents > ul > li {
counter-reset: h3;
}
h3::before, #TableOfContents > ul > li > ul > li::before {
content: counter(h2) "." counter(h3) ".\0000a0\0000a0";
counter-increment: h3;
}
figcaption::before {
/*
* When the numbering is done in CSS, we cannot honor typographical
* conventions of the user language. So, here I chose the english convention
* with no space before the colon and a space after.
*/
content: "Figure " counter(figcaption) ": ";
counter-increment: figcaption;
}
/*
* Main content formatting
*/
h1, h2, h3 {
font-weight: bold;
line-height: 1.5em;
}
h1, h2, h3, h4, h5, h6 {
margin: 20px 0 20px 0;
}
h1 {
font-size: 30px;
}
h2 {
font-size: 24px;
}
h3 {
font-size: 21px;
}
h4 {
font-size: 21px;
}
h5 {
font-size: 20px;
}
h6 {
font-size: 19px;
}
figure {
margin: 0;
}
figure figcaption {
font-style: italic;
}
ul {
list-style-type: "\2013\0000a0";
list-style-position: outside;
}
textarea,
select,
input,
button {
outline: none !important;
}
main table {
table-layout: fixed;
overflow-x: scroll;
border-collapse: collapse;
width: 100%;
table-layout: auto;
}
main table td, main table th {
border: 1px solid var(--table-border-color);
padding: 0.2rem 0.5rem;
}
button {
cursor: pointer;
}
blockquote {
padding: 10px 20px;
border-left: 3px solid var(--quote-border-color);
color: var(--alternate-text-color);
background: var(--quote-background-color);
}
blockquote p {
margin-bottom: 0;
}
blockquote * {
color: var(--alternate-text-color);
}
a {
color: var(--main-color);
}
a:hover {
color: var(--alternate-text-color);
}
/*
* Code block
*/
pre.chroma {
/* Overide the default chroma background color with ours */
background: var(--codeblock-background-color);
}
/* Code block (three backticks in markdown) */
pre {
background: var(--codeblock-background-color);
padding: 12px 15px;
border-radius: 5px;
font-family: var(--mono-font-list);
/* Do not wrap lines of code */
overflow-x: hidden;
/* Hide scrollbar for IE, Edge and Firefox */
-ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */
}
/* Hide scrollbar for Chrome, Safari and Opera */
pre::-webkit-scrollbar {
display: none;
}
/* Inline code (single backticks in markdown) */
code {
color: var(--alternate-text-color);
background: var(--codeblock-background-color) !important;
padding: 2px 5px;
border-radius: 3px;
font-family: var(--mono-font-list);
}
/*
* And because there is a code tag inside a pre tag for Markdown code blocks,
* we need to overide some properties
*/
pre code {
background: none !important;
font-family: var(--mono-font-list) !important;
padding: 0;
}
/*
* Highlighted file has a wrapping div. Some properties are redefined for it
* and reset to their default value for its children.
*/
.highlightedFile {
background: var(--codeblock-background-color);
border-radius: 5px;
}
.highlightedFile .filename {
border-bottom: 2px solid var(--hover-menu-border-color);
font-family: var(--sans-preferred-font-list) !important;
font-size: larger;
padding: 12px 15px;
}
.highlightedFile pre {
background: inherit;
border-radius: inherit;
padding: 12px 15px;
margin: 0;
}
pre:hover {
/* Show the horizontal scroll bar when hovering code (if needed) */
overflow-x: auto;
}
/*
* i18n
*/
.tiny-flag {
vertical-align: middle;
margin-left: 5px;
margin-right: 5px;
}
/*
* Pagination
*/
.pagination {
list-style: none;
padding: 0;
text-align: center;
font-size: larger;
}
.pagination .page-item {
display: inline;
margin: 5px;
}
.pagination .disabled {
color: var(--pagination-disabled-color);
}
.pagination .active {
font-weight: bold;
}
/*
* Article list
*/
.article-list p {
/* Move the excerpt closer to the metadata */
margin-top: 0.5em;
/* Add spacing around each item of the list */
margin-bottom: 2.5em;
}
.article-list h4 {
/* Move the title closer to the metadata */
margin-bottom: 0.5em;
}
.article-list .post-metadata {
/* Fade the metadata */
color: var(--post-metadata-color);
}
.article-list .continue-reading {
/* Leave some space between the excerpt and the "continue reading" link */
margin-left: 0.5em;
}
/*
* Post Metadata (valid for the "list" and "single" views)
*/
.post-metadata .material-icons {
vertical-align: sub;
margin-right: 3px;
margin-left: 5px;
max-height: 1rem;
}
.post-metadata time {
/* Leave some space between publication date and taxonomies */
margin-right: 20px;
}
article .post-metadata {
/* Leave some space between the metadata and the title */
margin-top: 20px;
}
/*
* Single post layout
*/
article {
padding: 50px 35px 20px 35px;
font-size: 16px;
line-height: 1.5em;
}
article img, article video {
max-width: 100%;
height: auto;
border-radius: 5px;
overflow: hidden;
}
article p {
text-align: justify;
text-justify: inter-word;
}
article header {
padding-bottom: 30px;
font-style: normal;
line-height: 1.5em;
/* Align the site title with the article title */
padding-top: 11px;
}
/* Article title */
article header h1 {
font-size: 30px;
margin: 0;
}
/* Article subtitle */
article header h4 {
font-size: 18px;
opacity: 0.6;
padding: 0px 0 8px 0;
}
/*
* Menu (left side)
*/
.menu-lang {
padding-right: 28px;
}
.menu-head, .menu-link-list a, .menu-head:hover, .menu-link-list a:hover {
display: block;
text-decoration: none !important;
cursor: pointer;
border-right: 2px solid transparent;
}
.menu-head.active, .menu-link-list a.active {
border-right: 2px solid var(--active-menu-border-color);
background: var(--active-menu-background-color);
color: var(--active-menu-color);
}
.menu-head:hover, .menu-link-list a:hover {
border-right: 2px solid var(--hover-menu-border-color);
background: var(--hover-menu-background-color);
color: var(--hover-menu-color);
}
.menu-footer {
padding: 20px 30px 0 20px;
font-size: 12px;
}
.menu-head {
padding: 30px 28px 30px 20px;
margin-bottom: 10px;
color: var(--main-text-color);
}
.menu-title {
--menu-title-size: 30px;
font-size: var(--menu-title-size);
line-height: calc(var(--menu-title-size) * 1.4);
}
.menu-subtitle {
margin-top: 8px;
font-size: 18px;
}
.menu-link-list {
flex-grow: 1;
}
.menu-link-list a {
font-size: 20px;
margin-bottom: 10px;
padding: 8px 28px 8px 30px;
color: var(--main-text-color);
}
.menu-content {
position: fixed;
top: 0;
height: 100vh;
width: var(--menu-container-width);
text-align: right;
font-family: var(--sans-preferred-font-list);
padding: 20px 0 50px 0;
display: flex;
flex-direction: column;
justify-content: space-between;
/* Below the hamburger menu but on top of the overlay */
z-index: 253;
}
/*
* Hamburger menu
*/
.menu input.hamburger-menu {
display: block;
width: 80px;
height: 72px;
position: fixed;
top: 0px;
left: 0px;
margin: 0;
cursor: pointer;
opacity: 0; /* hide this */
z-index: 255; /* and place it over the hamburger */
-webkit-touch-callout: none;
}
/*
* Draw the hamburger
*/
.menu div.hamburger-menu {
width: 32px;
height: 4px;
position: fixed;
left: 24px;
background: var(--main-text-color);
border-radius: 3px;
z-index: 254;
transform-origin: center;
transition: transform 0.5s cubic-bezier(0.77,0.2,0.05,1.0),
opacity 0.55s ease;
}
.menu div.hamburger-menu:nth-child(2) {
top: 25px;
}
.menu div.hamburger-menu:nth-child(3) {
top: 34px;
}
.menu div.hamburger-menu:nth-child(4) {
top: 43px;
}
/* Transform all the slices of hamburger into a crossmark. */
.menu input.hamburger-menu:checked ~ div.hamburger-menu:nth-child(2) {
opacity: 1;
transform: translate(0, 9px) rotate(45deg);
}
/* But let's hide the middle one. */
.menu input.hamburger-menu:checked ~ div.hamburger-menu:nth-child(3) {
opacity: 0;
transform: rotate(0deg) scale(0.2, 0.2);
}
/* And the last one should go the other direction */
.menu input.hamburger-menu:checked ~ div.hamburger-menu:nth-child(4) {
transform: translate(0, -9px) rotate(-45deg);
}
/* On mobile browsers, keep a title displayed on top */
.menu .mobile-title {
padding: 20px 80px 20px 80px;
margin: 0;
width: 100%;
height: 80px;
line-height: 40px; /* line-height = height - padding-top - padding-bottom */
text-align: center;
font-size: calc(var(--heading1-size) - 3 * var(--heading-diff));
font-weight: bold;
position: fixed;
box-shadow: 0 0 16px rgba(0, 0, 0, 0.12);
background-color: var(--main-background-color);
}
/* But hide them by default. They will be uncovered when needed by media queries */
.menu .hamburger-menu, .menu .mobile-title {
display: none;
}
/*
* Toolbar (right side)
*/
.toolbar {
position: fixed;
top: 0;
right: 0;
width: var(--toolbar-container-width);
font-family: var(--sans-preferred-font-list);
display: flex;
flex-direction: column;
justify-content: flex-end;
}
.actions {
position: fixed;
bottom: 0;
display: flex;
flex-direction: row;
margin-bottom: 50px;
margin-left: 30px;
}
.actions .action {
display: flex;
flex-direction: column;
cursor: pointer;
margin-right: 10px;
}
.actions a {
text-decoration: none;
color: var(--main-text-color);
}
.actions a:visited {
color: var(--main-text-color);
}
.actions .material-icons {
height: 2rem;
width: auto;
}
/*
* Search page
*/
.search input {
width: 100%;
}
@media screen {
/*
* Main part of the page (center)
*
* Enclosed in @media screen block because this style is not desired for
* printing.
*/
main {
padding-left: var(--menu-container-width);
padding-right: var(--toolbar-container-width);
width: 100%;
min-height: 100vh;
}
/* Immediate children of main gets a left/right shadow */
main > * {
box-shadow: 0 0 16px rgba(0, 0, 0, 0.12);
min-height: 100vh;
}
}
/*
* Table of content (within the toolbar on the right)
*/
.toc {
float: right;
border-radius: 5px;
margin-left: 30px;
margin-right: 60px;
margin-top: 30px;
max-width: 260px;
max-height: 80vh;
overflow: auto;
background: var(--toc-background-color);
padding: 20px;
font-size: 16px;
}
.toc ul {
list-style: none;
padding: 0;
margin: 0;
line-height: 1.7em;
}
.toc h4 {
text-align: center;
margin: 0 0 10px 0;
}
/* Mathjax container */
mjx-container {
overflow-y: hidden !important;
}
/*
* Reactive tweaks
*/
@media screen and (max-width: 1440px) {
:root {
--menu-container-width: 20%;
}
}
@media screen and (max-width: 1280px) {
.toc {
display: none;
}
:root {
--toolbar-container-width: 5%;
}
}
@media screen and (max-width: 1140px) {
article {
padding: 30px 20px 20px 20px;
}
main {
padding: 0;
min-height: unset;
}
.toolbar {
display: none;
}
.toc {
line-height: 2em;
float: none;
margin-top: 30px;
margin-left: 0;
margin-right: 0;
}
/*
* On mobile devices, there are no :hover events. So we must always
* propose horizontal scrollbars when needed.
*/
pre {
overflow-x: auto;
}
.menu .hamburger-menu, .menu .mobile-title {
display: block;
}
/*
* On mobile, leave some room above the article so that the title + hamburger
* menu do not hide the article title.
*/
main > *:first-child {
padding-top: 110px;
}
.menu .menu-content {
width: 300px;
left: -300px;
height: 100vh;
background-color: var(--main-background-color);
position: fixed;
transform: none;
transition: transform 0.2s linear;
}
.menu .menu-overlay {
display: block;
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
transition: background-color 0.2s linear;
/*
* Put the overlay on the bottom of the stack so that it does not catch
* click events.
*/
z-index: -1;
}
/*
* When the hamburger menu is clicked, show the menu content and enable
* the overlay that hides the article content.
*/
.menu input.hamburger-menu:checked ~ .menu-content {
transform: translate(300px, 0);
}
.menu input.hamburger-menu:checked ~ .menu-overlay {
/* Semi transparent background */
background-color: rgba(0, 0, 0, 0.5);
/* Below the hamburger menu, the menu content but over the article content */
z-index: 250;
}
/*
* Leave some room between the list items in the term pages so that it is
* easier to click on mobile. Also makes Google happy.
*/
.terms ul li {
line-height: 2em;
}
}
@media screen and (max-width: 512px) {
/*
* On mobile, hide some post metadata
*/
.post-metadata .opensource, .post-metadata .topic, .post-metadata .reading-time {
display: none;
}
}
/*
* Tweaks for printing
*/
@media print {
.menu, .menu-content, .hamburger-menu, .toolbar {
display: none !important;
}
/* Since you cannot scroll horizontally on a paper, wrap the code blocks */
pre {
white-space: pre-wrap;
word-break: break-all;
word-wrap: break-word;
}
}

49
config.yaml

@ -1,24 +1,21 @@
baseURL: "/" baseURL: "/"
title: "Nicolas Massé" title: "Nicolas Massé"
author: "Nicolas Massé" author: "Nicolas Massé"
theme: "itix"
# pygmentsUseClasses implies a style sheet that can be generated as follow:
# hugo gen chromastyles --style=borland > static/css/chroma.css
pygmentsUseClasses: true
pygmentsCodefences: true
enableRobotsTXT: true enableRobotsTXT: true
# Keep the taxonomy terms as they are written in the front matter
capitalizeListTitles: false
blackfriday: markup:
extensionsmask: highlight:
# No "a" tag on bare links # Use CSS classes for syntax highlighting. The style sheet is generated with:
- autolink # hugo gen chromastyles --style=borland > assets/css/chroma.css
noClasses: false
defaultContentLanguage: "en" defaultContentLanguage: "en"
languages: languages:
en: en:
weight: 1 weight: 1
languageName: English label: English
contentDir: content/english
menu: menu:
main: main:
- name: "Articles" - name: "Articles"
@ -44,8 +41,7 @@ languages:
url: "https://www.linkedin.com/in/nicolasmasse/" url: "https://www.linkedin.com/in/nicolasmasse/"
fr: fr:
weight: 2 weight: 2
languageName: Français label: Français
contentDir: content/french
menu: menu:
main: main:
- name: "Articles" - name: "Articles"
@ -70,6 +66,26 @@ languages:
weight: 70 weight: 70
url: "https://www.linkedin.com/in/nicolasmasse/" url: "https://www.linkedin.com/in/nicolasmasse/"
# The french site contains the french content plus the english content that
# has not been translated (french files take precedence over english files).
module:
mounts:
- source: content/english
target: content
sites:
matrix:
languages: [en]
- source: content/french
target: content
sites:
matrix:
languages: [fr]
- source: content/english
target: content
sites:
matrix:
languages: [fr]
taxonomies: taxonomies:
opensource: "opensource" opensource: "opensource"
topic: "topics" topic: "topics"
@ -79,3 +95,10 @@ params:
enablePlausible: false enablePlausible: false
images: images:
- /images/avatar-2022-12.webp - /images/avatar-2022-12.webp
# Only publish the page resources that are actually used (images, attached
# files, etc.) and not the source files that sit next to them (xcf, heic,
# raw videos, etc.).
cascade:
build:
publishResources: false

3
content/english/blog/_index.md

@ -0,0 +1,3 @@
---
title: "Articles"
---

1
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-dry-run.png

@ -1 +0,0 @@
../../../french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-dry-run.png

3
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-dry-run.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2ff6860a11084f46c66a6a97b894bd2d862926cf0c9556713d40930f4201e4f1
size 46993

1
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-no-time.png

@ -1 +0,0 @@
../../../french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-no-time.png

3
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-no-time.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7140091b707a1c40b560242d3177f3e078540836ab699228f99ac421f6445287
size 160790

1
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-with-time.png

@ -1 +0,0 @@
../../../french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-with-time.png

3
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-with-time.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3bae94879ffedec0bf6298e8d2ca24b79401e78b9ef2055cb8d2f2d0ed3cdf0d
size 155225

1
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/exercise-validation.png

@ -1 +0,0 @@
../../../french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/exercise-validation.png

3
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/exercise-validation.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f26b11e956df0f72af3aa6391edb86d603872ca48614bb6ec599f990a0d58bde
size 86022

1
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-explore-opencodequest-leaderboard-hero.png

@ -1 +0,0 @@
../../../french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-explore-opencodequest-leaderboard-hero.png

3
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-explore-opencodequest-leaderboard-hero.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bb1abcb74778fb7082811410777496acce38676af018a58af78bbbf68cfda464
size 150430

1
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-instant-snapshot.png

@ -1 +0,0 @@
../../../french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-instant-snapshot.png

3
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-instant-snapshot.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c505527895a78b1f1ced45259e668701c7ed32c032ba7a522becc3e6e4530deb
size 126683

1
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-lifetime-bonus.png

@ -1 +0,0 @@
../../../french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-lifetime-bonus.png

3
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-lifetime-bonus.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:43315418672bc1cd7d6fb791e3fe5f4dfc1ecf49f0503183f3bc679fb5a413db
size 73438

1
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-onetime-bonus.png

@ -1 +0,0 @@
../../../french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-onetime-bonus.png

3
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-onetime-bonus.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ddf5ac592a481defc683c867d4d2f64f49be843d690447377537c8ef9f8df3c6
size 102237

1
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-points-over-time.png

@ -1 +0,0 @@
../../../french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-points-over-time.png

3
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-points-over-time.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:05a25085da5f7eddec3bccf11648253018fc6541e5a09363c36cdf753c7215ba
size 103501

1
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard.png

@ -1 +0,0 @@
../../../french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard.png

3
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bc019d5c67817b9e9865a151dc6e9e82d642d68f6837372d86986ca42b0ebde1
size 135029

1
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-points.png

@ -1 +0,0 @@
../../../french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-points.png

3
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-points.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a1f2e71acbdd905e58dbd69f0e7e05e431b3131e69c393fe1811c82d68ec6356
size 435109

1
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/leaderboard-simulation.gif

@ -1 +0,0 @@
../../../french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/leaderboard-simulation.gif

Before

Width:  |  Height:  |  Size: 111 B

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/leaderboard-simulation.gif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 B

After

Width:  |  Height:  |  Size: 1.8 MiB

1
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/redhat-acm-observability-architecture.png

@ -1 +0,0 @@
../../../french/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/redhat-acm-observability-architecture.png

3
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/redhat-acm-observability-architecture.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2c45426fa458b790c4c075e2a69ebc3d31eba85c568ab638a3b3396f59fb3d12
size 944177

1
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/redhat-acm-observability-architecture.svg

@ -1 +0,0 @@
../../../french/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/redhat-acm-observability-architecture.svg

Before

Width:  |  Height:  |  Size: 138 B

After

Width:  |  Height:  |  Size: 936 KiB

4
content/english/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/redhat-acm-observability-architecture.svg

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 138 B

After

Width:  |  Height:  |  Size: 936 KiB

1
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/aws-console-efs.png

@ -1 +0,0 @@
../../../french/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/aws-console-efs.png

3
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/aws-console-efs.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9dbf6db819810a2548089b283c823c972ecefc228b052c7bcb66a72784e8539f
size 87604

1
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/aws-console-security-group.png

@ -1 +0,0 @@
../../../french/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/aws-console-security-group.png

3
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/aws-console-security-group.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1631bfcd754ee801fd46a2062d24284ed9485e479796dd616a9bc3990b6b88ae
size 137321

1
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/openshift-console-three-nodes-x86_64-and-arm64.png

@ -1 +0,0 @@
../../../french/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/openshift-console-three-nodes-x86_64-and-arm64.png

3
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/openshift-console-three-nodes-x86_64-and-arm64.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c8c5d9c7d7d1b6b9f132bc127cff576d7a5eba1ae00dfea10ecaf1de7c06e9bf
size 77593

1
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/overview.svg

@ -1 +0,0 @@
../../../french/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/overview.svg

Before

Width:  |  Height:  |  Size: 110 B

After

Width:  |  Height:  |  Size: 93 KiB

378
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/overview.svg

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 110 B

After

Width:  |  Height:  |  Size: 93 KiB

1
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/quay-image-containerfile.png

@ -1 +0,0 @@
../../../french/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/quay-image-containerfile.png

3
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/quay-image-containerfile.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5cfc3858a68d16f6a8f85dc9ba6d31a8b97ace492d7e89ce119030b7fdf38704
size 75012

1
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/sources

@ -1 +0,0 @@
../../../french/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/sources

451
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/sources/overview.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 96 KiB

1
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-containerfile.png

@ -1 +0,0 @@
../../../french/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-containerfile.png

3
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-containerfile.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8aa152d6493ba7e3750f8f11918ca9e1fba179a2bf2a4cefb7879a1c1a8223e8
size 106228

1
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-nodejs.png

@ -1 +0,0 @@
../../../french/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-nodejs.png

3
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-nodejs.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:080bd61cdc84c0cefdcd510d7cf1dc0b0cd0c10131b47fcb22b3b94c7cb5ba82
size 121261

1
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-quarkus.png

@ -1 +0,0 @@
../../../french/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-quarkus.png

3
content/english/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/tekton-pipeline-quarkus.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:dbae60f9acc436edfd70d5b1be78a783c034ebb827f8ec59b7bfb6b10f698900
size 117867

2
content/english/blog/configure-redhat-sso-3scale-cli/index.md

@ -98,7 +98,7 @@ You can use the following URL for the **OpenID Connect Issuer** (replace $SSO_HO
https://zync:s3cr3t@$SSO_HOSTNAME/auth/realms/3scale https://zync:s3cr3t@$SSO_HOSTNAME/auth/realms/3scale
``` ```
{{< figure src="openid-connect-issuer.png" title="OpenID Connect Issuer settings in the 3scale Admin Portal." >}} {{< attachedFigure src="openid-connect-issuer.png" title="OpenID Connect Issuer settings in the 3scale Admin Portal." >}}
Or when [deploying an API in 3scale with the 3scale toolbox](https://developers.redhat.com/blog/2019/07/29/3scale-toolbox-deploy-an-api-from-the-cli/), you can use: Or when [deploying an API in 3scale with the 3scale toolbox](https://developers.redhat.com/blog/2019/07/29/3scale-toolbox-deploy-an-api-from-the-cli/), you can use:

2
content/english/blog/deploying-invidious-openshift.md

@ -65,7 +65,7 @@ oc set volume dc/postgresql --add -t configmap --name postgresql-init \
-m /opt/app-root/src/postgresql-start -m /opt/app-root/src/postgresql-start
``` ```
Because of a <s>bug</s> feature in the [PostgreSQL base image](https://github.com/sclorg/postgresql-container) (see [#351](https://github.com/sclorg/postgresql-container/issues/351)), we need to hack a little bit the PostgreSQL image. Because of a ~~bug~~ feature in the [PostgreSQL base image](https://github.com/sclorg/postgresql-container) (see [#351](https://github.com/sclorg/postgresql-container/issues/351)), we need to hack a little bit the PostgreSQL image.
```sh ```sh
cat <<"EOF" > /tmp/common.sh cat <<"EOF" > /tmp/common.sh

2
content/english/blog/deploying-miniflux-openshift.md

@ -48,7 +48,7 @@ oc set volume dc/postgresql --add -t configmap --name postgresql-init \
-m /opt/app-root/src/postgresql-start -m /opt/app-root/src/postgresql-start
``` ```
Because of a <s>bug</s> feature in the [PostgreSQL base image](https://github.com/sclorg/postgresql-container) (see [#351](https://github.com/sclorg/postgresql-container/issues/351)), we need to hack a little bit the PostgreSQL image. Because of a ~~bug~~ feature in the [PostgreSQL base image](https://github.com/sclorg/postgresql-container) (see [#351](https://github.com/sclorg/postgresql-container/issues/351)), we need to hack a little bit the PostgreSQL image.
```sh ```sh
cat <<"EOF" > /tmp/common.sh cat <<"EOF" > /tmp/common.sh

1
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/ampere-altra-q64-22.jpeg

@ -1 +0,0 @@
../../../french/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/ampere-altra-q64-22.jpeg

3
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/ampere-altra-q64-22.jpeg

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:95ca7691b894fa2aeb4484b5776569c27c6de992ec15688072731344c4f85c62
size 617530

1
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/fans-air-flow.webp

@ -1 +0,0 @@
../../../french/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/fans-air-flow.webp

Before

Width:  |  Height:  |  Size: 110 B

After

Width:  |  Height:  |  Size: 781 KiB

BIN
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/fans-air-flow.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

After

Width:  |  Height:  |  Size: 781 KiB

1
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/final-product.webp

@ -1 +0,0 @@
../../../french/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/final-product.webp

Before

Width:  |  Height:  |  Size: 110 B

After

Width:  |  Height:  |  Size: 617 KiB

BIN
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/final-product.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

After

Width:  |  Height:  |  Size: 617 KiB

1
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/hp-dl20-gen9.webp

@ -1 +0,0 @@
../../../french/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/hp-dl20-gen9.webp

Before

Width:  |  Height:  |  Size: 109 B

After

Width:  |  Height:  |  Size: 148 KiB

BIN
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/hp-dl20-gen9.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 B

After

Width:  |  Height:  |  Size: 148 KiB

1
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/innovision-m24306.jpeg

@ -1 +0,0 @@
../../../french/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/innovision-m24306.jpeg

3
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/innovision-m24306.jpeg

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:025ceaa0fba8be2362157ba1b5727b4a1eb0312bd290e20e89a81e421f1519f5
size 144994

1
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/internal-layout.webp

@ -1 +0,0 @@
../../../french/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/internal-layout.webp

Before

Width:  |  Height:  |  Size: 112 B

After

Width:  |  Height:  |  Size: 819 KiB

BIN
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/internal-layout.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 B

After

Width:  |  Height:  |  Size: 819 KiB

1
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/more-nvme-storage.webp

@ -1 +0,0 @@
../../../french/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/more-nvme-storage.webp

Before

Width:  |  Height:  |  Size: 114 B

After

Width:  |  Height:  |  Size: 778 KiB

BIN
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/more-nvme-storage.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 B

After

Width:  |  Height:  |  Size: 778 KiB

1
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/nvme-storage.jpeg

@ -1 +0,0 @@
../../../french/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/nvme-storage.jpeg

3
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/nvme-storage.jpeg

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:deb12323d1e403abfac6f3118b8005493b7b097ee49dee06d3af9b2dda24fd2f
size 368698

1
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/perspective-view.webp

@ -1 +0,0 @@
../../../french/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/perspective-view.webp

Before

Width:  |  Height:  |  Size: 113 B

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/perspective-view.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 B

After

Width:  |  Height:  |  Size: 1.5 MiB

1
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/psu-fsp.webp

@ -1 +0,0 @@
../../../french/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/psu-fsp.webp

Before

Width:  |  Height:  |  Size: 104 B

After

Width:  |  Height:  |  Size: 110 KiB

BIN
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/psu-fsp.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 B

After

Width:  |  Height:  |  Size: 110 KiB

1
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/slimsas-cables.webp

@ -1 +0,0 @@
../../../french/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/slimsas-cables.webp

Before

Width:  |  Height:  |  Size: 111 B

After

Width:  |  Height:  |  Size: 798 KiB

BIN
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/slimsas-cables.webp

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 B

After

Width:  |  Height:  |  Size: 798 KiB

1
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/vga-not-connected.jpeg

@ -1 +0,0 @@
../../../french/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/vga-not-connected.jpeg

3
content/english/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/vga-not-connected.jpeg

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e7c022b7d7c350e4bff9920f77f5f27f833f22401c9a3ab31163069a43ada164
size 318777

2
content/english/blog/install-openwrt-raspberry-pi/index.md

@ -72,7 +72,7 @@ screen /dev/ttyUSB0 115200
You then need to connect the VIN, GND, TXD and RXD wires to the correct GPIO pins of your Raspberry PI. You then need to connect the VIN, GND, TXD and RXD wires to the correct GPIO pins of your Raspberry PI.
{{< figure src="uart-pins.jpeg" title="The UART Pins of the Raspberry PI 3" >}} {{< attachedFigure src="uart-pins.jpeg" title="The UART Pins of the Raspberry PI 3" >}}
Power-on your Raspberry PI, wait a couple seconds and press enter to display the OpenWRT prompt. Power-on your Raspberry PI, wait a couple seconds and press enter to display the OpenWRT prompt.

1
content/english/speaking/devoxx-france-2019/on-stage-1.jpg

@ -1 +0,0 @@
../../../french/speaking/devoxx-france-2019/on-stage-1.jpg

3
content/english/speaking/devoxx-france-2019/on-stage-1.jpg

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e67f33dd74983b701855fbe16fa14d8942ec6dc52f9009ab1e3d9232ca1ee3b1
size 420606

1
content/english/speaking/devoxx-france-2019/on-stage-2.jpg

@ -1 +0,0 @@
../../../french/speaking/devoxx-france-2019/on-stage-2.jpg

3
content/english/speaking/devoxx-france-2019/on-stage-2.jpg

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cea4d491b1c594de96de49fcd43a59ee5a748a20ac5fa346fe8635459634ee78
size 435621

1
content/english/speaking/devoxx-france-2019/on-stage-3.jpg

@ -1 +0,0 @@
../../../french/speaking/devoxx-france-2019/on-stage-3.jpg

3
content/english/speaking/devoxx-france-2019/on-stage-3.jpg

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7fdfdf7c8ea827a446ff1dbd0481e2f2cefe227c705e7a6368ec2a7aa719115b
size 399789

1
content/english/speaking/devoxx-france-2019/on-stage-4.jpg

@ -1 +0,0 @@
../../../french/speaking/devoxx-france-2019/on-stage-4.jpg

3
content/english/speaking/devoxx-france-2019/on-stage-4.jpg

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:95b2fa7afb1eb149668c6359375e5aa24c8191e84ed97918407f27eef9a439f3
size 429054

1
content/english/speaking/devoxx-france-2019/on-stage-5.jpg

@ -1 +0,0 @@
../../../french/speaking/devoxx-france-2019/on-stage-5.jpg

3
content/english/speaking/devoxx-france-2019/on-stage-5.jpg

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b81ccd715d20f283126d48fff9b664b1b0c21df07f66d3bb43bd1ed8fe04b997
size 394796

1
content/english/speaking/devoxx-france-2019/tweet-PetitMel_issa.png

@ -1 +0,0 @@
../../../french/speaking/devoxx-france-2019/tweet-PetitMel_issa.png

3
content/english/speaking/devoxx-france-2019/tweet-PetitMel_issa.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:30c34d95c648e3ea1b09e97abb4a938ea05d37c4f8a495b80cdf80178d6cda21
size 303388

1
content/english/speaking/devoxx-france-2019/tweet-cgodard.png

@ -1 +0,0 @@
../../../french/speaking/devoxx-france-2019/tweet-cgodard.png

3
content/english/speaking/devoxx-france-2019/tweet-cgodard.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:83e27c09bb815e1cb70f41101f50520609626ebc8a295f5a8a17d0dd5055619a
size 245111

1
content/english/speaking/devoxx-france-2019/tweet-gbloquel.png

@ -1 +0,0 @@
../../../french/speaking/devoxx-france-2019/tweet-gbloquel.png

3
content/english/speaking/devoxx-france-2019/tweet-gbloquel.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b814003522c97f4968a1e7bb7756000dd22371d3c7e283cb3c8fce07b57f25e7
size 293865

1
content/english/speaking/devoxx-france-2019/tweet-lbroudoux.png

@ -1 +0,0 @@
../../../french/speaking/devoxx-france-2019/tweet-lbroudoux.png

3
content/english/speaking/devoxx-france-2019/tweet-lbroudoux.png

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:96b8796bca0850d5438495a82ddcea968bc3c8f29d45d7a1d6f625cf57d07ad9
size 435971

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save