• 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
  • Visitors analytics with GoAccess

    2020-05-20 | 8 min read

    Like I already mentioned in my other post about server-side visitors analytics with .NET Core middleware, if you are relying only on Google Analytics, then you are missing a good portion of data about your visitors.

    Recently I discovered one more way to analyze visitors data - by using GoAccess tool (and its nice web-reports):

    GoAccess dashboard

    What’s especially great about this tool is that it analyzes web-server access logs, so it is the most trustworthy and “closest to reality” data about your visitors that you can possibly ever get.

    Read more
  • NuGet and npm packages in Azure DevOps Artifacts for a C++ library

    2020-03-05 | 19 min read

    These days more and more developers are incapable of working with anything else but packages, as manually unpacking a ZIP archive and copying libraries with headers to the right places seems to them an impossible task.

    But apart from said developers, using packages can indeed improve the development experience.

    Azure DevOps packages

    We distribute our C++ based SDK to many other teams, and for quite a some time they were asking us to do it exactly in packages (in particular, with NuGet and npm).

    Read more
  • Adding Exchange account to iOS devices enables their remote wipe

    2020-02-01 | 2 min read

    If your company (like ours) uses self-hosted Exchange server instances for e-mails, then most likely you’d want to add your e-mail account to your iPhone/iPad.

    iOS, add Exchange account

    What might come as surprise to you (like it was for me) is that doing so exposes your device to a remote wipe by your Exchange administrator.

    Read more
  • Adding search capability to a Hugo-based blog

    2020-01-05 | 6 min read

    I was working on the documentation for some project, and chose to use Hugo for it. Fits perfectly, but lacks the searching functionality. So I implemented it there, and also decided to add it to my blog too.

    Search

    It is actually a bit surprising why I didn’t think about it earlier. But then again, using Google’s site-specific search (ololo site:retifrav.github.io) should be good enough for that purpose already, so I just didn’t bother to do something else.

    Read more
  • Apple TV, Kodi and network share

    2019-12-26 | 18 min read

    For a long time I was using Kodi with LibreELEC running on a Raspberry Pi 3 Model B device. It was pretty good, and I was going to write a post about it, but never had time for that, and now I got an Apple TV, so instead I’ll write a post about using Kodi on Apple TV.

    Apple TV, Kodi and network media storage

    I’ll talk about how to install Kodi on Apple TV and how to create a network media storage for it.

    Read more
  • Resizing images with ImageMagick vs sips

    2019-12-12 | 2 min read

    For quite a some time I was using sips from standard Mac OS bundle to resize (mostly scale down) images. But I always had some suspicions about its results quality, so I decided to compare it with ImageMagick.

    ImageMagick vs sips

    The figure above shows results of an image being scaled down to 100px width using both tools, and as you can see, ImageMagick conversion quality is better.

    Read more