forked from blek/world
1
0
Fork 0

Compare commits

..

12 Commits
main ... main

Author SHA1 Message Date
b1ek 4fc270c09d
add new key 2024-09-03 12:53:28 +10:00
b1ek 4bf96e0691
add guide on how to download music from youtube 2024-08-22 17:13:59 +10:00
b1ek f34e5cbc21
add airline blankets post 2024-08-17 14:41:44 +10:00
b1ek c5f3be31aa
add unadded image 2024-04-15 13:16:45 +10:00
b1ek cb725da974
add a link to hey 2024-04-13 11:15:46 +10:00
b1ek b9df07d74d
add article about DDG 2024-04-11 23:21:08 +10:00
b1ek 0b1e5c0da2
fix the compile error
this time, i fucking compiled it on my local machine. lets see if it works
2024-03-08 17:08:49 +10:00
b1ek 870f8239cd
fix compile error 2024-03-08 17:07:17 +10:00
b1ek 79e6d8bfd0
add the year 2024-03-08 17:06:08 +10:00
b1ek d3a85b75d7
add 8th march post 2024-03-08 17:04:48 +10:00
b1ek 1c6395bcfd
Revert "adapt the content for display"
This reverts commit 296c86dec0.
2024-03-03 19:48:47 +10:00
b1ek 4e85a9967d
Revert "add readme"
This reverts commit 066142d658.
2024-03-03 19:48:21 +10:00
26 changed files with 399 additions and 105 deletions

View File

