Journal from Kotnik

Nikola's thoughts and discoveries

Last night I uninstalled Counter Strike 2.

After spending more than 800 hours of play time in Counter Strike Global Offensive (the previous version) I have decided to give up, and here is why. Not that I am complaining, I really had good time playing CS:GO, I don't regret it. The game was popular and well balanced and it run well at high quality setting on my gaming laptop.

And then came Counter Strike 2. Valve decided to force push update, and it removed CS:GO from my computer, even though I payed for it.

Core of the issue is that it is completely different game. It's all in pastel colours, a bit cartoonish, with different mechanics in every respect. All the muscle memory of the buy menu is going to be stuck in my brain for no reason, and that's just one example.

Then, the performance. The same gaming laptop that run CS:GO at high details now can't run Counter Strike 2 at lowest. I had to enable shadows, it's core part of the game, and it brings FPS down to 20 at times, and especially during duels. It's really annoying to die during glitch, only to find out after few seconds after the screen unfreezes. And it happened to me around 20% of times.

Finally, as the last drop in the bucket, I figured out that I might spend money for new hardware to continue playing, spend another 800 hours in the game, only for it to be removed from my computer because someone in Valve decided so. And I can't do that anymore. There are so many good games I want to play, and I don't want to wait for CS2 to become stable, life is too short to spend it on stupid ideas of some person in Valve.

Good bye Counter Strike, it was a good run.

Those few RSS subscribers are much more engaged and valuable than the many social media users who donโ€™t read or click links.

From Why your blog still needs RSS by Paolo Amoroso (hat tip to Frank Meeuwsen).

We moved from France and brought our mobile phone numbers with us. Here's a blog post of how we are keeping them alive.

Of course, too much of on-line and off-line life is tied to that number in a SIM card. We just have to keep it active due to various services and people who could contact us.

Since I am automation geek you can already see the direction this post is going to... The first things first, we need a cheap mobile plan. We will not be actively using them for calls or messages but it has to be active and have an option to call from and to abroad. We chose Free.fr provider and their 2โ‚ฌ plan. So, for 2 phone numbers that totals for 4โ‚ฌ. We have been living here in Germany for more than a year and they seem not to care we are constantly in a roaming mode. Good so far.

Next issue is actual mobile device. We needed something cheap and reliable. After some on-line research I chose Xiaomi Redmi Note 9, a device that offers free bootloader unlocking, good performance and 2 SIM slots for less than 100โ‚ฌ refurbished. After having created obligatory Xiaomi account and waiting for few days I unlocked its bootloader and installed LineageOS.

Still, good so far.

Finally, the last question remain, how to make this phone on all the time? Home Assistant to the rescue! Cheap Zigbee enabled socket (of which I have a few laying around at any time) made it possible to create automation to turn on charging when battery level drops below 20%, and to stop it once over 80%. Here is how it looks like:

Home Assistant battery level dashboard

Ideally, I wouldn't even have to deal with all this stuff in physical world just to receive digital information, but I am happy I had another opportunity to play with all of this.

I work fully remote and so does my wife. We share our home office which means at any moment one of us can be on a call. This is how we share that information.

I purchased cheap On-air light and glued it on the top of our printer which is conveniently located between our desks.

On-air ligths

Of course, I control it via Home Assistant. It has On/Off switch which I positioned in permanent On and plugged it into Sonoff power socket controlled via Zigbee protocol. And then I created an automation with Aqara switch to toggle the power socket state.

Switch

Finally, to make things a bit easier for me, I wrote this short program and mapped it to Start+m (m for meeting) keyboard shortcut.

#!/usr/bin/env python
import os

from requests import post


if __name__ == '__main__':
    url = 'http://HA/api/services/switch/toggle'
    token = os.getenv('HA_TOKEN', '')
    data = {'entity_id': 'switch.on_air_switch_switch'}

    headers = {
        "Authorization": "Bearer {}".format(token),
        "content-type": "application/json",
    }
    response = post(url, headers=headers, json=data)
    print(response.text)

