Repository files navigation

Blue Yonder Tech Blog

Usage

Run Jekyll build in Docker

export JEKYLL_VERSION=3.8
docker run \
--rm \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll build

Serving an existing site

export JEKYLL_VERSION=3.8
docker run \
--rm \
--name jda-tech-blog \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--publish 4000:4000 \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll serve --watch --drafts

Contribution

Pre-requisites

How To: Add a new post

Create a new markdown file _posts/<YYYY>-<MM>-<DD>-<some-title>.markdown:

---layout: singletitle: "<Some Title>"date: <YYYY>-<MM>-<DD> <HH>:00:00 +0100tags: technology python data-engineeringheader:
overlay_image: assets/images/tech_gear_banner.jpg # can also be a different assetoverlay_filter: 0.2show_overlay_excerpt: falseauthor: <Author Name> # as used in `authors.yml`author_profile: true---# Some Title
Foo bar.
![some picture](/assets/images/<YYYY>-<MM>-<DD>-<some-title>/picture1.svg)## Section 1
...

Please test your post locally before publishing it. You can use the jekyll serve command shown in the "Serving an existing site" section to have the page hosted locally and automatically reload when you make changes.

Formatting

See GitHub Flavored Markdown Spec.

Time

Please make sure the post filename and the date in the YAML front matter are in-sync. For may choose your local time zone and some appropriate time (like 10AM).

Authors

Every author must be registered, see "How To: Add a new author". If the post is written by multiple authors, a "multi-author" must be registered there.

Assets

If you want to use pictures, add them to assets/images/<YYYY>-<MM>-<DD>-<some-title>/ (or as assets/images/<YYYY>-<MM>-<DD>-<some-title>.png if you only have a single file). They can also be used as a header image.

In general, prefer vector images (SVG) for rasterized images and uncompressed data (PNG) for compressed images. There are exceptions though (like photos).

Linking to other posts

Example:

Global URL: http://0.0.0.0:4000/introducing-kartothek/

local URL: introducing-kartothek

To link other posts (like above example) in your current post, please use the following local URL syntax instead of a global URL:

[Another Post](../local URL/)

How To: Add a new author

In _data/authors.yml, add a new author:

Author Name:
name: "Author Name"avatar: "assets/images/authors/<author_name>.jpeg"# optionallinks: # optional, you can also add a subset
- label: "Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle>"
- label: "Github"icon: "fab fa-fw fa-github-square"url: "https://github.com/<github_handle>"
- label: "LinkedIn"icon: "fab fa-linkedin"url: "https://www.linkedin.com/in/<linkedin_id>"

The author avatar (if used) must be added as assets/images/authors/<author_name>.jpeg.

For "multi-authors" (e.g. if a blog post was written by multiple people), a special entry must be added:

Author1 Name1 & Author2 Name2:
name: "Author1 Name1 & Author2 Name2"# no avatar used, or you find a picture of all authorslinks: # optional, you can also add a subset
- label: "Author1s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle1>"
- label: "Author2s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle2>"# ...

Hints

Escaping curly brackets

Curly brackets in documented code snippets are conflicting with Jekyll's Liquid templating engine.
For instance, when you want to document GitHub Actions workflows.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ needs.build-deploy.outputs.app-url }}

The line app-url: ${{ needs.build-deploy.outputs.app-url }} will cause a Liquid syntax error because the curly brackets are interpreted as Liquid syntax.

