Quick Screen -command reference

Screen is a full-screen window manager that multiplexes a physical terminal between several processes (typically interactive shells).


Start a new session with session name
screen -S <session_name>
List running sessions / screensscreen -ls
Attach to a running sessionscreen -x
Attach to a running session with namescreen -r <session_name>
Detach a running sessionscreen -d <session_name>

Switching between screens

When you do nested screen, you can switch between screen using command “Ctrl-A” and “n“. It will be move to the next screen. When you need to go to the previous screen, just press “Ctrl-A” and “p“.

To create a new screen window, just press “Ctrl-A” and “c“.

Leaving Screen

There are 2 (two) ways to leaving the screen. First, we are using “Ctrl-A” and “d” to detach the screen. Second, we can use the exit command to terminating screen. You also can use “Ctrl-A” and “K” to kill the screen.

That’s some of screen usage on daily basis. There are still a lot of features inside the screen command. You may see screen man page for more detail or this page


I don’t use anymore “cloud” providers for personal projects.

I love Azure Functions for small jobs and deploying Kubernetes cluster from Github actions to Amazon EKS is blast. But I think it is only business customers and not for small startups or pet projects.

At work I am using Azure and AWS and I used to have GCP and AWS for my pet projects as well but now my projects run on Hetzner VPS’s and Cloud. Main reason for my decision to favour Hetzner over these big guys is uncertaincy and confusion of billing. It’s nice if I suddenly become next Facebook to have scaling possibilty but that is least of my worries and quite nice problem to have. What I like VPS’s and Hetzner Cloud is straight forward and simple pricing per month. If I want Cloud instance with 2Gb RAM and 1vCPU it’s 3 Euros. If I run out of resources I can scale up like going to 32Gb is 35 Euros.

I have small startup where I have worker process written on Python, API written on Node and client running as SPA (Vue.js/Nuxt.js). Data layer is on PostgreSQL/Redis. Without thinking, I set this up in AWS and it worked nicely but soon I noticed this is 100 Euros/month. Since this is in Minimum Viable Product stage I decided to move to VPS. So I spin up VPS with Ubuntu on it. I deployed everything there and changed Github actions. It took me one evening and I don’t consider myself sysadmin. But I think installing Linux with above tech stack is easier than to understand how to run same setup on AWS, GCP or Azure. If in some point I need scaling I can always move back Kubernetes setup on AWS but sometimes less is more.


Prevent IIS indexing test enviroment

Sometimes you may have publicly facing website, which you don’t want it indexed by the major search engines. Easy way is to add robots.txt or meta tags on html but more global setting can be set on IIS settings from ‘Administrative Tools’ open ‘Internet Information Services (IIS) Manager’ > Select the Server > ‘HTTP Response Headers’.

‘Administrative Tools’ open ‘Internet Information Services (IIS) Manager’ > Select the Server > ‘HTTP Response Headers’.

Once dialog for HTTP Response Header is open

Add  > Name = X-Robots-Tag > Value = noindex > and press OK.

General info about X-Robots-Tag HTTP header

The X-Robots-Tag can be used as an element of the HTTP header response for a given URL. Any directive that can be used in a robots meta tag can also be specified as an X-Robots-Tag. Here’s an example of an HTTP response with an X-Robots-Tag instructing crawlers not to index a page:

About Robots Tag

A meta robots tag can include the following values:

  • Index: Allows search engines to add the page to their index.
  • Noindex: Disallows search engines from adding a page to their index and disallows it from appearing in search results for that specific search engine.
  • Follow: Instructs search engines to follow links on a page, so that the crawl can find other pages
  • Nofollow: Instructs search engines to not follow links on a page.
  • None: This is a shortcut for noindex, nofollow.
  • All: This is a shortcut for index, follow.
  • Noimageindex: Disallows search engines from indexing images on a page (images can still be indexed using the meta robots tag, though, if they are to linked to from another site).
  • Noarchive: Tells search engines to not show a cached version of a page.
  • Nocache: This is the same as noarchive tag, but specific to the Bingbot/MSNbot.
  • Nosnippet: Instructs search engines to not display text or video snippets.
  • Notranslate: Instructs search engines to not show translations of a page in SERPs.
  • Unavailable_after: Tells search engines a specific day and time that they should not display a result in their index.
  • Noyaca: Instructs Yandex crawler bots to not use page descriptions in results.

Read more at Google Robots meta tag, data-nosnippet, and X-Robots-Tag specifications


