Difference between abstract class and interface

In short, in case of full abstraction of methods you want to define use interface, in case of partial abstraction, if some methods you want to define are common among concrete classes but some are not then use abstract class

Abstract class can have definitions of constants, abstract methods or method stubs (methods without body/implementation) and normal
methods with implementation. A child class can extend only one abstract class and it can override (polymorphism) visibility of methods from abstract
classes as public, protected or private.

Interface can have only constants and abstract methods and all abstract methods of an interface must be public. A child
class can implement multiple interfaces at once and all methods must be/remain public.

Top 10 security vulnerabilities by OWASP

A1 Injection (PHP include, global variables, Sql Injection through Url)
A2 Broken authentication (To avoid broken authentication put into practice not leaving the login page for admins publicly accessible. Rename /wp-admin/ on WordPress to something else. Rename /admin in Magento to something else)
A3 Sensitive data exposure (arp spoofing resulting traffic sniffing, stealing auth passwords, http or pop3 passwords.Protect Data in Transit.Sensitive data: passwords, credit card numbers, credentials, social security numbers, health information, personal identity information)
A4 XML external entities (XXE vulnerability) (XML processor implementation issues with ability to access contents of local files and access to other systems. XML processor should have such capability off)
A5 Broken access control
A6 Security misconfiguration (default settings on production server)
A7 Cross-site Scripting (XSS) – (Uset input should be properly sanitized. Sanitization. Remove unaccepted characters)
A8 Insecure desirialization – (When you keep php serialize() object inside the text field in DB it can be silently updated to another one)
A9 Using Components with known vulnerabilities (Using out of dates WordPress website. Do not applying patches in time)
A10 Insufficient logging and monitoring (Lack of logging and monitoring)
Also:
Cross-site request forgery (CSRF) (Protect your forms with csrf_token to prevents posting form from a different website)
Unvalidated redirects and forwards (Third parties can redirect users to malicious websites or routing rules can be altered to have user being redirected to malicious website)

Types and principles of object oriented programming

3 Main types of object oriented programming

Creational, structural and behavioral patterns.

Only these types are general because they address interactions with objects used within programming:

object creation, object composition, and object interaction.

Можно провести параллель с человеком если рассматривать человека с позиции Высшего Разума – человек был создан (creational), потом организована инфраструктура для деятельности – другие люди, животные, природа и далее уже организовано то как происходит взаимодействие между людьми

 

4 Main principles of modern object based programming

Abstraction (Abstract classes and Interfaces) > Inheritance (class extends parent Abstract or concrete class).
Encapsulation (blackbox, isolation methods, getters, setters, Creational Patterns)
Polymorphism (overriding, logical cluster principle – many classes (nodes) on same level with diff implementation of same function (operation), Operational patterns, Strategy pattern)

Inheritance – пожалуй, важнейшая особенность object based programming. Если требуется новый виток эволюции, программист создает новый класс, расширяющий умения его родителя, а иногда и реализующий по новому, т.е. перекрывающий методы родителя — override (polymorphism). Ведь у каждого поколения свои понятия в жизни… Если же программисту нужен «опыт и понятия» прежних поколений — он обращается к ним. Ничто не потеряно в этой структуре, поэтому крайне важно уметь ею пользоваться.

Object based programming – просто методика организации приложений, структурирования кода, централизации методов и объединения сущностей в единое иерархическое семейство. Подобно тому, как строились субмарины и самолеты, перенимая опыт плавучести и летучести из живой природы, Object based приложения также используют восприятие программных сущностей, как неких «живых» объектов, перенимая известные нам из реального(offline — помните о таком?) мира характеристики и свойства.

Другими словами, создается некая сущность, которая не только имеет свои свойства и методы, но умеет порождать потомков и эволюционировать! Это называется расширением – extending. Словно бережный родитель, объект передает имущество по наследству, либо получает опыт поколений, будучи потомком другой родительской сущности – parent. Таким образом, создается единое древо поколений, в котором удобно ориентироваться и массово управлять в отличие от разрозненных библиотек — процедурный метод.

