По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
VirtualBox - это кроссплатформенное программное обеспечение для виртуализации с открытым исходным кодом, которое может быть установлено в любой операционной системе и позволяет устанавливать и запускать несколько гостевых операционных систем на одном компьютере. Например, если вы установите его в своей системе Linux, вы можете запустить операционную систему Windows XP в качестве гостевой ОС или запустить ОС Linux в вашей системе Windows и так далее. Таким образом, вы можете установить и запустить столько гостевых операционных систем, сколько вам нужно, единственным ограничением является дисковое пространство и память. Недавно Oracle выпустила последнюю стабильную версию Virtualbox 6.0.0,и новейшая версия Virtual Box включает в себя много значительных изменений и новые функции. Про Linux за 5 минут?
img
Уже прошло несколько лет с тех пор, как появился Kotlin, и он преуспевает. Так как Kotlin был создан в качестве замены Java, то его, как и следовало ожидать, во многом сравнивают именно с ним. Чтобы помочь вам выбрать один из двух языков, я сравню основные аспекты каждого из них.  Вот 8 пунктов, которые я рассмотрю в этой статье: Синтаксис Лямбда-выражения Обработка нулей Классы предметной области Глобальные переменные Параллелизм Функции расширения Сообщество Сравнение синтаксиса Давайте сначала проведем сравнение базового синтаксиса. Я думаю, что многие из вас, кто читает эту статью, возможно, уже знают кое-что о Java и/или Kotlin, но я все же приведу пример, чтобы мы могли явно их сравнить: Java public class HelloClass { public void FullName(String firstName, String lastName) {    String fullName = firstName + " " + lastName; System.out.println("My name is : " + fullName); }       public void Age() { int age = 21; System.out.println("My age is : " + age); } public static void main(String args[]) { HelloClass hello = new HelloClass(); hello.FullName("John","Doe");        hello.Age(); } } Kotlin class NameClass {    fun FullName(firstName: String, lastName:String) {        var fullName = "$firstName $lastName"        println("My Name is : $fullName")    } } fun Age() { var age : Int    age = 21    println("My age is: $age") } fun main(args: Array) {    NameClass().FullName("John","Doe")    Age() } Код не сильно отличается, если не считать небольших различий в синтаксисе методов и классов. Но реальное различие заключается в том, что Kotlin поддерживает вывод типов, где тип переменной не нужно объявлять. А еще там не нужны точки с запятой ( ; ). Также можно отметить, что Kotlin не сильно придерживается принципов ООП, в отличие от Java, где все содержится внутри класса. Посмотрите хотя бы на функции Age и main в примере – они не находятся внутри класса. Kotlin, как правило, имеет меньше строк кола, а вот Java придерживается традиционного подхода и, соответственно, является достаточно многословным.  Одно из преимуществ Kotlin перед Java – он может делать все, используя как традиционный ООП-подход, так и любой другой.  Лямбда-выражения Если мы заговорили о Java и Kotlin, то мы, конечно же, должны поговорить об их знаменитых лямбда-выражениях. У Kotlin есть встроенная поддержка лямбда-функций (и всегда была), а вот в Java она появилась только в Java 8.  Давайте посмотрим, как они выглядят. Java //syntaxes parameter -> expression (parameter1, parameter2) -> { code } //sample usage ArrayList numbers = new ArrayList(); numbers.add(5); numbers.add(9); numbers.forEach( (n) -> { System.out.println(n); } ); Kotlin //syntax { parameter1, parameter2 -> code } //sample usage max(strings, { a, b -> a.length < b.length }) В Java скобки не являются обязательными: если есть только один параметр, то они не нужны. Но в Kotlin скобки нужны всегда. Однако, в общем и целом, помимо синтаксиса, различий не так уж и много.  Как по мне, лямбда-функции используются только в качестве методов обратного вызова. Хоть они и имеют гораздо более широкий спектр применений, все же они не очень читабельны, в связи с чем их реже используют. Они, конечно, сократят объем вашего кода, но разобраться в нем потом будет достаточно сложно.  Это вопрос предпочтений, но мне кажется, что намного удобнее, когда скобки используются всегда, как в Kotlin, потому что так код становится более читабельным.  Обработка нулей В объектно-ориентированном языке значения нулевого типа всегда были проблемой. Когда вы пытаетесь использовать содержимое нулевого значения, выпадает исключение нулевого указателя (NPE - Null Pointer Exception). Поскольку NPE всегда были проблемой, то и у Java, и у Kotlin есть свой способ обработки нулевых объектов. Как они это делают, я покажу ниже.  Java Object object = objServ.getObject(); //traditional approach of null checking if(object!=null){    System.out.println(object.getValue()); } //Optional was introduced in Java 8 to further help with null values //Optional nullable will allow null object Optional objectOptional = Optional.ofNullable(objServ.getObject()); //Optional.of - throws NullPointerException if passed parameter is null Optional objectNotNull = Optional.of(anotherObj); if(objectOptional.isPresent()){    Object object = objectOptional.get();    System.out.println(object.getValue()); } System.out.println(objectNotNull.getValue()); Kotlin  //Kotlin uses null safety mechanism var a: String = "abc" // Regular initialization means non-null by default a = null // compilation error //allowing null only if it is set Nullable var b: String? = "abc" // can be set null b = null // ok print(b) Сколько себя помню, в Java использовалась обычная проверка нулей, которой свойственен человеческий фактор. Затем в Java 8 появились необязательные классы, которые создают возможность для более надежной проверки нулевых значений, особенно со стороны API/сервера.  А вот Kotlin, если переменная допускает возможность нулевого значения, позволяет использовать операторы безопасного вызова. Я еще не пользовался необязательным классом, но, мне кажется, что его механизм работы и назначение чем-то похожи на операторы безопасного вызова в Kotlin. Оба варианта помогают определить, какая переменная может быть нулевой, и убедиться, что была реализована корректная проверка.  Иногда в коде может быть много переменных, которые надо проверить, и их слишком много для того, чтобы проверить их все. Но если вы будете добавлять проверки везде, где нужно, это сделает нашу кодовую базу просто безобразной, а это, я думаю, никому не понравится, так ведь? На мой взгляд, использование необязательных классов Java ощущается более сложным из-за объема кода, который надо добавить. А вот в Kotlin можно просто добавить немного кода, который будет проверять нулевые значения за вас.  Класс предметной области Некоторые называют это классом-сущностью. Ниже я привел примеры того, как классы используются в качестве классов предметной области в каждом языке. Java public class Student {     private String name;     private Integer age;         // Default constructor public Student() { }     public void setName(String name) {         this.name = name;     }     public String getName() {         return name;     }         public void setAge(Integer age) {         this.age = age;     }     public Integer getAge() {         return age;     } } Kotlin //Kotlin data class data class Student(var name: String = "", var age: Int = 0) //Usage var student: Student = Student("John Doe", 21) В Java свойства объявляются как частные (private) в соответствии с технологией инкапсуляции. Когда вы пытаетесь получить доступ к этим свойствам, Java использует сеттеры и геттеры, а также методы isEqual или toString, когда это необходимо. В Kotlin классы данных вводятся для определенных целей классов предметной области. Классы данных обеспечивают прямой доступ к свойствам. Они также предоставляют несколько встроенных служебных методов, таких как equals(), toString() и copy(). Я считаю, что классы данных — одна из лучших вещей, которые предлагает Kotlin. Они стремятся уменьшить количество шаблонного кода, который требуется для обычных классов предметной области, и они хорошо справляются с этой задачей. Случайное фото… потому что вы уже на полпути! Глобальные переменные Иногда может возникнуть необходимость создать такую переменную, которая была бы доступна в вашей кодовой базе везде. Для этого существуют глобальные переменные. Kotlin и Java имеют свои способы решения этой проблемы.  Java public class SomeClass { public static int globalNumber = 10; } //can be called without initializing the class SomeClass.globalNumber; Kotlin class SomeClass {    companion object {        val globalNumber = 10    } } //called exactly the same like usual SomeClass.globalNumber Некоторые из вас, возможно, уже знакомы с ключевым словом static, которое используется в некоторых других языках, таких как C++. Оно инициализируется в начале выполнения программы, и Java использует его для создания глобальных переменных, так как оно не содержится в качестве объекта. Это значит, что к нему можно получить доступ откуда угодно без инициализации класса как объекта.  Kotlin использует здесь совершенно иной подход: он убирает ключевое слово static и заменяет его объектом-компаньоном, который очень похож на одноэлементный класс. Это позволяет реализовывать сложные функциональные средства, такие как расширения и интерфейсы. То, что в Kotlin отсутствует ключевое слово static, застало меня врасплох. Вы, конечно, можете возразить, что использование ключевого слова static не самый удачный подход из-за его природы и сложности его проверки, и что, конечно же, объект-компаньон в Kotlin может легко его заменить. Даже в таком случае использование static для глобальной переменной не должно быть слишком сложным. Если мы будем осторожны с глобальными переменными и не сделаем для себя привычкой создавать их постоянно, то у нас все будет в порядке. Объект-компаньон также может дать нам некоторую гибкость при взаимодействии и т.п., но как часто мы будем взаимодействовать с одноэлементными классами? Я думаю, что ключевые слова static помогают нам сохранять краткость и ясность в отношении глобальных переменных. Параллелизм В наши дни параллелизм является популярной темой для обсуждения. Иногда способность языка программирования выполнять несколько задач одновременно может стать решающим критерием при выборе языка.  Теперь давайте посмотрим, как эти два языка решают эту задачу. Java // Java code for thread creation by extending // the Thread class class MultithreadingDemo extends Thread {    public void run()    {        try        {            // Displaying the thread that is running            System.out.println ("Thread " +                  Thread.currentThread().getId() +                  " is running");        }        catch (Exception e)        {            // Throwing an exception            System.out.println ("Exception is caught");        }    } } // Main Class public class Multithread {    public static void main(String[] args)    {        int n = 8; // Number of threads        for (int i=0; i) {    var number = 1    var result = number.plusOne()    println("Result is: $result") } Они позволяют добавить в класс новую функцию, при этом она не будет распространяться на класс или не нужно будет использовать какие-то замысловатые шаблоны проектирования. Она даже позволяет вам добавить функцию к изменяемому классу Kotlin. Вы практически можете попрощаться с тем самым методом lib, который требует, чтобы вы передавали все внутри своих параметров. Сообщество И последнее, но оттого не менее важное: давайте поговорим о чем-то нетехнического характера. Во-первых, давайте посмотрим на результаты опроса, которые отображают наиболее часто используемые языки программирования в 2020 году.  Здесь можно видеть, что одним из наиболее часто используемых языков является Java. И несмотря на то, что Kotlin все еще набирает обороты, сообщество Java все же в несколько раз больше, чем сообщество Kotlin, и, скорее всего, в ближайшее время это не сильно изменится.  Тогда какое это имеет значение? На самом деле имеет, и большое. Так как у Java большое сообщество, то тем, кто работает с Java, гораздо легче найти ссылки или получить помощь, когда это необходимо, как в Интернете, так и в реальной жизни.  Многие компании все еще используют Java в качестве основы, и это может так и остаться в ближайшее время, даже с учетом того, что Kotlin совместим с Java. Обычно переход на новые технологии не происходит для какой-либо одной бизнес-цели, только если у компании нет для этого действительно серьезных оснований.  Подведем итог Для тех, кто решил просто прочитать краткое изложение, вот что мы обсудили: синтаксис: структуры не сильно отличаются, разве что в некоторых мелочах, но Kotlin более гибкий в некоторых моментах; лямбда-выражения: синтаксис практически одинаковый, но Kotlin использует фигурные скобки для того, чтобы код было удобнее читать; обработка нулей: для того, чтобы обработку нулевых значений, Java использует класс, а Kotlin – встроенные операторы безопасных вызовов; классы предметной области: Java использует классы с частными переменными и геттерами/сеттерами, а Kotlin обеспечивает их работу с помощью классов данных; глобальные переменные: Java использует ключевое слово static, а Kotlin – что-то на подобие подклассов; параллелизм: Java использует многопоточность, а Kotlin – сопрограммы (которые обычно более легковесные); функции расширения: это новая функция, введенная в Kotlin, которая позволяет легко добавлять функции в классы, при этом не расширяя их; сообщество: здесь Java по-прежнему лидирует, что помогает в его изучении и получении необходимой помощи. Есть множество других особенностей, которые мы могли бы сравнить. Но то, что мы здесь уже обсудили, я считаю, является основным и самым важным.  На сегодняшний день, я думаю, Kotlin стоит того, чтобы обратить на него внимание. С точки зрения разработки, это поможет избавиться от длинного шаблонного кода и сделать его понятным и коротким. Если вы уже программируете на Java, то изучение Kotlin должно легко вам даться, и вы можете с этим не спешить. 
img
Сейчас существует очень много различных программ, которые помогают правильно настроить то или иное программное обеспечение. Для того, чтобы программа эффективно работала, необходимо воспользоваться реальной или виртуальной машиной. Также, имеет смысл воспользоваться программным окружением Vagrant, которое поставляется вместе с программой Ansible после покупки лицензии. Прежде чем приступать непосредственно к настройке программы, необходимо узнать, что это вообще такое и какие функции выполняет. Что такое программа Ansible и для чего она нужна? Данная программа нужна для того, чтобы управлять различными программными конфигурациями для того, чтобы разрабатывать приложения на языке Python. Ansible представляет собой список программ, объединенных в пакет для управления специальными конфигурациями. Благодаря данному пакету программ можно настраивать те или иные удалённые машины и управлять ими на большом расстоянии. На сегодняшний день настройка программы Ansible осуществляется путём изучения пособия по следующим главам: Прежде всего, специалисты обучают новичка работе с установщиком. При этом, нужно будет установить программу Ansible вместе с утилитой под названием Vagrant. Далее идет полное изучение так называемого файла инвентаризации. После того, как файл инвентаризации был настроен и как следует изучен пользователем, необходимо перейти к непосредственному сбору факторов, переменных, copy и shell. Всё это нужно установить и настроить, дабы не возникало никаких проблем, связанных с дальнейшей эксплуатацией пакета Ansible для настройки удалённых машин. После этого осуществляется процесс, в который входит детальная настройка нескольких хостом. Немаловажным этапом идёт настройка плейбуков. В качестве примера стоит вспомнить настройку кластера через Apache, который включает в себя поэтапный балансировщик уровня нагрузки на удалённую машину. После того, как все предыдущие 6 шагов были совершены, необходимо перейти к откату и изучению ошибок. С каждым запуском ошибок должна становится всё меньше, что приведет к формированию паттерна действий системы. Установка программы Ansible завершается установкой и настройкой ролей каждого узла. Сама по себе, данная программа (один из вариантов графического интерфейса) выглядит так: В чём заключается настройка программы Ansible на практике? Утилита Ansible работает в проталкивающимся режиме. Он включает в себя использование всех настроек главной машины, с которой и осуществляются все наработки и разработки узлов. Основная машина тянет определенные узлы и ветки, осуществляя поэтапную постепенную нагрузку системы вместе с ее настройкой. Какие пакеты и модули нужны для работы утилиты Ansible? Как показала практика, для работы данной утилиты достаточно иметь следующие типы модулей: Модуль под названием jinja2 Вспомогательный модуль типа yaml Следует сказать, что прежде чем устанавливать данную программу, необходимо понять, что она работает исключительно на Linux и его дистрибутивах. Как правило, самыми популярными дистрибутивами Linux для работы программы Ansible являются Ubuntu или дебиан. Через командную строку нужно запустить соответствующую команду, которая отправить запросы на запуск установщика Ansible. Внутри нужно будет найти соответствующие пакеты, которые потом должны быть переписанные в командную строку. После того, как программа Ansible было установлена, нужно будет постепенно перейти к установке дополнительной утилиты, которое было упомянута выше. Данная утилита носит название Vagrant. Как правильно установить Vagrant на Linux систему? В качестве основной среды для установки данной программы лучше всего использовать так называемую виртуальную машину. Виртуальная машина нужна для того, чтобы не нагружать основную систему и создать дополнительную среду для Vagrant. Сам по себе, процесс установки данной программы включает в себя скачивание следующего софта: Непосредственно сама виртуальная машина или Virtualbox. В том случае, если после установки Virtualbox не возникло никаких проблем, стоит перейти к поиску ещё 1 немаловажной программы под названием Ruby. Если речь идёт о современных дистрибутивах Linux, таких, как Debian или Ubuntu, то стоит с уверенностью сказать, что программа уже имеется в системе. Если же я говорится о старых версиях Ubuntu или Debian, то нужно будет перейти на файлообменники и скачать Ruby на свой персональный компьютер. Завершающим этапом установки является скачивание на персональный компьютер ещё 1 немаловажной программы под названием Vagrant 1.1+. Ее можно найти на официальном сайте. Дальнейшим этапом будет создание работающего файла виртуальной машины. Команда, запускающая программу в виртуальной машине, выглядит таким образом: «vagrant up». После ее активации процесс запустится и можно переходить к другим шагам. Для некоторых систем потребуется получить права суперпользователя или ввести Root ключ. Его нужно заранее узнать у администратора или вспомнить, если речь идёт о домашнем персональном компьютере. В виртуальной машине нужно будет добавить соответствующие ключи SSH, дабы продолжить процесс. Процесс будет запущен спустя несколько минут после того, как соответствующие команды будут введены. Программа взаимодействует следующим образом: Дальнейшим этапом будет создание файла inventory. Для того, чтобы создать соответствующий файл, необходимо прописать в нём следующие команды. host0.example.org ansible_ssh_host=192.168.33.10 ansible_ssh_user=root host1.example.org ansible_ssh_host=192.168.33.11 ansible_ssh_user=root host2.example.org ansible_ssh_host=192.168.33.12 ansible_ssh_user=root Следует сказать, что строка под названием «ansible_ssh_host» содержит в себе уникальный адрес IP хоста. Его должен знать каждый человек, который устраивает полную настройку системы. Завершающим этапом всех манипуляций, которые были приведены выше, является полная проверка путем вписывания соответствующих строк кода в командную строку. Первым делом нужно будет выполнить следующую команду: ansible -m ping all -i step-01/hosts При первых этапах проверки Ansible пытается запустить модуль под названием ping. В том случае, если программа работала верно, то и результат будет выглядеть следующим образом: host0.example.org | success >> { "changed": false, "ping": "pong" } host1.example.org | success >> { "changed": false, "ping": "pong" } host2.example.org | success >> { "changed": false, "ping": "pong" } Если данного кода нет, то что-то не так и необходимо будет искать решение проблемы на сторонних ресурсах. Консультирование со специалистом поможет избежать проблем в будущем. Всё, узлы настроены и теперь можно переходить к дальнейшим действиям. Как правильно настраивать отдельные узлы, используя основную машину? Для того, чтобы узлы могли взаимодействовать между собой, необходимо воспользоваться одноимённой командой ansible. После того, как она была введена, узлы будут взаимодействовать между собой и передавать друг другу определенные массивы зашифрованной информации. Как запустить много хостов, если использовать всего лишь одну команду? Использование одной команды для запуска нескольких узлов является очень важной вещью в создании качественно работающих систем. Если в одну систему были собраны определённые машины под управлением одной и той же операционной системы, то стоит ввести следующую команду, так как вся информация будет собрана на одну машину, с которой эта самая команда и была введена. ansible -i step-02/hosts -m shell -a 'uname -a' host0.example.org Если всё было правильно сделано, то все хосты должны дать следующий вывод касательно своего статуса: host1.example.org | success | rc=0 >> DISTRIB_RELEASE=12.04 host2.example.org | success | rc=0 >> DISTRIB_RELEASE=12.04 host0.example.org | success | rc=0 >> DISTRIB_RELEASE=12.04 Каждый элемент будет подсвечен, а также будет передан его статус. Для того, чтобы получить гораздо больше информации касательно того или иного элемента, нужно вести другую команду с модулем setup. Данный модуль собирают гораздо больше информации с каждого узла, точно также передавая ей на основную платформу. В качестве примера ответа будет следующая конструкция: "ansible_facts": { "ansible_all_ipv4_addresses": [ "192.168.0.60" ], "ansible_all_ipv6_addresses": [], "ansible_architecture": "x86_64", "ansible_bios_date": "01/01/2007", "ansible_bios_version": "Bochs" }, ---snip--- "ansible_virtualization_role": "guest", "ansible_virtualization_type": "kvm" }, "changed": false, "verbose_override": true Выводы можно сокращать для того, чтобы получать более простые конструкции, однако их суть останется прежней. Особенности архитектуры программы Ansible Архитектура Ansible включает в себя следующие разнообразные модули: Модуль Cloud позволяет управлять публичными или частными облаками от таких компаний, как Amazon, Azure , Docker, Openstack и другие; Command делает выполнение консольных команд максимально простым и отлаженным; Monitoring занимается мониторингом всех данных. Также, сюда можно включить еще множество различных модулей для правильной работы удаленных машин. И, как мы уже говорили, Ansible работает исключительно на дистрибутивах Linux и не содержит в себе протоколов для работы с Windows или Mac OS. Основными дистрибутивами для работы Ansible являются Debian и Ubuntu. Удачи вам в освоении мира DevOps!
ЗИМНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59