This article might contain spoilers about the base game and the DLC Phantom Liberty. Read at your own risk.
Let’s have a bit of a background first shall we?
Cyberpunk 2077 is a game released in 2020 by Polish game studio CD Projekt Red, most known for the game series The Witcher.
Cyberpunk itself goes back way more, starting in 1988 with Cyberpunk 2013, created and written by Mike Pondsmith, as a tabletop game.
Later editions included Cyberpunk 2020 (1990), Cyberpunk V3.0 (2005) and Cyberpunk Red (2020).
The Cyberpunk universe takes place in a world where the USA fell to a military coup, collapsing its economy, avoiding the fall of the USSR and strengthening European and Japanese markets, making them stand out as superpowers.
It’s at this time that megacorporations arose, taking control of huge parts of the economy, fighting between themselves and basically starting to form quasi-independent states.
Technological advancements in term created cyberware (or chrome) which are bioengineered implants used to enhance one’s body abilities, leading to cyberpsychosis if too many implants are used.
The main location of the game is called Night City, located on the south of current day San Francisco.
This autonomous city represents well how the Cyberpunk world works: megacorporations taking over every single aspect of life, rampant crime, violence and corruption.
Outside of all of this are nomads, once working for corporations, now living in family clans, roaming roads and plains, attacking corporate convoys and regular people alike.
Before proceeding further, note that all my play sessions were done on either Hard or Very Hard difficulties.
This was the review that was supposed to be released back in 2020.
It mainly concerns what was released at the time.
An updated review is below.
Summing up the base story, you are V, a mercenary.
At the start, the game gives you the choice for three life paths: street kid, corpo or nomad, which after some events, you will encounter Jackie Welles, former Valentinos member, now mercenary.
After a cooperating a while and gaining reputation as a reliable merc, you finally get a job from a well-known fixer, Dexter DeShawn; being stealing an experimental chip from the corporation Arasaka, called The Relic.
During the heist, everything turns to vinegar, the relic container being damaged, you are forced to slot the Relic in one of your shard ports while your partner and friend Jackie is dying under your eyes.
During that time, you also happen to witness Yurinobu Arasaka kill his father, Saburo Arasaka, CEO of Arasaka which you are accused of.
You later learn that this Relic is now erasing your mind, replacing it with the one of rockerboy and terrorist, Johny Silverhand.
Your goal is now to find a way to get rid of that Relic and survive at all costs.
Cyberpunk 2077 is bugged. Hell, I don’t even think that’s a strong enough word.
Crowds will fail to load, your character will T-pose on zone loadings, some enemies flicker, and calling your car will make it run over you and kill you.
It also happened that on release, a braindance sequence would use flashes designed to trigger epileptic seizures as a visual effect, triggering a grand mal seizure for game journalist Liana Rupert.
Luckily, an update modified the affected sequences and are now mostly safe to play, though the game still contains a warning.
Overall, the game isn’t pleasant to play in longer play sessions.
The game has to be restarted every hour or so because of bugs, there is performance issues with terrain not loading in time or just plain lag.
Also, some police units like MaxTac, being known as the most dangerous police force, can be killed like regular enemies which is kind of underwhelming.
Though the bugs are omnipresent, the game does something extremely well: cutscenes.
In CP2077, everything is dynamic.
Unlike Bethesda games where NPCs will just stand there and talk like robots, people move, have expressions, will pull guns on you; everything is dynamic.
The best representation of this is during one of the missions before The Heist. You need to get a military drone from the gang Maelstrom, however, the person that was paid for it, Brick, former leader of the gang has been removed by the new leader, Royce.
Though Dexter DeShawn already paid for the bot, Royce asks you to pay again in probably one of the best cutscenes I’ve seen in video games.
This particular cutscene usually ends up in a bloodbath (though there is other options) in which the game will transition seamlessly back to gameplay.
More than cutscenes, the game has a strong story, with characters you can identify with and feel close to.
All in all, it could be a great game, if not for all the bugs.
I really hope CDPR will release more patches to the game to render it more playable.
Now, that’s the part where I start praising CDPR.
In September 2023, after three years of releasing patches periodically for the game, CDPR release the 2.0 update.
This patch is probably the largest update the game has seen, bringing in new features and enhancement:
And even more!
Recently, scrapped features have been implemented in the game, most notably the metro system.
The game also has way less bugs, making it a solid game by itself.
On September 26 2023, CDPR released a major DLC for Cyberpunk 2077: Phantom Liberty.
I cannot express how much I love the content added to the game with it.
The DLC takes place in Dogtown, a part of Night City near Pacifica, ruled with an iron fist by Kurt Hansen.
You are contacted by a mysterious netrunner claiming to be able to help you getting rid of the Relic, leading you right in that part of the city.
All of the sudden, you are now involved in a large web of problems, having to save NUSA president Rosalyn Myers from Dogtown and find the netrunner with the help of FIA agent Solomon Reeds.
The DLC even adds a new ending to the game, which is in my opinion one of the saddest endings to it.
The story itself is extremely well-written, the characters attaching, choices hard to make, making the base game look dull in comparison.
The DLC also adds new skills, new vehicles, new side missions, new radiant quests and a bunch of other stuff.
Difficulty wise, it is also a big step up from the base game which I welcome.
Early in the DLC, you are faced with a difficult boss fight that might take you multiple attempts to beat, though not frustrating.
Cyberpunk 2077 evolved into being one of the most solid games I’ve recently played.
The soundtrack written by P. T. Adamczyk, Marcin Przybyłowicz and Paul Leonard-Morgan keeps you in the ambience while the gameplay is engaging and fun.
One action I will praise is CDPR actually updating the game, fixing bugs and adding content without succumbing to the temptation of saying “eh, the modders will fix it”.
Overall, fun game, I recommend to play it!
That’s all for today.
I’ll see you next time chooms!
If you liked this post, don’t forget to subscribe to the blog via RSS or JSON.
This website has no ads or tracking and will never have any, you can fork over some eddies on Ko-Fi to maintain it alive.
FIDO (standing for Fast IDentity Online) is a set of open standards created by the very originally named FIDO Alliance, designed to address the limitations of traditional password-based authentication.
This set of open standards include:
The main thing that sold security keys to me is the hardware component brought into authentication.
It may not be as practical as just pulling an OTP code from a password manager but adds a pretty strong layer of security to logins as you need to have the physical hardware and touch it to allow a login to go through.
Same for passwordless logins, I find them more convenient than using a password and automatically thwarts any phishing attempts (which is extremely good for end users that might not be that tech-savvy).
Regular OTP is also prone to attacks, be it the incompetence of OTP app providers providing a sync, your password manager getting compromised or just SIM swap attacks (being a bit more exotic though increasing, according to a TWSJ citing FBI numbers).
The main caveat of hardware keys is, of course, if your key ever gets stolen or lost.
That’s why it’s important to have backups (usually a second key).
While stealing a security key is harder than phishing a password, it still can be a possibility if you are being personally targetted by really persistent malicious actors (don’t become too paranoid about this though, this doesn’t concerns 99.9% of users, the “lost key” scenario is way more probable for you than anything else).
In case of a stolen or lost key, FIDO2 mandates that the user needs to authenticate before being used, be it phone/computer authentication, biometrics or a PIN (most common for security keys).
Technically, this still doesn’t accounts for attacks like bruteforcing, where someone could just try and test all PIN combination possible.
Some keys like the Yubikey have a protection against this, after three failed attempts, the attacker will have to unplug and plug again the device, and after seven (in a row mind you), the key will wipe its FIDO2 store.
That kind of protection also means someone can easily sabotage your keys and render them unusable.
Best protections would be:
Another caveat of physical security keys is the number of passkeys a single device can support.
FIDO2 stores an unique FIDO2 key on the device itself for each service, this means different keys have different amounts of slots available to store those.
For instance, the Yubikey 5 can store 25 passkeys, the Solokeys V2 50 while the new Google Titan Keys can store up to 250.
This is an issue to be aware of for in the future, when passkeys will be more common.
In recent years, tons of websites added support for security keys.
Biggest ones being Google, Microsoft and Apple, the two first ones allowing passwordless logins through passkeys.
Others can be cited like:
The list could be way longer, those are just a tiny fraction of those who support it.
You can see a good list of supported websites and apps on passkeys.directory.
Let’s see my personal uses of security keys and which ones I have.
Back in July 2021, I backed the the Solokeys V2 IndieGoGo campaign, that were originally supposed to be released in June 2021.
Sadly, Solokeys had delays due to supply chain and construction issues, pushing the release and shipment of the pledged keys to September of that same year. It’s around that same time that surveys, asking what USB type you wanted for the keys and setting your delivery address were sent, giving the hope for a rapid delivery.
Fast forward to September, more delays, pushing delivery even further to October; but after waiting all of that time, what is one month more? (little did I know)
All the way through end of 2021 and 2022, more and more delays were announced, always pushing further and further the delivery date.
It’s around that time I decided to purchase another brand of security key while waiting, a Yubikey 5 NFC (yes, a single one, I know having no backups is bad).
Finally, in August 2023, after two years of waiting, I received my two Solokeys V2, one USB-A and one USB-C.
The Yubikey is the first ever security key I got.
Nothing else much can be said except that it works well and is pretty much a plug-and-play solution.
I only have two complains about Yubikey:
Otherwise, good hardware, works correctly.
Now, here comes the review I originally planned to release months ago.
Putting aside all the delays and the two years of waiting, I was excited to receive my Solokeys since they are completely Open-Source and the firmware can be upgraded, unlike with Yubikeys.
So, I received two Solokeys, one USB-A and one USB-C as well as the pledge goal reward being small colourful silicone protective covers for the keys.
Right off the bat, looking at the USB-C one, the connector feels very fragile, like it would easily break if plugged too hard somewhere. The USB-A model looked fine and has no apparently hardware issues.
Once plugging those for the first time, the experience was not great, being either not detected at all or just very jittery (NFC was completely nonworking).
Luckily, a firmware update patched that and the keys started working as expected, though I must say that the NFC function doesn’t works as well as the Yubikey on my phone (an iPhone).
I am also having an odd issue where if the USB-A Solokeys isn’t plugged facing the “right direction”, it will not work and I will have to turn it around for it to work.
It wouldn’t be surprising with a normal USB-A plug, until you realize the Solokeys V2 has reversible USB.
Another thing to have in mind is that if the first generation of Solokeys was FIDO certified, the V2 isn’t yet.
Other than that, they work as expected everywhere that has support.
Given the current state of the project (as of 2023/12/08, no blog posts or communication since June 2023 and no commits in Solokeys V2 repos since January 2023), I sadly cannot recommend that solution and instead redirect people to Yubikey, that has been pretty solid for years.
I also sent an email to the official contact point of Solokeys on December 2 2023 asking about the state of the project and still haven’t got any response yet.
This post will be updated when I receive an answer.
2023/12/09 update:
My Solokeys V2 USB-A apparently reset itself for no reason.
I will never recommend Solokeys going forward.
I basically use security keys everywhere I can, be it on external websites like Gandi or my internal stuff, either through native support like with FireFish or through a SSO solution like KeyCloak.
I do also use my keys as passkeys when available as they are extremely convenient.
Small update: I’m also using my key for SSH now.
As a side note, when trying to register my Solokeys as a GitHub passkey, I was getting generic errors “Something went wrong” without any much more.
Turns out that if your key is already registered for MFA, you will need to remove it before re-adding it as a passkey.
I’m extremely happy to see more and more websites and software supporting that kind of hardware, for instance, Discord recently added support for security keys as MFA, Google and Microsoft allow passwordless passkey sign-ups, and some other platforms that I use daily like Resonite plan to implement FIDO2 support in the future.
I can recommend anyone getting security keys and adding them everywhere you can.
If you don’t want to get hardware and trust your phone provider enough, both Android (through Google) and iOS/macOS support passkeys.
I can also recommend the password manager Bitwarden which can store passkeys, allows login MFA with FIDO2, is Open-Source and can be self-hosted.
Hopefully in the future, we can have even more FIDO2 support, not only as a MFA but also as a passwordless way to login.
Also massive thanks to Dezponia, in the Furry Tech Matrix room, for the extensive feedback and additional information about how FIDO2 works and security practices they provided for this blog post.
So this post was longer than usual.
Reason is that writing posts takes way longer than I expected and finding good subjects for those is equally hard, so instead of prioritizing quantity, I’m going for quality and length.
I’m trying to find more subjects to write about in a more lengthy form factor, so stay tuned!
You also probably noticed that the font of this website changed completely and this has been done for a good reason: the old pixel font was extremely hard to read for longer texts, not very practical when you host a blog and a wiki with lore and other stuff people might want to read.
Give a warm welcome to Atkinson Hyperlegible by the Braille Institute, that will probably stay around for some time (unless I find a pixel font as easy to read as this one).
Why this exact font? The software FireFish (that I use to post on ActivityPub) has an option for it and I liked it.
On another note, I’m looking for a job!
If you have anything for me in software development, please contact me at jae@777.tf and I’ll be happy to discuss any opportunity.
That’s all for today.
I’ll see you next time!
If you liked this post, don’t forget to subscribe to the blog via RSS or JSON.
This website has no ads or tracking and will never have any, you can support me on Ko-Fi to maintain it alive.
You’ve also probably noticed that I have kind of a burnout related to code, that’s why I haven’t been doing anything much for a while in that regard.
3D work has been kind of an escape and it showed me that diversifying what you do is a great idea.
While I’m at it, here are some examples of stuff I’ve made over the past months (that aren’t related to code):
Some maps for the game Resonite:
Random furniture for other projects (those are still heavy WIPs):
Some renders of my characters and other misc objects I made:
And even more is planned, I even started sketching those ideas:
If my writing is too cryptic to understand, here are the big lines of that upcoming project:
My drawings look a bit silly as I’m not very good at that, but ultimately, they fulfill their job as just a direction to take and avoiding to go in blindly when starting to work on something.
Also, playing with the new Blender 4.0 Geometry Nodes tools is really fun and at some point, I’ll publish a tool pack for it, so stay tuned.
That’s all for today, a really short blog post.
I’ll see you next time!
If you liked this post, don’t forget to subscribe to the blog via RSS or JSON.
You can support me on Ko-Fi.
Worry not, I come bearing solutions for this problem (solutions which were already widespread as soon as the restriction was put in place, but honestly, this is my blog, what you’re gonna do hahahahaah, you can’t stop me).
This might be the most radical solution, but the best one: switch to an
alternative front-end.
Most, if not all, alternative front-ends for YouTube directly remove ads,
trackers and some of them even support the likes of SponsorBlock.
Here are some recommendations (the software with a ⭐ are my personal recommendations).
For this, just follow those simple steps:
As a bonus, remember that uBlock origin works best on Firefox.
I will not recommend any apps of the likes of (Re)Vanced as it still relies on
an official YouTube app which is completely closed-source (although the
patches are open).
All it takes for Google to take down those patched versions, as shown in the
past, is a small cease-and-desist, while completely open-source projects have
absolutely no real grounds to be taken down (the RIAA tried, they failed).
As some closing words, remember that ads are a really predatory ecosystem that
prey on your attention only to track you to sell you stuff you probably don’t
need.
Having a content blocker is good for privacy but is also a good way of
de-cluttering the web and making it somewhat bearable to navigate (it also
improves security a lot for older users that might fall for scams and
viruses being spread through ads).
So do you have a friend, coworker or family member that still has millions of
ads on their screen? Do them a favour and show them how to install uBlock
origin on their browser.
This website will never have ads, if it ever does, block it as it won’t be controlled by me then.
I’ll see you next time!
If you liked this post, don’t forget to subscribe to the blog via RSS or JSON.
You can support me on Ko-Fi.
First off, I still find the technology amazing while sadly being still gatekept by high hardware costs.
The index itself had a few problems during those months:
Otherwise, I had some changes on the platforms I use daily.
For instance, in my original blog post, I talked about VRChat which now I do not use anymore, given its poor creation tools and generally lack of interesting activities.
Most of the screenshots that I post everywhere are now from NeosVR, a social VR platform allowing for content creation within the game while also allowing extensive modifications by modding.
Need an avatar? Just drag-and-drop your model file onto the game window, click on the import window, see your model appear, use the in-game avatar creator and done, ready for use!
Sadly, Neos has been plagued by a lack of updates and a CEO that cares more about scamming users with cryptocurrency (which most of the community rejects) than to take care of the platform.
Though there is rumours of a new platform that would be released by the original developer of Neos (that left it a while ago), for now, we are stuck in this situation.
That’s where Overte enters the game.
Overte is also a social VR platform, but with the particularity of being compltely Open-Source, licensed under the Apache 2.0 license.
Though the controls are a bit more basic than Neos’, the platform is more than usable both in VR and Desktop mode.
The game itself is a fork of Vircadia which is itself a fork of High-Fidelity, created by Philip Rosedale, the fomer CEO of Second Life. This is why the game itself feels and looks like Second Life so much.
Creating avatars is a bit more complicated, requiring you to rename bones and blendshapes in Blender, but jump into the game and you will most certainly find someone more than happy to help you in the Overte Hub.
The advantage of Overte is that everything is hosted by yourself, from avatars to worlds.
For instance, I am hosting a Domain, or world, named The Cheesebox (join it btw, I swear we have fun there).
But it is not limited to that, you can also host your own accounts system, the possibilities are endless.
Another advantage is that the project itself is overseed by a nonprofit where board members are elected, thus eliminating most cryptobro-related problems.
All in all, it is a very promising platform that definitely deserves more attention.
I think that’s enough for today, thanks a lot for reading this blog post.
I’m gonna try to make more posts again, probably dedicated around the VR space as one post isn’t enough to cover everything.
I’ll see you next time!
If you liked this post, don’t forget to subscribe to the blog via RSS or JSON.
]]>In time, it has been a really nice learning resource, especially with the networking aspect of the whole thing (see page AS211696).
Sadly, what makes it fun to run is what destroyed it, it became financially unmaintainable.
With costs rising everywhere, I simply can’t afford to run all of this.
It’s not with a happy face that I announce that the open services will close on April 30 2023 (30/04/2023).
I’m truly sorry, honestly, I feel like shit writing this.
Thanks everybody for having been part of this experience and thanks for the overwhelming support in dire times.
// Jae
This ThinkPad has some upgrades:
Which makes it a bit more comfortable to use.
Of course, the machine is properly baptized with stickers (will update the stickers page with it when I receive my own ones).
The two most dated aspects of the computer are its screen and CPU.
While the screen has a low resolution for today’s standard, it is still fairly usable and looks well enough (in some desktop environments, there is a yellow backlight for some reason that doesn’t appears on i3).
The CPU is what will mostly limit you when trying to compile something but as long as you don’t run Gentoo, that shouldn’t really be a problem (most of the compiled stuff I use from the AUR comes in -bin
so no need to waste precious CPU cycles for that).
To have an extra-comfy setup, I took some time to configure stuff I always forget about on my main setup, for instance: MPD (Music Player Daemon).
My config for it is very simple and works perfectly:
music_directory "~/Music"
db_file "~/.config/mpd/database"
playlist_directory "~/.config/mpd/playlists"
auto_update "yes"
bind_to_address "127.0.0.1"
restore_paused "yes"
max_output_buffer_size "16384"
audio_output {
type "pipewire"
name "pipewire"
}
In bonus, it can even play MOD, S3M, SID and XM formats which I wasn’t aware, but was a welcome surprise.
Also, given the age of the laptop, using Kitty (which is the terminal emulator I usually use) is out of the question as the maximum OpenGL version supported by the laptop’s GPU is 2.1 while the terminal emulator requires at least 3.3.
[068 11:30:32.926880] [glfw error 65543]: GLX: Failed to create context: GLXBadFBConfig
[068 11:30:32.926938] Failed to create GLFW temp window! This usually happens because of old/broken OpenGL drivers. kitty requires working OpenGL 3.3 drivers.
Instead, I use Alacritty on this machine which works good enough. The config itself is also pretty simple:
window:
padding:
x: 8
y: 8
opacity: 0.9
font:
size: 9
normal:
family: Bok MonteCarlo
colors:
primary:
background: "#1b1b25"
foreground: "#dedede"
normal:
black: "#15121c"
red: "#cb5760"
green: "#999f63"
yellow: "#d4a067"
blue: "#6c90a8"
magenta: "#776690"
cyan: "#528a9b"
white: "#eeffff"
bright:
black: "#727480"
red: "#cb5760"
green: "#999f63"
yellow: "#d4a067"
blue: "#6c90a8"
magenta: "#776690"
cyan: "#528a9b"
white: "#eeffff"
Also, one of the first things I did when I got the laptop was to update LibreBoot on it.
I ended up documenting the method on its own wiki page.
On the side of doing ‘real work’ on it, of course, given the age of the CPU (it being an Intel Core 2 P8600 which is two cores, two threads at 2.4Ghz), some stuff will be slower.
For instance, when starting to work on Overengine, starting the development environment with yarn dev
will take around 3s more than on my main workstation, so a bit slower but not that killing.
The main difference is when compiling programs where it takes almost twice as much time.
When working on personal stuff, it takes a bit longer to test things, but having worked with low-end machines a good part of my life, it’s still faster than some machines I had to use in the past.
On the browser side, surprisingly, it runs pretty smoothly with Firefox+uBlock origin.
Of course, websites with plenty of animations will have a bit harder time, but still surprisingly usable. It is to be noted that some websites like the Internet Archive Wayback Machine will not work on this laptop for some reason.
I haven’t really reached a tab limit as I rarely have more than 3 open at all times when working or doing anything ordinary.
On the games side, the two games I play the most, Ryzom and OSRunescape, basically run without any major hiccup.
Of course, the framerate could be better but it is more than enough to be playable.
In some months, I’ll have to be away for some weeks, this will be the occasion to test this machine as a real daily driver instead of just a main portable (for now I’m still mainly using my fixed workstation at home and then the laptop in bed).
Just before ending this post, as per tradition, here is a hyfetch
(if you know a version of the wallpaper without the character, please send it to me):
That’s all for today’s post and I’ll see you peeps next time!
If you liked this post, don’t forget to subscribe to the blog via RSS or JSON.
If you wish to support the Open Services, a LiberaPay page is available.
Now, let’s try something “new”.
Some blog posts were really outside of the usual, things like “My name has finally been changed” or “Jae’s kitchen: making crunchy peanuts”, I want to try to post about more petty things that are not only technical and then see how it goes.
A long time ago, I even tried writing some game reviews so why not try to bring the format back?
Let’s see overall how that trial goes.
That’s it for this extra-small post and I’ll see you in the next time!
If you liked this post, don’t forget to subscribe to the blog via RSS or JSON.
If you wish to support the Open Services, a LiberaPay page is available.
So to sum up: dum me almost ended up spending money because I can’t even configure an AP correctly.
Moral of the story: use multiple devices to test when there is a problem before accusing hardware failure.
Note to self: learn how to configure APs before doing anything else.
That’s all for today and I’ll see y’all in the next post!
If you liked this post, don’t forget to subscribe to the blog via RSS or JSON.
If you wish to support the Open Services, a LiberaPay page is available.
Early in the launch, there was already this little guy:
I originally discovered the project in the morning of February 7th, via the Ungleich IPv6 Matrix room.
I immediately started tinkering with Python to try and print an image.
At first, I started generating the addresses.
Doing so is really easy, just take the base address and fill out the gaps with values:
base_address = "2400:8902:e001:233"
pixels = []
def make_image_and_start(ox, oy, image_path, to_file=False, filename="image.txt"):
image = Image.open(image_path).convert("RGBA")
max_w, max_h = image.size
curr_w, curr_h = 0, 0
start_w = int(ox)
start_h = int(oy)
max_w -= 1
max_h -= 1
# Now, let's convert the image
while True:
coordinates = x, y = curr_w, curr_h
r, g, b, a = image.getpixel(coordinates)
print(f"Converting: {x},{y} -> {r}:{g}:{b}/{a}", end="\r")
# Check for alpha (transparency support)
if a > 0:
pixels.append(make_address(curr_w + start_w, curr_h + start_h, r, g, b))
# Basic printer that goes left-> right and starts again
if curr_h == max_h:
curr_h = 0
curr_w += 1
else:
curr_h += 1
if curr_w == max_w and curr_h == max_h:
curr_h = start_h
curr_w = start_w
break
Then, my original thought was to start using the ping
command but it ended up being slow, taking half an hour to draw even half of the original image.
That’s when I had the idea of outputting everything in a text file and then using fastping -f
on top of it which was working better!
Still, there was lots of room for improvement and it showed when the whole canvas was replaced with a moving rickroll (nicely done btw).
Few hours later, a friend started testing oping
which turns out to be faster than fastping
.
That method worked great until I finally started using raw sockets in my own script:
sock = socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_ICMPV6)
def do_ping(dest_addr, timeout=1):
print(f"Rendering current: {dest_addr}", end="\r")
try:
# Raw sockets, who cares, it's fast
sock.sendto(b"\x80\0\0\0\0\0\0\0", (dest_addr, 0))
except:
# We don't care about failing
# The pixel is usually re-written in next pass
pass
At first, the program would crash, citing a buffer space error.
Just ignoring the error makes it work and the loss is negligible since multiple passes are done quickly.
Victory, I could now draw images super fast which protected my artwork from attacks after.
You can see the source of the writer on SourceHut.
All in all, this was a great experiment and I want to thank Cameron for creating it in the first place.
I am currently trying to implement my own canvas which would be a tad bigger.
Also, thanks to everybody that participated in good faith, was lots of fun!
That’s it for this post and I’ll see you in the next one!
If you liked this post, consider adding it to your RSS or JSON feed reader :)
Canvas screenshot and amogus GIF provided by Cameron Steel.
To solve that, I am currently testing a new solution: running all of the services on ARM-based SBCs.
For that, meet the Orange Pi 4 LTS.
(Picture CC 4.0 BY-SA Jae Lo Presti; click here for a larger pic)
That particular one has:
For now, this one only has light web stuff, including the website you are reading right now.
Services such as the BreezeWiki or AnonymousOverflow will be moved on there soon as a way to test if this exact platform is suitable for larger deployments.
Even tho there has been some problems when switching the website to it, it now runs flawlessly (the website is a bit slower than before but nothing unbearable).
Some fun experiment that would be fun to do later would be trying to take the whole website off-grid or even better, when moving physical locations, make it so the servers stays up (I will have to make a post detailing more how I could do that).
The current goal isn’t to go completely low-tech, at least yet but to try new things while trying to save a bit of money.
As a fun trivia, added the network stats of the machine on the main page (just scroll down until you see an image with a fancy chart).
I might do that for every single machine once I start migrating and that data will have its own page in the future.
That’s it for the first post of the year and I’ll see you next time!
If you liked this post, consider adding it to your RSS or JSON feed reader :)
]]>By default, uBlock will do a great job at getting rid of most of the ads (if not all) and trackers present on the website but for me, it’s not enough.
I find lots of elements distracting on YouTube, including for instance, the comment section and related feeds. To block them, it’s easy:
www.youtube.com###comments
www.youtube.com###related
And done, all is now removed.
Problem is, when trying to block specific buttons, like the “share” or “clip” ones, those don’t have any proper IDs which renders blocking a bit more tricky.
We can work around this by matching the property title
or aria-label
instead:
www.youtube.com##[aria-label$="Create" i]
www.youtube.com##[title$="Shorts" i]
www.youtube.com##[title$="Trending" i]
www.youtube.com##[title$="Music" i]
www.youtube.com##[title$="Movies" i]
www.youtube.com##[title$="Gaming" i]
www.youtube.com##[title$="Sports" i]
www.youtube.com##[aria-label$="Clip" i]
www.youtube.com##[aria-label$="Share" i]
And done, everything useless is now removed.
My full list of rules for YouTube goes as it follows:
## YOUTUBE FILTERS ##
www.youtube.com###comments
www.youtube.com##.ytp-ce-element
www.youtube.com###hover-overlays
www.youtube.com##yt-icon.ytd-badge-supported-renderer
www.youtube.com###related
www.youtube.com###donation-shelf
www.youtube.com###voice-search-button
www.youtube.com##.ytp-show-tiles.videowall-endscreen.ytp-player-content.html5-endscreen
www.youtube.com###guide-section-title
# Useless buttons
www.youtube.com##[aria-label$="Create" i]
www.youtube.com##[title$="Shorts" i]
www.youtube.com##[title$="Trending" i]
www.youtube.com##[title$="Music" i]
www.youtube.com##[title$="Movies" i]
www.youtube.com##[title$="Gaming" i]
www.youtube.com##[title$="Sports" i]
www.youtube.com##[aria-label$="Clip" i]
www.youtube.com##[aria-label$="Share" i]
Which will remove most of distracting trash lying around on the website.
The main page could use some more rules but I’m working on that.
Those are rules for misc websites from web shops to food delivery websites, everything else than monoliths like YouTube is there:
## MISC WEBSITES ##
partco.fi###cookieNotice
verkkokauppa.com##.special-days-ribbon-accordion
github.com###feed-next
github.com##.js-notice
github.com##[aria-label$="Explore Repositories" i]
dnsimple.com###dnsimple-support-wrapper
wolt.com##[data-test-id$="OrderBubble" i]
wolt.com##[data-test-id$="Discovery.AllLink" i]
wolt.com###footer
posti.fi###beta-posti-footer
However, there is some websites you can’t improve, even with blocking annoying elements, this is where the full block comes in place.
Some of the domains on my personal list are:
## DOMAINS BLOCKED ##
||reddit.com # Redirected via privacy addon
||twitter.com # Redirected via privacy addon
||facebook.com # Useless domain
||instagram.com # Useless domain
||pinterest.com # Useless domain
Really simple and short post for today.
Just to serve as a reminder: BLOCK. THOSE. ADS. and if you want to support your favorite creators, donate to them directly through whatever platforms they have.
Oh, also, happy new year in advance, let’s hope 2023 will be brighter. I’ll see you next time!
]]>Moving Forward
which was basically my coming out post.So here it is, a summary of what has been done and what is to come this year!
This year was calmer than 2021 as in no big changes but it doesn’t means nothing happened.
jae.fi
-> 777.tf
(jae.fi
will remain active until all services are moved out)2023 will, hopefully, be a more dynamic year. Here is what is planned.
That was all for today, really short post.
Thanks everybody for tagging along and I’ll see you next time!
The website itself was very simple, a regular HTML document with an attempt at adding a background that resulted in having a looped one given I didn’t knew very well CSS at the time.
The background was of a CPC computer which I liked at the time.
The website contained multiple pages like:
This is basically what started my online presence.
It’s around the same time I started being active and a french Minecraft forum and another Furry one.
At the time, I did all of this first from the computer of my parents and then from a HP Compaq which originally came with a single GB of RAM and Windows XP.
It’s around that time that I really started programming a lot and learning stuff around.
Fast forward few years, I am now near high school.
I haven’t had a website for quite a few years (the first one lasted around three years which is exceptionally long for me) and decided to make another one.
Before, I always ran stuff off free hosting providers.
To cite some, we had, of course, Wifeo but also Hostinger (can’t remember the name of their free version) and Dyjix.
But until then, I was also relying on the free subdomain they would give me which wasn’t practical when a host closed or when I wanted to move.
So I started using Freenom, with a .cf
domain which is a free domain. This lasted aproximately two years until I got a student discount which allowed me to register a .me
for a year for free.
It’s after all of this that I made this one, which was super simple.
For now, all my websites were simple single-pages where I was just redirecting to other places.
This changed when I got what would become my main domain for the time, jae.moe
(now redirecting to this website).
That website was running on GoHugo and generated with the GitLab CI from TeDomum.
It’s also during that time that I started experimenting with tracking (GoatCounter for instance) and quickly realised it wasn’t viable.
Later, during my second and last year of school (BTS for french speakers), I found a job in Finland so I bought the domain you are probably using to see this on, jae.fi
.
The first version of jae.fi
was just a simple HTML page saying “Moikka” just to wait until I had something potable.
My website reverted to being a small one-page website with something looking like a terminal MOTD.
At this time, my website was evolving super quickly, changing styles and ideas every two seconds.
Fonts, CSS, colours, everything changed and was tweaked at some point.
At some point, it even had a webring an announcement system but it only lasted a very short period of time.
Later, I made this version that had a CRT flicker effect which was annoying for a lot of users and not great performance wise.
It’s only near the end of 2022 I started working on this website.
First using GoHugo, I wanted to centralize everything in one point for maintenance easability reasons.
I recently swapped GoHugo for my own thing given the limitations of the software. This is how you are seeing this website now.
At the moment, this website is fully open-source, its content under the CC BY-SA 4.0 license and has no tracking.
The only thing I can say for sure for the future is that it won’t change soon.
The core remains the same: no tracking, open, no ads.
Thanks a lot to all the people that followed my various blogs over the years and thanks to you for reading that small timeline.
I’ll see you next time.
For some reason, the TeDomum donation is set on secret.
If you have any ideas of people or projects I could start donating to, please let me know.
If you can, I also encourage donating to people that make the software you use every day!
Also, let’s not forget the one-time donation to the Debian Project (donated via the "Click & Pledge platform advertised on the website of the Debian Project):
As of 2022:10:31T08:23:00+02:00, 100 USD = 100.75EUR. Is censored on the receipt: exact address, phone number, some financial data.
For those who are still donating via LiberaPay, while I appreciate the sentiment, I would ask you to please, please stop them as I don’t need them anymore and I haven’t found a way to stop donations flowing to me on the dashboard (if you know how, please contact me).
Again, the warmest, thank you for supporting me in these hard times.
I’ll see you next time!
]]>In the beginning, my website was a simple HTML single page, just saying where my GitHub and blog were.
Then, I started making a small Wiki about random stuff which was using DokuWiki.
Later that year, I remade the main website using NextJS to try to learn it, it was pretty painful and not really efficient so I then, even later, replaced it by a static version.
With this website, I had the frequent complain that the CRT effect on screen was painful to look at, so time to make a new style.
It’s during that time that I came out with the CSS that is currently hosted on the website which is made to mimic oldskool websites.
As blog engine before, I was using Ghost.
I originally chose Ghost because it is fairly easy to use and I didn’t see all the influencer bullshit around it.
At some point, an upgrade asked for a migration that never worked so I decided to go hunt for an alternative.
It’s at that point I ended up using GoHugo again which is pretty solid only for one detail.
In GoHugo, you have to specify that baseURL
which is set in stone and not dynamic.
For instance, if somebody tries to access the blog using TOR (which I have) or a mirror domain (which I also have), they will be stuck with lots of links and feeds generated with the main domain set in baseURL
.
It’s from that need that emerged this little project.
Meet Overengine, my over-engineered, homebrew, blog engine.
It is made in TypeScript (don’t hate me, I have to learn this tech at the moment) and has several features:
That’s a lot of stuff so let me explain the ones people asked the most questions about.
Basically, it’s solving the problem encountered at the end of the part one of this post: GoHugo is set with that baseURL
parameter.
Using Overengine, everything is generated on the fly which means you can access the website from any domain and even through TOR without being affected in any way.
The best example is on the JSON feed. For instance, the JSON feed if accessed from jae.fi
:
{
"version": "https://jsonfeed.org/version/1",
"title": "Jae's Blog",
"home_page_url": "https://jae.fi",
"feed_url": "https://jae.fi/blog/index.json",
"description": "The blog of Jae."
}
And when accessed throught TOR:
{
"version": "https://jsonfeed.org/version/1",
"title": "Jae's Blog",
"home_page_url": "http://jaednob5azseoa2coeehrh2idwwqesu5mwvuqs3fwp3ekxhkl2lfpuyd.onion",
"feed_url": "http://jaednob5azseoa2coeehrh2idwwqesu5mwvuqs3fwp3ekxhkl2lfpuyd.onion/blog/index.json",
"description": "The blog of Jae."
}
Which makes it possible to have a TOR-only setup for feeds for instance.
It’s fun.
Of course, the software is Open-Source and under the MIT license, you can check out the repo here.
Also, check out the new feeds added by the software and don’t forget to subscribe to those with your favourite reader/software/bot to not miss anything of the blog:
I’ll see you next time!
]]>Well, today, I am happy to announce that my name change request has finally been accepted in france.
It is after more than a year and half to wait and multiple request to the défenseur des droits (or defender of rights when translated) that the embassy finally announced to me that it was accepted.
I’ll see you next time in a real article as this one was more of a small announcement rather than a full-blown blog post.
]]>As you may guess by the title, I’ve done it again, I changed the blog engine, once more.
Reason for it is mainly simplicity. This year, I started making a small wiki which at some point moved to the main website and now I am doing the same for the blog.
It is also that Ghost has too much stuff and I’m too lazy to maintain it properly.
As a bonus, I added the archived blog posts from the old-old website.
Also, the new RSS feed URI is https://jae.fi/blog/index.xml now so don’t forget to change it in your readers.
That’s all for today’s post and I’ll see you next time!
]]>As a recap, here is a bit of background:In July of this year (2022), I got laid off my job because of company financial problems.Then, having no real plans nor savings, I entered panic mode and started asking for some money (even tho I hate that) to at least be able to maintain the services online.
Today, as of Sept 19 2022, I started at a new company and can happily say that the situation is now resolved.
I want to thank everybody that donated, even if only an euro or two because without them, none of all the services would be still standing right now.
Now plans are:
But also:
Of course, every receipt of those will be published on a newly created page (I will announce the creation on ActivityPub, Matrix and maybe on this blog).
Thanks a lot again to everybody and I’ll see you next time!
]]>Just to set some grounds, where I reside (but not a citizen yet), in Finland, I did the name change request around 2021/07/14 and obtained a positive response on 2021/07/30 (so overall less than a month). It also took more or less a month to get a foreigner ID for Finland (not for travel).
So, for France, our journey starts in May 2021, I just moved in Finland and decided to finally change my name after all those years. So I started looking what I needed and the document asked are quite hefty:
To top it off, it is not possible to send the file via email (at least at this embassy) and a physical appointment is required, so all the files had to be printed.
After months of waiting, I finally gather all the documents, including that family attestation thing and time comes to take an appointment. In the end, the appointment will take place on 2021/06/11 at 10:50 EEST.
During this appointment, I give all the required files, copy of old ID and such. The person whom I am talking to tells me the delay is around three months which seems incredibly fast for the french state.
So I wait a bit and one day, that person contacts me again asking for more documents, one being a proof of where I live (something like a phone or electricity bill can do) which I gave. Then silence.
I waited until around january 2022 where I tried re-contacting the person but nothing. No response.
I then filed a complain at the Défenseur des Droits (or Defender of Righs when translated), the request took some weeks to get through but finally ended up talking to M. Nicoloso Patrick which started to push my case to the embassy and, had been so far, the most helpful person I encountered in this story.
After one or two months of waiting for documents and requests to be thrown around, the embassy finally broke silence, after multiple months, asking me for a last document from a family member (which I got and sent).
Then the communication became cryptic again. I recently tried asking them where was my file at and still the same answer:
Then sent one saying I wanted a valid ID before start of 2023, because of travels within the EU and got this response:
I then asked to know if I would have a guaranteed response at least in December but no answer as of yet.
I will update this post with new screenshots when they come. Only non-publicly available names and addresses are blanked. I’m just fed up with waiting.
As of today, the saga still goes on and no definitive answer which makes it hard to do anything, let alone just travel, change names on state registers or even have a valid passport.
I’ll keep you people updated and I’ll see you next time!
After months, the embassy finally responded.
They won’t say what the answer is via e-mail and will sent it via post on 2022/09/30.
This year, I started hosting again some services I have been hosting before but stopped due to personal reasons but in the meanwhile, I added some others. Here is the full list of currently public services:
I am also in the process of developing some other proxies of my own but that remain a heavy WIP (see my GitHub profile for more).
I also adjusted some things on the roadmap of the infrastructure.
If everything goes as planned, the router will stop announcing legacy prefixes (or IPv4) on Jan 31 2024 and therefore, all services will only be available on IPv6-capable networks. If your ISP doesn’t supports IPv6, please harass them (kindly) to add support for it and meanwhile, check out my Library page about IPv6 tunnels to get a a prefix while waiting.
Legacy IP is becoming more and more unsustainable by being, for instance, one of the biggest costs on my infrastructure (around 120€ a month for a leased miserable /24). Given the high price, support might be dropped earlier but will be announced at least a month prior for users of public services to be able to adapt.
Now, I’d like to thank once again people that donated via the banner present on some of my websites & hosted instances, thanks again for helping me and for all the warm support!
I am currently looking at services to extend or improve so this wonderful support is repercuted to the whole userbase. If you have any idea of what could be improved / added, please message me on Matrix or via e-mail (I read and reply to every single one of those when they are not spam; if you have a Microsoft e-mail address, those won’t work with my host, sorry, that company decided my e-mails weren’t worthy enough of their shitty servers).
Thanks again for the support and for reading this, I’ll see you next time, either in a Batch or a more traditional post.
P.S: don’t forget to add this blog to your favourite RSS reader to not miss anything :)
]]>This is why yesterday, I started transferring all my domains to Gandi which was recommended to me by a friend.
So far so good, their interface is reasonably fast and I could, finally, configure that DNSSEC which is basically two clicks away in their thing.
Even tho Gandi is also French, this time, Finland does exists (even tho that can be up to debate on the internet) and I could use the right name.
Some domains are still waiting OVH to wake up but I believe it will be done in the week or so. There was just a small issue while transferring my main domain (jae.fi) but that got sorted out pretty quickly by the customer support.
So, this was just a small post to announce that, nothing much.
Oh, also, don’t ever touch OVH.I’ll see you people next time!
]]>Recently, I got a hold of some interesting phones so I guess I had to make a small blog post about those.
The Nokia N900 is a phone with an integrated physical keyboard and even a stylus that was released in 2009 which was shipped with Maemo 5 back then.
I discovered this device while trying to install Postmarket OS on another and saw the nice support it had.It’s only recently that I could buy one for really cheap (around 25€) on the Finnish website Tori (like craigslist but in Finland).
I tested multiple OS on this phone including:
Surprisingly, the default OS, despite being from 2009 is still very usable today, however it suffers from being really outdated and having certificate problems.Otherwise, it is still a very potent phone by today’s standards.
The only thing to note is that if you plan on running PostmarketOS on it, there is currently no battery protection which is something to keep in mind.
So far, of all the times I ordered on Aliexpress, I never got deceived… until today.
As some background, I recently ordered a 80€ smartphone from Aliexpress, supposedly being a S22 Ultra (yes, you heard it right, like Samsung).For once, the shipping was surprisingly fast, at around two weeks.
Upon unboxing, the phone itself looks pretty nice, you can clearly see it ressembles the Samsung S22 Ultra (on which it is copied).
Hell, it even came with a stylus, headphones and a free case, what a deal!Only problem, upon launching it, I could only notice the cheap “Welcome” text animation that ran somewhere around 2FPS (and I’m pretty generous).
When the interface finally loaded, everything was kinda responsive and looked like Samsung Android. Only problem, this is only a facade, all apps have icons of Samsung apps but are in reality only the Android defaults.
Also, I noticed in the settings that the phone exactly matches the seller’s page which means 8GB of Ram and 240GB of rom. Being naturally skeptical, I fired up adb and to my immense surprise, something bad showed up…
What? Have I been lied to??
Sadly yes, this phone is in in reality displays a MTK6580_8.1 in its properties and upon a quick search on the internet, the specs match:
Now comes the case of that “128GB” Micro SD card included as a “gift” with the phone. Formatting the card to ext4 (or any filesystem) would work but mounting it always returns an error which may maybe be an indication that the card might be fake as well (yes it is).
Also, after some time, inspected the multiple cameras at the back. Turns out all of them are fake except the very top one that is the only one that can actually take pictures. I’ll see more about that when I’ll take all of this apart (maybe for a next blog post 👀).
So, in conclusion, remember two things:
Of course, I opened a dispute and given the activity of the seller, I’ll probably see my money again in some days (I’ll keep you updated for that).
That’s all for today’s post, have a great pride month and I’ll see you next time!
]]>If you are on the Matrix network, you probably noticed that some new spam waves are coming in these days.
Let’s go through a small history of spam waves I experienced while moderating rooms there.
This one was the first one I encountered and is the simplest form of spam. Basically, a user joins a room and then starts sending lots of messages usually containing the same text.
Those ones are easy to ban because it is the doing of only one user that is relatively easy to find.
This one was also a early one I encountered and the principle is exactly the same as the classic spam except instead of message, the user will send gore images.
The thing is that in plus of the annoying nature of the spam, the disgusting imagery will likely make lots of people leave until the situation is resolved and the messages deleted.
It is resolved pretty easily like the classic spam.
This is the method that has been used recently to slow down servers.Basically a certain user will take advantage of outdated and open servers that don’t check anything for registrations (no email, 3PID or captcha) to register thousands of accounts (event tens of thousands in some cases) and then make them join a single room at the same time.
The federation lag caused by the mass join will render most servers in the room inactive as they have to catch up with federation (no event priority yet).
Sometimes, the bot owners might also spam the room with messages in the meanwhile to add a bit more of hell into this.This is the spam method that has been used against Furry Tech on March 1st 2022 in an attack that started at around 06:00 (Europe/Helsinki timezone).
Thanks to Tulir for compiling lists of user joins in spam waves.
While my server (jae.fi) got the federation pretty much figured out pretty quickly (within two hours of the attack), some other servers (like the-apothecary.club) is still struggling with the backlog at the moment I am writing these lines and hasn’t federated any room changes yet (ACL, power level change, room access change).
To mitigate this spam attack type, I mainly put the room on invites only (invites are restricted to admins) and fired up Mjolnir to do the big of the work.I also compiled a ban list with (almost) all domains that started spamming.
In the meanwhile, another admin of the room started contacting homeserver managers (when it was possible) to let them know of this problem.Some of them acted very quickly and I want to thank them for that. Those servers got (of course) unbanned as soon as the mess was cleaned on their side.
Now the room has hundreds of servers in the ACL list but we are unlisting the servers where the managers are responding positively and are patching the problem.
So if you are a homeserver owner, please, please, if you want to run open registrations, add some sort of gatekeeper, an email confirmation, a 3PID or even a small captcha.
Good remark from Dezponia in the Furry Tech channel:
“[…] homeserver admins that know they don’ t need user registration, because the intent of the server is to be a single user instance for themselves, or just manual invites for friends, should disable registration entirely. Fast and easy to do and most likely the case for a lot of these servers since synapse had registration enabled by default until recently.”
This avoids that a single bad actor just creates thousands of random accounts in one go via a single API endpoint.Note that it will never stop spam completely but will at least render it more painful to setup in the first place.
That’s all for today and I’ll see you next time!If you liked that blog post, don’t forget to subscribe to it via RSS and if you have any questions, feedback or just want to say hello, join my Matrix room (all of that is in the blog header)
P.S: a PR has been created to the moderation bot Mjolnir to be able to kick most bots in one go.
]]>Check out this cool fennec I found.
]]>You will need:
First, put the sugar and water into the pot and put the head on medium.
When it becomes a syrup, add the peanuts.
Let the water evaporate. When it is evaporated, stir it until it has a brown-ish colour.
When it is good enough for you, put it on a sheet of cooking paper to cool down.
And voilà, you have crunchy peanuts that can be used as a topping or eaten as a snack.
I’ll see you next time!
]]>I recently got my hands on a VR Headset: the Valve Index, which is something I wanted to try and experience on my own for quite some time.Previously, I only got the occasion to try VR three times in total (and that was at the time of the Occulus Rift, so quite old. One was in a professional setting in which VR was used to design and test parts inside of a 3D modeled plane and the other two at various gaming-related conventions (the Savoie Retro-Games to cite the most well-known).
First off, getting VR to work is quite the setup (at least with this headset).You will be handed:
The first step I did was to install the base stations and there was one of the first problems. The official guide recommends you to drill holes to screw the stations directly to the wall which would be the best method, but, problem is that I do not own a drill capable of the diameter required for the stations and buying a drill only for that seems a tad expensive (also, laziness).Instead of that, I used plain old double-sided tape which does its job wonderfully (even though the setup looks very cursed now).Each base station has its own power brick and does not needs to be connected to the computer.
After that, you need of course to plug the headset into your computer, start SteamVR and begin the calibration.Those steps are really easy and the calibration is basically outlining your room using one of your controllers.After this step, everything should work as intended… if you’re not running on Windows 11.Yup, that’s what I did at first. When waiting for the headset to arrive, I installed Windows 11 on another disk, naively thinking “Oh, it’s not that different from 10, it should work correctly”, suffice to say, it doesn’t.Basically, SteamVR (same with the beta) would sometimes ask you to recalibrate everything, during gameplay, you would start clipping through the floor or just speed through spacetime without even touching your controllers.I then downgraded to a Windows 10 installation which fixed all the annoying problems.
Now, let’s get to the best part: the games.Basically, the first game I ever launched in VR is Half-Life: Alyx, one could say I bought VR mostly for this game and I wasn’t deceived.As of now, HL:A is the best VR game I have ever played. Weapons are usable easily and all have their own quirks that makes them useful, environments are very diverse, detailed and will reward those who will look a bit further than the surface level with some plans, drawings or even books that add even more depth to the world of Half-Life. The story itself? Well, it’s a Valve game.Even though the game itself is very short (could finish it under 10 hours of playing), you find yourself stopping often just to observe the environment or the landscape. The best example of this is when you launch a new game, the scene feels real but isn’t too overwhelming.In the end, if you want the best VR title so far, go for it, it’s worth every single second.
Other notable games are VRChat which can seem boring at first but you end up growing a liking to it.H3VR (Hot Dog Horseshoes & Hand Grenades) is also a nice game if you like to shoot stuff. The gunplay in this game is more focused on realism and throughout gameplay, you can see how much effort has been put in every single weapon even though the game itself is made by a very small team.Here is a small video of me shooting hot-dog targets to demonstrate the game:
{{< yt “L7A34ye4u8M” >}}
In the end, VR is probably the one of the greatest things I ever used.Sadly, the entry price for it is still quite high and cheaper options such has Quest headsets are owned mainly by Meta.Hopefully, Open headsets such as the Relativity will become more widespread and cheaper over time.
I’ll write an update when I will have taken some time to install a Linux to test VR and see if it works as well as on Windows.Until then, I’ll see you next time!
]]>First, let’s remind ourselves what is IPv6. Wikipedia describes it as such:
Internet Protocol version 6 (IPv6) is the most recent version of the Internet Protocol (IP) […] IPv6 was developed by the Internet Engineering Task Force (IETF) to deal with the long-anticipated problem of IPv4 address exhaustion. IPv6 is intended to replace IPv4. In December 1998, IPv6 became a Draft Standard for the IETF, who subsequently ratified it as an Internet Standard on 14 July 2017.
So, the main points are:
But also other, other points not shown in that short introduction:
One big advantage of IPv6 is that you could give every living creature on this planet (Earth) billions of addresses and still have millions left to play with. This means that every device, that is phones, tablets, computers, servers and so on can have their own unique address.
Going IPv6 only is easy with MikroTik, just go into WinBox, IP → DHCP Client and delete everything there.
Now, first thing: configuring DNS servers.
I use DNSCrypt-proxy on my main machine, you can see the documentation for it on the ArchWiki. I use the cloudflare-ipv6
servers.
Only problem: lazy websites that never bothered to use IPv6 (hello Slack and others, blaming their hosting platforms, that support IPv6 BTW, instead of moving their arses).
For that, during business hours (as my current work relies on Slack), I use the Trex.fi DNS64 server, which does its job wonderfully.
At the end, I don’t feel I’m missing out on anything by turning off IPv4, only badly made software and websites break.
For the ones that are doing it correctly, that we use often is:
As for the bad students:
Overall, it is a fun and interesting experiment, but also a sad one when seeing how many providers actually use it.
That’s the end for today, and I’ll see you next time!
]]>Now, let’s go on with today’s subject: uLauncher which is in my mind the best application launcher around.
For the little backstory, I was trying to find OBS Studio in the horrendous default XFCE start menu (yes and as much as I love XFCE, I cannot use that damned menu). I then remembered that on macOS, we have that Spotlight search bar (that you trigger using CMD+SPACE) that has to be one of the most useful things.
I then started to search a bit around the web, only to find what I looked for: uLauncher.
Note: thanks to Cadence for mentioning the existence of Krunner and Kupfer that can fill out the exact same purpose.
Installing is effortless (at least on Arch) if you have an AUR package manager like Paru and is simply paru -S ulauncher
(or ulauncher-git
if you prefer to live on the edge).
After installation, a last systemctl --user enable --now ulauncher.service
and you’re all set, you can now try CTRL+SPACE to reveal the launcher and start typing.
But wait, there’s more!
You can actually extend uLauncher with countless extensions which can do anything from calculating currencies to copying emojis. It is very random, but some of those are really useful.
My current setup uses those extensions:
pip3 install pytz pint simpleeval --user
before installing)In the configuration window, you will also find the search engine tab, which you can customize by bringing your own to it.
Well, I think that’s enough for today, if you liked this article, you can subscribe to this blog via RSS.
Again, let me reiterate all my wishes of good health and happiness for this new year that is 2022.
I’ll see you next time!
]]>Greetings, small post today, nonetheless important.
TL;DR: I’m transgender, please use the she/her pronouns with me now.
Those whom know me AFK (away from keyboard) might have noticed some changes over the past year or so (since April 2021 to be more precise) and the reason for this might come as a surprise to some of you.
On April 28th 2021, I started a transition, but it was only the first step of a long journey.
Now that I moved on my own, settled in a place I can call home, I feel much more comfortable coming forward like this. Finally, getting a job at the start of the year acted like a catalyst through which I started to feel better.
Since I moved, I started enjoying small things again such as walking around where I live, eating a good homemade meal or just listening some music instead of surviving for the sake of surviving.
In the past few months, I met countless people which are now good friends, support me in any situation, and they are proving to me that improvement is possible.
So now the time to thank people for support:
And most importantly, thanks to you for reading this far.
If you have questions after reading this, my direct messages are open on Matrix (@me:jae.fi) or any other platform (you’ll already know how to contact me there then).
The journey is long, but the path is free, I’ll see you next time!
]]>While waking up this morning, I had an idea: let’s stop living in a complete mess of cables and actually organize everything, at least a bit.
Then during the day, little by little, I started removing stuff from my living room (that is also where my bed is since my apartment is quite little).
One of the most challenging things was to clear up the cable mess that comes with having multiple monitors and other stuff plugged in at all times.
The plan, next, is to buy an IKEA shelve that I will place at the opposite side of the desk. A bed that I will be placed where the Lacks and the seat are in the pic (at the very back). All of this is from a confused drawing I did this morning to avoid losing the idea itself.
For the shelves, I decided to go with a Kallax from IKEA, which seems to be a great one for the price (we’ll see that on the next post of this small series).
Furthermore, some friends suggested adding LED strips (Edit: white LED strips, RGB stuff hurts my eyes) at the bottom of the walls and in the corners of the room. I have yet to decide if I will do it because I have absolutely no clue on how to wire all of those things to make it work, let alone how to control it.
At least at the end, I think the result will be pretty nice looking and I will keep you peeps posted about it! If anyone has any idea on how I could improve all of that, please message me on Matrix (@me:jae.fi) and I will be happy to hear about your suggestions!
I’ll see you next time.
]]>I decided to replace one of the 300Gb disks for a newer 2Tb one from Seagate, which I bought brand new from Verkkokauppa. Near 13:00 UTC+3, I installed the disk onto the physical host and performed a clean installation of VMware ESXi.
Quickly, I realized something was wrong, the fans were louder than usual and the server was not shutting up after some time like it usually does. I then jumped into iLO and saw, the temperature reading of the disk which was at around 50C which was causing the fans to go as fast as possible (79% according to ESXi’s sensors readings).
By security, I decided to shut down the server until the disk problem is resolved (and mainly because I couldn’t sleep with all the noise it was doing).
Turns out… HP hardware doesn’t like unapproved hardware to be attached to it. After some research, it turns out only a bunch of disk have sensors that register correctly with iLO. Luckily, one of those is a Western Digital Blue that was sold at Verkkokauppa, so I got one this morning, 2Tb as the disk before.
The new disk installed, the server is as quiet as before. All services are restored and back to normal as of now. So, if you own an HP server and want to upgrade the disks, stay away from the Seagate ST2000LM015 and pick a WD Blue WD20SPZX instead (at least for my ProLiant DL360 G7).
I’ll see you next time!
]]>Only problem? People that wish to block JavaScript couldn’t even see the content due to some stupid decisions on the theme maker’s side. As mentioned by someone in the Blogger’s Gathering Matrix room, it might have been the script that did the fade when loading the website.
First, as mentioned by someone else, you don’t need JavaScript to do a fade, CSS is more than enough. When contacting the support for the theme, asking to see if something could be done, they explained to me that “JavaScript is required for this theme and cannot be removed” which is something I can’t really accept.
If the theme is so much tied to JavaScript that it displays a blank page if you disable it or if there is an error in the said script, there is something wrong somewhere.
This is why I decided to remove completely the theme from the blog and install a new one, derived from the default terminal-theme and named jae-theme which is also Open-Source.
Unlike the old one, this one works even if you are blocking JavaScript and web fonts.
As much as I want a nice-looking blog, if it blocks users from seeing it, it doesn’t feel right to me. I want my content to be available to everyone, for free, forever, without any filters.
I think that’ll be enough for today!
]]>As you may have seen on my Mastodon, all major services now have a Tor address, which are:
All services were migrated without a hiccup except for the blog which runs on Ghost. The software doesn’t support multiple hosts and this was causing problems as it was trying to upgrade the Tor URL to an HTTPS one. The solution was pretty easy: create a mirror blog which uses the same database as the first one that only serves on the ONION address.
I will never block Tor, and having onion addresses is now the default on my host.
I’ll see you next time!
]]>I’ve decided to finally use a dark theme for this blog as I received several complains of people asking me to add one.
Also, you may have noticed, there is now a comment section under each and every post.
Those comments are powered by the software Cactus Chat that uses Matrix to provide a privacy-respecting comment section. It is very simple to add it on a blog and really easy to use (if you already been on Matrix before).
Among other things that changed, this blog also supports WebMention now, it is just a small bonus but I wanted to test it.
That is enough for today and I’ll see you next time!
]]>Well, surprisingly, the MacBook Pro M1 held on its promises. Even after heavy daily use for now more than three months, the battery is still spectacular and the performance likewise.
The software side has received few updates (not that much in comparison to what I had when I ran Linux) but those broke nothing so far and were totally painless (macOS lets you reboot when you want to).
Even though I may use that laptop way more than what is probably expected of it (goodbye sleep, I love having weeks of uptime), it holds without a problem almost any work I can throw it at.
Since the last article, Docker has finally come out on this platform and now works flawlessly. The biggest problem I encountered so far with my job is when trying to build the front-end of an app that uses yarn packages, the build fails (probably due to an outdated package or something?) but I don’t give it much thought as front-end isn’t my job. What I also find frustrating on macOS is the fact you need to download Xcode packages to get basic stuff such as Git. Even though I don’t use it, Xcode is bloating my drive on this machine.
To sum up, the M1 stays a strong machine, even after months of intensive use. However, the price tag starting at 1.5k euros is very high, even for a machine like that. So unless your company pays for it, or you are rich, don’t buy one, keep your money to buy a ThinkPad (especially old ones) or any other laptop that may not have the same performance, but that will give you at least some degree of control over the software and the hardware of your machine. If macOS can be pleasant to use, it also has constant reminders of it being closed and restricted on everything.
That will be enough for today, and I’ll see you next time!
]]>The next interruption will be announced when it will be time to upgrade the storage (which will probably be done some time during next month).
I’ll see you next time!
]]>This year hasn’t seen that many accounts deleted. Considerable changes appeared back in 2016-2017 when I started to take privacy matters a bit more in consideration.
Now the only major accounts left are two YouTube ones and a Google Drive one (awaiting migration to Nextcloud) but those should be removed by the end of the year.
I’ll see you next time!
]]>As you may know if you are in channels sourrounding me, I finally stepped up in my self-hosting quest and got a home server to host all my stuff myself.
In the past week, as I got this new machine, I started moving my different services and sites on it (which is fully done now), so sorry if it was a bit laggy or just completely down for some time.
Now, the next goal is to get the hardware required to make mass storage possible, which I hope will be possible over the next months.
In other news, I have a small Matrix room to talk about this blog, so don’t hesitate to join!
I’ll see you next time!
]]>Well, surprisingly, this machine changed my mind as it is basically astonishing to see how well it runs for an ARM-Based processor. In this article, we’re not gonna talk about benchmark (because I mainly find those irrelevant) but rather of everyday usage in my job (back-end developer).
First, this thing is fast, everything you open is near instant and that may be thanks to the damn 3G SSD.
Surprisingly, everything runs as it was an x86 processor, Rosetta 2 being completely transparent to the user and loosing very little performance at the end. Anything can run on it that is software (Renoise for instance) or even games (Minecraft being the most famous example).
I was also surprised by the performance of World of Warcraft which is surprisingly native to the M1 (good job Blizzard). Other applications like IDEs are running smoothly without any hiccups and now, most of those are actually M1 native like the JetBrains suite or Visual Studio Code. On the side of custom packages, Brew works as expected without problems and the major part of software will install without a problem. Compilation times are also more than generous (very fast) on projects I am working on. The only bad thing I see is the Docker support that is still a bit junky, but it is being fixed at the moment.
Battery life is another good point of this machine as it can hold a complete day without needing to be charged (08:30 to 23:00). For comparison, my ThinkPad T430 I got in April of last year barely passed the 2 hours mark. In the end, Apple Silicon machines are looking very promising, given software providers start to support ARM correctly. Apple made the bet that they could switch to an ARM-based CPU, and they’ve done it correctly.
I’ll see you in three months to see if that positive review still holds.
]]>Maybe with the recent changes in my life (as you may know, I moved to Finland) I needed to change some things around here.
I was browsing the awesome-selfhosted list on GitHub when I saw the blog engine named “Ghost” which looked way more refined than anything I could ever do with Hugo or Spip so let’s give it a spin!
Furthermore, on a minor note, I changed the server, and I’ll be starting to migrate services such as the Gemini websites soon to the new hardware! Of course, you will be notified when it happens.
P.S: the sign-up feature of this website is broken, do not try to use it. Also, for some reason, it wants to make people pay.
P.S again: removed it completely :)
]]>Seeya in the next post!
// Jae
I talked about this one extensively in [this blog post]({{< ref “/blog/2020/nov2020-element-matrix.md” >}} “Using Matrix to replace proprietary and centralized chat apps”) but tl;dr:
If you want to try Element, you can go on their official website but please, pick another server than Matrix.org as it is already overloaded by too much users. A good server list can be found here.
This one is a messenger I have been using for quite some time in a more professional setting as it is really easy and quick to setup. All you need is a phone number and here you go!
The needed phone number is a big point of criticism as it could be used to identify you, however the Signal team said in a Reddit AMA that they are currently working on a way to use the app without a phone number (which is a good thing).
One of the best “selling points” (even tho it is not sold) of Signal is that everything is end-to-end encrypted. It is also advertised by Edward Snowden since quite some time now (since 2016 when it was called Open Whisper Systems).
Everything is Signal is Open-Source (from the server to the clients) but self-hosting it isn’t really useful as an individual it is not federated.
Sadly, Signal relies on nonfree Google Play Services but can be used without. There is also a fork named Langis which removes all Google Play Services dependencies.
Threema is a Swiss messenger which has been around since 2012 and claims to have more than 8 million users (January 2020).
As like the other two, Threema is completely end-to-end encrypted but is the only one in the list which is paid (3CHF which is frankly nothing).
As the apps are Open-Source, the backend of Threema is sadly not yet open.
The app itself doesn’t contains any trackers and can be downloaded and used without the use of Google Services (even tho Firebase Cloud Messaging will be used when available in order to push notifications onto devices), they even have their own shop on which you can buy a license and download the app.
Threema doesn’t requires you to have a phone number or anything else to use the app and in fact, it can be used completely anonymously.
The overall quality of the app is extremely good and to its advantage, it got a security audit in November 2020 which resulted in:
Cure53 needs to underline that the overall impression of the code quality and general structure of the project can only be described as unusually solid. The design and implementation were clearly accomplished by a rare team of experienced and security affine engineers. In Cure53’s opinion, there should be no doubt about the focus of these processes being on providing a highly secure messaging application without encumbering the overall user-experience.
Which is actually a really good point in favor of Threema.
In the end, I am using three messengers which I find refined and frankly good.
If you are a Whatsapp user and still haven’t switched to something better, I urge you to do so, friends and family might even have already switched to something else like Signal.
On my part, I’ll see you in the next blog post, if you liked this one, you can subscribe through RSS so you dont’ miss any future posts.
]]>Few days ago, I discovered the Firefox addon Redirector (which you can download here) which I now use as a subtitute for Privacy Redirect as Redirector is much more powerful. As Privacy Redirect only supports Nitter, Invidous, Bibliogram and OpenStreetMap, the possibilities in Redirector are pretty much endless.
This addon features two modes to redirect stuff:
https://example.com/*
https://(www.)?example.(com)?/(*.)
Here is some of my current settings:
Redirect: https://(mobile.)?twitter.com/(.*)
to: https://nitter.tedomum.net/$2
Example: https://twitter.com/WholesomeMeme/status/1329846975575904256
→ https://nitter.tedomum.net/WholesomeMeme/status/1329846975575904256
Redirect: https://www.sciencedirect.com/science/article/pii/*
to: https://sci-hub.se/https://www.sciencedirect.com/science/article/pii/$1
Example: https://www.sciencedirect.com/science/article/pii/S1057521920302131
→ https://sci-hub.se/https://www.sciencedirect.com/science/article/pii/S1057521920302131
Redirect: https://(www.)?amazon.(.*).(.*)
to: https://darmarit.org/morty/?mortyurl=https://amazon.$2
Example: https://www.amazon.com/gp/product/B01EHMXCL0?linkId=a22cc4b646e241776ad8f630d3e9f2a3
→ https://darmarit.org/morty/?mortyurl=https://amazon.com/gp/product/B01EHMXCL0?linkId=a22cc4b646e241776ad8f630d3e9f2a
Don’t hesitate to thinker by yourself to improve the efficiency of those redirects.
As you may have seen, I am now using a XD75re keyboard (since september) which runs on the Open-Source firmware QMK. I chose the XD75re as it is a ortholinear keyboard, which, I wanted to test for quite some time now. I primarily intended to buy a Typematrix but those turned out to be pretty much not modular enough with a price tag of around 110USD.
This is why I settled on the XD75re. Because it uses QMK (Quantum Mechanical Keyboard), everything can be modified, from the layout to the LED effects of the board, without any specific software (even tho the qmk
cli utility is recommended to flash new layouts).
My very own keyboard uses:
With a price tag of around 95EUR for everything, it is somewhat affordable for a custom keyboard and even tho it takes some time to be used to the layout, really comfortable.
Do you guys love foxes? If so, you’re in luck, I’ve discovered a small API that gives you a random fox for infinite cuteness! Here is an example of this API, right into this page (refresh to see the fox change):
That’s all for today, I’ll see you next time! If you like my content, don’t forget to subscribe through RSS!
]]>But wait Jae, we already have countless other chat apps already, Telegram, Signal and even XMPP which is federated!
Well, here are the advantages of Matrix over all of those:
Matrix is 100% open-source. As you may know Telegram’s servers are currently closed-source which poses a problem about trust. Nobody can say what the server is doing nor what it is harvesting which could be very dangerous. On the other hand, Signal, XMPP and Matrix are all fully open-source.
Matrix isn’t centralized to a single server. Currently, Telegram and Signal are centralized apps which means if the server goes down, everyone else goes down. moxie0 of Signal even wrote a blog post on ‘why Signal will never have federation’ which is in my opinion a big mistake. XMPP still stands up as it is federated as well and has plenty of server implementations.
Matrix has a flagship client which has a great UX. This is a big point, as other federated protocols such as XMPP are kinda like a jungle for new users, you are greeted with a list of all clients which you can use and then comes the step where you have to choose your server. Lots of those servers are sometime hard to find, have very spartan UIs or even no web form or easy way to register whatsoever. On the other hand, Matrix has a flagship, Element, which is deemed as the ‘official Matrix client’ since it implements the Matrix specification correctly and is made by basically the same people. While other projects would have only done a server, Element made a polished client, focused mainly on the UX in order for people to take the first steps of moving to anything else easier. Even if the UX is still not perfect and some aspects aren’t finished yet, moving to Element will be easier than moving to any other XMPP client.
I have been using Matrix since 2016 now and it has considerably improved over time, coming from “barely usable” to “let’s host my own homeserver”. Even in its current state, lots of things are to be improved such as communities or custom stickers but everything is on the right way. From now on, everything can only improve, we are seeing new server implementations, new clients, bots, communities moving to Matrix.
Matrix has several other features such as E2EE (end-to-end encryption) which is now enabled by default and bridges which can be used to temporarily bridge a Matrix room and a slack chat for instance.
If you want to give Matrix a try, download Element and create an account, it doesn’t even requires an email address! You can also come and say ‘hello’ in my very own channel #home:jae.moe !
That’s all for today, I’ll see you next time! If you like my content, don’t forget to subscribe through RSS!
]]>First, everything is NixOS is declared in a configuration file located at /etc/nixos/configuration.nix
where you declare packages you want to install, services to start, udev rules, ECT, you get it.
This is the first very weird thing as you don’t really install packages with the CLI directly (even if you can), instead you modify the config file and rebuild the system with nixos-rebuild switch
.
NixOS is made in such a way that everything aims to be reproducible. An example: if you want to get the exact same setup as I have, you can just take my configs repo, clone it on your NixOS installation, run nixos-rebuild switch
and voilà, you will have the exact same programs as me installed in the same way with the same version (roughly).
In this distro, adding a user is really easy and goes like this:
{ config, pkgs, ... }:
{
users.groups.plugdev = {};
users.users.jae = {
isNormalUser = true;
extraGroups = [ "wheel" "docker" "adbusers" "plugdev" ];
shell = pkgs.zsh;
packages = with pkgs; [
# Games
minetest stepmania lutris-free pcsx2
# Misc audio / video / image
pulseeffects ffmpeg-full obs-studio inkscape krita
# Useful software
mumble qbittorrent libreoffice ledger-live-desktop
# Dev
jetbrains.idea-community lazygit gnome3.zenity insomnia jetbrains.rider mono msbuild dotnet-sdk_3 ganttproject-bin kubectx
# SDR
rtl-sdr gqrx gpredict noaa-apt welle-io
];
};
users.extraGroups.vboxusers.members = [ "jae" ];
}
Let’s see what everything does!
users.groups.plugdev = {};
Creates a group named plugdev
, don’t pay attention to it, it is just a test for the Ledger Live application.
isNormalUser = true;
Tells the os that the current user is a normal one. It will create a home folder and set the default shell.
extraGroups = [ "wheel" "docker" "adbusers" "plugdev" ];
Here, we are setting the groups the user is in to grant special permissions.
shell = pkgs.zsh;
As you may have guessed it, we are setting the default user shell to ZSH.
packages = with pkgs; [
# Games
minetest stepmania lutris-free pcsx2
# Misc audio / video / image
pulseeffects ffmpeg-full obs-studio inkscape krita
# Useful software
mumble qbittorrent libreoffice ledger-live-desktop
# Dev
jetbrains.idea-community lazygit gnome3.zenity insomnia jetbrains.rider mono msbuild dotnet-sdk_3 ganttproject-bin kubectx
# SDR
rtl-sdr gqrx gpredict noaa-apt welle-io
];
There, we are installing per-user packages because yes, NixOS supports that, any user can have its own packages that others users can’t access.
Correction from hvdijk on Hacker News, “Other users can access those packages if they want to. Those packages won’t show up in other users’ $PATH, so other users will not be affected by them, but they could see what’s in /nix/store if they wanted to. This matters when you’re thinking of putting private data (such as an encryption key) in a package: it’s vital that you don’t do that on a multi-user system.”
Configuring NixOS for a daily use is at the end very easy (although I am getting some trouble to get Ledger Live working; which is the biggest problem I’ve had so far).
Now, let’s talk about where I got some trouble. As you may know it, I am a dev and every day I need to compile, test, run and so on. NixOS gave me some trouble to only run some programs from source such as Element Desktop or TeDomum IMG as the way the system is built, lots of directories are read-only and programs can’t be installed globally through NPM or PIP. I ended up using Docker to build the apps (even if it took a bit more time).
Needless to say, almost every other project worked.
If you want NodeJS to start a project for instance, you can just do nix-shell -p nodejs
and here you go, a shell with nodejs installed, ready to do what you want.
At the end, NixOS brings very interesting concepts such as a really great reproducibility but new users can feel lost as its way to work is really different from conventional Linux distributions. I’ll give NixOS more time and write a follow-up in some time to see how everything went.
If you want to give it a shot, the official NixOS website awaits you!
That’s all for today, I’ll see you next time! If you like my content, don’t forget to subscribe through RSS!
]]>As you may know it, my website uses the GoHugo website generator (code under MIT license by the way) which is super easy to use and has a really good integration with Gitlab Pages.
Getting OpenGraph to work is one of the first really easy steps to have a nicer presence when your website is linked to another place. It basically shows as a little card with a bit of information such as the name of the website, the author, the description of the page and an image. Twitter’s card are basically the same thing but for Twitter.
To add OpenGraph to your pages, just add this in the <head>
of your template:
{{ template "_internal/opengraph.html" . }}
The same goes on for Twitter’s cards:
{{ template "_internal/twitter_cards.html" . }}
At the end, the OpenGraph should produce an output like this:
{{< highlight html “linenos=table” >}}
{{< / highlight >}}And the Twitter’s cards:
{{< highlight html “linenos=table” >}}
{{< / highlight >}}Some other improvements are regarding custom shortcodes, like the one I made for spoilers which shows like this:
Which generates this HTML output:
As you can see, this is actually really easy to improve small bits of your website if you really want to.
However, if you are not the maintainer of the theme you are currently using, open an issue telling the maintainer(s) those shortcodes actually exists or if you can, contribute!
However, more shortcodes are available on GoHugo’s website including ones for Youtube, Instagram or Twitter.
That’s all for today, I’ll see you next time! If you like my content, don’t forget to subscribe throught RSS!
]]>As you may have saw it, Github (Microsoft) recently banned youtube-dl from their platform after a DMCA request of the RIAA lobby.
This incident has exposed a bigger problem: when do we decentralize code?
For now, people are using the centralized Github (Gitlab.com counts as well) for a lot of projects, at the point where Github is the website with the most software repositories in the world with more than 48M users and 195M repositories.
With such success, it is only natural that new developers choose Github to start their journey, it is pretty fast, can be used for free and has lots of people on it; but there is a catch: as you accept it when you create your account, Github can terminate any repo, any account for any reason they want and whenever they want (even if you didn’t broke the TOS) which gives them an unprecedented power on FOSS development.
The youtube-dl fiasco is only a reminder of how Github could harm the FLOSS community by completely wiping entiere projects with only the switch of a button (and sometimes, some annoying lobbies).
Then, what do we do?
We need to decentralize Git more. As speaking now, some solution already are somewhat decentralized, not requiring an account to contribute and working mainly with e-mails. We need more, a system where everyone could have its own little private island of code and then federate with others to happily share and contribute.
Some projects aim to solve that over-centralization problem:
Sadly for now, as you can see there is not a lot of alternatives but with some time, those can only improve!
So join the movment, delete your Github account and host your own repos, it will be healthier for FOSS!
That’s all for today,
I’ll see you next time!
If you like my content, don’t forget to subscribe throught RSS!
]]>ADOFAI is a game where you control two orbs (of fire and ice) and your goal is to get at the end of (lots) of levels by striking your keyboard (or mouse) buttons in rhythm with the music.
The game is challenging without being to hard and if you want more, there is still custom levels on the workshop.
Any player of rhythm games will like this one; it is also really cheap (as writing now only EUR5 on the Steam store).
CS:S is a well-known FPS game made by ValVe.
The basic gamemod is ‘Terrorists vs Counter-Terrorists’ but there is still plenty to choose from like:
And many more!
I usually stick to the regular matches as I feel the guns aren’t as broken as on CS:GO (the latest opus of the series).
For now, that’s about all there is to say.
If you liked this post, stay tuned for the next via RSS!
I’ll see you next time.
As it is now, the blog does not utilizes Tailwind CSS anymore.
As a reminder, you can see the code of the theme by clicking here.
Stay tuned for the next blog post via RSS!
I’ll see you next time!
]]>About a week ago, I finally received my Pinephone Postmarket OS edition.
The Pinephone is a mobile device made by Pine64 and designed to run free OSes like:
As described earlier, my version of the Pinephone runs on pmOS which is based on the Linux distribution Alpine Linux; it uses the graphical environment Phosh which is based on GNOME.
Let’s get over with the few cons this phone has. Keep in mind that this device is a preview and can only get better over time.
The button to lock the screen in fact only shuts it down, that means the whole OS doesn’t suspend and battery drains very quickly (from 96% to 83% in about 5 minutes).
There is already a ‘fix’ but it requires to run a command in a terminal to work.
As said earlier, this can only improve over time.
For now, the software you can get on pmOS is either from the Alpine Linux repositories or the GNOME store.
As for now, very little software is adapted for the phone but each day, new ones are coming.
The only thing I’m mad about is that there is no Matrix client supporting E2EE currently on the Pinephone (there was Nheko but it was removed from the Alpine repositories since it was not maintained).
Yes! Finally, a real, full Linux on a phone!!
Hey, don’t say Android is Linux, Linux is to Android what BSD is to MacOS.
I find it really nice that you can manually disable features of the phone like:
If like me you are totally paranoid about someone spying on you, you can disable yourself the cameras.
Disabling some features can also extend battery life!
Because the Pinephone is Libre and is only using Libre software, everything can only improve.
As this article is getting published, work is being done to improve battery life, port more software, create an application to use the cameras and much more!
In contradiction to Android, IOS and KaiOS, the Pine ecosystem is sane, clean and does not relies on a centralized surveillance system to work.
Nothing prevents you from modifying the OS nor the hardware.
If you don’t like and OS, you can just change it (good luck to do that on regular Phone with a system that isn’t Android).
Some people would deem to say that the Pinephone is too slow for everything. For now, maybe, but keep in mind this is a 150Eur phone so you get what you get for 150Eur but as said many times, it can only improve, waiting a little bit longer will give more powerful hardware for a more optimized OS with features such as deep sleep or better battery management.
I am recommending the Pinephone for everyone who knows the ‘risks’ of running an early version of what will be , hopefully, the future of mobile phones.
I’ll make a follow up of this article in roughly three months to comment on how it is as a daily driver for an extended period of time.
Do not miss the next articles by subscribing via RSS!
I’ll see you next time!
]]>First off, I added some analytics by curiosity, to know how much people read my blog posts and where does they come from (referer) and the country they are from.
I tested two solutions for analytics in the past month:
I didn’t tested Matomo since this solution is too complex for what I want to achieve, I need something simple, self-hostable easily and very light.
You can see more alternatives to Google Analytics on Reverse Eagle’s developper website.
I chose GoatCounter and Plausible since they have all the criteria I required:
Now, let’s compare the two shall we?
GoatCounter must be the easiest to setup and get running, as it is basically a static executable (written in Go), you just need a simple ./goatcounter
to start it.
My current command to launch GoatCounter is ./goatcounter serve -listen 0.0.0.0:8080 -tls none
so GoatCounter listens on the local port 8080
so it can be used with a reverse proxy (more on that later). If needed, Goatcounter can get TLS certificates but I would recommend staying with a reverse proxy as I personally feel this is much more practical.
On the other hand, Plausible uses Docker to work and provides an already nice-looking docker-compose.yml file.
You just have to pay attention so you don’t miss the initial admin setup, otherwise it’s still really easy to deploy.
As said earlier, GoatCounter is a static executable.
To add a website, it is easy as ./goatcounter create -domain stats.domain.tld -email email@domain.tld
and the setup will automatically ask for a password.
Now, all you have left to do is to point the dns of stats.domain.tld
to your GoatCounter server and you’re all set!
Just include the Javascript script in your <head></head>
and you can start.
On the other hand, in Plausible, you just have to hit the big ‘+ Add a website’ button, fill the form and here you go, you get the code to add in your <head></head>
.
/!\ I didn’t figured how to add custom domains for Plausible yet (self-hosted), I’ll keep you informed on that.
Both solutions have a really nice web interface but I must say, Plausible’s is my favorite.
The interface of GoatCounter is very simple and offers lots of informations very efficiently and offers even more by clicking on the charts.
On the other hand, Plausible offers a really refined interface but with less options, it however shows a really nice map of all the visitors and a real-time counter of how much visitors there is on the website.
In the end, I settled on Plausible for my own website as said earlier the interface is much more refined.
I’ll soon make a post about what web server I use as a reverse proxy for the appps I host and why it is so cool so stay tuned!
I hope you liked this post, if you did, don’t forget to subscribe to this blog through RSS.
I’ll see you next time!
First of all, I am currently writing this article on my Thinkpad since I am currently in vacation in the south of France at my familly’s.
No worries, I’ll be back very soon.
Let’s get started shall we?
In the last post, I said a lot how I thought this machine was well-made, well-thought and full of surprises.
I made another discovery: this very Thikpad (a T430) is equipped with a 3G/4G modem and can read SIM cards.
It means, with the right plan, I can get data anywhere which is super cool.
Even the seller page didn’t mentionned that and I bet they didn’t even noticed it since there is still the factory tape onto the port (which we need to pull in order to use the port).
Since then, I also started to mod my laptop, even if it is very light by some standars.
My first goal was getting rid of the Intel Management Engine (ME).
As lots of you know, in order to do that, you need to have a clamp and basically re-flash the BIOS with an external device.
Because I still don’t have the material (and the time) to do these kind of thing, I used 1vyrain which is super simple to use.
As said in the documentation, it is possible to flash a custom BIOS like Opencore or Libreboot using 1vyrain but I want to be sure that I can unbrick the laptop in case of.
A small goal is also to replace the default 500Gb hard drive by a solid state drive (I think of the same size).
Maybe I’ll use an Ultrabay adaptor to get more storage and bring it to 1Tb.
Since two month, I am doing great efforts to reduce my usage of proprietary software solutions (and when I can, hardware as well) and this started with the usage of Linux-libre
on my Thinkpad which is a Linux kernel without any proprietary blobs.
To be honest, if GNU Hurd was more up-to-date and not a joke, I would have probably used it.
I can now say that my laptop contains no (or very little) proprietary software which is a first win personally.
To communicate, I use Element.
To surf the web and search I use Firefox with SearX and Yacy.
Most of social networking is handled with Mastodon since I don’t have any other accounts.
I am now using Xmonad as Window Manager which is very light and easy to configure.
As you may suspect, Thinkpads are portable machines.
Mine excells in that matter and are far more better than my previous laptops.
We are looking here at a battery life of over two hours and a half for a very light laptop.
I must also say that I didn’t see any throttle due to temperature, the laptop stays cool no matter the load it have to sustain and at last, it makes also very little noises which is one of my favorite points.
As you saw in this article (and in the previous one), I think very highly of this laptop.
If you want a good laptop with perfomance, a nice battery life and a fair price, a Thinkpad is your laptop.
The name was up to my expectations and I hope it will be that way the rest of the time.
Little update on another subject: I am currently waiting for the shipping of the Pinephone CE (PostmarketOS) to make a complete review of the phone.
I hope you liked this article!
If you did, don’t forget to subscribe to this blog through RSS.
I’ll see you next time!
The current web is a shithole, almost all websites have tons of javascript, cookies and more with the sole purpose of tracking you to know everything about you, this is why I don’t trust the web anymore and want to use less and less browser “applications” and replace them with easier & better console alternatives.
For instance, I am not playing videos in my browser anymore, I instead use the MPV media player with youtube-dl which does a really good job (just playing the video without tracking and ads).
As you saw on the previous screenshot, lots of websites are using way too much cookies. We can all agree absolutely no app needs 83 cookies to function correctly, in fact, youtube pretty much works perfectly without any cookies and lots of other websites do.
Here is some of my recommendations:
In Firefox, all you have to do is go to the settings, “Privacy & Security” tab.
If you are using chrome, then I can’t do much for you.
Some of you may be familiar with the Firefox add-on “Noscript”. Only problem with this add-on: the customisation is almost null and you can’t really choose what to let pass and what to block.
With uMatrix, you can block everything, javascript, cookies, frames and even CSS and medias.
uMatrix is a great tool I will never stop to recommend.
Also, while I’m here, I want to make some promotion to the Reverse Eagle collective that aims to hunt OSS projects using non-ethical tracking solutions (google analytics/tags manager) with more privacy-friendly ones.
I know, this article was more me giving out a rent against modern websites but the next article will be better, I promise.
I hope you liked this article and if you did, don’t forget to subscribe with the RSS feed so you won’t miss any future posts.
I’ll see you next time!
This is a tune made for a ZX Spectrum demo. The music is even better with graphics on! {{< yt weFH_y1LGBw >}}
{{< yt jyw4HU-kUrU >}}
This particular tune is well-known for being used in the Crystal Dream 2 demo by Triton. {{< yt wgWFA2pyYm0 >}}
{{< yt URWNqs7FEXA >}}
{{< yt BiGwwzBbARA >}}
{{< yt POXaKOjdjRA >}}
From BMS, with love <3 {{< yt bYCbm469Zq0 >}}
]]>After doing some research and asking the Tedomum team, we deployed an instance in order to test ourselves.
Just like Peertube, OSP allows the user to create multiple channels without having to create multiple accounts which is practical if you want to sort your channels by topic (gaming, drawing, talk shows…).
OSP also allows you to record automatically your streams, post videos and record clips, just like the other platforms.
The software itself was easy to run since we are using Docker & docker-compose
. The problems we ran into were database problems, because the software is still in beta, the migration scripts are the ones by default for a flask project and are not migrating the DB correctly. If you run into this problem, you might have to downgrade the version, go to the admin panel, download a copy of the database, reset the instance with the new version and restore the database file at the installation process.
Here is what the Dockerfile looks like (Note: the latest revision, 0.7, is currently not supported by Docker):
version: '2.1'
services:
redis:
image: redis:latest
osp:
image: deamos/openstreamingplatform:latest
volumes:
- ./data:/var/www
labels:
- traefik.enable=true
- traefik.frontend.rule=Host:${hostname}
- traefik.port=80
- traefik.frontend.headers.STSSeconds=315360000
- traefik.frontend.headers.browserXSSFilter=true
- traefik.frontend.customResponseHeaders=Server:www||X-Powered-By:www
environment:
- REDIS_HOST=redis
- FLASK_SECRET
- FLASK_SALT
- OSP_ALLOWREGISTRATION
- OSP_REQUIREVERIFICATION
- DB_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db/${POSTGRES_USER}
depends_on:
- "db"
- "redis"
ports:
- "${ipv4}:1935:1935"
- "${ipv6}:1935:1935"
db:
image: postgres:11
volumes:
- ./db:/var/lib/postgresql/data
- ./wal:/wal
- ./postgresql.conf:/var/lib/postgresql/data/postgresql.conf
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
networks:
default:
enable_ipv6: true
driver: bridge
ipam:
driver: default
config:
- subnet: "${prefix}/80"
gateway: "${prefix}1"
Also take note that postgres isn’t used officially by OSP, see their wiki for the official supported databases.
The port 1935
must be open so OBS (or any other streaming software) can send the data to rmtp://<your domain name>/stream
At the end, OSP is a really good piece of software, for instance, I am usually streaming (from my desktop) with a resolution of 1080p at 60 frames per second with a bitrate of 5000Kbps and OSP handles it right.
On the releases 0.6, the devs also added an option to transcode in real-time the stream so it can be viewed in much more resultion but we didn’t activated it on our instance since it consumes a shit ton of CPU.
The latest version at the time (0.7) adds a really interesting feature: the chat is now served with XMPP and other users from other XMPP servers can join and interract with the chat without needing an account on the instance. Sadly, as said earlier, this release isn’t ‘Docker-ready’ yet so we’ll have to play the waiting game.
For me OSP is a project you need to follow closely if you are into streaming but also want to be able to share your content on libre platforms.
That’s all for today, I’ll se you next time!
]]>Let’s begin with the actual test shall we?
To start, Micro Mages does not have a native PC version and the bundled executable is just an emulator which is crazy for a game that recent if you ask me.
What about the game itself?
First of all, it looks nice. The sprites are simple but just what is enough to look really good, we can clearly see lots of efforts went into the spritework.
The level design itself is somewhat simple and fun to play, the objectives are clear and the game itself, challenging enough.
Haven’t played the multiplayer version for now but I think It will be fun with some friends.
Final rating: ⭐⭐⭐⭐⭐
]]>I discovered BSD few times ago when I was looking for a Systemd-free distro (essentially to test the alternatives, I have nothing against Systemd to be honest), on a forum, someone was suggesting switching to BSD which is not even a Linux distro.
Curious about this new thing, I downloaded FreeBSD as a test and installed it on my old laptop.
While this was a fairly old laptop (about 750Mb of ram, an old AMD CPU & GPU and a 65Gb hard-drive), FreeBSD ran smoothly and I though it could be a good idea for my main desktop which at the time was a Dell T3500 Workstation.
At first, it seemed to be a good idea: it looked just like Linux which I was using for quite some years and most importantly, my GPU (a Nvidia 750Ti at the time) had an official driver made by Nvidia which was somewhat attractive.
My first FreeBSD installation took hours, simply because I was in an old building served by an old ADSL line, at the time, getting 1Mb/s was pure miracle.
At first, everything seemed nice, it was working.
I had what I asked for: a simple desktop environment, a web browser and an IRC client to talk with my friends.
Then, few days after the initial installation, one problem became apparent: the software support.
I struggled to find software and getting it to work, while most software usually supports Window, Mac and sometimes Linux, finding native BSD programs was almost impossible, at the time, I was using Skype to communicate with class friends or Teamspeak for some games.
While there were ports of programs from Linux, for some reason, theses didn’t worked and just plainly displayed compilation errors.
This is what made me give up and get back to my Linux (Arch to be more precise).
A little while ago, I re-discovered BSD on the subreddit r/UsabilityPorn
which featured a extra good-looking BSD build.
After some time of research and testing, I decided to install FreeBSD on my desktop computer which is now definitely more powerful than my old one.
As always, the installation went smoothly but when trying to launch a desktop environment, one problem became apparent: my video card wasn’t (and is not) supported by FreeBSD.
Hopefully, after some research, I found a forum post that explained how to install the amdgpu
driver for the latest AMD GPUs and which worked fine.
Hooray, I could now use XFCE4 as a desktop, but wait, what about the software?
As said earlier, for me BSD has really restricted software which you can run on this system but this time, I wasn’t done, I learned how to use ports and for once, it worked!
Usually, the first thing I do when installing a new system is installing the Minecraft launcher and trying to play.
I saw that FreeBSD has a port named games/minecraft-client
and then installed it.
To my surprise, it worked. Not only I could play Minecraft on FreeBSD but also, I could now access a really big library of apps ported from Linux which is very exiting.
Now that I have this system, I’ll use it as my daily driver and post follow-ups to tell what I think about BSD after some usage.
If you liked this article, please consider subscribing through RSS so you won’t miss any articles.
I’ll see you next time!
Why did I do that?
Well this is simple: I love to browse dotfiles repositories and find useless, so essentials, scripts on the internet, I have the feeling of “it might come in handy some day” (spoiler alert, it doesn’t for the most part).
This is why I created this repo, to compile all the scripts that are actually useful for me. Nothing else, I swear.
Be sure to check the repo out and if you want, ask for a config you’d like to see (if I forgot one).
Don’t worry, you can takes theses scripts, modify them to fit your needs, share them or just use them the vanilla way.
If you like my content, be sure to subscribe with the RSS feed of the blog so you don’t miss any future entries.
Some updates about this repo will be discussed here and maybe some configs in particular.
I’ll see you next time!
Few days ago, I had an idea in mind: change the theme of my website, but why?
As you may know (or not), I don’t like when everything is smooth and too regular, I mean, yes, I like when all my projects works at the first try and without any flaws but sometimes, I dislike the routine of all things.
For instance, if I’m trying to learn something, I’ll try for few days and then, loose interest for that same thing I wanted to learn, this is especially present when trying to learn something academically.
You migh say I am lazy and you are probably right, or maybe routine isn’t a thing for me.
Luckily, working in new technologies doesn’t seems (for the moment) any kind of routine, I am always learning things, changing my ways of doing and most of all, discovering every day.
The fun thing about computers is the only thing bad you can do is erase a file or maybe corrupt the hard drive and since this is my field, I am confident enough to re-install everything and start from scratch again.
Some people like to have some sort of stability or assurance that their computer will not explode on their face or just delete random files and I fully understand the reasons but it’s simply not for me.
To get back to the themes, why did I had the idea to change the current theme, which is fine by the way?
Well, it is because of the reasons described earlier but also because I wanted to see how my website looks with another theme.
After few attemps, and the horror of the git submodules, I eventually gave up.
Why?
Because as said, I am lazy sometimes and I don’t wanted to fight with a repository.
This might sound anticlimactic but that’s the whole story.
I hope you liked it and if you do, be sure to add the RSS feed of the blog so you will never miss any future blog posts.
I’ll see you next time!
Etterna Online: this game is a fork of the rhythm game Stepmania with the ability to download song packs directly in-game and rank servers.
If like me you are a fan of rhythm games, this one is perfect as it is also open-source.
TIS-100: TIS-100 is a game where you need to program in a special assembly language.
At the start, you are given a PDF containing the documentation of the language and here you are, you are ready to begin.
With over 230 hours played, I can surely say it is one of my favorite games.
Starbound: Starbound is my most played game on Steam (more than 1500 in total) and one of my all-time favorite. This spatial exploration Terraria-like never ceases to surprise me with big updates or even with small details.
You click on an arcade booth? You can now play the Windows “Maze” screensaver.
Since some updates, there is also tons of additional missions and content to get, this game will never be truely finished.
GZdoom: the first Doom but with mods, custom maps and more. Anyone for a small game of Desert Bus? :^)
I hope you guys like these games as well, if you want to share experiences or suggest something to enhance the article, don’t hesitate to contact me.
I’ll see you next time!
As you may know by the rest of the content of my blog, I am a dev and a sysadmin and as before, I could only work from home which is impractical when I have to travel somewhere else for one day or even a week.
Thinkpads have an online legacy of being really good machines when it comes to IT stuff and this particular brand was recommended to me by lots of people.
I bought my Thinkpad from Thinkstore24 which is a German online shop specialized in Thinkpads.
I’m not gonna lie, at first glance, this machine looks good, it opens easily and everything feels nice, the cover, the keyboard…
First thing I noticed when installing Linux (Arch for thoses who will ask) is that this computer is very reactive. Event tho it contains a basic hard-drive over a much faster SSD, the computer is still very fast and reactive with little boot time whatsoever (under 30s for sure).
I must also say even after using it for long hours (more than 8 hours straight to be more exact), the laptop doesn’t even get warm.
The battery lasts approximately 1-2 hours after a 100% charge which is good enough for my usage.
In bonus, I also discovered that the key combo Fn+Spacebar
triggers a small light that lights the keyboard, useful when working at night.
The only thing I can complain about for the moment is that the laptop came with Windows which was fixed quickly.
At the end, I would say this is a really good machine that is up to my expectations.
I’ll see you in three months for the follow-up article.
In the meantime, don’t forget to check out the other articles :^)
See you next time!
I started this project in February 2020, as a way to learn how to use NodeJS and Express and it quickly became the most active one I am currently working on.
If I were to be honnest, I would say that I hate this project because it’s made uniquely of Javascript and it is one of the languages I like the least but for the sake of this article, let’s say everything is good and let’s see how it works.
First of all, in the beggining, I wanted Magikfiles to be compatible with ActiveDirectory so it could be used in a company more easily like you share a file, it detects automatically the current user, opens a popup with all the contacts and check the ones they want the file to be share with.
I quickly abandonned this idea since I was too lazy to replicate a AD infrastructure on my own network and I think it would have been a mess to integrate properly.
To manage the uploads, I used express-fileupload
, a really simple library.
Because I wanted to support multi file uploads as well as single file uploads, this small bit of code was my first achievement of the project:
let sampleFile = req.files.file;
// If the 'file' property is an array:
// Multiple upload
if (Array.isArray(sampleFile)) {
sampleFile.forEach((element) => {
element.mv(`${__dirname}/f/${fileUUID}/${element.name}`, function (err) {
if (err) {
return res.status(500).send(err);
}
});
});
} else {
// If the 'file' property is not an array:
// Simple upload
sampleFile.mv(`${__dirname}/f/${fileUUID}/${sampleFile.name}`, function (
err
) {
if (err) {
return res.status(500).send(err);
}
});
}
When you upload multiple files, express-fileupload
stores them in an array and I found out that the quickest way to detect if multiple files are uploaded, it is obviously to check if the send file
is an array or not.
As you may imagine, it works flawlessly so I kept this first portion of spaghetti code.
My second achievement was on how to show a file or a folder to an end user.
The code looks like this:
app.get("/f/:uuid", async (req, res, next) => {
var getUUID = req.params.uuid;
let files = [];
let imgFormats = ["png", "jpg", "jpeg", "gif", "webm"];
try {
fs.readdirSync(`${__dirname}/f/${getUUID}/`).forEach((file) => {
files.push(file);
});
} catch (e) {
return res.redirect("/");
}
await redisClient.get(getUUID, function (err, response) {
if (response != null) {
return res.status(301).redirect(`/auth?g=${getUUID}`);
} else {
res.render("view", {
files: files,
curUUID: getUUID,
imgFormats: imgFormats,
hostname: process.env.HOSTNAME,
});
}
});
});
To understand this code better, you first need to know how the file upload works.
Here is how:
f
is created (f for files), it will be where we will store our files/up
address, if the server detects no files or a file that is too big, it will throw an exceptionf
folder is checked to see if this UUID already exists, if it does (which is mostly improbable), it re-generates one, checks it and so on/f/UUID
After this, when the user makes a request to /f/UUID
, the server will check in the f
folder to first see if the UUID exists. Then, the server looks into the directory to see if there is files in it, in case the directory doesn’t exists / is empty, the user will be redirected to the main page.
The server then lists files, put them into and array and the page is displayed.
Also, in case of a password, the server will redirect to a auth page.
When displaying the page, the server will build up an array of image format that will be displayed in a <img>
tag just so the page will be a little bit more fancier.
It took me some time to make this system but at the end, I am satisfied with the result.
My last achievement is the Docker integration.
I think Docker makes it easy to deploy apps like theses and it was important for me that I would provide a quick and easy way to deploy my app.
As now, here is the features of Magikfiles:
I am currently working on the next release that will implement codes in order to upload files.
It will likely be the last release and after it, the repo will be archived.
If you wish to help, the repo is currently hosted on Github.
That’s all for today.
I’ll see you next time!
This is why I decided to make a new website using Hugo, a framework build in Go.
As all of the content on hugo websites are written in Markdown, it is very easy to maintain a website, even if the blog in embedded into it (like as now).
Hugo has also a really easy integration of the Gitlab CI and Gitlab Pages to make it easier to deploy.
Expect blog posts to be more frequent. If you don’t want to miss a thing, you can subscribe via RSS.
I’ll see you in the next post. 👋
That’s all for the addons I’m using currently.
Next list next year!