Of course, it's possible to further automate this to turn on time of meetings based on calendar, or when webcam is turned on, etc. As with every rabbit hole, it's up to you to decide how deep you want to go.

Inspired by jlelse.blog here is a list of my default apps and services. I hope it might inspire you to share yours as well.

Here's the list:

  • ๐Ÿ“จ Mail Client: ๐Ÿ’ป Claws Mail / ๐Ÿ“ฑ K9-Mail
  • ๐Ÿ“ฎ Mail Server: Zoho and Gmail
  • ๐Ÿ“ Notes: Nextcloud Notes
  • ๐ŸŸฆ Photo Management: Google Photos
  • ๐Ÿ“† Calendar: Google Calender
  • ๐Ÿ“ Cloud File Storage: Nextcloud
  • ๐Ÿ“– RSS: Inoreader
  • ๐Ÿ™๐Ÿปโ€โ™‚๏ธ Contacts: Google Contacts
  • ๐ŸŒ Browser: Firefox
  • ๐Ÿ’ฌ Chat: Signal, Viber, WhatsApp
  • ๐Ÿ”– Bookmarks: Shaarli
  • ๐Ÿ“‘ Read It Later: Firefox Pocket
  • ๐Ÿ“œ Word Processing: Google Docs
  • ๐Ÿ“ˆ Spreadsheets: Google Docs
  • ๐Ÿ“Š Presentations: Google Docs
  • ๐Ÿ›’ Shopping Lists: OurGrocieries
  • ๐Ÿ’ฐ Personal Finance: YNAB, Google Sheets
  • ๐Ÿ“ฐ News: France24, Google News
  • ๐ŸŽต Music: Deezer
  • ๐ŸŽค Podcasts: AntennaPod
  • ๐Ÿ” Password Management: Bitwarden with Vaultwarden
  • ๐Ÿง‘โ€๐Ÿ’ป Code Editor: Sublime Text
  • ๐Ÿ”‘ VPN: WireGuard
  • ๐Ÿ‘ฅ Social Media: Mastodon

I am happy to inform you that Blacklight privacy inspector reports 0 trackers and cookies on this blog.

That is all, thank you for your attention.

I am new owner of PineBuds Pro, and here you can find my short review after a week (or so) of usage.

PinePubs Pro

TLDR; version: go for it, quality is high and active noise canceling works really well.

Now for positives, this is what I liked:

  • Bass level is incredible, you can tweak it via equalizer of course, but out of the box you'll be satisfied with the deep sound level even in an environment with a lot of it already present, like a train.
  • It fits ear really well. The buds come with 3 different earplugs sizes but the default ones work really well for me. They never fell out, or lost contact with my ear.
  • Active noise canceling (ANC) has two levels, and I haven't seen this anywhere else. But it really makes sense, depending on the environment you're in you do want to adjust it since ANC, like it or not, modifies the sound reaching our ears.
  • They are open firmware capable. This means you can enjoy support down the road even if Pine64, the manufacturer, goes bust or decides you are not important as a customer anymore. Already there are two main alternative open source firmwares available: OpenPineBuds and Little Buddy. This also means that, somewhere in the future, if you decide you want to experiment you can. Tweaking sound that is beamed in your own ear, that sound so satisfying, even as possibility.
  • It's really hard to beat this price. I got them at $69,99.

Of course, nothing is perfect, so this is what I didn't like:

  • I hate tap control on a device deep in my ear, tapping sounds awful and, for me, borderline hurtful. For example, you control ANC level with three taps on the left bud โ€“ the tap itself sounds really loud in my ear. I don't know how this could be fixed or avoided, but I really don't like it. I chose to control the volume level from my phone/computer, and not via taps.
  • Slide box that hosts (and re-charges) buds is weird, and feels very flimsy. Also, it's rather big, you can feel it in your pocket.
  • Delivery can take a while. So don't expect to have them in our inbox the next day.

