Compare commits

..

10 commits

21 changed files with 694 additions and 906 deletions

View file

@ -14,39 +14,40 @@
"format": "prettier --write --plugin-search-dir=. ." "format": "prettier --write --plugin-search-dir=. ."
}, },
"devDependencies": { "devDependencies": {
"@sveltejs/adapter-auto": "1.0.0-next.84", "@sveltejs/adapter-cloudflare": "^1.0.0",
"@sveltejs/kit": "^1.0.0-next.522", "@sveltejs/kit": "^1.0.1",
"@typescript-eslint/eslint-plugin": "^5.40.1", "@typescript-eslint/eslint-plugin": "^5.47.1",
"@typescript-eslint/parser": "^5.40.1", "@typescript-eslint/parser": "^5.47.1",
"autoprefixer": "^10.4.12", "autoprefixer": "^10.4.13",
"browserslist": "^4.21.4", "browserslist": "^4.21.4",
"eslint": "^8.26.0", "eslint": "^8.31.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-svelte3": "^4.0.0", "eslint-plugin-svelte3": "^4.0.0",
"mdi-svelte": "^1.1.2", "mdi-svelte": "^1.1.2",
"mdsvex": "^0.10.6", "mdsvex": "^0.10.6",
"postcss": "^8.4.18", "postcss": "^8.4.20",
"postcss-load-config": "^4.0.1", "postcss-load-config": "^4.0.1",
"postcss-normalize": "^10.0.1", "postcss-normalize": "^10.0.1",
"prettier": "^2.6.2", "prettier": "^2.8.1",
"prettier-plugin-svelte": "^2.8.0", "prettier-plugin-svelte": "^2.9.0",
"rehype-autolink-headings": "^6.1.1", "rehype-autolink-headings": "^6.1.1",
"rehype-slug": "^5.0.1", "rehype-slug": "^5.1.0",
"remark-emoji": "^3.0.2", "remark-emoji": "^3.0.2",
"remark-footnotes": "2.0", "remark-footnotes": "2.0",
"remark-gfm": "^3.0.1", "remark-gfm": "^3.0.1",
"svelte": "^3.52.0", "svelte": "^3.55.0",
"svelte-check": "^2.9.2", "svelte-check": "^3.0.1",
"svelte-preprocess": "^4.10.6", "svelte-preprocess": "^5.0.0",
"tslib": "^2.3.1", "tslib": "^2.4.1",
"typescript": "^4.8.4", "typescript": "^4.9.4",
"vite": "^3.1.8", "vite": "^4.0.3",
"vite-imagetools": "^4.0.11" "vite-imagetools": "^4.0.12"
}, },
"type": "module", "type": "module",
"dependencies": { "dependencies": {
"@fontsource/ubuntu-mono": "^4.5.11", "@fontsource/ubuntu-mono": "^4.5.11",
"@mdi/js": "^7.0.96" "@mdi/js": "^7.1.96",
"imagetools-core": "^3.2.3"
}, },
"browserslist": "last 2 versions" "browserslist": "last 2 versions"
} }

View file

