• Постоянный вид на жительство в Норвегии

    2021-02-21 | 8 min read

    Наконец-то прошло больше трёх лет как я в Норвегии, и стало можно получить постоянный вид на жительство (в оригинале “permanent oppholdstillatelse” или “permanent residence permit”).

    Норвежский постоянный вид на жительство

    Забегая вперёд, самое сложное (долгое) во всём процессе это прохождение необходимых курсов по норвежскому языку. Разумеется, помимо ожидания пока наберётся минимально необходимый срок проживания в Норвегии.

    Read more
  • Gollum - Git-based Markdown wiki

    2021-01-07 | 11 min read

    We needed to create an internal knowledge base, preferably based on a wiki-engine. The requirements were:

    • in-house hosting
    • simple maintenance
    • no vendor-lock - ideally, storing articles as plain-text files
    • customization and styling
    • not overloaded with gigabytes of fancy JS-frameworks
    • version control
    • Markdown markup

    From my own researching and evaluating, there are very few wikis that meet all the requirements, and out of those Gollum seems to be the best.

    Gollum wiki (original picture: https://www.deviantart.com/aronimo717/art/Hobbit-Gollum-431742580)

    Even though it has its own installation guide, for me that wasn’t enough, so here are my guides for Linux and Mac OS, plus some customizing and tweaking.

    Read more
  • How to manually upload VIVE VR screenshots to Steam

    2021-01-02 | 7 min read

    I was playing Half-Life: Alyx and wanted to take some screenshots. To my surprise, standard F12 screenshot button did nothing, so I had to use the screenshotting functionality from the HTC VIVE software. Annoying enough, screenshots made this way do not end up in Steam Screenshot Uploader, so I’ve spent quite some time till I found how can I add them there manually.

    Steam Screenshot Uploader

    Essentially, the process consists of cropping half of VR screenshots, sorting them by setting their modification timestamp attribute and placing them to the right folder.

    Read more
  • Installing Qt without installer

    2020-12-04 | 14 min read

    At some point (beginning of 2020 year) Qt installer started to require users to have Qt Account (again), otherwise you can’t proceed with the installation. More details in the Qt’s official blog post.

    Qt installer, account

    That’s something that already happened before, but back then community got really mad about it, so The Qt Company reverted that, and installer started to work without Qt Account. And now they fucking did it again, and apparently this time community wasn’t that mad (or there is nothing left of that community after all the stunts The Qt Company has been pulling over the past years).

    Anyway, I won’t tolerate such anal-probing, so The Qt Company (or rather its management) can go fuck itself, and I’ll be just building Qt from sources - it’s not that scary as it sounds.

    Read more
  • Finding optimal 7-Zip parameters for creating a ZIP archive

    2020-11-09 | 2 min read

    We were packing our builds into ZIP archives for distribution right in TeamCity using its built-in artifact packaging. But then we decided to try to do that explicitly with 7-Zip as a dedicated build step, and that turned out to be a faster option, providing a better compression ratio too.

    7-Zip packing

    The only question remaining was finding the right balance between compression level and compression time.

    Read more
  • .NET Core Identity with PostgreSQL

    2020-10-17 | 7 min read

    A couple of years ago I wrote a post about setting up Identity in .NET Core MVC application with MySQL. Now I am starting a new project, and this time I want to try using PostgreSQL.

    .NET Core Identity PostgreSQL

    It is also a good timing to prepare for the upcoming .NET 5, which is about to release next month, so I decided to do it with .NET 5.0 RC2 right away.

    Read more
  • matplotlib animation on Mac OS

    2020-09-05 | 4 min read

    I’ve got a weird problem with one of my Python scripts. It creates a chart with animation, and this animation works fine on Windows and Linux, but on Mac OS it just doesn’t show up. Here’s a video demonstration:

    If video doesn’t play in your browser, you can download it here

    Read more
  • Data compression in IIS, Apache and NGINX

    2020-08-12 | 9 min read

    Some of our users are residing in areas with very slow or/and metered internet connection, so the amount of data transferred is very important to them. And since web servers do support data compression, enabling it can certainly improve the situation for such users.

    Web servers compression

    We took IIS, Apache and NGINX and ran some tests to see how compression is configured in each of them and to compare how well do they do it.

    Read more
  • TeamCity Prometheus metrics in Grafana

    2020-07-14 | 5 min read

    Since we added a Grafana instance to our infrastructure, we started visualizing absolutely every single thing with it. So no wonder that eventually we turned our eyes to TeamCity.

    TeamCity metrics in Grafana

    In 2019.2 release TeamCity started exposing its metrics in Prometheus format, and that’s how Grafana can get those, as Prometheus is one of its supported data sources.

    Read more
  • Jupyter Notebook on a subdomain of your website

    2020-05-27 | 10 min read

    Jupyter Notebook is kind of a Python (and some other languages) sandbox, where you can mix text (Markdown) with code blocks and “run” all that in a web-browser. So it’s like running Python interpreter in interactive mode, but more convenient and user-friendly.

    Jupyter Notebook

    So, here’s the plan:

    • install and run a local instance of Jupyter Notebook on Linux server
      • local here means that Jupyter instance itself will be bound to localhost (not available from the internet)
      • also create a systemd service
    • interface it with the internet via NGINX as a reverse proxy
      • using HTTPS, of course, so the existing certificate needs to be extended
    • host it on a subdomain of existing website, so there will be a new DNS record

    Read more