diff options
25 files changed, 103 insertions, 336 deletions
diff --git a/config.toml b/config.toml index 74c851d..93fb8a0 100755 --- a/config.toml +++ b/config.toml | |||
| @@ -30,7 +30,7 @@ enableRobotsTXT = true | |||
| 30 | # Additional markup settings. | 30 | # Additional markup settings. |
| 31 | [markup] | 31 | [markup] |
| 32 | [markup.tableOfContents] | 32 | [markup.tableOfContents] |
| 33 | endLevel = 3 | 33 | endLevel = 5 |
| 34 | ordered = false | 34 | ordered = false |
| 35 | startLevel = 2 | 35 | startLevel = 2 |
| 36 | 36 | ||
diff --git a/content/posts/2015-11-10-software-development-pitfalls.md b/content/posts/2015-11-10-software-development-pitfalls.md index c5d243a..ec7fcb8 100755 --- a/content/posts/2015-11-10-software-development-pitfalls.md +++ b/content/posts/2015-11-10-software-development-pitfalls.md | |||
| @@ -5,17 +5,6 @@ date: 2015-11-10 | |||
| 5 | draft: false | 5 | draft: false |
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | **Table of contents** | ||
| 9 | |||
| 10 | 1. [Ping emails](#ping-emails) | ||
| 11 | 2. [Everybody is a project manager](#everybody-is-a-project-manager) | ||
| 12 | 3. [We are never wrong](#we-are-never-wrong) | ||
| 13 | 4. [Micromanaging](#micromanaging) | ||
| 14 | 5. [Human contact — no need for it!](#human-contact--no-need-for-it) | ||
| 15 | 6. [MVP is killing innovation](#mvp-is-killing-innovation) | ||
| 16 | 7. [Pressure wasteland](#pressure-wasteland) | ||
| 17 | 8. [Conclusion](#conclusion) | ||
| 18 | |||
| 19 | Over the years I had the privilege to work on some very excited projects both in software development field and also in electronics field and every experience taught me some invaluable lessons about how NOT TO approach development. And through this post I will try to point out some absurd, outdated techniques I find the most annoying and damaging during a development cycle. There will be swearing because this topic really gets on my nerves and I never coherently tried to explain them in writing. So if I get heated up, please bear with me. | 8 | Over the years I had the privilege to work on some very excited projects both in software development field and also in electronics field and every experience taught me some invaluable lessons about how NOT TO approach development. And through this post I will try to point out some absurd, outdated techniques I find the most annoying and damaging during a development cycle. There will be swearing because this topic really gets on my nerves and I never coherently tried to explain them in writing. So if I get heated up, please bear with me. |
| 20 | 9 | ||
| 21 | As new methods of project management are emerging, underlying processes still stay old and outdated. This is mainly because we as people are unable to completely shift away from these approaches. | 10 | As new methods of project management are emerging, underlying processes still stay old and outdated. This is mainly because we as people are unable to completely shift away from these approaches. |
diff --git a/content/posts/2017-08-11-simple-iot-application.md b/content/posts/2017-08-11-simple-iot-application.md index 1107228..b34fe6b 100755 --- a/content/posts/2017-08-11-simple-iot-application.md +++ b/content/posts/2017-08-11-simple-iot-application.md | |||
| @@ -5,17 +5,6 @@ date: 2017-08-11 | |||
| 5 | draft: false | 5 | draft: false |
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | **Table of contents** | ||
| 9 | |||
| 10 | 1. [Initial thoughts](#initial-thoughts) | ||
| 11 | 2. [Simple Python API](#simple-python-api) | ||
| 12 | 1. [Basic web application](#basic-web-application) | ||
| 13 | 2. [Web application security](#web-application-security) | ||
| 14 | 3. [Simple API for writing data-points](#simple-api-for-writing-data-points) | ||
| 15 | 3. [Sending data to API with Arduino MKR1000](#sending-data-to-api-with-arduino-mkr1000) | ||
| 16 | 4. [Data visualization](#data-visualization) | ||
| 17 | 5. [Conclusion](#conclusion) | ||
| 18 | |||
| 19 | ## Initial thoughts | 8 | ## Initial thoughts |
| 20 | 9 | ||
| 21 | I have been developing these kind of application for the better part of my last 5 years and people keep asking me how to approach developing such application and I will give a try explaining it here. | 10 | I have been developing these kind of application for the better part of my last 5 years and people keep asking me how to approach developing such application and I will give a try explaining it here. |
diff --git a/content/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md b/content/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md index 8fcf5e7..577e241 100755 --- a/content/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md +++ b/content/posts/2019-01-03-encoding-binary-data-into-dna-sequence.md | |||
| @@ -5,24 +5,6 @@ date: 2019-01-03 | |||
| 5 | draft: false | 5 | draft: false |
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | **Table of contents** | ||
| 9 | |||
| 10 | 1. [Initial thoughts](#initial-thoughts) | ||
| 11 | 2. [Glossary](#glossary) | ||
| 12 | 3. [Data encoding](#data-encoding) | ||
| 13 | 4. [Quick history of DNA](#quick-history-of-dna) | ||
| 14 | 5. [What is DNA?](#what-is-dna) | ||
| 15 | 6. [Encode binary data into DNA sequence](#encode-binary-data-into-dna-sequence) | ||
| 16 | 1. [Basic Encoding](#basic-encoding) | ||
| 17 | 2. [FASTA file format](#fasta-file-format) | ||
| 18 | 3. [PNG encoded DNA sequence](#png-encoded-dna-sequence) | ||
| 19 | 7. [Encoding text file in practice](#encoding-text-file-in-practice) | ||
| 20 | 8. [Toolkit for encoding data](#toolkit-for-encoding-data) | ||
| 21 | 1. [dnae-encode](#dnae-encode) | ||
| 22 | 2. [dnae-png](#dnae-png) | ||
| 23 | 9. [Benchmarks](#benchmarks) | ||
| 24 | 10. [References](#references) | ||
| 25 | |||
| 26 | ## Initial thoughts | 8 | ## Initial thoughts |
| 27 | 9 | ||
| 28 | Imagine a world where you could go outside and take a leaf from a tree and put it through your personal DNA sequencer and get data like music, videos or computer programs from it. Well, this is all possible now. It was not done on a large scale because it is quite expensive to create DNA strands but it's possible. | 10 | Imagine a world where you could go outside and take a leaf from a tree and put it through your personal DNA sequencer and get data like music, videos or computer programs from it. Well, this is all possible now. It was not done on a large scale because it is quite expensive to create DNA strands but it's possible. |
diff --git a/content/posts/2020-09-06-esp-and-micropython.md b/content/posts/2020-09-06-esp-and-micropython.md index 75e8295..481be0a 100755 --- a/content/posts/2020-09-06-esp-and-micropython.md +++ b/content/posts/2020-09-06-esp-and-micropython.md | |||
| @@ -5,18 +5,6 @@ date: 2020-09-06 | |||
| 5 | draft: false | 5 | draft: false |
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | **Table of contents** | ||
| 9 | |||
| 10 | 1. [Introduction](#introduction) | ||
| 11 | 2. [Flashing the SOC](#flashing-the-soc) | ||
| 12 | 3. [Install better tooling](#install-better-tooling) | ||
| 13 | 1. [ampy](#ampy) | ||
| 14 | 2. [rshell](#rshell) | ||
| 15 | 1. [Moving files to flash](#moving-files-to-flash) | ||
| 16 | 2. [Executing scripts](#executing-scripts) | ||
| 17 | 4. [Additional resources](#additional-resources) | ||
| 18 | |||
| 19 | |||
| 20 | ## Introduction | 8 | ## Introduction |
| 21 | 9 | ||
| 22 | A while ago I bought some [ESP8266](https://www.espressif.com/en/products/socs/esp8266) and [ESP32](https://www.espressif.com/en/products/socs/esp32) dev boards to play around with and I finally found a project to try it out. | 10 | A while ago I bought some [ESP8266](https://www.espressif.com/en/products/socs/esp8266) and [ESP32](https://www.espressif.com/en/products/socs/esp32) dev boards to play around with and I finally found a project to try it out. |
diff --git a/content/posts/2021-01-25-goaccess.md b/content/posts/2021-01-25-goaccess.md index 549f9da..e8fcee3 100755 --- a/content/posts/2021-01-25-goaccess.md +++ b/content/posts/2021-01-25-goaccess.md | |||
| @@ -5,14 +5,6 @@ date: 2021-01-25 | |||
| 5 | draft: false | 5 | draft: false |
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | **Table of contents** | ||
| 9 | |||
| 10 | 1. [Introduction](#introduction) | ||
| 11 | 2. [Opting for log parsing](#opting-for-log-parsing) | ||
| 12 | 3. [Getting Nginx ready](#getting-nginx-ready) | ||
| 13 | 4. [Getting GoAccess ready](#getting-goaccess-ready) | ||
| 14 | 5. [Securing with Basic authentication](#securing-with-basic-authentication) | ||
| 15 | |||
| 16 | ## Introduction | 8 | ## Introduction |
| 17 | 9 | ||
| 18 | I know! You cannot simply replace Google Analytics with parsing access logs and displaying a couple of charts. But to be honest, I actually never used Google Analytics to the fullest extent and was usually interested in seeing page hits and which pages were visited most often. | 10 | I know! You cannot simply replace Google Analytics with parsing access logs and displaying a couple of charts. But to be honest, I actually never used Google Analytics to the fullest extent and was usually interested in seeing page hits and which pages were visited most often. |
diff --git a/content/posts/2021-08-01-linux-cheatsheet.md b/content/posts/2021-08-01-linux-cheatsheet.md index 126e922..1645eaf 100755 --- a/content/posts/2021-08-01-linux-cheatsheet.md +++ b/content/posts/2021-08-01-linux-cheatsheet.md | |||
| @@ -5,45 +5,6 @@ date: 2021-08-01 | |||
| 5 | draft: false | 5 | draft: false |
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | **Table of contents** | ||
| 9 | |||
| 10 | 1. [Generate SSH key](#generate-ssh-key) | ||
| 11 | 2. [Login to host via SSH](#login-to-host-via-ssh) | ||
| 12 | 3. [Execute command on a server through SSH](#execute-command-on-a-server-through-ssh) | ||
| 13 | 4. [Displays currently logged in users in the system](#displays-currently-logged-in-users-in-the-system) | ||
| 14 | 5. [Displays Linux system information](#displays-linux-system-information) | ||
| 15 | 6. [Displays kernel release information](#displays-kernel-release-information) | ||
| 16 | 7. [Shows the system hostname](#shows-the-system-hostname) | ||
| 17 | 8. [Shows system reboot history](#shows-system-reboot-history) | ||
| 18 | 9. [Displays information about the user](#displays-information-about-the-user) | ||
| 19 | 10. [Displays IP addresses and all the network interfaces](#displays-ip-addresses-and-all-the-network-interfaces) | ||
| 20 | 11. [Downloads a file from an online source](#downloads-a-file-from-an-online-source) | ||
| 21 | 12. [Compress a file with gzip](#compress-a-file-with-gzip) | ||
| 22 | 13. [Interactive disk usage analyzer](#interactive-disk-usage-analyzer) | ||
| 23 | 14. [Install Node.js using the Node Version Manager](#install-nodejs-using-the-node-version-manager) | ||
| 24 | 15. [Too long; didn't read](#too-long-didnt-read) | ||
| 25 | 16. [Combine all Nginx access logs to one big log file](#combine-all-nginx-access-logs-to-one-big-log-file) | ||
| 26 | 17. [Set up Redis server](#set-up-redis-server) | ||
| 27 | 18. [Generate statistics of your webserver](#generate-statistics-of-your-webserver) | ||
| 28 | 19. [Search for a given pattern in files](#search-for-a-given-pattern-in-files) | ||
| 29 | 20. [Find proccess ID for a specific program](#find-proccess-id-for-a-specific-program) | ||
| 30 | 21. [Print name of current/working directory](#print-name-of-currentworking-directory) | ||
| 31 | 22. [Creates a blank new file](#creates-a-blank-new-file) | ||
| 32 | 23. [Displays first lines in a file](#displays-first-lines-in-a-file) | ||
| 33 | 24. [Displays last lines in a file](#displays-last-lines-in-a-file) | ||
| 34 | 25. [Count lines in a file](#count-lines-in-a-file) | ||
| 35 | 26. [Find all instances of the file](#find-all-instances-of-the-file) | ||
| 36 | 27. [Find file names that begin with ‘index’ in /home folder](#find-file-names-that-begin-with-index-in-home-folder) | ||
| 37 | 28. [Find files larger than 100MB in the home folder](#find-files-larger-than-100mb-in-the-home-folder) | ||
| 38 | 29. [Displays block devices related information](#displays-block-devices-related-information) | ||
| 39 | 30. [Displays free space on mounted systems](#displays-free-space-on-mounted-systems) | ||
| 40 | 31. [Displays free and used memory in the system](#displays-free-and-used-memory-in-the-system) | ||
| 41 | 32. [Displays all active listening ports](#displays-all-active-listening-ports) | ||
| 42 | 33. [Kill a process violently](#kill-a-process-violently) | ||
| 43 | 34. [List files opened by user](#list-files-opened-by-user) | ||
| 44 | 35. [Execute "df -h", showing periodic updates](#execute-df--h-showing-periodic-updates) | ||
| 45 | |||
| 46 | |||
| 47 | ##### Generate SSH key | 8 | ##### Generate SSH key |
| 48 | 9 | ||
| 49 | ```bash | 10 | ```bash |
diff --git a/content/posts/2021-12-03-debian-based-riced-up-distribution-for-developers.md b/content/posts/2021-12-03-debian-based-riced-up-distribution-for-developers.md index 365f632..e0677cf 100755 --- a/content/posts/2021-12-03-debian-based-riced-up-distribution-for-developers.md +++ b/content/posts/2021-12-03-debian-based-riced-up-distribution-for-developers.md | |||
| @@ -5,17 +5,6 @@ date: 2021-12-03 | |||
| 5 | draft: false | 5 | draft: false |
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | **Table of contents** | ||
| 9 | |||
| 10 | 1. [Introduction](#introduction) | ||
| 11 | 2. [How should I approach this?](#how-should-i-approach-this) | ||
| 12 | 3. [Desktop environments](#desktop-environments) | ||
| 13 | 4. [Batteries included](#batteries-included) | ||
| 14 | 1. [Docker recipe](#docker-recipe) | ||
| 15 | 2. [Making bash pretty](#making-bash-pretty) | ||
| 16 | 5. [Conclusion](#conclusion) | ||
| 17 | |||
| 18 | |||
| 19 | ## Introduction | 8 | ## Introduction |
| 20 | 9 | ||
| 21 | I have been using [Ubuntu](https://ubuntu.com/) for quite a longtime now. I have used [Debian](https://www.debian.org/) in the past and [Manjaro](https://manjaro.org/). Also had [Arch](https://archlinux.org/) for some time and even ran [Gentoo](https://www.gentoo.org/) way back. | 10 | I have been using [Ubuntu](https://ubuntu.com/) for quite a longtime now. I have used [Debian](https://www.debian.org/) in the past and [Manjaro](https://manjaro.org/). Also had [Arch](https://archlinux.org/) for some time and even ran [Gentoo](https://www.gentoo.org/) way back. |
diff --git a/content/posts/2021-12-25-running-golang-application-as-pid1.md b/content/posts/2021-12-25-running-golang-application-as-pid1.md index 7a62d1c..3d1f266 100755 --- a/content/posts/2021-12-25-running-golang-application-as-pid1.md +++ b/content/posts/2021-12-25-running-golang-application-as-pid1.md | |||
| @@ -5,19 +5,6 @@ date: 2021-12-25 | |||
| 5 | draft: false | 5 | draft: false |
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | **Table of contents** | ||
| 9 | |||
| 10 | 1. [Unikernels, kernels, and alike](#unikernels-kernels-and-alike) | ||
| 11 | 2. [What is PID 1?](#what-is-pid-1) | ||
| 12 | 3. [So why even run application as PID 1 instead of just using a container?](#so-why-even-run-application-as-pid-1-instead-of-just-using-a-container) | ||
| 13 | 4. [The master plan](#the-master-plan) | ||
| 14 | 5. [Compiling Linux kernel](#compiling-linux-kernel) | ||
| 15 | 6. [Preparing PID 1 application in Golang](#preparing-pid-1-application-in-golang) | ||
| 16 | 7. [Running all of it with QEMU](#running-all-of-it-with-qemu) | ||
| 17 | 8. [Size comparison](#size-comparison) | ||
| 18 | 9. [Creating ISO image and running it with Gnome Boxes](#creating-iso-image-and-running-it-with-gnome-boxes) | ||
| 19 | 10. [Is running applications as PID 1 even worth it?](#is-running-applications-as-pid-1-even-worth-it) | ||
| 20 | |||
| 21 | ## Unikernels, kernels, and alike | 8 | ## Unikernels, kernels, and alike |
| 22 | 9 | ||
| 23 | I have been reading a lot about [unikernernels](https://en.wikipedia.org/wiki/Unikernel) lately and found them very intriguing. When you push away all the marketing speak and look at the idea, it makes a lot of sense. | 10 | I have been reading a lot about [unikernernels](https://en.wikipedia.org/wiki/Unikernel) lately and found them very intriguing. When you push away all the marketing speak and look at the idea, it makes a lot of sense. |
diff --git a/content/posts/2021-12-30-wap-mobile-web-before-the-web.md b/content/posts/2021-12-30-wap-mobile-web-before-the-web.md index 5c24c98..6664639 100755 --- a/content/posts/2021-12-30-wap-mobile-web-before-the-web.md +++ b/content/posts/2021-12-30-wap-mobile-web-before-the-web.md | |||
| @@ -5,14 +5,6 @@ date: 2021-12-30 | |||
| 5 | draft: false | 5 | draft: false |
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | **Table of contents** | ||
| 9 | |||
| 10 | 1. [A little stroll down the history lane](#a-little-stroll-down-the-history-lane) | ||
| 11 | 2. [WAP - Wireless Application Protocol](#wap---wireless-application-protocol) | ||
| 12 | 3. [WML - Wireless Markup Language](#wml---wireless-markup-language) | ||
| 13 | 4. [Converting Digg to WML](#converting-digg-to-wml) | ||
| 14 | 5. [Conclusion](#conclusion) | ||
| 15 | |||
| 16 | ## A little stroll down the history lane | 8 | ## A little stroll down the history lane |
| 17 | 9 | ||
| 18 | About two weeks ago, I watched this outstanding documentary on YouTube [Springboard: the secret history of the first real smartphone](https://www.youtube.com/watch?v=b9_Vh9h3Ohw) about the history of smartphones and phones in general. It brought back so many memories. I never had an actual smartphone before the Android. The closest to smartphone was [Sony Ericsson P1](https://www.gsmarena.com/sony_ericsson_p1-1982.php). A fantastic phone and I broke it in Prague after a party and that was one of those rare occasions where I was actually mad at myself. But nevertheless, after that phone, the next one was an Android one. | 10 | About two weeks ago, I watched this outstanding documentary on YouTube [Springboard: the secret history of the first real smartphone](https://www.youtube.com/watch?v=b9_Vh9h3Ohw) about the history of smartphones and phones in general. It brought back so many memories. I never had an actual smartphone before the Android. The closest to smartphone was [Sony Ericsson P1](https://www.gsmarena.com/sony_ericsson_p1-1982.php). A fantastic phone and I broke it in Prague after a party and that was one of those rare occasions where I was actually mad at myself. But nevertheless, after that phone, the next one was an Android one. |
diff --git a/content/posts/2022-07-05-what-would-dna-sound-if-synthesized.md b/content/posts/2022-07-05-what-would-dna-sound-if-synthesized.md index ba5cc4b..002eb5d 100755 --- a/content/posts/2022-07-05-what-would-dna-sound-if-synthesized.md +++ b/content/posts/2022-07-05-what-would-dna-sound-if-synthesized.md | |||
| @@ -5,22 +5,6 @@ date: 2022-07-05 | |||
| 5 | draft: false | 5 | draft: false |
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | **Table of contents** | ||
| 9 | |||
| 10 | 1. [Introduction](#introduction) | ||
| 11 | 2. [DNA encoding and primer example](#dna-encoding-and-primer-example) | ||
| 12 | 3. [Parsing DNA data](#parsing-dna-data) | ||
| 13 | 4. [Generating sine wave](#generating-sine-wave) | ||
| 14 | 5. [Generating a WAV file from accumulated sine waves](#generating-a-wav-file-from-accumulated-sine-waves) | ||
| 15 | 6. [Generating Spectograms](#generating-spectograms) | ||
| 16 | 7. [Pre-generated sequences](#pre-generated-sequences) | ||
| 17 | 1. [Niels Bohr quote](#niels-bohr-quote) | ||
| 18 | 2. [Mouse](#mouse) | ||
| 19 | 3. [Bison](#bison) | ||
| 20 | 4. [Taurus](#taurus) | ||
| 21 | 8. [Making a drummer out of a DNA sequence](#making-a-drummer-out-of-a-dna-sequence) | ||
| 22 | 9. [Going even further](#going-even-further) | ||
| 23 | |||
| 24 | ## Introduction | 8 | ## Introduction |
| 25 | 9 | ||
| 26 | Lately, I have been thinking a lot about the nature of life, what are the foundation blocks of life and things like that. It's remarkable how complex and on the other hand simple the creation is when you look at it. The miracle of life keeps us grounded when our imagination goes wild. If the DNA are the blocks of life, you could consider them to be an API nature provided us to better understand all of this chaos masquerading as order. | 10 | Lately, I have been thinking a lot about the nature of life, what are the foundation blocks of life and things like that. It's remarkable how complex and on the other hand simple the creation is when you look at it. The miracle of life keeps us grounded when our imagination goes wild. If the DNA are the blocks of life, you could consider them to be an API nature provided us to better understand all of this chaos masquerading as order. |
diff --git a/content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md b/content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md index b746b76..6e5f938 100755 --- a/content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md +++ b/content/posts/2022-10-06-state-of-web-technologies-in-year-2022.md | |||
| @@ -5,16 +5,6 @@ date: 2022-10-06 | |||
| 5 | draft: false | 5 | draft: false |
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | **Table of Contents** | ||
| 9 | 1. [Initial thoughts](#initial-thoughts) | ||
| 10 | 2. [Giving React JS a spin](#giving-react-js-a-spin) | ||
| 11 | 3. [Bundlers and Transpilers](#bundlers-and-transpilers) | ||
| 12 | 4. [Jam Stack, Mach Stack no snack](#jam-stack-mach-stack-no-snack) | ||
| 13 | 5. [Tailwind CSS still rocks!](#tailwind-css-still-rocks) | ||
| 14 | 6. [Code maintainability](#code-maintainability) | ||
| 15 | 7. [Web development has a marketing issue](#web-development-has-a-marketing-issue) | ||
| 16 | 8. [Conclusion](#conclusion) | ||
| 17 | |||
| 18 | ## Initial thoughts | 8 | ## Initial thoughts |
| 19 | 9 | ||
| 20 | *This post is a critique on the current state of web development. It is an opinionated post! I will learn more about this in the future, and probably slightly change my mind about some of the things I criticize.* | 10 | *This post is a critique on the current state of web development. It is an opinionated post! I will learn more about this in the future, and probably slightly change my mind about some of the things I criticize.* |
diff --git a/content/posts/2022-10-11-handling-massive-worlds-in-godot.md b/content/posts/2022-10-11-handling-massive-worlds-in-godot.md index ed917c2..0fa30e8 100755 --- a/content/posts/2022-10-11-handling-massive-worlds-in-godot.md +++ b/content/posts/2022-10-11-handling-massive-worlds-in-godot.md | |||
| @@ -5,11 +5,6 @@ date: 2022-10-11 | |||
| 5 | draft: true | 5 | draft: true |
| 6 | --- | 6 | --- |
| 7 | 7 | ||
| 8 | **Table of contents** | ||
| 9 | |||
| 10 | 1. [Handling lazy loading in 2D world](#handling-lazy-loading-in-2d-world) | ||
| 11 | 1. [Player movement](#player-movement) | ||
| 12 | |||
| 13 | Because these examples are exported from **Godot to WebAssembly** and the packaging produces **large files**, you will need to **click to lazy load them** | 8 | Because these examples are exported from **Godot to WebAssembly** and the packaging produces **large files**, you will need to **click to lazy load them** |
| 14 | 9 | ||
| 15 | I have seen a couple of examples on the net, but never really a comprehensive guide how this would be achieved. My solution is nowhere perfect, but it will get you started. This code is also not optimized, so buyer beware. | 10 | I have seen a couple of examples on the net, but never really a comprehensive guide how this would be achieved. My solution is nowhere perfect, but it will get you started. This code is also not optimized, so buyer beware. |
diff --git a/content/posts/2022-12-20-trying-to-build-a-new-kind-of-terminal-emulator.md b/content/posts/2022-12-20-trying-to-build-a-new-kind-of-terminal-emulator.md index fd25cdb..89caa0c 100644 --- a/content/posts/2022-12-20-trying-to-build-a-new-kind-of-terminal-emulator.md +++ b/content/posts/2022-12-20-trying-to-build-a-new-kind-of-terminal-emulator.md | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | --- | 1 | --- |
| 2 | title: Trying to build a New kind of terminal emulator | 2 | title: Trying to build a New kind of terminal emulator for the modern age |
| 3 | url: trying-to-build-a-new-kind-of-terminal-emulator.html | 3 | url: trying-to-build-a-new-kind-of-terminal-emulator.html |
| 4 | date: 2022-12-20 | 4 | date: 2022-12-20 |
| 5 | draft: true | 5 | draft: true |
diff --git a/static/general/index.css b/static/general/index.css index c6ea4ae..8bd1baf 100644 --- a/static/general/index.css +++ b/static/general/index.css | |||
| @@ -1 +1 @@ | |||
| /*! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.collapse{visibility:collapse}.mx-auto{margin-left:auto;margin-right:auto}.mb-10{margin-bottom:2.5rem}.mb-6{margin-bottom:1.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-12{margin-bottom:3rem}.ml-6{margin-left:1.5rem}.mb-5{margin-bottom:1.25rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.table{display:table}.hidden{display:none}.h-full{height:100%}.w-full{width:100%}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.items-center{align-items:center}.gap-1{gap:.25rem}.rounded{border-radius:.25rem}.border-0{border-width:0}.border{border-width:1px}.border-2{border-width:2px}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.pb-12{padding-bottom:3rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-extrabold{font-weight:800}.leading-relaxed{line-height:1.625}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}*{cursor:url(/general/9front-cursor.png),auto}.container-blog{max-width:700px}::selection{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}::-moz-selection{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}article.single h2{margin-bottom:1rem;margin-top:2rem;font-size:1.5rem;line-height:2rem;font-weight:700}article.single h3{font-size:1.25rem}article.single h3,article.single h4{margin-bottom:1rem;margin-top:2rem;line-height:1.75rem;font-weight:700}article.single h4{font-size:1.125rem}article.single p{margin-bottom:1.25rem}article.single a{text-decoration-line:underline}article.single a:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}article.single blockquote{background-image:url(/general/alert-light.svg);background-size:30px 30px;background-repeat:no-repeat;background-position:0 5px;margin-top:2rem;margin-bottom:2rem;padding-left:3rem}article.single img{margin-top:2rem;margin-bottom:2rem}article.single img,article.single video{width:100%;border-radius:.25rem;--tw-bg-opacity:1!important;background-color:rgb(249 250 251/var(--tw-bg-opacity))!important}article.single audio{margin-bottom:1.5rem;width:100%}article.single code{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));padding:.25rem .5rem;font-weight:500}article.single code,article.single pre{border-radius:.25rem;font-size:.75rem;line-height:1rem}article.single pre{margin-bottom:1.5rem;overflow-x:auto;--tw-bg-opacity:1!important;background-color:rgb(249 250 251/var(--tw-bg-opacity))!important;padding:1rem}article.single pre code{background:unset;padding:unset;line-height:1.625}article.single table{margin-bottom:1rem;width:100%;border-collapse:collapse;border-width:1px;--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity))}article.single table td,article.single table th,article.single table tr{border-width:1px;padding:.5rem 1rem;text-align:left}article.single ul{margin-bottom:1.5rem;list-style-type:disc;padding-left:1.5rem}@media (min-width:768px){article.single ul{padding-left:2.5rem}}article.single ol{list-style-type:decimal;padding-left:2rem}@media (min-width:768px){article.single ol{padding-left:2.5rem}}article.single .katex-display{margin-top:2.5rem;margin-bottom:2.5rem}article.single .ll-iframe{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}article.single .ll-iframe:before{display:flex;height:100%}@keyframes pulse{50%{opacity:.5}}article.single .ll-iframe:before{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;cursor:pointer;align-items:center;justify-content:center;border-radius:.25rem;border-width:2px;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity));font-size:.875rem;line-height:1.25rem;font-weight:500;content:"Click here to load resource…"}article.single .ll-iframe.empty:before{content:none}.comments img{max-width:auto!important;max-width:unset!important;max-width:inherit!important}.cactus-container .cactus-editor-textarea{height:8rem}.cactus-container .cactus-editor-name input,.cactus-container .cactus-editor-textarea{margin-bottom:.5rem;width:100%;border-radius:.25rem;border-width:1px;padding:.5rem .75rem;outline:2px solid #0000;outline-offset:2px}.cactus-container .cactus-editor-name{margin-bottom:.25rem}.cactus-editor-buttons{display:flex;gap:.5rem}.cactus-container .cactus-button{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity));padding:.5rem 1.5rem;font-size:1rem;line-height:1.5rem;font-weight:500}.cactus-container .cactus-button:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.cactus-container .cactus-editor{margin-bottom:2.5rem}.cactus-container .cactus-comments-list{display:flex;flex-direction:column;gap:2rem}.cactus-container .cactus-comment{display:flex;gap:1rem}.cactus-container .cactus-comment .cactus-comment-avatar img{height:2rem;width:2rem;border-radius:9999px}.cactus-container .cactus-comment .cactus-comment-avatar-placeholder{height:2rem;width:2rem;border-radius:9999px;--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.cactus-container .cactus-comment .cactus-comment-header{display:flex;align-items:center;gap:.5rem}.cactus-container .cactus-comment .cactus-comment-header .cactus-comment-displayname{font-weight:600}.cactus-container .cactus-comment .cactus-comment-header .cactus-comment-time{font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.cactus-container .cactus-comment .cactus-message-text code{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500}.cactus-container .cactus-comment .cactus-message-text ul{list-style-type:disc;padding-left:.5rem}@media (min-width:768px){.cactus-container .cactus-comment .cactus-message-text ul{padding-left:1.5rem}}.cactus-container .cactus-comment .cactus-message-text ol{list-style-type:decimal;padding-left:.5rem}@media (min-width:768px){.cactus-container .cactus-comment .cactus-message-text ol{padding-left:1.5rem}}.cactus-container .cactus-login-form-wrapper{position:relative;margin-bottom:1.5rem;border-radius:.25rem;border-width:1px;padding:.75rem}.cactus-container .cactus-login-form .cactus-login-close{position:absolute;right:.75rem;top:.75rem;height:1rem;width:1rem}.cactus-container .cactus-login-form .cactus-login-title{margin-bottom:1rem;margin-top:0;padding-top:0;font-weight:700}.cactus-container .cactus-login-form .cactus-login-client{margin-bottom:1.5rem}.cactus-container .cactus-login-form .cactus-login-client-title{margin-bottom:.5rem;font-weight:600}.cactus-container .cactus-login-form .cactus-login-credentials-title{margin-bottom:.25rem;font-weight:600}.cactus-container .cactus-login-form .cactus-login-field{margin-bottom:.5rem;display:flex;align-items:center;gap:1rem}.cactus-container .cactus-login-form .cactus-login-label{width:5rem}.cactus-container .cactus-login-form input{border-radius:.25rem;border-width:1px;padding:.25rem .5rem}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}@media (min-width:768px){.md\:mb-0{margin-bottom:0}.md\:block{display:block}.md\:flex-row{flex-direction:row}.md\:p-0{padding:0}} \ No newline at end of file | /*! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.collapse{visibility:collapse}.mx-auto{margin-left:auto;margin-right:auto}.my-12{margin-top:3rem;margin-bottom:3rem}.mb-10{margin-bottom:2.5rem}.mb-6{margin-bottom:1.5rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-12{margin-bottom:3rem}.ml-6{margin-left:1.5rem}.mb-5{margin-bottom:1.25rem}.mt-4{margin-top:1rem}.mb-8{margin-bottom:2rem}.block{display:block}.flex{display:flex}.table{display:table}.contents{display:contents}.hidden{display:none}.h-full{height:100%}.w-full{width:100%}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.items-center{align-items:center}.gap-1{gap:.25rem}.rounded{border-radius:.25rem}.border-0{border-width:0}.border{border-width:1px}.border-2{border-width:2px}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.pb-16{padding-bottom:4rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.font-semibold{font-weight:600}.font-medium{font-weight:500}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.leading-relaxed{line-height:1.625}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.decoration-wavy{text-decoration-style:wavy}.decoration-1{text-decoration-thickness:1px}.underline-offset-2{text-underline-offset:2px}.outline{outline-style:solid}*{cursor:url(/general/9front-cursor.png),auto}.container-blog{max-width:700px}::selection{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}::-moz-selection{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}article.single h2{margin-bottom:2rem;margin-top:2rem;font-size:1.5rem;line-height:2rem;font-weight:700}article.single h3{font-size:1.25rem}article.single h3,article.single h4{margin-bottom:1rem;margin-top:2rem;line-height:1.75rem;font-weight:700}article.single h4{font-size:1.125rem}article.single p{margin-bottom:1.25rem}article.single a{text-decoration-line:underline;text-decoration-style:wavy;text-decoration-thickness:1px;text-underline-offset:2px}article.single a:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}article.single .content blockquote{background-image:url(/general/alert-light.svg);background-size:30px 30px;background-repeat:no-repeat;background-position:0 5px;margin-top:2rem;margin-bottom:2rem;padding-left:3rem}article.single .content blockquote p{margin-bottom:.5rem}article.single img{margin-top:2rem;margin-bottom:2rem}article.single img,article.single video{width:100%;border-radius:.25rem;--tw-bg-opacity:1!important;background-color:rgb(249 250 251/var(--tw-bg-opacity))!important}article.single audio{margin-bottom:1.5rem;width:100%}article.single code{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity));padding:.25rem .5rem;font-weight:500}article.single code,article.single pre{border-radius:.25rem;font-size:.75rem;line-height:1rem}article.single pre{margin-bottom:1.5rem;overflow-x:auto;--tw-bg-opacity:1!important;background-color:rgb(249 250 251/var(--tw-bg-opacity))!important;padding:1rem}article.single pre code{background:unset;padding:unset;line-height:1.625}article.single table{margin-bottom:1rem;width:100%;border-collapse:collapse;border-width:1px;--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity))}article.single table td,article.single table th,article.single table tr{border-width:1px;padding:.5rem 1rem;text-align:left}article.single .content ul{margin-bottom:1.5rem;list-style-type:disc;padding-left:1.5rem}@media (min-width:768px){article.single .content ul{padding-left:2.5rem}}article.single .content ol{margin-bottom:1.5rem;list-style-type:decimal;padding-left:2rem}@media (min-width:768px){article.single .content ol{padding-left:2.5rem}}article.single #TableOfContents{margin-bottom:2.5rem;margin-left:1rem;line-height:1.625}article.single #TableOfContents ul{list-style-type:decimal;padding-left:1rem}@media (min-width:768px){article.single #TableOfContents ul{padding-left:1.5rem}}article.single .katex-display{margin-top:2.5rem;margin-bottom:2.5rem}article.single .ll-iframe{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}article.single .ll-iframe:before{display:flex;height:100%}@keyframes pulse{50%{opacity:.5}}article.single .ll-iframe:before{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;cursor:pointer;align-items:center;justify-content:center;border-radius:.25rem;border-width:2px;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity));font-size:.875rem;line-height:1.25rem;font-weight:500;content:"Click here to load resource…"}article.single .ll-iframe.empty:before{content:none}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}@media (min-width:768px){.md\:mb-0{margin-bottom:0}.md\:block{display:block}.md\:flex-row{flex-direction:row}.md\:p-0{padding:0}} \ No newline at end of file | ||
diff --git a/themes/bare/openring/openring.html b/themes/bare/openring/openring.html index bd9ac55..3c870bb 100755 --- a/themes/bare/openring/openring.html +++ b/themes/bare/openring/openring.html | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | <section class="mb-10"> | 1 | <section class="mb-10"> |
| 2 | <h2 class="text-2xl font-bold mb-6">Articles from blogs I follow around the net</h2> | 2 | <h2 class="text-2xl font-semibold mb-6">Articles from blogs I follow around the net</h2> |
| 3 | 3 | ||
| 4 | <section> | 4 | <section> |
| 5 | {{ range .Articles }} | 5 | {{ range .Articles }} |
| @@ -7,7 +7,8 @@ | |||
| 7 | <a href="{{ .Link }}" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">{{ .Title }}</a> | 7 | <a href="{{ .Link }}" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">{{ .Title }}</a> |
| 8 | <p class="mb-1 text-sm text-gray-600">{{ .Summary }}</p> | 8 | <p class="mb-1 text-sm text-gray-600">{{ .Summary }}</p> |
| 9 | <div class="text-gray-500 font-medium text-xs"> | 9 | <div class="text-gray-500 font-medium text-xs"> |
| 10 | Via <a href="{{ .SourceLink }}" class="underline">{{ .SourceTitle }}</a> on {{ .Date | datef "January 2, 2006" }} | 10 | Via <a href="{{ .SourceLink }}" class="underline">{{ .SourceTitle }}</a> on {{ .Date | datef "January 2, 2006" |
| 11 | }} | ||
| 11 | </div> | 12 | </div> |
| 12 | </article> | 13 | </article> |
| 13 | {{ end }} | 14 | {{ end }} |
| @@ -16,4 +17,4 @@ | |||
| 16 | <p class="text-sm text-gray-500"> | 17 | <p class="text-sm text-gray-500"> |
| 17 | <a href="https://git.sr.ht/~sircmpwn/openring" class="no-underline hover:underline">Generated with openring.</a> | 18 | <a href="https://git.sr.ht/~sircmpwn/openring" class="no-underline hover:underline">Generated with openring.</a> |
| 18 | </p> | 19 | </p> |
| 19 | </section> | 20 | </section> \ No newline at end of file |
diff --git a/themes/simple/layouts/_default/list.html b/themes/simple/layouts/_default/list.html index 856abf4..8d72aed 100755 --- a/themes/simple/layouts/_default/list.html +++ b/themes/simple/layouts/_default/list.html | |||
| @@ -9,7 +9,8 @@ | |||
| 9 | {{ range (where .Site.RegularPages "Section" "posts") }} | 9 | {{ range (where .Site.RegularPages "Section" "posts") }} |
| 10 | <article class="mb-5" itemscope itemtype="http://schema.org/Article"> | 10 | <article class="mb-5" itemscope itemtype="http://schema.org/Article"> |
| 11 | <time class="block text-gray-400 font-medium text-xs">{{ .Date.Format "Monday Jan 2, 2006" }}</time> | 11 | <time class="block text-gray-400 font-medium text-xs">{{ .Date.Format "Monday Jan 2, 2006" }}</time> |
| 12 | <a href="/{{ .Params.url }}" itemprop="url" class="hover:bg-yellow-100" rel="bookmark noopener" aria-label="Opens URL"> | 12 | <a href="/{{ .Params.url }}" itemprop="url" class="hover:bg-yellow-100" rel="bookmark noopener" |
| 13 | aria-label="Opens URL"> | ||
| 13 | {{ if .Params.draft }} | 14 | {{ if .Params.draft }} |
| 14 | <span class="bg-orange-600 text-white px-1.5">Draft</span> | 15 | <span class="bg-orange-600 text-white px-1.5">Draft</span> |
| 15 | {{ end }} | 16 | {{ end }} |
| @@ -30,4 +31,4 @@ | |||
| 30 | {{ partial "openring.html" . }} | 31 | {{ partial "openring.html" . }} |
| 31 | 32 | ||
| 32 | </main> | 33 | </main> |
| 33 | {{ end }} | 34 | {{ end }} \ No newline at end of file |
diff --git a/themes/simple/layouts/_default/single.html b/themes/simple/layouts/_default/single.html index 81a7d58..ffa776f 100755 --- a/themes/simple/layouts/_default/single.html +++ b/themes/simple/layouts/_default/single.html | |||
| @@ -4,14 +4,21 @@ | |||
| 4 | <!-- Single article --> | 4 | <!-- Single article --> |
| 5 | <article itemtype="http://schema.org/Article" class="single mb-12"> | 5 | <article itemtype="http://schema.org/Article" class="single mb-12"> |
| 6 | <header class="mb-6"> | 6 | <header class="mb-6"> |
| 7 | <h1 itemtype="headline" class="text-4xl font-extrabold mb-6 leading-1 md:leading-2">{{ .Title }}</h1> | 7 | <h1 itemtype="headline" class="text-4xl font-bold mb-4 leading-1 md:leading-2">{{ .Title }}</h1> |
| 8 | 8 | ||
| 9 | {{ if in .Type "posts" }} | 9 | {{ if in .Type "posts" }} |
| 10 | <time class="text-gray-400 font-medium text-sm">Published on {{ .Date.Format "Monday Jan 2, 2006" }}</time> | 10 | <time class="text-gray-400 font-medium text-sm">Published on {{ .Date.Format "Monday Jan 2, 2006" }}</time> |
| 11 | {{ end }} | 11 | {{ end }} |
| 12 | </header> | 12 | </header> |
| 13 | 13 | ||
| 14 | <div class="leading-relaxed"> | 14 | <div> |
| 15 | {{ if ge (len .TableOfContents) 100 }} | ||
| 16 | <p class="font-semibold">Table of contents</p> | ||
| 17 | <div>{{ .TableOfContents }}</div> | ||
| 18 | {{ end }} | ||
| 19 | </div> | ||
| 20 | |||
| 21 | <div class="leading-relaxed content"> | ||
| 15 | {{.Content}} | 22 | {{.Content}} |
| 16 | </div> | 23 | </div> |
| 17 | </article> | 24 | </article> |
| @@ -46,4 +53,4 @@ | |||
| 46 | {{ end }} | 53 | {{ end }} |
| 47 | 54 | ||
| 48 | </main> | 55 | </main> |
| 49 | {{ end }} | 56 | {{ end }} \ No newline at end of file |
diff --git a/themes/simple/layouts/partials/comments.html b/themes/simple/layouts/partials/comments.html index b905967..bd26145 100755 --- a/themes/simple/layouts/partials/comments.html +++ b/themes/simple/layouts/partials/comments.html | |||
| @@ -1,21 +1,11 @@ | |||
| 1 | <section class="comments"> | 1 | <section class="comments"> |
| 2 | <h2 class="text-xl font-bold mb-2">Leave a comment</h2> | 2 | <h2 class="text-xl font-bold mb-2">Care to leave a comment?</h2> |
| 3 | <p class="mb-4">You can write me an email at <a href="mailto:m@mitjafelicijan.com" class="underline hover:bg-yellow-100">m@mitjafelicijan.com</a> or comment bellow.</p> | 3 | <p class="mb-4">You can write me an email at |
| 4 | <div id="comment-section"></div> | 4 | <a href="mailto:m@mitjafelicijan.com" |
| 5 | 5 | class="underline-offset-2 decoration-1 decoration-wavy underline hover:bg-yellow-100">m@mitjafelicijan.com</a> | |
| 6 | <script type="text/javascript" src="https://latest.cactus.chat/cactus.js"></script> | 6 | or catch up with me |
| 7 | 7 | <a href="https://telegram.me/mitjafelicijan" target="_blank" | |
| 8 | <script> | 8 | class="underline-offset-2 decoration-1 decoration-wavy underline hover:bg-yellow-100">on |
| 9 | window.addEventListener('load', () => { | 9 | Telegram</a>. |
| 10 | initComments({ | 10 | </p> |
| 11 | node: document.getElementById("comment-section"), | 11 | </section> \ No newline at end of file |
| 12 | defaultHomeserverUrl: "https://matrix.cactus.chat:8448", | ||
| 13 | serverName: "cactus.chat", | ||
| 14 | siteName: "mitjafelicijan.com", | ||
| 15 | commentSectionId: "{{ .File }}", | ||
| 16 | pageSize: 50, | ||
| 17 | updateInterval: 10, | ||
| 18 | }); | ||
| 19 | }); | ||
| 20 | </script> | ||
| 21 | </section> | ||
diff --git a/themes/simple/layouts/partials/footer.html b/themes/simple/layouts/partials/footer.html index 7383ae1..a0c745f 100755 --- a/themes/simple/layouts/partials/footer.html +++ b/themes/simple/layouts/partials/footer.html | |||
| @@ -1,8 +1,12 @@ | |||
| 1 | <footer class="container-blog mx-auto px-6 md:p-0 text-gray-400 text-sm"> | 1 | <footer class="container-blog mx-auto px-6 md:p-0 text-gray-400 text-sm"> |
| 2 | <p class="pb-12"> | 2 | <hr class="border-2 border-gray-100 my-12"> |
| 3 | <p class="pb-16"> | ||
| 3 | This website does not track you. | 4 | This website does not track you. |
| 4 | Content is made available under the <a href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noreferrer" class="underline hover:text-gray-800">CC BY 4.0 license</a> unless specified otherwise. | 5 | Content is made available under the <a href="https://creativecommons.org/licenses/by/4.0/" target="_blank" |
| 5 | Blog feed is available as <a href="/index.xml" target="_blank" class="underline hover:text-gray-800">RSS</a> feed. | 6 | rel="noreferrer" class="underline-offset-2 decoration-1 decoration-wavy underline hover:text-gray-800">CC BY 4.0 |
| 7 | license</a> unless specified otherwise. | ||
| 8 | Blog feed is available as <a href="/index.xml" target="_blank" | ||
| 9 | class="underline-offset-2 decoration-1 decoration-wavy underline hover:text-gray-800">RSS feed</a>. | ||
| 6 | </p> | 10 | </p> |
| 7 | </footer> | 11 | </footer> |
| 8 | 12 | ||
| @@ -11,9 +15,13 @@ | |||
| 11 | 15 | ||
| 12 | {{ if ne .IsHome true }} | 16 | {{ if ne .IsHome true }} |
| 13 | <!-- KaTeX math library --> | 17 | <!-- KaTeX math library --> |
| 14 | <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/katex.min.css" integrity="sha384-RZU/ijkSsFbcmivfdRBQDtwuwVqK7GMOw6IMvKyeWL2K5UAlyp6WonmB8m7Jd0Hn" crossorigin="anonymous"> | 18 | <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/katex.min.css" |
| 15 | <script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/katex.min.js" integrity="sha384-pK1WpvzWVBQiP0/GjnvRxV4mOb0oxFuyRxJlk6vVw146n3egcN5C925NCP7a7BY8" crossorigin="anonymous"></script> | 19 | integrity="sha384-RZU/ijkSsFbcmivfdRBQDtwuwVqK7GMOw6IMvKyeWL2K5UAlyp6WonmB8m7Jd0Hn" crossorigin="anonymous"> |
| 16 | <script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/contrib/auto-render.min.js" integrity="sha384-vZTG03m+2yp6N6BNi5iM4rW4oIwk5DfcNdFfxkk9ZWpDriOkXX8voJBFrAO7MpVl" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script> | 20 | <script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/katex.min.js" |
| 21 | integrity="sha384-pK1WpvzWVBQiP0/GjnvRxV4mOb0oxFuyRxJlk6vVw146n3egcN5C925NCP7a7BY8" crossorigin="anonymous"></script> | ||
| 22 | <script defer src="https://cdn.jsdelivr.net/npm/katex@0.13.13/dist/contrib/auto-render.min.js" | ||
| 23 | integrity="sha384-vZTG03m+2yp6N6BNi5iM4rW4oIwk5DfcNdFfxkk9ZWpDriOkXX8voJBFrAO7MpVl" crossorigin="anonymous" | ||
| 24 | onload="renderMathInElement(document.body);"></script> | ||
| 17 | {{ end }} | 25 | {{ end }} |
| 18 | 26 | ||
| 19 | {{ if ne .IsHome true }} | 27 | {{ if ne .IsHome true }} |
| @@ -51,4 +59,4 @@ | |||
| 51 | } | 59 | } |
| 52 | }); | 60 | }); |
| 53 | </script> | 61 | </script> |
| 54 | {{ end }} | 62 | {{ end }} \ No newline at end of file |
diff --git a/themes/simple/layouts/partials/navigation.html b/themes/simple/layouts/partials/navigation.html index ba727c5..a463ade 100755 --- a/themes/simple/layouts/partials/navigation.html +++ b/themes/simple/layouts/partials/navigation.html | |||
| @@ -1,16 +1,18 @@ | |||
| 1 | <div class="container-blog mx-auto px-6 md:p-0"> | 1 | <div class="container-blog mx-auto px-6 md:p-0"> |
| 2 | <header class="flex py-4 mt-4 mb-6 flex-col md:flex-row items-center "> | 2 | <header class="flex py-4 mt-4 mb-8 flex-col md:flex-row items-center "> |
| 3 | <div class="flex-grow mb-2 md:mb-0"> | 3 | <div class="flex-grow mb-2 md:mb-0"> |
| 4 | <a href="/" itemprop="url" class="text-xl font-bold hover:bg-yellow-100">Mitja Felicijan</a> | 4 | <a href="/" itemprop="url" class="text-xl font-semibold hover:bg-yellow-100">Mitja Felicijan</a> |
| 5 | </div> | 5 | </div> |
| 6 | 6 | ||
| 7 | <nav itemscope itemtype="http://schema.org/SiteNavigationElement" class="flex items-center gap-1" role="toolbar"> | 7 | <nav itemscope itemtype="http://schema.org/SiteNavigationElement" class="flex items-center gap-1" role="toolbar"> |
| 8 | <meta itemprop="name" content="Main Menu"> | 8 | <meta itemprop="name" content="Main Menu"> |
| 9 | 9 | ||
| 10 | <a href="https://git.mitjafelicijan.com" target="_blank" rel="noopener nofollow" itemprop="url" class="font-medium px-2 hover:bg-yellow-100">Git</a> | 10 | <a href="https://git.mitjafelicijan.com" target="_blank" rel="noopener nofollow" itemprop="url" |
| 11 | <a href="https://files.mitjafelicijan.com" target="_blank" rel="noopener nofollow" itemprop="url" class="font-medium px-2 hover:bg-yellow-100">Files</a> | 11 | class="font-medium px-2 hover:bg-yellow-100">Git</a> |
| 12 | <a href="https://files.mitjafelicijan.com" target="_blank" rel="noopener nofollow" itemprop="url" | ||
| 13 | class="font-medium px-2 hover:bg-yellow-100">Files</a> | ||
| 12 | <a href="/curriculum-vitae.html" class="font-medium px-2 hover:bg-yellow-100">CV</a> | 14 | <a href="/curriculum-vitae.html" class="font-medium px-2 hover:bg-yellow-100">CV</a> |
| 13 | <a href="/index.xml" itemprop="url" class="font-medium px-2 hover:bg-yellow-100 hidden md:block">RSS</a> | 15 | <a href="/index.xml" itemprop="url" class="font-medium px-2 hover:bg-yellow-100 hidden md:block">RSS</a> |
| 14 | </nav> | 16 | </nav> |
| 15 | </header> | 17 | </header> |
| 16 | </div> | 18 | </div> \ No newline at end of file |
diff --git a/themes/simple/layouts/partials/read-more.html b/themes/simple/layouts/partials/read-more.html index d604bfc..a238017 100644 --- a/themes/simple/layouts/partials/read-more.html +++ b/themes/simple/layouts/partials/read-more.html | |||
| @@ -13,4 +13,4 @@ | |||
| 13 | {{ end }} | 13 | {{ end }} |
| 14 | </ul> | 14 | </ul> |
| 15 | </nav> | 15 | </nav> |
| 16 | </section> | 16 | </section> \ No newline at end of file |
diff --git a/themes/simple/layouts/partials/side-projects.html b/themes/simple/layouts/partials/side-projects.html index 5cca9b6..f675803 100644 --- a/themes/simple/layouts/partials/side-projects.html +++ b/themes/simple/layouts/partials/side-projects.html | |||
| @@ -1,10 +1,33 @@ | |||
| 1 | <section class="mb-12"> | 1 | <section class="mb-12"> |
| 2 | <h2 class="text-2xl font-bold mb-6">Side projects I worked on</h2> | 2 | <h2 class="text-2xl font-bold mb-6">Side projects I worked on</h2> |
| 3 | <ul class="list-disc ml-6"> | 3 | <ul class="list-disc ml-6"> |
| 4 | <li><a href="https://git.mitjafelicijan.com/journalctl-proxy.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">journalctl-proxy - Exposes your systemd logs to web via web interface</a></li> | 4 | <li> |
| 5 | <li><a href="https://git.mitjafelicijan.com/redis-marshal.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">redis-marshal - Lightweight Redis data exploration tool</a></li> | 5 | <a href="https://git.mitjafelicijan.com/cord.h.git/" target="_blank" rel="noopener nofollow" |
| 6 | <li><a href="https://git.mitjafelicijan.com/dna-encoding.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">dna-encoding - Tools for encoding files to DNA sequence</a></li> | 6 | class="hover:bg-yellow-100">cord.h - Small C library for handling strings</a> |
| 7 | <li><a href="https://git.mitjafelicijan.com/vertex.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">vertex - Create mock API's and add basic logic to simplify prototyping</a></li> | 7 | </li> |
| 8 | <li><a href="https://git.mitjafelicijan.com/scarecrow.git/" target="_blank" rel="noopener nofollow" class="hover:bg-yellow-100">scarecrow - Minimal configuration reverse proxy</a></li> | 8 | <li> |
| 9 | <a href="https://git.mitjafelicijan.com/mprogress.git/" target="_blank" rel="noopener nofollow" | ||
| 10 | class="hover:bg-yellow-100">mprogress - Tiny utility that displays progress bar in terminal</a> | ||
| 11 | </li> | ||
| 12 | <li> | ||
| 13 | <a href="https://git.mitjafelicijan.com/journalctl-proxy.git/" target="_blank" rel="noopener nofollow" | ||
| 14 | class="hover:bg-yellow-100">journalctl-proxy - Exposes your systemd logs to web via web interface</a> | ||
| 15 | </li> | ||
| 16 | <li> | ||
| 17 | <a href="https://git.mitjafelicijan.com/redis-marshal.git/" target="_blank" rel="noopener nofollow" | ||
| 18 | class="hover:bg-yellow-100">redis-marshal - Lightweight Redis data exploration tool</a> | ||
| 19 | </li> | ||
| 20 | <li> | ||
| 21 | <a href="https://git.mitjafelicijan.com/dna-encoding.git/" target="_blank" rel="noopener nofollow" | ||
| 22 | class="hover:bg-yellow-100">dna-encoding - Tools for encoding files to DNA sequence</a> | ||
| 23 | </li> | ||
| 24 | <li> | ||
| 25 | <a href="https://git.mitjafelicijan.com/vertex.git/" target="_blank" rel="noopener nofollow" | ||
| 26 | class="hover:bg-yellow-100">vertex - Create mock API's and add basic logic to simplify prototyping</a> | ||
| 27 | </li> | ||
| 28 | <li> | ||
| 29 | <a href="https://git.mitjafelicijan.com/scarecrow.git/" target="_blank" rel="noopener nofollow" | ||
| 30 | class="hover:bg-yellow-100">scarecrow - Minimal configuration reverse proxy</a> | ||
| 31 | </li> | ||
| 9 | </ul> | 32 | </ul> |
| 10 | </section> | 33 | </section> \ No newline at end of file |
diff --git a/themes/simple/openring/openring.html b/themes/simple/openring/openring.html index bd9ac55..8bc92f5 100755 --- a/themes/simple/openring/openring.html +++ b/themes/simple/openring/openring.html | |||
| @@ -7,7 +7,8 @@ | |||
| 7 | <a href="{{ .Link }}" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">{{ .Title }}</a> | 7 | <a href="{{ .Link }}" target="_blank" rel="noopener" class="font-medium mb-1 hover:bg-yellow-100">{{ .Title }}</a> |
| 8 | <p class="mb-1 text-sm text-gray-600">{{ .Summary }}</p> | 8 | <p class="mb-1 text-sm text-gray-600">{{ .Summary }}</p> |
| 9 | <div class="text-gray-500 font-medium text-xs"> | 9 | <div class="text-gray-500 font-medium text-xs"> |
| 10 | Via <a href="{{ .SourceLink }}" class="underline">{{ .SourceTitle }}</a> on {{ .Date | datef "January 2, 2006" }} | 10 | Via <a href="{{ .SourceLink }}" class="underline">{{ .SourceTitle }}</a> |
| 11 | on {{ .Date | datef "January 2, 2006" }} | ||
| 11 | </div> | 12 | </div> |
| 12 | </article> | 13 | </article> |
| 13 | {{ end }} | 14 | {{ end }} |
| @@ -16,4 +17,4 @@ | |||
| 16 | <p class="text-sm text-gray-500"> | 17 | <p class="text-sm text-gray-500"> |
| 17 | <a href="https://git.sr.ht/~sircmpwn/openring" class="no-underline hover:underline">Generated with openring.</a> | 18 | <a href="https://git.sr.ht/~sircmpwn/openring" class="no-underline hover:underline">Generated with openring.</a> |
| 18 | </p> | 19 | </p> |
| 19 | </section> | 20 | </section> \ No newline at end of file |
diff --git a/themes/simple/static/css/tailwind.css b/themes/simple/static/css/tailwind.css index edbb0ab..05b6492 100644 --- a/themes/simple/static/css/tailwind.css +++ b/themes/simple/static/css/tailwind.css | |||
| @@ -20,7 +20,7 @@ | |||
| 20 | 20 | ||
| 21 | /* Headings */ | 21 | /* Headings */ |
| 22 | article.single h2 { | 22 | article.single h2 { |
| 23 | @apply text-2xl font-bold mb-4 mt-8; | 23 | @apply text-2xl font-bold mb-8 mt-8; |
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | article.single h3 { | 26 | article.single h3 { |
| @@ -38,11 +38,11 @@ article.single p { | |||
| 38 | 38 | ||
| 39 | /* Links */ | 39 | /* Links */ |
| 40 | article.single a { | 40 | article.single a { |
| 41 | @apply underline hover:bg-yellow-100; | 41 | @apply underline-offset-2 decoration-1 decoration-wavy underline hover:bg-yellow-100; |
| 42 | } | 42 | } |
| 43 | 43 | ||
| 44 | /* Blockquote */ | 44 | /* Blockquote */ |
| 45 | article.single blockquote { | 45 | article.single .content blockquote { |
| 46 | background-image: url('/general/alert-light.svg'); | 46 | background-image: url('/general/alert-light.svg'); |
| 47 | background-size: 30px 30px; | 47 | background-size: 30px 30px; |
| 48 | background-repeat: no-repeat; | 48 | background-repeat: no-repeat; |
| @@ -50,6 +50,10 @@ article.single blockquote { | |||
| 50 | @apply pl-12 my-8; | 50 | @apply pl-12 my-8; |
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | article.single .content blockquote p { | ||
| 54 | @apply mb-2; | ||
| 55 | } | ||
| 56 | |||
| 53 | /* Media: Images, audio, video */ | 57 | /* Media: Images, audio, video */ |
| 54 | article.single img { | 58 | article.single img { |
| 55 | @apply rounded w-full !bg-gray-50 my-8; | 59 | @apply rounded w-full !bg-gray-50 my-8; |
| @@ -90,13 +94,21 @@ article.single table th { | |||
| 90 | } | 94 | } |
| 91 | 95 | ||
| 92 | /* Unordered list */ | 96 | /* Unordered list */ |
| 93 | article.single ul { | 97 | article.single .content ul { |
| 94 | @apply list-disc pl-6 md:pl-10 mb-6; | 98 | @apply list-disc pl-6 md:pl-10 mb-6; |
| 95 | } | 99 | } |
| 96 | 100 | ||
| 97 | /* Ordered list */ | 101 | /* Ordered list */ |
| 98 | article.single ol { | 102 | article.single .content ol { |
| 99 | @apply list-decimal pl-8 md:pl-10; | 103 | @apply list-decimal pl-8 md:pl-10 mb-6; |
| 104 | } | ||
| 105 | |||
| 106 | /* Table of contents */ | ||
| 107 | article.single #TableOfContents { | ||
| 108 | @apply mb-10 ml-4 leading-relaxed; | ||
| 109 | } | ||
| 110 | article.single #TableOfContents ul { | ||
| 111 | @apply list-decimal pl-4 md:pl-6; | ||
| 100 | } | 112 | } |
| 101 | 113 | ||
| 102 | /* Katex */ | 114 | /* Katex */ |
| @@ -117,119 +129,3 @@ article.single .ll-iframe::before { | |||
| 117 | article.single .ll-iframe.empty::before { | 129 | article.single .ll-iframe.empty::before { |
| 118 | content: none; | 130 | content: none; |
| 119 | } | 131 | } |
| 120 | |||
| 121 | /* Cactus Comments */ | ||
| 122 | .comments img { | ||
| 123 | max-width: auto !important; | ||
| 124 | max-width: unset !important; | ||
| 125 | max-width: inherit !important; | ||
| 126 | } | ||
| 127 | |||
| 128 | .cactus-container .cactus-editor-textarea { | ||
| 129 | @apply border w-full h-32 px-3 py-2 outline-none rounded mb-2; | ||
| 130 | } | ||
| 131 | |||
| 132 | .cactus-container .cactus-editor-name input { | ||
| 133 | @apply border w-full px-3 py-2 mb-2 outline-none rounded; | ||
| 134 | } | ||
| 135 | |||
| 136 | .cactus-container .cactus-editor-name { | ||
| 137 | @apply mb-1; | ||
| 138 | } | ||
| 139 | |||
| 140 | /* Cactus: Buttons */ | ||
| 141 | .cactus-editor-buttons { | ||
| 142 | @apply flex gap-2; | ||
| 143 | } | ||
| 144 | |||
| 145 | .cactus-container .cactus-button { | ||
| 146 | @apply text-base bg-gray-200 hover:bg-gray-300 font-medium px-6 py-2 rounded; | ||
| 147 | } | ||
| 148 | |||
| 149 | .cactus-container .cactus-editor { | ||
| 150 | @apply mb-10; | ||
| 151 | } | ||
| 152 | |||
| 153 | /* Cactus: Comment List */ | ||
| 154 | .cactus-container .cactus-comments-list { | ||
| 155 | @apply flex flex-col gap-8; | ||
| 156 | } | ||
| 157 | |||
| 158 | .cactus-container .cactus-comment { | ||
| 159 | @apply flex gap-4; | ||
| 160 | } | ||
| 161 | |||
| 162 | .cactus-container .cactus-comment .cactus-comment-avatar img { | ||
| 163 | @apply w-8 h-8 rounded-full; | ||
| 164 | } | ||
| 165 | |||
| 166 | .cactus-container .cactus-comment .cactus-comment-avatar-placeholder { | ||
| 167 | @apply w-8 h-8 rounded-full bg-gray-300; | ||
| 168 | } | ||
| 169 | |||
| 170 | .cactus-container .cactus-comment .cactus-comment-header { | ||
| 171 | @apply flex gap-2 items-center; | ||
| 172 | } | ||
| 173 | |||
| 174 | .cactus-container .cactus-comment .cactus-comment-header .cactus-comment-displayname { | ||
| 175 | @apply font-semibold; | ||
| 176 | } | ||
| 177 | |||
| 178 | .cactus-container .cactus-comment .cactus-comment-header .cactus-comment-time { | ||
| 179 | @apply text-gray-400 text-sm; | ||
| 180 | } | ||
| 181 | |||
| 182 | .cactus-container .cactus-comment .cactus-message-text code { | ||
| 183 | @apply bg-yellow-100 rounded px-2 py-1 text-xs font-medium; | ||
| 184 | } | ||
| 185 | |||
| 186 | /* Unordered list */ | ||
| 187 | .cactus-container .cactus-comment .cactus-message-text ul { | ||
| 188 | @apply list-disc pl-2 md:pl-6; | ||
| 189 | } | ||
| 190 | |||
| 191 | /* Ordered list */ | ||
| 192 | .cactus-container .cactus-comment .cactus-message-text ol { | ||
| 193 | @apply list-decimal pl-2 md:pl-6; | ||
| 194 | } | ||
| 195 | |||
| 196 | /* Cactus: Login */ | ||
| 197 | .cactus-container .cactus-login-form-wrapper { | ||
| 198 | @apply border mb-6 p-3 relative rounded; | ||
| 199 | } | ||
| 200 | |||
| 201 | .cactus-container .cactus-login-form .cactus-login-close { | ||
| 202 | @apply absolute right-3 top-3 w-4 h-4; | ||
| 203 | } | ||
| 204 | |||
| 205 | .cactus-container .cactus-login-form .cactus-login-title { | ||
| 206 | @apply font-bold mb-4 mt-0 pt-0; | ||
| 207 | } | ||
| 208 | |||
| 209 | /* Cactus: Login with a button */ | ||
| 210 | .cactus-container .cactus-login-form .cactus-login-client { | ||
| 211 | @apply mb-6; | ||
| 212 | } | ||
| 213 | |||
| 214 | .cactus-container .cactus-login-form .cactus-login-client-title { | ||
| 215 | @apply font-semibold mb-2; | ||
| 216 | } | ||
| 217 | |||
| 218 | /* Cactus: Login with credentials */ | ||
| 219 | .cactus-container .cactus-login-form .cactus-login-credentials {} | ||
| 220 | |||
| 221 | .cactus-container .cactus-login-form .cactus-login-credentials-title { | ||
| 222 | @apply font-semibold mb-1; | ||
| 223 | } | ||
| 224 | |||
| 225 | .cactus-container .cactus-login-form .cactus-login-field { | ||
| 226 | @apply flex gap-4 mb-2 items-center; | ||
| 227 | } | ||
| 228 | |||
| 229 | .cactus-container .cactus-login-form .cactus-login-label { | ||
| 230 | @apply w-20; | ||
| 231 | } | ||
| 232 | |||
| 233 | .cactus-container .cactus-login-form input { | ||
| 234 | @apply border px-2 py-1 rounded; | ||
| 235 | } | ||