I am prompted for this short update after reviewing all the drafts that I am working on.

As it is often the case, I'd get an idea about a blog post and quickly head here and draft it. It's easy, I like it. Just quickly open a page and start typing. But, it turns out that I am not so good in turning those drafts into real posts. It's not so much procrastination, one hopes, as it is general lack of time. I know, I know, it's a theme of my life in the past 7 years, but I can't help it.

So, my current thinking is to allocate dedicated time in calendar for blogging. Let's see how that turns out to be.

One thing I've been thinking about lately is what will be the effect when bot accounts migrate from #Twitter to #Mastodon instances as well.

For those new to the subject, bots (they're not really robots) are a thing in #Serbia on all social media, although it's not only Serbian problem. The government employs people to either drive the conversations away from criticizing it, or to hush down accounts using ad-hominem attacks, insults, and threats of violence.

Dealing with them is really hard, since the accounts are not automated, and there are thousands and thousands of real people constantly creating new ones and using them for as long as they can. If the Twitter collapses, and Mastodon becomes new world forum, this will be a real threat.

Mastodon moderators can not beat an army of determined and evil people constantly churning attacks. I can hardly imagine Serbian government creating own instance for bot purposes, since that would be too easy to block. And the end results I can see from this perspective is further locking down of #Fediverse, private instances that don't cooperate, or complete breakdown and migration to something else.

I might as well be completely wrong, and the existing tools to deal with malice would suffice. Time will tell.

But, in a shortwhile, it will be very interesting especially with cooperating moderators and instance owners, inability to research Twitter's data is real problem.

I've been copying and collecting interesting pieces of text here and there for a really long while. From the articles on the Internet, while reading a book, pretty much from everywhere. Sometimes not even noting a source, but marking the text because it left an impression on me.

Never thinking about quotes management I kept it in single page of my personal wiki. No categorization of any sort, just a pile of text separated by delimiter lines.

Of course, as the pile grew I started to think about organizing it. First I tried to find already existing solution I could run myself, but there's really nothing out there. Then I tried to build it myself! Why not? I already know how to program, and I know what I need, so let's do it. But, after spending some time building the portal using the Flask Python framework I gave up. It was just taking too much time, and I didn't find a lot of motivation to finish it.

Finally, I thought of Drupal CMS. I know #Drupal, I was Drupal module developer for a really long while. I know it can do it, and it can do it easily. So I tried, and I had a solution in about 2 hours.

So, here I will describe exactly what I did, in case someone wants to try as well.

After installing Drupal with standard installation profile, I renamed its Article content type into Quote and used it as it is afterwards. I added additional taxonomy vocabulary named Author with the same settings as Tags. I want to be able to see all the quotes from a specific author.

As for the theme, I installed a simple theme named Writer. It is intended to be used with blogs, but its simplicity is really useful for my quotes project. After all, I want clean design that focuses on the text. I tweaked it a bit to remove page titles, and to have buttons as links in blocks, but that's it and the rest is provided by the theme.

As for community modules, I only use Autotitle. Quotes don't have titles, as I mentioned above, and I didn't want to create custom module to tweak new quote creation form to remove the title. So, Autotitle just names each and everyone simply as Quote. That's enough for me.

Content is rendered via Views module, of course. I only added 2 custom views. The first one renders a list of tags with the number of quotes associated with it. And the second one is showing a random quote (it only works when authenticated to Drupal system, I didn't bother to make it work for anonymous visitors).

And that's it. An hour or so of fun work with Drupal and my system is done. I can focus on categorizing the quotes now.

Finally, this is how it looks like:

page screenshot

P.S I am not providing the link to my quotes Drupal since it's mine and I have no plan to make it usable for anyone else. Content is not behind login, but I don't want to advertise it either.