32 Commits

Author SHA1 Message Date
a7a61df040 Merge pull request #14 from Mastermindzh/bugfix/misc
Bugfix/misc
2023-06-29 22:19:11 +02:00
77482ba074 chore: update build links, nvm versions 2023-06-29 22:18:41 +02:00
5ea6e0a20f fix: updated npm packages and pinned unist-util-find to 1.0.2 to fix build errors 2023-06-29 22:05:36 +02:00
26aabc9abd chore: package.json refresh 2023-06-29 00:18:38 +02:00
e6ebd5b79f fix: added opengraph tags 2023-06-28 23:56:32 +02:00
bebfe1638e fix: removed nofollow links to my own website 2023-06-28 22:57:51 +02:00
b5126bf051 fix: several pages linked to redirected urls. This replaces those links with the destination instead 2023-06-28 22:56:03 +02:00
0dc97732e8 fix: 404 on lego.com page of removed product 2023-06-28 22:41:56 +02:00
0e9946c92e fix: added links to orphaned categories and tags pages 2023-06-28 22:39:34 +02:00
d72e30196d fix: remove noindex and noindex follow tags 2023-06-28 22:33:13 +02:00
d6f6105841 spelling-fixes and flatpak verification 2023-06-28 22:32:33 +02:00
5344b98f8e fix: solve 404 on front-thumb image 2023-06-28 22:32:07 +02:00
d7b82cf128 Merge pull request #12 from Mastermindzh/snyk-upgrade-45ed2e94a14ebdf5c3baea4a3a3fe2e3
[Snyk] Upgrade: gatsby-plugin-catch-links, gatsby-plugin-feed, gatsby-plugin-google-gtag, gatsby-plugin-manifest, gatsby-plugin-react-helmet, gatsby-plugin-sass, gatsby-plugin-sitemap, gatsby-remark-autolink-headers, gatsby-remark-copy-linked-files, gatsby-remark-images, gatsby-remark-prismjs, gatsby-remark-responsive-iframe, gatsby-remark-smartypants, gatsby-source-filesystem, gatsby-transformer-sharp
2023-06-18 22:47:37 +02:00
snyk-bot
3ef5ca570b fix: upgrade multiple dependencies with Snyk
Snyk has created this PR to upgrade:
  - gatsby-plugin-catch-links from 5.9.0 to 5.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-catch-links
  - gatsby-plugin-feed from 5.9.0 to 5.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-feed
  - gatsby-plugin-google-gtag from 5.9.0 to 5.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-google-gtag
  - gatsby-plugin-manifest from 5.9.0 to 5.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-manifest
  - gatsby-plugin-react-helmet from 6.9.0 to 6.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-react-helmet
  - gatsby-plugin-sass from 6.9.0 to 6.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sass
  - gatsby-plugin-sitemap from 6.9.0 to 6.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sitemap
  - gatsby-remark-autolink-headers from 6.9.0 to 6.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-autolink-headers
  - gatsby-remark-copy-linked-files from 6.9.0 to 6.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-copy-linked-files
  - gatsby-remark-images from 7.9.0 to 7.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-images
  - gatsby-remark-prismjs from 7.9.0 to 7.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-prismjs
  - gatsby-remark-responsive-iframe from 6.9.0 to 6.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-responsive-iframe
  - gatsby-remark-smartypants from 6.9.0 to 6.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-smartypants
  - gatsby-source-filesystem from 5.9.0 to 5.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-source-filesystem
  - gatsby-transformer-sharp from 5.9.0 to 5.10.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-transformer-sharp

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-06-16 03:23:29 +00:00
3a8a10c95c Merge pull request #7 from Mastermindzh/snyk-fix-2d581d498d0750b5fa6c9dfa444a8f85
[Snyk] Security upgrade gatsby from 5.9.0 to 5.10.0
2023-05-18 11:51:53 +02:00
snyk-bot
9dc1f6275f fix: package.json & package-lock.json to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-ENGINEIO-5496331
2023-05-18 06:54:16 +00:00
66d514d52f Merge pull request #6 from Mastermindzh/snyk-upgrade-276e9fbf30fd873e7b41cedf5c6c797c
[Snyk] Upgrade: gatsby-link, gatsby, gatsby-plugin-catch-links, gatsby-plugin-feed, gatsby-plugin-google-gtag, gatsby-plugin-manifest, gatsby-plugin-react-helmet, gatsby-plugin-sass, gatsby-plugin-sharp, gatsby-plugin-sitemap, gatsby-remark-autolink-headers, gatsby-remark-copy-linked-files, gatsby-remark-images, gatsby-remark-prismjs, gatsby-remark-responsive-iframe, gatsby-remark-smartypants, gatsby-source-filesystem, gatsby-transformer-remark, gatsby-transformer-sharp
2023-05-13 21:30:02 +02:00
snyk-bot
46c12f8c98 fix: upgrade multiple dependencies with Snyk
Snyk has created this PR to upgrade:
  - gatsby-link from 5.8.0 to 5.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-link
  - gatsby from 5.8.1 to 5.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby
  - gatsby-plugin-catch-links from 5.8.0 to 5.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-catch-links
  - gatsby-plugin-feed from 5.8.0 to 5.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-feed
  - gatsby-plugin-google-gtag from 5.8.0 to 5.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-google-gtag
  - gatsby-plugin-manifest from 5.8.0 to 5.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-manifest
  - gatsby-plugin-react-helmet from 6.8.0 to 6.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-react-helmet
  - gatsby-plugin-sass from 6.8.0 to 6.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sass
  - gatsby-plugin-sharp from 5.8.1 to 5.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sharp
  - gatsby-plugin-sitemap from 6.8.0 to 6.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-plugin-sitemap
  - gatsby-remark-autolink-headers from 6.8.0 to 6.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-autolink-headers
  - gatsby-remark-copy-linked-files from 6.8.0 to 6.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-copy-linked-files
  - gatsby-remark-images from 7.8.0 to 7.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-images
  - gatsby-remark-prismjs from 7.8.0 to 7.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-prismjs
  - gatsby-remark-responsive-iframe from 6.8.0 to 6.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-responsive-iframe
  - gatsby-remark-smartypants from 6.8.0 to 6.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-remark-smartypants
  - gatsby-source-filesystem from 5.8.0 to 5.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-source-filesystem
  - gatsby-transformer-remark from 6.8.0 to 6.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-transformer-remark
  - gatsby-transformer-sharp from 5.8.0 to 5.9.0.
    See this package in npm: https://www.npmjs.com/package/gatsby-transformer-sharp

