Compare commits
11 Commits
31fab124cb
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 094466ec5a | |||
| 0c05420c3b | |||
| 20779c05b0 | |||
| 4ab31c9485 | |||
| cb39101485 | |||
| 2a87adfd63 | |||
| 09e64254c9 | |||
| 87c222c1b3 | |||
| 158effb9db | |||
| b7114de501 | |||
| f436d0f943 |
@@ -30,8 +30,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<section>
|
<section>
|
||||||
<h1 id="what-time-did-my-laptop-wake-up">What time did my laptop wake
|
<h1 id="what-time-did-my-laptop-wake-up">What time did my laptop wake up?</h1>
|
||||||
up?</h1>
|
|
||||||
<p>Thu 05 Jan 2023 16:59 EET</p>
|
<p>Thu 05 Jan 2023 16:59 EET</p>
|
||||||
<p><a href="..">..</a></p>
|
<p><a href="..">..</a></p>
|
||||||
<footer>
|
<footer>
|
||||||
|
|||||||
BIN
cgi-bin/sign-guestbook
Executable file
BIN
cgi-bin/sign-guestbook
Executable file
Binary file not shown.
@@ -62,7 +62,7 @@ section {
|
|||||||
}
|
}
|
||||||
|
|
||||||
blockquote {
|
blockquote {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin:0 auto;
|
margin:0 auto;
|
||||||
width:auto;
|
width:auto;
|
||||||
display:table
|
display:table
|
||||||
@@ -82,13 +82,16 @@ pre {
|
|||||||
|
|
||||||
code, pre {
|
code, pre {
|
||||||
font-family: "Comic Mono", monospace;
|
font-family: "Comic Mono", monospace;
|
||||||
font-size: 1.0em;
|
/* font-size: 1.0em; */
|
||||||
|
font-size: .9em;
|
||||||
color: var(--color1);
|
color: var(--color1);
|
||||||
text-align: center
|
/* text-align: center */
|
||||||
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
font-size: .8em
|
/* font-size: .8em; (fixing it messes up mobile view) */
|
||||||
|
font-size: .8em
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
text-justify: none;
|
text-justify: none;
|
||||||
|
|||||||
20
donate.html
20
donate.html
@@ -33,17 +33,23 @@
|
|||||||
<h2 id="donation-options">Donation Options</h2>
|
<h2 id="donation-options">Donation Options</h2>
|
||||||
<p>So far I accept donations through these cryptocurrencies</p>
|
<p>So far I accept donations through these cryptocurrencies</p>
|
||||||
<h3 id="lbc">LBC</h3>
|
<h3 id="lbc">LBC</h3>
|
||||||
<p>bKA5xjndsSeiSjH3gYmZpzXZYBLU7zHhwK<br />
|
<p>
|
||||||
<a href="crypto/lbcqr.png">LBC QR</a><br /></p>
|
bKA5xjndsSeiSjH3gYmZpzXZYBLU7zHhwK<br />
|
||||||
|
<img src="crypto/lbcqr.png" style="width:300px; height:200px;"><br />LBC QR<br /><br />
|
||||||
|
</p>
|
||||||
<h3 id="xmr">XMR</h3>
|
<h3 id="xmr">XMR</h3>
|
||||||
<p>454MmPcxgeYX536SBdfxWSaAniLM8uL8oiuUcQNTwz6L1Bwa8Q4BL4V79zjybRa6z61Q8bUswV8RpAYtdtyC1pCxLQhY6v2<br />
|
<p>
|
||||||
<a href="crypto/moneroqr.png">XMR QR</a><br /></p>
|
454MmPcxgeYX536SBdfxWSaAniLM8uL8oiuUcQNTwz6L1Bwa8Q4BL4V79zjybRa6z61Q8bUswV8RpAYtdtyC1pCxLQhY6v2<br />
|
||||||
|
<img src="crypto/moneroqr.png" style="width:300px; height:200px;"><br />XMR QR<br /><br />
|
||||||
|
</p>
|
||||||
<h3 id="btc">BTC</h3>
|
<h3 id="btc">BTC</h3>
|
||||||
<p>bc1qgegqv3zkq0q4w87ndp05wc6qsde3t9j6x62pqj<br />
|
<p>
|
||||||
<a href="crypto/bitcoinqr.png">BTC QR</a><br /></p>
|
bc1qgegqv3zkq0q4w87ndp05wc6qsde3t9j6x62pqj<br />
|
||||||
|
<img src="crypto/bitcoinqr.png" style="width:300px; height:200px;"><br />BTC QR<br /><br />
|
||||||
|
</p>
|
||||||
<p><a href="..">..</a></p>
|
<p><a href="..">..</a></p>
|
||||||
<footer>
|
<footer>
|
||||||
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /></a>
|
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /><br /></a>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
29
gophermap
29
gophermap
@@ -19,7 +19,7 @@ i### A few words about me konsthol.eu 70
|
|||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
iI’m passionate about making technology work smarter, not harder. I love diving into workflow automation, tweaking Linux systems for peak performance and security, and managing cloud servers. I get a real kick out of solving complex tech problems and turning ideas into practical solutions. konsthol.eu 70
|
iI’m passionate about making technology work smarter, not harder. I love diving into workflow automation, tweaking Linux systems for peak performance and security, and managing cloud servers. I get a real kick out of solving complex tech problems and turning ideas into practical solutions. konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
i### I would better describe myself as a konsthol.eu 70
|
i### Me, in a nutshell konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
i* Power User konsthol.eu 70
|
i* Power User konsthol.eu 70
|
||||||
i* Linux Enthusiast konsthol.eu 70
|
i* Linux Enthusiast konsthol.eu 70
|
||||||
@@ -35,7 +35,7 @@ i* Code Tinkerer konsthol.eu 70
|
|||||||
i* Tech Lover konsthol.eu 70
|
i* Tech Lover konsthol.eu 70
|
||||||
i* Command Liner konsthol.eu 70
|
i* Command Liner konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
i### Where can you find me❓ konsthol.eu 70
|
i### Where can you find me ❓ konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
1Gemini 💎 gemini://konsthol.eu konsthol.eu 70
|
1Gemini 💎 gemini://konsthol.eu konsthol.eu 70
|
||||||
hTelegram 🗨 url:https://t.me/konsthol konsthol.eu 70
|
hTelegram 🗨 url:https://t.me/konsthol konsthol.eu 70
|
||||||
@@ -44,43 +44,44 @@ hTelegram 🗨 url:https://t.me/konsthol konsthol.eu 70
|
|||||||
hMy Git 📦 url:https://git.konsthol.eu/ konsthol.eu 70
|
hMy Git 📦 url:https://git.konsthol.eu/ konsthol.eu 70
|
||||||
hWebcall 📞 url:https://talk.konsthol.eu/user/78577870064 konsthol.eu 70
|
hWebcall 📞 url:https://talk.konsthol.eu/user/78577870064 konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
i### Thesis konsthol.eu 70
|
i### Thesis 📚 konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
iMy Thesis can be found here konsthol.eu 70
|
iMy Thesis can be found here konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
hSecDep url:https://hellanicus.lib.aegean.gr/handle/11610/26621 konsthol.eu 70
|
hSecDep url:https://hellanicus.lib.aegean.gr/handle/11610/26621 konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
i### CV konsthol.eu 70
|
i### CV 📄 konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
1My CV gemini://konsthol.eu/cv/cv.pdf konsthol.eu 70
|
1My CV gemini://konsthol.eu/cv/cv.pdf konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
i## My Blogs 😎 konsthol.eu 70
|
i## My Blogs 📝 konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
1Microblogging /mblog/mblog.txt konsthol.eu 70
|
1Microblogging /mblog/mblog.txt konsthol.eu 70
|
||||||
1Why are the colors like this? /wall/wall.txt konsthol.eu 70
|
1Why are the colors like this? /wall/wall.txt konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
i## Log konsthol.eu 70
|
i## Log 📜 konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
|
112-01-2025 - Simple way to extend yt-dlp /log/simple_way_to_extend_yt_dlp-12-01-2025.txt konsthol.eu 70
|
||||||
119-12-2024 - The magic of Wake-On-LAN /log/the_magic_of_wake_on_lan-19-12-2024.txt konsthol.eu 70
|
119-12-2024 - The magic of Wake-On-LAN /log/the_magic_of_wake_on_lan-19-12-2024.txt konsthol.eu 70
|
||||||
125-02-2023 - WebCall /log/webcall-25-02-2023.txt konsthol.eu 70
|
125-02-2023 - WebCall /log/webcall-25-02-2023.txt konsthol.eu 70
|
||||||
117-08-2022 - wpgtk is just more convenient /log/choose_wpgtk_over_just_pywal-17-08-2022.txt konsthol.eu 70
|
117-08-2022 - wpgtk is just more convenient /log/choose_wpgtk_over_just_pywal-17-08-2022.txt konsthol.eu 70
|
||||||
112-09-2021 - Awesome file sharing tool /log/easy_file_sharing-12-09-2021.txt konsthol.eu 70
|
112-09-2021 - Awesome file sharing tool /log/easy_file_sharing-12-09-2021.txt konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
1Archive /log_archive.txt konsthol.eu 70
|
1Archive 🗄️ /log_archive.txt konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
i# Self hosted services konsthol.eu 70
|
i# Self hosted services konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
i## Searx konsthol.eu 70
|
i## Searx 🔍 konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
iYou can use my searx instance for a more private experience on the web 👀 konsthol.eu 70
|
iYou can use my searx instance for a more private experience on the web 👀 konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
hSearx 🔍 url:https://searx.konsthol.eu/ konsthol.eu 70
|
hSearx url:https://searx.konsthol.eu/ konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
i## Jitsi Meet konsthol.eu 70
|
i## Jitsi Meet 🤳 konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
iIf you wish to video chat with me let me know so I can make a room at my Jitsi instance konsthol.eu 70
|
iIf you wish to video chat with me let me know so I can make a room at my Jitsi instance konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
hJitsi Meet 🤳 url:https://jitsi.konsthol.eu/ konsthol.eu 70
|
hJitsi Meet url:https://jitsi.konsthol.eu/ konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
i## Devz@ konsthol.eu 70
|
i## Devz@ konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
@@ -101,11 +102,11 @@ iI could be livestreaming at konsthol.eu 70
|
|||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
hOwncast url:https://tv.konsthol.eu konsthol.eu 70
|
hOwncast url:https://tv.konsthol.eu konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
i## Piped 📹 konsthol.eu 70
|
i## Invidious 📹 konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
iMy Piped instance which you can use resides at konsthol.eu 70
|
iMy Invidious instance which you can use, resides at konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
hPiped url:https://piped.konsthol.eu/ konsthol.eu 70
|
hInvidious url:https://piped.konsthol.eu/ konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
i## Gopher 🕳️ konsthol.eu 70
|
i## Gopher 🕳️ konsthol.eu 70
|
||||||
i konsthol.eu 70
|
i konsthol.eu 70
|
||||||
|
|||||||
21
guestbook.gmi
Normal file
21
guestbook.gmi
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
> testing by me
|
||||||
|
> -- 25 december, 2024 at 22:05 eest
|
||||||
|
|
||||||
|
> another test
|
||||||
|
> -- 25 december, 2024 at 22:06
|
||||||
|
|
||||||
|
> a
|
||||||
|
> -- 25 december, 2024 at 22:09
|
||||||
|
|
||||||
|
> anon this is great stuff
|
||||||
|
> -- 25 december, 2024 at 22:16
|
||||||
|
|
||||||
|
> this is a test
|
||||||
|
> -- 25 december, 2024 at 22:30
|
||||||
|
|
||||||
|
> fhufyyf
|
||||||
|
> -- 26 december, 2024 at 11:14
|
||||||
|
|
||||||
|
> ahfaiuefhwdskfj
|
||||||
|
> -- 26 december, 2024 at 14:00
|
||||||
|
|
||||||
33
index.gmi
33
index.gmi
@@ -19,7 +19,7 @@ Est. 5th of June 2021.
|
|||||||
|
|
||||||
I’m passionate about making technology work smarter, not harder. I love diving into workflow automation, tweaking Linux systems for peak performance and security, and managing cloud servers. I get a real kick out of solving complex tech problems and turning ideas into practical solutions.
|
I’m passionate about making technology work smarter, not harder. I love diving into workflow automation, tweaking Linux systems for peak performance and security, and managing cloud servers. I get a real kick out of solving complex tech problems and turning ideas into practical solutions.
|
||||||
|
|
||||||
### I would better describe myself as a
|
### Me, in a nutshell
|
||||||
|
|
||||||
* Power User
|
* Power User
|
||||||
* Linux Enthusiast
|
* Linux Enthusiast
|
||||||
@@ -35,7 +35,7 @@ I’m passionate about making technology work smarter, not harder. I love diving
|
|||||||
* Tech Lover
|
* Tech Lover
|
||||||
* Command Liner
|
* Command Liner
|
||||||
|
|
||||||
### Where can you find me❓
|
### Where can you find me ❓
|
||||||
|
|
||||||
=> gemini://konsthol.eu Gemini 💎
|
=> gemini://konsthol.eu Gemini 💎
|
||||||
=> https://t.me/konsthol Telegram 🗨
|
=> https://t.me/konsthol Telegram 🗨
|
||||||
@@ -44,43 +44,44 @@ I’m passionate about making technology work smarter, not harder. I love diving
|
|||||||
=> https://git.konsthol.eu/ My Git 📦
|
=> https://git.konsthol.eu/ My Git 📦
|
||||||
=> https://talk.konsthol.eu/user/78577870064 Webcall 📞
|
=> https://talk.konsthol.eu/user/78577870064 Webcall 📞
|
||||||
|
|
||||||
### Thesis
|
### Thesis 📚
|
||||||
|
|
||||||
My Thesis can be found here
|
My Thesis can be found here
|
||||||
|
|
||||||
=> https://hellanicus.lib.aegean.gr/handle/11610/26621 SecDep
|
=> https://hellanicus.lib.aegean.gr/handle/11610/26621 SecDep
|
||||||
|
|
||||||
### CV
|
### CV 📄
|
||||||
|
|
||||||
=> /cv/cv.pdf My CV
|
=> /cv/cv.pdf My CV
|
||||||
|
|
||||||
## My Blogs 😎
|
## My Blogs 📝
|
||||||
|
|
||||||
=> /mblog/mblog.gmi Microblogging
|
=> /mblog/mblog.gmi Microblogging
|
||||||
=> /wall/wall.gmi Why are the colors like this?
|
=> /wall/wall.gmi Why are the colors like this?
|
||||||
|
|
||||||
## Log
|
## Log 📜
|
||||||
|
|
||||||
|
=> /log/simple_way_to_extend_yt_dlp-12-01-2025.gmi 12-01-2025 - Simple way to extend yt-dlp
|
||||||
=> /log/the_magic_of_wake_on_lan-19-12-2024.gmi 19-12-2024 - The magic of Wake-On-LAN
|
=> /log/the_magic_of_wake_on_lan-19-12-2024.gmi 19-12-2024 - The magic of Wake-On-LAN
|
||||||
=> /log/webcall-25-02-2023.gmi 25-02-2023 - WebCall
|
=> /log/webcall-25-02-2023.gmi 25-02-2023 - WebCall
|
||||||
=> /log/choose_wpgtk_over_just_pywal-17-08-2022.gmi 17-08-2022 - wpgtk is just more convenient
|
=> /log/choose_wpgtk_over_just_pywal-17-08-2022.gmi 17-08-2022 - wpgtk is just more convenient
|
||||||
=> /log/easy_file_sharing-12-09-2021.gmi 12-09-2021 - Awesome file sharing tool
|
=> /log/easy_file_sharing-12-09-2021.gmi 12-09-2021 - Awesome file sharing tool
|
||||||
|
|
||||||
=> log_archive.gmi Archive
|
=> log_archive.gmi Archive 🗄️
|
||||||
|
|
||||||
# Self hosted services
|
# Self hosted services
|
||||||
|
|
||||||
## Searx
|
## Searx 🔍
|
||||||
|
|
||||||
You can use my searx instance for a more private experience on the web 👀
|
You can use my searx instance for a more private experience on the web 👀
|
||||||
|
|
||||||
=> https://searx.konsthol.eu/ Searx 🔍
|
=> https://searx.konsthol.eu/ Searx
|
||||||
|
|
||||||
## Jitsi Meet
|
## Jitsi Meet 🤳
|
||||||
|
|
||||||
If you wish to video chat with me let me know so I can make a room at my Jitsi instance
|
If you wish to video chat with me let me know so I can make a room at my Jitsi instance
|
||||||
|
|
||||||
=> https://jitsi.konsthol.eu/ Jitsi Meet 🤳
|
=> https://jitsi.konsthol.eu/ Jitsi Meet
|
||||||
|
|
||||||
## Devz@
|
## Devz@
|
||||||
|
|
||||||
@@ -101,11 +102,11 @@ I could be livestreaming at
|
|||||||
|
|
||||||
=> https://tv.konsthol.eu Owncast
|
=> https://tv.konsthol.eu Owncast
|
||||||
|
|
||||||
## Piped 📹
|
## Invidious 📹
|
||||||
|
|
||||||
My Piped instance which you can use resides at
|
My Invidious instance which you can use, resides at
|
||||||
|
|
||||||
=> https://piped.konsthol.eu/ Piped
|
=> https://piped.konsthol.eu/ Invidious
|
||||||
|
|
||||||
## Gopher 🕳️
|
## Gopher 🕳️
|
||||||
|
|
||||||
@@ -146,3 +147,7 @@ I accept donations for any reason
|
|||||||
## Also on the web 🕸️
|
## Also on the web 🕸️
|
||||||
|
|
||||||
=> https://konsthol.eu http website
|
=> https://konsthol.eu http website
|
||||||
|
|
||||||
|
## My Guestbook
|
||||||
|
|
||||||
|
=> /cgi-bin/sign-guestbook Sign my guestbook!
|
||||||
|
|||||||
178
index.html
178
index.html
@@ -42,93 +42,113 @@
|
|||||||
<p>This website follows a Gemini-first approach 🚀</p>
|
<p>This website follows a Gemini-first approach 🚀</p>
|
||||||
<p>Est. 5th of June 2021.</p>
|
<p>Est. 5th of June 2021.</p>
|
||||||
<h3 id="a-few-words-about-me">A few words about me</h3>
|
<h3 id="a-few-words-about-me">A few words about me</h3>
|
||||||
<p>I’m passionate about making technology work smarter, not harder. I
|
<p>
|
||||||
love diving into workflow automation, tweaking Linux systems for peak
|
I’m passionate about making technology work smarter, not harder. I love diving
|
||||||
performance and security, and managing cloud servers. I get a real kick
|
into workflow automation, tweaking Linux systems for peak performance and
|
||||||
out of solving complex tech problems and turning ideas into practical
|
security, and managing cloud servers. I get a real kick out of solving complex
|
||||||
solutions.</p>
|
tech problems and turning ideas into practical solutions.
|
||||||
<h3 id="i-would-better-describe-myself-as-a">I would better describe
|
</p>
|
||||||
myself as a</h3>
|
<h3 id="me-in-a-nutshell">Me, in a nutshell</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Power User</li>
|
<li>Power User</li>
|
||||||
<li>Linux Enthusiast</li>
|
<li>Linux Enthusiast</li>
|
||||||
<li>Privacy Advocate</li>
|
<li>Privacy Advocate</li>
|
||||||
<li>Open Sourcerer</li>
|
<li>Open Sourcerer</li>
|
||||||
<li>*NIX Ricer</li>
|
<li>*NIX Ricer</li>
|
||||||
<li>Software Minimalist</li>
|
<li>Software Minimalist</li>
|
||||||
<li>Master FOSSer</li>
|
<li>Master FOSSer</li>
|
||||||
<li>Server Guru</li>
|
<li>Server Guru</li>
|
||||||
<li>IT Ninja</li>
|
<li>IT Ninja</li>
|
||||||
<li>Avid Technologist</li>
|
<li>Avid Technologist</li>
|
||||||
<li>Code Tinkerer</li>
|
<li>Code Tinkerer</li>
|
||||||
<li>Tech Lover</li>
|
<li>Tech Lover</li>
|
||||||
<li>Command Liner</li>
|
<li>Command Liner</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h3 id="where-can-you-find-me">Where can you find me❓</h3>
|
<h3 id="where-can-you-find-me">Where can you find me ❓</h3>
|
||||||
<p><a class="gem" href="gemini://konsthol.eu">Gemini 💎</a><br /> <a
|
<p>
|
||||||
href="https://t.me/konsthol">Telegram 🗨</a><br /> <a
|
<a class="gem" href="gemini://konsthol.eu">Gemini 💎</a><br />
|
||||||
href="mailto:konsthol@konsthol.eu">Email ✉️</a><br /> <a
|
<a href="https://t.me/konsthol">Telegram 🗨</a><br />
|
||||||
href="mailto:konsthol@pm.me">Protonmail 📧</a><br /> <a
|
<a href="mailto:konsthol@konsthol.eu">Email ✉️</a><br />
|
||||||
href="https://git.konsthol.eu/">My Git 📦</a><br /> <a
|
<a href="mailto:konsthol@pm.me">Protonmail 📧</a><br />
|
||||||
href="https://talk.konsthol.eu/user/78577870064">Webcall
|
<a href="https://git.konsthol.eu/">My Git 📦</a><br />
|
||||||
📞</a><br /></p>
|
<a href="https://talk.konsthol.eu/user/78577870064">Webcall 📞</a><br />
|
||||||
<h3 id="thesis">Thesis</h3>
|
</p>
|
||||||
|
<h3 id="thesis">Thesis 📚</h3>
|
||||||
<p>My Thesis can be found here</p>
|
<p>My Thesis can be found here</p>
|
||||||
<p><a
|
<p>
|
||||||
href="https://hellanicus.lib.aegean.gr/handle/11610/26621">SecDep</a><br /></p>
|
<a href="https://hellanicus.lib.aegean.gr/handle/11610/26621">SecDep</a><br />
|
||||||
<h3 id="cv">CV</h3>
|
</p>
|
||||||
|
<h3 id="cv">CV 📄</h3>
|
||||||
<p><a href="/cv/cv.pdf">My CV</a><br /></p>
|
<p><a href="/cv/cv.pdf">My CV</a><br /></p>
|
||||||
<h2 id="my-blogs">My Blogs 😎</h2>
|
<h2 id="my-blogs">My Blogs 📝</h2>
|
||||||
<p><a href="rss.xml">RSS</a></p>
|
<p><a href="rss.xml">RSS</a></p>
|
||||||
<p><a href="/mblog/mblog.html">Microblogging</a><br /> <a
|
<p>
|
||||||
href="/wall/wall.html">Why are the colors like this?</a><br /></p>
|
<a href="/mblog/mblog.html">Microblogging</a><br />
|
||||||
<h2 id="log">Log</h2>
|
<a href="/wall/wall.html">Why are the colors like this?</a><br />
|
||||||
<p><a href="/log/the_magic_of_wake_on_lan-19-12-2024.html">19-12-2024 -
|
</p>
|
||||||
The magic of Wake-On-LAN</a><br /> <a
|
<h2 id="log">Log 📜</h2>
|
||||||
href="/log/webcall-25-02-2023.html">25-02-2023 - WebCall</a><br /> <a
|
<p>
|
||||||
href="/log/choose_wpgtk_over_just_pywal-17-08-2022.html">17-08-2022 -
|
<a href="/log/simple_way_to_extend_yt_dlp-12-01-2025.html"
|
||||||
wpgtk is just more convenient</a><br /> <a
|
>12-01-2025 - Simple way to extend yt-dlp</a
|
||||||
href="/log/easy_file_sharing-12-09-2021.html">12-09-2021 - Awesome file
|
><br />
|
||||||
sharing tool</a><br /></p>
|
<a href="/log/the_magic_of_wake_on_lan-19-12-2024.html"
|
||||||
<p><a href="log_archive.html">Archive</a><br /></p>
|
>19-12-2024 - The magic of Wake-On-LAN</a
|
||||||
|
><br />
|
||||||
|
<a href="/log/webcall-25-02-2023.html">25-02-2023 - WebCall</a><br />
|
||||||
|
<a href="/log/choose_wpgtk_over_just_pywal-17-08-2022.html"
|
||||||
|
>17-08-2022 - wpgtk is just more convenient</a
|
||||||
|
><br />
|
||||||
|
<a href="/log/easy_file_sharing-12-09-2021.html"
|
||||||
|
>12-09-2021 - Awesome file sharing tool</a
|
||||||
|
><br />
|
||||||
|
</p>
|
||||||
|
<p><a href="log_archive.html">Archive 🗄️</a><br /></p>
|
||||||
<h1 id="self-hosted-services">Self hosted services</h1>
|
<h1 id="self-hosted-services">Self hosted services</h1>
|
||||||
<h2 id="searx">Searx</h2>
|
<h2 id="searx">Searx 🔍</h2>
|
||||||
<p>You can use my searx instance for a more private experience on the
|
<p>You can use my searx instance for a more private experience on the web 👀</p>
|
||||||
web 👀</p>
|
<p><a href="https://searx.konsthol.eu/">Searx</a><br /></p>
|
||||||
<p><a href="https://searx.konsthol.eu/">Searx 🔍</a><br /></p>
|
<h2 id="jitsi-meet">Jitsi Meet 🤳</h2>
|
||||||
<h2 id="jitsi-meet">Jitsi Meet</h2>
|
<p>
|
||||||
<p>If you wish to video chat with me let me know so I can make a room at
|
If you wish to video chat with me let me know so I can make a room at my Jitsi
|
||||||
my Jitsi instance</p>
|
instance
|
||||||
<p><a href="https://jitsi.konsthol.eu/">Jitsi Meet 🤳</a><br /></p>
|
</p>
|
||||||
|
<p><a href="https://jitsi.konsthol.eu/">Jitsi Meet</a><br /></p>
|
||||||
<h2 id="devz">Devz@</h2>
|
<h2 id="devz">Devz@</h2>
|
||||||
<p>I host a devz@ instance available at</p>
|
<p>I host a devz@ instance available at</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>ssh -p 2221 konsthol.eu</p>
|
<p>ssh -p 2221 konsthol.eu</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>from any ssh client or from</p>
|
<p>from any ssh client or from</p>
|
||||||
<p><a href="https://video.konsthol.eu/">here</a><br /></p>
|
<p><a href="https://video.konsthol.eu/">here</a><br /></p>
|
||||||
<p>if you have no ssh client available. Note: access from the url is
|
<p>
|
||||||
shared across all users through an immutable Guest user account. That
|
if you have no ssh client available. Note: access from the url is shared
|
||||||
means that there will be no user settings persistance.</p>
|
across all users through an immutable Guest user account. That means that
|
||||||
|
there will be no user settings persistance.
|
||||||
|
</p>
|
||||||
<h2 id="owncast">Owncast 📺</h2>
|
<h2 id="owncast">Owncast 📺</h2>
|
||||||
<p>I could be livestreaming at</p>
|
<p>I could be livestreaming at</p>
|
||||||
<p><a href="https://tv.konsthol.eu">Owncast</a><br /></p>
|
<p><a href="https://tv.konsthol.eu">Owncast</a><br /></p>
|
||||||
<h2 id="piped">Piped 📹</h2>
|
<h2 id="invidious">Invidious 📹</h2>
|
||||||
<p>My Piped instance which you can use resides at</p>
|
<p>My Invidious instance which you can use, resides at</p>
|
||||||
<p><a href="https://piped.konsthol.eu/">Piped</a><br /></p>
|
<p><a href="https://piped.konsthol.eu/">Invidious</a><br /></p>
|
||||||
<h2 id="gopher">Gopher 🕳️</h2>
|
<h2 id="gopher">Gopher 🕳️</h2>
|
||||||
<p>My Gopher Hole for this homepage is accessible via</p>
|
<p>My Gopher Hole for this homepage is accessible via</p>
|
||||||
<p><a href="gopher://konsthol.eu">Gopher 🦫</a><br /></p>
|
<p><a href="gopher://konsthol.eu">Gopher 🦫</a><br /></p>
|
||||||
<h2 id="tor">Tor</h2>
|
<h2 id="tor">Tor</h2>
|
||||||
<p>This website is also available as a tor hidden service</p>
|
<p>This website is also available as a tor hidden service</p>
|
||||||
<p><a
|
<p>
|
||||||
href="http://aasyir5vu6cnhczr6prnrbdim34kmgngpuuyfzuozrmtt6km5vnao5ad.onion">Onion
|
<a
|
||||||
Address 🧅</a><br /></p>
|
href="http://aasyir5vu6cnhczr6prnrbdim34kmgngpuuyfzuozrmtt6km5vnao5ad.onion"
|
||||||
|
>Onion Address 🧅</a
|
||||||
|
><br />
|
||||||
|
</p>
|
||||||
<h2 id="croc">Croc 🐊</h2>
|
<h2 id="croc">Croc 🐊</h2>
|
||||||
<p>I have my own croc relay which you can use to send and receive files
|
<p>
|
||||||
using this amazing tool by running</p>
|
I have my own croc relay which you can use to send and receive files using
|
||||||
|
this amazing tool by running
|
||||||
|
</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>croc –relay konsthol.eu:9009 send [file]</p>
|
<p>croc –relay konsthol.eu:9009 send [file]</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<h2 id="finger">Finger 👉</h2>
|
<h2 id="finger">Finger 👉</h2>
|
||||||
<p>My info is also available at</p>
|
<p>My info is also available at</p>
|
||||||
@@ -136,28 +156,36 @@ using this amazing tool by running</p>
|
|||||||
<h2 id="my-card">My card 💳</h2>
|
<h2 id="my-card">My card 💳</h2>
|
||||||
<p>You can view my curlable card by running</p>
|
<p>You can view my curlable card by running</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>curl -L konsthol.eu/card</p>
|
<p>curl -L konsthol.eu/card</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<button id="mybtn" style="display:block; width:100px; height:50px;" onClick="action();">Call me</button>
|
<button id="mybtn" style="display:block; width:100px; height:50px;" onClick="action();">Call me</button>
|
||||||
<div id="myframe" style="display: none; position:relative;">
|
<div id="myframe" style="display: none; position:relative;">
|
||||||
<iframe id="callFrame" style="width:320px; height:480px;" allow="microphone; camera;" scrolling="no" frameborder="no"></iframe>
|
<iframe id="callFrame" style="width:320px; height:480px;" allow="microphone; camera;" scrolling="no" frameborder="no"></iframe>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
function action() {
|
function action() {
|
||||||
document.getElementById('mybtn').style.visibility = 'hidden';
|
let mybtn = document.getElementById('mybtn');
|
||||||
let myframe = document.getElementById('myframe');
|
let myframe = document.getElementById('myframe');
|
||||||
myframe.style.display="block";
|
|
||||||
let callFrame = document.getElementById('callFrame');
|
if (myframe.style.display === "none" || myframe.style.display === "") {
|
||||||
let url_string = "https://talk.konsthol.eu/"
|
myframe.style.display = "block";
|
||||||
let user_string = url_string+"user/78577870064"
|
mybtn.textContent = "Hide call";
|
||||||
callFrame.src=user_string;
|
|
||||||
|
let callFrame = document.getElementById('callFrame');
|
||||||
|
let url_string = "https://talk.konsthol.eu/";
|
||||||
|
let user_string = url_string + "user/78577870064";
|
||||||
|
callFrame.src = user_string;
|
||||||
|
} else {
|
||||||
|
myframe.style.display = "none";
|
||||||
|
mybtn.textContent = "Call me";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<h2 id="donate">Donate 💸</h2>
|
<h2 id="donate">Donate 💸</h2>
|
||||||
<p>I accept donations for any reason</p>
|
<p>I accept donations for any reason</p>
|
||||||
<p><a href="donate.html">Donate</a><br /></p>
|
<p><a href="donate.html">Donate</a><br /></p>
|
||||||
<h2>Daily Unique Visitors</h2><p>
|
<h2>Daily Unique Visitors</h2><p>
|
||||||
Wednesday 25/12/24 20:49:49
|
Saturday 19/04/25 20:47:56
|
||||||
2
|
2
|
||||||
</p>
|
</p>
|
||||||
<h2 id="also-on-the-web">Also on the web 🕸️</h2>
|
<h2 id="also-on-the-web">Also on the web 🕸️</h2>
|
||||||
|
|||||||
@@ -31,35 +31,45 @@
|
|||||||
<body>
|
<body>
|
||||||
<section>
|
<section>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>DATE: Wed 17 Aug 2022 00:09 By: konsthol@pm.me</p>
|
<p>DATE: Wed 17 Aug 2022 00:09 By: konsthol@pm.me</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<h1 id="wpgtk-is-just-more-convenient">wpgtk is just more
|
<h1 id="wpgtk-is-just-more-convenient">wpgtk is just more convenient</h1>
|
||||||
convenient</h1>
|
<p>
|
||||||
<p>Pywal is a simple KISS principled python application that extracts
|
Pywal is a simple KISS principled python application that extracts colors from
|
||||||
colors from an image and creates a color pallete to theme different
|
an image and creates a color pallete to theme different programs
|
||||||
programs</p>
|
</p>
|
||||||
<p>By default there are some templates that are stored in its .cache
|
<p>
|
||||||
directory and there is an option to create new templates in its .config
|
By default there are some templates that are stored in its .cache directory
|
||||||
directory.</p>
|
and there is an option to create new templates in its .config directory.
|
||||||
<p>I found it to be simpler to create every template with wpgtk and
|
</p>
|
||||||
store it in its templates folder in .config because there it also
|
<p>
|
||||||
utilizes symlinks to its respective files and thus you can have every
|
I found it to be simpler to create every template with wpgtk and store it in
|
||||||
program’s file to manage in one place.</p>
|
its templates folder in .config because there it also utilizes symlinks to its
|
||||||
<p>Moreover wpgtk conveniently stores each created colorscheme in a
|
respective files and thus you can have every program’s file to manage in one
|
||||||
schemes folder in .config and along with that every wallpaper used as a
|
place.
|
||||||
symlink to the actual wallpaper in a wallpapers folder.</p>
|
</p>
|
||||||
<p>It also has a gui interface but I never really found a use for it as
|
<p>
|
||||||
one can easily perform every needed action using just the cli.</p>
|
Moreover wpgtk conveniently stores each created colorscheme in a schemes
|
||||||
<p>After creating a script to be run after every use of the program to
|
folder in .config and along with that every wallpaper used as a symlink to the
|
||||||
theme application that need third party scripts like telegram and
|
actual wallpaper in a wallpapers folder.
|
||||||
qutebrowser the process of switching colorschemes on the fly becomes
|
</p>
|
||||||
easy as pie and fast as fuck 🤫</p>
|
<p>
|
||||||
<p>Just give it a shot! Maybe I’ll upload my postWPG script in my gitea
|
It also has a gui interface but I never really found a use for it as one can
|
||||||
instance sometime soon and create an actual tutorial on how to use
|
easily perform every needed action using just the cli.
|
||||||
wpgtk</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
After creating a script to be run after every use of the program to theme
|
||||||
|
application that need third party scripts like telegram and qutebrowser the
|
||||||
|
process of switching colorschemes on the fly becomes easy as pie and fast as
|
||||||
|
fuck 🤫
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Just give it a shot! Maybe I’ll upload my postWPG script in my gitea instance
|
||||||
|
sometime soon and create an actual tutorial on how to use wpgtk
|
||||||
|
</p>
|
||||||
<p><a href="..">..</a></p>
|
<p><a href="..">..</a></p>
|
||||||
<footer>
|
<footer>
|
||||||
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /></a>
|
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /><br /></a>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -31,52 +31,65 @@
|
|||||||
<body>
|
<body>
|
||||||
<section>
|
<section>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>DATE: Sun 12 Sep 2021 00:53 By: konsthol@pm.me</p>
|
<p>DATE: Sun 12 Sep 2021 00:53 By: konsthol@pm.me</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<h1 id="awesome-file-sharing-tool">Awesome file sharing tool</h1>
|
<h1 id="awesome-file-sharing-tool">Awesome file sharing tool</h1>
|
||||||
<p>Croc is one of the best easy to use file sharing cli tools I came
|
<p>
|
||||||
across and only recently discovered how easy it can be to self host your
|
Croc is one of the best easy to use file sharing cli tools I came across and
|
||||||
own relay.</p>
|
only recently discovered how easy it can be to self host your own relay.
|
||||||
<p>Croc as far as I understand needs an intermediary to staple as it
|
</p>
|
||||||
says the connection between two computers. If I grasp the concept
|
<p>
|
||||||
correctly if two computers can both connect to a third one then a
|
Croc as far as I understand needs an intermediary to staple as it says the
|
||||||
connection between them can be established. The files sent over don’t
|
connection between two computers. If I grasp the concept correctly if two
|
||||||
get first uploaded to the third one and then downloaded to the second
|
computers can both connect to a third one then a connection between them can
|
||||||
but somehow get uploaded and downloaded simultaneously.</p>
|
be established. The files sent over don’t get first uploaded to the third one
|
||||||
<p>I’ll have to further read about that but in short if you have a
|
and then downloaded to the second but somehow get uploaded and downloaded
|
||||||
computer like a server with a static ip that is easily accessible from
|
simultaneously.
|
||||||
the internet then because of the great job the author did you can host a
|
</p>
|
||||||
relay simply by typing the command</p>
|
<p>
|
||||||
|
I’ll have to further read about that but in short if you have a computer like
|
||||||
|
a server with a static ip that is easily accessible from the internet then
|
||||||
|
because of the great job the author did you can host a relay simply by typing
|
||||||
|
the command
|
||||||
|
</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>croc relay</p>
|
<p>croc relay</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>which will by default use the ports 9009-9013 but you can specify
|
<p>
|
||||||
your own with the –ports arguement like</p>
|
which will by default use the ports 9009-9013 but you can specify your own
|
||||||
|
with the –ports arguement like
|
||||||
|
</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>croc relay –ports 1111,1112</p>
|
<p>croc relay –ports 1111,1112</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>Then if you make that into a systemd service (which I won’t be
|
<p>
|
||||||
covering just yet cause I don’t really understand them and only make
|
Then if you make that into a systemd service (which I won’t be covering just
|
||||||
them by copy pasting basic templates 😐) it’s basically a set and forget
|
yet cause I don’t really understand them and only make them by copy pasting
|
||||||
kind of thing and you can now send files to anyone in any operating
|
basic templates 😐) it’s basically a set and forget kind of thing and you can
|
||||||
system by using croc by typing</p>
|
now send files to anyone in any operating system by using croc by typing
|
||||||
|
</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>croc –relay “your.domain:9009” send [file]</p>
|
<p>croc –relay “your.domain:9009” send [file]</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>and the recipient can download it by typing</p>
|
<p>and the recipient can download it by typing</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>croc –relay “your.domain:9009” [code]</p>
|
<p>croc –relay “your.domain:9009” [code]</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>This is super useful cause there was a time when the public instance
|
<p>
|
||||||
was down and I couldn’t send files when it was just so easy to not be
|
This is super useful cause there was a time when the public instance was down
|
||||||
dependent on the public instance in the first place.</p>
|
and I couldn’t send files when it was just so easy to not be dependent on the
|
||||||
<p>You should definetely read more about it on Croc’s github page and
|
public instance in the first place.
|
||||||
set up your own relay asap 😎</p>
|
</p>
|
||||||
<p><a
|
<p>
|
||||||
href="https://github.com/schollz/croc">https://github.com/schollz/croc</a></p>
|
You should definetely read more about it on Croc’s github page and set up your
|
||||||
|
own relay asap 😎
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a href="https://github.com/schollz/croc">https://github.com/schollz/croc</a>
|
||||||
|
</p>
|
||||||
<p><a href="..">..</a></p>
|
<p><a href="..">..</a></p>
|
||||||
<footer>
|
<footer>
|
||||||
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /></a>
|
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /><br /></a>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
75
log/simple_way_to_extend_yt_dlp-12-01-2025.gmi
Normal file
75
log/simple_way_to_extend_yt_dlp-12-01-2025.gmi
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
> DATE: Sun 12 Jan 2025 15:51 By: konsthol@pm.me
|
||||||
|
|
||||||
|
# Simple way to extend yt-dlp
|
||||||
|
|
||||||
|
Lots of people use yt-dlp either directly or indirectly through mpv. It's a powerful tool that acts as a website scraper and it supports thousands of websites. The website its mostly used for is like the name suggests YouTube. Now, YouTube is a great resource but usage through the website is quite unpleasant so lots of people opt out to use alternative frontends like Invidious or Piped. Lots of times you just want to use mpv to stream a YouTube video by providing the link like:
|
||||||
|
|
||||||
|
> mpv https://youtube.com/watch?v=[VideoID]
|
||||||
|
|
||||||
|
That works like a charm, but what happens when you provide a link of an alternative frontend? Well, it translates it to the aforementioned format in order to work. But there are so many instances of Invidious and Piped, so how does it know what to do? That was my question as well since I use a self hosted Piped instance and it does not recognize the domain. Obviously.
|
||||||
|
|
||||||
|
Thankfully, yt-dlp is an open source project so you can actually see what goes on behind the scenes. In my case, I installed it with the Arch Linux package manager and it resides at:
|
||||||
|
|
||||||
|
> /usr/lib/python3.13/site-packages/yt_dlp/
|
||||||
|
|
||||||
|
The way yt-dlp works is that it has a folder called "extractor" in that path and in that folder there is a python file for each supported website. In YouTube's case it's youtube.py. I opened it and I saw this:
|
||||||
|
|
||||||
|
```
|
||||||
|
class YoutubeBaseInfoExtractor(InfoExtractor):
|
||||||
|
"""Provide base functions for Youtube extractors"""
|
||||||
|
|
||||||
|
_RESERVED_NAMES = (
|
||||||
|
r'channel|c|user|playlist|watch|w|v|embed|e|live|watch_popup|clip|'
|
||||||
|
r'shorts|movies|results|search|shared|hashtag|trending|explore|feed|feeds|'
|
||||||
|
r'browse|oembed|get_video_info|iframe_api|s/player|source|'
|
||||||
|
r'storefront|oops|index|account|t/terms|about|upload|signin|logout')
|
||||||
|
|
||||||
|
_PLAYLIST_ID_RE = r'(?:(?:PL|LL|EC|UU|FL|RD|UL|TL|PU|OLAK5uy_)[0-9A-Za-z-_]{10,}|RDMM|WL|LL|LM)'
|
||||||
|
|
||||||
|
# _NETRC_MACHINE = 'youtube'
|
||||||
|
|
||||||
|
# If True it will raise an error if no login info is provided
|
||||||
|
_LOGIN_REQUIRED = False
|
||||||
|
|
||||||
|
_INVIDIOUS_SITES = (
|
||||||
|
# invidious-redirect websites
|
||||||
|
r'(?:www\.)?redirect\.invidious\.io',
|
||||||
|
r'(?:(?:www|dev)\.)?invidio\.us',
|
||||||
|
# Invidious instances taken from https://github.com/iv-org/documentation/blob/master/docs/instances.md
|
||||||
|
r'(?:www\.)?invidious\.pussthecat\.org',
|
||||||
|
r'(?:www\.)?invidious\.zee\.li',
|
||||||
|
[more instances here]
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
There is a class called YoutubeBaseInfoExtractor that has an array of instances called _INVIDIOUS_SITES that uses a regex to catch every domain there. Now, I saw at the GitHub page of yt-dlp a lot of people asking the maintainers to add more instances on this list. Theoretically you also can just edit the file and add a domain so that it recognizes that one too. But, in my personal opinion it's never a good idea to edit upstream files because as the program updates your changes will be overwritten. So I found another way to deal with this.
|
||||||
|
|
||||||
|
You see, yt-dlp is not just a command line utility. You can use it as a library to make your own extractors for websites. The way you do that is by creating your own plugins. In my case, I didn't actually want to make a new extractor but somehow extend an array of an already existing one. Not all extractors use this method but since YouTube does, it would work. So I made this file at this location:
|
||||||
|
|
||||||
|
> ~/.config/yt-dlp/plugins/piped/yt_dlp_plugins/extractor/piped.py
|
||||||
|
|
||||||
|
The contents are simple:
|
||||||
|
|
||||||
|
```
|
||||||
|
from yt_dlp.extractor.youtube import YoutubeBaseInfoExtractor, YoutubeIE
|
||||||
|
|
||||||
|
class CustomYoutubeBaseInfoExtractor(YoutubeBaseInfoExtractor):
|
||||||
|
_INVIDIOUS_SITES = YoutubeBaseInfoExtractor._INVIDIOUS_SITES + (
|
||||||
|
r'(?:www\.)?piped\.konsthol\.eu',
|
||||||
|
)
|
||||||
|
|
||||||
|
class PipedKonstholYoutubeIE(YoutubeIE, CustomYoutubeBaseInfoExtractor):
|
||||||
|
_VALID_URL = r'https?://(?:www\.)?piped\.konsthol\.eu/watch\?v=(?P<id>[0-9A-Za-z_-]{11})'
|
||||||
|
IE_NAME = 'piped.konsthol.eu'
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
We import the class that contains the array we need and the youtube extractor. We make a new class in which we provide the one that has the array. We access the array and add a new regex for our domain. Then we make a new class for the extractor, provide the one we just created and the YouTube extractor class and we tell it to work for urls that look like the one we provided. In that way, this pseudo extractor is being activated when we provide a url that looks like this, it extends the actual YouTube extractor and activates that one, only this time it works for our domain too.
|
||||||
|
|
||||||
|
It's amazing what you can do with open source software just by observing how a program works. Now every time someone needs a new domain for an alternative YouTube frontend added, instead of asking the developers to do that, using this simple solution he/she can just add it to the plugin.
|
||||||
|
|
||||||
|
=> https://github.com/yt-dlp/yt-dlp/ yt-dlp GitHub page
|
||||||
|
|
||||||
|
=> /cgi-bin/nimlike/show/log/simple_way_to_extend_yt_dlp-12-01-2025.gmi View likes and comments!
|
||||||
|
|
||||||
|
=> ..
|
||||||
151
log/simple_way_to_extend_yt_dlp-12-01-2025.html
Normal file
151
log/simple_way_to_extend_yt_dlp-12-01-2025.html
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Konsthol</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="robots" content="noindex">
|
||||||
|
<link rel="alternate" type="application/atom+xml" title="RSS Feed" href="/rss.xml">
|
||||||
|
<link rel="stylesheet" href="/css/style.css" >
|
||||||
|
<link rel="shortcut icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png">
|
||||||
|
|
||||||
|
<script>
|
||||||
|
(function(d,t) {
|
||||||
|
var BASE_URL="https://chat.konsthol.eu";
|
||||||
|
var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
|
||||||
|
g.src=BASE_URL+"/packs/js/sdk.js";
|
||||||
|
g.defer = true;
|
||||||
|
g.async = true;
|
||||||
|
s.parentNode.insertBefore(g,s);
|
||||||
|
window.chatwootSettings = {
|
||||||
|
darkMode: "dark"
|
||||||
|
};
|
||||||
|
g.onload=function(){
|
||||||
|
window.chatwootSDK.run({
|
||||||
|
websiteToken: 'rYqPF7TtnospKkLhtjf5LkPy',
|
||||||
|
baseUrl: BASE_URL
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})(document,"script");
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<section>
|
||||||
|
<blockquote>
|
||||||
|
<p>DATE: Sun 12 Jan 2025 15:51 By: konsthol@pm.me</p>
|
||||||
|
</blockquote>
|
||||||
|
<h1 id="simple-way-to-extend-yt-dlp">Simple way to extend yt-dlp</h1>
|
||||||
|
<p>
|
||||||
|
Lots of people use yt-dlp either directly or indirectly through mpv. It’s a
|
||||||
|
powerful tool that acts as a website scraper and it supports thousands of
|
||||||
|
websites. The website its mostly used for is like the name suggests YouTube.
|
||||||
|
Now, YouTube is a great resource but usage through the website is quite
|
||||||
|
unpleasant so lots of people opt out to use alternative frontends like
|
||||||
|
Invidious or Piped. Lots of times you just want to use mpv to stream a YouTube
|
||||||
|
video by providing the link like:
|
||||||
|
</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>mpv https://youtube.com/watch?v=[VideoID]</p>
|
||||||
|
</blockquote>
|
||||||
|
<p>
|
||||||
|
That works like a charm, but what happens when you provide a link of an
|
||||||
|
alternative frontend? Well, it translates it to the aforementioned format in
|
||||||
|
order to work. But there are so many instances of Invidious and Piped, so how
|
||||||
|
does it know what to do? That was my question as well since I use a self
|
||||||
|
hosted Piped instance and it does not recognize the domain. Obviously.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Thankfully, yt-dlp is an open source project so you can actually see what goes
|
||||||
|
on behind the scenes. In my case, I installed it with the Arch Linux package
|
||||||
|
manager and it resides at:
|
||||||
|
</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>/usr/lib/python3.13/site-packages/yt_dlp/</p>
|
||||||
|
</blockquote>
|
||||||
|
<p>
|
||||||
|
The way yt-dlp works is that it has a folder called “extractor” in that path
|
||||||
|
and in that folder there is a python file for each supported website. In
|
||||||
|
YouTube’s case it’s youtube.py. I opened it and I saw this:
|
||||||
|
</p>
|
||||||
|
<pre><code>class YoutubeBaseInfoExtractor(InfoExtractor):
|
||||||
|
"""Provide base functions for Youtube extractors"""
|
||||||
|
|
||||||
|
_RESERVED_NAMES = (
|
||||||
|
r'channel|c|user|playlist|watch|w|v|embed|e|live|watch_popup|clip|'
|
||||||
|
r'shorts|movies|results|search|shared|hashtag|trending|explore|feed|feeds|'
|
||||||
|
r'browse|oembed|get_video_info|iframe_api|s/player|source|'
|
||||||
|
r'storefront|oops|index|account|t/terms|about|upload|signin|logout')
|
||||||
|
|
||||||
|
_PLAYLIST_ID_RE = r'(?:(?:PL|LL|EC|UU|FL|RD|UL|TL|PU|OLAK5uy_)[0-9A-Za-z-_]{10,}|RDMM|WL|LL|LM)'
|
||||||
|
|
||||||
|
# _NETRC_MACHINE = 'youtube'
|
||||||
|
|
||||||
|
# If True it will raise an error if no login info is provided
|
||||||
|
_LOGIN_REQUIRED = False
|
||||||
|
|
||||||
|
_INVIDIOUS_SITES = (
|
||||||
|
# invidious-redirect websites
|
||||||
|
r'(?:www\.)?redirect\.invidious\.io',
|
||||||
|
r'(?:(?:www|dev)\.)?invidio\.us',
|
||||||
|
# Invidious instances taken from https://github.com/iv-org/documentation/blob/master/docs/instances.md
|
||||||
|
r'(?:www\.)?invidious\.pussthecat\.org',
|
||||||
|
r'(?:www\.)?invidious\.zee\.li',
|
||||||
|
[more instances here]
|
||||||
|
)</code></pre>
|
||||||
|
<p>
|
||||||
|
There is a class called YoutubeBaseInfoExtractor that has an array of
|
||||||
|
instances called _INVIDIOUS_SITES that uses a regex to catch every domain
|
||||||
|
there. Now, I saw at the GitHub page of yt-dlp a lot of people asking the
|
||||||
|
maintainers to add more instances on this list. Theoretically you also can
|
||||||
|
just edit the file and add a domain so that it recognizes that one too. But,
|
||||||
|
in my personal opinion it’s never a good idea to edit upstream files because
|
||||||
|
as the program updates your changes will be overwritten. So I found another
|
||||||
|
way to deal with this.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You see, yt-dlp is not just a command line utility. You can use it as a
|
||||||
|
library to make your own extractors for websites. The way you do that is by
|
||||||
|
creating your own plugins. In my case, I didn’t actually want to make a new
|
||||||
|
extractor but somehow extend an array of an already existing one. Not all
|
||||||
|
extractors use this method but since YouTube does, it would work. So I made
|
||||||
|
this file at this location:
|
||||||
|
</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>~/.config/yt-dlp/plugins/piped/yt_dlp_plugins/extractor/piped.py</p>
|
||||||
|
</blockquote>
|
||||||
|
<p>The contents are simple:</p>
|
||||||
|
<pre><code>from yt_dlp.extractor.youtube import YoutubeBaseInfoExtractor, YoutubeIE
|
||||||
|
|
||||||
|
class CustomYoutubeBaseInfoExtractor(YoutubeBaseInfoExtractor):
|
||||||
|
_INVIDIOUS_SITES = YoutubeBaseInfoExtractor._INVIDIOUS_SITES + (
|
||||||
|
r'(?:www\.)?piped\.konsthol\.eu',
|
||||||
|
)
|
||||||
|
|
||||||
|
class PipedKonstholYoutubeIE(YoutubeIE, CustomYoutubeBaseInfoExtractor):
|
||||||
|
_VALID_URL = r'https?://(?:www\.)?piped\.konsthol\.eu/watch\?v=(?P<id>[0-9A-Za-z_-]{11})'
|
||||||
|
IE_NAME = 'piped.konsthol.eu'
|
||||||
|
</code></pre>
|
||||||
|
<p>
|
||||||
|
We import the class that contains the array we need and the youtube extractor.
|
||||||
|
We make a new class in which we provide the one that has the array. We access
|
||||||
|
the array and add a new regex for our domain. Then we make a new class for the
|
||||||
|
extractor, provide the one we just created and the YouTube extractor class and
|
||||||
|
we tell it to work for urls that look like the one we provided. In that way,
|
||||||
|
this pseudo extractor is being activated when we provide a url that looks like
|
||||||
|
this, it extends the actual YouTube extractor and activates that one, only
|
||||||
|
this time it works for our domain too.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
It’s amazing what you can do with open source software just by observing how a
|
||||||
|
program works. Now every time someone needs a new domain for an alternative
|
||||||
|
YouTube frontend added, instead of asking the developers to do that, using
|
||||||
|
this simple solution he/she can just add it to the plugin.
|
||||||
|
</p>
|
||||||
|
<p><a href="https://github.com/yt-dlp/yt-dlp/">yt-dlp GitHub page</a><br /></p>
|
||||||
|
<p><a href="..">..</a></p>
|
||||||
|
<footer>
|
||||||
|
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /><br /></a>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
128
log/simple_way_to_extend_yt_dlp-12-01-2025.txt
Normal file
128
log/simple_way_to_extend_yt_dlp-12-01-2025.txt
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
> DATE: Sun 12 Jan 2025 15:51 By: konsthol@pm.me
|
||||||
|
|
||||||
|
# Simple way to extend yt-dlp
|
||||||
|
|
||||||
|
Lots of people use yt-dlp either directly or indirectly through mpv.
|
||||||
|
It's a powerful tool that acts as a website scraper and it supports
|
||||||
|
thousands of websites. The website its mostly used for is like the
|
||||||
|
name suggests YouTube. Now, YouTube is a great resource but usage
|
||||||
|
through the website is quite unpleasant so lots of people opt out to
|
||||||
|
use alternative frontends like Invidious or Piped. Lots of times you
|
||||||
|
just want to use mpv to stream a YouTube video by providing the link
|
||||||
|
like:
|
||||||
|
|
||||||
|
> mpv https://youtube.com/watch?v=[VideoID]
|
||||||
|
|
||||||
|
That works like a charm, but what happens when you provide a link of
|
||||||
|
an alternative frontend? Well, it translates it to the aforementioned
|
||||||
|
format in order to work. But there are so many instances of Invidious
|
||||||
|
and Piped, so how does it know what to do? That was my question as
|
||||||
|
well since I use a self hosted Piped instance and it does not
|
||||||
|
recognize the domain. Obviously.
|
||||||
|
|
||||||
|
Thankfully, yt-dlp is an open source project so you can actually see
|
||||||
|
what goes on behind the scenes. In my case, I installed it with the
|
||||||
|
Arch Linux package manager and it resides at:
|
||||||
|
|
||||||
|
> /usr/lib/python3.13/site-packages/yt_dlp/
|
||||||
|
|
||||||
|
The way yt-dlp works is that it has a folder called "extractor" in
|
||||||
|
that path and in that folder there is a python file for each
|
||||||
|
supported website. In YouTube's case it's youtube.py. I opened it and
|
||||||
|
I saw this:
|
||||||
|
|
||||||
|
|
||||||
|
class YoutubeBaseInfoExtractor(InfoExtractor):
|
||||||
|
"""Provide base functions for Youtube extractors"""
|
||||||
|
|
||||||
|
_RESERVED_NAMES = (
|
||||||
|
|
||||||
|
r'channel|c|user|playlist|watch|w|v|embed|e|live|watch_popup|clip|'
|
||||||
|
|
||||||
|
r'shorts|movies|results|search|shared|hashtag|trending|explore|feed|fe
|
||||||
|
eds|'
|
||||||
|
r'browse|oembed|get_video_info|iframe_api|s/player|source|'
|
||||||
|
|
||||||
|
r'storefront|oops|index|account|t/terms|about|upload|signin|logout')
|
||||||
|
|
||||||
|
_PLAYLIST_ID_RE =
|
||||||
|
r'(?:(?:PL|LL|EC|UU|FL|RD|UL|TL|PU|OLAK5uy_)[0-9A-Za-z-_]{10,}|RDMM|WL
|
||||||
|
|LL|LM)'
|
||||||
|
|
||||||
|
# _NETRC_MACHINE = 'youtube'
|
||||||
|
|
||||||
|
# If True it will raise an error if no login info is provided
|
||||||
|
_LOGIN_REQUIRED = False
|
||||||
|
|
||||||
|
_INVIDIOUS_SITES = (
|
||||||
|
# invidious-redirect websites
|
||||||
|
r'(?:www\.)?redirect\.invidious\.io',
|
||||||
|
r'(?:(?:www|dev)\.)?invidio\.us',
|
||||||
|
# Invidious instances taken from
|
||||||
|
https://github.com/iv-org/documentation/blob/master/docs/instances.md
|
||||||
|
r'(?:www\.)?invidious\.pussthecat\.org',
|
||||||
|
r'(?:www\.)?invidious\.zee\.li',
|
||||||
|
[more instances here]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
There is a class called YoutubeBaseInfoExtractor that has an array of
|
||||||
|
instances called _INVIDIOUS_SITES that uses a regex to catch every
|
||||||
|
domain there. Now, I saw at the GitHub page of yt-dlp a lot of people
|
||||||
|
asking the maintainers to add more instances on this list.
|
||||||
|
Theoretically you also can just edit the file and add a domain so
|
||||||
|
that it recognizes that one too. But, in my personal opinion it's
|
||||||
|
never a good idea to edit upstream files because as the program
|
||||||
|
updates your changes will be overwritten. So I found another way to
|
||||||
|
deal with this.
|
||||||
|
|
||||||
|
You see, yt-dlp is not just a command line utility. You can use it as
|
||||||
|
a library to make your own extractors for websites. The way you do
|
||||||
|
that is by creating your own plugins. In my case, I didn't actually
|
||||||
|
want to make a new extractor but somehow extend an array of an
|
||||||
|
already existing one. Not all extractors use this method but since
|
||||||
|
YouTube does, it would work. So I made this file at this location:
|
||||||
|
|
||||||
|
> ~/.config/yt-dlp/plugins/piped/yt_dlp_plugins/extractor/piped.py
|
||||||
|
|
||||||
|
The contents are simple:
|
||||||
|
|
||||||
|
|
||||||
|
from yt_dlp.extractor.youtube import YoutubeBaseInfoExtractor,
|
||||||
|
YoutubeIE
|
||||||
|
|
||||||
|
class CustomYoutubeBaseInfoExtractor(YoutubeBaseInfoExtractor):
|
||||||
|
_INVIDIOUS_SITES = YoutubeBaseInfoExtractor._INVIDIOUS_SITES + (
|
||||||
|
r'(?:www\.)?piped\.konsthol\.eu',
|
||||||
|
)
|
||||||
|
|
||||||
|
class PipedKonstholYoutubeIE(YoutubeIE,
|
||||||
|
CustomYoutubeBaseInfoExtractor):
|
||||||
|
_VALID_URL =
|
||||||
|
r'https?://(?:www\.)?piped\.konsthol\.eu/watch\?v=(?P<id>[0-9A-Za-z_-]
|
||||||
|
{11})'
|
||||||
|
IE_NAME = 'piped.konsthol.eu'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
We import the class that contains the array we need and the youtube
|
||||||
|
extractor. We make a new class in which we provide the one that has
|
||||||
|
the array. We access the array and add a new regex for our domain.
|
||||||
|
Then we make a new class for the extractor, provide the one we just
|
||||||
|
created and the YouTube extractor class and we tell it to work for
|
||||||
|
urls that look like the one we provided. In that way, this pseudo
|
||||||
|
extractor is being activated when we provide a url that looks like
|
||||||
|
this, it extends the actual YouTube extractor and activates that one,
|
||||||
|
only this time it works for our domain too.
|
||||||
|
|
||||||
|
It's amazing what you can do with open source software just by
|
||||||
|
observing how a program works. Now every time someone needs a new
|
||||||
|
domain for an alternative YouTube frontend added, instead of asking
|
||||||
|
the developers to do that, using this simple solution he/she can just
|
||||||
|
add it to the plugin.
|
||||||
|
|
||||||
|
yt-dlp GitHub page
|
||||||
|
https://github.com/yt-dlp/yt-dlp/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -31,58 +31,71 @@
|
|||||||
<body>
|
<body>
|
||||||
<section>
|
<section>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>DATE: Thu 19 Dec 2024 18:35 By: konsthol@pm.me</p>
|
<p>DATE: Thu 19 Dec 2024 18:35 By: konsthol@pm.me</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<h1 id="the-magic-of-wake-on-lan">The magic of Wake-On-LAN</h1>
|
<h1 id="the-magic-of-wake-on-lan">The magic of Wake-On-LAN</h1>
|
||||||
<p>Years ago, some good friends of mine gifted me a Raspberry Pi 4 with
|
<p>
|
||||||
2GB of RAM for my birthday. It’s hands down the most thoughtful gift
|
Years ago, some good friends of mine gifted me a Raspberry Pi 4 with 2GB of
|
||||||
I’ve ever received, perfectly matching my hobbies. They were lucky to
|
RAM for my birthday. It’s hands down the most thoughtful gift I’ve ever
|
||||||
even find one during the chip shortage! I initially used it as a VPN
|
received, perfectly matching my hobbies. They were lucky to even find one
|
||||||
server with WireGuard and played around with Pi-hole for network-wide ad
|
during the chip shortage! I initially used it as a VPN server with WireGuard
|
||||||
blocking.</p>
|
and played around with Pi-hole for network-wide ad blocking.
|
||||||
<p>Eventually, I got into cloud computing and started hosting multiple
|
</p>
|
||||||
services on a VPS I rent from MVPS. This VPS, with its 4GB of RAM,
|
<p>
|
||||||
currently runs several of my daily-use services like Gitea, Searx, NTFY,
|
Eventually, I got into cloud computing and started hosting multiple services
|
||||||
and more. Although the Raspberry Pi could theoretically handle these
|
on a VPS I rent from MVPS. This VPS, with its 4GB of RAM, currently runs
|
||||||
services, its 2GB of RAM limited simultaneous operations.</p>
|
several of my daily-use services like Gitea, Searx, NTFY, and more. Although
|
||||||
<p>One day, it hit me: why not use the Raspberry Pi for a simpler
|
the Raspberry Pi could theoretically handle these services, its 2GB of RAM
|
||||||
project like a Wake-On-LAN (WOL) server? It requires minimal resources
|
limited simultaneous operations.
|
||||||
and just needs to stay on and send WOL packets. The Raspberry Pi is
|
</p>
|
||||||
connected via Wi-Fi to the same network as my laptop. Normally, waking
|
<p>
|
||||||
up my laptop with WOL would require an Ethernet cable connection to the
|
One day, it hit me: why not use the Raspberry Pi for a simpler project like a
|
||||||
router, but I connected one end to the Pi and the other to the
|
Wake-On-LAN (WOL) server? It requires minimal resources and just needs to stay
|
||||||
laptop.</p>
|
on and send WOL packets. The Raspberry Pi is connected via Wi-Fi to the same
|
||||||
<p>I started with a simple shell script using etherwake, a command-line
|
network as my laptop. Normally, waking up my laptop with WOL would require an
|
||||||
tool to send WOL packets. After enabling WOL in my laptop’s BIOS and
|
Ethernet cable connection to the router, but I connected one end to the Pi and
|
||||||
confirming it on the OS using ethtool, I could easily wake my laptop
|
the other to the laptop.
|
||||||
remotely using a Termux shortcut on my phone, which SSHed into the
|
</p>
|
||||||
Raspberry Pi to execute the etherwake command.</p>
|
<p>
|
||||||
<p>Though this setup worked perfectly fine, I wanted to make it even
|
I started with a simple shell script using etherwake, a command-line tool to
|
||||||
better. Initially, the Raspberry Pi only ran SSH and executed a command
|
send WOL packets. After enabling WOL in my laptop’s BIOS and confirming it on
|
||||||
to wake my laptop. So it wasn’t really a WOL server. After some
|
the OS using ethtool, I could easily wake my laptop remotely using a Termux
|
||||||
research, I found Flask and created an actual WOL server. This server
|
shortcut on my phone, which SSHed into the Raspberry Pi to execute the
|
||||||
had routes, authentication, logging, rate limits, and more to ensure
|
etherwake command.
|
||||||
robustness and security.</p>
|
</p>
|
||||||
<p>What makes my Flask-based server so cool is its dynamic nature. I can
|
<p>
|
||||||
configure a .env file with multiple device MAC addresses, allowing
|
Though this setup worked perfectly fine, I wanted to make it even better.
|
||||||
numerous routes for different devices. For instance, I have
|
Initially, the Raspberry Pi only ran SSH and executed a command to wake my
|
||||||
LAPTOP_MAC=“itsmac” and DESKTOP_MAC=“itsmac”, enabling me to wake them
|
laptop. So it wasn’t really a WOL server. After some research, I found Flask
|
||||||
via HTTP requests at /wol/laptop and /wol/desktop, respectively.</p>
|
and created an actual WOL server. This server had routes, authentication,
|
||||||
<p>One open-source application that fits my use case is HTTP Shortcuts
|
logging, rate limits, and more to ensure robustness and security.
|
||||||
from F-Droid. After configuring a specific route, I can turn it into a
|
</p>
|
||||||
widget on my home screen. This way, I can wake my laptop up with just a
|
<p>
|
||||||
tap! Plus, I use dynamic DNS, so my Pi is accessible from anywhere.</p>
|
What makes my Flask-based server so cool is its dynamic nature. I can
|
||||||
<p><img
|
configure a .env file with multiple device MAC addresses, allowing numerous
|
||||||
src="/images/pic-selected-19-12-24_19-10-42.png">The project’s
|
routes for different devices. For instance, I have LAPTOP_MAC=“itsmac” and
|
||||||
mascot</a><br /></p>
|
DESKTOP_MAC=“itsmac”, enabling me to wake them via HTTP requests at
|
||||||
<p>I would suggest anyone to take a look at my project’s repo and if
|
/wol/laptop and /wol/desktop, respectively.
|
||||||
they find that it fits their needs, use the setupSingleBinary.sh script
|
</p>
|
||||||
to grab the latest executable. The repo is over at</p>
|
<p>
|
||||||
<p><a
|
One open-source application that fits my use case is HTTP Shortcuts from
|
||||||
href="https://git.konsthol.eu/konsthol/WOL-Ly">WOL-Ly</a><br /></p>
|
F-Droid. After configuring a specific route, I can turn it into a widget on my
|
||||||
|
home screen. This way, I can wake my laptop up with just a tap! Plus, I use
|
||||||
|
dynamic DNS, so my Pi is accessible from anywhere.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<img src="/images/pic-selected-19-12-24_19-10-42.png"><br />The project’s mascot</a
|
||||||
|
><br />
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
I would suggest anyone to take a look at my project’s repo and if they find
|
||||||
|
that it fits their needs, use the setupSingleBinary.sh script to grab the
|
||||||
|
latest executable. The repo is over at
|
||||||
|
</p>
|
||||||
|
<p><a href="https://git.konsthol.eu/konsthol/WOL-Ly">WOL-Ly</a><br /></p>
|
||||||
<p><a href="..">..</a></p>
|
<p><a href="..">..</a></p>
|
||||||
<footer>
|
<footer>
|
||||||
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /></a>
|
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /><br /></a>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -31,37 +31,48 @@
|
|||||||
<body>
|
<body>
|
||||||
<section>
|
<section>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>DATE: Sat 25 Feb 2023 22:42 By: konsthol@pm.me</p>
|
<p>DATE: Sat 25 Feb 2023 22:42 By: konsthol@pm.me</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<h1 id="webcall">WebCall</h1>
|
<h1 id="webcall">WebCall</h1>
|
||||||
<p>One of the simplest ways to host a “telephony” service is to use
|
<p>One of the simplest ways to host a “telephony” service is to use webcall.</p>
|
||||||
webcall.</p>
|
<p>
|
||||||
<p>Like with emails, you can use any webcall server to communicate with
|
Like with emails, you can use any webcall server to communicate with any other
|
||||||
any other webcall server. Meaning that if for example you register a
|
webcall server. Meaning that if for example you register a number with
|
||||||
number with https://timur.mobi/ which is the default public server you
|
https://timur.mobi/ which is the default public server you can still make a
|
||||||
can still make a call to someone who has registered a number with
|
call to someone who has registered a number with https://talk.konsthol.eu if
|
||||||
https://talk.konsthol.eu if you know their number by replacing the
|
you know their number by replacing the server address field in the dialpad
|
||||||
server address field in the dialpad icon.</p>
|
icon.
|
||||||
<p>All calls are encrypted and the server does not have access to the
|
</p>
|
||||||
content of the calls. That is because the server uses webrtc and tries
|
<p>
|
||||||
to make peer to peer connections.</p>
|
All calls are encrypted and the server does not have access to the content of
|
||||||
<p>There is also an integrated TURN server which is used if the peers
|
the calls. That is because the server uses webrtc and tries to make peer to
|
||||||
can’t connect directly but if the connection is made though that then no
|
peer connections.
|
||||||
video transmission is possible. I suspect that this is a limitation of
|
</p>
|
||||||
the TURN server used in webcall because in jitsi meet which uses coturn
|
<p>
|
||||||
instead of pion, it is always possible.</p>
|
There is also an integrated TURN server which is used if the peers can’t
|
||||||
<p>Another differentiation of the two services is that in webcall no
|
connect directly but if the connection is made though that then no video
|
||||||
more than 2 people can join a conversation, which is more similar to how
|
transmission is possible. I suspect that this is a limitation of the TURN
|
||||||
a regular telephone call behaves.</p>
|
server used in webcall because in jitsi meet which uses coturn instead of
|
||||||
<p>Also there is currently no functionality to block a number as far as
|
pion, it is always possible.
|
||||||
I can see but it should be fairly easy to figure out the public ip
|
</p>
|
||||||
address and block it like that.</p>
|
<p>
|
||||||
<p>You should give it a shot and see if it works for you. The source
|
Another differentiation of the two services is that in webcall no more than 2
|
||||||
code is at a link over at</p>
|
people can join a conversation, which is more similar to how a regular
|
||||||
|
telephone call behaves.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Also there is currently no functionality to block a number as far as I can see
|
||||||
|
but it should be fairly easy to figure out the public ip address and block it
|
||||||
|
like that.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You should give it a shot and see if it works for you. The source code is at a
|
||||||
|
link over at
|
||||||
|
</p>
|
||||||
<p><a href="https://timur.mobi">https://timur.mobi</a></p>
|
<p><a href="https://timur.mobi">https://timur.mobi</a></p>
|
||||||
<p><a href="..">..</a></p>
|
<p><a href="..">..</a></p>
|
||||||
<footer>
|
<footer>
|
||||||
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /></a>
|
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /><br /></a>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -3,6 +3,10 @@ Previous Log entries are archived here.
|
|||||||
|
|
||||||
# Logs
|
# Logs
|
||||||
|
|
||||||
|
## 2025
|
||||||
|
|
||||||
|
=> /log/simple_way_to_extend_yt_dlp-12-01-2025.gmi 12-01-2025 - Simple way to extend yt-dlp
|
||||||
|
|
||||||
## 2024
|
## 2024
|
||||||
|
|
||||||
=> /log/the_magic_of_wake_on_lan-19-12-2024.gmi 19-12-2024 - The magic of Wake-On-LAN
|
=> /log/the_magic_of_wake_on_lan-19-12-2024.gmi 19-12-2024 - The magic of Wake-On-LAN
|
||||||
|
|||||||
@@ -33,19 +33,32 @@
|
|||||||
<h1 id="all-log-posts---the-archive">ALL Log Posts - The Archive</h1>
|
<h1 id="all-log-posts---the-archive">ALL Log Posts - The Archive</h1>
|
||||||
<p>Previous Log entries are archived here.</p>
|
<p>Previous Log entries are archived here.</p>
|
||||||
<h1 id="logs">Logs</h1>
|
<h1 id="logs">Logs</h1>
|
||||||
<h2 id="section">2024</h2>
|
<h2 id="section">2025</h2>
|
||||||
<p><a href="/log/the_magic_of_wake_on_lan-19-12-2024.html">19-12-2024 -
|
<p>
|
||||||
The magic of Wake-On-LAN</a><br /></p>
|
<a href="/log/simple_way_to_extend_yt_dlp-12-01-2025.html"
|
||||||
<h2 id="section-1">2023</h2>
|
>12-01-2025 - Simple way to extend yt-dlp</a
|
||||||
<p><a href="/log/webcall-25-02-2023.html">25-02-2023 -
|
><br />
|
||||||
WebCall</a><br /></p>
|
</p>
|
||||||
<h2 id="section-2">2022</h2>
|
<h2 id="section-1">2024</h2>
|
||||||
<p><a
|
<p>
|
||||||
href="/log/choose_wpgtk_over_just_pywal-17-08-2022.html">17-08-2022 -
|
<a href="/log/the_magic_of_wake_on_lan-19-12-2024.html"
|
||||||
wpgtk is just more convenient</a><br /></p>
|
>19-12-2024 - The magic of Wake-On-LAN</a
|
||||||
<h2 id="section-3">2021</h2>
|
><br />
|
||||||
<p><a href="/log/easy_file_sharing-12-09-2021.html">12-09-2021 - Awesome
|
</p>
|
||||||
file sharing tool</a><br /></p>
|
<h2 id="section-2">2023</h2>
|
||||||
|
<p><a href="/log/webcall-25-02-2023.html">25-02-2023 - WebCall</a><br /></p>
|
||||||
|
<h2 id="section-3">2022</h2>
|
||||||
|
<p>
|
||||||
|
<a href="/log/choose_wpgtk_over_just_pywal-17-08-2022.html"
|
||||||
|
>17-08-2022 - wpgtk is just more convenient</a
|
||||||
|
><br />
|
||||||
|
</p>
|
||||||
|
<h2 id="section-4">2021</h2>
|
||||||
|
<p>
|
||||||
|
<a href="/log/easy_file_sharing-12-09-2021.html"
|
||||||
|
>12-09-2021 - Awesome file sharing tool</a
|
||||||
|
><br />
|
||||||
|
</p>
|
||||||
<p><a href="..">..</a></p>
|
<p><a href="..">..</a></p>
|
||||||
<footer>
|
<footer>
|
||||||
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /></a>
|
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /></a>
|
||||||
|
|||||||
@@ -3,6 +3,12 @@ Previous Log entries are archived here.
|
|||||||
|
|
||||||
# Logs
|
# Logs
|
||||||
|
|
||||||
|
## 2025
|
||||||
|
|
||||||
|
12-01-2025 - Simple way to extend yt-dlp
|
||||||
|
1simple_way_to_extend_yt_dlp-12-01-2025 /log/simple_way_to_extend_yt_dlp-12-01-2025.txt konsthol.eu 70
|
||||||
|
|
||||||
|
|
||||||
## 2024
|
## 2024
|
||||||
|
|
||||||
19-12-2024 - The magic of Wake-On-LAN
|
19-12-2024 - The magic of Wake-On-LAN
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
# Microblogging 📔
|
# Microblogging 📔
|
||||||
A place for random thoughts. Always random ☕
|
A place for random thoughts. Always random ☕
|
||||||
|
|
||||||
|
## Sat 28 Dec 2024 15:36 EET
|
||||||
|
Guess who decided it's time to join LinkedIn 🙃
|
||||||
|
|
||||||
## Wed 25 Dec 2024 15:46 EET
|
## Wed 25 Dec 2024 15:46 EET
|
||||||
A week ago I had never played around with cgi-scripts and here I am, having modified nim scripts to give my blogs a like and comment system 🤷
|
A week ago I had never played around with cgi-scripts and here I am, having modified nim scripts to give my blogs a like and comment system 🤷
|
||||||
|
|
||||||
|
|||||||
@@ -32,28 +32,36 @@
|
|||||||
<section>
|
<section>
|
||||||
<h1 id="microblogging">Microblogging 📔</h1>
|
<h1 id="microblogging">Microblogging 📔</h1>
|
||||||
<p>A place for random thoughts. Always random ☕</p>
|
<p>A place for random thoughts. Always random ☕</p>
|
||||||
|
<h2 id="sat-28-dec-2024-1536-eet">Sat 28 Dec 2024 15:36 EET</h2>
|
||||||
|
<p>Guess who decided it’s time to join LinkedIn 🙃</p>
|
||||||
<h2 id="wed-25-dec-2024-1546-eet">Wed 25 Dec 2024 15:46 EET</h2>
|
<h2 id="wed-25-dec-2024-1546-eet">Wed 25 Dec 2024 15:46 EET</h2>
|
||||||
<p>A week ago I had never played around with cgi-scripts and here I am,
|
<p>
|
||||||
having modified nim scripts to give my blogs a like and comment system
|
A week ago I had never played around with cgi-scripts and here I am, having
|
||||||
🤷</p>
|
modified nim scripts to give my blogs a like and comment system 🤷
|
||||||
|
</p>
|
||||||
<h2 id="tue-28-feb-2023-2242-eet">Tue 28 Feb 2023 22:42 EET</h2>
|
<h2 id="tue-28-feb-2023-2242-eet">Tue 28 Feb 2023 22:42 EET</h2>
|
||||||
<p>With the latest additions to the site it is now possible to give me a
|
<p>
|
||||||
call or text me without the need for any authentication 😎</p>
|
With the latest additions to the site it is now possible to give me a call or
|
||||||
|
text me without the need for any authentication 😎
|
||||||
|
</p>
|
||||||
<h2 id="wed-17-aug-2022-0147-eest">Wed 17 Aug 2022 01:47 EEST</h2>
|
<h2 id="wed-17-aug-2022-0147-eest">Wed 17 Aug 2022 01:47 EEST</h2>
|
||||||
<p>Made another little post after almost a year 🥳</p>
|
<p>Made another little post after almost a year 🥳</p>
|
||||||
<h2 id="thu-02-sep-2021-2223-eest">Thu 02 Sep 2021 22:23 EEST</h2>
|
<h2 id="thu-02-sep-2021-2223-eest">Thu 02 Sep 2021 22:23 EEST</h2>
|
||||||
<p>Just discovered how to have new lines in zsh 🤨 Like this</p>
|
<p>Just discovered how to have new lines in zsh 🤨 Like this</p>
|
||||||
<h2 id="thu-02-sep-2021-2051-eest">Thu 02 Sep 2021 20:51 EEST</h2>
|
<h2 id="thu-02-sep-2021-2051-eest">Thu 02 Sep 2021 20:51 EEST</h2>
|
||||||
<p>Images should work I guess 🤔<br />
|
<p>
|
||||||
<a
|
Images should work I guess 🤔<br />
|
||||||
href="../images/pic-selected-02-09-21_19-50-18.png">Image</a><br /></p>
|
<a href="../images/pic-selected-02-09-21_19-50-18.png">Image</a><br />
|
||||||
|
</p>
|
||||||
<h2 id="mon-30-aug-2021-1549-eest">Mon 30 Aug 2021 15:49 EEST</h2>
|
<h2 id="mon-30-aug-2021-1549-eest">Mon 30 Aug 2021 15:49 EEST</h2>
|
||||||
<p>Ready to study 🖊️</p>
|
<p>Ready to study 🖊️</p>
|
||||||
<h2 id="sun-29-aug-2021-0548-eest">Sun 29 Aug 2021 05:48 EEST</h2>
|
<h2 id="sun-29-aug-2021-0548-eest">Sun 29 Aug 2021 05:48 EEST</h2>
|
||||||
<p>Showing miniblog to Tzella. She finds it cute 😝</p>
|
<p>Showing miniblog to Tzella. She finds it cute 😝</p>
|
||||||
<h2 id="sun-29-aug-2021-0022-eest">Sun 29 Aug 2021 00:22 EEST</h2>
|
<h2 id="sun-29-aug-2021-0022-eest">Sun 29 Aug 2021 00:22 EEST</h2>
|
||||||
<p>That lace script Drew wrote works like a charm. Haven’t tested it
|
<p>
|
||||||
with othet people’s tiny logs but so far so good 💪</p>
|
That lace script Drew wrote works like a charm. Haven’t tested it with othet
|
||||||
|
people’s tiny logs but so far so good 💪
|
||||||
|
</p>
|
||||||
<h2 id="wed-25-aug-2021-1439-eest">Wed 25 Aug 2021 14:39 EEST</h2>
|
<h2 id="wed-25-aug-2021-1439-eest">Wed 25 Aug 2021 14:39 EEST</h2>
|
||||||
<p>Drew’s script now works for me too</p>
|
<p>Drew’s script now works for me too</p>
|
||||||
<h2 id="wed-25-aug-2021-1301-eest">Wed 25 Aug 2021 13:01 EEST</h2>
|
<h2 id="wed-25-aug-2021-1301-eest">Wed 25 Aug 2021 13:01 EEST</h2>
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
# Microblogging 📔
|
# Microblogging 📔
|
||||||
A place for random thoughts. Always random ☕
|
A place for random thoughts. Always random ☕
|
||||||
|
|
||||||
|
## Sat 28 Dec 2024 15:36 EET
|
||||||
|
Guess who decided it's time to join LinkedIn 🙃
|
||||||
|
|
||||||
## Wed 25 Dec 2024 15:46 EET
|
## Wed 25 Dec 2024 15:46 EET
|
||||||
A week ago I had never played around with cgi-scripts and here I am,
|
A week ago I had never played around with cgi-scripts and here I am,
|
||||||
having modified nim scripts to give my blogs a like and comment
|
having modified nim scripts to give my blogs a like and comment
|
||||||
|
|||||||
423
rss.xml
423
rss.xml
@@ -6,59 +6,192 @@
|
|||||||
<link>https://konsthol.eu/rss.xml</link>
|
<link>https://konsthol.eu/rss.xml</link>
|
||||||
<atom:link href="https://konsthol.eu/rss.xml" rel="self" type="application/rss+xml"/>
|
<atom:link href="https://konsthol.eu/rss.xml" rel="self" type="application/rss+xml"/>
|
||||||
|
|
||||||
|
<item>
|
||||||
|
<title>Simple way to extend yt-dlp</title>
|
||||||
|
<link>https://konsthol.eu/log/simple_way_to_extend_yt_dlp-12-01-2025.html</link>
|
||||||
|
<pubDate>Sun, 12 Jan 2025</pubDate>
|
||||||
|
<description><![CDATA[<blockquote>
|
||||||
|
<p>DATE: Sun 12 Jan 2025 15:51 By: konsthol@pm.me</p>
|
||||||
|
</blockquote>
|
||||||
|
<h1 id="simple-way-to-extend-yt-dlp">Simple way to extend yt-dlp</h1>
|
||||||
|
<p>
|
||||||
|
Lots of people use yt-dlp either directly or indirectly through mpv. It’s a
|
||||||
|
powerful tool that acts as a website scraper and it supports thousands of
|
||||||
|
websites. The website its mostly used for is like the name suggests YouTube.
|
||||||
|
Now, YouTube is a great resource but usage through the website is quite
|
||||||
|
unpleasant so lots of people opt out to use alternative frontends like
|
||||||
|
Invidious or Piped. Lots of times you just want to use mpv to stream a YouTube
|
||||||
|
video by providing the link like:
|
||||||
|
</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>mpv https://youtube.com/watch?v=[VideoID]</p>
|
||||||
|
</blockquote>
|
||||||
|
<p>
|
||||||
|
That works like a charm, but what happens when you provide a link of an
|
||||||
|
alternative frontend? Well, it translates it to the aforementioned format in
|
||||||
|
order to work. But there are so many instances of Invidious and Piped, so how
|
||||||
|
does it know what to do? That was my question as well since I use a self
|
||||||
|
hosted Piped instance and it does not recognize the domain. Obviously.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Thankfully, yt-dlp is an open source project so you can actually see what goes
|
||||||
|
on behind the scenes. In my case, I installed it with the Arch Linux package
|
||||||
|
manager and it resides at:
|
||||||
|
</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>/usr/lib/python3.13/site-packages/yt_dlp/</p>
|
||||||
|
</blockquote>
|
||||||
|
<p>
|
||||||
|
The way yt-dlp works is that it has a folder called “extractor” in that path
|
||||||
|
and in that folder there is a python file for each supported website. In
|
||||||
|
YouTube’s case it’s youtube.py. I opened it and I saw this:
|
||||||
|
</p>
|
||||||
|
<pre><code>class YoutubeBaseInfoExtractor(InfoExtractor):
|
||||||
|
"""Provide base functions for Youtube extractors"""
|
||||||
|
|
||||||
|
_RESERVED_NAMES = (
|
||||||
|
r'channel|c|user|playlist|watch|w|v|embed|e|live|watch_popup|clip|'
|
||||||
|
r'shorts|movies|results|search|shared|hashtag|trending|explore|feed|feeds|'
|
||||||
|
r'browse|oembed|get_video_info|iframe_api|s/player|source|'
|
||||||
|
r'storefront|oops|index|account|t/terms|about|upload|signin|logout')
|
||||||
|
|
||||||
|
_PLAYLIST_ID_RE = r'(?:(?:PL|LL|EC|UU|FL|RD|UL|TL|PU|OLAK5uy_)[0-9A-Za-z-_]{10,}|RDMM|WL|LL|LM)'
|
||||||
|
|
||||||
|
# _NETRC_MACHINE = 'youtube'
|
||||||
|
|
||||||
|
# If True it will raise an error if no login info is provided
|
||||||
|
_LOGIN_REQUIRED = False
|
||||||
|
|
||||||
|
_INVIDIOUS_SITES = (
|
||||||
|
# invidious-redirect websites
|
||||||
|
r'(?:www\.)?redirect\.invidious\.io',
|
||||||
|
r'(?:(?:www|dev)\.)?invidio\.us',
|
||||||
|
# Invidious instances taken from https://github.com/iv-org/documentation/blob/master/docs/instances.md
|
||||||
|
r'(?:www\.)?invidious\.pussthecat\.org',
|
||||||
|
r'(?:www\.)?invidious\.zee\.li',
|
||||||
|
[more instances here]
|
||||||
|
)</code></pre>
|
||||||
|
<p>
|
||||||
|
There is a class called YoutubeBaseInfoExtractor that has an array of
|
||||||
|
instances called _INVIDIOUS_SITES that uses a regex to catch every domain
|
||||||
|
there. Now, I saw at the GitHub page of yt-dlp a lot of people asking the
|
||||||
|
maintainers to add more instances on this list. Theoretically you also can
|
||||||
|
just edit the file and add a domain so that it recognizes that one too. But,
|
||||||
|
in my personal opinion it’s never a good idea to edit upstream files because
|
||||||
|
as the program updates your changes will be overwritten. So I found another
|
||||||
|
way to deal with this.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You see, yt-dlp is not just a command line utility. You can use it as a
|
||||||
|
library to make your own extractors for websites. The way you do that is by
|
||||||
|
creating your own plugins. In my case, I didn’t actually want to make a new
|
||||||
|
extractor but somehow extend an array of an already existing one. Not all
|
||||||
|
extractors use this method but since YouTube does, it would work. So I made
|
||||||
|
this file at this location:
|
||||||
|
</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>~/.config/yt-dlp/plugins/piped/yt_dlp_plugins/extractor/piped.py</p>
|
||||||
|
</blockquote>
|
||||||
|
<p>The contents are simple:</p>
|
||||||
|
<pre><code>from yt_dlp.extractor.youtube import YoutubeBaseInfoExtractor, YoutubeIE
|
||||||
|
|
||||||
|
class CustomYoutubeBaseInfoExtractor(YoutubeBaseInfoExtractor):
|
||||||
|
_INVIDIOUS_SITES = YoutubeBaseInfoExtractor._INVIDIOUS_SITES + (
|
||||||
|
r'(?:www\.)?piped\.konsthol\.eu',
|
||||||
|
)
|
||||||
|
|
||||||
|
class PipedKonstholYoutubeIE(YoutubeIE, CustomYoutubeBaseInfoExtractor):
|
||||||
|
_VALID_URL = r'https?://(?:www\.)?piped\.konsthol\.eu/watch\?v=(?P<id>[0-9A-Za-z_-]{11})'
|
||||||
|
IE_NAME = 'piped.konsthol.eu'
|
||||||
|
</code></pre>
|
||||||
|
<p>
|
||||||
|
We import the class that contains the array we need and the youtube extractor.
|
||||||
|
We make a new class in which we provide the one that has the array. We access
|
||||||
|
the array and add a new regex for our domain. Then we make a new class for the
|
||||||
|
extractor, provide the one we just created and the YouTube extractor class and
|
||||||
|
we tell it to work for urls that look like the one we provided. In that way,
|
||||||
|
this pseudo extractor is being activated when we provide a url that looks like
|
||||||
|
this, it extends the actual YouTube extractor and activates that one, only
|
||||||
|
this time it works for our domain too.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
It’s amazing what you can do with open source software just by observing how a
|
||||||
|
program works. Now every time someone needs a new domain for an alternative
|
||||||
|
YouTube frontend added, instead of asking the developers to do that, using
|
||||||
|
this simple solution he/she can just add it to the plugin.
|
||||||
|
</p>
|
||||||
|
<p><a href="https://github.com/yt-dlp/yt-dlp/">yt-dlp GitHub page</a><br /></p>
|
||||||
|
<p><a href="..">..</a></p>]]></description>
|
||||||
|
</item>
|
||||||
|
|
||||||
|
|
||||||
<item>
|
<item>
|
||||||
<title>The magic of Wake-On-LAN</title>
|
<title>The magic of Wake-On-LAN</title>
|
||||||
<link>https://konsthol.eu/log/the_magic_of_wake_on_lan-19-12-2024.html</link>
|
<link>https://konsthol.eu/log/the_magic_of_wake_on_lan-19-12-2024.html</link>
|
||||||
<pubDate>Thu, 19 Dec 2024</pubDate>
|
<pubDate>Thu, 19 Dec 2024</pubDate>
|
||||||
<description><![CDATA[<blockquote>
|
<description><![CDATA[<blockquote>
|
||||||
<p>DATE: Thu 19 Dec 2024 18:35 By: konsthol@pm.me</p>
|
<p>DATE: Thu 19 Dec 2024 18:35 By: konsthol@pm.me</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<h1 id="the-magic-of-wake-on-lan">The magic of Wake-On-LAN</h1>
|
<h1 id="the-magic-of-wake-on-lan">The magic of Wake-On-LAN</h1>
|
||||||
<p>Years ago, some good friends of mine gifted me a Raspberry Pi 4 with
|
<p>
|
||||||
2GB of RAM for my birthday. It’s hands down the most thoughtful gift
|
Years ago, some good friends of mine gifted me a Raspberry Pi 4 with 2GB of
|
||||||
I’ve ever received, perfectly matching my hobbies. They were lucky to
|
RAM for my birthday. It’s hands down the most thoughtful gift I’ve ever
|
||||||
even find one during the chip shortage! I initially used it as a VPN
|
received, perfectly matching my hobbies. They were lucky to even find one
|
||||||
server with WireGuard and played around with Pi-hole for network-wide ad
|
during the chip shortage! I initially used it as a VPN server with WireGuard
|
||||||
blocking.</p>
|
and played around with Pi-hole for network-wide ad blocking.
|
||||||
<p>Eventually, I got into cloud computing and started hosting multiple
|
</p>
|
||||||
services on a VPS I rent from MVPS. This VPS, with its 4GB of RAM,
|
<p>
|
||||||
currently runs several of my daily-use services like Gitea, Searx, NTFY,
|
Eventually, I got into cloud computing and started hosting multiple services
|
||||||
and more. Although the Raspberry Pi could theoretically handle these
|
on a VPS I rent from MVPS. This VPS, with its 4GB of RAM, currently runs
|
||||||
services, its 2GB of RAM limited simultaneous operations.</p>
|
several of my daily-use services like Gitea, Searx, NTFY, and more. Although
|
||||||
<p>One day, it hit me: why not use the Raspberry Pi for a simpler
|
the Raspberry Pi could theoretically handle these services, its 2GB of RAM
|
||||||
project like a Wake-On-LAN (WOL) server? It requires minimal resources
|
limited simultaneous operations.
|
||||||
and just needs to stay on and send WOL packets. The Raspberry Pi is
|
</p>
|
||||||
connected via Wi-Fi to the same network as my laptop. Normally, waking
|
<p>
|
||||||
up my laptop with WOL would require an Ethernet cable connection to the
|
One day, it hit me: why not use the Raspberry Pi for a simpler project like a
|
||||||
router, but I connected one end to the Pi and the other to the
|
Wake-On-LAN (WOL) server? It requires minimal resources and just needs to stay
|
||||||
laptop.</p>
|
on and send WOL packets. The Raspberry Pi is connected via Wi-Fi to the same
|
||||||
<p>I started with a simple shell script using etherwake, a command-line
|
network as my laptop. Normally, waking up my laptop with WOL would require an
|
||||||
tool to send WOL packets. After enabling WOL in my laptop’s BIOS and
|
Ethernet cable connection to the router, but I connected one end to the Pi and
|
||||||
confirming it on the OS using ethtool, I could easily wake my laptop
|
the other to the laptop.
|
||||||
remotely using a Termux shortcut on my phone, which SSHed into the
|
</p>
|
||||||
Raspberry Pi to execute the etherwake command.</p>
|
<p>
|
||||||
<p>Though this setup worked perfectly fine, I wanted to make it even
|
I started with a simple shell script using etherwake, a command-line tool to
|
||||||
better. Initially, the Raspberry Pi only ran SSH and executed a command
|
send WOL packets. After enabling WOL in my laptop’s BIOS and confirming it on
|
||||||
to wake my laptop. So it wasn’t really a WOL server. After some
|
the OS using ethtool, I could easily wake my laptop remotely using a Termux
|
||||||
research, I found Flask and created an actual WOL server. This server
|
shortcut on my phone, which SSHed into the Raspberry Pi to execute the
|
||||||
had routes, authentication, logging, rate limits, and more to ensure
|
etherwake command.
|
||||||
robustness and security.</p>
|
</p>
|
||||||
<p>What makes my Flask-based server so cool is its dynamic nature. I can
|
<p>
|
||||||
configure a .env file with multiple device MAC addresses, allowing
|
Though this setup worked perfectly fine, I wanted to make it even better.
|
||||||
numerous routes for different devices. For instance, I have
|
Initially, the Raspberry Pi only ran SSH and executed a command to wake my
|
||||||
LAPTOP_MAC=“itsmac” and DESKTOP_MAC=“itsmac”, enabling me to wake them
|
laptop. So it wasn’t really a WOL server. After some research, I found Flask
|
||||||
via HTTP requests at /wol/laptop and /wol/desktop, respectively.</p>
|
and created an actual WOL server. This server had routes, authentication,
|
||||||
<p>One open-source application that fits my use case is HTTP Shortcuts
|
logging, rate limits, and more to ensure robustness and security.
|
||||||
from F-Droid. After configuring a specific route, I can turn it into a
|
</p>
|
||||||
widget on my home screen. This way, I can wake my laptop up with just a
|
<p>
|
||||||
tap! Plus, I use dynamic DNS, so my Pi is accessible from anywhere.</p>
|
What makes my Flask-based server so cool is its dynamic nature. I can
|
||||||
<p><a href="/images/pic-selected-19-12-24_19-10-42.png">The project’s
|
configure a .env file with multiple device MAC addresses, allowing numerous
|
||||||
mascot</a><br /></p>
|
routes for different devices. For instance, I have LAPTOP_MAC=“itsmac” and
|
||||||
<p>I would suggest anyone to take a look at my project’s repo and if
|
DESKTOP_MAC=“itsmac”, enabling me to wake them via HTTP requests at
|
||||||
they find that it fits their needs, use the setupSingleBinary.sh script
|
/wol/laptop and /wol/desktop, respectively.
|
||||||
to grab the latest executable. The repo is over at</p>
|
</p>
|
||||||
<p><a
|
<p>
|
||||||
href="https://git.konsthol.eu/konsthol/WOL-Ly">WOL-Ly</a><br /></p>
|
One open-source application that fits my use case is HTTP Shortcuts from
|
||||||
|
F-Droid. After configuring a specific route, I can turn it into a widget on my
|
||||||
|
home screen. This way, I can wake my laptop up with just a tap! Plus, I use
|
||||||
|
dynamic DNS, so my Pi is accessible from anywhere.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a href="/images/pic-selected-19-12-24_19-10-42.png">The project’s mascot</a
|
||||||
|
><br />
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
I would suggest anyone to take a look at my project’s repo and if they find
|
||||||
|
that it fits their needs, use the setupSingleBinary.sh script to grab the
|
||||||
|
latest executable. The repo is over at
|
||||||
|
</p>
|
||||||
|
<p><a href="https://git.konsthol.eu/konsthol/WOL-Ly">WOL-Ly</a><br /></p>
|
||||||
<p><a href="..">..</a></p>]]></description>
|
<p><a href="..">..</a></p>]]></description>
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
@@ -68,33 +201,44 @@ href="https://git.konsthol.eu/konsthol/WOL-Ly">WOL-Ly</a><br /></p>
|
|||||||
<link>https://konsthol.eu/log/webcall-25-02-2023.html</link>
|
<link>https://konsthol.eu/log/webcall-25-02-2023.html</link>
|
||||||
<pubDate>Sat, 25 Feb 2023</pubDate>
|
<pubDate>Sat, 25 Feb 2023</pubDate>
|
||||||
<description><![CDATA[<blockquote>
|
<description><![CDATA[<blockquote>
|
||||||
<p>DATE: Sat 25 Feb 2023 22:42 By: konsthol@pm.me</p>
|
<p>DATE: Sat 25 Feb 2023 22:42 By: konsthol@pm.me</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<h1 id="webcall">WebCall</h1>
|
<h1 id="webcall">WebCall</h1>
|
||||||
<p>One of the simplest ways to host a “telephony” service is to use
|
<p>One of the simplest ways to host a “telephony” service is to use webcall.</p>
|
||||||
webcall.</p>
|
<p>
|
||||||
<p>Like with emails, you can use any webcall server to communicate with
|
Like with emails, you can use any webcall server to communicate with any other
|
||||||
any other webcall server. Meaning that if for example you register a
|
webcall server. Meaning that if for example you register a number with
|
||||||
number with https://timur.mobi/ which is the default public server you
|
https://timur.mobi/ which is the default public server you can still make a
|
||||||
can still make a call to someone who has registered a number with
|
call to someone who has registered a number with https://talk.konsthol.eu if
|
||||||
https://talk.konsthol.eu if you know their number by replacing the
|
you know their number by replacing the server address field in the dialpad
|
||||||
server address field in the dialpad icon.</p>
|
icon.
|
||||||
<p>All calls are encrypted and the server does not have access to the
|
</p>
|
||||||
content of the calls. That is because the server uses webrtc and tries
|
<p>
|
||||||
to make peer to peer connections.</p>
|
All calls are encrypted and the server does not have access to the content of
|
||||||
<p>There is also an integrated TURN server which is used if the peers
|
the calls. That is because the server uses webrtc and tries to make peer to
|
||||||
can’t connect directly but if the connection is made though that then no
|
peer connections.
|
||||||
video transmission is possible. I suspect that this is a limitation of
|
</p>
|
||||||
the TURN server used in webcall because in jitsi meet which uses coturn
|
<p>
|
||||||
instead of pion, it is always possible.</p>
|
There is also an integrated TURN server which is used if the peers can’t
|
||||||
<p>Another differentiation of the two services is that in webcall no
|
connect directly but if the connection is made though that then no video
|
||||||
more than 2 people can join a conversation, which is more similar to how
|
transmission is possible. I suspect that this is a limitation of the TURN
|
||||||
a regular telephone call behaves.</p>
|
server used in webcall because in jitsi meet which uses coturn instead of
|
||||||
<p>Also there is currently no functionality to block a number as far as
|
pion, it is always possible.
|
||||||
I can see but it should be fairly easy to figure out the public ip
|
</p>
|
||||||
address and block it like that.</p>
|
<p>
|
||||||
<p>You should give it a shot and see if it works for you. The source
|
Another differentiation of the two services is that in webcall no more than 2
|
||||||
code is at a link over at</p>
|
people can join a conversation, which is more similar to how a regular
|
||||||
|
telephone call behaves.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Also there is currently no functionality to block a number as far as I can see
|
||||||
|
but it should be fairly easy to figure out the public ip address and block it
|
||||||
|
like that.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You should give it a shot and see if it works for you. The source code is at a
|
||||||
|
link over at
|
||||||
|
</p>
|
||||||
<p><a href="https://timur.mobi">https://timur.mobi</a></p>
|
<p><a href="https://timur.mobi">https://timur.mobi</a></p>
|
||||||
<p><a href="..">..</a></p>]]></description>
|
<p><a href="..">..</a></p>]]></description>
|
||||||
</item>
|
</item>
|
||||||
@@ -105,32 +249,42 @@ code is at a link over at</p>
|
|||||||
<link>https://konsthol.eu/log/choose_wpgtk_over_just_pywal-17-08-2022.html</link>
|
<link>https://konsthol.eu/log/choose_wpgtk_over_just_pywal-17-08-2022.html</link>
|
||||||
<pubDate>Wed, 17 Aug 2022</pubDate>
|
<pubDate>Wed, 17 Aug 2022</pubDate>
|
||||||
<description><![CDATA[<blockquote>
|
<description><![CDATA[<blockquote>
|
||||||
<p>DATE: Wed 17 Aug 2022 00:09 By: konsthol@pm.me</p>
|
<p>DATE: Wed 17 Aug 2022 00:09 By: konsthol@pm.me</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<h1 id="wpgtk-is-just-more-convenient">wpgtk is just more
|
<h1 id="wpgtk-is-just-more-convenient">wpgtk is just more convenient</h1>
|
||||||
convenient</h1>
|
<p>
|
||||||
<p>Pywal is a simple KISS principled python application that extracts
|
Pywal is a simple KISS principled python application that extracts colors from
|
||||||
colors from an image and creates a color pallete to theme different
|
an image and creates a color pallete to theme different programs
|
||||||
programs</p>
|
</p>
|
||||||
<p>By default there are some templates that are stored in its .cache
|
<p>
|
||||||
directory and there is an option to create new templates in its .config
|
By default there are some templates that are stored in its .cache directory
|
||||||
directory.</p>
|
and there is an option to create new templates in its .config directory.
|
||||||
<p>I found it to be simpler to create every template with wpgtk and
|
</p>
|
||||||
store it in its templates folder in .config because there it also
|
<p>
|
||||||
utilizes symlinks to its respective files and thus you can have every
|
I found it to be simpler to create every template with wpgtk and store it in
|
||||||
program’s file to manage in one place.</p>
|
its templates folder in .config because there it also utilizes symlinks to its
|
||||||
<p>Moreover wpgtk conveniently stores each created colorscheme in a
|
respective files and thus you can have every program’s file to manage in one
|
||||||
schemes folder in .config and along with that every wallpaper used as a
|
place.
|
||||||
symlink to the actual wallpaper in a wallpapers folder.</p>
|
</p>
|
||||||
<p>It also has a gui interface but I never really found a use for it as
|
<p>
|
||||||
one can easily perform every needed action using just the cli.</p>
|
Moreover wpgtk conveniently stores each created colorscheme in a schemes
|
||||||
<p>After creating a script to be run after every use of the program to
|
folder in .config and along with that every wallpaper used as a symlink to the
|
||||||
theme application that need third party scripts like telegram and
|
actual wallpaper in a wallpapers folder.
|
||||||
qutebrowser the process of switching colorschemes on the fly becomes
|
</p>
|
||||||
easy as pie and fast as fuck 🤫</p>
|
<p>
|
||||||
<p>Just give it a shot! Maybe I’ll upload my postWPG script in my gitea
|
It also has a gui interface but I never really found a use for it as one can
|
||||||
instance sometime soon and create an actual tutorial on how to use
|
easily perform every needed action using just the cli.
|
||||||
wpgtk</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
After creating a script to be run after every use of the program to theme
|
||||||
|
application that need third party scripts like telegram and qutebrowser the
|
||||||
|
process of switching colorschemes on the fly becomes easy as pie and fast as
|
||||||
|
fuck 🤫
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Just give it a shot! Maybe I’ll upload my postWPG script in my gitea instance
|
||||||
|
sometime soon and create an actual tutorial on how to use wpgtk
|
||||||
|
</p>
|
||||||
<p><a href="..">..</a></p>]]></description>
|
<p><a href="..">..</a></p>]]></description>
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
@@ -140,49 +294,62 @@ wpgtk</p>
|
|||||||
<link>https://konsthol.eu/log/easy_file_sharing-12-09-2021.html</link>
|
<link>https://konsthol.eu/log/easy_file_sharing-12-09-2021.html</link>
|
||||||
<pubDate>Sun, 12 Sep 2021</pubDate>
|
<pubDate>Sun, 12 Sep 2021</pubDate>
|
||||||
<description><![CDATA[<blockquote>
|
<description><![CDATA[<blockquote>
|
||||||
<p>DATE: Sun 12 Sep 2021 00:53 By: konsthol@pm.me</p>
|
<p>DATE: Sun 12 Sep 2021 00:53 By: konsthol@pm.me</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<h1 id="awesome-file-sharing-tool">Awesome file sharing tool</h1>
|
<h1 id="awesome-file-sharing-tool">Awesome file sharing tool</h1>
|
||||||
<p>Croc is one of the best easy to use file sharing cli tools I came
|
<p>
|
||||||
across and only recently discovered how easy it can be to self host your
|
Croc is one of the best easy to use file sharing cli tools I came across and
|
||||||
own relay.</p>
|
only recently discovered how easy it can be to self host your own relay.
|
||||||
<p>Croc as far as I understand needs an intermediary to staple as it
|
</p>
|
||||||
says the connection between two computers. If I grasp the concept
|
<p>
|
||||||
correctly if two computers can both connect to a third one then a
|
Croc as far as I understand needs an intermediary to staple as it says the
|
||||||
connection between them can be established. The files sent over don’t
|
connection between two computers. If I grasp the concept correctly if two
|
||||||
get first uploaded to the third one and then downloaded to the second
|
computers can both connect to a third one then a connection between them can
|
||||||
but somehow get uploaded and downloaded simultaneously.</p>
|
be established. The files sent over don’t get first uploaded to the third one
|
||||||
<p>I’ll have to further read about that but in short if you have a
|
and then downloaded to the second but somehow get uploaded and downloaded
|
||||||
computer like a server with a static ip that is easily accessible from
|
simultaneously.
|
||||||
the internet then because of the great job the author did you can host a
|
</p>
|
||||||
relay simply by typing the command</p>
|
<p>
|
||||||
|
I’ll have to further read about that but in short if you have a computer like
|
||||||
|
a server with a static ip that is easily accessible from the internet then
|
||||||
|
because of the great job the author did you can host a relay simply by typing
|
||||||
|
the command
|
||||||
|
</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>croc relay</p>
|
<p>croc relay</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>which will by default use the ports 9009-9013 but you can specify
|
<p>
|
||||||
your own with the –ports arguement like</p>
|
which will by default use the ports 9009-9013 but you can specify your own
|
||||||
|
with the –ports arguement like
|
||||||
|
</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>croc relay –ports 1111,1112</p>
|
<p>croc relay –ports 1111,1112</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>Then if you make that into a systemd service (which I won’t be
|
<p>
|
||||||
covering just yet cause I don’t really understand them and only make
|
Then if you make that into a systemd service (which I won’t be covering just
|
||||||
them by copy pasting basic templates 😐) it’s basically a set and forget
|
yet cause I don’t really understand them and only make them by copy pasting
|
||||||
kind of thing and you can now send files to anyone in any operating
|
basic templates 😐) it’s basically a set and forget kind of thing and you can
|
||||||
system by using croc by typing</p>
|
now send files to anyone in any operating system by using croc by typing
|
||||||
|
</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>croc –relay “your.domain:9009” send [file]</p>
|
<p>croc –relay “your.domain:9009” send [file]</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>and the recipient can download it by typing</p>
|
<p>and the recipient can download it by typing</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<p>croc –relay “your.domain:9009” [code]</p>
|
<p>croc –relay “your.domain:9009” [code]</p>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<p>This is super useful cause there was a time when the public instance
|
<p>
|
||||||
was down and I couldn’t send files when it was just so easy to not be
|
This is super useful cause there was a time when the public instance was down
|
||||||
dependent on the public instance in the first place.</p>
|
and I couldn’t send files when it was just so easy to not be dependent on the
|
||||||
<p>You should definetely read more about it on Croc’s github page and
|
public instance in the first place.
|
||||||
set up your own relay asap 😎</p>
|
</p>
|
||||||
<p><a
|
<p>
|
||||||
href="https://github.com/schollz/croc">https://github.com/schollz/croc</a></p>
|
You should definetely read more about it on Croc’s github page and set up your
|
||||||
|
own relay asap 😎
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a href="https://github.com/schollz/croc">https://github.com/schollz/croc</a>
|
||||||
|
</p>
|
||||||
<p><a href="..">..</a></p>]]></description>
|
<p><a href="..">..</a></p>]]></description>
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
|
|||||||
@@ -30,12 +30,13 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<section>
|
<section>
|
||||||
<h1 id="they-were-extracted-from-this-image">They were extracted from
|
<h1 id="they-were-extracted-from-this-image">
|
||||||
this image</h1>
|
They were extracted from this image
|
||||||
<p><a href="../images/background.jpg">My Wallpaper</a><br /></p>
|
</h1>
|
||||||
|
<p><img src="/images/background.jpg" style="width:1000px; height:800px;"><br />My Wallpaper<br /><br /></p>
|
||||||
<p><a href="..">..</a></p>
|
<p><a href="..">..</a></p>
|
||||||
<footer>
|
<footer>
|
||||||
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /></a>
|
<a id="gemyo" href="gemini://konsthol.eu/"><img src="/images/best_viewed_on_gemini.png" /><br /></a>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
Reference in New Issue
Block a user