Install Composer and Laravel

First install Composer package manager on on your project:

php -r "copy('', 'composer-setup.php');"

php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

php composer-setup.php

php -r "unlink('composer-setup.php');"

Now install Composer global:

php composer.phar global require laravel/installer

Install Composer to your project (change site-name to your project name):

php composer.phar create-project --prefer-dist laravel/laravel site-name "8.*"

You don’t need Windows anymore

Microsoft Windows is a proprietary operating system which has captured 80% personal computers in the world and using their monopoly position dictates their rules of the game.

In addition, Microsoft collects your personal information and sells it to third parties, which endangers your security.

To change the situation, many people are looking for alternative operating systems, and one such alternatives is GNU Linux.

Many years Linux was leader operating system on web servers and mainframes, but on personal computers it occupied a miserable 3%. But now the situation has changed and GNU Linux is the best free and open source alternative for proprietary Microsoft Windows.

Javascript: Closures, callback, context

A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment). In other words, a closure gives you access to an outer function’s scope from an inner function. In JavaScript, closures are created every time a function is created, at function creation time.

window.onload = function(){
    var item = document.querySelector(".items .item");
    item onClick = activeItem;

    function activeItem() {

In this example inner function activeItem() have access to global variable item. This called closure – when inner function have access to all variables, defined in global function.

JavaScript: Type conversion

To show variable type use typeof:

let value = true;
console.log(typeof value); // boolean

Let’s convert our variable to string:

value = String(value); // now value is a string "true"
console.log(typeof value); // string

Numeric Conversion

Numeric conversion happens in mathematical functions and expressions automatically.

For example, when division / is applied to non-numbers:

console.log( "6" / "2" ); // 3, strings are converted to numbers

We can use the Number(value) function to explicitly convert a value to a number:

let str = "123";
console.log(typeof str); // string

let num = Number(str); // becomes a number 123
console.log(typeof num); // number

Explicit conversion is usually required when we read a value from a string-based source like a text form but expect a number to be entered.

If the string is not a valid number, the result of such a conversion is NaN. For instance:

let age = Number("an arbitrary string instead of a number");
console.log(age); // NaN, conversion failed

Examples of numeric conversion:

console.log( Number(" 123 ") ); // 123
console.log( Number("123z") );  // NaN (error reading a number at "z")
console.log( Number(true) );    // 1
console.log( Number(false) );   // 0

Please note that null and undefined behave differently here: null becomes zero while undefined becomes NaN.

Boolean Conversion

The conversion rule:

Values that are intuitively “empty”, like 0, an empty string, null, undefined, and NaN, become false.
Other values become true.

For instance:

console.log( Boolean(1) ); // true
console.log( Boolean(0) ); // false

console.log( Boolean("hello") ); // true
console.log( Boolean("") ); // false


The three most widely used type conversions are to string, to number, and to boolean.

String Conversion – Occurs when we output something. Can be performed with String(value). The conversion to string is usually obvious for primitive values.

Numeric Conversion– Occurs in math operations. Can be performed with Number(value).

Boolean Conversion – Occurs in logical operations. Can be performed with Boolean(value).

Install monit in Debian 10 (buster)

Monit is a free open source utility for managing and monitoring, processes, files, directories and filesystems on a UNIX system. Monit conducts automatic maintenance and repair and can execute meaningful causal actions in error situations.

To install Monit on Debian 10 GNU Linux (Buster) you need to add backports repository:

printf "%s\n" "deb buster-backports main" | \
sudo tee /etc/apt/sources.list.d/buster-backports.list

Then update package list:

sudo apt update

And install buster-backports and monit package:

sudo apt install -t buster-backports monit

To start monit service and show running status use commands:

sudo systemctl start monit
sudo systemctl status monit

If you want to enable auto start monit when system starts use command:

sudo systemctl enable monit

Now let’s configure monit to monitoring Apache2 and Nginx services. Open monit configuration file:

sudo vim /etc/monit/monitrc

To change monitoring interval change option:

set daemon 120

To send email if monitored services is down edit this options:

set mailserver your.mail.server
set alert your.mail.address

You can enable Web-interface where you can view information about monitoring services. By default monit starts on 2812 port. Enable this two lines and change administrator password:

set httpd port 2812 and
allow admin:monit # require user 'admin' with password 'monit'

Don’t forget to open port 2812 in firewall and restart monit service:

sudo systemctl restart monit

Now open and see monit web interface:

Install Skype on Debian 10

Skype is not an open-source application, and it is not included in the default Debian repositories. We’ll install Skype using the Skype deb package.

Download Skype deb package:


When the download is complete, install Skype using command:

sudo apt install ./skypeforlinux-64.deb

Now run Skype and authorize with your login, that’s all

Install Viber on Debian 10

Step 1: install flatpak:

sudo apt install flatpak

Step 2: install Viber:

flatpak --user remote-add --if-not-exists flathub
flatpak --user install flathub com.viber.Viber

That’s all, scan QR code with your phone and use Viber on Debian 10!

Installing Wine 6 on Debian 10

Step 1: Enable 32 bit architecture

sudo dpkg --add-architecture i386 

Step 2: Add WineHQ repository

We will pull the latest Wine packages from WineHQ repository that is added manually. First, import GPG key:

sudo apt update
sudo apt -y install gnupg2 software-properties-common
wget -qO - | sudo apt-key add -

You should receive “OK” in the output. Add the Wine repository by running the following command:

sudo apt-add-repository

The command will add repository to line /etc/apt/sources.list file.

Update APT package index:

sudo apt update

Step 3: Install Wine 6 on Debian 10

After configuration of the APT repository, the final step is the actual installation of Wine 6 on Debian 10. Add Wine OBS repository:

wget -O- -q | sudo apt-key add -    
echo "deb ./" | sudo tee /etc/apt/sources.list.d/wine-obs.list

Then install Wine from Stable branch:

sudo apt update
sudo apt install --install-recommends winehq-stable

And for latest release in staging, use:

sudo apt install winehq-staging

After installation. verify version installed.

wine --version  # Stable

wine --version  # Staging
wine-6.5 (Staging)

Debian 10 – install and configure i3wm

i3 is a tiling window manager designed for X11, inspired by wmii and written in C. It supports tiling, stacking, and tabbing layouts, which it handles dynamically.

Configuration is achieved via plain text file and extending i3 is possible using its Unix domain socket and JSON based IPC interface from many programming languages.

Step 1: Install Debian 10.

Download Debian 10 .ISO image from official site:

Step 2: Write ISO image to USB drive using program Etcher:

Step 3: Install Debian 10 on your PC.

Don’t install any other programs and desktop environments, uncheck all check boxes in installation menu. You need clear operating system without any other software.

Installation i3wm and other software:

Now you have clear oerating system with command shell.

First authorize in system with root login, change repositories to testing branch in file /etc/apt/sources.list, it is needed to get latest packages:

Upgrade your system:

apt update
apt upgrade

Install sudo and add sudo privilegies to your username:

apt install sudo
usermod -aG sudo username

Now you can logout from user root and authorize with your username login, Install file manager MC and other additional software:

sudo apt install mc vim htop screenfetch

Install X-Window-Server, I3, and other software for desktop environment:

apt install bash-completion lightdm zenity network-manager-gnome viewnior i3 xserver-xorg xbacklight conky nitrogen compton tilix firefox-esr thunar rofi flameshot

Debian 10 Install PulseAudio

PulseAudio is a network-capable sound server program. A sound server is a background process accepting sound input from one or more sources (processes, capture devices, etc.), that is able to mix and redirect those sources to one or more sinks (sound cards, remote network PulseAudio servers, or other processes).

To install PulseAudio on Debian Linux first update package repository:

sudo apt update

Next install PulseAudio:

sudo apt install pulseaudio

Now reboot your computer.

Using PulseAudio Volume Control Graphical Utility:

PulseAudio has a graphical frontend PulseAudio Volume Control, which you can use to easily configure PulseAudio sounds graphically.

It is not installed by default. Run the following command to install PulseAudio Volume Control:

sudo apt install pavucontrol

Also to change sound volume by hotkeys you need amixer utility install it by command:

apt-get install alsa-utils