To escape them, treat the opening brackets as a Liquid variable that outputs them as a string: {{ '{{' }}.
The closing brackets don't need to be escaped.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ '{{' }} needs.build-deploy.outputs.app-url }}

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Blue Yonder Tech Blog

Usage

Run Jekyll build in Docker

export JEKYLL_VERSION=3.8
docker run \
--rm \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll build

Serving an existing site

export JEKYLL_VERSION=3.8
docker run \
--rm \
--name jda-tech-blog \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--publish 4000:4000 \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll serve --watch --drafts

Contribution

Pre-requisites

How To: Add a new post

Create a new markdown file _posts/<YYYY>-<MM>-<DD>-<some-title>.markdown:

---layout: singletitle: "<Some Title>"date: <YYYY>-<MM>-<DD> <HH>:00:00 +0100tags: technology python data-engineeringheader:
overlay_image: assets/images/tech_gear_banner.jpg # can also be a different assetoverlay_filter: 0.2show_overlay_excerpt: falseauthor: <Author Name> # as used in `authors.yml`author_profile: true---# Some Title
Foo bar.
![some picture](/assets/images/<YYYY>-<MM>-<DD>-<some-title>/picture1.svg)## Section 1
...

Please test your post locally before publishing it. You can use the jekyll serve command shown in the "Serving an existing site" section to have the page hosted locally and automatically reload when you make changes.

Formatting

See GitHub Flavored Markdown Spec.

Time

Please make sure the post filename and the date in the YAML front matter are in-sync. For may choose your local time zone and some appropriate time (like 10AM).

Authors

Every author must be registered, see "How To: Add a new author". If the post is written by multiple authors, a "multi-author" must be registered there.

Assets

If you want to use pictures, add them to assets/images/<YYYY>-<MM>-<DD>-<some-title>/ (or as assets/images/<YYYY>-<MM>-<DD>-<some-title>.png if you only have a single file). They can also be used as a header image.

In general, prefer vector images (SVG) for rasterized images and uncompressed data (PNG) for compressed images. There are exceptions though (like photos).

Linking to other posts

Example:

Global URL: http://0.0.0.0:4000/introducing-kartothek/

local URL: introducing-kartothek

To link other posts (like above example) in your current post, please use the following local URL syntax instead of a global URL:

[Another Post](../local URL/)

How To: Add a new author

In _data/authors.yml, add a new author:

Author Name:
name: "Author Name"avatar: "assets/images/authors/<author_name>.jpeg"# optionallinks: # optional, you can also add a subset
- label: "Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle>"
- label: "Github"icon: "fab fa-fw fa-github-square"url: "https://github.com/<github_handle>"
- label: "LinkedIn"icon: "fab fa-linkedin"url: "https://www.linkedin.com/in/<linkedin_id>"

The author avatar (if used) must be added as assets/images/authors/<author_name>.jpeg.

For "multi-authors" (e.g. if a blog post was written by multiple people), a special entry must be added:

Author1 Name1 & Author2 Name2:
name: "Author1 Name1 & Author2 Name2"# no avatar used, or you find a picture of all authorslinks: # optional, you can also add a subset
- label: "Author1s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle1>"
- label: "Author2s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle2>"# ...

Hints

Escaping curly brackets

Curly brackets in documented code snippets are conflicting with Jekyll's Liquid templating engine.
For instance, when you want to document GitHub Actions workflows.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ needs.build-deploy.outputs.app-url }}

The line app-url: ${{ needs.build-deploy.outputs.app-url }} will cause a Liquid syntax error because the curly brackets are interpreted as Liquid syntax.