@ -1,51 +0,0 @@
<p align='center'>
<img src='banner.webp'>
</p>
<h1 align='center'>
otherworld - a zola theme
</h1>
you can see the demo [here](https://world.blek.codes)
## how to use
### prerequisities
1. a linux system. you can use windows for that, but this guide centers itself on linux based systems.
2. you need to have these programs installed: `git` and `zola`
3. some creativity, html and scss skills
### steps
#### 1. clone the repo
(aka download the theme)
lets assume that your website's directory name in `daftpunk`. it will appear in commands a few times, and you should replace it with your website's name.
```sh
$ git clone git@git.blek.codes:blek/otherworld.git daftpunk
$ cd daftpunk
```
#### 2. open an another terminal
in the same directory, run
```sh
$ zola serve
```
#### 3. edit files in the `content` directory...
...as per [zola docs](https://www.getzola.org/documentation/getting-started/overview)
## how to disable loading
go to `content/index.md`, and in the `+++` blocks, set `extra.noload` to `true`.
like this:
```toml
+++
title = "Welcome"
[extra]
noload = true
+++
```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

View File

@ -12,7 +12,7 @@ build_search_index = false
[markdown] [markdown]
# Whether to do syntax highlighting # Whether to do syntax highlighting
# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola # Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
highlight_code = false highlight_code = true
[extra] [extra]
# Put all your custom variables here # Put all your custom variables here

View File

@ -2,21 +2,57 @@
title = "Welcome" title = "Welcome"
+++ +++
## Welcome to the otherworld! ## Welcome to my world!
It does look good, doesn't it? C'mon, it really is Hello there! My name is Alice and i am a fullstack web dev. I like to start a lot of side projects, but finish only a few of them.
## Long text to make it look like this page has content ## My contacts
mroreowrmewormeowrmoewrmoewmroweemrweoermooewower :3 You can send me an email (preferred): [me@blek.codes](mailto:me@blek.codes)
I can also be reached via [telegram](https://t.me/bleki42).
Crazy? I used to be crazy. They locked me in a room. <div class='js-only'>
A rubber room. A rubber room with rats. And rats make My time in my timezone is: <span id='time'></span>
me crazy. Crazy? I used to be crazy. They locked me <script>
in a room. A rubber room. A rubber room with rats. And (async () => {
rats make me crazy. Crazy? Yes, i am crazy UwU function update() {
document.getElementById('time').innerText = new Date(
new Date().toLocaleString('en-US', { timeZone: 'Asia/Vladivostok' })
).toLocaleString('en-US', {
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
hourCycle: 'h24'
});
setTimeout(update, 1000);
}
update()
})()
</script>
</div>
I also made a lil badge to show if i am currently online. Cool, huh?
<img src='https://online.blek.codes/gif' height='31px' width='88px' alt='A badge showing if i am online or not. Sorry, the only way to know it is to load the gif. It would be all greeny if i am online' />
<a href='/online-badge'>how does it work?</a>
<div class='js-only'>
## Metrics
This website collects anonymous metrics via [umami](https://umami.is). Anonymous means there is no identity attached to those metrics.
Also you can view it [here](https://umami.blek.codes/share/ucLh7hS5xcXCpklV/world)
</div>
## Projects
You can find the list of my projects [here](/projects).
## Blog ## Blog
See [here](/blog) See [here](/blog)
## Webrings!!
I like webrings.
<a href="https://webring.haaien.xyz/#1" target="_blank" rel="noopener"><img src="/hairing.gif" alt="A button saying haaien webring" height='31px' width='88px'/></a>
<a href="https://acingtheinternet.netlify.app" target="_blank" rel="noopener"><img src="/acenow.gif" alt="A button saying asexuals now" height='31px' width='88px'></a>
## Facebook & social media ## Facebook & social media
Reject social media. It's evil Reject social media. It's evil
@ -24,7 +60,11 @@ Reject social media. It's evil
--- ---
### World's thoughts
Did you ever wonder what a [caterpillar](/caterpillar) looks like?
### Links ### Links
- [git repo of the theme](https://git.blek.codes/blek/otherworld) - [a funny techy podcast](https://www.youtube.com/@tsarp)

27
content/blog/aired.md Normal file
View File

@ -0,0 +1,27 @@
+++
template = 'custom/blog-post.html'
title = 'It aired!'
description = 'yaaay'
date = '2024-01-14'
slug = 'it-aired'
year = 2024
month = 1
day = 14
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
The new website is aired at [blek.codes](https://blek.codes)! Yaaay
FYI, almost everything I make is open source (with this website being no exception), so heres the [git repo](https://git.blek.codes/blek/world.git) for yall in case you wanna see whats under the hood.
## What's new?
1. A funny vaporwave-like redesign
2. The website is fully static - you can even download it via smth like `wget -r`
3. Its fully NO-JS!! I mean, the previous versions were NOJS as well, but still its pretty awesome.
Also there won't be any guestbook for a while since as i mentioned before, this stack is fully static - basically just a bunch of .HTML files.

View File

@ -0,0 +1,19 @@
+++
template = 'custom/blog-post.html'
title = 'airline blankets are so ew'
description = 'they have a lot of hairs in them'
date = '2024-08-17'
slug = 'airline-blankets'
year = 2024
month = 8
day = 17
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
i flew just a lil bit in my life, and only on one airline so i probably shouldn't be all pissy at all airlines. but seriously, why can't they just wash them properly? i asked for a blanket at a plane and it had hairs and stuff on it.
like i paid 800$ for a single ticket. is that too much effort to wash them every time they fly? i also heard someone asking for a blanket in the end of the flight and the attendant said they didnt have any left. so, there it is again.

View File

@ -0,0 +1,63 @@
+++
template = 'custom/blog-post.html'
title = 'duckduckgo ai chat thing'
description = 'its kinda cool'
date = '2024-04-11'
slug = 'duckduckgo-ai-chat'
year = 2024
month = 4
day = 11
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
so, a few days ago i've noticed that duckduckgo has this weird new "ai chat" option:
![screenshot of duckduckgo page with a red arrow pointing to the "Chat" button](/blog-image/chat-btn.png)
it allows you to select two models: claude 1.2 and chatgpt 3.5. the last one is widely known, however you can find some info on claude [here](https://www.anthropic.com/news/releasing-claude-instant-1-2)
as i've always wondered just how real their claims are that your identity is never attached to the models, i've decided to research into the API.
## chat APIs
| Disclaimer: The following section is of educational purposes only. Please do not scrape DuckDuckGo's APIs, as it would only hurt the company which honestly cares about your privacy. |
| --- |
obviously the first thing i wanted to do see if there is a public chat API. i wasn't suprised when i couldn't find info on any of the public duckduckgo APIs(probably because there isn't any), other than [this stackoverflow answer](https://stackoverflow.com/questions/29346239/duckduckgo-api-how-to-get-more-results)
however i've investigated a bit and turns out that client API is not that complicated as i thought.
now, first of all you need yo obtain the API token via `GET https://duckduckgo.com/duckchat/v1/status` with a header `x-vqd-accept: 1`. the api token will be in the `x-vqd-4` header. it seems a bit tricky to get the right token without it throwing a `ERR_INVALID_VQD` error later, so its best to copy the request as cURL from your browser.
it is quite weird actually that it seems to be accepting only genuine browser-generated headers. however they contain little to no identifying data.
after you got the api key, send a `POST https://duckduckgo.com/duckchat/v1/chat` with a header `x-vqd-4: the-vqd-header-from-previous-request`.
the payload seems to be of this TS type and encoded via JSON:
```ts
type ChatPayload {
messages: { content: string, role: 'user' }[],
model: 'claude-instant-1.2' | 'gpt-3.5-turbo-0125'
}
```
then the API will return the response word-by-word in a good ol' streamed http response in chunks like this:
```json
\n
data: {"role":"assistant","message":".","created":1712840811713,"id":"compl_8pC9nVX8QJlN92jUtcJR8TgB","action":"success","model":"claude-instant-1.2"}
```
also the `/duckchat/v1/chat` request gives you the new VQD which you gotta use for the future requests.
i guess someone could fashion a cli program to read data from that API and print it out in the console.
upd a few days later: i did. [heres the link](https://git.blek.codes/blek/hey)
## the verdict
i think its safe to say that no identity data is collected via the chat APIs, other than your IP address, which by itself is not usually enough to identify a user, especially if you're sitting on a public network.
also if someone from the team who made the API reads this, please tell me if i missed some points, and what the hell does VQD even mean.

View File

@ -0,0 +1,21 @@
+++
template = 'custom/blog-post.html'
title = 'Lbh ner fhpu n areq yznb'
description = 'ebgguvegrra vf fb shaal'
date = '2024-02-08'
slug = 'ebgguvegrra'
year = 2024
month = 2
day = 8
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
# v unq fbzr cnapnxrf gbqnl
lbhxabj, gurbarfjvguvprpernzbagurz.
vzwhfgsbbyvatnebhaqgb znxrcrbcyrguvaxvgffbzrjrveqnffenaqbz yrggref :3 fblrnuunir shayznb
fb huz qb lbh xabj jung qbrf vqx, yl naq ggly zrna?

View File

@ -0,0 +1,33 @@
+++
template = 'custom/blog-post.html'
title = 'youll be eclair, ill be life'
description = 'a few phylosophical thoughts'
date = '2024-01-28'
slug = 'eclair-life'
year = 2024
month = 1
day = 28
lang = 'en'
# [taxonomies]
# tags = ["showerthoughts"]
[extra]
author = 'b1ek <me@blek.codes>'
+++
<p align='center'>
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/gNxFGHsEMUI?si=cloIuWNCp__637NV" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</p>
i mean, it is such a simple fucking truth coming from a kids tv show.
it took me so long to realise that you don't moan about problems: you kick them in the butt, as hard as you can.
afterall, what is stopping you? like, imagine if you want to get the best job ever, but you don't think that you will pass the test so you dont apply at all.
but the thing is, nothing actually stopped you from applying. like, you may get rejected, and so what? you may have like a 0.1% chance of actually getting the job, you might just as well get it. as long as the chance exists, no matter how small it is or how small it may seem, the job is worth applying for.
my point is you can easily waste all of your life lurking because you are too afraid of getting rejected or whatever. the question is, do you want to waste your life being afraid? personally, i wouldn't. i would kick life in the butt when it gives me a hard time. and you should too, unknown stranger.
just remember this: it doesnt hurt to try. ever.r

30
content/blog/gb-idea.md Normal file
View File

@ -0,0 +1,30 @@
+++
template = 'custom/blog-post.html'
title = 'My idea about the guestbook'
description = 'The best way to create a guestbook in a static html project'
date = '2024-01-12'
slug = 'gb-idea'
year = 2024
month = 1
day = 12
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
# In short...
You might know that my website [used to have a guestbook](https://old-1.blek.codes/guestbook) (at the moment of writing this article), and it was relatively easy to implement since the whole thing used to run on express.js and a bunch of databases.
# The problem
Thing is, the current version of the website (the one you are browsing right now) is written in [Zola](https://getzola.org), which compiles into a bunch of static .HTML files.
This is obviously good in terms of server costs and performance, but isn't very good when you need to add interactive shit like guestbooks, statistics and stuff.
I mean, I could've chosen literally any other framework when i was doing the rewrite - SvelteKit, Rust+Warp, hell, even Laravel: basically anything that supports server side HTML rendering. But i kinda want to do this one completely static.
# Possible solutions
Well, the first one and the most obvious one is to not to have a guestbook. It is pretty hard to filter out the spam and overall its kind of not worth the trouble.
However, i still want for y'all to leave a message here so im jumping to solution 2: Create a separate docker service or smth that handles POST forms and serves the data.

View File

@ -0,0 +1,19 @@
+++
template = 'custom/blog-post.html'
title = 'happy 8th march to yall'
description = 'i am quite sad on this day'
date = '2024-03-08'
slug = 'happy-8th-march-2024'
year = 2024
month = 3
day = 8
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
i don't have any people in my life to celebrate or hang out with. i have someone who i can call, but i dont want to talk to them.
let's just hope that next year will be better.

View File

@ -3,15 +3,15 @@ template = 'custom/blog-post.html'
title = 'Hi!' title = 'Hi!'
description = 'First post here!' description = 'First post here!'
date = '2024-03-03' date = '2024-01-08'
slug = 'hi' slug = 'hi'
year = 2024 year = 2024
month = 3 month = 1
day = 3 day = 8
lang = 'en' lang = 'en'
[extra] [extra]
author = 'author person <author@author-writing-people.com>' author = 'b1ek <me@blek.codes>'
+++ +++
Hey, this is the first post here! We'll se how it goes from there. Hey, this is the first post here! We'll se how it goes from there.

View File

@ -0,0 +1,67 @@
+++
template = 'custom/blog-post.html'
title = 'how to download music from youtube + thumbnail'
description = 'a short small guide on how to download music from youtube, preserving thumbnail'
date = '2024-08-22'
slug = 'download-music-from-yt'
year = 2024
month = 8
day = 22
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
# let's get to the point.
you need to have `yt-dlp` and `ffmpeg` installed, `magick` and `lame` for setting the mp3 cover.
`yt-dlp` has the `-x` option, which automatically extracts the audio with ffmpeg. to specify the file format, use `--audio-format` (mp3, aac, etc):
```
yt-dlp https://youtu.be/oLnq2SdZvQs -x --audio-format mp3 -o flying_north.mp3
```
as you can see, the thumbnail is not preserved by `yt-dlp`:
<img src='/blog-image/yt-music-no-thumb.png' />
to get the thumbnail, do:
```
curl https://i.ytimg.com/vi_webp/$VIDEO_ID/maxresdefault.webp -o file.webp
```
to convert it to JPEG + crop it to 1:1 aspect ratio:
```
magick convert -crop 1:1 -gravity center file.{webp,jpeg}
```
and the last thing, to embed it inside the `.mp3`:
```
lame --ti file.jpeg flying_north.mp3
mv flying_north.mp3.mp3 flying_north.mp3 # there's a good chance `lame` will export the file to `FILENAME.mp3.mp3`
```
so, basically it could be collapsed down to a bash script:
```bash
#!/usr/bin/env bash
VIDEO_ID=oLnq2SdZvQs
filename=file.mp3
cover=$(mktemp)
yt-dlp https://youtu.be/$VIDEO_ID -x --audio-format mp3 -o $filename
curl https://i.ytimg.com/vi_webp/$VIDEO_ID/maxresdefault.webp -o $cover
lame --ti $cover $filename
```
and, yay! it works
<img src='/blog-image/yt-music-works-in-amberol.png' />

26
content/blog/life.md Normal file
View File

@ -0,0 +1,26 @@
+++
template = 'custom/blog-post.html'
title = 'a few thoughts about life'
description = 'i am very gay and depressed'
date = '2024-02-23'
slug = 'life'
year = 2024
month = 2
day = 23
lang = 'en'
[extra]
author = 'b1ek <me@blek.codes>'
+++
to be honestly, the only thing i ever want to do with my life is to sit my whole life in some dense place like berlin or something, sit at coffee shops with my friends, talk about stuff and maybe do some hacktivist stuff.
would be really nice to do something really big (kinda like mr robot, iykyk)
i dont think i could make it, but might as well try.
also it would be fun to go on a date to some abandoned building ^^ i really like the aesthetic and stuff
btw, i dont think that my death protcol would actually work. like, it might but it probably simply won't. i really need to rethink it. maybe rebuild it so it would be simple as fuck. i dont know
i feel like i should re arrange the stuff on the index page.

15
content/key.asc Normal file
View File

@ -0,0 +1,15 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZsyO1RYJKwYBBAHaRw8BAQdAl/Y618e4nbHrKwUAVW/YjXQqaAy9ENKKphnV
w77ePJO0e2JsZWshIChwcmV2LiBrZXkgLSA1OUY0NkRCODUwQ0E0NDdGMzYzNzFE
RUQxNDU0NjIyMUUzNTk1RDBDIDsgY2hlY2sgY3VycmVudCBrZXkgaHR0cHM6Ly9i
bGVrLmNvZGVzL2tleS5hc2MpIDxtZUBibGVrLmNvZGVzPoiZBBMWCgBBFiEEpsA4
4D0hLQZXUFOtpiLCLJvGFrIFAmbMjtUCGwMFCQWjmoAFCwkIBwICIgIGFQoJCAsC
BBYCAwECHgcCF4AACgkQpiLCLJvGFrJsHAD+Kwwa376LtclKW1scMWWKs4cIgaJw
1dgD8ON1ir2EmrABAJMcoNEFbNREYQTKNul78MbLJYBhb7Dl82EHQRU7essGuDgE
ZsyO1RIKKwYBBAGXVQEFAQEHQB45pX39kNHHz77oy9NtZWO2mQS60Gf+/pGXEScp
dac4AwEIB4h+BBgWCgAmFiEEpsA44D0hLQZXUFOtpiLCLJvGFrIFAmbMjtUCGwwF
CQWjmoAACgkQpiLCLJvGFrKUhQD/ey5K7HZweNtsC8CPKZc8ejxS8rivgU8eoERn
QW98UNYA/3RHKiXditFsV6s+UZjM3raA7hXHkkJNaubXSfFMcFIN
=VbEi
-----END PGP PUBLIC KEY BLOCK-----

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -50,3 +50,9 @@ a, a:visited {
text-decoration: underline !important; text-decoration: underline !important;
} }
} }
pre code {
padding: 0.5em 1em;
display: block;
}

View File

@ -29,7 +29,6 @@
text-align: center; text-align: center;
width: 80%; width: 80%;
max-width: 1200px;
left: 50%; left: 50%;
transform: translateX(-50%); transform: translateX(-50%);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

View File

@ -10,23 +10,23 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;700&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;700&display=swap" rel="stylesheet">
<style> <style>
* { font-family: 'Noto Serif JP' } html { font-family: 'Noto Serif JP' }
</style> </style>
<title>Otherworld</title> <title>blek! World</title>
</head> </head>
<body> <body>
<div class='screen bg'></div> <div class='screen bg'></div>
<div class='screen content'> <div class='screen content'>
<h1 style='margin-bottom:0'> <h1 style='margin-bottom:0'>
<a href='/' class="title-a">Otherworldly</a> <a href='/' class="title-a">blek! World</a>
</h1> </h1>
<hr style='margin:0 auto'/> <hr style='margin:0 auto'/>
{% block content %} {% endblock %} {% block content %} {% endblock %}
<p style='font-size:80%;text-align:center;margin-top:80px;height:120px'> <p style='font-size:80%;text-align:center;margin-top:120px;height:120px'>
Background credit to Background credit to
<a style='color:gray !important' href="https://tenor.com/view/retro-aesthetic-gif-19478658"> <a style='color:gray !important' href="https://tenor.com/view/retro-aesthetic-gif-19478658">
tenor tenor

View File

@ -15,20 +15,18 @@
{% block root %} {% block root %}
{% if page.extra.noload %} <div class='screen fader'>
<div class='screen fader'> <p>
<p> <img src='/load.gif' width='46px' height='48px' style='margin-bottom:8px' /><br/>
<img src='/load.gif' width='46px' height='48px' style='margin-bottom:8px' /><br/> Loading . . .
Loading . . .
<span style='font-size:50%;display:block;margin-top:3em;color:#777777 !important'> <span style='font-size:50%;display:block;margin-top:3em;color:#777777 !important'>
Credit for loading gif to Credit for loading gif to
<a href='https://bdragon1727.itch.io/pixel-loading-pack-3'> <a href='https://bdragon1727.itch.io/pixel-loading-pack-3'>
BDragon1727 BDragon1727
</a> </a>
</span> </span>
</p> </p>
</div> </div>
{% endif %}
{% endblock root %} {% endblock root %}

View File

@ -1,18 +0,0 @@
name = "otherworld"
description = "Vaporwave aesthetic theme"
license = "GPL-3-only"
homepage = "https://git.blek.codes/blek/otherworld"
min_version = "0.1.0"
demo = "https://world.blek.codes"
[extra]
[author]
name = "blek!"
homepage = "https://blek.codes"
[original]
author = "blek!"
homepage = "https://blek.codes"
repo = "https://git.blek.codes/blek/world"