Архив автора: admin

Алгоритм Прима

Минимальное связующее дерево:

Граф, не имеющий направлений, называется неориентированным графом. Каждый граф должен иметь путь от одного узла к другому узлу. Остовное дерево также является неориентированным связным графом, в котором присутствуют все узлы графа с минимальным количеством ребер. Если остовное дерево не имеет всех узлов графа, то мы не можем сказать, что это остовное дерево. Суммарные веса остовного дерева будут меньше исходного веса графа, так как мы соединили его через ребра минимального веса. Покрывающее дерево также не имеет цикла. Любой граф имеет более одного остовного дерева, но только одно из них будет уникальным. Мы называем это минимальным остовным деревом, поскольку пытаемся создать полный граф со всеми узлами, сохраняя при этом низкий вес.

Мы можем нарисовать остовное дерево с помощью следующих двух методов:

  1. Алгоритм Крускала
  2. Алгоритм Прима

 

В этой статье мы собираемся обсудить алгоритм Прима. Алгоритм Крускала будет рассмотрен в следующей статье.

 

Алгоритм Прима:

Алгоритм Прима используется для нахождения минимального остовного дерева графа. Алгоритм примитива начинается с любого узла, а затем добавляет любой соседний узел с минимальным весом, и этот процесс продолжается до тех пор, пока не будут посещены все узлы в графах. При создании минимального остовного дерева графа мы также не должны создавать циклы, потому что циклов не должно быть в минимальном остовном дереве.

 

Шаги алгоритма Прима:

Алгоритм прима использует жадный подход для минимального остовного дерева. Мы должны выбрать любую вершину графа, а затем выбрать следующую вершину смежности, чей вес меньше, и мы продолжаем этот процесс до тех пор, пока не соединим все узлы графа.

  • Шаг 1: Выберите любую исходную вершину в графе.
  • Шаг 2: Найдите ребро минимального веса, которое примыкает к источнику, а затем соедините его с остовным деревом.
  • Шаг 3: Повторяйте шаг 2, пока все узлы не будут добавлены в минимальное остовное дерево.

 

Пример :

Ниже приведен пример поиска минимального остовного дерева с использованием алгоритма Прима.

1. Выбираем любой случайный узел из графа G и добавляем его в MST (минимальное остовное дерево). Мы выбираем здесь узел 0.

Алгоритм Прима

 

2. Теперь мы выбираем то ребро, которое является смежным с исходным узлом (0), но с наименьшим весом, а затем добавляем этот узел с наименьшим весом в минимальное остовное дерево.

Алгоритм Прима

 

3. Теперь мы выбираем то ребро, которое является смежным с исходным узлом (0 или 1), но с наименьшим весом, а затем добавляем этот узел с наименьшим весом в минимальное остовное дерево.

Алгоритм Прима

 

4. Теперь мы выбираем то ребро, которое является смежным с исходным узлом (0, 1 или 3), но с наименьшим весом, а затем добавляем этот узел с наименьшим весом в минимальное остовное дерево.

Алгоритм Прима

 

5. Теперь мы выбираем то ребро, которое является смежным с исходным узлом (0, 1, 3 или 4), но с наименьшим весом, а затем добавляем этот узел с наименьшим весом в минимальное остовное дерево.

Алгоритм Прима

 

6. Теперь мы выбираем то ребро, которое является смежным с исходным узлом (0, 1, 3, 4 или 6), но с наименьшим весом, а затем добавляем этот узел с наименьшим весом в минимальное остовное дерево.

Алгоритм Прима

 

7. Теперь мы выбираем то ребро, которое является смежным с исходным узлом (0, 1, 3, 4, 6 или 2), но с наименьшим весом, а затем добавляем этот узел с наименьшим весом в минимальное остовное дерево.

Алгоритм Прима

 

Выше наш окончательный MST (минимальное остовное дерево), а общая стоимость равна 6.

 

Программа C++ Prim MST (минимальное связующее дерево):

#include<iostream>



#include<vector>



#include<queue>



#include<algorithm>



#include<cstring>



typedef std :: pair<int,int> SII;



typedef std :: vector<SII> SSII;