See this project in Snyk:
https://app.snyk.io/org/mastermindzh/project/6eb54845-2bb5-45e0-80e2-6b3a1c53eee6?utm_source=github&utm_medium=referral&page=upgrade-pr
2023-05-12 19:52:55 +00:00
e2e3a91637 chore(release): 1.2.3 2023-04-19 09:15:55 +02:00
302c6d00e2 fix: dependency updates and the removal of hatsby-plugin-offline 2023-04-19 09:15:11 +02:00
0f7c99907f Merge branch 'master' of git.mastermindzh.tech:mastermindzh/rickvanlieshout.com 2023-04-12 23:49:03 +02:00
da5a1e9b84 chore(release): 1.2.2 2023-04-12 23:48:58 +02:00
9a2f9ed2aa chore(release): 1.2.2 2023-04-12 23:36:09 +02:00
5fe2d8e834 fix: .language-text not breaking on mobile 2023-04-12 23:35:35 +02:00
d91730dd8c Merge pull request 'content/flashing-lsi-9211' (#8) from content/flashing-lsi-9211 into master
Reviewed-on: #8
2023-04-12 23:09:12 +02:00
ebca5f980d content: blogpost about flashing lsi 9211 cards 2023-04-12 23:06:52 +02:00
abc9cdbe26 chore: add some seo options and params 2023-04-03 14:16:11 +02:00
99d42b8de4 Merge pull request 'updates/gatsby' (#7) from updates/gatsby into master
Reviewed-on: #7
2023-03-26 23:43:00 +02:00
c8264125f0 chore(release): 1.2.1 2023-03-26 23:40:27 +02:00
0c7ee90547 chore(gatsby): updated gatsby + deps and added canonical links 2023-03-26 23:20:54 +02:00
46ee4fbb90 chore(spelling): fixed spelling in latest blog 2023-02-14 23:16:01 +01:00
03d5cbe5b5 Merge pull request 'content/a-new-hobby' (#6) from content/a-new-hobby into master
Reviewed-on: #6
2023-02-14 23:14:10 +01:00
61 changed files with 8527 additions and 31580 deletions

1
.nvmrc Normal file
View File

@@ -0,0 +1 @@
19.8.1

View File

@@ -1,5 +1,8 @@
{
"cSpell.words": [
"disqus",
"fontawesome",
"fortawesome",
"frontmatter",
"slsw"
],

View File

@@ -2,8 +2,25 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
## [1.2.0](https://github.com/mastermindzh/rickvanlieshout.com/compare/v1.1.0...v1.2.0) (2023-02-14)
### [1.2.3](https://github.com/mastermindzh/rickvanlieshout.com/compare/v1.2.2...v1.2.3) (2023-04-19)
### Bug Fixes
* dependency updates and the removal of gatsby-plugin-offline ([302c6d0](https://github.com/mastermindzh/rickvanlieshout.com/commits/302c6d00e2555475a7fec6a63b78146d1d502a8b))
### [1.2.2](https://github.com/mastermindzh/rickvanlieshout.com/compare/v1.2.1...v1.2.2) (2023-04-12)
### Bug Fixes
* .language-text not breaking on mobile ([5fe2d8e](https://github.com/mastermindzh/rickvanlieshout.com/commits/5fe2d8e834a4d7588f04e4a3b1608618253f6d52))
### New content
* blogpost about flashing lsi 9211 cards ([ebca5f9](https://github.com/mastermindzh/rickvanlieshout.com/commits/ebca5f980d8e1a109494c5db15d2728bcfbc964b))
### [1.2.1](https://github.com/mastermindzh/rickvanlieshout.com/compare/v1.2.0...v1.2.1) (2023-03-26)
## [1.2.0](https://github.com/mastermindzh/rickvanlieshout.com/compare/v1.1.0...v1.2.0) (2023-02-14)
### Bug Fixes
@@ -12,7 +29,6 @@ All notable changes to this project will be documented in this file. See [standa
* removed the estranged '1' from the description of the latest blogpost ([b963241](https://github.com/mastermindzh/rickvanlieshout.com/commits/b9632410d2369e09300231e7152941d850a4f421))
* socialImage code doesnt properly use publicURL ([561faa3](https://github.com/mastermindzh/rickvanlieshout.com/commits/561faa3a4585a73f0dc8aba63d72146dd670b544))
### New content
* added a picture of Eddy's completed urn. Also changed my function title to Tech Lead ([c50c6fb](https://github.com/mastermindzh/rickvanlieshout.com/commits/c50c6fb9273ddd3fb180609fd977cf6d0dbbdb74))
@@ -20,14 +36,12 @@ All notable changes to this project will be documented in this file. See [standa
## [1.1.0](https://github.com/mastermindzh/rickvanlieshout.com/compare/v1.0.0...v1.1.0) (2022-11-07)
### New content
* Added a new post about adopting conventional commits ([b710c24](https://github.com/mastermindzh/rickvanlieshout.com/commits/b710c243aca703040716af52df4405a05eddd458))
## 1.0.0 (2022-11-05)
### Features
* add autolink headers support ([4d38e96](https://github.com/mastermindzh/rickvanlieshout.com/commits/4d38e9633242dbf3adbd47a77c807f990be3acd8))
@@ -39,11 +53,10 @@ All notable changes to this project will be documented in this file. See [standa
* up version ([1c175ab](https://github.com/mastermindzh/rickvanlieshout.com/commits/1c175abff92bcf56d8809dd9caf8e16de0f4a849))
* **workflows:** add release workflow ([25cf13a](https://github.com/mastermindzh/rickvanlieshout.com/commits/25cf13ae57084be63d8f42581b7c6b5c976930ed))
### Bug Fixes
* [#955](https://git.mastermindzh.tech/mastermindzh/rickvanlieshout.com/issues/955) ([6686a6c](https://github.com/mastermindzh/rickvanlieshout.com/commits/6686a6c1edc109152a80e92d684c114be9a287ab))
* add __BASE_PATH__ to jest config ([5e00151](https://github.com/mastermindzh/rickvanlieshout.com/commits/5e00151d0b153863324194a1f1a92c88b2d8937f))
* add **BASE_PATH** to jest config ([5e00151](https://github.com/mastermindzh/rickvanlieshout.com/commits/5e00151d0b153863324194a1f1a92c88b2d8937f))
* add flow-typed ([b9aaa81](https://github.com/mastermindzh/rickvanlieshout.com/commits/b9aaa81ec257f48f30f1984f63b6204fc2d92b5e))
* align the headers ([01fe350](https://github.com/mastermindzh/rickvanlieshout.com/commits/01fe35095c11b94eae34a17c64ea626d4d3cf665))
* cannot build gatsby sitemap [#199](https://git.mastermindzh.tech/mastermindzh/rickvanlieshout.com/issues/199) ([d12a922](https://github.com/mastermindzh/rickvanlieshout.com/commits/d12a9220ddd71ebbfeadcca4736d2453f9fa17ab))
@@ -475,7 +488,6 @@ All notable changes to this project will be documented in this file. See [standa
* update yarn.lock ([5f23174](https://github.com/mastermindzh/rickvanlieshout.com/commits/5f231740a9472f2e5545b1611ce9af8eec40246d))
* use aliase [#199](https://git.mastermindzh.tech/mastermindzh/rickvanlieshout.com/issues/199) ([46743e9](https://github.com/mastermindzh/rickvanlieshout.com/commits/46743e9e1ab569934bc04e9d0d4816b1c3de668f))
### New content
* writing as an architect is hard ([027add7](https://github.com/mastermindzh/rickvanlieshout.com/commits/027add7be1b119dbeb2027497a18cd969e939e77))

View File

@@ -2,7 +2,7 @@
This is the repository for my personal blog/website [rickvanlieshout.com](https://rickvanlieshout.com).
[![Build Status](https://ci.mastermindzh.tech/api/badges/mastermindzh/rickvanlieshout.com/status.svg)](https://ci.mastermindzh.tech/mastermindzh/rickvanlieshout.com)
[![Build Status](https://ci.mastermindzh.tech/api/badges/Mastermindzh/rickvanlieshout.com/status.svg)](https://ci.mastermindzh.tech/Mastermindzh/rickvanlieshout.com)
## todos

View File

@@ -14,30 +14,38 @@
},
{
"label": "About me",
"path": "/pages/about"
"path": "/pages/about/"
},
{
"label": "Resume",
"path": "/pages/resume"
"path": "/pages/resume/"
},
{
"label": "Contact me",
"path": "/pages/contacts"
"path": "/pages/contacts/"
}
],
"legalMenu": [
{
"label": "Cookies",
"path": "/pages/legal/cookies"
"path": "/pages/legal/cookies/"
},
{
"label": "Disclaimer",
"path": "/pages/legal/disclaimer"
"path": "/pages/legal/disclaimer/"
},
{
"label": "Categories",
"path": "/categories/"
},
{
"label": "Tags",
"path": "/tags/"
}
],
"author": {
"name": "Rick van Lieshout",
"photo": "/me.png",
"photo": "/content/me.png",
"bio": "I'm a passionate software architect that bifurcates his love between great software development and leading others to learn and adopt new things.",
"contacts": {
"email": "info@rickvanlieshout.com",

View File

@@ -41,4 +41,4 @@ All well known browser offer a way for you to revoke any cookie. Explore the lin
- [Deleting cookies in Chrome](https://support.google.com/chrome/answer/95647?co=GENIE.Platform%3DDesktop&hl=en)
- [Deleting cookies in Firefox](https://support.mozilla.org/en-US/kb/delete-cookies-remove-info-websites-stored)
- [Deleting cookies in Edge](https://privacy.microsoft.com/en-us/windows-10-microsoft-edge-and-privacy)
- [Deleting cookies in Edge](https://support.microsoft.com/en-us/windows/microsoft-edge-browsing-data-and-privacy-bb8174ba-9d73-dcf2-9b4a-c582b4e640dd)

View File

@@ -20,7 +20,7 @@ template: "page"
_Always_<br />
A fair share of my private work is done through open-source media. I don't have a portfolio but I have a [Github](https://github.com/mastermindzh) where I share most things.
**Tech lead at INFORIT**<br />
**Tech lead / CTO at INFORIT**<br />
_2018 - Now_<br />
At INFORIT I am responsible for the entire technical architecture of the new TFX stack that I launched shortly after 2018. This involves setting up and maintaining a modern event-based microservice architecture on a Kubernetes-based SaaS cloud solution and migrating to modern programming languages such as dotnetcore and React.
@@ -66,7 +66,7 @@ Some of these have (official) certificates, some don't, but all have brought val
- Hiring & interview training ([icm.nl](https://www.icm.nl/opleidingen-en-trainingen/hrm/selectiegesprekken-voeren/))
- Conversation techniques & de-escalation ([TIJDwinst.com](https://gesprekstechnieken.com/cursus-gesprekstechnieken/)](<https://gesprekstechnieken.com/cursus-gesprekstechnieken/>)).
- Kubernetes
- Kubernetes (NobleProg Certification Kubernetes on Azure (AKS), 26 August 2019 - 27 August 2019)
- SEEBURGER b2b integration
## Projects
@@ -96,7 +96,7 @@ The list below is far from complete and unordered but focuses on the skills & te
- Teaching, coaching & presenting
- Agile development
- Docker, Kubernetes & CI/CD
Event-based architecture
- Event-based architecture
- Reactive architecture
- Typescript (Javascript)
- dotnetcore
@@ -105,4 +105,4 @@ Event-based architecture
- NoSQL (Mongo, Postgre)
- SQL (MSSQL, Postgre, sqlite, mariadb)
- Elasticsearch & Kibana
- Kafka
- Kafka / RabbitMQ

View File

@@ -19,7 +19,7 @@ A cluster is basically a group of computers that work together to run a very int
## What software are you going to use?
I am going to use [raspbian](http://www.raspbian.org/) for the OS and I will be using python (and [mpi4py](http://mpi4py.scipy.org/)) to program the cluster.
I am going to use [raspbian](https://www.raspbian.org/) for the OS and I will be using python (and [mpi4py](https://mpi4py.scipy.org/)) to program the cluster.
## What did you need and how much did it cost
@@ -35,9 +35,9 @@ Below you will find a list of items you would need if you were to build a 4 pi c
This all adds up to ( €180.43 which is $233.76 according to [google](https://www.google.nl/search?site=&source=hp&q=180.43+euro+to+dollar&oq=180.43+euro+to+dollar&gs_l=hp.3..33i21l2.879.5191.0.5287.28.24.3.1.1.0.157.1273.22j1.23.0....0...1c.1.53.hp..9.19.917.0.jex09uDmbow))
I ordered **some** of the stuff from a shop in china called "[banggood](http://banggood.com)". Since they deliver all around the world I will add the links to those items below.
I ordered **some** of the stuff from a shop in china called "[banggood](https://banggood.com)". Since they deliver all around the world I will add the links to those items below.
- The raspberry pi cases can be found [here](http://www.banggood.com/Transparent-Box-Case-Shell-For-Raspberry-Pi-512MB-Version-p-923015.html)
- The 8gb SD cards can be found [here](http://www.banggood.com/8GB-SD-HC-SDHC-Flash-Secure-Digital-Memory-Card-Camera-p-938458.html)
- The USB hub can be found [here](http://www.banggood.com/Wholesale-Laptop-PC-New-Black-4-Port-Tap-USB-2_0-High-Speed-Hub-ON-Or-OFF-Sharing-Switch-p-45306.html)
- The USB power cables can be found [here](http://www.banggood.com/Retractable-Micro-USB-Data-Sync-Charger-Cable-For-Cellphones-p-90245.html)
- The raspberry pi cases can be found [here](https://www.banggood.com/Transparent-Box-Case-Shell-For-Raspberry-Pi-512MB-Version-p-923015.html)
- The 8gb SD cards can be found [here](https://www.banggood.com/8GB-SD-HC-SDHC-Flash-Secure-Digital-Memory-Card-Camera-p-938458.html)
- The USB hub can be found [here](https://www.banggood.com/Wholesale-Laptop-PC-New-Black-4-Port-Tap-USB-2_0-High-Speed-Hub-ON-Or-OFF-Sharing-Switch-p-45306.html)
- The USB power cables can be found [here](https://www.banggood.com/Retractable-Micro-USB-Data-Sync-Charger-Cable-For-Cellphones-p-90245.html)

View File

@@ -18,7 +18,7 @@ Installing an OS for a Raspberry pi is quite different from installing an OS on
First off, if you want to use Windows, skip this bit by clicking [here.](#windows)
First we will have to download the .img from the Raspbian website, we can do so by clicking [here](http://downloads.raspberrypi.org/raspbian_latest). After downloading the image we can use a kernel application known as "dd" to write the file to our SD card. We will first need to find out which /dev/ the SD card is currently using. To do this we can use the following command:
First we will have to download the .img from the Raspbian website, we can do so by clicking [here](https://downloads.raspberrypi.org/raspbian_latest). After downloading the image we can use a kernel application known as "dd" to write the file to our SD card. We will first need to find out which /dev/ the SD card is currently using. To do this we can use the following command:
```bash
lsblk
@@ -59,7 +59,7 @@ sudo kill -USR1 `pidof dd`
If you ended up here you have chosen to use the much inferior Windows to get Linux on your Raspberry pi's. Don't worry though, you can still install the, much superior, Linux images to your SD cards.
The very first thing we have to do is download the Raspbian image, which we can do by clicking [here](http://downloads.raspberrypi.org/raspbian_latest). After downloading the image we will have to download some software to write the image to the SD card. The tool we are going to use is called win32DiskImager, and can be downloaded free of charge [right here.](http://downloads.sourceforge.net/project/win32diskimager/Archive/Win32DiskImager-0.9.5-install.exe?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fwin32diskimager%2F&ts=1410459796&use_mirror=cznic)
The very first thing we have to do is download the Raspbian image, which we can do by clicking [here](https://downloads.raspberrypi.org/raspbian_latest). After downloading the image we will have to download some software to write the image to the SD card. The tool we are going to use is called win32DiskImager, and can be downloaded free of charge [right here.](https://downloads.sourceforge.net/project/win32diskimager/Archive/Win32DiskImager-0.9.5-install.exe?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fwin32diskimager%2F&ts=1410459796&use_mirror=cznic)
After the tool has been downloaded (and installed) we have to start it by double clicking on the .exe file, which will leave us staring at the following tool:

View File

@@ -56,7 +56,7 @@ After installing some of the required software we still have to install "mpich3"
```bash
mkdir /home/pi/mpich3
cd mpich3
wget http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz
wget https://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz
tar xzf mpich-3.0.4.tar.gz
sudo mkdir -p /home/rpimpi/mpich3-install
sudo mkdir -p /home/pi/mpich_build

View File

@@ -76,7 +76,7 @@ sudo apt-get update && sudo apt-get upgrade
sudo pacman -Syu
```
If however you're using a mac you'll have to do it by hand. Since Apple hasn't yet released an update nor commented on the matter. Instructions for a mac can be found [here](http://mac-how-to.wonderhowto.com/how-to/every-mac-is-vulnerable-shellshock-bash-exploit-heres-patch-os-x-0157606/).
If however you're using a mac you'll have to do it by hand. Since Apple hasn't yet released an update nor commented on the matter. Instructions for a mac can be found [here](https://mac-how-to.wonderhowto.com/how-to/every-mac-is-vulnerable-shellshock-bash-exploit-heres-patch-os-x-0157606/).
## In summary
@@ -84,7 +84,7 @@ So should you worry? Yes and no. If your computer (/server) is exposed to an out
## Documentation
For those of you who like to research this "Shellshock" vulnerability some more, here are 2 entries in the NVD: [CVE-2014-6271](http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271) & [CVE-2014-7169](http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-7169).
For those of you who like to research this "Shellshock" vulnerability some more, here are 2 entries in the NVD: [CVE-2014-6271](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271) & [CVE-2014-7169](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-7169).
If you want to see Shellshock in action I recommend watching the following video from Quidsup:

View File

@@ -14,18 +14,18 @@ disqusId: "7"
Some of you might be wondering "why doesn't he write more blogs about the cluster?" and I wouldn't blame you. I have a pretty good reason for not blogging about the pi cluster (even though I promised sample code). That reason is "home automation". As some of you might know I'm big into home automation, and have done quite a bit already. But it's always fun to try something different!
I usually use single or double relay boards which you can control with an arduino or a Raspberry pi. This time however I ordered an 8 relay board instead of a double relay board. I got the board from China at a store called "Sainsmart", here's the link to the exact board I got: [http://www.sainsmart.com/8-channel-dc-5v-relay-module-for-arduino-pic-arm-dsp-avr-msp430-ttl-logic.html](http://www.sainsmart.com/8-channel-dc-5v-relay-module-for-arduino-pic-arm-dsp-avr-msp430-ttl-logic.html)
I usually use single or double relay boards which you can control with an arduino or a Raspberry pi. This time however I ordered an 8 relay board instead of a double relay board. I got the board from China at a store called "Sainsmart", here's the link to the exact board I got: [https://www.sainsmart.com/products/8-channel-5v-relay-module](https://www.sainsmart.com/products/8-channel-5v-relay-module)
So what does that have to do with the cluster you ask? Well, I used to have a Raspberry pi to experiment with.... But I used that in the cluster to save some money. (here I was, thinking to be smart!) So I had to "disassemble"(taking the top off) the cluster to connect the relay board. In the next blog-post I'll have a couple of pictures showing off the relay board and the pi cluster.
## I donated a pi!
## I donated a pi
While talking on IRC with a friend[(Robbie Ferguson)](http://baldnerd.com) of mine I discovered that he had never used a Raspberry pi before. And to make matters worse he told me he had lost interest in them now. When I asked why he never got one he told me the following:
While talking on IRC with a friend[(Robbie Ferguson)](https://baldnerd.com) of mine I discovered that he had never used a Raspberry pi before. And to make matters worse he told me he had lost interest in them now. When I asked why he never got one he told me the following:
> When they were new I couldn't get one here in Canada, and now it's been so long that I've lost interest.
While discussing the fact he jokingly told me, if you'll send me one I'll try it out. A small problem arose though, me sending a pi to Canada would cost way more than actually buying one over there. So we decided that I'd just send him the money and he would order his own. I can't wait to see what he does with it.
If you guys are interested in seeing what he does with it too you can check out [Category5.tv](http://www.category5.tv/)
If you guys are interested in seeing what he does with it too you can check out [Category5.tv](https://category5.tv/)
What Robbie doesn't know is that I wanted to do something for the show / him anyways. I was originally planning on just donating $20, but giving him the joy that comes from owning a Raspberry pi seemed like a way better plan! Besides, he's been working really really hard on the new Studio D so he deserves some fun!

View File

@@ -43,7 +43,7 @@ Well alright then, we've got a couple of things "ready" to show others. The firs
We quickly decided upon changing the hub design to a more elegant "hat" (hat being a board you can attach to the Raspberry Pi, not the fedora kind). A render of one such hats can be found below.
![rendering of the raspberry pi hat](./media/Front_thumb.png "render of the raspberry pi hat")
![rendering of the raspberry pi hat](./media/front-thumb.png "render of the raspberry pi hat")
We also started working on the controllers. The final design will be compromised of a few "boxes" between which telephone wires run to connect them together. My fantastic soldering / glueing job on the inner workings of a controller and the laser cutted wooden box can be found below.

View File

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 143 KiB

View File

@@ -15,13 +15,13 @@ disqusId: "11"
First off, it's been a while.... I know. ☺
I'm trying to separate [mi-soft.nl](http://mi-soft.nl) and myself, yet keep them together somehow. I have removed almost all personal content from [mi-soft.nl](http://mi-soft.nl) and am currently busy moving it to this "personal website". The end goal is to have them completely separate apart from the "software" tab. Software that I want to reveal to the public (more so than some scripts I use myself) will still be uploaded to [mi-soft.nl](http://mi-soft.nl) and more personal projects (like [CSVtoDatabase](https://github.com/Mastermindzh/Scripts/blob/master/java/CSVtoDatabase.java)) on my [github](https://github.com/Mastermindzh/).
I'm trying to separate [mi-soft.nl](https://mi-soft.nl) and myself, yet keep them together somehow. I have removed almost all personal content from [mi-soft.nl](https://mi-soft.nl) and am currently busy moving it to this "personal website". The end goal is to have them completely separate apart from the "software" tab. Software that I want to reveal to the public (more so than some scripts I use myself) will still be uploaded to [mi-soft.nl](https://mi-soft.nl) and more personal projects (like [CSVtoDatabase](https://github.com/Mastermindzh/Scripts/blob/master/java/CSVtoDatabase.java)) on my [github](https://github.com/Mastermindzh/).
In order to "keep the sites together" I have given this site the exact same look as [mi-soft.nl](http://mi-soft.nl) except for the colours. I have also made a little system that allows users to switch the website's language. Everything apart from the blog will be Multilingual. Doing all these upgrades however also means upgrading Disqus, which meant losing all my comments. While sad, I feel like it had to be done.
In order to "keep the sites together" I have given this site the exact same look as [mi-soft.nl](https://mi-soft.nl) except for the colours. I have also made a little system that allows users to switch the website's language. Everything apart from the blog will be Multilingual. Doing all these upgrades however also means upgrading Disqus, which meant losing all my comments. While sad, I feel like it had to be done.
## Replacing the "about me" page on [mi-soft.nl](http://mi-soft.nl)
## Replacing the "about me" page on [mi-soft.nl](https://mi-soft.nl)
I will be replacing the about me page on [mi-soft.nl](http://mi-soft.nl) with a "Linux software review" (LSR for short) section. LSR will consist of short video's (in Dutch) promoting Linux software.
I will be replacing the about me page on [mi-soft.nl](https://mi-soft.nl) with a "Linux software review" (LSR for short) section. LSR will consist of short video's (in Dutch) promoting Linux software.
## Another maker project
@@ -36,7 +36,7 @@ I have only 2 days of school left this year, (and maybe a ceremony) which means
- Clean all my servers (both soft and hardware)
- Finish my portfolio (in both Dutch and English)
- Get started with LSR
- Write at least 5 new tutorials on [mi-soft.nl](http://mi-soft.nl)
- Write at least 5 new tutorials on [mi-soft.nl](https://mi-soft.nl)
- Write at least 2 new blogs. (not counting this one)
Let's hope I can get all my planned projects done and then some.

View File

@@ -35,7 +35,7 @@ After deciding to use an arduino I had another big decision to make. Should I fo
After that came my struggle with the drawing software. I tried creating a drawing in Coreldraw Pro.... that was... a painful experience to say the least. Then I tried drawing with a program called InkScape, while better it still didn't yield any results. Finally I decided to give up and ask for help from a friend.
Luckily my friend [Ron Nabuurs](http://www.ronnabuurs.nl) is brilliant when it comes to designing a drawing which can be lasercut. So after explaining my idea to [Ron](http://www.ronnabuurs.nl) he decided to help me out. A picture of what we ended up with can be found below. The source file we used can be found on git.
Luckily my friend [Ron Nabuurs](https://www.ronnabuurs.nl) is brilliant when it comes to designing a drawing which can be lasercut. So after explaining my idea to [Ron](https://www.ronnabuurs.nl) he decided to help me out. A picture of what we ended up with can be found below. The source file we used can be found on git.
![Designs for the laser cutter, from left to right: a circular base plate with snow characters. A foldable box cutout and a tree shape](./media/new.jpg "Designs for the laser cutter")

View File

@@ -11,7 +11,7 @@ disqusId: "16"
socialImage: "./media/plate.jpg"
---
Last friday I actually got to cut the parts for my TekTree! So excited! This is by far the biggest "piece" I have ever laser cut but luckily everything went well. This in part is thanks to my brilliant friend [Ron](http://www.ronnabuurs.nl) who helped me create the sketches for the laser cutter. Thanks again [Ron](http://www.ronnabuurs.nl)!
Last friday I actually got to cut the parts for my TekTree! So excited! This is by far the biggest "piece" I have ever laser cut but luckily everything went well. This in part is thanks to my brilliant friend [Ron](https://www.ronnabuurs.nl) who helped me create the sketches for the laser cutter. Thanks again [Ron](https://www.ronnabuurs.nl)!
**Top tip!** You don't have to laser cut the designs. Just print the designs with a regular printer and stick it on some wood. Then just use something like a bandsaw to cut the pieces!

View File

@@ -13,7 +13,7 @@ disqusId: "20"
!["Logo of the scala programming language"](./scala.png)
One of the final assignments for a school course called "APP" (Algorithms Programming language & Paradigms) was/is to learn a new programming language using the book "[Seven languages in Seven weeks](https://pragprog.com/book/btlang/seven-languages-in-seven-weeks)".
One of the final assignments for a school course called "APP" (Algorithms Programming language & Paradigms) was/is to learn a new programming language using the book "[Seven languages in Seven weeks](https://pragprog.com/search/?q=seven-languages-in-seven-weeks)".
The idea of this book is that you can get comfortable with a programming language in just a week. As you can probably guess from the title the book covers 7 languages in total and I will be covering at least 1 (Scala).

View File

@@ -21,7 +21,7 @@ While Pacman started collecting all the little dots, I took a quick look at the
The next message on this page tells me about a popular build tool called `sbt` so I went ahead and installed that as well.
The final step on this page recommends me to install "[The Scala IDE](http://scala-ide.org/?_ga=1.153666491.264179122.1490891096)" or use the IntelliJ plugin. Seeing as I adore the JetBrains product line I've opted to choose the latter.
The final step on this page recommends me to install "[The Scala IDE](https://scala-ide.org/?_ga=1.153666491.264179122.1490891096)" or use the IntelliJ plugin. Seeing as I adore the JetBrains product line I've opted to choose the latter.
While browsing the downloads page I noticed Pacman had beat his level. (a.k.a collected all the dots. a.k.a the install has finished) Which means it's high time for me to continue on with the assignments.
@@ -130,9 +130,9 @@ Day 1's theoretical questions are:
My answers to these are:
1. [http://www.scala-lang.org/api/current/](http://www.scala-lang.org/api/current/)
1. [https://www.scala-lang.org/api/current/](https://www.scala-lang.org/api/current/)
2. [https://www.toptal.com/scala/why-should-i-learn-scala](https://www.toptal.com/scala/why-should-i-learn-scala)
3. [http://www.scala-lang.org/old/node/5367](http://www.scala-lang.org/old/node/5367)
3. [https://www.scala-lang.org/old/node/5367](https://www.scala-lang.org/old/node/5367)
Finally, we get to move on to the practical assignment for the week. For the assignment, I have to create a "Tic-tac-toe" game for 2 players.

View File

@@ -194,8 +194,8 @@ The theoretical questions for day 2 are:
Once again these questions are trivial if you've actually paid attention while reading the book. Anyway, here are the answers:
1. [http://docs.scala-lang.org/tutorials/scala-for-java-programmers.html](http://docs.scala-lang.org/tutorials/scala-for-java-programmers.html)
2. [http://stackoverflow.com/questions/1812401/exactly-what-is-the-difference-between-a-closure-and-a-block](http://stackoverflow.com/questions/1812401/exactly-what-is-the-difference-between-a-closure-and-a-block)
1. [https://docs.scala-lang.org/tutorials/scala-for-java-programmers.html](https://docs.scala-lang.org/tutorials/scala-for-java-programmers.html)
2. [https://stackoverflow.com/questions/1812401/exactly-what-is-the-difference-between-a-closure-and-a-block](https://stackoverflow.com/questions/1812401/exactly-what-is-the-difference-between-a-closure-and-a-block)
The results of the second day's practical assignments can found on [Github](https://github.com/Mastermindzh/Seven-Languages-in-Seven-Weeks/tree/master/Scala/Day%202/src/myApp) or below:

View File

@@ -133,7 +133,7 @@ Finally! We get to do something with concurrency, now Scala can really show me w
The book starts off by telling me about Actors, which have pools of threads and queues, and message passing. When you send a message (using the ! operator) you place an object on its queue. The actor then reads the message and takes action. Usually, the actor uses a pattern matcher to detect what it has to do before it starts doing something.
The book provides a sample application but that plain doesn't work. Upon investigating the issue I discovered that Scala's built-in concurrency feature is deprecated in favour of [Akka](http://akka.io/). This saddens me beyond belief. I have already worked with Akka and had expected Scala to offer me something else. This also means that the rest of the book is not going to be useful anymore.
The book provides a sample application but that plain doesn't work. Upon investigating the issue I discovered that Scala's built-in concurrency feature is deprecated in favour of [Akka](https://akka.io/). This saddens me beyond belief. I have already worked with Akka and had expected Scala to offer me something else. This also means that the rest of the book is not going to be useful anymore.
Stubborn as I am, even with a closing deadline, I decided I wasn't going to let a stupid book stop me and decided to update the code to work with Akka. All of which can be found at [Github](https://github.com/Mastermindzh/Seven-Languages-in-Seven-Weeks/tree/master/Scala/Day%203/src/Concurrency).

View File

@@ -14,7 +14,7 @@ description: "A dive into conventional commits and their benefit whilst releasin
socialImage: "./media/husky-error.png"
---
At my place of work, [INFORIT](http://inforit.nl/), we are talking about adopting conventional commits as a company standard.
At my place of work, [INFORIT](https://inforit.nl/), we are talking about adopting conventional commits as a company standard.
However... debating commits is a tricky endeavor, everyone seems to have their own opinion about it and pretty much no one is following even the basic git rules (e.g title + body). It is precisely because of all of this that an earlier proposal about standardizing commit messages brought us nothing.
Now though, a solid 2 years later, our company has grown tremendously!

View File

@@ -10,7 +10,7 @@ tags:
description: "Good software design practices and a few perfectionistic tendencies lead to almost 5 years without any writing. This post is a deep dive into a few of the struggles of the past 5 years"
---
I've been rebuilding the old "[rickvanlieshout.com](https://rickvanlieshout.com)" for over 5 years now...
I've been rebuilding the old "[rickvanlieshout.com](https://www.rickvanlieshout.com)" for over 5 years now...
But the website isn't that big. It could be done way faster and it has been done way faster.
The thing is, I rewrote it several times, each time with a different design and updated packages.

View File

@@ -0,0 +1,92 @@
---
title: Flashing the LSI-9211 to IT mode using an EFI shell
date: "2023-04-12"
template: "post"
category: "Homelab"
tags:
- "lsi"
- "lsi9211"
- "raid card"
- "storage"
- "SAS2000"
- "it mode"
description: "Flashing the LSI-9211 used to be way more difficult, luckily the EFI shell makes this task a lot simpler!"
socialImage: /media/flash-result.jpg
---
I've been building a new storage-oriented server for a while now and have yet again decided to go with (3 +1 backup) LSI 9211 raid controllers.
The reason I keep going for these specific raid controllers is quite simple. The card can theoretically support (8x500MB) 4GB/s in throughput divided over 8 drives (2x SFF-8087) which is near the maximum for consumer hard drives.
Using 3 of these will allow me to use 24 drives in a single chassis without an expander whilst getting pretty good performance.
The fourth card that I got, and flashed, is simply used as a backup or debug card in case of any errors.
## Downloading the files
Before we can start flashing we will need to download some files.
The table below lists all the files with a brief description of what we'll use them for.
| File | Description |
| --------------------------------------------------------------- | ------------------------------- |
| [EFI flashing utility](https://docs.broadcom.com/docs/12350820) | Flashing utility |
| [EFI ROM image](https://docs.broadcom.com/docs/12348628) | Card ROM file |
| [SAS2008 Firmware](https://docs.broadcom.com/docs/12350504) | IR and IT firmware for the 9211 |
## Prepping the flash drive
Make sure that you have a flash drive that is **32GB** or smaller and that it is formatted as **FAT32**.
Next, we'll add the following files to the **root** of the flash drive:
- `Installer_P20_for_UEFI/sas2flash_efi_ebc_rel/sas2flash.efi`
- `UEFI_BSD_P20/uefi_bsd_rel/Signed/x64sas2.efi`
- `9210-8i_Package_P20_IR_IT_FW_BIOS_for_MSDOS_Windows/sasbios_rel/mptsas2.rom`
- `9210-8i_Package_P20_IR_IT_FW_BIOS_for_MSDOS_Windows/Firmware/HBA_9210_8i_IT/2108it.bin`
## Flashing with EFI
Because we are going to flash using EFI we don't really need anything besides the built-in EFI shell from our motherboard. Simply insert the flash drive and go into the BIOS or use the "select boot device" functionality to select the EFI shell:
!["picture of the monitor showing boot options"](./media/boot-selector.jpg "selecting the EFI shell boot option")
After the shell has booted successfully you can use the `map` command to see all available devices. In the image below you'll see that my flash drive is listed as `fs1`:
![A list of devices in the EFI shell](./media/map-devices.jpg "a list of devices note that `fs1` is my flash drive")
To switch into the drive simply enter the drive name on the command line followed by a semicolon:
```efi
fs1:
```
Next, we'll determine that our adapters are available and we will simultaneously take note of their identifier, we can do so by issuing the following command:
```efi
sas2flash.efi -listall
```
!["list of adapters"](./media/list-adapters.jpg "a list of adapters, I flash them one at a time so I only have card '0' available to me")
Next, we can empty the current firmware with the following command:
```efi
sas2flash.efi -o -e 6
```
![Showing the result of the erasing action](./media/empty-firmware.jpg "bye, bye firmware 😢")
Now we'll simply flash the new (IT-mode) firmware on it with the following command:
```efi
sas2flash.efi -o -f 2108it.bin -b mptsas2.rom
```
![result of flashing in the EFI shell](./media/flash-result.jpg "1 card down, 3 more to go!")
Wait patiently until the operations have completed. Note that it might seem like the steps repeat, just wait until it is completely done and exits back to the shell by itself.
## Multiple cards and conclusion
You can rerun the commands for different cards (by adding `-c x` where x is the card number from `listall`) or by simply physically switching the current one out for a different one.
That's all there is too it, if you need any help feel free to hit me up!

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

View File

@@ -7,6 +7,7 @@ tags:
- "Lego"
- "house"
description: "What started as a simple decoration piece to fill some empty space in my home quickly grew into a new hobby of which the remnants can be found throughout my house"
socialImage: /media/building-the-owl.jpg
---
## The problem
@@ -46,15 +47,15 @@ I emptied a shelf, picked up some [white base plates](https://www.lego.com/en-us
- [Holiday main street](https://www.lego.com/en-us/product/holiday-main-street-10308)
- [Santa's sleigh](https://www.lego.com/en-nl/product/santa-s-sleigh-40499)
- [Santa's visit](https://www.lego.com/en-nl/product/santa-s-visit-10293)
- [Winter elve's scene](https://www.lego.com/en-nl/product/winter-elves-scene-40564)
- [Winter polar bears](https://www.lego.com/en-us/product/wintertime-polar-bears-40571)
- [Winter elves scene](https://www.lego.com/en-nl/product/winter-elves-scene-40564)
- [Winter polar bears](https://web.archive.org/web/20221106002040/https://www.lego.com/en-us/product/wintertime-polar-bears-40571)
- [Santa's workshop](https://www.lego.com/en-nl/product/santa-s-workshop-40565?CMP=AFC-AffiliateUK-lFWN%2FyX1zOg-3425491-124738-1)
The result of a few days of work and the Christmas village has been completed:
!["A bookcase shelf filled with Lego Christmas builds"](/media/christmas.jpg "Happy little Christmas village")
## A new room to build lego
## A new room to build Lego
Now that the Lego virus has taken hold of me I am quickly growing tired of needing to move stuff off my dining table just to build some Legos.
Likewise, I dislike having to move half-finished Lego builds just to use my dining table.
@@ -94,4 +95,4 @@ I'd like to round off this blog post by showing some of the other builds I've si
![Saturn V from lego](/media/rocket.jpeg "Saturn V")
!["Harry Potter's owl Hedwig perched on some books"](/media/owl.jpeg "Shout out to Hedwig! (and Ravenclaw)")
!["A flower bouquet in a clear vase"](/media/bouquet.jpg "The desk felt a bit empty so I added some flowers to spice things up")
![Two of the succulents in decorative pots with some shelves](/media/flower-pots.jpg "Two of the succulents in decorative pots with some shelves")
![Two of the succulents in decorative pots with some shelves](/media/flower-pots.jpg "Two of the succulents in decorative pots with some shells")

View File

@@ -62,29 +62,27 @@ export default {
guid: site.siteMetadata.url + node?.fields?.slug,
custom_elements: [{ "content:encoded": node.html }],
})),
query: `
{
allMarkdownRemark(
limit: 1000,
sort: { order: DESC, fields: [frontmatter___date] },
filter: { frontmatter: { template: { eq: "post" }, draft: { ne: true } } }
) {
edges {
node {
html
fields {
slug
}
frontmatter {
date
title
description
}
query: `{
allMarkdownRemark(
limit: 1000
sort: {frontmatter: {date: DESC}}
filter: {frontmatter: {template: {eq: "post"}, draft: {ne: true}}}
) {
edges {
node {
html
fields {
slug
}
frontmatter {
date
title
description
}
}
}
}
`,
}`,
output: "/rss.xml",
title: config.title,
},
@@ -110,7 +108,7 @@ export default {
},
{
resolve: "gatsby-remark-images-medium-zoom",
options: { background: "rgb(0, 0, 0,50%)" },
options: { background: "rgb(0, 0, 0,70%)" },
},
"gatsby-remark-autolink-headers",
"gatsby-remark-prismjs",
@@ -167,30 +165,14 @@ export default {
},
},
{
resolve: "gatsby-plugin-offline",
resolve: "gatsby-plugin-react-helmet-canonical-urls",
options: {
workboxConfig: {
runtimeCaching: [
{
urlPattern: /(\.js$|\.css$|[^:]static\/)/,
handler: "CacheFirst",
},
{
urlPattern: /^https?:.*\/page-data\/.*\.json/,
handler: "StaleWhileRevalidate",
},
{
urlPattern: /^https?:.*\.(png|jpg|jpeg|webp|svg|gif|tiff|js|woff|woff2|json|css)$/,
handler: "StaleWhileRevalidate",
},
{
urlPattern: /^https?:\/\/fonts\.googleapis\.com\/css/,
handler: "StaleWhileRevalidate",
},
],
},
siteUrl: config.url,
stripQueryString: true,
},
},
// remove the old serviceworker if it is available.
"gatsby-plugin-remove-serviceworker",
"gatsby-plugin-image",
"gatsby-plugin-catch-links",
"gatsby-plugin-react-helmet",

View File

@@ -13,12 +13,10 @@ const categoriesQuery = async (graphql: CreatePagesArgs["graphql"]) => {
const result = await graphql<CategoriesQueryResult>(`
{
allMarkdownRemark(
filter: {
frontmatter: { template: { eq: "post" }, draft: { ne: true } }
}
sort: { order: DESC, fields: [frontmatter___date] }
filter: { frontmatter: { template: { eq: "post" }, draft: { ne: true } } }
sort: { frontmatter: { date: DESC } }
) {
group(field: frontmatter___category) {
group(field: { frontmatter: { category: SELECT } }) {
fieldValue
totalCount
}

View File

@@ -13,11 +13,9 @@ const tagsQuery = async (graphql: CreatePagesArgs["graphql"]) => {
const result = await graphql<TagsQueryResult>(`
{
allMarkdownRemark(
filter: {
frontmatter: { template: { eq: "post" }, draft: { ne: true } }
}
filter: { frontmatter: { template: { eq: "post" }, draft: { ne: true } } }
) {
group(field: frontmatter___tags) {
group(field: { frontmatter: { tags: SELECT } }) {
fieldValue
totalCount
}

View File

@@ -1,7 +1,7 @@
import contacts from "./contacts";
export default {
photo: "/me.png",
photo: "/content/me.png",
bio: "",
name: "Rick van Lieshout",
contacts,

View File

@@ -4,7 +4,7 @@ import menu from "./menu";
export default {
site: {
siteMetadata: {
url: "https://rickvanlieshout.com",
url: "https://www.rickvanlieshout.com",
title: "Rick van Lieshout ~ Mastermindzh",
subtitle: "The thoughts, discoveries and murmurings of a Software enthusiast",
copyright: "All rights reserved.",

39514
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "rickvanlieshout-com",
"version": "1.2.0",
"version": "1.2.3",
"description": "My personal blog / website",
"keywords": [
"gatsby",
@@ -49,36 +49,37 @@
]
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^6.2.0",
"@fortawesome/free-solid-svg-icons": "^6.2.0",
"@fortawesome/fontawesome-svg-core": "^6.4.0",
"@fortawesome/free-solid-svg-icons": "^6.4.0",
"@fortawesome/react-fontawesome": "^0.2.0",
"classnames": "^2.3.2",
"disqus-react": "^1.1.4",
"gatsby": "^4.24.4",
"gatsby-link": "^4.24.1",
"gatsby-plugin-catch-links": "^4.24.0",
"gatsby-plugin-feed": "^4.24.0",
"gatsby-plugin-google-gtag": "^4.24.0",
"gatsby-plugin-image": "^2.24.0",
"gatsby-plugin-manifest": "^4.24.0",
"gatsby-plugin-offline": "^5.24.0",
"disqus-react": "^1.1.5",
"gatsby": "^5.11.0",
"gatsby-link": "^5.11.0",
"gatsby-plugin-catch-links": "^5.11.0",
"gatsby-plugin-feed": "^5.11.0",
"gatsby-plugin-google-gtag": "^5.11.0",
"gatsby-plugin-image": "^3.11.0",
"gatsby-plugin-manifest": "^5.11.0",
"gatsby-plugin-optimize-svgs": "^1.0.5",
"gatsby-plugin-react-helmet": "^5.24.0",
"gatsby-plugin-robots-txt": "^1.7.1",
"gatsby-plugin-sass": "^5.24.0",
"gatsby-plugin-sharp": "^4.24.0",
"gatsby-plugin-sitemap": "^5.24.0",
"gatsby-remark-autolink-headers": "^5.24.0",
"gatsby-remark-copy-linked-files": "^5.24.0",
"gatsby-plugin-react-helmet": "^6.11.0",
"gatsby-plugin-react-helmet-canonical-urls": "^1.4.0",
"gatsby-plugin-remove-serviceworker": "^1.0.0",
"gatsby-plugin-robots-txt": "^1.8.0",
"gatsby-plugin-sass": "^6.11.0",
"gatsby-plugin-sharp": "^5.11.0",
"gatsby-plugin-sitemap": "^6.11.0",
"gatsby-remark-autolink-headers": "^6.11.0",
"gatsby-remark-copy-linked-files": "^6.11.0",
"gatsby-remark-external-links": "0.0.4",
"gatsby-remark-images": "^6.24.0",
"gatsby-remark-images": "^7.11.0",
"gatsby-remark-images-medium-zoom": "^1.7.0",
"gatsby-remark-prismjs": "^6.24.0",
"gatsby-remark-responsive-iframe": "^5.24.0",
"gatsby-remark-smartypants": "^5.24.0",
"gatsby-source-filesystem": "^4.24.0",
"gatsby-transformer-remark": "^5.24.0",
"gatsby-transformer-sharp": "^4.24.0",
"gatsby-remark-prismjs": "^7.11.0",
"gatsby-remark-responsive-iframe": "^6.11.0",
"gatsby-remark-smartypants": "^6.11.0",
"gatsby-source-filesystem": "^5.11.0",
"gatsby-transformer-remark": "^6.11.0",
"gatsby-transformer-sharp": "^5.11.0",
"prismjs": "^1.29.0",
"react": "^18.2.0",
"react-cookie-consent": "^8.0.1",
@@ -88,74 +89,74 @@
"reading-time": "^1.5.0"
},
"devDependencies": {
"@commitlint/config-conventional": "^17.2.0",
"@commitlint/cz-commitlint": "^17.2.0",
"@jest/globals": "^29.1.2",
"@commitlint/config-conventional": "^17.6.6",
"@commitlint/cz-commitlint": "^17.5.0",
"@jest/globals": "^29.5.0",
"@mastermindzh/eslint-config": "^1.0.2",
"@mastermindzh/prettier-config": "^1.0.0",
"@semantic-release/exec": "6.0.3",
"@semantic-release/git": "10.0.1",
"@swc/core": "^1.3.6",
"@swc/jest": "^0.2.23",
"@swc/core": "^1.3.67",
"@swc/jest": "^0.2.26",
"@types/gatsby-transformer-remark": "^2.9.1",
"@types/jest": "^29.1.2",
"@types/node": "^18.8.4",
"@types/react": "^18.0.21",
"@types/react-dom": "^18.0.6",
"@types/react-helmet": "^6.1.5",
"@types/jest": "^29.5.2",
"@types/node": "^18.15.11",
"@types/react": "^18.2.14",
"@types/react-dom": "^18.2.6",
"@types/react-helmet": "^6.1.6",
"@types/react-test-renderer": "^18.0.0",
"@types/react-toggle": "^4.0.3",
"@types/sass": "^1.43.1",
"@typescript-eslint/eslint-plugin": "^5.40.0",
"@typescript-eslint/parser": "^5.40.0",
"autoprefixer": "^10.4.12",
"browserslist": "^4.21.4",
"@typescript-eslint/eslint-plugin": "^5.60.1",
"@typescript-eslint/parser": "^5.60.1",
"autoprefixer": "^10.4.14",
"browserslist": "^4.21.9",
"codecov": "^3.8.3",
"commitizen": "^4.2.5",
"commitlint": "^17.2.0",
"concurrently": "^7.4.0",
"eslint": "^8.25.0",
"commitizen": "^4.3.0",
"commitlint": "^17.6.6",
"concurrently": "^8.2.0",
"eslint": "^8.43.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-airbnb-typescript": "^17.0.0",
"eslint-config-prettier": "^8.5.0",
"eslint-config-prettier": "^8.8.0",
"eslint-config-react-app": "^7.0.1",
"eslint-import-resolver-typescript": "^3.5.1",
"eslint-import-resolver-typescript": "^3.5.5",
"eslint-plugin-flowtype": "^8.0.3",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-jest": "^27.1.1",
"eslint-plugin-jsx-a11y": "^6.6.1",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jest": "^27.2.2",
"eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-react": "^7.31.10",
"eslint-plugin-react": "^7.32.2",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-simple-import-sort": "^8.0.0",
"husky": "8.0.1",
"eslint-plugin-simple-import-sort": "^10.0.0",
"husky": "^8.0.3",
"identity-obj-proxy": "3.0.0",
"jest": "^29.1.2",
"jest-cli": "^29.1.2",
"jest-environment-jsdom": "^29.1.2",
"jest": "^29.5.0",
"jest-cli": "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
"jest-svg-transformer": "^1.0.0",
"lint-staged": "^13.0.3",
"lint-staged": "^13.2.3",
"lost": "9.0.1",
"markdownlint": "^0.26.2",
"postcss": "^8.4.17",
"postcss-scss": "^4.0.5",
"prettier": "^2.7.1",
"prettier-plugin-packagejson": "^2.3.0",
"markdownlint": "^0.29.0",
"postcss": "^8.4.24",
"postcss-scss": "^4.0.6",
"prettier": "^2.8.8",
"prettier-plugin-packagejson": "^2.4.3",
"react-test-renderer": "^18.2.0",
"rimraf": "3.0.2",
"sass": "^1.55.0",
"rimraf": "^4.4.1",
"sass": "^1.63.6",
"source-map-support": "^0.5.21",
"standard-version": "^9.5.0",
"stylelint": "^14.13.0",
"stylelint-config-recommended-scss": "^7.0.0",
"stylelint-order": "^5.0.0",
"stylelint-scss": "^4.3.0",
"stylelint": "^15.9.0",
"stylelint-config-recommended-scss": "^9.0.1",
"stylelint-order": "^6.0.3",
"stylelint-scss": "^4.6.0",
"ts-node": "^10.9.1",
"typescript": "^4.8.4"
"typescript": "^5.1.6",
"unist-util-find": "1.0.2"
},
"config": {
"commitizen": {
"path": "@commitlint/cz-commitlint"
}
}
}
}

View File

@@ -6,6 +6,10 @@
display: none;
}
.language-text {
overflow-wrap: break-word !important;
}
@media print {
.hideInPrintView {
display: none;

View File

@@ -1,5 +1,5 @@
/**
* GHColors theme by Avi Aryan (http://aviaryan.in)
* GHColors theme by Avi Aryan (https://aviaryan.in)
* Inspired by Github syntax coloring
*/
[data-theme="light"] {

View File

@@ -10,9 +10,16 @@ interface Props {
description?: string;
socialImage?: string;
children: React.ReactNode;
noIndex?: boolean;
}
const Layout: React.FC<Props> = ({ children, title, description, socialImage = "" }: Props) => {
const Layout: React.FC<Props> = ({
children,
title,
description,
socialImage = "",
noIndex = false,
}: Props) => {
const { author, url } = useSiteMetadata();
const metaImage = socialImage || author.photo;
const metaImageUrl = url + metaImage;
@@ -23,12 +30,15 @@ const Layout: React.FC<Props> = ({ children, title, description, socialImage = "
<html lang="en" />
<title>{title}</title>
<meta name="description" content={description} />
<meta property="og:description" content={description} />
<meta property="og:site_name" content={title} />
<meta property="og:image" content={metaImageUrl} />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
<meta name="twitter:image" content={metaImageUrl} />
<meta property="twitter:site" content="@mastermindzh" />
{noIndex && <meta name="robots" content="noindex" />}
</Helmet>
{children}
<CookieBar />

View File

@@ -33,6 +33,7 @@ exports[`Content renders correctly 1`] = `
onClick={[Function]}
style={
{
"cursor": "pointer",
"lineHeight": "50px",
"marginRight": "10px",
}
@@ -111,7 +112,7 @@ exports[`Content renders correctly 1`] = `
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM352 256c0 53-43 96-96 96s-96-43-96-96s43-96 96-96s96 43 96 96zm32 0c0-70.7-57.3-128-128-128s-128 57.3-128 128s57.3 128 128 128s128-57.3 128-128z"
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z"
fill="currentColor"
style={{}}
/>

View File

@@ -1,5 +1,7 @@
import type { Node } from "@/types";
import React from "react";
import { Helmet } from "react-helmet";
import { useSiteMetadata } from "../../hooks";
import { Author } from "./Author";
import { Comments } from "./Comments";
import { Content } from "./Content";
@@ -14,24 +16,34 @@ interface Props {
const Post: React.FC<Props> = ({ post }: Props) => {
const { html } = post;
const { tagSlugs, slug, readingTime } = post.fields;
const { tags, title, date, disqusId } = post.frontmatter;
const { tags, title, date, disqusId, category } = post.frontmatter;
const { url } = useSiteMetadata();
return (
<div className={styles.post}>
<div className={styles.content}>
<Content body={html} title={title} subTitle={readingTime?.text} />
</div>
<>
<Helmet>
<meta property="og:type" content="article" />
<meta property="article:publisher" content={url} />
<meta property="article:section" content={category} />
<meta property="article:tag" content={tags ? tags[0] : ""} />
</Helmet>
<div className={styles.footer}>
<Meta date={date} />
{tags && tagSlugs && <Tags tags={tags} tagSlugs={tagSlugs} />}
<Author />
</div>
<div className={styles.post}>
<div className={styles.content}>
<Content body={html} title={title} subTitle={readingTime?.text} />
</div>
<div className={`${styles.comments} hideInPrintView`}>
<Comments disqusId={disqusId} postSlug={slug} postTitle={post.frontmatter.title} />
<div className={styles.footer}>
<Meta date={date} />
{tags && tagSlugs && <Tags tags={tags} tagSlugs={tagSlugs} />}
<Author />
</div>
<div className={`${styles.comments} hideInPrintView`}>
<Comments disqusId={disqusId} postSlug={slug} postTitle={post.frontmatter.title} />
</div>
</div>
</div>
</>
);
};

View File

@@ -34,6 +34,7 @@ exports[`Post renders correctly 1`] = `
onClick={[Function]}
style={
{
"cursor": "pointer",
"lineHeight": "50px",
"marginRight": "10px",
}
@@ -112,7 +113,7 @@ exports[`Post renders correctly 1`] = `
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM352 256c0 53-43 96-96 96s-96-43-96-96s43-96 96-96s96 43 96 96zm32 0c0-70.7-57.3-128-128-128s-128 57.3-128 128s57.3 128 128 128s128-57.3 128-128z"
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z"
fill="currentColor"
style={{}}
/>

View File

@@ -24,7 +24,10 @@ export const PostHeader: FunctionComponent<Props> = ({ author }) => {
</span>
<span className="hideInPrintView">
<a onClick={() => navigate("/")} style={{ lineHeight: "50px", marginRight: "10px" }}>
<a
onClick={() => navigate("/")}
style={{ lineHeight: "50px", marginRight: "10px", cursor: "pointer" }}
>
Back to articles
</a>
<ThemeSwitcher showLabel={false} />

View File

@@ -221,7 +221,7 @@ exports[`Sidebar renders correctly 1`] = `
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM352 256c0 53-43 96-96 96s-96-43-96-96s43-96 96-96s96 43 96 96zm32 0c0-70.7-57.3-128-128-128s-128 57.3-128 128s57.3 128 128 128s128-57.3 128-128z"
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z"
fill="currentColor"
style={{}}
/>

View File

@@ -14,17 +14,15 @@ const useCategoriesList = () => {
graphql`
query CategoriesListQuery {
allMarkdownRemark(
filter: {
frontmatter: { template: { eq: "post" }, draft: { ne: true } }
}
filter: { frontmatter: { template: { eq: "post" }, draft: { ne: true } } }
) {
group(field: frontmatter___category) {
group(field: { frontmatter: { category: SELECT } }) {
fieldValue
totalCount
}
}
}
`,
`
);
return allMarkdownRemark.group ?? [];

View File

@@ -14,17 +14,15 @@ const useTagsList = () => {
graphql`
query TagsListQuery {
allMarkdownRemark(
filter: {
frontmatter: { template: { eq: "post" }, draft: { ne: true } }
}
filter: { frontmatter: { template: { eq: "post" }, draft: { ne: true } } }
) {
group(field: frontmatter___tags) {
group(field: { frontmatter: { tags: SELECT } }) {
fieldValue
totalCount
}
}
}
`,
`
);
return allMarkdownRemark.group || [];

View File

@@ -222,7 +222,7 @@ exports[`CategoriesTemplate renders correctly 1`] = `
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM352 256c0 53-43 96-96 96s-96-43-96-96s43-96 96-96s96 43 96 96zm32 0c0-70.7-57.3-128-128-128s-128 57.3-128 128s57.3 128 128 128s128-57.3 128-128z"
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z"
fill="currentColor"
style={{}}
/>

View File

@@ -21,14 +21,11 @@ const CategoryTemplate: React.FC<Props> = ({ data, pageContext }: Props) => {
const { title: siteTitle, subtitle: siteSubtitle } = useSiteMetadata();
const { group, pagination } = pageContext;
const { currentPage, prevPagePath, nextPagePath, hasPrevPage, hasNextPage } =
pagination;
const { currentPage, prevPagePath, nextPagePath, hasPrevPage, hasNextPage } = pagination;
const { edges } = data.allMarkdownRemark;
const pageTitle =
currentPage > 0
? `${group} - Page ${currentPage} - ${siteTitle}`
: `${group} - ${siteTitle}`;
currentPage > 0 ? `${group} - Page ${currentPage} - ${siteTitle}` : `${group} - ${siteTitle}`;
return (
<Layout title={pageTitle} description={siteSubtitle}>
@@ -52,13 +49,9 @@ export const query = graphql`
limit: $limit
skip: $offset
filter: {
frontmatter: {
category: { eq: $group }
template: { eq: "post" }
draft: { ne: true }
}
frontmatter: { category: { eq: $group }, template: { eq: "post" }, draft: { ne: true } }
}
sort: { order: DESC, fields: [frontmatter___date] }
sort: { frontmatter: { date: DESC } }
) {
edges {
node {

View File

@@ -222,7 +222,7 @@ exports[`CategoryTemplate renders correctly 1`] = `
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM352 256c0 53-43 96-96 96s-96-43-96-96s43-96 96-96s96 43 96 96zm32 0c0-70.7-57.3-128-128-128s-128 57.3-128 128s57.3 128 128 128s128-57.3 128-128z"
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z"
fill="currentColor"
style={{}}
/>

View File

@@ -46,7 +46,7 @@ export const query = graphql`
allMarkdownRemark(
limit: $limit
skip: $offset
sort: { order: DESC, fields: [frontmatter___date] }
sort: { frontmatter: { date: DESC } }
filter: { frontmatter: { template: { eq: "post" }, draft: { ne: true } } }
) {
edges {

View File

@@ -222,7 +222,7 @@ exports[`IndexTemplate renders correctly 1`] = `
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM352 256c0 53-43 96-96 96s-96-43-96-96s43-96 96-96s96 43 96 96zm32 0c0-70.7-57.3-128-128-128s-128 57.3-128 128s57.3 128 128 128s128-57.3 128-128z"
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z"
fill="currentColor"
style={{}}
/>

View File

@@ -222,7 +222,7 @@ exports[`NotFoundTemplate renders correctly 1`] = `
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM352 256c0 53-43 96-96 96s-96-43-96-96s43-96 96-96s96 43 96 96zm32 0c0-70.7-57.3-128-128-128s-128 57.3-128 128s57.3 128 128 128s128-57.3 128-128z"
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z"
fill="currentColor"
style={{}}
/>

View File

@@ -222,7 +222,7 @@ exports[`PageTemplate renders correctly 1`] = `
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM352 256c0 53-43 96-96 96s-96-43-96-96s43-96 96-96s96 43 96 96zm32 0c0-70.7-57.3-128-128-128s-128 57.3-128 128s57.3 128 128 128s128-57.3 128-128z"
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z"
fill="currentColor"
style={{}}
/>

View File

@@ -35,6 +35,7 @@ exports[`PostTemplate renders correctly 1`] = `
onClick={[Function]}
style={
{
"cursor": "pointer",
"lineHeight": "50px",
"marginRight": "10px",
}
@@ -113,7 +114,7 @@ exports[`PostTemplate renders correctly 1`] = `
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM352 256c0 53-43 96-96 96s-96-43-96-96s43-96 96-96s96 43 96 96zm32 0c0-70.7-57.3-128-128-128s-128 57.3-128 128s57.3 128 128 128s128-57.3 128-128z"
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z"
fill="currentColor"
style={{}}
/>

View File

@@ -21,14 +21,11 @@ const TagTemplate: React.FC<Props> = ({ data, pageContext }: Props) => {
const { title: siteTitle, subtitle: siteSubtitle } = useSiteMetadata();
const { group, pagination } = pageContext;
const { currentPage, prevPagePath, nextPagePath, hasPrevPage, hasNextPage } =
pagination;
const { currentPage, prevPagePath, nextPagePath, hasPrevPage, hasNextPage } = pagination;
const { edges } = data.allMarkdownRemark;
const pageTitle =
currentPage > 0
? `${group} - Page ${currentPage} - ${siteTitle}`
: `${group} - ${siteTitle}`;
currentPage > 0 ? `${group} - Page ${currentPage} - ${siteTitle}` : `${group} - ${siteTitle}`;
return (
<Layout title={pageTitle} description={siteSubtitle}>
@@ -58,13 +55,9 @@ export const query = graphql`
limit: $limit
skip: $offset
filter: {
frontmatter: {
tags: { in: [$group] }
template: { eq: "post" }
draft: { ne: true }
}
frontmatter: { tags: { in: [$group] }, template: { eq: "post" }, draft: { ne: true } }
}
sort: { order: DESC, fields: [frontmatter___date] }
sort: { frontmatter: { date: DESC } }
) {
edges {
node {

View File

@@ -222,7 +222,7 @@ exports[`TagTemplate renders correctly 1`] = `
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM352 256c0 53-43 96-96 96s-96-43-96-96s43-96 96-96s96 43 96 96zm32 0c0-70.7-57.3-128-128-128s-128 57.3-128 128s57.3 128 128 128s128-57.3 128-128z"
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z"
fill="currentColor"
style={{}}
/>

View File

@@ -222,7 +222,7 @@ exports[`TagsTemplate renders correctly 1`] = `
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM352 256c0 53-43 96-96 96s-96-43-96-96s43-96 96-96s96 43 96 96zm32 0c0-70.7-57.3-128-128-128s-128 57.3-128 128s57.3 128 128 128s128-57.3 128-128z"
d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z"
fill="currentColor"
style={{}}
/>

View File

@@ -66,6 +66,14 @@ RewriteRule ^(.*)$ http://www.mastermindzh.com/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
<Files *.html>
FileETag None
Header unset ETag
Header set Cache-Control "public, max-age=0, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Thu, 1 Jan 1970 00:00:00 UTC"
</Files>
# redirect old blog pages
Redirect /home /
Redirect /cookies /pages/legal/cookies

View File

@@ -0,0 +1 @@
ac4c4068-88f8-4291-9180-894c0391fed8

BIN
static/content/me.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB