moved files in place, edited posts to fix date format (seconds need added to some times, plus add colon to +time), added eleventy ignore file, added .eleventy.js

This commit is contained in:
Robert McGovern 2023-01-23 00:54:11 +00:00
parent 5b16d8f1bd
commit 3d3b18411f
47 changed files with 4845 additions and 59 deletions

353
.eleventy.js Normal file
View File

@ -0,0 +1,353 @@
const fs = require("fs-extra");
const sass = require("sass");
const { promisify } = require("util");
const sassRender = promisify(sass.render);
const postcss = require("postcss");
const autoprefixer = require("autoprefixer");
const markdownIt = require("markdown-it");
const markdownItRenderer = new markdownIt();
const markdownItAnchor = require("markdown-it-anchor");
// const relativeUrl = require("eleventy-filter-relative-url");
const pluginTOC = require("eleventy-plugin-toc");
const moment = require("moment");
const description = require("eleventy-plugin-description");
const pluginRss = require("@11ty/eleventy-plugin-rss");
const UpgradeHelper = require("@11ty/eleventy-upgrade-help");
const xmlFiltersPlugin = require("eleventy-xml-plugin");
// relativeURL
const path = require("path");
const urlFilter = require("@11ty/eleventy/src/Filters/Url");
const indexify = (url) => url.replace(/(\/[^.]*)$/, "$1index.html");
module.exports = function (eleventyConfig) {
eleventyConfig.addPlugin(pluginRss);
//Blog excerpts
eleventyConfig.addPlugin(description);
// Eleventy Navigation (https://www.11ty.dev/docs/plugins/navigation/)
eleventyConfig.addPlugin(require("@11ty/eleventy-navigation"));
// Eleventy RSS Feed (https://www.11ty.dev/docs/plugins/rss/)
eleventyConfig.addPlugin(require("@11ty/eleventy-plugin-rss"));
// Filter to generate a Table of Contents from page content
eleventyConfig.addPlugin(pluginTOC, {
tags: ["h2", "h3"],
wrapper: "div",
});
// TODO https://www.npmjs.com/package/eleventy-plugin-meta-generator
// Eleventy Syntax Highlighting (https://www.11ty.dev/docs/plugins/syntaxhighlight/)
eleventyConfig.addPlugin(require("@11ty/eleventy-plugin-syntaxhighlight"));
eleventyConfig.addPlugin(xmlFiltersPlugin);
// Custom Collections
eleventyConfig.addCollection("pages", (collection) =>
collection.getFilteredByGlob("./src/_pages/**/*")
);
eleventyConfig.addCollection("posts", (collection) =>
collection
.getFilteredByGlob("./src/_posts/**/*")
.filter(
(item) => item.data.draft !== true && item.date <= new Date()
)
.reverse()
.map((cur, i, all) => {
cur.data["siblings"] = {
next: all[i - 1],
prev: all[i + 1],
};
return cur;
})
);
eleventyConfig.addCollection("projects", (collection) =>
collection
.getFilteredByGlob("./src/projects/**/*")
.sort((a, b) => a.data.weight - b.data.weight)
);
// eleventyConfig.addCollection("posts", function (collectionApi) {
// return collectionApi.getFilteredByGlob("./src/posts/**/*.md");
// });
eleventyConfig.addCollection("tags", (collection) => {
let tags = new Set();
collection.getAll().forEach((item) => {
if ("tags" in item.data) {
for (const tag of item.data.tags) {
tags.add(tag);
}
}
});
return [...tags];
});
// Filters
// eleventyConfig.addFilter("markdownify", (str) => {
// return markdownItRenderer.renderInline(str);
// });
eleventyConfig.addFilter("markdownify", (string) => {
return md.renderInline(string);
});
eleventyConfig.addNunjucksFilter("markdownify", (str) => md.render(str));
eleventyConfig.addFilter("jsonify", (variable) => JSON.stringify(variable));
eleventyConfig.addFilter("slugify", (str) =>
require("slugify")(str, {
lower: true,
replacement: "-",
remove: /[*+~.·,()''`´%!?¿:@]/g,
})
);
eleventyConfig.addFilter("where", (array, key, value) =>
array.filter((item) => {
const keys = key.split(".");
const reducedKey = keys.reduce((object, key) => object[key], item);
return reducedKey === value ? item : false;
})
);
eleventyConfig.addFilter("date", (date, format = "") =>
require("moment")(date).format(format)
);
eleventyConfig.addFilter("relative_url", relativeURL);
eleventyConfig.addLiquidFilter("toUTCString", (date) => {
const utc = date.toUTCString();
return moment.utc(utc).format("MMMM Do YYYY");
});
eleventyConfig.addFilter("number_of_words", numberOfWords);
// eleventyConfig.addFilter("absolute_url", relativeUrl);
// eleventyConfig.addShortcode("where_exp", function (item, exp) {
// console.log(exp);
// return eval(exp);
// });
eleventyConfig.addFilter("where_exp", function (value) {
// where_exp function
return value.hidden != true;
});
eleventyConfig.addLayoutAlias(
"archive-taxonomy",
"layouts/archive-taxonomy.html"
);
eleventyConfig.addLayoutAlias("archive", "layouts/archive.html");
eleventyConfig.addLayoutAlias("categories", "layouts/categories.html");
eleventyConfig.addLayoutAlias("category", "layouts/category.html");
eleventyConfig.addLayoutAlias("collection", "layouts/collection.html");
eleventyConfig.addLayoutAlias("compress", "layouts/compress.html");
eleventyConfig.addLayoutAlias("default", "layouts/default.html");
eleventyConfig.addLayoutAlias("home", "layouts/home.html");
eleventyConfig.addLayoutAlias("posts", "layouts/posts.html");
eleventyConfig.addLayoutAlias("search", "layouts/search.html");
eleventyConfig.addLayoutAlias("single", "layouts/single.html");
eleventyConfig.addLayoutAlias("splash", "layouts/splash.html");
eleventyConfig.addLayoutAlias("tag", "layouts/tag.html");
eleventyConfig.addLayoutAlias("tags", "layouts/tags.html");
eleventyConfig.addLayoutAlias("gallery", "layouts/gallery");
// Passthrough copy
// don't use .gitignore (allows compiling sass to css into a monitored folder WITHOUT committing it to repo)
eleventyConfig.setUseGitIgnore(false);
//Copy CNAME
eleventyConfig.addPassthroughCopy("src/CNAME");
// Processing configuration
eleventyConfig.addPassthroughCopy("src/favicon.ico");
eleventyConfig.addPassthroughCopy("src/admin");
eleventyConfig.addPassthroughCopy("src/assets");
// eleventyConfig.addPassthroughCopy({ "src/_sass": "assets/css" });
eleventyConfig.addShortcode("post_url", (collection, slug) => {
try {
if (collection.length < 1) {
throw "Collection appears to be empty";
}
if (!Array.isArray(collection)) {
throw "Collection is an invalid type - it must be an array!";
}
if (typeof slug !== "string") {
throw "Slug is an invalid type - it must be a string!";
}
const found = collection.find((p) => p.fileSlug == slug);
if (found === 0 || found === undefined) {
throw `${slug} not found in specified collection.`;
} else {
return found.url;
}
} catch (e) {
console.error(
`RMCG:An error occured while searching for the url to ${slug}. Details:`,
e
);
}
});
// Set section
// Configure BrowserSync to serve the 404 page for missing files
eleventyConfig.setBrowserSyncConfig({
callbacks: {
ready: (_err, browserSync) => {
const content_404 = fs.readFileSync("dist/404.html");
browserSync.addMiddleware("*", (_req, res) => {
// render the 404 content instead of redirecting
res.write(content_404);
res.end();
});
},
},
});
eleventyConfig.setBrowserSyncConfig({
files: "./dist/assets/styles/**/*.css",
});
// Merge Data (https://www.11ty.dev/docs/data-deep-merge/)
eleventyConfig.setDataDeepMerge(true);
eleventyConfig.setFrontMatterParsingOptions({
excerpt: true,
});
eleventyConfig.setLibrary("md", markdownIt().use(markdownItAnchor));
eleventyConfig.setLiquidOptions({
// dynamicPartials: false,
// strictVariables: false,
// strictFilters: false,
jekyllInclude: true,
});
// Markdown Configuration
const md = require("markdown-it")({
html: true,
breaks: true,
linkify: true,
});
eleventyConfig.setLibrary(
"md",
md
.use(require("markdown-it-attrs"))
.use(require("markdown-it-container"), "", {
validate: () => true,
render: (tokens, idx) => {
if (tokens[idx].nesting === 1) {
const classList = tokens[idx].info.trim();
return `<div ${classList && `class="${classList}"`}>`;
} else {
return `</div>`;
}
},
})
.use(require("markdown-it-fontawesome"))
.use(require("markdown-it-footnote"))
);
// override markdown-it-footnote anchor template to use a different unicode character
md.renderer.rules.footnote_anchor = (tokens, idx, options, env, slf) => {
var id = slf.rules.footnote_anchor_name(tokens, idx, options, env, slf);
if (tokens[idx].meta.subId > 0) {
id += ":" + tokens[idx].meta.subId;
}
/* ⇑ with escape code to prevent display as Apple Emoji on iOS */
return (
' <a href="#fnref' +
id +
'" class="footnote-backref">\u21d1\uFE0E</a>'
);
};
//for upgrade sanity
//eleventyConfig.addPlugin(UpgradeHelper);
// eleventyConfig.addWatchTarget("./assets/css/");
// eleventyConfig.addTransform(
// "sass",
// async function sassTransform(content, outputPath) {
// if (outputPath?.endsWith(".css")) {
// const { css } = await sassRender({
// data: content,
// outputStyle: "compressed",
// precision: 3,
// });
// return css;
// }
// return content;
// }
// );
return {
templateFormats: ["html", "liquid", "md"],
pathPrefix: "/",
passthroughFileCopy: true,
dir: {
input: "src",
includes: "_includes",
data: "_data",
output: "dist",
// input: "./", // Equivalent to Jekyll's source property
// output: "./_site", // Equivalent to Jekyll's destination property
},
};
};
function numberOfWords(content) {
return content.split(/\s+/g).length;
}
function relativeURL(url, pathPrefix = undefined) {
if (pathPrefix !== undefined) {
// Fall back on original url filter if pathPrefix is set.
return urlFilter(url, pathPrefix);
}
if (pathPrefix == undefined && this.page == undefined) {
return urlFilter(url, "");
}
// Look up the url of the current rendering page, which is accessible via
// `this`.
//console.log(this); // rmcg
// rmcg - removed ctx from this.ctx.page.url
const currentDir = this.page.url;
const filteredUrl = urlFilter(url, "/");
// Make sure the index.html is expressed.
const indexUrl = indexify(filteredUrl);
// Check that the url doesn't specify a protocol.
const u = new URL(indexUrl, "make-relative://");
if (u.protocol !== "make-relative:") {
// It has a protocol, so just return the filtered URL output.
return filteredUrl;
}
// Return the relative path, or `index.html` if it's the same as the current
// page's directory.
const relativePath = `${
path.relative(currentDir, u.pathname) || "index.html"
}`;
return relativePath;
}

78
.gitignore vendored
View File

@ -9,3 +9,81 @@ _site
.jekyll-metadata
**/*/premdesigns
# ---> Eleventy
#_site
#package-lock.json
css/main.css.map
# dependency directories
node_modules/
# config
.env*
# caches
.cache
.sass-cache/
# eleventy gulp build
/dist
*.log
npm-debug.*
*.scssc
*.swp
Thumbs.db
dist
src/_includes/css
# my chosen output directory.
www
#### From FrontEnd Mentor gitignore. Just to avoid accidentally uploading design files
#
# Avoid accidental upload of the Sketch and Figma design files
#####################################################
## Please do not remove lines 5 and 6 - thanks! 🙂 ##
#####################################################
*.sketch
*.fig
# Avoid accidental XD upload if you convert the design file
###############################################
## Please do not remove line 12 - thanks! 🙂 ##
###############################################
*.xd
.prettierignore
# ---> macOS
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

11
notes.md Normal file
View File

@ -0,0 +1,11 @@
Notes from transitioning blog from Jekyll to 11ty, but still using Jekyll theme Minimal Mistakes.
Just to see if it reduces that cpu usage. Nope.
Removed from site.json
```
"post_template": "post",
"page_template": "page",
"draft_template": "draft"
```

4231
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,14 @@
"description": "Second generation of site using 11ty for building but using Jekyll theme Minimal Mistakes (with mods to make it work)",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"watch:sass": "sass --watch src/_sass/**/*.scss dist/assets/styles/minimal-mistakes.css",
"build:sass": "sass --style=compressed src/_sass/minimal-mistakes.scss dist/assets/styles/minimal-mistakes.css",
"build:mysass": "sass --style=compressed src/assets/css/main.scss dist/assets/css/main.css",
"watch:eleventy": "eleventy --serve",
"build:eleventy": "eleventy",
"start": "npm-run-all build:sass --parallel watch:*",
"build": "npm-run-all build:*",
"debug": "DEBUG=Eleventy:* eleventy"
},
"repository": {
"type": "git",
@ -17,5 +24,29 @@
"jekyll"
],
"author": "Robert McGovern et all",
"license": "MIT"
"license": "MIT",
"devDependencies": {
"@11ty/eleventy": "^2.0.0-beta.1"
},
"dependencies": {
"@11ty/eleventy-navigation": "^0.3.5",
"@11ty/eleventy-plugin-rss": "^1.2.0",
"@11ty/eleventy-plugin-syntaxhighlight": "^4.2.0",
"@11ty/eleventy-upgrade-help": "^2.0.5",
"autoprefixer": "^10.4.13",
"eleventy-plugin-description": "^0.1.5",
"eleventy-plugin-toc": "^1.1.5",
"eleventy-xml-plugin": "^0.1.0",
"fs-extra": "^11.1.0",
"markdown-it-anchor": "^8.6.6",
"markdown-it-attrs": "^4.1.6",
"markdown-it-container": "^3.0.0",
"markdown-it-fontawesome": "^0.3.0",
"markdown-it-footnote": "^3.0.3",
"markdownify": "^0.1.0",
"moment": "^2.29.4",
"npm-run-all": "^4.1.5",
"postcss": "^8.4.21",
"sass": "^1.57.1"
}
}

33
src/.eleventyignore Normal file
View File

@ -0,0 +1,33 @@
*.sublime-project
*.sublime-workspace
vendor
.asset-cache
.bundle
.jekyll-assets-cache
.sass-cache
assets/js/plugins
assets/js/_main.js
assets/js/vendor
Capfile
CHANGELOG
CHANGELOG.md
config
Gemfile
Gruntfile.js
gulpfile.js
LICENSE
log
node_modules
package.json
package-lock.json
Rakefile
README
README.md
tmp
test
docs
_site
#index.html
#/docs # ignore Minimal Mistakes /docs
#test # ignore Minimal Mistakes /test

View File

@ -360,8 +360,5 @@
"page_ext": "html",
"post_layout": "single",
"page_layout": "page",
"titlecase": true,
"post_template": "post",
"page_template": "page",
"draft_template": "draft"
"titlecase": true
}

View File

@ -1,4 +1,4 @@
---
layout: post
layout: single
title: pretty-terminal-configs
---

View File

@ -1,22 +0,0 @@
<article id="comment{{ include.index }}" class="js-comment comment" itemprop="comment" itemscope itemtype="https://schema.org/Comment">
<div class="comment__avatar-wrapper">
<img class="comment__avatar" src="https://www.gravatar.com/avatar/{{ include.email }}?d=mm&s=80" alt="{{ include.name }}">
</div>
<div class="comment__content-wrapper">
<h3 class="comment__author" itemprop="author" itemscope itemtype="https://schema.org/Person">
{% unless include.url == blank %}
<span itemprop="name"><a rel="external nofollow" itemprop="url" href="{{ include.url }}">{{ include.name }}</a></span>
{% else %}
<span itemprop="name">{{ include.name }}</span>
{% endunless %}
</h3>
<p class="comment__date">
{% if include.date %}
{% if include.index %}<a href="#comment{{ include.index }}" itemprop="url">{% endif %}
<time datetime="{{ include.date | date_to_xmlschema }}" itemprop="datePublished">{{ include.date | date: "%B %-d, %Y at %I:%M %p" }}</time>
{% if include.index %}</a>{% endif %}
{% endif %}
</p>
<div itemprop="text">{{ include.message | markdownify }}</div>
</div>
</article>

View File

@ -0,0 +1,42 @@
---
---
<!doctype html>
<!--
Minimal Mistakes Jekyll Theme 4.24.0 by Michael Rose
Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes
Free for personal and commercial use under the MIT license
https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
-->
<html lang="{{ site.locale | slice: 0,2 | default: "en" }}" class="no-js">
<head>
{% include head.html %}
{% include head/custom.html %}
</head>
<body class="layout--{{ page.layout | default: layout.layout }}{% if page.classes or layout.classes %}{{ page.classes | default: layout.classes | join: ' ' | prepend: ' ' }}{% endif %}">
{% include_cached skip-links.html %}
{% include_cached browser-upgrade.html %}
{% include_cached masthead.html %}
<div class="initial-content">
{{ content }}
</div>
{% if site.search == true %}
<div class="search-content">
{% include_cached search/search_form.html %}
</div>
{% endif %}
<div id="footer" class="page__footer">
<footer>
{% include footer/custom.html %}
{% include_cached footer.html %}
</footer>
</div>
{% include scripts.html %}
</body>
</html>

View File

@ -0,0 +1,30 @@
---
layout: archive
---
{{ content }}
<ul class="taxonomy__index">
{% assign postsInYear = site.posts | where_exp: "item", "item.hidden != true" | group_by_exp: 'post', 'post.date | date: "%Y"' %}
{% for year in postsInYear %}
<li>
<a href="#{{ year.name }}">
<strong>{{ year.name }}</strong> <span class="taxonomy__count">{{ year.items | size }}</span>
</a>
</li>
{% endfor %}
</ul>
{% assign entries_layout = page.entries_layout | default: 'list' %}
{% assign postsByYear = site.posts | where_exp: "item", "item.hidden != true" | group_by_exp: 'post', 'post.date | date: "%Y"' %}
{% for year in postsByYear %}
<section id="{{ year.name }}" class="taxonomy__section">
<h2 class="archive__subtitle">{{ year.name }}</h2>
<div class="entries-{{ entries_layout }}">
{% for post in year.items %}
{% include archive-single.html type=entries_layout %}
{% endfor %}
</div>
<a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
</section>
{% endfor %}

View File

@ -36,7 +36,7 @@ layout: default
<aside class="sidebar__right {% if page.toc_sticky %}sticky{% endif %}">
<nav class="toc">
<header><h4 class="nav__title"><i class="fas fa-{{ page.toc_icon | default: 'file-alt' }}"></i> {{ page.toc_label | default: site.data.ui-text[site.locale].toc_label | default: "On this page" }}</h4></header>
{% include toc.html sanitize=true html=content h_min=1 h_max=6 class="toc__menu" skip_no_ids=true %}
{% include toc.html sanitize=true html=content h_min=1 h_max=6 class="toc__menu" %}
</nav>
</aside>
{% endif %}

View File

@ -5,7 +5,7 @@ author_profile: true
read_time: true
share: true
related: true
date: '2019-02-22 00:54:00 +0100'
date: 2019-02-22 00:54:00 +01:00
tag: Site
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 1 … So the adventure (finally) begins
date: 2019-05-28 21:32:45 +0159
date: 2019-05-28 21:32:45 +01:59
tags: [camino,caminodesantiago,jakobsweg,caminofrances]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 5 - Unexpectedly Easy
date: 2019-06-01 20:50:46 +0159
date: 2019-06-01 20:50:46 +01:59
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 6 - Bad Day
date: 2019-06-02 18:48:22 +0159
date: 2019-06-02 18:48:22 +01:59
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 7 - Taking a break
date: 2019-06-03 22:19:16 +0159
date: 2019-06-03 22:19:16 +01:59
category:
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 8 - Its my birthday
date: 2019-06-04 21:29:37 +0159
date: 2019-06-04 21:29:37 +01:59
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 9 - TWTFSSMTW
date: 2019-06-05 21:04:53 +0159
date: 2019-06-05 21:04:53 +01:59
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 10 - A Fountain of Wine
date: 2019-06-06 21:57:40 +0159
date: 2019-06-06 21:57:40 +01:59
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 11 - Frustrated
date: 2019-06-07 23:09:43 +0159
date: 2019-06-07 23:09:43 +01:59
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 12 - An unexpected port
date: 2019-06-08 22:43:16 +0159
date: 2019-06-08 22:43:16 +01:59
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 13 - A second wind
date: 2019-06-09 22:38:02 +0159
date: 2019-06-09 22:38:02 +01:59
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 15 - cant think of a subtitle yet
date: 2019-06-11 23:05:50 +0159
date: 2019-06-11 23:05:50 +01:59
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 16 - Off to the races
date: 2019-06-12 22:20:00 +0159
date: 2019-06-12 22:20:00 +01:59
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 17
date: 2019-06-13 23:00:00 +0159
date: 2019-06-13 23:00:00 +01:59
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 18 - drawn to stop
date: 2019-06-14 22:56:21 +0159
date: 2019-06-14 22:56:21 +01:59
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 19
date: 2019-06-15 18:06:55 +0159
date: 2019-06-15 18:06:55 +01:59
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -5,7 +5,7 @@ read_time: true
share: true
related: true
title: Day 21
date: 2019-06-17 22:38:55 +0159
date: 2019-06-17 22:38:55 +01:59
tags: [camino,caminodesantiago,jakobsweg]
---

View File

@ -6,7 +6,7 @@ tags:
- personal
- site
category: personal
date: 2020-04-17 02:18 +0100
date: 2020-04-17 02:18:00 +01:00
---
Long time, no write.

View File

@ -6,7 +6,7 @@ tags:
- swift
- coding-challenges
category: coding-challenges
date: 2020-04-20 15:28 +0100
date: 2020-04-20 15:28:00 +01:00
---
Second one within 13 hours, good lord, that would never do.

View File

@ -6,7 +6,7 @@ tags:
- swift
- coding-challenges
category: coding-challenges
date: 2020-04-20 13:36 +0100
date: 2020-04-20 13:36:00 +01:00
---
As an effort to improve and challenge myself I got a copy of Paul Hudson's [Swift Coding Challenges](https://www.hackingwithswift.com/store/swift-coding-challenges) book and I'm going to work through it and post my thoughts on it and about how I did. I (probably) won't post the answers because that might spoil it for some.

View File

@ -21,7 +21,7 @@ gallery:
image_path: https://roadmap.sh/roadmaps/devops.png
alt: DevOps Roadmap
title: DevOps Roadmap
date: 2020-04-21 00:44 +0100
date: 2020-04-21 00:44:00 +01:00
---
I mentioned in the [goals post]({% post_url 2020-04-17-goals %}), one of the things I am aiming to do is to start learning web development.

View File

@ -9,7 +9,7 @@ tags:
- caminodesantiago
category: camino
date: 2020-05-27 01:45 +0100
date: 2020-05-27 01:45:00 +01:00
---
A year ago tomorrow I began the most gruelling, yet immensely satisfying, journey of my life. I set off from my home in Buchholz in der Nordheide Germany, to fly to France to walk the Camino de Santiago.

View File

@ -2,6 +2,7 @@
title: What happens when I finish a Frontend Mentor Challenge (or how I build and deploy an 11ty site)
tags: [webdev, site, frontendmentor]
category: [programming, webdev]
date: 2022-10-15
---
I've been doing challenges from [Frontend Mentor](https://frontendmentor.io) as a means to practice frontend web development. Specifically working with plain HTML, CSS and JavaScript.

View File

@ -2,6 +2,7 @@
title: Moving site from Jekyll to ???
tags: [webdev, site, personal]
category: [site, webdev, personal]
date: 2023-01-21
---
Goal is that at some point in the not to distant future I will move the blog from [Jekyll](https://jekyllrb.com) & the [Minimal Mistakes Theme](https://mmistakes.github.io/minimal-mistakes/) to something built with [11ty](https://www.11ty.dev/).