int PrimsMST (int sourceNode, std :: vector<SSII> & graph){



    // В этой очереди будут храниться сведения о каждом узле

    // вместе с их весовой ценностью.



    std :: priority_queue<SII, std :: vector<SII>, std :: greater<SII>> k;



 



    k.push(std :: make_pair(0, sourceNode));



    bool nodesAdded[graph.size()];



    memset(nodesAdded, false, sizeof(bool)*graph.size());



    int mst_tree_cost = 0;



    while (!k.empty()) {



        // We are selecting here the node which has minimum cost



        SII itemNode;



        itemNode = k.top();



        k.pop();



        int Node = itemNode.second;



        int Cost = itemNode.first;



        // Здесь мы проверяем, не был ли какой-либо узел добавлен в MST,



        // затем добавляем этот узел.



        if (!nodesAdded[Node]) {



            mst_tree_cost += Cost;



            nodesAdded[Node] = true;



            // Выполните итерацию по узлам negibour, которые недавно были удалены



            // из очереди приоритетов.



            // и добавлен в MST, который еще не добавлен



            for (auto & pair_node_cost : graph[Node]) {



                int adjency_node = pair_node_cost.second;



                if (nodesAdded[adjency_node] == false) {



                    k.push(pair_node_cost);



                }



            }



        }



    }



    return mst_tree_cost;



}



    int main(){



    // Подробная информация о графике со стоимостью и узлом смежности.



    SSII fromNode_0_in_graph_1  = { {1,1}, {2,2}, {1,3},



    {1,4}, {2,5}, {1,6} };



    SSII fromNode_1_in_graph_1   = { {1,0}, {2,2}, {2,6} };



    SSII fromNode_2_in_graph_1   = { {2,0}, {2,1}, {1,3} };



    SSII fromNode_3_in_graph_1 = { {1,0}, {1,2}, {2,4} };



    SSII fromNode_4_in_graph_1  = { {1,0}, {2,3}, {2,5} };



    SSII fromNode_5_in_graph_1  = { {2,0}, {2,4}, {1,6} };



    SSII fromNode_6_in_graph_1   = { {1,0}, {2,2}, {1,5} };



    int num_of_nodes = 7; // Total Nodes (0 to 6)



    std :: vector<SSII> primsgraph;



    primsgraph.resize(num_of_nodes);



    primsgraph[0] = fromNode_0_in_graph_1;



    primsgraph[1] = fromNode_1_in_graph_1;



    primsgraph[2] = fromNode_2_in_graph_1;



    primsgraph[3] = fromNode_3_in_graph_1;



    primsgraph[4] = fromNode_4_in_graph_1;



    primsgraph[5] = fromNode_5_in_graph_1;



    primsgraph[6] = fromNode_6_in_graph_1;



    // Как мы уже знаем, мы должны выбрать исходную вершину,



    // поэтому мы начинаем с узла вершины 0.



    std :: cout << "Общая стоимость минимального связующего дерева после алгоритма Прима : "



                "" << PrimsMST(0, primsgraph) << std :: endl;





    return 0;



}

Выход:

Общая стоимость минимального связующего дерева после алгоритма Прима : 6



Process finished with exit code 0

Временная сложность алгоритма MST Prim:

  1. Общее время, необходимое для обработки и выбора определенного узла очереди с приоритетом, который еще не добавлен в MST, составляет logV. Но поскольку это работает для каждой вершины, общая временная сложность составляет V (logV).
  2. Граф неориентированный, и общее количество ребер будет 2E. Поскольку мы должны поместить узлы в приоритетную очередь, это займет журнал общего времени (V). Однако, поскольку у нас есть в общей сложности 2E ребра, наша общая операция отправки будет 2E (log (V)).
  3. Общая сложность после операции 1 и 2 составляет O( (E + V ) log (V )).

 

Заключение:

Мы изучили минимальное остовное дерево Prim, которое большинство людей предпочитает в первую очередь, когда им нужно найти граф MST из графа. Алгоритм Prim прост для понимания и реализации в реальном приложении. Алгоритм Prim очень полезен в реальных приложениях, например, при соединении железнодорожных путей с целыми городами. Так что это всего лишь один пример, но его применение огромно, поэтому мы должны понять этот алгоритм.



2022-03-10T18:08:39
Программирование

Как получить свой виртуальный номер сегодня. Прием СМС онлайн

Хотите получить виртуальный номер быстро, не тратя лишних нервов и денег? Читайте нашу статью.

 

Что такое виртуальный номер

Кроме того, поясним, что такое виртуальный номер.

Виртуальный номер — это ваш обычный номер телефона, который хранится на физической SIM-карте. Однако, несмотря на это, между виртуальным номером и обычным номером есть существенная разница. Разница, однако, в том, что вам не обязательно иметь ту самую SIM-карту.

 

Получите виртуальный номер за 5 минут

Получить виртуальный номер можно благодаря интернету. После этого освободите 5 минут своего времени с помощью интернет-площадок, торгующих поддельными номерами. А если вы уже зарегистрированы в системе интернет-магазина продавца, покупка займет пару минут.

 