@ -2,29 +2,23 @@
import SEO from '$components/SEO.svelte'; import SEO from '$components/SEO.svelte';
import ListItem from '$components/ListItem.svelte'; import ListItem from '$components/ListItem.svelte';
import Link from '$components/Link.svelte'; import Link from '$components/Link.svelte';
import type { Skill } from '$lib/utils/types';
let _SKILLS = [ let SKILLS = [
{ name: 'Web development (React/Svelte)', started: 2019 }, { name: 'Lightweight virtualisation (LXC, Docker)' },
{ name: 'Scripting and automation (Bash/Python)', started: 2018 }, { name: 'Container orchestration at scale (K8s)' },
{ name: 'Object oriented programming (Java)', started: 2013 }, { name: 'Cloud Computing (AWS, Cloudflare)' },
{ name: 'Lightweight virtualisation (LXC/Docker)', started: 2021 }, { name: 'Web development (mostly frontend with React, Svelte, vanilla)' },
{ name: 'Container orchestration at scale (K8s)', started: 2022 }, { name: 'Scripting and automation (Bash, Python)' },
{ name: 'Cloud Computing (AWS, Cloudflare)', started: 2021 }, { name: 'git and GitOps pipelines' },
{ name: 'git & GitOps', started: 2016 }, { name: 'Linux administration (Debian, Arch)' },
{ name: 'Linux administration (Debian)', started: 2017 }, { name: 'Object oriented programming (Java)' },
]; ];
const SKILLS: Skill[] = _SKILLS.map((skill) => {
const years = new Date().getFullYear() - skill.started;
return { ...skill, years };
});
SKILLS.sort((a, b) => b.years - a.years);
const PROJECTS = [ const PROJECTS = [
{ {
name: 'Lightweight low-latency virtual networking', name: 'Lightweight low-latency virtual networking',
href: '/blog/tumthesis', href: '/blog/tumthesis',
description: 'Evaluate the performance of containers in low-latency networking', description: 'B.Sc. thesis: Evaluate the performance of containers in low-latency networking',
}, },
{ {
name: 'This site', name: 'This site',
@ -32,25 +26,31 @@
description: 'Complete source code for this website', description: 'Complete source code for this website',
}, },
{ {
name: 'Gear Optimizer', name: 'Gear Optimizer (GW2)',
href: 'https://optimizer.discretize.eu', href: 'https://optimizer.discretize.eu',
description: description:
'Helps finding the optimal gear given numerous input paramaters for the MMO Guild Wars 2', 'MMO Guild Wars 2: Outputs the optimal build given numerous input paramaters; 1000 DAUs',
}, },
{ {
name: 'Discretize.eu', name: 'Discretize.eu (GW2)',
href: 'https://discretize.eu', href: 'https://discretize.eu',
description: 'Advanced player guide for the MMO Guild Wars 2', description: 'MMO Guild Wars 2: Advanced player guides; 3000 DAUs',
}, },
{ {
name: 'discretize-ui', name: 'discretize-ui (GW2)',
href: 'https://github.com/discretize/discretize-ui', href: 'https://github.com/discretize/discretize-ui',
description: 'UI library for mirroring tooltips of the MMO Guild Wars 2', description: 'MMO Guild Wars 2: UI library for mirroring in game tooltips with React',
},
{
name: 'Gw2Library (GW2)',
href: 'https://gw2library.princeps.biz/',
description:
'MMO Guild Wars 2: Build library interfacing with the optimizer; CRUD app - NextJS, AWS',
}, },
{ {
name: 'LandLord', name: 'LandLord',
href: 'https://www.spigotmc.org/resources/landlord-2.44398/', href: 'https://www.spigotmc.org/resources/landlord-2.44398/',
description: 'Minecraft plugin for protecting and managing areas', description: 'Minecraft plugin for protecting and managing areas - Java (until 2018)',
}, },
]; ];
</script> </script>
@ -64,17 +64,15 @@
Programming has been a hobby of mine since my teens. Been working on countless projects for Programming has been a hobby of mine since my teens. Been working on countless projects for
various games. For a few years now I am maintaining a small homelab, which got me into DevOps/SRE. various games. For a few years now I am maintaining a small homelab, which got me into DevOps/SRE.
I am a privacy enthusiast and advocate for non-invasive software. Sometimes, I build slick I am a privacy enthusiast and advocate for non-invasive software. Sometimes, I build slick
websites that do not load megabytes of data. Currently I complete my Bachelors degree in computer websites that do not load megabytes of data and follow best-practices. Currently, I am working on
science at my Masters degree in computer science at <Link href="https://www.tum.de/">TUM</Link>.
<Link href="https://www.tum.de/">TUM</Link> and will continue with my Masters.
</p> </p>
<h2>Skills</h2> <h2>Skills</h2>
<ul> <ul>
{#each SKILLS as skill} {#each SKILLS as skill}
<ListItem> <ListItem>
{skill.name} - {skill.years} year{skill.started > 1 ? 's' : ''} {skill.name}
</ListItem> </ListItem>
{/each} {/each}
</ul> </ul>

View file

@ -15,7 +15,7 @@ export const load: PageServerLoad = async () => {
const path = Object.keys(modules)[index]; const path = Object.keys(modules)[index];
const { metadata } = file; const { metadata } = file;
if (!metadata.hidden) posts.push({ ...metadata, href: `blog/${removeExtension(path)}` }); if (!metadata?.hidden) posts.push({ ...metadata, href: `blog/${removeExtension(path)}` });
}); });
posts.sort((a, b) => new Date(b.created).valueOf() - new Date(a.created).valueOf()); posts.sort((a, b) => new Date(b.created).valueOf() - new Date(a.created).valueOf());

