From f0c001314b24dede7232f2d03afc4b705f350d88 Mon Sep 17 00:00:00 2001 From: James Fenn Date: Fri, 11 Dec 2020 17:11:31 -0500 Subject: [PATCH] lots of metadata things --- .eleventy.js | 13 +- _data/git.js | 2 + _data/meta.json | 4 +- _includes/footer.liquid | 4 +- _includes/head.liquid | 45 ++-- _includes/layouts/default.liquid | 7 - _includes/layouts/project.liquid | 75 +++++- _includes/newsletter.liquid | 6 + assets/css/styles.scss | 8 + assets/images/ic/markdown-mark.svg | 5 + favicon.ico | Bin 0 -> 1150 bytes meta/ieconfig.njk | 14 + meta/keybase.njk | 60 +++++ meta/manifest.json | 8 - meta/manifest.njk | 25 ++ meta/robots.njk | 10 + meta/sitemap.njk | 14 + meta/sw.js.njk | 57 ++++ package.json | 2 +- pages/404.html | 11 + pages/blog/index.html | 2 +- pages/blog/rss.njk | 2 +- pages/index.html | 2 +- pages/licenses.md | 279 -------------------- pages/links.njk | 1 + pages/now.md | 15 +- pages/policies.html | 408 +++++++++++++++++++++++++++++ pages/projects/index.html | 3 +- pages/projects/project.html | 85 ------ pages/projects/wiki.html | 1 + projects/attribouter.html | 30 +-- projects/git-rest-wrapper.html | 13 +- projects/ktordocs.html | 15 +- projects/metronome.html | 13 +- 34 files changed, 786 insertions(+), 453 deletions(-) create mode 100644 _includes/newsletter.liquid create mode 100644 assets/images/ic/markdown-mark.svg create mode 100644 favicon.ico create mode 100644 meta/ieconfig.njk create mode 100644 meta/keybase.njk delete mode 100644 meta/manifest.json create mode 100644 meta/manifest.njk create mode 100644 meta/robots.njk create mode 100644 meta/sitemap.njk create mode 100644 meta/sw.js.njk create mode 100644 pages/404.html delete mode 100644 pages/licenses.md create mode 100644 pages/policies.html delete mode 100644 pages/projects/project.html diff --git a/.eleventy.js b/.eleventy.js index cdc7481..5426c05 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -1,6 +1,5 @@ const _fs = require("fs"); const _markdown = require("markdown-it"); -const _markdownAnchor = require("markdown-it-anchor"); const _yaml = require("js-yaml"); const _moment = require("moment"); @@ -13,22 +12,22 @@ module.exports = function(eleventyConfig) { eleventyConfig.addLayoutAlias("base", "layouts/base.liquid"); eleventyConfig.addLayoutAlias("page", "layouts/page.liquid"); + eleventyConfig.addPassthroughCopy("favicon.ico"); eleventyConfig.addPassthroughCopy("assets"); eleventyConfig.addPassthroughCopy({"assets/images": "images"}); eleventyConfig.addPassthroughCopy({"assets/files": "files"}); - eleventyConfig.addPassthroughCopy("browserconfig.xml"); - eleventyConfig.addPassthroughCopy("manifest.json"); - eleventyConfig.addPassthroughCopy("favicon.ico"); - const markdownItRenderer = new _markdown({ html: true }).use( - require('markdown-it-highlightjs') - ); + const markdownItRenderer = new _markdown({ html: true }) + .use(require('markdown-it-prism'), { plugins: ["autoloader"] }) + .use(require("markdown-it-anchor")); eleventyConfig.addFilter("markdownify", function(str) { if (typeof str === 'string') return markdownItRenderer.render(str); }); + eleventyConfig.setLibrary("md", markdownItRenderer); + eleventyConfig.addFilter("where", function(array, prop, value) { return (array || []).filter((item) => item[prop] == value); }); diff --git a/_data/git.js b/_data/git.js index 7235587..631ca79 100644 --- a/_data/git.js +++ b/_data/git.js @@ -53,11 +53,13 @@ async function getRepoProject(repo) { } catch (e) {} let screenshots = (meta.screenshots || []).map((url) => `${rawUrl}/${url}`); + let icon = meta.icon ? `${rawUrl}/${meta.icon}` : null; let project = { id: id.toLowerCase(), repo, title, + icon, screenshots, readme, hasWiki: false diff --git a/_data/meta.json b/_data/meta.json index e29e21f..d798d59 100644 --- a/_data/meta.json +++ b/_data/meta.json @@ -1,8 +1,10 @@ { + "domainurl": "https://jfenn.me", "name": "James Fenn", "email": "me@jfenn.me", "description": "Writer of bad puns and slightly better software. This website contains information about my adventures in programming, current projects, and me.", - "icon": "/assets/images/logo.png", + "icon": "/images/me.jpg", + "image": "/images/headers/snowytrees.jpg", "links": { "twitter": "https://twitter.com/fennifith", "fediverse": "https://is.a.horrific.dev/@james", diff --git a/_includes/footer.liquid b/_includes/footer.liquid index 71602ab..580fac7 100644 --- a/_includes/footer.liquid +++ b/_includes/footer.liquid @@ -1,7 +1,7 @@ diff --git a/_includes/head.liquid b/_includes/head.liquid index cc96199..98174dd 100644 --- a/_includes/head.liquid +++ b/_includes/head.liquid @@ -10,11 +10,17 @@ {% assign head_description = meta.description %} {% if description %} -{% assign head_description = description %} +{% assign head_description = description | xml_escape %} {% elsif renderData.description %} -{% assign head_description = renderData.description %} +{% assign head_description = renderData.description | xml_escape %} {% endif %} +{% assign head_icon = meta.domainurl | append: meta.icon %} +{% if icon %}{% assign head_icon = icon %}{% endif %} + +{% assign head_image = meta.domainurl | append: meta.image %} +{% if image %}{% assign head_image = image %}{% endif %} + @@ -26,23 +32,18 @@ - + - - - - - - - - - - - - - + + + + + + + + @@ -55,11 +56,19 @@ - + + - + + + + + + + + diff --git a/_includes/layouts/default.liquid b/_includes/layouts/default.liquid index 1f3410f..179c9a5 100644 --- a/_includes/layouts/default.liquid +++ b/_includes/layouts/default.liquid @@ -3,15 +3,8 @@ {% include head.liquid %} - {{ content | safe }} - - - - - - diff --git a/_includes/layouts/project.liquid b/_includes/layouts/project.liquid index 7f75f84..47f365b 100644 --- a/_includes/layouts/project.liquid +++ b/_includes/layouts/project.liquid @@ -1,8 +1,14 @@ --- -layout: base --- + -{% assign project = git.projects | where: 'id', page.fileSlug | first %} + + + {% assign project = git.projects | where: 'id', page.fileSlug | first %} + {% include head, title: project.title, description: project.repo.description, icon: project.icon %} + + + {% include nav %}
@@ -62,7 +68,7 @@ layout: base
{% if project.hasWiki %} -
+
@@ -78,11 +84,64 @@ layout: base
{% endif %} -{% assign sections = content | split: '
' %} -{% for section in sections %} -
-
- {{ section | safe }} +{% if tags contains "project-deprecated" %} +
+
+
+
+ error_outline +
+
+
This project is deprecated!
+

Pull requests may still be accepted, but I am no longer actively maintaining it and proper functionality is not guaranteed.

+

If you would like to fork this project and continue development, please contact me so I can link to your fork from this page.

+
+
+{% endif %} + +{% capture lastSection %} +
+
+ source +
+
+

Open Source

+

Browse the source code, suggest changes, or develop it yourself!

+ Git Repo chevron_right +
+
+ +
+ +
+ {{ project.readme | markdownify }} +
+
+{% endcapture %} + +{% assign contents = content | split: '===' %} +{% if contents.size > 1 %} +{% assign sections = content | append: '===' | append: lastSection | split: '===' %} +{% else %} +{% assign sections = lastSection | split: '===' %} +{% endif %} + +{% for section in sections %} +
+
+ {{ section | safe }} +
+
{% endfor %} + +{% include footer %} + + + diff --git a/_includes/newsletter.liquid b/_includes/newsletter.liquid new file mode 100644 index 0000000..520db4f --- /dev/null +++ b/_includes/newsletter.liquid @@ -0,0 +1,6 @@ +
+
+

Stay up to date!

+ +
+
diff --git a/assets/css/styles.scss b/assets/css/styles.scss index ee11f09..1b371ef 100644 --- a/assets/css/styles.scss +++ b/assets/css/styles.scss @@ -33,6 +33,14 @@ a:focus > code { filter: contrast(0) brightness(2); } +pre > code { + line-height: 1.25rem !important; +} + +pre > code * { + font-size: 0.8571428571rem !important; +} + * { animation: none !important; } diff --git a/assets/images/ic/markdown-mark.svg b/assets/images/ic/markdown-mark.svg new file mode 100644 index 0000000..ddd8fe8 --- /dev/null +++ b/assets/images/ic/markdown-mark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..75bb666852c7ad8dcb7b59292aedc204d97a9d0b GIT binary patch literal 1150 zcmZQzU<5(|0R|vYV8~!$U=RbcG=LZ+qyWT>V3L8s0VszK{{R2aIEpdD02ofXKx~PG zwMhvlpuYV;{1J%XL+PC)>gNUO6GXzir06GCEzmx3AYKZ@#mHs=`Q<>o7>GrY#nIV7 z`9L8455zx#m=z=sq&cBtAaQSWJ;;2ZJjmaTKpcuD9u5?%2V!ny@liHr+9f4SfKdgE H6Y? + + + + + + #FFFFFF + + + diff --git a/meta/keybase.njk b/meta/keybase.njk new file mode 100644 index 0000000..8ccffd3 --- /dev/null +++ b/meta/keybase.njk @@ -0,0 +1,60 @@ +--- +permalink: /keybase.txt +eleventyExcludeFromCollections: true +--- +================================================================== +https://keybase.io/jafenn +-------------------------------------------------------------------- + +I hereby claim: + + * I am an admin of https://jfenn.me + * I am jafenn (https://keybase.io/jafenn) on keybase. + * I have a public key ASAqbtXJuDtfshrI2lXMoTYs_cTyYm_RQzLAKySvcfRS1Ao + +To do so, I am signing this object: + +{ + "body": { + "key": { + "eldest_kid": "01202a6ed5c9b83b5fb21ac8da55cca1362cfdc4f2626fd14332c02b24af71f452d40a", + "host": "keybase.io", + "kid": "01202a6ed5c9b83b5fb21ac8da55cca1362cfdc4f2626fd14332c02b24af71f452d40a", + "uid": "e6494057cbb6c22d574adfd416516a19", + "username": "jafenn" + }, + "merkle_root": { + "ctime": 1533769511, + "hash": "aea95ec3905ce46e2b9a61f5e7db541dae328e76ee19906f1f56f77a9a39ad2a86302bf4e353bc6432520eaf7772db293a8f4b1d6698473f74101c2ab049cfa3", + "hash_meta": "dcee4f3e0ee1753dd71013901dc84b1ee1d03ca9b049a890ac1371b022f247cf", + "seqno": 3429213 + }, + "service": { + "entropy": "LQFOrJFJvKWCupiCN7DT8NEe", + "hostname": "jfenn.me", + "protocol": "https:" + }, + "type": "web_service_binding", + "version": 2 + }, + "client": { + "name": "keybase.io go client", + "version": "2.3.0" + }, + "ctime": 1533769536, + "expire_in": 504576000, + "prev": "4f89596d003467aadd9d20385d17be293fb955c3d45bb00d2657a23bb9fa99d0", + "seqno": 9, + "tag": "signature" +} + +which yields the signature: + +hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEgKm7Vybg7X7IayNpVzKE2LP3E8mJv0UMywCskr3H0UtQKp3BheWxvYWTESpcCCcQgT4lZbQA0Z6rdnSA4XRe+KT+5VcPUW7ANJleiO7n6mdDEIPdFYV0ArW3Bwf1tjHExw/2mdCDNwhB8V4mGc7uVBy2DAgHCo3NpZ8RAY4GFT1Vm3SAuveWp/kYx7QWBBPrYF5JH9KWD1DPOHthHvoBsL7gcqtfnXV25QFaKnoSnM4YMv/D4/juUFog+BahzaWdfdHlwZSCkaGFzaIKkdHlwZQildmFsdWXEIFJHLG3y/i8AdDuvEz6LYH8f8x5mLRZDmxTe9V/UJRJXo3RhZ80CAqd2ZXJzaW9uAQ== + +And finally, I am proving ownership of this host by posting or +appending to this document. + +View my publicly-auditable identity here: https://keybase.io/jafenn + +================================================================== \ No newline at end of file diff --git a/meta/manifest.json b/meta/manifest.json deleted file mode 100644 index 4426dc6..0000000 --- a/meta/manifest.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "James Fenn", - "short_name": "James Fenn", - "start_url": "/", - "background_color": "#FFFFFF", - "display": "standalone", - "theme_color": "#000000" -} diff --git a/meta/manifest.njk b/meta/manifest.njk new file mode 100644 index 0000000..3b6c217 --- /dev/null +++ b/meta/manifest.njk @@ -0,0 +1,25 @@ +--- +permalink: /manifest.json +eleventyExcludeFromCollections: true +--- +{ + "name": "James Fenn", + "short_name": "James Fenn", + "icons": [{ + "src": "/images/favicon-96.png", + "sizes": "96x96", + "type": "image/png" + }, { + "src": "/images/favicon-144.png", + "sizes": "144x144", + "type": "image/png" + }, { + "src": "/images/favicon-192.png", + "sizes": "192x192", + "type": "image/png" + }], + "start_url": "/", + "background_color": "#FFFFFF", + "display": "standalone", + "theme_color": "#000000" +} diff --git a/meta/robots.njk b/meta/robots.njk new file mode 100644 index 0000000..e59cbc9 --- /dev/null +++ b/meta/robots.njk @@ -0,0 +1,10 @@ +--- +permalink: /robots.txt +eleventyExcludeFromCollections: true +--- +User-agent: * +Disallow: +Disallow: /links/* +Disallow: /redirects/* +Disallow: /about/* +Sitemap: https://jfenn.me/sitemap.xml diff --git a/meta/sitemap.njk b/meta/sitemap.njk new file mode 100644 index 0000000..914b1d8 --- /dev/null +++ b/meta/sitemap.njk @@ -0,0 +1,14 @@ +--- +permalink: /sitemap.xml +eleventyExcludeFromCollections: true +--- + + + {% for page in collections.all %} + + {{ site.url }}{{ page.url | url }} + {{ page.date.toISOString() }} + {{ page.data.changeFreq if page.data.changeFreq else "monthly" }} + + {% endfor %} + diff --git a/meta/sw.js.njk b/meta/sw.js.njk new file mode 100644 index 0000000..c35baba --- /dev/null +++ b/meta/sw.js.njk @@ -0,0 +1,57 @@ +--- +permalink: /sw.js +eleventyExcludeFromCollections: true +--- +importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.6.1/workbox-sw.js'); + +if (workbox) { + workbox.precaching.precacheAndRoute([]); + + // Cache the Google Fonts stylesheets with a stale while revalidate strategy. + workbox.routing.registerRoute( + /^https:\/\/fonts\.googleapis\.com/, + workbox.strategies.staleWhileRevalidate({ + cacheName: 'google-fonts-stylesheets', + }), + ); + + // Cache the Google Fonts webfont files with a cache first strategy for 1 year. + workbox.routing.registerRoute( + /^https:\/\/fonts\.gstatic\.com/, + workbox.strategies.cacheFirst({ + cacheName: 'google-fonts-webfonts', + plugins: [ + new workbox.cacheableResponse.Plugin({ + statuses: [0, 200], + }), + new workbox.expiration.Plugin({ + maxAgeSeconds: 60 * 60 * 24 * 365, + }), + ], + }), + ); + + workbox.routing.registerRoute( + // Cache CSS files + /.*\.css/, + workbox.strategies.staleWhileRevalidate({ + cacheName: 'css-cache', + }) + ); + + workbox.routing.registerRoute( + // Cache image files + /.*\.(?:png|jpg|jpeg|svg|gif)/, + workbox.strategies.cacheFirst({ + cacheName: 'image-cache', + plugins: [ + new workbox.expiration.Plugin({ + maxEntries: 100, + maxAgeSeconds: 7 * 24 * 60 * 60, + }) + ], + }) + ); +} else { + console.log("Workbox didn't load..."); +} diff --git a/package.json b/package.json index 1750fb5..f3ba14b 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "js-yaml": "^3.14.0", "markdown-it": "^10.0.0", "markdown-it-anchor": "^5.2.5", - "markdown-it-highlightjs": "^3.2.0", + "markdown-it-prism": "^2.1.3", "moment": "^2.27.0", "node-fetch": "^2.6.0", "nodegit": "^0.27.0", diff --git a/pages/404.html b/pages/404.html new file mode 100644 index 0000000..8ed76d3 --- /dev/null +++ b/pages/404.html @@ -0,0 +1,11 @@ +--- +layout: default +title: FOUR HUNDRED AND FOUR +permalink: /404.html +--- + +
+

Error 404

+

Unfortunately, the page you're looking for doesn't exist. Maybe you made a typo, or maybe the page was moved or deleted.

+

Homepage

+
diff --git a/pages/blog/index.html b/pages/blog/index.html index a4022db..5836289 100644 --- a/pages/blog/index.html +++ b/pages/blog/index.html @@ -24,7 +24,7 @@ permalink: /blog/
{% assign year = "" %} -{% for blog in collections.blog %} +{% for blog in collections.blog reversed %} {% assign year2 = blog.date | date: "%Y" %} {% if year != year2 %} {% assign year = year2 %} diff --git a/pages/blog/rss.njk b/pages/blog/rss.njk index b5b618b..2e88ef3 100644 --- a/pages/blog/rss.njk +++ b/pages/blog/rss.njk @@ -21,7 +21,7 @@ metadata: {{ meta.name }} {{ meta.email }} - {%- for post in collections.blog %} + {%- for post in collections.blog -%} {% set absolutePostUrl %}{{ post.url | url | absoluteUrl(metadata.url) }}{% endset %} {{ post.data.title }} diff --git a/pages/index.html b/pages/index.html index b63c3a9..b70924b 100644 --- a/pages/index.html +++ b/pages/index.html @@ -22,7 +22,7 @@ permalink: / {% assign links = "twitter fediverse github linkedin" | split: " " %} {% for link in links %} - + {% endfor %} diff --git a/pages/licenses.md b/pages/licenses.md deleted file mode 100644 index 3ec0748..0000000 --- a/pages/licenses.md +++ /dev/null @@ -1,279 +0,0 @@ ---- -layout: page -permalink: /licenses/ ---- - -
- -# Open Source Licenses - -This page lists all (I hope) of the open source projects that are used to create, update, and maintain my personal site. - -## [11ty](https://11ty.dev/) - -``` -MIT License - -Copyright (c) 2020 Zach Leatherman @zachleat - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -## [NodeJS](https://nodejs.org/) - -``` -Copyright Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -``` - -## [then-request](https://github.com/then/then-request) - -A request library that returns promises. - -``` -Copyright (c) 2014 Forbes Lindesay - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -``` - -## [cheerio](https://github.com/cheeriojs/cheerio) - -A fast, flexible, and lean implementation of core jQuery designed specifically for the server. - -``` -MIT License - -Copyright (c) 2016 Matt Mueller - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -## [instant.page](https://github.com/instantpage/instant.page) - -A small library that preloads linked pages before a user clicks on them. - -``` -MIT License - -Copyright (C) 2019 Alexandre Dieulot - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -## [lozad.js](https://github.com/ApoorvSaxena/lozad.js) - -Highly performant, light and configurable lazy loader in pure JS with no dependencies for images, iframes and more, using the IntersectionObserver API. - -``` - -The MIT License (MIT) - -Copyright (c) 2017 Apoorv Saxena - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -## [git-clone](https://github.com/jaz303/git-clone) - -A NodeJS interface to clone a git repository via shell commands. - -``` -Copyright 2014 Jason Frame - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD -TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN -NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER -IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -``` - -## [mdjavadoc](https://github.com/TheAndroidMaster/mdjavadoc) - -A script that generates markdown javadocs primarily for use in Jekyll and GitHub Pages. - -``` -MIT License - -Copyright (c) 2018 James Fenn - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -## [js-yaml](https://github.com/nodeca/js-yaml) - -An implementation of [YAML](http://yaml.org/), a human-friendly data serialization language, for JavaScript. - -``` -(The MIT License) - -Copyright (C) 2011-2015 by Vitaly Puzrin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` - -## [Highlight.js](https://highlightjs.org/) - -Highlight.js is a syntax highlighter written in JavaScript. It works in the browser as well as on the server. It works with pretty much any markup, doesn’t depend on any framework, and has automatic language detection. - -``` -Copyright (c) 2006, Ivan Sagalaev -All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of highlight.js nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - -
diff --git a/pages/links.njk b/pages/links.njk index b9bf14d..018f80b 100644 --- a/pages/links.njk +++ b/pages/links.njk @@ -3,6 +3,7 @@ pagination: data: meta.links size: 1 permalink: "links/{{ pagination.items[0] }}.html" +eleventyExcludeFromCollections: true --- diff --git a/pages/now.md b/pages/now.md index 92575b2..145f625 100644 --- a/pages/now.md +++ b/pages/now.md @@ -1,11 +1,12 @@ --- -layout: page +layout: base permalink: /now/ --- -
+
+
-This is a [now page](https://nownownow.com/about). It's a simple way to describe everything currently happening in my life. Last updated on 2020-12-08. +This is a [now page](https://nownownow.com/about). It's a simple way to share everything currently happening in my life. I last updated it on 2020-12-08. ## What am I doing now? @@ -13,6 +14,12 @@ This is a [now page](https://nownownow.com/about). It's a simple way to describe - taking CS classes at the [University of Pittsburgh](https://www.pitt.edu/) - building websites, software, and website-managing software for [Trevian International](https://trevian.xyz/) - [playing Minecraft](https://minecraft.horrific.dev/) with a group of friends and pondering [confusing redstone mechanics](https://minecraft.gamepedia.com/Tutorials/Quasi-connectivity) -- organizing things at [horrific.dev](https://horrific.dev/) +- sipping chai tea and listening to [65daysofstatic](https://65daysofstatic.bandcamp.com/music) + +### Groups I'm involved with + +[Unicorn Utterances](https://unicorn-utterances.com/) is a collaborative blog site that provides helpful resources for a variety of computer science-related topics. + +[Horrific.Dev](https://horrific.dev/) is a small collective of individual developers and enthusiasts with a focus on independent services, software, and technology.
diff --git a/pages/policies.html b/pages/policies.html new file mode 100644 index 0000000..bfa6577 --- /dev/null +++ b/pages/policies.html @@ -0,0 +1,408 @@ +--- +permalink: /policies/ +--- + + + + + + + + + + Privacy Policies + + + + + + + + + + + + + + + + + + + + + + + +
+

Privacy Policies

+ + arrow_back View All + +
+
+

+
+ James Fenn built the ${name} service as a ${price} and ${oss} ${type}. This service is + provided by James Fenn at no cost and is intended for use as is. +

+ This page is used to inform ${type} users of my policies regarding the collection, use, + and disclosure of any personal information that this ${type} collects during the use of + my service. +

+ If you choose to use my service, then you agree to the collection and use of information + in relation to this policy. The personal information that I collect is used to provide + and improve the service. I will not use or share your information with any party except + as described in this privacy policy. +

Information Collection and Use

+ For a better experience during the use of my service, I may ask that you provide me with + certain personally identifiable information described below. The information that I request + is ${use}. +
    + ${data::
  • I may request your ${info} in order to ${inorderto}.
  • ::} +
+

Cookies

+ Cookies are files with a small amount of data that are commonly used as anonymous unique + identifiers. These are sent to your browser from websites that you visit and are stored on your + device's internal memory. +

+ This service ${cookies:usage}. These "cookies" are ${cookies:use}. You have the option to either + accept or refuse these cookies and know when a cookie is being sent to your device. If you choose + to refuse these cookies, you will not be invited to my annual bake sale. +

Security

+ I value your trust in providing me with yor personal information, and as such I am striving to use + commercially acceptable means of protecting it. However, please be aware that no method of transmission + over the internet or method of electronic storage is 100% secure, and I cannot guarantee its absolute + security. +

+ Additionally, in the event that someone in my near vicinity visits the webpage located at + https://youtu.be/dQw4w9WgXcQ with their speakers at their + interpretation of "full blast", I may abandon any security maintenance activities that I happen to + be in the process of performing in order to substitute that with my interpretation of "appreciating my jam". +

Links to Other Services

+ This service may contain links to other websites and applications not developed by me. If you open a + third-party link, you will be directed to that service. Note that these services are not operated by + me. Therefore, I strongly advise you to review the Privacy Policy of these services. I have no control + over and assume no responsibility for the content, privacy policies, or practices of any third-party sites + or services. +

Children's Privacy

+ This privacy policy does not address anyone under the age of 13. I do not knowingly collect personally + identifiable information from children under 13. In the case that I discover that a child under 13 has + provided me with personal information, any relevant information will be immediately removed from my + servers. If you are a parent or guardian and you are aware that your child has provided me with personal + information, please contact me so that I am able to perform the necessary actions. +

Changes to this Privacy Policy

+ I may update this privacy policy from time to time. Thus, you are advised to review this page periodically + for any changes. I will notify you of any changes by posting the new privacy policy on this page. These changes + are effective immediately after they are posted on this page. +

Contact Me

+ If you have any questions about this privacy policy, please do not hesitate to contact me at + policies@jfenn.me. +
+
+
+ This privacy policy was last updated on ${lastUpdated}. +
+
+ + + + + diff --git a/pages/projects/index.html b/pages/projects/index.html index e3db31f..f9728ce 100644 --- a/pages/projects/index.html +++ b/pages/projects/index.html @@ -13,8 +13,7 @@ permalink: /projects/

Actually, there is a lot of discourse about how such "indie software" should - be shared with the community, and I've been experimenting with my own - solutions. You can read more about that here. + be shared with the community. You can read more about that here.

diff --git a/pages/projects/project.html b/pages/projects/project.html deleted file mode 100644 index c503d13..0000000 --- a/pages/projects/project.html +++ /dev/null @@ -1,85 +0,0 @@ ---- -layout: base -pagination: - data: git.projects - size: 1 -permalink: "projects2/{{ pagination.items[0].id }}/index.html" ---- - -{% for project in pagination.items %} -
-
-

{{ project.title }}

-

{{ project.repo.description }}

-
- - -
-
-
-
- {% if project.hasWiki %} -
-
- - book - Wiki - -
- Find helpful information about this project - tutorials, guides, documentation, and more! -
-
-
- {% endif %} -
-
- - people - Contributing - -
- Interested in working with this project or volunteering to help? Get started here! -
-
-
-
-
- - email - Contact Me - -
- Have any questions or concerns? Don't hesitate to reach out! (prompt replies not guaranteed) -
-
-
-
-
-
- -
-
- {{ project.readme | markdownify }} -
-
-{% endfor %} diff --git a/pages/projects/wiki.html b/pages/projects/wiki.html index 7383454..f9a1e63 100644 --- a/pages/projects/wiki.html +++ b/pages/projects/wiki.html @@ -3,6 +3,7 @@ layout: base pagination: data: git.wikis size: 1 + addAllPagesToCollections: true permalink: "projects/{{ pagination.items[0].id }}/wiki/{{ pagination.items[0].page }}.html" --- diff --git a/projects/attribouter.html b/projects/attribouter.html index a3cb75f..aca0e45 100644 --- a/projects/attribouter.html +++ b/projects/attribouter.html @@ -4,11 +4,9 @@ tags: project-tool ---
-
- -
-
- +
+ +

Contributor Profiles

@@ -16,14 +14,12 @@ tags: project-tool
-
+===
-
- -
-
- +
+ +

License Information

@@ -31,14 +27,12 @@ tags: project-tool
-
+===
-
- -
-
- +
+ +

Night Theme

@@ -46,7 +40,7 @@ tags: project-tool
-
+===
diff --git a/projects/git-rest-wrapper.html b/projects/git-rest-wrapper.html index 7d868c4..1e577be 100644 --- a/projects/git-rest-wrapper.html +++ b/projects/git-rest-wrapper.html @@ -9,17 +9,22 @@ tags: project-tool

Written in Kotlin, the library has seamless compatibility with JavaScript, NodeJS, JVM, and Android platforms.

-
+===
-
{
+{% capture codeblock %}
+```json
+{
     "id": "user",
 	"name": "User Human",
 	"url": "https://code.horrific.dev/user",
 	"avatarUrl": "https://example.com/photo.png",
 	"websiteUrl": "https://example.com"
-}
+} +``` +{% endcapture %} +{{ codeblock | markdownify }}

Consistent data representation

@@ -27,7 +32,7 @@ tags: project-tool
-
+===
diff --git a/projects/ktordocs.html b/projects/ktordocs.html index c0868a2..694c554 100644 --- a/projects/ktordocs.html +++ b/projects/ktordocs.html @@ -9,18 +9,23 @@ tags: project-tool

Provide comprehensive API documentation with minimal effort!

-
+===
-
get("/api/v1/example") {
+{% capture codeblock %}
+```kt
+get("/api/v1/example") {
     docs {
         title = "Hello World"
         desc = "Says hello to the world."
     }
 
     call.respondText("Hello world!")
-}
+} +``` +{% endcapture %} +{{ codeblock | markdownify }}

Minimal API

@@ -28,11 +33,11 @@ tags: project-tool
-
+===
- +

Markdown Support

diff --git a/projects/metronome.html b/projects/metronome.html index 0f0988d..0a15e43 100644 --- a/projects/metronome.html +++ b/projects/metronome.html @@ -3,6 +3,17 @@ layout: layouts/project tags: project-app --- -Hello +

Tempo Slider

+

Swipe in either direction to change the tempo, or press the arrows for a more precise adjustment.

+

Emphasized Beats

+

Use the +/- buttons to add or remove beats, then select them to add emphasis.

+

Multiple Sounds

+

Use the dropdown menu at the top of the screen to select a sound.

+ +

Bookmarks

+

Press the bookmark icon in the bottom right of the screen to save a tempo for easy access.

+ +

Themes

+

Change the theme of the application with the dropdown at the bottom of the about section.

-- GitLab