To escape them, treat the opening brackets as a Liquid variable that outputs them as a string: {{ '{{' }}.
The closing brackets don't need to be escaped.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ '{{' }} needs.build-deploy.outputs.app-url }}

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Blue Yonder Tech Blog

Usage

Run Jekyll build in Docker

export JEKYLL_VERSION=3.8
docker run \
--rm \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll build

Serving an existing site

export JEKYLL_VERSION=3.8
docker run \
--rm \
--name jda-tech-blog \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--publish 4000:4000 \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll serve --watch --drafts

Contribution

Pre-requisites

How To: Add a new post

Create a new markdown file _posts/<YYYY>-<MM>-<DD>-<some-title>.markdown:

---layout: singletitle: "<Some Title>"date: <YYYY>-<MM>-<DD> <HH>:00:00 +0100tags: technology python data-engineeringheader:
overlay_image: assets/images/tech_gear_banner.jpg # can also be a different assetoverlay_filter: 0.2show_overlay_excerpt: falseauthor: <Author Name> # as used in `authors.yml`author_profile: true---# Some Title
Foo bar.
![some picture](/assets/images/<YYYY>-<MM>-<DD>-<some-title>/picture1.svg)## Section 1
...

Please test your post locally before publishing it. You can use the jekyll serve command shown in the "Serving an existing site" section to have the page hosted locally and automatically reload when you make changes.

Formatting

See GitHub Flavored Markdown Spec.

Time

Please make sure the post filename and the date in the YAML front matter are in-sync. For may choose your local time zone and some appropriate time (like 10AM).

Authors

Every author must be registered, see "How To: Add a new author". If the post is written by multiple authors, a "multi-author" must be registered there.

Assets

If you want to use pictures, add them to assets/images/<YYYY>-<MM>-<DD>-<some-title>/ (or as assets/images/<YYYY>-<MM>-<DD>-<some-title>.png if you only have a single file). They can also be used as a header image.

In general, prefer vector images (SVG) for rasterized images and uncompressed data (PNG) for compressed images. There are exceptions though (like photos).

Linking to other posts

Example:

Global URL: http://0.0.0.0:4000/introducing-kartothek/

local URL: introducing-kartothek

To link other posts (like above example) in your current post, please use the following local URL syntax instead of a global URL:

[Another Post](../local URL/)

How To: Add a new author

In _data/authors.yml, add a new author:

Author Name:
name: "Author Name"avatar: "assets/images/authors/<author_name>.jpeg"# optionallinks: # optional, you can also add a subset
- label: "Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle>"
- label: "Github"icon: "fab fa-fw fa-github-square"url: "https://github.com/<github_handle>"
- label: "LinkedIn"icon: "fab fa-linkedin"url: "https://www.linkedin.com/in/<linkedin_id>"

The author avatar (if used) must be added as assets/images/authors/<author_name>.jpeg.

For "multi-authors" (e.g. if a blog post was written by multiple people), a special entry must be added:

Author1 Name1 & Author2 Name2:
name: "Author1 Name1 & Author2 Name2"# no avatar used, or you find a picture of all authorslinks: # optional, you can also add a subset
- label: "Author1s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle1>"
- label: "Author2s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle2>"# ...

Hints

Escaping curly brackets

Curly brackets in documented code snippets are conflicting with Jekyll's Liquid templating engine.
For instance, when you want to document GitHub Actions workflows.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ needs.build-deploy.outputs.app-url }}

The line app-url: ${{ needs.build-deploy.outputs.app-url }} will cause a Liquid syntax error because the curly brackets are interpreted as Liquid syntax.

To escape them, treat the opening brackets as a Liquid variable that outputs them as a string: {{ '{{' }}.
The closing brackets don't need to be escaped.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ '{{' }} needs.build-deploy.outputs.app-url }}

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Blue Yonder Tech Blog

Usage

Run Jekyll build in Docker

export JEKYLL_VERSION=3.8
docker run \
--rm \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll build

Serving an existing site

export JEKYLL_VERSION=3.8
docker run \
--rm \
--name jda-tech-blog \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--publish 4000:4000 \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll serve --watch --drafts

Contribution

Pre-requisites

How To: Add a new post

Create a new markdown file _posts/<YYYY>-<MM>-<DD>-<some-title>.markdown:

---layout: singletitle: "<Some Title>"date: <YYYY>-<MM>-<DD> <HH>:00:00 +0100tags: technology python data-engineeringheader:
overlay_image: assets/images/tech_gear_banner.jpg # can also be a different assetoverlay_filter: 0.2show_overlay_excerpt: falseauthor: <Author Name> # as used in `authors.yml`author_profile: true---# Some Title
Foo bar.
![some picture](/assets/images/<YYYY>-<MM>-<DD>-<some-title>/picture1.svg)## Section 1
...

Please test your post locally before publishing it. You can use the jekyll serve command shown in the "Serving an existing site" section to have the page hosted locally and automatically reload when you make changes.

Formatting

See GitHub Flavored Markdown Spec.

Time

Please make sure the post filename and the date in the YAML front matter are in-sync. For may choose your local time zone and some appropriate time (like 10AM).

Authors

Every author must be registered, see "How To: Add a new author". If the post is written by multiple authors, a "multi-author" must be registered there.

Assets

If you want to use pictures, add them to assets/images/<YYYY>-<MM>-<DD>-<some-title>/ (or as assets/images/<YYYY>-<MM>-<DD>-<some-title>.png if you only have a single file). They can also be used as a header image.

In general, prefer vector images (SVG) for rasterized images and uncompressed data (PNG) for compressed images. There are exceptions though (like photos).

Linking to other posts

Example:

Global URL: http://0.0.0.0:4000/introducing-kartothek/

local URL: introducing-kartothek

To link other posts (like above example) in your current post, please use the following local URL syntax instead of a global URL:

[Another Post](../local URL/)

How To: Add a new author

In _data/authors.yml, add a new author:

Author Name:
name: "Author Name"avatar: "assets/images/authors/<author_name>.jpeg"# optionallinks: # optional, you can also add a subset
- label: "Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle>"
- label: "Github"icon: "fab fa-fw fa-github-square"url: "https://github.com/<github_handle>"
- label: "LinkedIn"icon: "fab fa-linkedin"url: "https://www.linkedin.com/in/<linkedin_id>"

The author avatar (if used) must be added as assets/images/authors/<author_name>.jpeg.

For "multi-authors" (e.g. if a blog post was written by multiple people), a special entry must be added:

Author1 Name1 & Author2 Name2:
name: "Author1 Name1 & Author2 Name2"# no avatar used, or you find a picture of all authorslinks: # optional, you can also add a subset
- label: "Author1s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle1>"
- label: "Author2s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle2>"# ...

Hints

Escaping curly brackets

Curly brackets in documented code snippets are conflicting with Jekyll's Liquid templating engine.
For instance, when you want to document GitHub Actions workflows.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ needs.build-deploy.outputs.app-url }}