6 причин использовать виртуальный номер

  1. Вам не нужна SIM-карта

    Напомним, что вам не нужна физическая SIM-карта, чтобы купить и использовать виртуальный номер. Однако, если вам не нужно будет ходить в салоны сотовой связи вашего абонента, стоять в очередях и заполнять скучные документы.
  2. Вы можете купить номер любой страны и использовать его для покупок или регистрации в социальных сетях, мессенджерах

    В сегодняшних реалиях сложно представить, что можно свободно пользоваться физическими сим-картами разных стран и штатов. Магазины виртуальных номеров, такие как Online sim, решат эту проблему за вас. Сайт предлагает номера из всех стран. Вы можете выбрать тот, который вы хотите.
  3. Вы можете использовать номер для регистрации в любом сервисе мира

    Как и в предыдущем пункте, только для регистрации на сервисах, платформах, мессенджерах, интернет-магазинах. Это означает, что вы не сможете там зарегистрироваться со своим стандартным номером, если приложение не работает в вашей стране.
  4. Техническая поддержка на всех этапах покупки и оформления номера

    Кстати, Online sim заботится о подборе нужного номера для каждой заявки. Так что даже если у вас возникли проблемы с покупкой, служба техподдержки всегда готова срочно помочь в онлайн-чате на сайте или в Telegram.
  5. Ваши данные защищены службой продажи виртуальных номеров.

    Все ваши регистрации, покупки и заполнение форм остаются строго конфиденциальными. Ваш номер мобильного телефона позволяет в особых случаях идентифицировать все ваши данные, где вы когда-либо регистрировались. Вот почему так важно не забывать о безопасности и сохранении конфиденциальности ваших личных данных.
  6. Безопасность данных в Online sim

    Мы продолжим использовать его в качестве примера, чтобы рассказать вам, как должна работать хорошая компания. Поскольку Online sim хранит все ваши данные в строгой конфиденциальности, они не утекают в сторонние компании, банки или службы безопасности. В заключение, вы можете зарегистрироваться на всех сервисах и платформах со своим виртуальным номером, который стоит всего несколько центов.

 

Как заказать СМС онлайн на виртуальный номер в Online sim

Три простых шага для получения смс бесплатно через интернет:

 

01. Закажите номер в кабинете

Например, если вы хотите создать вторую страничку для ВКонтакте, то перейдите в кабинет, выберите страну, а после – зайдите на сайт социальной сети.

 

02. Используйте его для получения смс

Скопируйте выданный номер и вставьте в форму регистрации ВКонтакте для получения СМС с кодом регистрации.

 

03. Принимайте смс с сайтов

После поступления СМС сообщения вам остается скопировать код подтверждения и использовать его для завершения активации аккаунта.



2022-03-10T17:51:47
Сети

Базовое имя Python

Python предоставляет различные методы взаимодействия с операционной системой для управления именами файлов и именами каталогов через модуль os. В этой статье обсуждается один из встроенных методов Python, используемых для получения базового имени файла по заданному пути: метод os.path.basename(), который позволяет нам извлечь имя файла из указанного пути.

Мы должны использовать os.path.basename() в коде, импортируя модуль os. Этот метод os.path.basename() дополнительно использует функцию split() для разделения строки пути на пару, которая будет возвращать начало и конец. Головная часть предназначена для имени каталога, а хвостовая часть возвращается методом os.path.basename(). Давайте подробнее об этом методе.

 

Синтаксис базового имени Python:

Чтобы получить имя файла, которое является базовым именем из пути, мы должны использовать этот синтаксис.

Os.path.basename(path)

 

Os.path — это подрежим модуля os для манипулирования именами путей. Итак, сначала нам нужно импортировать модуль os для этого метода базового имени.

 

Параметр передается в базовом имени python:

Этот метод os.path.name() принимает только указанную строку пути, представляющую путь к файловой системе.

 

Возвращаемое значение в базовом имени python:

os.path.basename() вернет значение в строке заданного пути, которое является базовым именем файла. Теперь у нас будет простой пример реализации того, как работает этот метод os.path.basename().

 

Пример 1:

В Windows и Unix у нас есть разные форматы для извлечения базового имени файла с указанным путем, поэтому в этом примере мы собираемся извлечь базовое имя с синтаксисом окна и синтаксисом Unix. Сначала у нас есть пример окна.

В окне используется разделитель с обратной косой чертой ‘’; мы можем проверить или подтвердить этот разделитель с помощью метода os.path.sep(). Переменная «file_dir» имеет путь «UsersabcDownloadsMy Window», который является именем каталога файла, а «file_name» имеет путь, заданный «UsersabcDownloadsMy Windowindex.html». Обе переменные возвращают базовое имя файла с синтаксисом Window. Мы также будем печатать разделитель окон с помощью метода os.path.sep().

import os.path



file_dir = os.path.basename("UsersabcDownloadsMy Window")



print(file_dir)



file_name = os.path.basename("UsersabcDownloadsMy Windowindex.html")



print(file_name)



print(os.path.sep)

 

Экран консоли покажет выходные данные, печатающие имя каталога файла, базовое имя файла и знак разделителя.

Теперь у нас есть разделитель Unix, используемый в этом примере ниже. Unix использует косую черту ‘/’ в качестве разделителя пути. Мы можем получить этот разделитель, напечатав метод os.path.sep().

import os.path



file_dir = os.path.basename("/Downloads/ My Unix")



print(file_dir)



file_name = os.path.basename("/Downloads/ My Unix /unix.txt")



print(file_name)

 

Пример 2:

Давайте рассмотрим пример извлечения имени файла с помощью метода os.path.basename(). Мы импортировали os.path для доступа к методу os.path.basename() в этом конкретном примере. У нас есть «базовое имя», которое вернет базовое имя файла, которое мы назначили в os.path.basename. С оператором print() у нас будет базовое имя.

import os.path



basename = os.path.basename("/home/example/exampleFile.txt")



print(basename)

 

Здесь у нас есть «/home/example/» в качестве имени пути и «exampleFile.txt» в качестве базового имени.

 

Пример 3:

В этом примере мы найдем базовое имя каталога или имени папки. Имя папки или каталога также имеет базовое имя в полном пути. В этом примере у нас есть «Документы» в качестве базового имени из пути «/home/MyDocuments/Documents», который передается в os.path.basename(). Переменная ‘basename’ вернет вывод, который вызывается в функции print().

import os.path



basename = os.path.basename("/home/MyDocuments/Documents")



print(basename)

 

Мы получим «Документы» в качестве базового имени из приведенного выше кода.

 

Пример 4:

Чтобы получить базовое имя из URL-адреса, нам нужно импортировать библиотеку из модуля стандартного пакета urllib, который называется urlparse. Это поможет нам разделить строки URL на компоненты или снова объединить строку URL в компоненты.

В этом примере будет получено базовое имя URL-адреса для формирования переменной «URL», которая имеет строковый URL-адрес «https://docs.python.org/3/download.html». URL-адрес передается в метод urlparse() в качестве аргумента, который разделит URL-адрес на части. Этот анализ URL-адреса хранится в новой переменной «x», которая будет отображать строку разделенного пути URL-адреса. На этот раз мы используем os.path.basename() через оператор печати.

import os



from urllib.parse import urlparse



url = "https://docs.python.org/3/download.html"



x = urlparse(url)



print(x.path)



print(os.path.basename(x.path))

 

Отображение разделенной строки URL-адреса и базового имени из URL-адреса.

 

Пример 5:

В этом примере используется метод os.path.split() для возврата пары «голова» и «хвост» по отдельности. Для этого мы должны передать указанный путь в качестве аргумента в метод os.path.split(). Мы получим «голову» и «хвост» отдельно через оператор печати.

import os



path = "/Users/Desktop/Article/python/code.py"



head_tail = os.path.split(path)



print(head_tail)

 

Вы можете увидеть вывод этого кода, поскольку он показывает головную часть и хвостовую часть по отдельности.

 

Пример 6:

Мы извлекли базовое имя и расширение, определенные в этом примере. Мы будем извлекать имя файла без расширения с помощью другого метода os.path.splitext(). Этот метод даст только базовое имя, определенное в os.path.basename().

Мы назначили путь как «home/example/example3.txt» в переменной «basename». Используйте индекс как «0», чтобы получить базовое имя без расширения.

import os.path



path_name="home/example/example3.txt"



basename = os.path.splitext(os.path.basename(path_name))[0]



print(basename)



 

У нас есть вывод basename как «example3» без расширения на экране консоли.

 

Заключение

В этой статье мы рассмотрели все возможные способы получения базового имени по указанному пути. Кроме того, мы продемонстрировали получение базового имени в Windows и Unix с разными разделителями. Теперь, надеюсь, эта функция даст вам четкое понимание.



2022-03-10T17:23:26
Python

Python. встроенный If-Else

Язык программирования Python удобен для чтения и эффективен при написании операций. В этой статье обсуждаются встроенные условные операторы if-else. В Python нет тернарного оператора, поэтому мы используем if-else в одной строке, что имеет тот же эффект, что и тернарный оператор. Это условие оценивает условия в состоянии истинности или ложности.

Как встроенные операторы if-else — это логические операторы, которые предлагают одну строку, которая сохраняет качество кода, заменяя несколько строк кода if-else. Встроенные операторы if-else следует использовать с выражениями и их выполнением на основе условий оценки.

 

Синтаксис встроенного if-else в Python

Чтобы написать встроенный оператор if-else, мы должны следовать этому синтаксису.

<expression1> if <condition> else <expression2>

 

В этом синтаксисе <expression1> будет возвращено или выполнено, если условие истинно, иначе будет возвращено или выполнено <expression2>, и эти условия всегда выполняются слева направо.

 

IndentationError во встроенном if-else

Python использует отступы, чтобы различать, какие строки кода соответствуют другим. Потому что файл Python может содержать несколько определений функций. Функция должна иметь одну строку кода, чтобы быть допустимой. Это также означает, что даже если условие истинно, должна быть выполнена хотя бы одна строка кода; в противном случае возникает исключение IndentationError с сообщением «ожидается намеренный блок».

 

Пример 1:

Давайте начнем с простого примера того, как работает это встроенное if-else. Помните, что условия оцениваются слева направо. Здесь мы определяем переменную «a» равной «5», а a_output имеет условие if-else, которое мы передаем функции print() для отображения вывода. Встроенное условие if-else здесь вернуло «20», если переменная «a» равна «20», иначе вернуло «10».

