November 29, 2023


or how installing Firefox and uBlock Origin made a friend's life a bit less unbearable??
this is a rant post - please read with a tablespoon of salt

So, you've come to a relatives/friends place, you've had your mandatory coffee and small talk and they try to show you something on their computer. It's a mess, they have OperaGX, Chromium and PrivateInternetAccess, fucking CCleaner and have applied multiple registry tweaks to "speed up their computer" because it's slow.

You, as a (big) nerd, now face an issue - what do you do?

  1. Ignore it and feel guilt and regret for not nerding out and totally destroying their used-to user experience but also their expectations for how "slow" their PC is?
  2. Ask them when they last re-installed Windows and get the classical answer of "uhh what does that mean?" and sigh deeply
  3. "Hold on..." and nuke CCleaner, run Win-Debloat-Tools & install an adblocker to their preferred Chromium fork
  4. Number 3, but install Librewolf/FF and uBlock Origin and explain what manifest v3 is, and change their DNS Resolver to something more privacy-centric?

I was faced with the above, I've done all of the above - but #3 a couple of days ago. Mainly because a friend who is a massive gamer (i.e., dense - sorry gamers) wanted more FPS out of their rig (Ryzen 5 2600, GTX 1050ti + 16GB 3200 DDR4 and for some reason a 360hz monitor?) and was wondering if they could achieve YouTube without adverts because for some reason (cough cough they were using adblockplus :skull: which lets certain advertisers through and probably isn't updated for YouTube, I don't know if they update as regularly as uBlock Origin does :)) was not blocking adverts :D

Boot time's also went from almost 30 seconds (???? this system has a 512GB Samsung SSD) to around 8~ ish - the face of the peepo when they saw that for the first time was priceless :D