New blog

I started new blog here.

But right now I am busy with customer projects but soon I will start to push some content here.


My essential brew tools

brew install awscli
brew install cask
brew install cocoapods
brew install httrack
brew install n
brew install node
brew install pkg-config
brew install tree
brew install wget
brew install zsh

Restart Windows on certain time

schtasks /create /tn "reboot for updates" /tr "shutdown /r /t 0" /sc once /st 23:27:00 /sd 11/13/2019 /ru "System"

What is this?



4 Useful extension for Visual Studio Code

Bracket Pair Colorizer

This extension allows matching brackets to be identified with colours. The user can define which tokens to match, and which colours to use.

Bracket Pair Colorizer

Git graph

View a Git Graph of your repository, and easily perform Git actions from the graph. Configurable to look the way you want!

Git Graph


Visualize code authorship at a glance.


Live Share

Real-time collaborative development.

Live Share


Default python version to python3 in Ubuntu

I wanted to set set default python version to 3 instead of 2 that is default on Ubuntu 18. I tried add alias to .bashrc like:

alias python=python3

The disadvantage of editing .bashrc file is that it will not work while using the commands with sudo. I am running my Ubuntu image via Docker as root so it is disregarding this alias.

Good and easy way out from this is to run command

update-alternatives --install /usr/bin/python python /usr/bin/python3 10

This gives a priority of 10 for the path of python3.

So, if you are running this on Docker just add

RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 10

To you Dockerfile.



App Engine vs Cloud Functions

Both Cloud Functions (CFs) and Google App Engine (GAE) are designed to build “microservice architecture” in the “serveless” environment.

Google says that Cloud Functions is basically for SERVERLESS FUNCTIONS & EVENTS where as App Engine is for SERVERLESS HTTP APPLICATIONS. However,when I read this short description I am still confused since if I am running SPA application what prevents me to use just CFs for my serverside code? When exactly would use GAE instead of CFs?

I made a small investigation on this and here are my findings.

Little bit more longer description from Google:

Cloud Functions

An event-driven compute platform to easily connect and extend Google and third-party cloud services and build applications that scale from zero to planet scale.

Use Cases

  • Asynchronous backend processing
  • Simple APIs (like one or two functions, not RESTful stuff)
  • Rapid prototyping and API stitching



App Engine standard environment

A fully managed serverless application platform for web and API backends. Use popular development languages without worrying about infrastructure management.

Use Cases

  • Web applications
  • API’s like Mobile and SPA backends




I found this answer from StackOverflow which I am updating here with few of my edits.

When creating relatively complex applications, CFs have several disadvantages compared to GAE.

  • Limited to Node.JS, Python, and Go. GAE supports also .NET, Ruby, PHP, Java.
  • CFS is designed for lightweight, standalone pieces of functionality, attempting to build complex applications using such components quickly becomes “awkward”. Yes, the inter-relationship context for every individual request must be restored on GAE just as well, only GAE benefits from more convenient means of doing that which aren’t available on CFs. For example user session management, as discussed in other comments
  • GAE apps have an app context that survives across individual requests, CFs don’t have that. Such context makes access to certain Google services more efficient/performant (or even plain possible) for GAE apps, but not for CFs. For example memcached.
  • the availability of the app context for GAE apps can support more efficient/performant client libraries for other services which can’t operate on CFs. For example accessing the datastore using the ndb client library (only available for standard env GAE python apps) can be more efficient/performant than using the generic datastore client library.
  • GAE can be more cost effective as it’s “wholesale” priced (based on instance-hours, regardless of how many requests a particular instance serves) compared to “retail” pricing of CFs (where each invocation is charged separately)
  • response times might be typically shorter for GAE apps than CFs since typically the app instance handling the request is already running, thus:
    • the GAE app context doesn’t need to be loaded/restored, it’s already available, CFs need to load/restore it
    • the handling code is (most of the time) already loaded, CFs’ code still needs to be loaded. Not to sure about this one, tho, I guess it depends on the underlying implementation.

Note that nothing prevents us from mixing both notions. An AppEngine application can launch jobs through cloud functions


Use Cloud Functions (CFs) for “tasks” and use Google App Engine (GAE) for “full applications”.




ERROR: gcloud crashed (ValueError): unknown locale: UTF-8

I was getting this error on gcloud CLI when trying to deploy Cloud Functions to Google Cloud.

Here’s the quick fix – add these lines to your ~/.zshrc or ~/.bash_profile:

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8