a = 5



a_output = "20" if  a==20 else "10"



print(a_output)

 

Итак, у нас есть «а» равно «5», поэтому условие ложно, и мы получаем 10 после выполнения этого кода.

 

Пример 2:

В этом примере у нас есть две переменные во встроенном операторе as. В коде мы определяем переменную как «x» и присваиваем значение «20». Кроме того, у нас есть еще одна переменная, поскольку «y» равно «10». Таким образом, условие «y» равно «10», если «x» меньше «20», иначе будет напечатан «0». Что ж, передайте «x» через условие, поэтому слева направо, если «x» меньше «20», ответ будет «нет», поэтому мы ожидаем, что «y» будет «0». Давайте запустим пример и посмотрим на значение ‘y’.

x=20



y=10  if x<20 else '0'



print(y)

 

Здесь «у» равен «0», потому что условие ложно, так как «х» не меньше «20», он равен «20».

Из приведенного выше кода мы получили значение «y» как «0». Теперь, что, если «x» меньше «20», взяв значение «x» как «19». Мы ожидали, что «y» будет «10». Мы можем увидеть значение «y», напечатав значение.

x=19



y=10  if x<20 else '0'



print(y)

 

Поскольку у нас есть выходное значение «y» равное 10, условие истинно, поскольку «x» меньше «20».

 

Пример 3:

В этом конкретном примере у нас есть код строки. Присвоив значение «красный» переменной «цветок» и применив встроенное условие if-else, которое печатает «Цветок белый», если переменная «цветок» равна «белому», иначе будет напечатано выражение «цветок не белый». .

flower='red'



print("Цветок белый" if flower == 'white' else "Цветок не белый")

 

Значение цветка красное; в результате условие не выполняется, и реализуется оператор в другой части. Вы можете увидеть вывод ниже, который печатает «Цветок не белый».

 

Пример 4:

Все примеры представляют собой просто встроенные условия if-else, но сейчас мы обсудим вложенные условия if-else. Мы берем пример одобрения автомобильных прав для людей, имеющих возраст, равный 18 или старше 18 лет.

У нас есть переменная «age», которая принимает данные от пользователя. В условном встроенном заявлении будет напечатано «вы не имеете права подавать заявку», если возраст младше 16 лет. Если возраст составляет от 16 до 18, будет напечатано «нужно подождать, пока вам исполнится 18+»; в противном случае будет показано «вы имеете право подать заявку».

age = int(input("Введите ваш возраст = "))



message= 'Вы не имеете права подавать заявку' if age<16 else 'вам нужно подождать, чтобы вам исполнилось 18+' if 16<age<=18 else 'вы имеете право подать заявку'



print(message)

 

Вывод этого кода показывает сообщение «Вы не имеете права подавать заявку», поскольку пользователь вводит возраст 15 лет, что меньше 16 лет.

Теперь, когда пользователи вводят возраст 17 лет, мы печатаем «вам нужно подождать, чтобы вам исполнилось 18+», поскольку возраст составляет от 16 до 18.

На экране консоли было напечатано «вы имеете право подать заявку», поскольку возраст старше 18 лет.

 

Пример 5:

Это пример чрезвычайно очевидного случая в реальном времени, когда мы должны оценить несколько условий. Здесь мы должны выделить оценку из набранных баллов; мы определяем переменную «AndreyEx» и инициализируем ее значением «80».

Условие хранится в переменной с именем «Результат», которая будет печатать оценки от «А» до «Неудачно» при выполнении. На этот раз оценки выше 90, поэтому ожидается, что на выходе будет A+. Давайте запустим этот код, чтобы увидеть, каков результат этого кода.

AndreyEx = 95



Result = 'Grade = A+' if AndreyEx > 90 else 'Grade = A' if AndreyEx > 80 else 'Grade = B' if AndreyEx >70 else 'Grade = C' if AndreyEx >60 else 'Grade = D' if  AndreyEx > 40 else 'Fail'



print(Result)



Оценка A+ выводится на экран консоли.

 

Заключение

Мы подробно рассмотрели встроенные if-else в python с несколькими допустимыми примерами с помощью терминала Spyder. Встроенный if-else имеет гораздо более короткий и аккуратный код, который понятен и прост в использовании. Надеюсь, это поможет вам понять фундаментальную концепцию встроенных операторов if-else.



2022-03-07T20:29:58
Python

Ваше полное руководство по покупке наружных купольных камер видеонаблюдения

Установка наружной купольной камеры безопасности для вашей собственности позволяет вам контролировать широкий спектр областей , сочетая ваш домашний декор с его элегантным и элегантным дизайном.

При покупке лучших наружных купольных IP-камер и систем вы увидите множество вариантов.