Fast forward to yesterday and they were on full swing, eager to learn more about why Chrome (that they switched to, from OperaGX after some discussion about Opera, how they operate and how their browser doesn't do jack shit to improve gaming performance but just act as "mehware") is not a good option either (manifestv3 going away (rip uBlock?), privacy issues & toll on the system :skull:).

I literally have no conclusion to this, I just needed to voice this (unfortunately?) common pipeline down something so I don't have to think about it alone anymore, if you have better tools/ideas do let me know via the magical fediverse

--- very tired but in the end happy, Kouts.

November 26, 2023

speeding up networking on modern PC's under linux

Sooo... I got extremely frustrated at my pc being absolute dogshit for web browsing lately.
DNS requests take too long, general networking performance is dogwater and everything has massive amounts of latency, which obviously drives me nuts.

I was wondering if there was anything that could resolve my issues until I had to recently set-up a server... and on servers there are certain tweaks that I always perform - you know because I want my servers to be as performant as possible.
Now being a dumbass, I did not even think about the possibility of applying those (sysctl) tweaks on my host's - because I for some stupid reason just have not thought about this.
So, as it goes - In the mids of setting up sauna_02 I realize holy shit I'm running linux, and have been for the past 15 years - I could just *literally* enable the same tweaks as I do on my servers :D
Amazing, would you guess? My internet speed almost tripled - I really don't know how or why (because you'd assume Arch has sane defaults) but fuck it - we ball.
I went from an average of 60mbit/s to a whopping 96mbit/s (you have to realise im on 4G and my router was literally 20€ - oh and it also doesn't have gigabit ports) so I'd say im decently happy!
Here's the tweaks:
net.core.netdev_max_backlog = 16384 net.core.somaxconn = 8192 net.core.rmem_default = 1048576 net.core.rmem_max = 16777216 net.core.wmem_default = 1048576 net.core.wmem_max = 16777216 net.core.optmem_max = 65536 net.ipv4.tcp_rmem = 4096 1048576 2097152 net.ipv4.tcp_wmem = 4096 65536 16777216 net.ipv4.udp_rmem_min = 8192 net.ipv4.udp_wmem_min = 8192 net.ipv4.tcp_fastopen = 3 net.ipv4.tcp_max_syn_backlog = 8192 net.ipv4.tcp_max_tw_buckets = 2000000 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_keepalive_time = 60 net.ipv4.tcp_keepalive_intvl = 10 net.ipv4.tcp_keepalive_probes = 6 net.ipv4.tcp_sack = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_rfc1337 = 1
Let's go trough some of these, shall we?
do note that these are not technical explanations and will just be here if you wanna omit some options
max_backlog is basically how big your packet queue is.
somaxconn how big the *current/half open* queue is.
(tcp/udp)rmem_default/wmem_defaul and min/max for both: buffer sizes - how big of an buffer you have - these will affect overhead but 99.99% of the time you won't notice/care - tho you *might* not want to adjust these - more info here
tcp_fastopen: allows syn/synack to carry data - i don't personally see the harm of having this option - see rfc here: here - tldr: it's OK.
tcp_max_syn_backlog: how big the queue of connections that have not been aknowledged by the connecting client is.
tcp_max_tw_buckets: queue size for the amount of clients that are stagnated (well, thats bad wording) or in the TIME-WAIT state.
tcp_tw_reuse: reuse connections in the TIME-WAIT state if safe to do so.
tcp_fin_timeout: self explanatory.
ipv4.tcp.keealive*: self explanotory - you should probably expriemnt with having fever of these if you're on shotty connections tho.
tcp_sack: allow transmission of only lost data segments if possible (in my experience gives a performance boost on 4g??)
tcp_syncookies: tldr: SYN Flood attack protection by the virtue of SYN Cookies (Wikipedia)
tcp_rfc1337: tldr: provides protection against time-wait assassination hazards (stackoverflow)
I sincerely hope that these help someone who has a shitty router/otherwise connection issues like me, If you have suggestions / corrections don't hesitate to send them my way:
homepage with more contacts

September 15, 2023

So, I ended up setting up homeassistant and setup some sensors for it.
Also whipped out this quick'n'cool temperature monitor with a clock on an NodeMCUV3 + 123x128 spi screen.

Here's the code for it, enjoy as you please.

#include <SPI.h> #include "Arduino.h" #include <Adafruit_GFX.h> #include <TFT_ILI9163C.h> #include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> #include <ArduinoJson.h> // NTP #include <NTPClient.h> #include <WiFiUdp.h> const char* ntpServer = ""; const int ntpPort = 123; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, ntpServer, 2 * 3600); // GMT+2 for Helsinki const char* ssid = "yourwifiname"; const char* password = "yourwifipassword"; const char* humidityUrl = ""; const char* temperatureUrl = ""; const char* authToken = "hassio_key"; // clock: unsigned long previousMillis = 0; const unsigned long dataUpdateInterval = 120000; const unsigned long clockUpdateInterval = 1000; unsigned long lastDataUpdate = 0; unsigned long lastClockUpdate = 0; // COLORDEFS #define BLACK 0x0000 #define WHITE 0xFFFF #define RED 0xF800 #define GREEN 0x07E0 #define BLUE 0x001F #define AQUA 0x07FF #define YELLOW 0xFFE0 #define ORANGE 0xFBE0 #define DEEPORANGE 0xFD20 #define GRAY 0x8410 // WRING // for LOL1N NodeMCU V3 #define D0 16 #define D1 5 #define D2 4 #define D3 0 #define D4 2 #define D5 14 #define D6 12 #define D7 13 #define D8 15 #define D9 3 #define D10 1 // LEDS - LOL1N NodeMCU V3 is kinda shit and tries to force the LED on... #define LED_BUILTIN 2 // OTHER const int fontSize = 2; TFT_ILI9163C tft = TFT_ILI9163C(D8, D4, D3); int16_t displayWidth = tft.width(); int16_t displayHeight = tft.height(); void setup() { tft.begin(); tft.fillScreen(BLACK); tft.setTextColor(DEEPORANGE, BLACK); tft.setTextSize(fontSize); Serial.begin(115200); delay(10); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(3000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // NTP Stuff timeClient.begin(); timeClient.setTimeOffset(2 * 3600); // (GMT+2) or Finland like they call it. timeClient.update(); tft.fillScreen(BLACK); tft.setTextColor(WHITE, BLACK); tft.setCursor(0, 0); fetchAndDisplayData(humidityUrl, "Humidity"); fetchAndDisplayData(temperatureUrl, "Pyrexia"); } void fetchAndDisplayData(const char* dataUrl, const char* dataLabel) { WiFiClient client; HTTPClient http; String authHeader = "Bearer " + String(authToken); http.begin(client, dataUrl); http.addHeader("Authorization", authHeader); int httpCode = http.GET(); if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); DynamicJsonDocument jsonDoc(512); deserializeJson(jsonDoc, payload); const char* dataValue = jsonDoc["state"]; // Check if unit contains "°C" and replace it with "*C" because we do not have the fonts for this :( const char* unit = jsonDoc["attributes"]["unit_of_measurement"]; if (strstr(unit, "°C")) { unit = "*C"; } tft.setTextColor(WHITE); tft.setTextSize(fontSize); tft.print(dataLabel); tft.print(": "); tft.println(""); tft.print(dataValue); tft.print(unit); tft.println(""); tft.println(""); } else { Serial.print("Error getting data. HTTP Code: "); Serial.println(httpCode); } http.end(); } void loop() { digitalWrite(D4, HIGH); unsigned long currentMillis = millis(); if (currentMillis - lastClockUpdate >= clockUpdateInterval) { digitalWrite(D4, HIGH); lastClockUpdate = currentMillis; tft.setTextColor(GRAY, BLACK); tft.setTextSize(2); tft.setCursor(0, displayHeight - 30); tft.print(timeClient.getFormattedTime()); } if (currentMillis - lastDataUpdate >= dataUpdateInterval) { digitalWrite(D4, HIGH); lastDataUpdate = currentMillis; tft.fillScreen(BLACK); tft.setTextColor(WHITE, BLACK); tft.setCursor(0, 0); fetchAndDisplayData(humidityUrl, "Humidity"); fetchAndDisplayData(temperatureUrl, "Pyrexia"); } }

August 13, 2023

So, nothing new with the Powkiddy - just made a few scripts to handle boot-time operations for it but not ready for release...

but I did do the above :)