The line app-url: ${{ needs.build-deploy.outputs.app-url }} will cause a Liquid syntax error because the curly brackets are interpreted as Liquid syntax.

To escape them, treat the opening brackets as a Liquid variable that outputs them as a string: {{ '{{' }}.
The closing brackets don't need to be escaped.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ '{{' }} needs.build-deploy.outputs.app-url }}

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Blue Yonder Tech Blog

Usage

Run Jekyll build in Docker

export JEKYLL_VERSION=3.8
docker run \
--rm \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll build

Serving an existing site

export JEKYLL_VERSION=3.8
docker run \
--rm \
--name jda-tech-blog \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--publish 4000:4000 \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll serve --watch --drafts

Contribution

Pre-requisites

How To: Add a new post

Create a new markdown file _posts/<YYYY>-<MM>-<DD>-<some-title>.markdown:

---layout: singletitle: "<Some Title>"date: <YYYY>-<MM>-<DD> <HH>:00:00 +0100tags: technology python data-engineeringheader:
overlay_image: assets/images/tech_gear_banner.jpg # can also be a different assetoverlay_filter: 0.2show_overlay_excerpt: falseauthor: <Author Name> # as used in `authors.yml`author_profile: true---# Some Title
Foo bar.
![some picture](/assets/images/<YYYY>-<MM>-<DD>-<some-title>/picture1.svg)## Section 1
...

Please test your post locally before publishing it. You can use the jekyll serve command shown in the "Serving an existing site" section to have the page hosted locally and automatically reload when you make changes.

Formatting

See GitHub Flavored Markdown Spec.

Time

Please make sure the post filename and the date in the YAML front matter are in-sync. For may choose your local time zone and some appropriate time (like 10AM).

Authors

Every author must be registered, see "How To: Add a new author". If the post is written by multiple authors, a "multi-author" must be registered there.

Assets

If you want to use pictures, add them to assets/images/<YYYY>-<MM>-<DD>-<some-title>/ (or as assets/images/<YYYY>-<MM>-<DD>-<some-title>.png if you only have a single file). They can also be used as a header image.

In general, prefer vector images (SVG) for rasterized images and uncompressed data (PNG) for compressed images. There are exceptions though (like photos).

Linking to other posts

Example:

Global URL: http://0.0.0.0:4000/introducing-kartothek/

local URL: introducing-kartothek

To link other posts (like above example) in your current post, please use the following local URL syntax instead of a global URL:

[Another Post](../local URL/)

How To: Add a new author

In _data/authors.yml, add a new author:

Author Name:
name: "Author Name"avatar: "assets/images/authors/<author_name>.jpeg"# optionallinks: # optional, you can also add a subset
- label: "Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle>"
- label: "Github"icon: "fab fa-fw fa-github-square"url: "https://github.com/<github_handle>"
- label: "LinkedIn"icon: "fab fa-linkedin"url: "https://www.linkedin.com/in/<linkedin_id>"

The author avatar (if used) must be added as assets/images/authors/<author_name>.jpeg.

For "multi-authors" (e.g. if a blog post was written by multiple people), a special entry must be added:

Author1 Name1 & Author2 Name2:
name: "Author1 Name1 & Author2 Name2"# no avatar used, or you find a picture of all authorslinks: # optional, you can also add a subset
- label: "Author1s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle1>"
- label: "Author2s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle2>"# ...

Hints

Escaping curly brackets

Curly brackets in documented code snippets are conflicting with Jekyll's Liquid templating engine.
For instance, when you want to document GitHub Actions workflows.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ needs.build-deploy.outputs.app-url }}