Чтобы сэкономить ваше время в Google, мы выбираем 2 наружные купольные камеры видеонаблюдения на ваш выбор, основываясь на доступных функциях, оценках клиентов и отзывах профессиональных редакторов (и в соответствии с вашим бюджетом ).

Вы также можете ознакомиться с пошаговым руководством по установке наружной купольной камеры видеонаблюдения, такой как IP-камера EZ-IPC-D3B50P-0280B, купить которую можно по ссылке: https://yumtrade.ru/ip-kamery-ez-ip/62785-ip-kamera-ez-ipc-d3b50p-0280b.html и с часто задаваемыми вопросами об этом типе камер наблюдения.

 

№1. Наружные купольные камеры безопасности PoE и WiFi для вашего дома

Простые в установке наружные купольные камеры наблюдения обычно включают в себя IP-камеры PoE и подключаемые беспроводные камеры безопасности.

Для работы обоих типов наружных купольных камер наблюдения требуется только один кабель.

Для наружных купольных камер безопасности PoE требуется кабель Ethernet Cat 5/6 для подключения к маршрутизатору для обеспечения питания и передачи данных.

Для работы наружных купольных камер Wi-Fi достаточно подключить их к розетке. Пока камеры находятся в зоне действия Wi-Fi, они могут передавать потоковое видео на ваше устройство в режиме реального времени.

 

№ 2. Монтаж и установка наружной купольной камеры: пошаговое руководство

Перед установкой наружных купольных камер видеонаблюдения в вашем доме вам необходимо подготовить следующие предметы:

  • Купольная наружная камера безопасности
  • Адаптер питания
  • Ваш маршрутизатор
  • Кабель Ethernet (для типа PoE могут потребоваться удлинительные кабели Ethernet)
  • Монтажный шаблон
  • Винты для крепления камеры
  • Ваш мобильный телефон iPhone или Android

Здесь мы возьмем наружную купольную камеру безопасности RLC-422 в качестве примера, чтобы показать вам подробные шаги по установке этого типа камер видеонаблюдения.

Шаг 1 . Используйте шаблон монтажного отверстия, чтобы просверлить отверстия для камеры.

Шаг 2 . Используйте винты для крепления камеры к стене или потолку.

Шаг 3 . Подключите камеру к маршрутизатору с помощью кабеля Ethernet.

Шаг 4 . Загрузите приложение Reolink из App Store (для iPhone) или Google Play (для мобильных телефонов Android).

Шаг 5 . Запустите приложение Reolink на своем мобильном телефоне. Нажмите кнопку «+» в правом верхнем углу, чтобы добавить камеру.

Шаг 6 . Отсканируйте QR-код на камере, чтобы добавить камеру.

Шаг 7 . Назовите свою камеру и придумайте пароль. Теперь вы можете получить доступ к камере для прямой трансляции.

 

№3. Наружные купольные камеры видеонаблюдения. Самые горячие вопросы

Мы перечисляем некоторые из самых горячих вопросов о наружных купольных камерах видеонаблюдения и пишем на них подробные ответы.

Если у вас есть какие-либо вопросы, пожалуйста, оставьте их в комментариях ниже!

 

В 1: Могу ли я использовать поддельные наружные купольные камеры безопасности для сдерживания злоумышленников?

A 1 : Ну, фиктивные камеры наблюдения могут помочь остановить некоторых глупых воров. Однако не стоит рисковать. Настоящая наружная купольная камера видеонаблюдения будет лучшим выбором для защиты вашего имущества.

 

В 2: Мне нужен охранный DVR/NVR и 4 наружные купольные камеры видеонаблюдения с ночным видением, но я не смог найти наиболее подходящую, что мне делать?

A 2 : Если вы не можете найти именно те наружные купольные камеры безопасности, которые вам нужны, вы можете купить NVR/DVR и наружные купольные камеры безопасности отдельно. Например, вы можете сначала купить сетевой видеорегистратор PoE , а затем добавить 4 или более наружных купольных камер безопасности позже.



2022-03-05T18:24:56
Безопасность

How to Configure MikroTik RouterOS v7 First Time

MikroTik RouterOS v7 (both Long-term and Stable) has been released with new features. So, it is usual that if you buy a new MikroTik Router, it will be RouterOS v7. RouterOS v7 has some changes. So, if you are an old RouterOS user, you may face some new features those were not in the previous version. But there is no need to be heisted because there is a correlation between the old and the new versions. So, you can absorb it so easily.




On the other hand, if you get MikroTik RouterOS v7 first time and trying to configure it first time, go through this article. Because, this article is designed to show how to configure a MikroTik RouterOS v7 first time using Winbox software.




Prerequisites




Before going to start RouterOS v7 configuration, you should have the following prerequisites.




  1. Basic knowledge on IP Addressing and Networking.
  2. A MikroTik RouterBOARD or MikroTik RouterOS installed on a PC or CHR that is running on a hypervisor.
  3. Winbox Software.
  4. PC with Windows Operating System installed and RJ45 cables.