Создатель или архитектор такой системы может переноситься по поколениям, внося изменения в самом корне, либо в отдельных ветвях развития. Конфликты устраняем! Новые знания — добавляем!
Сам принцип object based programming обязывает разработчика структурировать приложение по правилам, а не как приспичит, что облегчает и систематизирует его поддержку

На мой взгляд, освоению ООП очень помогает именно такое «человеческое» восприятие принципов. Например, как и в жизни существуют строгие родители, которые заставляют детей уметь что-либо, что сами считают нужным! Их называют Абстрактные классы — abstract. Помните, как родители заставляли вас играть на фортепиано или учить стихи?.. Так вот, Абстрактные классы также как и многие родители вовсе и знать не знают зачем ребенку-потомку это будет нужно, и как он это будет использовать, но уверены, что так НАДО! Т.е. такие классы содержат абстрактные методы, которые являют собой объявление метода без самой реализации, как фантик без конфетки, тем самым обязывая потомка, этот метод реализовать. Как и в жизни, где родители нередко перекладывают на детей свои нереализованные мечты.

Разумеется, в программировании не должно быть случайных методов, и любые методы и свойства являются частью продуманной иерархии классов, которая как генеалогическое дерево, может давать возможности расширять функционал от поколения к поколению. А абстрактные классы, и еще более абстрактные – интерфейсы ( interface — вообще не содержит реализаций ), помогают программисту не потерять, не забыть реализовать общие необходимые для всех потомков “умения в жизни” функционирования программы.

How-to disable screen lock (screensaver) on Ubuntu

Applications -> System Settings -> Brightness & Lock -> Lock On/Off

Enable network communication between different docker containers

If we have 2 different docker networks, host from docker-compose network – 172.15.0.5 and second host is through docker start 172.16.0.2

mybash# iptables -L -n | grep DOCKER-ISOLATION
DOCKER-ISOLATION-STAGE-1  all  --  0.0.0.0/0            0.0.0.0/0
iptables --flush DOCKER-ISOLATION-STAGE-1

After this command containers from 172.15.0.5 can communicate with 172.16.0.2

Encapsulation in other words means code isolation

Code isolation, or encapsulation (like a capsule), is when methods wrapped into a class to make one solid piece of logic, it became like a capsule. Also, then one piece of code knows little or nothing about another

When NoSql is better over sql database

Для начала нужно понять, когда хорошо использовать Sql? Когда данные структурированы и легко ложатся на модель кортежей.
Если же данные имеют привычку менять схему/структуру, то можно использовать NoSql.
Единственное, что у NoSql баз проблемы с ACID (транзакциями, атомарностью и т.п.)

Docker commiting custom container changes to docker repo

When you login inside docker container and modify it you might want to save the changes
Do the following:

docker ps
CONTAINER ID        IMAGE                                     COMMAND                  CREATED             STATUS              PORTS                                      NAMES
3c467f494520        c9de8ac964a9                              "/bin/bash"              31 minutes ago      Up 31 minutes       0.0.0.0:81->80/tcp, 0.0.0.0:444->443/tcp   mycontainer

Get container name and commit the changes

docker commit 3c467f494520 myusername/mydockerimage:latest

Push it to remote docker repo

docker push myusername/mydockerimage:latest

Docker push custom image to hub

docker tag mydockerimage myusername/mydockerimage:tagname
or
docker tag mydockerimage myusername/mydockerimage (if no tagname specified it will assign default one called "latest")
 
docker login -u myusername
(it asks for a password)
 
docker push myusername/mydockerimage

Docker how-to add extra port to current container

$ docker run -d -t -p 81:80 -v /home/imran/Projects/tmptmp:/var/www/html --name mycontainer ubuntu:latest /bin/bash
$ docker stop mycontainer
$ docker commit mycontainer mydockerimage
$ docker rm mycontainer
$ docker run -d -t -p 81:80 -p 444:443  -v /home/imran/Projects/tmptmp:/var/www/html --name mycontainer myusername/mydockerimage:latest /bin/bash