The line app-url: ${{ needs.build-deploy.outputs.app-url }} will cause a Liquid syntax error because the curly brackets are interpreted as Liquid syntax.

To escape them, treat the opening brackets as a Liquid variable that outputs them as a string: {{ '{{' }}.
The closing brackets don't need to be escaped.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ '{{' }} needs.build-deploy.outputs.app-url }}

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Blue Yonder Tech Blog

Usage

Run Jekyll build in Docker

export JEKYLL_VERSION=3.8
docker run \
--rm \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll build

Serving an existing site

export JEKYLL_VERSION=3.8
docker run \
--rm \
--name jda-tech-blog \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--publish 4000:4000 \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll serve --watch --drafts

Contribution

Pre-requisites

How To: Add a new post

Create a new markdown file _posts/<YYYY>-<MM>-<DD>-<some-title>.markdown:

---layout: singletitle: "<Some Title>"date: <YYYY>-<MM>-<DD> <HH>:00:00 +0100tags: technology python data-engineeringheader:
overlay_image: assets/images/tech_gear_banner.jpg # can also be a different assetoverlay_filter: 0.2show_overlay_excerpt: falseauthor: <Author Name> # as used in `authors.yml`author_profile: true---# Some Title
Foo bar.
![some picture](/assets/images/<YYYY>-<MM>-<DD>-<some-title>/picture1.svg)## Section 1
...

Please test your post locally before publishing it. You can use the jekyll serve command shown in the "Serving an existing site" section to have the page hosted locally and automatically reload when you make changes.

Formatting

See GitHub Flavored Markdown Spec.

Time

Please make sure the post filename and the date in the YAML front matter are in-sync. For may choose your local time zone and some appropriate time (like 10AM).

Authors

Every author must be registered, see "How To: Add a new author". If the post is written by multiple authors, a "multi-author" must be registered there.

Assets

If you want to use pictures, add them to assets/images/<YYYY>-<MM>-<DD>-<some-title>/ (or as assets/images/<YYYY>-<MM>-<DD>-<some-title>.png if you only have a single file). They can also be used as a header image.

In general, prefer vector images (SVG) for rasterized images and uncompressed data (PNG) for compressed images. There are exceptions though (like photos).

Linking to other posts

Example:

Global URL: http://0.0.0.0:4000/introducing-kartothek/

local URL: introducing-kartothek

To link other posts (like above example) in your current post, please use the following local URL syntax instead of a global URL:

[Another Post](../local URL/)

How To: Add a new author

In _data/authors.yml, add a new author:

Author Name:
name: "Author Name"avatar: "assets/images/authors/<author_name>.jpeg"# optionallinks: # optional, you can also add a subset
- label: "Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle>"
- label: "Github"icon: "fab fa-fw fa-github-square"url: "https://github.com/<github_handle>"
- label: "LinkedIn"icon: "fab fa-linkedin"url: "https://www.linkedin.com/in/<linkedin_id>"

The author avatar (if used) must be added as assets/images/authors/<author_name>.jpeg.

For "multi-authors" (e.g. if a blog post was written by multiple people), a special entry must be added:

Author1 Name1 & Author2 Name2:
name: "Author1 Name1 & Author2 Name2"# no avatar used, or you find a picture of all authorslinks: # optional, you can also add a subset
- label: "Author1s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle1>"
- label: "Author2s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle2>"# ...

Hints

Escaping curly brackets

Curly brackets in documented code snippets are conflicting with Jekyll's Liquid templating engine.
For instance, when you want to document GitHub Actions workflows.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ needs.build-deploy.outputs.app-url }}