Configuring MikroTik RouterOS v7 following 4 Easy Steps




MikroTik RouterOS v7 can easily be configured following the below 4 steps properly.




  • Assigning WAN and LAN IP addresses
  • Gateway configuration
  • DNS configuration and
  • NATing configuration




To configure MikroTik RouterOS, we will follow the following simple network where first interface of a MikroTik RouterBOARD is connected to an ISP network and the second interface is connected to a LAN switch where LAN PCs or devices will be connected.



MikroTik RouterOS v7 Basic Configuration
MikroTik RouterOS v7 Basic Configuration



According to the above network diagram, we have the following information.




  • WAN IP: 192.168.20.119/24 (This IP will be provided by your ISP)
  • Default Gateway: 192.168.40.1 (This will also be provided by your ISP)
  • LAN IP Block: 10.10.0.0/24 (You can assign according to your network requirement. As 10.10.0.1/24 has been assigned on MikroTik interface, it will be the default gateway of LAN devices.)
  • DNS IP: We will use Google DNS IP 8.8.8.8 and 8.8.4.4 but you can use any DNS Server provided by your ISP or you can use your own DNS Server.




That’s enough for the basic configuration of RouterOS v7. So, let’s start the configuration.




Step 1: Assigning WAN and LAN IP Addresses




The first step to configure a MikroTik RouterOS is to assign WAN and LAN IP addresses in WAN and LAN interface accordingly. The following steps will show how to assign WAN and LAN IP addresses in a new MikroTik RouterOS v7.






  • At first download latest Winbox from this link or collect latest Winbox from any source.
  • Connect your PC with MikroTik Router with a RJ45 cable. You can connect any interface of the MikroTik Router.  
  • Open Winbox software in your operating system and click on Neighbors tab. Connected Ethernet’s MAC will appear in this tab. If you don’t find MAC Address, click on Refresh button. MAC address will appear soon. Click on the appeared MAC address and the selected MAC address will be appeared in Connect To input box.
  • The default username is admin and password is blank of MikroTik RouterOS. So, type admin in the login input box and password field keep blank and then click on Connect button. Winbox graphical user interface (GUI) will appear now.
  • Click on Remove Configuration button if prompted or from Winbox go to System > Reset Configuration and check No Default Configuration and then click on Reset Configuration button to reset RouterOS.
  • The RouterOS will now be rebooted. So, after reboot login again. Now you will find a zero configuration RouterOS.
  • Go to IP > Addresses menu item. Address List window will appear now. Click on PLUS SIGN (+). New Address window will appear. Put your WAN IP address (according to the diagram: 192.168.40.119/24) which has been provided by your ISP in Address input box and then select WAN interface (in this article: ether1) from the Interface drop-down menu and click Apply and then OK button.
  • Click PLUS SIGN (+) again and put LAN Gateway IP address (in this article: 10.10.0.1/24) in Address input box and choose LAN interface (in this article: ether2) from Interface drop-down menu and click Apply and OK button.




After assigning WAN and LAN IP addresses, Address List window will look like the following image.



Assigning WAN and LAN IP Addresses
Assigning WAN and LAN IP Addresses



If you want to use command, open the New Terminal from Winbox menu item and then run the following command.





/ip address add address=192.168.40.119/24 interface=ether1

/ip address add address=10.10.0.1/24 interface=ether2




Note: Don’t forget to change the IP addresses according to your network information.




Step 2:  Router Default Gateway Configuration




After assigning WAN and LAN IP address, we will now set MikroTik default gateway so that router can communicate with internet. The following steps will show how to assign default gateway in MikroTik RouterOS.




  • From Winbox, go to IP > Routes menu item. Route List window will appear now. You can see two dynamic routes are already added in this Route List.
  • Click on PLUS SIGN (+). New Route window will appear. Now put gateway address (according to the diagram: 192.168.40.1) which has been provided by your ISP in Gateway input field.
  • Now click Apply and OK button.




After setting the default gateway, the Route List window looks like the following image.



Setting up the default gateway of MikroTik RouterOS
Setting up the default gateway of MikroTik RouterOS



The following command can be run to setup default gateway shortly.





/ip route add gateway=192.168.40.1




Step 3: DNS Configuration




DNS configuration is an optional configuration but without assigning DNS Server IP, RouterOS cannot resolve domain to IP address. So, it is recommending setup DNS Server IP in MikroTik RouterOS.




It is also possible to turn MikroTik RouterOS as caching DNS Server so that LAN user can resolve DNS directly from RouterOS which will save time and bandwidth usage. If you wish to turn RouterOS as DNS Server, follow my article how to turn MikroTik RouterOS as caching DNS Server.






The following steps will show how to assign DNS Server in MikroTik RouterOS.




  • Go to IP > DNS menu item. DNS Settings window will appear. In this window, put DNS server address that you have got from ISP Company or you can put Google public DNS IP (8.8.8.8) in Servers input box.
  • You can put multiple DNS server IPs by clicking add new value button (drop down button) located after the Servers input box and putting the DNS Server IP in input box.
  • Click Apply and OK button.




