По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Сегодня мы расскажем вам, как настроить программный RAID 0 в Windows Server 2016 Core. В интернете полно информации о настройке чередующегося тома (а именно так именуется RAID0) через графический интерфейс. Мы этим заниматься не будем. Мы создадим чередующийся том через консоль. Для примера возьмем, установленную на Hyper-V виртуальную машину Windows Server 2016 Core. Предварительно нам необходимо создать два новых жестких диска, которые мы будем переводить в Raid0. Не включаем виртуальную машину. Нажимаем правой кнопкой мыши на нашей машине. В раскрывшемся меню выбираем пункт Параметры: В открывшемся окне кликаем по пункту Установка оборудования и выбираем пункт SCSi-контроллер. Нажимаем Добавить и в следующем окне выбираем пункт Жесткий диск и нажимаем Добавить В следующем окне из раскрывающегося списка Расположение выбираем номер, который не используется другими устройствами. После этого, под пунктом Виртуальный жесткий диск нажимаем кнопку Создать Откроется окно Приступая к работе. Здесь просто приветственное окно и нажимаем Далее. В окне Выбор формата диска устанавливаете переключатель на нужный вам формат диска. Мы выбрали формат VHDX. Нажимаем Далее. В окне Выбор типа диска устанавливаете переключатель в необходимый тип диска. На выбор три типа: Фиксированного размера, Динамически расширяемый, Разностный. И опять нажимаем кнопку Далее и перед нами откроется окно выбора имени диска и его местоположения. Задайте диску имя и укажите место, где он будет располагаться. Нажимаем Далее. Откроется окно Настройки диска. Здесь необходимо задать объем жесткого диска. Мы установили 40 Gb. Нажимаем кнопку Далее. Откроется окно Завершение настройки виртуального жесткого диска. Нажимаем Готово и в последнем окне нажимаем ОК. Аналогичным образом создается второй виртуальный жесткий диск. После того, как создали два диска, включаем нашу виртуальную машину. Входим под учетной записью Администратор’а.Вводим команду Diskpart: Выбираем Диск 1 командой select disk 1: Переводим его в режим online: Вводим команду online disk: Делаем диск динамическим командой convert dynamic: Может появиться ошибка, что диск защищен от записи. Эта проблема решается вводом команды Attribute disk clear readonly И повторно пытаемся сделать диск динамическим. Просматриваем заново наши диски командой list disk Звездочки напротив диска означают, что диск динамический. Аналогичные операции проводим и для диска 2. Все команды для диска 2 отображены на рисунке ниже. Далее, не меняя диск, вводим команду: create volume stripe disk=1,2. Данная команда создает чередующийся том. Для просмотра результатов выполнения команды вводим команду list volume. Из рисунка выше видно, что создан новый том (ТОМ3), который является Raid 0 (ЧЕРЕДУЮЩИЙСЯ). Теперь нам осталось присвоить литеру нашему новому тому. Для этого вводим команду assign letter=Y и проверяем командой list volume. Теперь нам надо отформатировать новый том, что бы можно было его использовать для сохранения информации. Выходим из режима Diskpart командой exit Для форматирования диска вводим команду следующего типа: format Y: /q /FS:NTFS. После чего система запросит подтверждения выполняемого действия и предупредит, что все данные будут уничтожены. Вводим yes. Начнется процесс форматирования. P.S. Иногда возникает необходимость установить букву диска, которая уже присвоена другому, например приводу DVD дисков. Для изменения литеры необходимо выполнить ряд команд: Зайти в diskpart; Просмотреть тома командой list volume; Выделить нужный том, на котором необходимо сменить букву- select volume 0; Удалить присвоенную букву командой remove letter=Y; Присвоить новую букву- assign letter=V;
img
Команда ping - это сетевой инструмент для проверки работоспособности удаленной системы. Другими словами, команда определяет, доступен ли определенный IP-адрес или хост. Ping использует протокол сетевого уровня, называемый Internet Control Message Protocol (ICMP), и доступен во всех операционных системах. С другой стороны, номера портов принадлежат протоколам транспортного уровня, таким как TCP и UDP. Номера портов помогают определить, куда пересылается Интернет или другое сетевое сообщение, когда оно приходит. В этом руководстве вы узнаете, как проверить связь с портом в Windows и Linux с помощью различных инструментов. Можно ли пропинговать конкретный порт? Сетевые устройства используют протокол ICMP для отправки сообщений об ошибках и информации о том, успешна ли связь с IP-адресом. ICMP отличается от транспортных протоколов, поскольку ICMP не используется для обмена данными между системами. Ping использует пакеты ICMP, а ICMP не использует номера портов, что означает, что порт не может быть опрошен. Однако мы можем использовать ping с аналогичным намерением - чтобы проверить, открыт порт или нет. Некоторые сетевые инструменты и утилиты могут имитировать попытку установить соединение с определенным портом и ждать ответа от целевого хоста. Если есть ответ, целевой порт открыт. В противном случае целевой порт закрывается или хост не может принять соединение, потому что нет службы, настроенной для прослушивания подключений на этом порту. Как пропинговать определенный порт в Linux? Вы можете использовать три инструмента для проверки связи порта в Linux: Telnet Netcat (NC) Network Mapper (nmap) Пинг определенного порта с помощью Telnet Telnet - это протокол, используемый для интерактивной связи с целевым хостом через соединение виртуального терминала. 1. Чтобы проверить, установлен ли уже telnet, откройте окно терминала и введите: telnet 2. Если telnet не установлен, установите его с помощью следующей команды Для CentOS/Fedora: yum -y install telnet Для Ubuntu: sudo apt install telnet 3. Чтобы пропинговать порт с помощью telnet, введите в терминале следующую команду: telnet [address] [port_number] Где [address] - это домен или IP-адрес хоста, а [port_number] - это порт, который вы хотите проверить. telnet google.com 443 Если порт открыт, telnet устанавливает соединение. В противном случае он указывает на сбой. 4. Чтобы выйти из telnet, нажмите Ctrl +] и введите q. Пинг определенного порта с помощью Netcat Netcat (nc) позволяет устанавливать соединения TCP и UDP, принимать оттуда данные и передавать их. Этот инструмент командной строки может выполнять множество сетевых операций. 1. Чтобы проверить, установлен ли netcat: Для Debian, Ubuntu и Mint: введите netcat -h Для Fedora, Red Hat Enterprise Linux и CentOS: ncat -h 2. Если netcat не установлен, выполните в терминале следующую команду: sudo apt install netcat 3. Чтобы пропинговать порт с помощью netcat, введите следующее: nc -vz [address] [port_number] Выходные данные информируют пользователя об успешном подключении к указанному порту. В случае успеха - порт открыт. Пинг определенного порта с помощью Nmap Nmap - это сетевой инструмент, используемый для сканирования уязвимостей и обнаружения сети. Утилита также полезна для поиска открытых портов и обнаружения угроз безопасности. 1. Убедитесь, что у вас установлен Nmap, введя nmap -version в терминал. Если Nmap установлен, вывод информирует пользователя о версии приложения и платформе, на которой он работает. 2. Если в вашей системе нет Nmap, введите следующую команду: Для CentOS или RHEL Linux: sudo yum install nmap Для Ubuntu или Debian Linux: sudo apt install nmap 3. После установки Nmap в системе используйте следующую команду для проверки связи определенного порта: nmap -p [port_number] [address] Выходные данные информируют пользователя о состоянии порта и типе службы, задержке и времени, прошедшем до завершения задачи. 4. Чтобы проверить связь с более чем одним портом, введите nmap -p [number-range] [address]. Синтаксис [number-range]- это диапазон номеров портов, которые вы хотите пропинговать, разделенные дефисом. Например: nmap -p 88-93 google.com Как пропинговать определенный порт в Windows? Проверить связь с портом в Windows можно двумя способами: Telnet PowerShell Пинг определенного порта с помощью Telnet Перед использованием telnet убедитесь, что он активирован: Откройте панель управления. Щелкните «Программы», а затем «Программы и компоненты». Выберите «Включение или отключение компонентов Windows». Найдите клиент Telnet и установите флажок. Щелкните ОК. Готово! Вы активировали клиент Telnet в системе. После завершения активации можно пропинговать порт с помощью telnet. Для этого: 1. Введите cmd в поиске в меню «Пуск». Щелкните на приложение Командная строка. 2. В окне командной строки введите telnet [address] [port_number] Где [address] - это домен или IP-адрес хоста, а [port_number] - это порт, который вы хотите проверить. Выходные данные позволяют узнать, открыт ли порт и доступен ли он, иначе отображается сообщение об ошибке подключения. Пинг определенного порта с помощью PowerShell PowerShell - это текстовая оболочка, которая по умолчанию поставляется с Windows. Чтобы проверить связь с портом с помощью PowerShell, выполните следующие действия: 1. Введите PowerShell в поиске в меню «Пуск». Щелкните приложение Windows PowerShell. 2. В окне командной строке PowerShell введите: Test-NetConnection [address] -p [port_number] Если порт открыт и соединение прошло успешно, проверка TCP прошла успешно. В противном случае появится предупреждающее сообщение о том, что TCP-соединение не удалось. Заключение Теперь вы знаете, как выполнить эхо-запрос и проверить, открыт ли порт, с помощью нескольких сетевых инструментов и утилит в Linux и Windows.
img
Что такое парадигмы программирования? Это не более, чем просто замысловатое название для популярных способов и стилей организации процесса написания программного кода. Я постараюсь разбить эту тему на части и дать простое пояснение по каждой парадигме. Таким образом, вы сможете легко понять, о чем говорят люди, когда произносят такие слова, как «объектно-ориентированный», «функциональный» или «декларативный». Давайте начнем! Что такое парадигма программирования? Парадигмы программирования – это различные способы и стили, которые используются для организации программы или языка программирования. Каждая парадигма состоит из определенных структур, функций и взглядов на то, как следует решать известные задачи программирования. Вопрос о том, почему существует так много различных парадигм программирования, схож с вопросом о том, почему существует так много языков программирования. Определенные парадигмы лучше подходят для определенных типов задач. Именно поэтому имеет смысл использовать разные парадигмы для разных типов проектов. Кроме того, методики, которые составляют каждую парадигму, развивались с течением времени. Благодаря достижениям как в области программного, так и аппаратного обеспечения появились различные подходы к решению задач, которых раньше просто не было. И последняя причина – я думаю, это просто творческое начало в человеке. По своей натуре, нам просто нравится создавать новые вещи, улучшать то, что другие когда-то создали, и адаптировать инструменты под себя и свои предпочтения или просто делать их более эффективными (в нашем понимании). Все это привело к тому, что на сегодняшний день мы имеем огромное количество вариантов, которые могут помочь нам написать и структурировать ту или иную программу. Чем парадигма программирования не является? Парадигмы программирования – это не языки и не инструменты. Вы не сможете ничего «создать» с помощью парадигмы. Они больше похожи на некий набор образцов и руководящих принципов, о которых условились большое количество людей, которым они следовали и которые они подробно изложили. Язык программирования не всегда привязан к определенной парадигме. Есть языки, которые были созданы с учетом определенной парадигмы и имеют функции, которые облегчают программирование в этом контексте больше, чем другие (хороший пример – Haskel и функциональное программирование). Однако существуют и «многопарадигмальные» языки. Это означает, что вы можете адаптировать свой код, чтобы он подходил под какую-то из парадигм (хороший пример – JavaScript и Python). При этом парадигмы программирования не являются взаимоисключающими в том смысле, что вы можете без каких-либо проблем использовать приемы из различных парадигм одновременно. Популярные парадигмы программирования Теперь, когда вы знаете, что такое парадигмы программирования, а что к ним не относится, давайте рассмотрим самые популярные из них, их характеристики и сравним их. Имейте в виду, что этот список не полный. Существуют и другие парадигмы программирования, которые мы здесь рассматривать не будем. Здесь я расскажу вам только о самых популярных и широко используемых. Императивное программирование Императивное программирование – это набор подробных инструкций, которые даются компьютеру, чтобы тот выполнил их в заданном порядке. Этот тип программирования называется «императивным», потому что мы некоторым образом указываем компьютеру (как программисты), что он должен делать. Императивное программирование концентрируется на описании того, как программа работает, шаг за шагом. Допустим, вы хотите испечь торт. Ваша императивная программа для такого рода задачи может выглядеть следующим образом: 1- Pour flour in a bowl 2- Pour a couple eggs in the same bowl 3- Pour some milk in the same bowl 4- Mix the ingredients 5- Pour the mix in a mold 6- Cook for 35 minutes 7- Let chill Воспользуемся конкретным примером и предположим, что мы хотим отфильтровать массив чисел так, чтобы остались только числа, которые больше 5. Наш императивный код тогда будет выглядеть следующим образом: const nums = [1,4,3,6,7,8,9,2] const result = [] for (let i = 0; i < nums.length; i++) { if (nums[i] > 5) result.push(nums[i]) } console.log(result) // Output: [ 6, 7, 8, 9 ] Обратите внимание, что мы указываем программе, что нужно перебрать каждый элемент массива, сравнить каждый из них с 5 и, если элемент больше 5, то поместить его в конечный массив. Наши инструкции предельно детализированы и конкретны, и именно это и является императивным программированием. Процедурное программирование Процедурное программирование – это производное от императивного программирования только с функциями (также известных как «процедуры» или «подпрограммы»). Процедурное программирования предлагает пользователю разделить выполнение программы на функции, чтобы оптимизировать модульный принцип организации. Вернемся к нашему примеру с тортом. Процедурная программа для этого примера будет выглядеть следующим образом: function pourIngredients() { - Pour flour in a bowl - Pour a couple eggs in the same bowl - Pour some milk in the same bowl } function mixAndTransferToMold() { - Mix the ingredients - Pour the mix in a mold } function cookAndLetChill() { - Cook for 35 minutes - Let chill } pourIngredients() mixAndTransferToMold() cookAndLetChill() Как вы можете видеть, благодаря реализации функций, мы можем просто прочитать три вызова функций в конце файла и понять, что делает наша программа. Такое упрощение и абстрактное представление является одним из преимуществ процедурного программирования. Однако внутри функций находится все тот же императивный код. Функциональное программирование Функциональное программирование продвигает концепцию создания функций немного дальше. В функциональном программировании функции рассматриваются как «полноправные граждане». Это означает, что их можно присваивать переменным, передавать в качестве аргумента и возвращать в качестве результата других функций. Еще одна ключевая концепция – это идея чистых функций. Чистая функций – это функция, которая, чтобы получить результат, полагается только на свои входные данные. И при одних и тех же входных данных всегда будет один и тот же результат. Кроме того, эти функции не имеют никаких побочных эффектов (то есть не вносят никаких изменений вне контекста функции). С учетом всех этих концепций, функциональное программирование призывает писать программы с помощью функций. Оно также поддерживает идею о том, что модульность кода и отсутствие побочных эффектов облегчают определение и разделение обязанностей внутри кодовой базы. Таким образом, это облегчает сопровождение кода. Вернемся к примеру с фильтрацией массива. В императивной парадигме мы можем использовать внешнюю переменную для хранения результата функции, что по сути может считаться побочным эффектом. const nums = [1,4,3,6,7,8,9,2] const result = [] // External variable for (let i = 0; i < nums.length; i++) { if (nums[i] > 5) result.push(nums[i]) } console.log(result) // Output: [ 6, 7, 8, 9 ] Для того, чтобы преобразовать это в функциональное программирование, мы можем сделать следующее: const nums = [1,4,3,6,7,8,9,2] function filterNums() { const result = [] // Internal variable for (let i = 0; i < nums.length; i++) { if (nums[i] > 5) result.push(nums[i]) } return result } console.log(filterNums()) // Output: [ 6, 7, 8, 9 ] Это практически тот же самый код, но мы проворачиваем все итерации внутри функции, в которой мы также сохраняем и массив результатов. Таким образом, мы можем гарантировать, что функция не будет ничего менять за своими пределами. Она создает переменную только для обработки своей собственной информации, и после завершения своей работы удаляет ее. Декларативное программирование Декларативное программирование скрывает всю сложность и приближает языки программирования к человеческому языку и мышлению. Это абсолютная противоположность императивному программированию, хотя бы потому что программист дает инструкции не о том, как компьютеру следует решать задачу, а о том, какой требуется результат. Будет намного понятнее, если мы приведем пример. Воспользуемся примером с фильтрацией массива. Декларативный подход здесь будет выглядеть следующим образом: const nums = [1,4,3,6,7,8,9,2] console.log(nums.filter(num => num > 5)) // Output: [ 6, 7, 8, 9 ] Обратите внимание, что, используя функцию фильтрации filter, мы явно не указываем компьютеру перебирать массив или сохранять значения в отдельном массиве. Мы просто говорим о том, что мы хотим («filter») и условие, которое необходимо выполнить («num > 5»). Что хорошего в таком подходе? Его легче читать и понимать, и зачастую он более емкий в записи. Хорошими примерами декларативного кода являются функции filter, map, reduce и sort в JavaScript. Еще один хороший пример – современные фреймворки/библиотеки JS, такие как React. Посмотрите, например, на этот код: <button onClick={() => console.log('You clicked me!')}>Click me</button> Здесь у нас есть кнопка (button) с приемником событий, который запускает функцию console.log при нажатии кнопки. Синтаксис JSX (то, что использует React) совмещает HTML и JS. Это упрощает и ускоряет написание приложений. Но это не то, что браузеры читают и выполняют. Код React позже преобразуются в обычный HTML и JS, а вот это уже то, с чем работают браузеры. JSX является декларативным, поскольку его цель заключается в том, чтобы предоставить разработчикам более удобный и эффективный интерфейс для работы. Здесь также важно отметить, что в декларативном программировании компьютер все равно обрабатывает информацию как императивный код. Если снова вернуться к примеру с массивом, то компьютер по-прежнему выполняет итерацию по массиву, как в цикле for, но нам, как программистам, не нужно писать это напрямую. Декларативное программирование скрывает всю сложность от программиста. Объектно-ориентированное программирование Одной из самых популярных парадигм программирование является объектно-ориентированное программирование (ООП). Основная концепция ООП заключается в разделении понятий на сущности, которые описываются как некие объекты. Каждая сущность группирует заданный набор информации (свойств) и действий (методов), которые может выполнять эта сущность. ООП широко использует классы. Классы - это способ создания новых объектов с помощью макета или шаблона, который задает программист. Объекты, которые были созданы с помощью класса, называются экземплярами. Вернемся к примеру с приготовлением пищи на псевдокоде. Предположим, что в нашей пекарне у нас есть главный повар (по имени Фрэнк) и помощник повара (по имени Энтони). У каждого их них есть определенные обязанности. Если бы мы использовали ООП, то наша программа бы выглядеть следующим образом: // Create the two classes corresponding to each entity class Cook { constructor constructor (name) { this.name = name } mixAndBake() { - Mix the ingredients - Pour the mix in a mold - Cook for 35 minutes } } class AssistantCook { constructor (name) { this.name = name } pourIngredients() { - Pour flour in a bowl - Pour a couple eggs in the same bowl - Pour some milk in the same bowl } chillTheCake() { - Let chill } } // Instantiate an object from each class const Frank = new Cook('Frank') const Anthony = new AssistantCook('Anthony') // Call the corresponding methods from each instance Anthony.pourIngredients() Frank.mixAndBake() Anthony.chillTheCake() Преимущество ООП заключается в том, что оно облегчает понимание программы за счет четкого разделения задач и обязанностей. Итоги Как мы увидели, парадигмы программирования – это различные способы решения задач программирования и организации нашего кода. Одними из самых популярных и широко используемых на сегодняшний день парадигм являются императивная, процедурная, функциональная, декларативная и объектно-ориентированная. Знание о том, что они из себя представляют, полезно для общего развития, а также для лучшего понимания других тем, связанных с программированием.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59