View file

@ -0,0 +1,153 @@
---
created: '2023-01-02'
title: 'Generate cover letters with ChatGPT'
description: 'With the help of ChatGPT it is fairly easy to generate custom tailored cover letters for job applications with your own CV'
keywords:
- ChatGPT
- applications
- cover letters
- CV
---
Something I hate is dealing with useless, repetitive tasks that serve no real purpose except to please societies customs. Usually, I opt-out of them by not playing the game, but sometimes not following the norm can seriously inhibt the chances of success. Other times, tasks like these can be automated with a little bit of effort.
Cover letters for job applications are such a thing. Luckily, with the rise of capable machine learning models like ChatGPT, we can automate this particular task. Now we can generate custom tailored cover letters for job applications with our own CV. Thinking about it, I should probably not publish this on my website, but who am I to pretend technology is not advancing?
It boils down to the following steps:
- Copy paste your CV into the text field
- Copy paste the job description into the text field
- Instruct to write a cover letter
The model will then generate a cover letter that is tailored to your CV and the job description. The generated cover letter is not perfect, but it is a good starting point for you to edit and improve. You can also use it as a template for future applications. Something you really need to look out for is factual errors. During countless hours of experimenting with it, I found that the model is often fantasizing. Sometimes, it makes things up and sounds very confident. You better check if you apply to MedTech and it writes something about a leading firm in low-latency HFT.
## A short example
I dont wanna get into any legal trouble, so I left out the job description. But here is my CV and the generated cover letter. At first, I tried to copy my CV in Latex, but the resulting cover letter was worse than with a copy-pasted version of my CV.
My prompt:
```
I want you to generate a cover letter based on the following data:
job description:
\`\`\`
copy-paste job description here
\`\`\`
my cv:
\`\`\`
Work
9/22 now Working Student DevOps, xxxxxxxxxxxxxxxxxxxxx
○Designing, implementing high-availability infrastructure with Kubernetes on AWS
○Setting up a monitoring and observability stack with Prometheus, Grafana, Loki
○Developing custom Netbox plugins for network automation with Python and Ansible
03/16 05/21 Accounting, xxxxxxxxx
Education
10/18 04/23 B. Sc. Informatics, Technical University Munich
Thesis: Lightweight low-latency virtual networking, graded 1.0
Final expected grade: xxx
10/17 10/18 B. Sc. Business Informatics, Technical University Munich
2 semesters, incomplete
09 05/17 Abitur, xxxxxxxxxxxxxxxxxxxxx
Focus on computer science and economy
Final grade: xxx
Skills
Linux daily driver, administration, virtualization (KVM, OS-level)
Networking in depth knowledge of the TCP/IP stack focused on networking during B.Sc.
Tools git, LXC, Docker, Ansible, Jenkins, Kubernetes, AWS
Prog. Languages JavaScript, Java, Python, Bash, C, SQL, Rust
Languages German (native), English (C1), Chinese (A1), Swedish (A1)
Projects
04/22 08/22 Thesis: Lightweight low-latency virtual networking, graded 1.0
○Evaluate viability of containers for low-latency networking
○Integration of LXC into the chairs infrastructure; orchestration service (pos), timestamping
setup (MoonGen), various Python and Bash scripts (HVNet)
○Results: LXC performs identical compared to KVM, but is less isolated
04/21 now Gear Optimizer, 1000 daily unique users, https://optimizer.discretize.eu/
○Guild Wars 2 (video game) damage simulator: helps players to optimize their characters
for highly configurable scenarios. Computation runs on the client side in JS.
○Algorithm for lossless compression of large state objects into URL-safe strings
○Tech stack (SPA): Vite, React, Redux, Material-UI, i18n, Emotion, serverless (Cloudflare)
○Future: migrate computation core to multithreaded WebAssembly with Rust
Hobbies and interests
○reading books ○playing the piano
○lightweight, efficient software ○maintaining my homelab
\`\`\`
Please generate a cover letter with references to my CV and the job description.
```
The result is not too shabby. There are a couple mistakes, for example:
- I am a native german speaker
- Famililarity with network topologies sounds odd
- bash, docker in lower case
- basic programming skills sounds weak; nowhere did I mention "basic"
```
Dear [Hiring Manager],
I am writing to express my interest in the IT Infrastructure Lead position at xxxxxxx. As a recent
graduate with a degree in Computer Science and practical experience in Linux systems, I believe I have
the skills and experience needed to excel in this role.
In my current position as a Working Student DevOps at TV1 GmbH, I have gained experience in designing
and implementing high-availability infrastructure using Kubernetes on AWS, as well as setting up a
monitoring and observability stack with Prometheus, Grafana, and Loki. Additionally, I have developed
custom Netbox plugins for network automation using Python and Ansible.
I am confident that my strong communication skills and familiarity with software configuration tools
like Ansible, as well as my knowledge of network technology and topologies, will make me a valuable
addition to the xxxxxxx team. I am excited about the opportunity to work closely with different
departments to support their IT needs and to help improve the infrastructure to support future growth.
I am fluent in English and have a basic understanding of German. I also have strong awareness of IT
security principles and am comfortable working with git, bash, docker, and basic programming skills
in Python.
I am excited about the opportunity to work at xxxxx and become part of the team working on such
a cool mission - to deliver tools to better cope with natural disasters and mitigate climate change.
I am drawn to the down-to-earth yet high-caliber work environment at xxxxxxxx and the opportunity
to grow both professionally and personally.
I would be delighted to discuss my qualifications further and how I can contribute to the success
of xxxxxxx. Please find attached my CV for your review. Thank you for considering my application.
I look forward to the opportunity to contribute to the success of xxxx.
Sincerely,
[Your Name]
```
Overall, it is a great start! It includes just the right amount of boot licking, is not too long, highlights my most important skills and especially important, references the job description!
Browsing online for a while, I found an [article](https://www.businessinsider.com/chatgpt-job-applications-hiring-managers-job-interview-candidate-2022-12) about HR people giving feedback on AI generated cover letter. Essentially, the remarked that AI letters are too dry and informal. So I asked GPT-3 to generate a more personal letter. Unfortunately, there is not much difference.
I guess, for now its best to use GPT-3 to generate a template and manually improve the result.
## Going further...
This is all fair and nice, but logging in to the OpenAI website and dealing with captchas every day is a pain. Of course we can automate it further ...
Keep in mind, that the GPT-3 model, which is used for ChatGPT does not have an API yet. This uses text-davinci-003, a similar model. There is also cost involved with using this model.
1. Generate an API key
2. Send an API request like this:
```bash
curl https://api.openai.com/v1/completions \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer sk-TOKEN" \
-d '{
"model": "text-davinci-003",
"prompt": "my cool prompt",
"max_tokens": 4000,
"temperature": 0.5
}'
```
3. Adjust the temperature:
> What sampling temperature to use. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer.
It shouldnt be hard to write a little script for this. If we are really funky, we can provide a Latex template to insert the template into to automate the entire process. All we need to do then is copy paste the Job description, upload CV.pdf and CoverLetter.pdf and send (after jumping through 5 hoops with shitty registration portals of course).

View file

@ -0,0 +1,59 @@
---
created: '2023-03-12'
title: '[Workaround] High idle power consumption with AMD GPUs'
description: There is a bug with AMD gpus on Linux that causes the memory to run at full speed even when the GPU is idle for certain refresh rates and resolutions. This causes high idle power consumption. This post explains how to fix it.
keywords:
- AMD
- amdgpu
- gpu
- idle power
- power consumption
- memory frequency
- memory scaling
- memory clock
- memory speed
- memory
- linux
- linux kernel
- kernel
hidden: false
---
<script>
import hz120 from "./images/_120hz.png?default"
import hz144low from "./images/_144hzlow.png?default"
import Image from "$components/Image.svelte"
</script>
For many years, AMD GPUs have had a bug that causes the memory to run at full speed even when the GPU is idle for certain refresh rates and resolutions. For example, I am running a 34' UWQHD 3440x1440 monitor with 144Hz refresh rate. My GPU is a 6700 XT with 16GB of VRAM. When I set the resolution to 3440x1440 and the refresh rate to 144Hz, the memory frequency is stuck at 1000 MHz, or as Windows would report it 2000 Mhz. The high memory frequency consumes about 30 W of power - not doing anything at all.
<Image meta={hz120} alt="High power draw and high mem frequency"/>
This bug apparently existed on Windows as well, but was fixed some time in 2021. There were some tries to fix the issue on Linux in the past, but obviously nothing worked - as I found out now running the latest kernel 6.2.
As a non-feasible workaround, you could lower the refresh rate to 50Hz or 60Hz. This would reduce the memory frequency and therefore also the power draw. However, nobody enjoys to watch their mouse stutter at 50Hz when you spent money on a 1440Hz monitor.
Some interesting links to read up on the topic:
- https://gitlab.freedesktop.org/drm/amd/-/issues/1403
- https://gitlab.freedesktop.org/drm/amd/-/issues/1709
## Workaround
A user in a [Gitlab issue](https://gitlab.freedesktop.org/drm/amd/-/issues/1655) reported that a different xrandr profile with different timings would fix the issue. I can confirm that it works for me as well. However, a small downside is that infrequenctly - every few minutes or so a small flicker occurs. I'll test this setup for a bit and figure out if I'd rather have high power draw or an occasional flicker.
```bash
#!/bin/sh
xrandr --newmode "3440x1440_143.92" 891.4 3440 3536 3600 3920 1440 1446 1466 1580 +hsync -vsync
xrandr --addmode DisplayPort-0 3440x1440_143.92
xrandr --output DisplayPort-0 --mode 3440x1440_143.92
```
I added the script to my i3 config so that it is executed once I sign in.
The power draw is now as expected at around 8W. The memory downclocks to 96Mhz. Whenever I move my mouse I can observe a rise in GPU freqency and power draw to around 12W. This is much better.
This might not seem like a lot, but in situations like this I have to think about how many GPUs were sold globally and are affected by this bug. It's is not an insignificant amount of power that is wasted on a global scale.
<Image meta={hz144low} alt="High power draw and high mem frequency"/>

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,52 @@
---
created: '2023-02-04'
title: You don't need an AIO
description: AIOs are overrated tech that's recommended too frequently without considering the downsides
keywords:
- Hardware
- AIO
- cooling
- CPU cooler
---
Recently, I have been browsing hardware forums to get in touch with the current state of computer hardware again. I am in the process of upgrading my 6-year-old rig. Up until yesterday, I had a Corsair AIO (All in one) CPU cooler with a 280mm radiator cooling my heavily overclocked CPU. Unfortunately, this AIO is not supported by Liquidctl, and the other legacy software for controlling it no longer works. So I was stuck with a piece of working hardware that I could no longer configure on my operating system of choice. I ended up buying a nice Noctua CPU cooler and ever since my PC is more enjoyable to use in every aspect. Let's get into the details, of why I think AIOs are (for most people) a bad pick.
(this is not a Noctua-sponsored post)
## Reliability
An AIO only lasts 5-7 years. The manufacturers sometimes grant 5 years of warranty, but realistically, people recommend switching them out at some point. The fluid inside might evaporate over time and it'll reach a point where there is not enough fluid to properly cool your CPU. I did not notice this, but the fact, that my AIO already was 6 years old and marked as EOL by the manufacturer made me jumpy.
In contrast to that, a good air cooler has no expiry date. Good fan manufacturers test their products over years to ensure good reliability. A couple of days ago I sold a 10-year-old Thermalright cooler, the 140mm fan was still spinning like on day 1.
## Waste
Replacing a key component like a CPU cooler every 5-7 years leads to a lot of extra waste. Especially considering that parts of an AIO are typically not reusable. The entire device has to be switched out. How many AIOs does planet earth have left?
A good air cooler has no expiry date.
## Energy consumption
Only after I removed the AIO and replaced it with 2x 140mm fans and a Noctua D12L I realized how much power the AIO pulled. My idle power consumption dropped by about 15 Watts! At 5hrs / day with 40 €cents per kWh, this is about 10 € extra per year for cooling your CPU. Is that worth it?
## Performance
A good air cooler provides performance just as well as an AIO. Countless reviews support this statement.
## KISS
Keep it simple, stupid. An AIO consists of a lot of moving parts that can break: there is the pump, fluid, pipes, pipe connectors, radiator, fans, a USB header connection, and power connections. Meanwhile, an air cooler consists of: a fan with a 4-pin PWM-controlled connector and a heatsink without anything flowing through, so nothing that can get clogged up or break.
Why would I voluntarily pick a solution that is so much more complicated to understand, where there are so many more components that can break?
## Silence
The fans of my H110i AIO were not particularly silent. They produced a lot of noise even on the "silent" preset. Sure, I could make the AIO silent if I installed good fans on it, but let's be real: I paid 140€ for this device and then I should drop another 50€ on silent fans? What do I do with the shitty bundled fans? Throw them away? Even more garbage?
Maybe this is a fault with this particular AIO, but regardless: a Noctua CPU cooler will always be quiet. My PC is now so silent, that when I turned it on today I got startled and thought it wasn't on. So I force-killed my PC and turned it on again until I realized it wasn't broken, but so silent I didn't hear it even while sitting right next to it.
## Price
Sure, a Noctua fan costs 80-120 €, a decent chunk of money, but an AIO is not much difference in pricing, except that you have all those downsides. I'd rather pay this amount of money for an air cooler, that I can use for years, uses less energy, is more silent, probably won't break, and provides the same performance.
**So, the next time you want to buy an AIO, please think twice.**

View file

@ -24,7 +24,6 @@ Summary of my Bachelor's thesis:
([Website](https://www.net.in.tum.de/homepage/)) ([Website](https://www.net.in.tum.de/homepage/))
- Graded: 1.0 (best possible grade) - Graded: 1.0 (best possible grade)
- Time allotted: about 30h / week for about 16-20 weeks - Time allotted: about 30h / week for about 16-20 weeks
- Download: [thesis.pdf](/files/thesis.pdf) - [final_talk.pdf](/files/final_talk.pdf)
## Finding a topic (1-2 months) ## Finding a topic (1-2 months)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 445 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 601 B

After

Width:  |  Height:  |  Size: 1.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Before After
Before After

Binary file not shown.

Binary file not shown.

View file

@ -1,4 +1,4 @@
import adapter from '@sveltejs/adapter-auto'; import adapter from '@sveltejs/adapter-cloudflare';
import preprocess from 'svelte-preprocess'; import preprocess from 'svelte-preprocess';
import autoprefixer from 'autoprefixer'; import autoprefixer from 'autoprefixer';
import cssNormalizer from 'postcss-normalize'; import cssNormalizer from 'postcss-normalize';

View file

@ -1,24 +0,0 @@
// vite.config.js
import { sveltekit } from "file:///home/alex/Repositories/daichendt.one/node_modules/@sveltejs/kit/src/exports/vite/index.js";
import { imagetools } from "file:///home/alex/Repositories/daichendt.one/node_modules/vite-imagetools/dist/index.mjs";
var config = {
plugins: [
sveltekit(),
imagetools({
defaultDirectives: (id) => {
if (id.searchParams.has("default"))
return new URLSearchParams({
format: "avif;webpc",
width: "360;720;1280;1920",
metadata: ""
});
return new URLSearchParams();
}
})
]
};
var vite_config_default = config;
export {
vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvaG9tZS9hbGV4L1JlcG9zaXRvcmllcy9kYWljaGVuZHQub25lXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvaG9tZS9hbGV4L1JlcG9zaXRvcmllcy9kYWljaGVuZHQub25lL3ZpdGUuY29uZmlnLmpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9ob21lL2FsZXgvUmVwb3NpdG9yaWVzL2RhaWNoZW5kdC5vbmUvdml0ZS5jb25maWcuanNcIjtpbXBvcnQgeyBzdmVsdGVraXQgfSBmcm9tICdAc3ZlbHRlanMva2l0L3ZpdGUnO1xuaW1wb3J0IHsgaW1hZ2V0b29scyB9IGZyb20gJ3ZpdGUtaW1hZ2V0b29scyc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCd2aXRlJykuVXNlckNvbmZpZ30gKi9cbmNvbnN0IGNvbmZpZyA9IHtcblx0cGx1Z2luczogW1xuXHRcdHN2ZWx0ZWtpdCgpLFxuXHRcdGltYWdldG9vbHMoe1xuXHRcdFx0ZGVmYXVsdERpcmVjdGl2ZXM6IChpZCkgPT4ge1xuXHRcdFx0XHRpZiAoaWQuc2VhcmNoUGFyYW1zLmhhcygnZGVmYXVsdCcpKVxuXHRcdFx0XHRcdHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcblx0XHRcdFx0XHRcdGZvcm1hdDogJ2F2aWY7d2VicGMnLFxuXHRcdFx0XHRcdFx0d2lkdGg6ICczNjA7NzIwOzEyODA7MTkyMCcsXG5cdFx0XHRcdFx0XHRtZXRhZGF0YTogJycsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cdFx0XHR9LFxuXHRcdH0pLFxuXHRdLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29uZmlnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFpUyxTQUFTLGlCQUFpQjtBQUMzVCxTQUFTLGtCQUFrQjtBQUczQixJQUFNLFNBQVM7QUFBQSxFQUNkLFNBQVM7QUFBQSxJQUNSLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxNQUNWLG1CQUFtQixDQUFDLE9BQU87QUFDMUIsWUFBSSxHQUFHLGFBQWEsSUFBSSxTQUFTO0FBQ2hDLGlCQUFPLElBQUksZ0JBQWdCO0FBQUEsWUFDMUIsUUFBUTtBQUFBLFlBQ1IsT0FBTztBQUFBLFlBQ1AsVUFBVTtBQUFBLFVBQ1gsQ0FBQztBQUNGLGVBQU8sSUFBSSxnQkFBZ0I7QUFBQSxNQUM1QjtBQUFBLElBQ0QsQ0FBQztBQUFBLEVBQ0Y7QUFDRDtBQUVBLElBQU8sc0JBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==

1216
yarn.lock

File diff suppressed because it is too large Load diff