The line app-url: ${{ needs.build-deploy.outputs.app-url }} will cause a Liquid syntax error because the curly brackets are interpreted as Liquid syntax.

To escape them, treat the opening brackets as a Liquid variable that outputs them as a string: {{ '{{' }}.
The closing brackets don't need to be escaped.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ '{{' }} needs.build-deploy.outputs.app-url }}

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Blue Yonder Tech Blog

Usage

Run Jekyll build in Docker

export JEKYLL_VERSION=3.8
docker run \
--rm \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll build

Serving an existing site

export JEKYLL_VERSION=3.8
docker run \
--rm \
--name jda-tech-blog \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--publish 4000:4000 \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll serve --watch --drafts

Contribution

Pre-requisites

How To: Add a new post

Create a new markdown file _posts/<YYYY>-<MM>-<DD>-<some-title>.markdown:

---layout: singletitle: "<Some Title>"date: <YYYY>-<MM>-<DD> <HH>:00:00 +0100tags: technology python data-engineeringheader:
overlay_image: assets/images/tech_gear_banner.jpg # can also be a different assetoverlay_filter: 0.2show_overlay_excerpt: falseauthor: <Author Name> # as used in `authors.yml`author_profile: true---# Some Title
Foo bar.
![some picture](/assets/images/<YYYY>-<MM>-<DD>-<some-title>/picture1.svg)## Section 1
...

Please test your post locally before publishing it. You can use the jekyll serve command shown in the "Serving an existing site" section to have the page hosted locally and automatically reload when you make changes.

Formatting

See GitHub Flavored Markdown Spec.

Time

Please make sure the post filename and the date in the YAML front matter are in-sync. For may choose your local time zone and some appropriate time (like 10AM).

Authors

Every author must be registered, see "How To: Add a new author". If the post is written by multiple authors, a "multi-author" must be registered there.

Assets

If you want to use pictures, add them to assets/images/<YYYY>-<MM>-<DD>-<some-title>/ (or as assets/images/<YYYY>-<MM>-<DD>-<some-title>.png if you only have a single file). They can also be used as a header image.

In general, prefer vector images (SVG) for rasterized images and uncompressed data (PNG) for compressed images. There are exceptions though (like photos).

Linking to other posts

Example:

Global URL: http://0.0.0.0:4000/introducing-kartothek/

local URL: introducing-kartothek

To link other posts (like above example) in your current post, please use the following local URL syntax instead of a global URL:

[Another Post](../local URL/)

How To: Add a new author

In _data/authors.yml, add a new author:

Author Name:
name: "Author Name"avatar: "assets/images/authors/<author_name>.jpeg"# optionallinks: # optional, you can also add a subset
- label: "Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle>"
- label: "Github"icon: "fab fa-fw fa-github-square"url: "https://github.com/<github_handle>"
- label: "LinkedIn"icon: "fab fa-linkedin"url: "https://www.linkedin.com/in/<linkedin_id>"

The author avatar (if used) must be added as assets/images/authors/<author_name>.jpeg.

For "multi-authors" (e.g. if a blog post was written by multiple people), a special entry must be added:

Author1 Name1 & Author2 Name2:
name: "Author1 Name1 & Author2 Name2"# no avatar used, or you find a picture of all authorslinks: # optional, you can also add a subset
- label: "Author1s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle1>"
- label: "Author2s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle2>"# ...

Hints

Escaping curly brackets

Curly brackets in documented code snippets are conflicting with Jekyll's Liquid templating engine.
For instance, when you want to document GitHub Actions workflows.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ needs.build-deploy.outputs.app-url }}

The line app-url: ${{ needs.build-deploy.outputs.app-url }} will cause a Liquid syntax error because the curly brackets are interpreted as Liquid syntax.

