Journal from Kotnik

Nikola's thoughts and discoveries

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 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.


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)

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 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.

Like everyone I know, I am worried with the direction #USA is taking. I don't have any potential insight as I can only imagine how my American friends are feeling โ€“ the only thing I can do now is to share how I feel and that is what I am doing here.

Having moved to live and work in foreign country I have met and made friends at, so called, expat community in and around Paris. A lot of them are American and I have found they are very patriotic and easy to organize. They'll quickly build up a website, or shared chat, and start working on a problem or helping others. How was it possible for this to happen then, I wonder? Why did they allow psychopath minority to gerrymander themselves above everyone else?

One protestor held a sign that caught my attention. They wrote:

Gun Care
Health Control

I hope this makes a lot of people mad.

New #SundayReading post is in front of you. I hope you will find it enjoyable or informative. I certainly did.

1. I am starting with A.J. Jacobs, one of the most fascinating people alive today. Really, I am not exaggerating. Here he discusses his new book on puzzles, but, of course, not only that. A lot of topics are touched, him being an ultimate generalist, even the meaning of life!

As for strategies, Iโ€™m a big fan of Memento Mori: life has finitude. Another strategy I like relates to the Yeats quote: I remind myself there are billions of minds out there, itโ€™s not just me. Another strategy is to actively try to notice the thousands of things that go right every day, instead of focusing on the three or four that go wrong.

True gem.

2. To continue in the somewhat similar direction, I re-read these thoughts about us humans.

Youโ€™re only human.

If you ever need a quick reminder of all the progress we achieved, and we all do, this is one of the best ways in words.

3. And now for something completely different! I like humans and humans are quirky. This post about challenges that people maintaining music catalogs are facing is weirdly entertaining and at the same time enlightening.

My favourite: a band named brouillard, with a single member called brouillard, whose every single album is named brouillard, and of course, so is every single track.

Bird man

4. Finishing up with an ultimate quirk, but I must admit: it's the one that scares me a lot. A guy, out of pure fun, starts conspiracy theory how birds actually don't exist โ€“ and it catches up! People actually start believing it!

people who believe [conspiracy theories] live in another world, where any wild theory flies and even the most fleeting attempt to fact check it or test it against logic (if birds have been destroyed, whoโ€™s eating all the worms?) marks you out as a brainwashed liberal

This one reminded me of a story how Serbian Turbo-folk music got its name. In short, it's a mixture of traditional folk music and modern repetitive techno-like beats, low in production quality and extremely simplified. Montenegrin artist Rambo Amadeus the first named it with a meaning from turbo-diesel engines, where high-pressure fuel is directly injected into engine. It was derogatory term, of course. But, people enjoying Turbo-folk actually took it at face value and started using it, so the name caught up and stayed. Rambo, later, reminisced: โ€œBeware of making jokes, idiots will start believing and adopting them.โ€œ

See you in the next #SundayReading.