a (going to be) FOSS gauge/dashboard for the outgauge protocol (LiveForSpeed / Beam.NG) with fully open-source firmware/software!

I got frustratd for not finding a solution that'd be open-source and not expensive as *fuck* so I ordered a 4€ (+2€ shipping) esp8266 + screen kit from AliExpress and this happened haha

It has fully working indicators (headlights, blinkers, handbrake/parkingbrake, ABS and TC....); gear display and a speedometer!

I hope to add more, ie; modes (mileage(?), drag mode, rally etc) and somehow get a case for this - there isn't almost any modular cases for the NodeMCU v3!?

The project is not even close to completion but here's some (old) video of it running :)

don't mind the bad gaming, I had higher fever at the time :D
also the above video is only 7mb in size!!? - webm is truly wonderful

I don't think I have any other news to tell you than that the mumble server is back on-line!

page with links to join & download a client

That's all


July 21, 2023

Sooo... the phone - it's great - best part has to be the god damn automatic F-Droid app updates :D

FINALLY I don't need to manually click "install" on every single god damn app update wooo

In other news the new 165hz "G A M I N G" monitor does not have any dead pixels in it - which being a discounted product really makes me happy :)

Finally I can experience crashing into a tree/wall/another car in BeamNG.Drive like it was intended - in HIFREZ

Other than that I'm still waiting for a few things to arrive - like the Powkiddy v90 that I got (mainly so I can have a "proper" way to play my old GBA dumps :) - in fire red shell, ofc.

I'm also thinking of adding RSS to Noter so that these updates can be easily broadcasted but I'll need to figure out a way to do that in bash properly.

That's all Folks!

July 13, 2023

Phone exhaustion.
Soooo... It's time to switch - my old Nokia 5.3 had it's final security updates last month and the device itself has lasted very well overall!
The phone had gotten a crack at the top right corner (before my friend even gave it to me after I managed to smash my 7.2 between a Toyota Yaris and hard place :D) that didn't hinder use at all - tho the selfie camera was a bit blurry :D

The main reasons why I landed on this mf are:
  • It has a mother fucking 3.5" jack!
  • Sony provides bootloader unlocks, tho you will void your warranty
  • Small (153 x 67 x 8.3 mm) and lightweight (160 g) !
  • And of course... I had to get the best color, Mint !

July 12, 2023

hello world 👋
this is gonna be a blog-type-a-note-type-a-thing in the future and i'll probably be posting every week or so :)
we shall see.
topics hopefully related to mainly computer stuff, but some recipes and thoughts might slip in 😳

- k
generated with noter
Back to Top
last Updated: 2023-11-29 01:32:59