To escape them, treat the opening brackets as a Liquid variable that outputs them as a string: {{ '{{' }}.
The closing brackets don't need to be escaped.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ '{{' }} needs.build-deploy.outputs.app-url }}

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Blue Yonder Tech Blog

Usage

Run Jekyll build in Docker

export JEKYLL_VERSION=3.8
docker run \
--rm \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll build

Serving an existing site

export JEKYLL_VERSION=3.8
docker run \
--rm \
--name jda-tech-blog \
--volume="$PWD:/srv/jekyll" \
--volume="$PWD/vendor/bundle:/usr/local/bundle" \
--publish 4000:4000 \
--interactive \
--tty \
"jekyll/jekyll:$JEKYLL_VERSION" \
jekyll serve --watch --drafts

Contribution

Pre-requisites

How To: Add a new post

Create a new markdown file _posts/<YYYY>-<MM>-<DD>-<some-title>.markdown:

---layout: singletitle: "<Some Title>"date: <YYYY>-<MM>-<DD> <HH>:00:00 +0100tags: technology python data-engineeringheader:
overlay_image: assets/images/tech_gear_banner.jpg # can also be a different assetoverlay_filter: 0.2show_overlay_excerpt: falseauthor: <Author Name> # as used in `authors.yml`author_profile: true---# Some Title
Foo bar.
![some picture](/assets/images/<YYYY>-<MM>-<DD>-<some-title>/picture1.svg)## Section 1
...

Please test your post locally before publishing it. You can use the jekyll serve command shown in the "Serving an existing site" section to have the page hosted locally and automatically reload when you make changes.

Formatting

See GitHub Flavored Markdown Spec.

Time

Please make sure the post filename and the date in the YAML front matter are in-sync. For may choose your local time zone and some appropriate time (like 10AM).

Authors

Every author must be registered, see "How To: Add a new author". If the post is written by multiple authors, a "multi-author" must be registered there.

Assets

If you want to use pictures, add them to assets/images/<YYYY>-<MM>-<DD>-<some-title>/ (or as assets/images/<YYYY>-<MM>-<DD>-<some-title>.png if you only have a single file). They can also be used as a header image.

In general, prefer vector images (SVG) for rasterized images and uncompressed data (PNG) for compressed images. There are exceptions though (like photos).

Linking to other posts

Example:

Global URL: http://0.0.0.0:4000/introducing-kartothek/

local URL: introducing-kartothek

To link other posts (like above example) in your current post, please use the following local URL syntax instead of a global URL:

[Another Post](../local URL/)

How To: Add a new author

In _data/authors.yml, add a new author:

Author Name:
name: "Author Name"avatar: "assets/images/authors/<author_name>.jpeg"# optionallinks: # optional, you can also add a subset
- label: "Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle>"
- label: "Github"icon: "fab fa-fw fa-github-square"url: "https://github.com/<github_handle>"
- label: "LinkedIn"icon: "fab fa-linkedin"url: "https://www.linkedin.com/in/<linkedin_id>"

The author avatar (if used) must be added as assets/images/authors/<author_name>.jpeg.

For "multi-authors" (e.g. if a blog post was written by multiple people), a special entry must be added:

Author1 Name1 & Author2 Name2:
name: "Author1 Name1 & Author2 Name2"# no avatar used, or you find a picture of all authorslinks: # optional, you can also add a subset
- label: "Author1s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle1>"
- label: "Author2s' Twitter"icon: "fab fa-fw fa-twitter-square"url: "https://twitter.com/<twitter_handle2>"# ...

Hints

Escaping curly brackets

Curly brackets in documented code snippets are conflicting with Jekyll's Liquid templating engine.
For instance, when you want to document GitHub Actions workflows.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ needs.build-deploy.outputs.app-url }}

The line app-url: ${{ needs.build-deploy.outputs.app-url }} will cause a Liquid syntax error because the curly brackets are interpreted as Liquid syntax.

To escape them, treat the opening brackets as a Liquid variable that outputs them as a string: {{ '{{' }}.
The closing brackets don't need to be escaped.

e2e-test:
needs: build-deployuses: ./.github/workflows/e2e_test.execution.ymlsecrets: inheritwith:
app-url: ${{ '{{' }} needs.build-deploy.outputs.app-url }}

Releases

Packages

Used by

Contributors

Languages