Compare commits
8 Commits
5af4e6d4f8
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
754347facb
|
|||
|
df811b3b16
|
|||
|
23b175c34c
|
|||
|
51e2ce5a53
|
|||
|
5cb7741903
|
|||
|
629f465b26
|
|||
|
7d8d0b5d37
|
|||
|
a6f22aa3be
|
BIN
public/blog/club-p/banner.webp
Normal file
BIN
public/blog/club-p/banner.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 89 KiB |
BIN
public/blog/club-p/demo.png
Normal file
BIN
public/blog/club-p/demo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 90 KiB |
BIN
public/blog/club-p/dojo.webp
Normal file
BIN
public/blog/club-p/dojo.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 110 KiB |
BIN
public/blog/subs/chains.jpg
Normal file
BIN
public/blog/subs/chains.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
56
src/components/Posthog.astro
Normal file
56
src/components/Posthog.astro
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<script is:inline>
|
||||||
|
!(function (t, e) {
|
||||||
|
var o, n, p, r;
|
||||||
|
e.__SV ||
|
||||||
|
((window.posthog = e),
|
||||||
|
(e._i = []),
|
||||||
|
(e.init = function (i, s, a) {
|
||||||
|
function g(t, e) {
|
||||||
|
var o = e.split(".");
|
||||||
|
2 == o.length && ((t = t[o[0]]), (e = o[1])),
|
||||||
|
(t[e] = function () {
|
||||||
|
t.push([e].concat(Array.prototype.slice.call(arguments, 0)));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
((p = t.createElement("script")).type = "text/javascript"),
|
||||||
|
(p.async = !0),
|
||||||
|
(p.src = s.api_host + "/static/array.js"),
|
||||||
|
(r = t.getElementsByTagName("script")[0]).parentNode.insertBefore(
|
||||||
|
p,
|
||||||
|
r
|
||||||
|
);
|
||||||
|
var u = e;
|
||||||
|
for (
|
||||||
|
void 0 !== a ? (u = e[a] = []) : (a = "posthog"),
|
||||||
|
u.people = u.people || [],
|
||||||
|
u.toString = function (t) {
|
||||||
|
var e = "posthog";
|
||||||
|
return (
|
||||||
|
"posthog" !== a && (e += "." + a), t || (e += " (stub)"), e
|
||||||
|
);
|
||||||
|
},
|
||||||
|
u.people.toString = function () {
|
||||||
|
return u.toString(1) + ".people (stub)";
|
||||||
|
},
|
||||||
|
o =
|
||||||
|
"capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures getActiveMatchingSurveys getSurveys getNextSurveyStep onSessionId setPersonProperties".split(
|
||||||
|
" "
|
||||||
|
),
|
||||||
|
n = 0;
|
||||||
|
n < o.length;
|
||||||
|
n++
|
||||||
|
)
|
||||||
|
g(u, o[n]);
|
||||||
|
e._i.push([i, s, a]);
|
||||||
|
}),
|
||||||
|
(e.__SV = 1));
|
||||||
|
})(document, window.posthog || []);
|
||||||
|
posthog.init("phc_LaGA9fvYGcEMPtMiJRIAwFsTMyaZaQhtA578GMvT7L7", {
|
||||||
|
api_host: "https://eu.i.posthog.com",
|
||||||
|
person_profiles: "identified_only",
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
---
|
---
|
||||||
import { SEO } from "astro-seo";
|
import { SEO } from "astro-seo";
|
||||||
|
import Posthog from "../components/Posthog.astro";
|
||||||
|
|
||||||
const { frontmatter } = Astro.props;
|
const { frontmatter } = Astro.props;
|
||||||
import "./MarkdownLayout.css";
|
import "./MarkdownLayout.css";
|
||||||
---
|
---
|
||||||
@@ -41,5 +43,6 @@ import "./MarkdownLayout.css";
|
|||||||
<footer>
|
<footer>
|
||||||
<p class="text-secondary text-center">© 2024 Zvonimir Rudinski</p>
|
<p class="text-secondary text-center">© 2024 Zvonimir Rudinski</p>
|
||||||
</footer>
|
</footer>
|
||||||
|
<Posthog />
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -17,3 +17,15 @@
|
|||||||
#content em {
|
#content em {
|
||||||
@apply italic text-gray-300;
|
@apply italic text-gray-300;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#content a {
|
||||||
|
@apply text-secondary underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content blockquote {
|
||||||
|
@apply bg-gray-800 text-gray-300 border-l-4 border-secondary p-4 my-4;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content cite {
|
||||||
|
@apply text-secondary;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
import { SEO } from "astro-seo";
|
import { SEO } from "astro-seo";
|
||||||
import { format } from "date-fns";
|
import { format } from "date-fns";
|
||||||
|
import Posthog from "../../components/Posthog.astro";
|
||||||
|
|
||||||
const posts = await Astro.glob("./posts/*.md");
|
const posts = await Astro.glob("./posts/*.md");
|
||||||
|
|
||||||
@@ -68,5 +69,6 @@ posts.sort((a, b) => {
|
|||||||
<footer class="mt-12">
|
<footer class="mt-12">
|
||||||
<p class="text-secondary text-center">© 2024 Zvonimir Rudinski</p>
|
<p class="text-secondary text-center">© 2024 Zvonimir Rudinski</p>
|
||||||
</footer>
|
</footer>
|
||||||
|
<Posthog />
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
69
src/pages/blog/posts/club-penguin.md
Normal file
69
src/pages/blog/posts/club-penguin.md
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
---
|
||||||
|
layout: ../../../layouts/MarkdownLayout.astro
|
||||||
|
title: 'where are you, club penguin?'
|
||||||
|
pubDate: 2024-07-21
|
||||||
|
description: 'A nostalgic piece about Club Penguin, a game that was a big part of my childhood. Also, a mini announcement at the end.'
|
||||||
|
---
|
||||||
|
<blockquote>
|
||||||
|
I honestly, with all my heart, think that Zvonimir just got stuck in 2013<br />
|
||||||
|
and never acknowledged the fact that he's not 13 anymore.
|
||||||
|
</blockquote>
|
||||||
|
<cite>~ A friend of mine</cite>
|
||||||
|
|
||||||
|
What is this post about? Well, it's about a game that was a big part of my childhood, and probably the childhood of many others as well.
|
||||||
|
|
||||||
|
The game ~is~ was called Club Penguin.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
If you do not remember Club Penguin, chances are you were not a child in the 2000s. <small>(you're either too old or too young)</small>
|
||||||
|
|
||||||
|
Club Penguin was a virtual world where you could create your own penguin, decorate your igloo, play games, and chat with other players.
|
||||||
|
The games ranged from anything like sled racing to card games, and they were all fun in their own way <small>(The Card-Jitsu was my favorite)</small>.
|
||||||
|
You could earn coins by playing games, and you could use those coins to buy clothes, furniture, and other items for your penguin.
|
||||||
|
|
||||||
|
The only downside was that you had to be a member to access all the features, but even without a membership, the game was still fun.
|
||||||
|
I could still buy an item or two for my penguin, and I could still play most of the games. <small>(There was even a complete quest line about being a secret agent!)</small>
|
||||||
|
|
||||||
|
It was a game that was simple, yet fun, and it was a game that I spent countless hours playing while blasting my favorite artists!
|
||||||
|
|
||||||
|
If you're wondering, my favorite artists were (and still are) Avril Lavigne, Green Day, Blink-182 and Nirvana. (<small>Yes, I was an edgy kid</small>)
|
||||||
|
|
||||||
|
Keep in mind, this was before I discovered Pink Floyd, which I consider the greatest band of all time. (<small>Yes, I'm still an edgy kid</small>)
|
||||||
|
|
||||||
|
# Unfortunately,
|
||||||
|
Club Penguin was shut down in 2017, and it was replaced by a mobile version called Club Penguin Island. But it was not the same.
|
||||||
|
|
||||||
|
The original Club Penguin was the best, and nothing can replace it.
|
||||||
|
Oh, and also the mobile version was shut down in 2018, so there's that.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Now, where are you, Club Penguin?
|
||||||
|
|
||||||
|
I know that the original feeling might never come back, but there are some private servers that are trying to bring back the game.
|
||||||
|
|
||||||
|
I won't mention any of them here, but if you're interested, you can find them with a simple Google search.
|
||||||
|
|
||||||
|
Since I'm talking about Club Penguin, I might as well mention that I'm working on a small project related to the game.
|
||||||
|
|
||||||
|
## Well, kind of.
|
||||||
|
|
||||||
|
The project is not a game yet, and it's VERY lacking in features, but it's a start.
|
||||||
|
|
||||||
|
I cannot overstate how much I love Club Penguin, and I wanted to create something that would bring back some of the nostalgia.
|
||||||
|
|
||||||
|
So, I started creating... *(drum roll...)*
|
||||||
|
|
||||||
|
# Club Cat... *(crickets...)*
|
||||||
|
|
||||||
|
I know, I know, the name is a blatant rip-off of Club Penguin, but I couldn't think of anything better <small>(for now)</small>.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
The project if we can even call it that, is a simple chat room with cats instead of penguins.
|
||||||
|
|
||||||
|
Nothing is animated, nor there is any multiplayer for that matter, but it's a start.
|
||||||
|
You can click around the canvas and talk to yourself, but that's about it.
|
||||||
|
I'm planning to add more features in the future, but I'm not sure when that will happen, as I have other work to tend to as well.
|
||||||
|
|
||||||
@@ -14,6 +14,6 @@ If you don't like the content, remember that you can always close the tab and go
|
|||||||
|
|
||||||
At some point I'd also like to add a comments section to the posts, but I'm too lazy to do that right now. <small>(I'm sorry)</small>
|
At some point I'd also like to add a comments section to the posts, but I'm too lazy to do that right now. <small>(I'm sorry)</small>
|
||||||
|
|
||||||
I hope you enjoy the content I post here, and if you have any suggestions or feedback, feel free to contact me! <small>(zvonimir@mailfence.com)</small>
|
I hope you enjoy the content I post here, and if you have any suggestions or feedback, feel free to contact me! <small>(zvonimir@zvonimir.xyz)</small>
|
||||||
|
|
||||||
<small>PS: The website is not hosted on GitHub Pages anymore :)</small>
|
<small>PS: The website is not hosted on GitHub Pages anymore :)</small>
|
||||||
|
|||||||
110
src/pages/blog/posts/reject-subscriptions.md
Normal file
110
src/pages/blog/posts/reject-subscriptions.md
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
---
|
||||||
|
layout: ../../../layouts/MarkdownLayout.astro
|
||||||
|
title: 'reject subscription services, embrace freedom'
|
||||||
|
pubDate: 2024-07-14
|
||||||
|
description: 'An insight into services I use to ditch Spotify and Netflix'
|
||||||
|
---
|
||||||
|
Do you like content? I'm sure you do!
|
||||||
|
|
||||||
|
But do you like paying every month for it? I'm sure you don't! <small>(Neither do I.)</small>
|
||||||
|
|
||||||
|
## Story time
|
||||||
|
|
||||||
|
I remember when I was a kid, my mom would take me to a kiosk after my dentist appointments, and I would get to pick a DVD to bring home.
|
||||||
|
|
||||||
|
Sometimes I would like the cartoon, sometimes I wouldn't. But it was always a surprise, and I loved that.
|
||||||
|
|
||||||
|
As the famous saying goes, "The cartoon was..."
|
||||||
|
<iframe width="560" height="315" src="https://www.youtube.com/embed/QJHUbtR0yI8?si=VduMtIFJom_PdKNa" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
|
||||||
|
|
||||||
|
I didn't have a computer back then, so I would watch them on a DVD player I had hooked up to my TV.
|
||||||
|
<small>(Thank you mom and dad for paying out of your asses for that!)</small>
|
||||||
|
|
||||||
|
## The Problem
|
||||||
|
|
||||||
|
Nowadays, we have services like Netflix, Spotify, and Amazon Prime Video. They offer a wide range of content, but they come at a cost.
|
||||||
|
|
||||||
|
First and foremost, you don't even own the content! You're just renting it for a monthly fee.
|
||||||
|
|
||||||
|
What happens if Netflix decides to randomly remove your favorite show/movie?
|
||||||
|
|
||||||
|
What if Spotify decides to up their prices?
|
||||||
|
|
||||||
|
You're effectively a hostage and have no say in the matter.
|
||||||
|
|
||||||
|
At least with DVDs and other physical media, I don't have to worry about that. I paid for it, and it's mine.
|
||||||
|
|
||||||
|
Also, according to Netflix, I am not allowed to share my account with my friends. Something I don't have to worry about with physical media.
|
||||||
|
|
||||||
|
<small>(I'm still waiting for my friend to return my copy of "David, el Gnomo")</small>
|
||||||
|
|
||||||
|
## The Solution
|
||||||
|
|
||||||
|
So, what can you do?
|
||||||
|
|
||||||
|
Well, you can always use the DVD player you have lying around, but physical media has its own set of problems.
|
||||||
|
|
||||||
|
You have to store them, they can get scratched, and they can get lost.
|
||||||
|
|
||||||
|
So what do we do?
|
||||||
|
|
||||||
|
# We embrace freedom!
|
||||||
|

|
||||||
|
|
||||||
|
Now, I'm not saying that you should pirate content. That's illegal and wrong.
|
||||||
|
|
||||||
|
I admit that I have done it in the past, when I was a kid, and my parents didn't quite understand the concept of "dishing out money for something that's free on the internet".
|
||||||
|
|
||||||
|
But I have since learned the error of my ways and have repented.
|
||||||
|
|
||||||
|
I'll share with you a list of free alternatives I use myself but feel free to experiment and find what works best for you.
|
||||||
|
|
||||||
|
## Movies, TV Shows and Music
|
||||||
|
|
||||||
|
For movies, TV shows, and music, I use [Jellyfin](https://jellyfin.org/).
|
||||||
|
|
||||||
|
It's free, open-source, has a Docker image, and it's pretty easy to set up.
|
||||||
|
|
||||||
|
It has a web interface, Android, iOS and even Tizen apps <small>(though you have to compile and deploy the Tizen app yourself)</small>.
|
||||||
|
|
||||||
|
I won't delve into the details of how to set it up, but there are plenty of guides out there that can help you.
|
||||||
|
|
||||||
|
I have a home server that I use to host it <small>(among other things)</small>, and I can access it from anywhere in the world.
|
||||||
|
|
||||||
|
The only downside is that you have to take care of setting it up and maintaining it yourself, but at least I don't have to worry about my favorite show being removed.
|
||||||
|
|
||||||
|
## Books
|
||||||
|
|
||||||
|
Now, I'll admit that I don't read as much as I did in the past, but when I do, I just open the PDF in my browser.
|
||||||
|
|
||||||
|
I know, I know, you were probably expecting me to say "I use [Calibre](https://calibre-ebook.com/)" or something like that, but I don't.
|
||||||
|
|
||||||
|
I'm a simple man, and I like to keep things simple.
|
||||||
|
|
||||||
|
Hell, even this blog post is just a Markdown file!
|
||||||
|
|
||||||
|
If I have a physical book lying around, I just take it to a photocopy store and have them send me a PDF when they're done.
|
||||||
|
|
||||||
|
Plus, there are plenty of free PDFs out there. Some of these have physical copies, you can buy if you want to support the author.
|
||||||
|
|
||||||
|
Lately, I've been reading [Hypermedia Systems](https://hypermedia.systems/), and I have to say, it's a pretty good read.
|
||||||
|
|
||||||
|
## Extra: Git
|
||||||
|
|
||||||
|
Yeah, yeah, I know. Git is not really a content service, but it's a tool that I use every day.
|
||||||
|
|
||||||
|
I know that GitHub, GitLab, and Bitbucket are free, but I still like to control my own repositories.
|
||||||
|
|
||||||
|
While I do use all three of them at work, I have a [Gitea](https://gitea.io/) instance running on my server, and I use it for all my projects.
|
||||||
|
|
||||||
|
It's free, open-source and it even supports CI/CD pipelines, which is pretty cool.
|
||||||
|
|
||||||
|
Like with [Jellyfin](https://jellyfin.org/), I have to take care of setting it up and maintaining it, but at least I don't have to worry about my code being removed or locked by GitHub, because some idiot used AI to find a bug, that's not even there.
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
In the end, you have to decide what works best for you.
|
||||||
|
|
||||||
|
If you like the convenience of Netflix, Spotify, and Amazon Prime Video, then by all means, keep using them.
|
||||||
|
|
||||||
|
But if you're like me and you want to break free from the chains of subscription services, then I hope this list helps you.
|
||||||
@@ -3,6 +3,7 @@ import { SEO } from "astro-seo";
|
|||||||
import { Icon } from "astro-icon/components";
|
import { Icon } from "astro-icon/components";
|
||||||
import Section from "../components/Section.astro";
|
import Section from "../components/Section.astro";
|
||||||
import { projects } from "../projects";
|
import { projects } from "../projects";
|
||||||
|
import Posthog from "../components/Posthog.astro";
|
||||||
---
|
---
|
||||||
|
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
@@ -79,7 +80,7 @@ import { projects } from "../projects";
|
|||||||
<div class="flex gap-4 mt-4">
|
<div class="flex gap-4 mt-4">
|
||||||
<abbr title="Send me an email">
|
<abbr title="Send me an email">
|
||||||
<a
|
<a
|
||||||
href="mailto:zvonimir@mailfence.com"
|
href="mailto:zvonimir@zvonimir.xyz"
|
||||||
class="opacity-50 hover:opacity-100 hover:text-secondary"
|
class="opacity-50 hover:opacity-100 hover:text-secondary"
|
||||||
>
|
>
|
||||||
<Icon name="mdi:email" size={32} />
|
<Icon name="mdi:email" size={32} />
|
||||||
@@ -127,5 +128,6 @@ import { projects } from "../projects";
|
|||||||
|
|
||||||
window.addEventListener("DOMContentLoaded", onMount);
|
window.addEventListener("DOMContentLoaded", onMount);
|
||||||
</script>
|
</script>
|
||||||
|
<Posthog />
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { SEO } from "astro-seo";
|
|||||||
import { getProject, projects } from "../../projects";
|
import { getProject, projects } from "../../projects";
|
||||||
import Section from "../../components/Section.astro";
|
import Section from "../../components/Section.astro";
|
||||||
import { Icon } from "astro-icon/components";
|
import { Icon } from "astro-icon/components";
|
||||||
|
import Posthog from "../../components/Posthog.astro";
|
||||||
|
|
||||||
export const getStaticPaths = (() => {
|
export const getStaticPaths = (() => {
|
||||||
return projects.map(({ id }) => ({
|
return projects.map(({ id }) => ({
|
||||||
@@ -110,5 +111,6 @@ const image = (await import(`../../assets/${project.id}.png`)).default;
|
|||||||
<footer class="mt-12">
|
<footer class="mt-12">
|
||||||
<p class="text-secondary text-center">© 2024 Zvonimir Rudinski</p>
|
<p class="text-secondary text-center">© 2024 Zvonimir Rudinski</p>
|
||||||
</footer>
|
</footer>
|
||||||
|
<Posthog />
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user