After assigning DNS Server IP, the DNS settings window will look like the following image.



DNS Settings in MikroTIk RouterOS v7
DNS Settings in MikroTik RouterOS v7



Run the following command to assign DNS Server IP from terminal.





/ip dns set servers=8.8.8.8,8.8.4.4




Step 4: NATing Configuration




We will now configure NATing to masquerade LAN users IP addresses. Without NATing configuration, LAN devices cannot access internet because LAN IP block is not familiar in public area.   




The following steps will show how to configure NATing in MikroTik RouterOS.




  • From Winbox, go to IP > Firewall menu item and click on NAT tab and then click on PLUS SIGN (+). New NAT Rule window will appear.
  • From General tab, choose srcnat from Chain drop down menu.
  • From Action tab, choose masquerade from Action drop down menu and then click Apply and OK button.




After configuring NATing in MikroTik RouterOS, the NAT Firewall window will look like the following image.



NATing Configuration in MikroTik RouterOS
NATing Configuration in MikroTik RouterOS



Run the following command to configure NATing from command prompt.





/ip firewall nat add action=masquerade chain=srcnat




MikroTik Router is now ready. Connect a switch to MikroTik LAN interface with RJ45 cable and connect all PCs to this switch. Also connect ISP cable to WAN interface. Now assign IP to all your LAN PC according to your LAN IP network series. If you face any problem to set IP address in windows PC, follow the article about how to assign static IP address in windows operating system which will guide you the proper steps to assign IP address in any windows PC. Now browse any website or ping google.com from your LAN PC. If your ISP is OK, you will now be able to browse any website successfully.




Known Security Issue




The above section has described the basic configuration of a MikroTik RouterOS but the configuration has a security issue: if anyone comes to your network and know the LAN IP block and assign IP address in his/her device, he/she will be able to access internet without your knowledge because there is no blocking here.






For this, we will create a firewall rule that will block all incoming IP addresses except our allowed IPs. The following steps will show how to block all IP addresses except allowed IPs with firewall rule.




  • From Winbox, go to IP > Firewall menu item. Firewall window will appear.
  • Click on Filter Rules tab and then click on PLUS SIGN (+). New Firewall Rule window will appear.
  • Under General tab, choose forward from Chain dropdown menu and choose your LAN interface (in this article: ether2) from In. Interface dropdown menu.
  • Click on Advanced tab and write allowed_IP or whatever text you want in Sr. Address List input box. Also click the negation check box before the input box to negate the rule logic.  
  • Click on Action tab and choose drop from Action dropdown menu.
  • Click Apply and OK button.




After creating firewall rule, the Filter Rules tab will look like the following image.



FIrewall Rule to disallow unwanted IP
FIrewall Rule to disallow unwanted IP



You can run the following command to create the firewall rule.





/ip firewall filter add action=drop chain=forward in-interface=ether2 src-address-list=!allowed_IP




Allow IP from Address List




Now if anyone assigns LAN block IP, cannot get internet access until you allow them from RouterOS. To allow any IP for internet access, do the following steps.




  • From Winbox, go to IP > Firewall menu item. Firewall window will appear,
  • Click on Address List tab and then click on PLUS SIGN (+). New Firewall Address List window will appear.
  • Choose the Src. Address List that you provided in Firewall rule creation from Name dropdown menu.
  • Put the IP that that you want to allow from Address input box.
  • Click Apply and OK button.



Creating Firewall Address List Entry
Creating Firewall Address List Entry



Now the assigned IP will be able to access internet through your MikroTik RouterOS.  




You can create address list entry with the following command also.





/ip firewall address-list add address=10.10.0.2 list=allowed_IP




More on MikroTik RouterOS…




MikroTik Router basic configuration is not so enough to maintain a real network. If you need to maintain an office network, it will be better to use MikroTik DHCP Server. Managing DHCP Server with Radius Server will provide you more faster and smart solution.




Again, if you want to maintain an ISP network, MikroTik PPPoE Server is a better solution. MikroTik PPPoE Server with Radius Server will provide you a prepaid billing system also.




If you plan to maintain a Hotel, Airport, Railway, Restaurant network or any ISP network with WiFi solution, MikroTik Hotspot Server is your best friend. Using Radius Server with Hotspot, you can manage Bandwidth with Prepaid Billing System as well as Data Limit with Prepaid Billing System.




In addition, if you find bandwidth management solution with MikroTik Router, MikroTik Bandwidth Management with Simple Queue will be enough helpful. But it will be better to Manage ISP Bandwidth with MikroTik PCQ.




Sometimes, you may need load balancing and link redundancy solution. Then, go through MikroTik Load Balancing and Link Redundancy with ECMP.




If you face any confusion to follow the above steps, watch the following video that will show how to configure RouterOS 7 step by step.