A better CV #4
41
.spelling
41
.spelling
@@ -74,6 +74,34 @@ themenbereiche
|
||||
änderungen
|
||||
auszuführen
|
||||
zeitraum
|
||||
GitOps
|
||||
FluxCD
|
||||
gitlab
|
||||
restic
|
||||
vaultwarden
|
||||
standort
|
||||
höchstleistungen
|
||||
Fähigkeiten
|
||||
docker
|
||||
Golang
|
||||
Datenbankverwaltung
|
||||
Einführung
|
||||
selbstverwalteten
|
||||
Entwicklungsteams
|
||||
Zugriffsmanagement
|
||||
Ausführung
|
||||
Deployments
|
||||
größeren
|
||||
kundenorientierter
|
||||
Datenbank-Lifecycle-Managements
|
||||
Refactoring
|
||||
Ablösung
|
||||
CD-Lösung
|
||||
Preview-Environments
|
||||
Daten-Streaming
|
||||
JavaScript
|
||||
Zugriffsrechten
|
||||
Repositories
|
||||
- index.md
|
||||
Rodionov
|
||||
db-operator
|
||||
@@ -126,3 +154,16 @@ Blue-Green-RabbitMQ-Deployments
|
||||
Kubernetes-Backends
|
||||
Faro
|
||||
Minio-Bucket
|
||||
Open-Source-Kubernetes-Operators
|
||||
Deployment-Workflows
|
||||
Selenoid-Backends
|
||||
db-operator
|
||||
Terraform-Codebasis
|
||||
Downtime
|
||||
Cross-Cloud-Backup-Strategien
|
||||
Federated-Prometheus-Cluster
|
||||
- ./english/index.md
|
||||
Golang
|
||||
selenoid
|
||||
golang
|
||||
db-operator
|
||||
|
||||
@@ -20,6 +20,8 @@ steps:
|
||||
securityContext:
|
||||
privileged: true
|
||||
commands:
|
||||
- mkdir -p ~/.local/share/fonts
|
||||
- cp ./fonts/fira_sans/* ~/.local/share/fonts/
|
||||
- apt-get update
|
||||
- |-
|
||||
apt-get install -y libx11-xcb1 libxcomposite1 libasound2 \
|
||||
|
||||
144
css/nord_dark.css
Normal file
144
css/nord_dark.css
Normal file
@@ -0,0 +1,144 @@
|
||||
/* ===============================
|
||||
Nord Dark – Compact Markdown
|
||||
github-markdown-css compatible
|
||||
=============================== */
|
||||
|
||||
.markdown-body {
|
||||
background: #2E3440;
|
||||
color: #D8DEE9;
|
||||
font-family: "Fira Sans";
|
||||
font-size: 15px;
|
||||
line-height: 1.55;
|
||||
padding-top: 2.0rem;
|
||||
padding-bottom: 1.0rem;
|
||||
padding-right: 3.0rem;
|
||||
padding-left: 3.0rem;
|
||||
}
|
||||
|
||||
/* Headings */
|
||||
.markdown-body h1,
|
||||
.markdown-body h2,
|
||||
.markdown-body h3,
|
||||
.markdown-body h4,
|
||||
.markdown-body h5,
|
||||
.markdown-body h6 {
|
||||
border: none;
|
||||
margin-top: 1.2em;
|
||||
margin-bottom: 0.4em;
|
||||
font-weight: 700;
|
||||
color: #ECEFF4;
|
||||
}
|
||||
|
||||
.markdown-body h1 { font-size: 1.9em; }
|
||||
.markdown-body h2 { font-size: 1.6em; }
|
||||
.markdown-body h3 { font-size: 1.35em; }
|
||||
.markdown-body h4 { font-size: 1.15em; }
|
||||
.markdown-body h5 { font-size: 1.02em; }
|
||||
.markdown-body h6 { font-size: 0.95em; }
|
||||
|
||||
/* Paragraphs */
|
||||
.markdown-body p {
|
||||
margin: 0.55em 0;
|
||||
}
|
||||
|
||||
/* Blockquotes – SAME vertical spacing as paragraphs */
|
||||
.markdown-body blockquote {
|
||||
margin: 0.55em 0;
|
||||
padding: 0.55em 0.8em;
|
||||
border-left: 3px solid #8FBCBB;
|
||||
background: #3B4252;
|
||||
color: #D8DEE9;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.markdown-body blockquote > :first-child { margin-top: 0; }
|
||||
.markdown-body blockquote > :last-child { margin-bottom: 0; }
|
||||
|
||||
/* Links */
|
||||
.markdown-body a {
|
||||
color: #ECEFF4; /* same as headings → bold-text feel */
|
||||
font-weight: 700; /* bold */
|
||||
text-decoration: none;
|
||||
border-bottom: 0.5px dotted #88C0D0; /* underline = link signal */
|
||||
}
|
||||
|
||||
.markdown-body a:hover {
|
||||
color: #8FBCBB; /* subtle Nord accent on hover */
|
||||
border-bottom-color: #8FBCBB;
|
||||
}
|
||||
|
||||
/* Code */
|
||||
.markdown-body code {
|
||||
background: #3B4252;
|
||||
color: #EBCB8B;
|
||||
padding: 0.1em 0.3em;
|
||||
border-radius: 3px;
|
||||
font-size: 0.92em;
|
||||
}
|
||||
|
||||
.markdown-body pre {
|
||||
background: #3B4252;
|
||||
color: #ECEFF4;
|
||||
padding: 0.75em 0.9em;
|
||||
border-radius: 5px;
|
||||
overflow-x: auto;
|
||||
border-left: 3px solid #81A1C1;
|
||||
margin: 0.7em 0;
|
||||
}
|
||||
|
||||
.markdown-body pre code {
|
||||
background: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* Lists */
|
||||
.markdown-body ul,
|
||||
.markdown-body ol {
|
||||
padding-left: 1.3em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
|
||||
.markdown-body ul li::marker,
|
||||
.markdown-body ol li::marker {
|
||||
color: #88C0D0;
|
||||
}
|
||||
|
||||
/* HR */
|
||||
.markdown-body hr {
|
||||
border: none;
|
||||
border-top: 1px dashed #4C566A;
|
||||
margin: 1.2em 0;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
.markdown-body table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
margin: 0.7em 0;
|
||||
font-size: 0.92em;
|
||||
}
|
||||
|
||||
.markdown-body th,
|
||||
.markdown-body td {
|
||||
border: 1px solid #4C566A;
|
||||
padding: 0.35em 0.6em;
|
||||
}
|
||||
|
||||
.markdown-body th {
|
||||
background: #3B4252;
|
||||
}
|
||||
|
||||
/* Images */
|
||||
.markdown-body img {
|
||||
max-width: 100%;
|
||||
background: #2E3440;
|
||||
border: 0px solid #4C566A;
|
||||
padding: 0.2em;
|
||||
border-radius: 0px;
|
||||
}
|
||||
|
||||
/* Hide anchor icons */
|
||||
.markdown-body a.anchor {
|
||||
display: none;
|
||||
}
|
||||
|
||||
141
css/nord_light.css
Normal file
141
css/nord_light.css
Normal file
@@ -0,0 +1,141 @@
|
||||
/* ===============================
|
||||
Nord Light – Compact Markdown
|
||||
github-markdown-css compatible
|
||||
=============================== */
|
||||
|
||||
.markdown-body {
|
||||
background: #ECEFF4;
|
||||
color: #2E3440;
|
||||
font-family: "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
|
||||
font-size: 15px;
|
||||
line-height: 1.55;
|
||||
padding: 4.0rem;
|
||||
}
|
||||
|
||||
/* Headings */
|
||||
.markdown-body h1,
|
||||
.markdown-body h2,
|
||||
.markdown-body h3,
|
||||
.markdown-body h4,
|
||||
.markdown-body h5,
|
||||
.markdown-body h6 {
|
||||
border: none;
|
||||
margin-top: 1.2em;
|
||||
margin-bottom: 0.4em;
|
||||
font-weight: 700;
|
||||
color: #3B4252;
|
||||
}
|
||||
|
||||
.markdown-body h1 { font-size: 1.9em; }
|
||||
.markdown-body h2 { font-size: 1.6em; }
|
||||
.markdown-body h3 { font-size: 1.35em; }
|
||||
.markdown-body h4 { font-size: 1.15em; }
|
||||
.markdown-body h5 { font-size: 1.02em; }
|
||||
.markdown-body h6 { font-size: 0.95em; color: #4C566A; }
|
||||
|
||||
/* Paragraphs */
|
||||
.markdown-body p {
|
||||
margin: 0.55em 0;
|
||||
}
|
||||
|
||||
/* Blockquotes – SAME vertical spacing as paragraphs */
|
||||
.markdown-body blockquote {
|
||||
margin: 0.55em 0;
|
||||
padding: 0.55em 0.8em;
|
||||
border-left: 3px solid #81A1C1;
|
||||
background: #E5E9F0;
|
||||
color: #4C566A;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Remove extra spacing inside blockquotes */
|
||||
.markdown-body blockquote > :first-child { margin-top: 0; }
|
||||
.markdown-body blockquote > :last-child { margin-bottom: 0; }
|
||||
|
||||
/* Links */
|
||||
.markdown-body a {
|
||||
color: #5E81AC;
|
||||
text-decoration: none;
|
||||
border-bottom: 1px dotted #81A1C1;
|
||||
}
|
||||
|
||||
.markdown-body a:hover {
|
||||
color: #81A1C1;
|
||||
border-bottom-style: solid;
|
||||
}
|
||||
|
||||
/* Code */
|
||||
.markdown-body code {
|
||||
background: #E5E9F0;
|
||||
color: #BF616A;
|
||||
padding: 0.1em 0.3em;
|
||||
border-radius: 3px;
|
||||
font-size: 0.92em;
|
||||
}
|
||||
|
||||
.markdown-body pre {
|
||||
background: #E5E9F0;
|
||||
color: #2E3440;
|
||||
padding: 0.75em 0.9em;
|
||||
border-radius: 5px;
|
||||
overflow-x: auto;
|
||||
border-left: 3px solid #88C0D0;
|
||||
margin: 0.7em 0;
|
||||
}
|
||||
|
||||
.markdown-body pre code {
|
||||
background: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* Lists */
|
||||
.markdown-body ul,
|
||||
.markdown-body ol {
|
||||
padding-left: 1.3em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
|
||||
.markdown-body ul li::marker,
|
||||
.markdown-body ol li::marker {
|
||||
color: #5E81AC;
|
||||
}
|
||||
|
||||
/* HR */
|
||||
.markdown-body hr {
|
||||
border: none;
|
||||
border-top: 1px dashed #D8DEE9;
|
||||
margin: 1.2em 0;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
.markdown-body table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
margin: 0.7em 0;
|
||||
font-size: 0.92em;
|
||||
}
|
||||
|
||||
.markdown-body th,
|
||||
.markdown-body td {
|
||||
border: 1px solid #D8DEE9;
|
||||
padding: 0.35em 0.6em;
|
||||
}
|
||||
|
||||
.markdown-body th {
|
||||
background: #E5E9F0;
|
||||
}
|
||||
|
||||
/* Images */
|
||||
.markdown-body img {
|
||||
max-width: 100%;
|
||||
background: #E5E9F0;
|
||||
border: 1px solid #D8DEE9;
|
||||
padding: 0.2em;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
/* Hide anchor icons */
|
||||
.markdown-body a.anchor {
|
||||
display: none;
|
||||
}
|
||||
|
||||
140
css/solarized_light.css
Normal file
140
css/solarized_light.css
Normal file
@@ -0,0 +1,140 @@
|
||||
/* ===============================
|
||||
Solarized Light – Compact Markdown
|
||||
github-markdown-css compatible
|
||||
=============================== */
|
||||
|
||||
.markdown-body {
|
||||
background: #FDF6E3; /* base3 */
|
||||
color: #657B83; /* base00 */
|
||||
font-family: "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
|
||||
font-size: 15px;
|
||||
line-height: 1.55;
|
||||
padding: 4.0rem;
|
||||
}
|
||||
|
||||
/* Headings */
|
||||
.markdown-body h1,
|
||||
.markdown-body h2,
|
||||
.markdown-body h3,
|
||||
.markdown-body h4,
|
||||
.markdown-body h5,
|
||||
.markdown-body h6 {
|
||||
border: none;
|
||||
margin-top: 1.2em;
|
||||
margin-bottom: 0.4em;
|
||||
font-weight: 700;
|
||||
color: #586E75; /* base01 */
|
||||
}
|
||||
|
||||
.markdown-body h1 { font-size: 1.9em; }
|
||||
.markdown-body h2 { font-size: 1.6em; }
|
||||
.markdown-body h3 { font-size: 1.35em; }
|
||||
.markdown-body h4 { font-size: 1.15em; }
|
||||
.markdown-body h5 { font-size: 1.02em; }
|
||||
.markdown-body h6 { font-size: 0.95em; color: #839496; /* base0 */ }
|
||||
|
||||
/* Paragraphs */
|
||||
.markdown-body p {
|
||||
margin: 0.55em 0;
|
||||
}
|
||||
|
||||
/* Blockquotes – SAME vertical spacing as paragraphs */
|
||||
.markdown-body blockquote {
|
||||
margin: 0.55em 0;
|
||||
padding: 0.55em 0.8em;
|
||||
border-left: 3px solid #268BD2; /* blue */
|
||||
background: #EEE8D5; /* base2 */
|
||||
color: #839496; /* base0 */
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Remove extra spacing inside blockquotes */
|
||||
.markdown-body blockquote > :first-child { margin-top: 0; }
|
||||
.markdown-body blockquote > :last-child { margin-bottom: 0; }
|
||||
|
||||
/* Links */
|
||||
.markdown-body a {
|
||||
color: #268BD2; /* blue */
|
||||
text-decoration: none;
|
||||
border-bottom: 1px dotted #2AA198; /* cyan */
|
||||
}
|
||||
|
||||
.markdown-body a:hover {
|
||||
color: #2AA198; /* cyan */
|
||||
border-bottom-style: solid;
|
||||
}
|
||||
|
||||
/* Code */
|
||||
.markdown-body code {
|
||||
background: #EEE8D5; /* base2 */
|
||||
color: #DC322F; /* red */
|
||||
padding: 0.1em 0.3em;
|
||||
border-radius: 3px;
|
||||
font-size: 0.92em;
|
||||
}
|
||||
|
||||
.markdown-body pre {
|
||||
background: #EEE8D5; /* base2 */
|
||||
color: #586E75; /* base01 */
|
||||
padding: 0.75em 0.9em;
|
||||
border-radius: 5px;
|
||||
overflow-x: auto;
|
||||
border-left: 3px solid #2AA198; /* cyan */
|
||||
margin: 0.7em 0;
|
||||
}
|
||||
|
||||
.markdown-body pre code {
|
||||
background: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/* Lists */
|
||||
.markdown-body ul,
|
||||
.markdown-body ol {
|
||||
padding-left: 1.3em;
|
||||
margin: 0.5em 0;
|
||||
}
|
||||
|
||||
.markdown-body ul li::marker,
|
||||
.markdown-body ol li::marker {
|
||||
color: #268BD2; /* blue */
|
||||
}
|
||||
|
||||
/* HR */
|
||||
.markdown-body hr {
|
||||
border: none;
|
||||
border-top: 1px dashed #DDD6C1; /* subtle base2/base1 mix */
|
||||
margin: 1.2em 0;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
.markdown-body table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
margin: 0.7em 0;
|
||||
font-size: 0.92em;
|
||||
}
|
||||
|
||||
.markdown-body th,
|
||||
.markdown-body td {
|
||||
border: 1px solid #DDD6C1;
|
||||
padding: 0.35em 0.6em;
|
||||
}
|
||||
|
||||
.markdown-body th {
|
||||
background: #EEE8D5; /* base2 */
|
||||
}
|
||||
|
||||
/* Images */
|
||||
.markdown-body img {
|
||||
max-width: 100%;
|
||||
background: #EEE8D5;
|
||||
border: 1px solid #DDD6C1;
|
||||
padding: 0.2em;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
/* Hide anchor icons */
|
||||
.markdown-body a.anchor {
|
||||
display: none;
|
||||
}
|
||||
180
css/spacing.css
Normal file
180
css/spacing.css
Normal file
@@ -0,0 +1,180 @@
|
||||
.markdown-body {
|
||||
font-family: "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
|
||||
font-size: 16px;
|
||||
line-height: 1.65;
|
||||
padding: 1.25rem;
|
||||
}
|
||||
|
||||
/* -------------------------------
|
||||
Headings (no underline)
|
||||
------------------------------- */
|
||||
.markdown-body h1,
|
||||
.markdown-body h2,
|
||||
.markdown-body h3,
|
||||
.markdown-body h4,
|
||||
.markdown-body h5,
|
||||
.markdown-body h6 {
|
||||
border: none;
|
||||
margin-top: 1.6em;
|
||||
margin-bottom: 0.6em;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.markdown-body h1 { font-size: 2em; }
|
||||
.markdown-body h2 { font-size: 1.7em; }
|
||||
.markdown-body h3 { font-size: 1.4em; }
|
||||
.markdown-body h4 { font-size: 1.2em; }
|
||||
.markdown-body h5 { font-size: 1.05em; }
|
||||
.markdown-body h6 { font-size: 1em; }
|
||||
|
||||
/* -------------------------------
|
||||
Text
|
||||
------------------------------- */
|
||||
.markdown-body p {
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
|
||||
.markdown-body strong {
|
||||
color: #ECEFF4;
|
||||
}
|
||||
|
||||
.markdown-body em {
|
||||
color: #E5E9F0;
|
||||
}
|
||||
|
||||
/* -------------------------------
|
||||
Links
|
||||
------------------------------- */
|
||||
.markdown-body a {
|
||||
color: #88C0D0; /* nord8 */
|
||||
text-decoration: none;
|
||||
border-bottom: 1px dotted #81A1C1;
|
||||
}
|
||||
|
||||
.markdown-body a:hover {
|
||||
color: #8FBCBB; /* nord7 */
|
||||
border-bottom-style: solid;
|
||||
}
|
||||
|
||||
/* -------------------------------
|
||||
Inline + Block Code
|
||||
------------------------------- */
|
||||
.markdown-body code {
|
||||
background: #3B4252; /* nord1 */
|
||||
color: #EBCB8B; /* nord13 */
|
||||
padding: 0.15em 0.35em;
|
||||
border-radius: 3px;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
.markdown-body pre {
|
||||
background: #3B4252;
|
||||
color: #ECEFF4;
|
||||
padding: 1em;
|
||||
border-radius: 6px;
|
||||
overflow-x: auto;
|
||||
border-left: 4px solid #81A1C1; /* nord9 */
|
||||
}
|
||||
|
||||
.markdown-body pre code {
|
||||
background: none;
|
||||
padding: 0;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
/* -------------------------------
|
||||
Blockquotes
|
||||
------------------------------- */
|
||||
.markdown-body blockquote {
|
||||
margin: 1em 0;
|
||||
padding: 0.6em 1em;
|
||||
border-left: 4px solid #8FBCBB; /* nord7 */
|
||||
background: #3B4252;
|
||||
color: #D8DEE9;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* -------------------------------
|
||||
Lists
|
||||
------------------------------- */
|
||||
.markdown-body ul,
|
||||
.markdown-body ol {
|
||||
padding-left: 1.6em;
|
||||
margin: 0.8em 0;
|
||||
}
|
||||
|
||||
.markdown-body ul li::marker {
|
||||
color: #88C0D0;
|
||||
}
|
||||
|
||||
.markdown-body ol li::marker {
|
||||
color: #88C0D0;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* -------------------------------
|
||||
Horizontal Rule
|
||||
------------------------------- */
|
||||
.markdown-body hr {
|
||||
border: none;
|
||||
border-top: 1px dashed #4C566A; /* nord3 */
|
||||
margin: 2em 0;
|
||||
}
|
||||
|
||||
/* -------------------------------
|
||||
Tables
|
||||
------------------------------- */
|
||||
.markdown-body table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
margin: 1em 0;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
.markdown-body th,
|
||||
.markdown-body td {
|
||||
border: 1px solid #4C566A;
|
||||
padding: 0.5em 0.75em;
|
||||
}
|
||||
|
||||
.markdown-body th {
|
||||
background: #3B4252;
|
||||
color: #ECEFF4;
|
||||
}
|
||||
|
||||
.markdown-body tr:nth-child(even) td {
|
||||
background: #434C5E; /* nord2 */
|
||||
}
|
||||
|
||||
/* -------------------------------
|
||||
Images
|
||||
------------------------------- */
|
||||
.markdown-body img {
|
||||
max-width: 100%;
|
||||
background: #3B4252;
|
||||
border: 1px solid #4C566A;
|
||||
padding: 0.25em;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
/* -------------------------------
|
||||
Anchor links (hide GitHub icons)
|
||||
------------------------------- */
|
||||
.markdown-body a.anchor {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* -------------------------------
|
||||
Print / PDF safety
|
||||
------------------------------- */
|
||||
@media print {
|
||||
.markdown-body {
|
||||
background: #ffffff;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #000000;
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
100
english/index.md
100
english/index.md
@@ -1,10 +1,12 @@
|
||||
---
|
||||
pdf_options:
|
||||
format: a4
|
||||
margin: 20mm 10mm
|
||||
margin: 0mm 0mm
|
||||
printBackground: true
|
||||
trim_trailing_whitespace: false
|
||||
stylesheet:
|
||||
- https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.5.1/github-markdown.css
|
||||
- ./css/nord_dark.css
|
||||
|
||||
body_class: markdown-body
|
||||
css: |-
|
||||
.markdown-body {
|
||||
@@ -13,54 +15,76 @@ css: |-
|
||||
.page-break { page-break-after: always; }
|
||||
---
|
||||
|
||||
## Nikolai Rodionov
|
||||
<img src="../resources/photo.png" alt="photo" style="float: left; padding-right: 2em; padding-top: 2em; margin: 0 0 0em 0em; height: 80px;"/>
|
||||
<br>
|
||||
|
||||
```
|
||||
> Location: Hamburg, Germany
|
||||
> Email: allanger@zohomail.com
|
||||
> Github: https://github.com/allanger
|
||||
```
|
||||
## Nikolai Rodionov
|
||||
### Senior DevOps Engineer
|
||||
|
||||
<br clear="left" />
|
||||
|
||||
> **Location:** **Hamburg, Germany**
|
||||
> **Email:** allanger@zohomail.com
|
||||
> **Phone:** **4915223284008**
|
||||
> **GitHub:** https://github.com/allanger
|
||||
|
||||
### About me
|
||||
|
||||
I'm a DevOps engineer with almost 10 years of hands-on experience. I've been mostly focused on Kubernetes and CI/CD pipelines, but it doesn't mean that I would like to avoid tasks in other areas.
|
||||
|
||||
A couple of interesting tasks, that I've been working on:
|
||||
Senior DevOps Engineer focused on **Kubernetes** and **CI/CD pipelines**. I build and run **scalable systems**, write **Go** and **Rust**, manage **servers** and **databases**, and help developers perform at their best.
|
||||
|
||||
- Migration from Datadog to the self-managed monitoring stack (Mimir/Loki/Tempo/Grafana)
|
||||
- GCP Kafka access management with a self-written k8s operator (<https://github.com/allanger/gcp-kafka-auth-operator>)
|
||||
- Migration of several MySQL Percona clusters to Kubernetes using the Percona Operator
|
||||
- Implementation of a downtime-free blue-green deployment for RabbitMQ
|
||||
- A data streaming automation from ~800 Postgres databases with structural changes via Kafka deployed to Kubernetes
|
||||
- Implementation of a Kubernetes backend for Selenoid for running e2e tests in k8s environments
|
||||
In addition, I'm a maintainer of an open-source **Kubernetes operator** designed to help users manage databases through CRDs:
|
||||
<https://github.com/db-operator/db-operator>
|
||||
|
||||
Also, I'm a maintainer of a Kubernetes operator that should help users manage databases via CRDs: <https://github.com/db-operator/db-operator>
|
||||
|
||||
---
|
||||
|
||||
### Skills
|
||||
|
||||
**Linux** - **Docker** - **Kubernetes** - **CI/CD** - **Automations and Scripting** - **Bash/Golang/Rust** - **GitOps**
|
||||
**Database Administration** - **Observability and Monitoring** - **Terraform/OpenTofu/Ansible** - **AWS/GCP/Azure**
|
||||
|
||||
---
|
||||
|
||||
### Experience
|
||||
|
||||
| Company | Position | Dates |
|
||||
|------------------|-------------------|---------------------|
|
||||
| **Onpier** | DevOps Engineer | 06.2024 - Until Now |
|
||||
| **Giant Swarm** | Platform Engineer | 12.2023 - 05.2024 |
|
||||
| **Grandcentrix** | SRE | 02.2023 - 11.2023 |
|
||||
| **Klöckner.I** | DevOps Engineer | 01.2022 - 01.2023 |
|
||||
| **Itigris** | DevOps Engineer | 07.2019 - 12.2021 |
|
||||
| **Etersoft** | DevOps Engineer | 03.2017 - 06.2019 |
|
||||
#### Onpier - DevOps Engineer [06.2024 - Until now]
|
||||
- Bootstrapped deployment workflows and CI/CD pipelines for the monitoring stack using **helmfile** and **Github Actions**
|
||||
- Configured and maintained a self-managed observability stack (**Mimir**/**Loki**/**Tempo**/**Grafana Alloy**/**Grafana**)
|
||||
- Operated and supported **Tekton CD** and **ArgoCD** instances for developers
|
||||
- Built and maintained [an open-source Kubernetes operator](https://github.com/ONPIER-OSS/gcp-kafka-auth-operator) for access management in **GCP Kafka**
|
||||
- Implemented a custom [selenoid backend](https://github.com/ONPIER-OSS/selenoid) to run **e2e-tests** natively in **Kubernetes**
|
||||
|
||||
### Tools
|
||||
#### Giant Swarm - Platform Engineer [12.2023 - 05.2024]
|
||||
- Deployed and actively used **FluxCD** for GitOps-based workflows
|
||||
- Maintained a large set of customer-facing **Helm charts**
|
||||
- Contributed to and maintained multiple **Go** and **Rust** project
|
||||
|
||||
- **Environments**: Linux - Containers - Kubernetes - Proxmox
|
||||
- **Kubernetes**: Helm - Kustomize - Kubebuilder - Helmfile
|
||||
- **Scripting/Coding**: Bash - Go - Rust - Perl - Python
|
||||
- **Continuous Integration**: Gitlab-CI - Github Actions - Circle-CI - Woodpecker-CI - Drone-CI
|
||||
- **Continuous Delivery**: ArgoCD - Flux - Tekton
|
||||
- **Infrastructure as Code**: Ansible - Terraform - Opentofu - Cluster API
|
||||
- **Cloud Providers**: Microsoft Azure - Google Cloud - AWS - Yandex Cloud - Hetzner
|
||||
- **Observability**: Prometheus - Mimir - Grafana - Loki - Elasticsearch - Kibana - FluentBit - Promtail - Fluentd - Grafana Alloy - Faro - Tempo
|
||||
- **Secret Management**: Sops - Age - Helm Secrets - Hashicorp Vault
|
||||
- **Databases**: PostgreSQL - MySQL - Percona MySQL - Redis - Mongo - Dragonfly
|
||||
- **Storages**: Minio - Ceph - Longhorn
|
||||
- **Others**: Kafka - RabbitMQ - Selenium - Selenoid - Kyverno - K3s - Kubeadm
|
||||
#### Grandcentrix - SRE [02.2023 - 11.2023]
|
||||
- Streamlined database management using the [db-operator](https://github.com/db-operator/db-operator)
|
||||
- Configured, maintained, and actively used **ArgoCD**
|
||||
- Refactored a large **Terraform** codebase with zero downtime
|
||||
|
||||
#### Klöckner.I - DevOps Engineer [01.2022 - 01.2022]
|
||||
- Migrated multiple **Percona MySQL** clusters to **Kubernetes** using **Percona Operator**
|
||||
- Replaced a custom CD solution with **ArgoCD**
|
||||
- Managed **GitLab** and **GitLab CI/CD** installations
|
||||
- Implemented a cross-cloud backup solution using **Restic**
|
||||
- Operated **Elasticsearch**, **Kibana**, and **FluentBit**
|
||||
- Maintained federated **Prometheus** clusters across **Kubernetes** and **Linux Servers**
|
||||
- Deployed and maintained **Vaultwarden** for company-wide secret management
|
||||
- Maintained and contributed to **db-operator**
|
||||
|
||||
#### Itigris - DevOps Engineer [07.2019 - 12.2021]
|
||||
- Built **preview environments** using **ArgoCD**
|
||||
- Implemented data streaming from **~800 PostgreSQL databases** using **Kafka** running in **Kubernetes**
|
||||
- Designed and rolled out company-wide **Gitlab-CI/CD** pipelines for **Java** and **JavaScript** projects
|
||||
- Developed a [cli tool](https://github.com/allanger/gitlab-user-manager) to manage access to **Gitlab** repositories
|
||||
- Designed, implemented, and maintained **CI** pipelines for **e2e-tests**.
|
||||
|
||||
#### Etersoft - DevOps Engineer [03.2017 - 06.2019]
|
||||
- Designed, implemented, and maintained **CI** pipelines for **e2e-tests**.
|
||||
- Maintained **Linux Servers**
|
||||
|
||||
---
|
||||
|
||||
|
||||
BIN
fonts/fira_sans/FiraSans-Black.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-Black.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-BlackItalic.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-BlackItalic.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-Bold.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-Bold.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-BoldItalic.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-BoldItalic.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-ExtraBold.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-ExtraBold.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-ExtraBoldItalic.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-ExtraBoldItalic.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-ExtraLight.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-ExtraLight.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-ExtraLightItalic.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-ExtraLightItalic.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-Italic.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-Italic.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-Light.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-Light.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-LightItalic.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-LightItalic.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-Medium.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-Medium.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-MediumItalic.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-MediumItalic.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-Regular.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-Regular.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-SemiBold.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-SemiBold.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-SemiBoldItalic.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-SemiBoldItalic.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-Thin.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-Thin.ttf
Normal file
Binary file not shown.
BIN
fonts/fira_sans/FiraSans-ThinItalic.ttf
Normal file
BIN
fonts/fira_sans/FiraSans-ThinItalic.ttf
Normal file
Binary file not shown.
@@ -1,10 +1,12 @@
|
||||
---
|
||||
pdf_options:
|
||||
format: a4
|
||||
margin: 20mm 10mm
|
||||
margin: 0mm 0mm
|
||||
printBackground: true
|
||||
trim_trailing_whitespace: false
|
||||
stylesheet:
|
||||
- https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.5.1/github-markdown.css
|
||||
- ./css/nord_dark.css
|
||||
|
||||
body_class: markdown-body
|
||||
css: |-
|
||||
.markdown-body {
|
||||
@@ -13,54 +15,74 @@ css: |-
|
||||
.page-break { page-break-after: always; }
|
||||
---
|
||||
|
||||
## Nikolai Rodionov
|
||||
<img src="../resources/photo.png" alt="photo" style="float: left; padding-right: 2em; padding-top: 2em; margin: 0 0 0em 0em; height: 80px;"/>
|
||||
<br>
|
||||
|
||||
```
|
||||
> Standort: Hamburg, Deutschland
|
||||
> E-mail: allanger@zohomail.com
|
||||
> Github: https://github.com/allanger
|
||||
```
|
||||
## Nikolai Rodionov
|
||||
### Senior DevOps Ingenieur
|
||||
|
||||
<br clear="left" />
|
||||
|
||||
> **Standort:** Hamburg, Deutschland
|
||||
> **E-mail:** allanger@zohomail.com
|
||||
> **Telefon:** 4915223284008
|
||||
> **GitHub:** https://github.com/allanger
|
||||
|
||||
### Über mich
|
||||
|
||||
Ich bin ein DevOps-Ingenieur mit fast 10 Jahren praktischer Erfahrung und einer breiten Palette an Tools. Mein Fokus lag hauptsächlich auf Kubernetes und CI/CD-Pipelines, das bedeutet jedoch nicht, dass ich andere Themenbereiche meide.
|
||||
Senior-DevOps-Ingenieur konzentrierte sich auf **Kubernetes** und **CI/CD Pipelines**. Ich baue und betreibe **skalierbare Systeme**, schreibe **Go** und **Rust**, verwalte **Servern** und **Datenbanken**, und helfe Entwicklern, Höchstleistungen zu erbringen.
|
||||
|
||||
Ein paar interessante Aufgaben, an denen ich gearbeitet habe:
|
||||
Außerdem bin ich ein Maintainer eines **Open-Source-Kubernetes-Operators**, der Benutzern bei der Verwaltung von Datenbanken über CRDs helfen soll:
|
||||
<https://github.com/db-operator/db-operator>
|
||||
|
||||
- Migration von Datadog zu einem self-managed Monitoring-Stack (Mimir/Loki/Tempo/Grafana)
|
||||
- GCP-Kafka-Zugriffsverwaltung mit einem selbstgeschriebenen k8s Operator (<https://github.com/allanger/gcp-kafka-auth-operator>)
|
||||
- Migration mehrerer MySQL Percona-Cluster zu Kubernetes mithilfe des Percona-Operators
|
||||
- Implementierung eines downtime-freien Blue-Green-RabbitMQ-Deployments
|
||||
- Automatisierung des Data-Streamings von ~800 PostgreSQL-Datenbanken inklusive struktureller Änderungen via Kafka in Kubernetes
|
||||
- Implementierung eines Kubernetes-Backends für Selenoid, um E2E-Tests nativ in Kubernetes auszuführen
|
||||
---
|
||||
|
||||
Außerdem bin ich Maintainer eines Kubernetes-Operators, der die Verwaltung von Datenbanken über CRDs vereinfacht: <https://github.com/db-operator/db-operator>
|
||||
### Fähigkeiten
|
||||
|
||||
**Linux** - **Docker** - **Kubernetes** - **CI/CD** - **Automatisierung und Skripting** - **Bash/Golang/Rust** - **GitOps**
|
||||
**Datenbankverwaltung** - **Observability und Monitoring** - **Terraform/OpenTofu/Ansible** - **AWS/GCP/Azure**
|
||||
|
||||
---
|
||||
|
||||
### Erfahrung
|
||||
|
||||
| Firma | Position | Zeitraum |
|
||||
|------------------|---------------------|---------------------|
|
||||
| **Onpier** | DevOps Ingenieur | 06.2024 - Bis jetzt |
|
||||
| **Giant Swarm** | Plattform Ingenieur | 12.2023 - 05.2024 |
|
||||
| **Grandcentrix** | SRE | 02.2023 - 11.2023 |
|
||||
| **Klöckner.I** | DevOps Ingenieur | 01.2022 - 01.2023 |
|
||||
| **Itigris** | DevOps Ingenieur | 07.2019 - 12.2021 |
|
||||
| **Etersoft** | DevOps Ingenieur | 03.2017 - 06.2019 |
|
||||
#### Onpier - DevOps-Ingenieur [06.2024 - bis jetzt]
|
||||
- Aufbau und Einführung von Deployment-Workflows und CI/CD-Pipelines für einen Monitoring-Stack mit **helmfile** und **GitHub Actions**
|
||||
- Konfiguration und Betrieb eines selbstverwalteten Observability-Stacks (**Mimir**, **Loki**, **Tempo**, **Grafana Alloy**, **Grafana**)
|
||||
- Betrieb und Support von **Tekton CD-** und **ArgoCD-**Instanzen für Entwicklungsteams
|
||||
- Entwicklung und Wartung eines [Open-Source-Kubernetes-Operators](https://github.com/ONPIER-OSS/gcp-kafka-auth-operator) für Zugriffsmanagement in **GCP Kafka**
|
||||
- Implementierung eines eigenen [Selenoid-Backends](https://github.com/ONPIER-OSS/selenoid) zur nativen Ausführung von **E2E-Tests** in **Kubernetes**
|
||||
|
||||
### Tools
|
||||
#### Giant Swarm - Plattform-Ingenieur [12.2023 - 05.2024]
|
||||
- Einführung und aktive Nutzung von **FluxCD** für **GitOps** Deployments
|
||||
- Wartung einer größeren Anzahl kundenorientierter **Helm Charts**
|
||||
- Mitarbeit an sowie Wartung mehrerer **Go-** und **Rust-**Projekte
|
||||
|
||||
- **Umgebungen**: Linux - Containers - Kubernetes - Proxmox
|
||||
- **Kubernetes**: Helm - Kustomize - Kubebuilder - Helmfile
|
||||
- **Skripting/Programmierung**: Bash - Go - Rust - Perl - Python
|
||||
- **Continuous Integration**: Gitlab-CI - Github Actions - Circle-CI - Woodpecker-CI - Drone-CI
|
||||
- **Continuous Delivery**: ArgoCD - Flux - Tekton
|
||||
- **IaC**: Ansible - Terraform - Opentofu - Cluster API
|
||||
- **Cloud Providers**: Microsoft Azure - Google Cloud - AWS - Yandex Cloud - Hetzner
|
||||
- **Observability**: Prometheus - Mimir - Grafana - Loki - Elasticsearch - Kibana - FluentBit - Promtail - Fluentd - Grafana Alloy - Faro - Tempo
|
||||
- **Secret-Management**: Sops - Age - Helm Secrets - Hashicorp Vault
|
||||
- **Datenbanken**: PostgreSQL - MySQL - Percona MySQL - Redis - Mongo - Dragonfly
|
||||
- **Storages**: Minio - Ceph - Longhorn
|
||||
- **Sonstiges**: Kafka - RabbitMQ - Selenium - Selenoid - Kyverno - K3s - Kubeadm
|
||||
#### Grandcentrix - SRE [02.2023 - 11.2023]
|
||||
- Optimierung des Datenbank-Lifecycle-Managements mit dem [db-operator](https://github.com/db-operator/db-operator)
|
||||
- Konfiguration, Wartung und aktive Nutzung von **ArgoCD**
|
||||
- Refactoring einer umfangreichen Terraform-Codebasis ohne Downtime
|
||||
|
||||
#### Klöckner.I - DevOps-Ingenieur [01.2022 - 01.2022]
|
||||
- Migration mehrerer **Percona MySQL-Cluster** nach **Kubernetes** mithilfe des **Percona Operators**
|
||||
- Ablösung einer selbst entwickelten CD-Lösung durch **ArgoCD**
|
||||
- Betrieb und Wartung von **GitLab** und **GitLab CI/CD**
|
||||
- Implementierung von Cross-Cloud-Backup-Strategien mit **Restic**
|
||||
- Betrieb von **Elasticsearch**, **Kibana**, und **FluentBit**
|
||||
- Wartung **Federated-Prometheus-Cluster** auf **Kubernetes** und **Linux-Servern**
|
||||
- Einführung und Betrieb von **Vaultwarden** für unternehmensweites Secret-Management
|
||||
- Wartung **db-operator**
|
||||
|
||||
#### Itigris - DevOps-Ingenieur [07.2019 - 12.2021]
|
||||
- Aufbau **Preview-Environments** mithilfe **ArgoCD**
|
||||
- Umsetzung von Daten-Streaming aus ca. **800 PostgreSQL-Datenbanken** in einen auf **Kubernetes** betriebenen **Kafka-Cluster**
|
||||
- Konzeption und Einführung unternehmensweiter **GitLab CI/CD-Pipelines** für **Java-** und **JavaScript-**Projekte
|
||||
- Entwicklung eines [Cli-Tools](https://github.com/allanger/gitlab-user-manager) zur Verwaltung von Zugriffsrechten auf **GitLab**-Repositories
|
||||
- Konzeption, Implementierung und Betrieb von **CI-Pipelines** für **E2E-Tests**
|
||||
|
||||
#### Etersoft - DevOps-Ingenieur [03.2017 - 06.2019]
|
||||
- Konzeption, Implementierung und Betrieb von **CI-Pipelines** für **E2E-Tests**
|
||||
- Betrieb und Wartung von **Linux-Servern**
|
||||
|
||||
---
|
||||
|
||||
|
||||
58
package-lock.json
generated
58
package-lock.json
generated
@@ -10,7 +10,7 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"markdown-spellcheck": "^1.3.1",
|
||||
"md-to-pdf": "^5.2.4"
|
||||
"md-to-pdf": "^5.2.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/code-frame": {
|
||||
@@ -37,9 +37,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@puppeteer/browsers": {
|
||||
"version": "2.11.2",
|
||||
"resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.11.2.tgz",
|
||||
"integrity": "sha512-GBY0+2lI9fDrjgb5dFL9+enKXqyOPok9PXg/69NVkjW3bikbK9RQrNrI3qccQXmDNN7ln4j/yL89Qgvj/tfqrw==",
|
||||
"version": "2.12.0",
|
||||
"resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.12.0.tgz",
|
||||
"integrity": "sha512-Xuq42yxcQJ54ti8ZHNzF5snFvtpgXzNToJ1bXUGQRaiO8t+B6UM8sTUJfvV+AJnqtkJU/7hdy6nbKyA12aHtRw==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"debug": "^4.4.3",
|
||||
@@ -84,9 +84,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "25.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
|
||||
"integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
|
||||
"version": "25.2.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz",
|
||||
"integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==",
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
@@ -513,9 +513,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/chromium-bidi": {
|
||||
"version": "13.0.1",
|
||||
"resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-13.0.1.tgz",
|
||||
"integrity": "sha512-c+RLxH0Vg2x2syS9wPw378oJgiJNXtYXUvnVAldUlt5uaHekn0CCU7gPksNgHjrH1qFhmjVXQj4esvuthuC7OQ==",
|
||||
"version": "13.1.1",
|
||||
"resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-13.1.1.tgz",
|
||||
"integrity": "sha512-zB9MpoPd7VJwjowQqiW3FKOvQwffFMjQ8Iejp5ZW+sJaKLRhZX1sTxzl3Zt22TDB4zP0OOqs8lRoY7eAW5geyQ==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"mitt": "^3.0.1",
|
||||
@@ -852,9 +852,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/devtools-protocol": {
|
||||
"version": "0.0.1551306",
|
||||
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1551306.tgz",
|
||||
"integrity": "sha512-CFx8QdSim8iIv+2ZcEOclBKTQY6BI1IEDa7Tm9YkwAXzEWFndTEzpTo5jAUhSnq24IC7xaDw0wvGcm96+Y3PEg==",
|
||||
"version": "0.0.1566079",
|
||||
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1566079.tgz",
|
||||
"integrity": "sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ==",
|
||||
"license": "BSD-3-Clause"
|
||||
},
|
||||
"node_modules/dunder-proto": {
|
||||
@@ -2644,17 +2644,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/puppeteer": {
|
||||
"version": "24.36.1",
|
||||
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.36.1.tgz",
|
||||
"integrity": "sha512-uPiDUyf7gd7Il1KnqfNUtHqntL0w1LapEw5Zsuh8oCK8GsqdxySX1PzdIHKB2Dw273gWY4MW0zC5gy3Re9XlqQ==",
|
||||
"version": "24.37.2",
|
||||
"resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.37.2.tgz",
|
||||
"integrity": "sha512-FV1W/919ve0y0oiS/3Rp5XY4MUNUokpZOH/5M4MMDfrrvh6T9VbdKvAHrAFHBuCxvluDxhjra20W7Iz6HJUcIQ==",
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@puppeteer/browsers": "2.11.2",
|
||||
"chromium-bidi": "13.0.1",
|
||||
"@puppeteer/browsers": "2.12.0",
|
||||
"chromium-bidi": "13.1.1",
|
||||
"cosmiconfig": "^9.0.0",
|
||||
"devtools-protocol": "0.0.1551306",
|
||||
"puppeteer-core": "24.36.1",
|
||||
"devtools-protocol": "0.0.1566079",
|
||||
"puppeteer-core": "24.37.2",
|
||||
"typed-query-selector": "^2.12.0"
|
||||
},
|
||||
"bin": {
|
||||
@@ -2665,15 +2665,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/puppeteer-core": {
|
||||
"version": "24.36.1",
|
||||
"resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.36.1.tgz",
|
||||
"integrity": "sha512-L7ykMWc3lQf3HS7ME3PSjp7wMIjJeW6+bKfH/RSTz5l6VUDGubnrC2BKj3UvM28Y5PMDFW0xniJOZHBZPpW1dQ==",
|
||||
"version": "24.37.2",
|
||||
"resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.37.2.tgz",
|
||||
"integrity": "sha512-nN8qwE3TGF2vA/+xemPxbesntTuqD9vCGOiZL2uh8HES3pPzLX20MyQjB42dH2rhQ3W3TljZ4ZaKZ0yX/abQuw==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@puppeteer/browsers": "2.11.2",
|
||||
"chromium-bidi": "13.0.1",
|
||||
"@puppeteer/browsers": "2.12.0",
|
||||
"chromium-bidi": "13.1.1",
|
||||
"debug": "^4.4.3",
|
||||
"devtools-protocol": "0.0.1551306",
|
||||
"devtools-protocol": "0.0.1566079",
|
||||
"typed-query-selector": "^2.12.0",
|
||||
"webdriver-bidi-protocol": "0.4.0",
|
||||
"ws": "^8.19.0"
|
||||
@@ -2833,9 +2833,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "7.7.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
|
||||
"integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
|
||||
"version": "7.7.4",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
|
||||
"integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
|
||||
@@ -15,6 +15,6 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"markdown-spellcheck": "^1.3.1",
|
||||
"md-to-pdf": "^5.2.4"
|
||||
"md-to-pdf": "^5.2.5"
|
||||
}
|
||||
}
|
||||
|
||||
BIN
resources/photo.jpeg
Normal file
BIN
resources/photo.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 112 KiB |
BIN
resources/photo.jpg
Normal file
BIN
resources/photo.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 522 KiB |
BIN
resources/photo.png
Normal file
BIN
resources/photo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 606 KiB |
Reference in New Issue
Block a user