Следующее поколение программирования ближе, чем кажется

Какое оно — программирование следующего поколения? Помочь ответить на этот вопрос могут воспоминания о том, как эволюционировали персональные компьютеры. Для того чтобы разобраться с тем, что я имею в виду, давайте ненадолго заглянем в 1970-е.


Происхождение персональных компьютеров

1975 год был революционным для персональных компьютеров. Тогда вышел Altair 8800 — первый персональный компьютер, снискавший коммерческий успех. Вскоре появился Altair Basic — первый язык программирования для этой машины, разработанный Биллом Гейтсом и Полом Алленом.

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

image
Работа с Altair Basic на Altair 8800 с использованием телетайпа (я называю это «компьютером с призрачной машинисткой») (источник)

Компьютеры обзаводятся дисплеями

Компьютер Apple II вышел в 1977 году. Это — ещё одна важная веха в истории персональных компьютеров. Он был краеугольным камнем новой волны компьютеров, в которых для вывода данных использовался графический дисплей.

В тот же год вышла система электронных таблиц для Apple II — VisiCalc. Одной только этой программы, по словам Стива Джобса, было достаточно для того чтобы привести Apple II к достигнутому им успеху.

image
VisiCalc на Apple II (источник)

Появление графических интерфейсов

Первый графический пользовательский интерфейс (GUI, Graphical User Interface) был создан Xerox в 1973 году. Первым компьютером, использующим GUI, идею «рабочего стола» и мышь, был Xerox Alto. Этот компьютер оказал значительное влияние и на компьютер Apple Macintosh, и на ОС Windows, которые вышли, соответственно, в 1984 и в 1985 годах.

Но появление графических пользовательских интерфейсов не только проложило дорогу к созданию компьютеров, работа с которыми отличалась интуитивной понятностью, таких, пользоваться которыми мог кто угодно. Благодаря им мы можем наслаждаться вот этим потрясающим рекламным роликом Windows 1.01 1985 года.

Текстовое программирование

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

Достаточно странно то, что программирование компьютеров до сих пор осуществляется именно так. В этом мы недалеко ушли от первого Altair 8800 и от телетайпа. Мы вводим команды в консоли и передаём структурированные текстовые инструкции компиляторам или интерпретаторам.

Кто-то может заметить, что такой подход на удивление удобен и аккуратен. И, в каком-то смысле, так оно и есть. Но, напомню, сейчас — 2021 год, а мы всё ещё программируем, используя текстовые редакторы и терминалы. Может, к этому времени стоило бы найти какой-то более совершенный способ создания программ?

image
Что это? Программирование в 2021 или в 1981? Точно и не скажешь

Сильные стороны визуализации

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

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

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

Визуальные средства для создания запросов в Amplitude

То же самое касается и разработки пользовательских интерфейсов.

Визуальная разработка пользовательского интерфейса с помощью Builder.io

Проблемы визуализации

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

Проблемы визуального программирования кроются в его сильных сторонах. Они заключаются в том, что при таком подходе не существует единого, универсального способа для решения абсолютно всех задач. В результате мы продолжаем опираться на текстовое программирование. Дело в том, что простые, но гибкие программные конструкции позволяют решить все задачи, встающие перед разработчиком. Это, в некотором роде, ведёт к тому, что текстовое программирование является, так сказать, «подмастерьем всех ремёсел».

Если снова вернуться в прошлое, то большинство современных no-code-инструментов можно сравнить с аркадными автоматами. Такие автоматы создавались для решения одной узкоспециализированной задачи. В них было всё то, что в революционном Macintosh казалось прямо-таки каким-то волшебством. У них, например, был дисплей, работать с ними было очень легко, даже ребёнок мог без проблем пользоваться ими. А это очень похоже на нынешнее поколение no-code-инструментов.

image
Аркадный автомат

Но им не хватало самого главного — они не отличались универсальностью. Прошу, не поймите меня неправильно. У узкоспециализированных вычислительных устройств есть свои сильные стороны, но революцию в разработке программ такие устройства не произведут. Источником революционных изменений является универсальность. Речь идёт о создании какого-то инструмента, который является интуитивно понятным, мощным, но при этом не ограниченным в плане того, что можно создать с его помощью.

▍Как решить эти проблемы?

Новые поколения языков программирования базируются на предыдущих поколениях, они не являются чем-то полностью самостоятельным. Новые технологии, как правило, «стоят на плечах гигантов», а не вырастают на пустом месте.

Для того чтобы создать систему визуального программирования, возможности которой не ограничены решением какой-то одной задачи, нужно подключить средства визуализации к существующим программным системам. Другими словами — нам не нужно переизобретать узкоспециализированное колесо. Нужно использовать то, что уже создано.

Брет Виктор показал несколько примеров подобного в своём замечательном докладе о принципе, который надо для себя найти, и которым надо руководствоваться в своей работе.

image
Пример визуального редактирования кода

Где сейчас используются визуальные инструменты программирования?

Сейчас в сфере сближения технологий визуализации и текстового программирования имеются две основных категории инструментов. Первая — это инструменты для разработки кода, расширенные за счёт визуальных возможностей (например — IDE). Вторая — это no-code-инструменты (визуальные средства, позволяющие работать с существующими API и кодовыми базами).

▍Инструменты разработчика, возможности которых расширены за счёт визуализации

Индустрия, которая по-настоящему продвигает в массы идеи визуального программирования, это — разработка игр. Игры создаются силами огромных команд, их разработка стоит очень больших денег. Всё это не может зависеть от устаревших методов работы, которыми пользуются разработчики обычных приложений или веб-сайтов. Например, создатели игр не могут полагаться на нечто вроде отправки дизайн-макета разработчику с предложением вручную описать этот макет средствами CSS. Если по старинке, вручную, строка за строкой, создавать те сложнейшие виртуальные миры, которые существуют в современных играх, то такая работа может превратиться в настоящий кошмар.

image
Игра «Призрак Цусимы»

Кто хочет вручную, как веб-разработчики пишут CSS, описать вышеприведённую сцену из игры? Думаю, желающих это сделать не найдётся.

Необходимость вывести разработку игр за пределы того, что можно сделать, что называется, «руками», привела игровую индустрию к необходимости серьёзных вложений в визуальные инструменты, подключаемые непосредственно к коду. Хороший пример такого инструмента — Unreal Engine. Вы можете сами его опробовать.

Визуальные анимации и визуальное программирование в Unreal Engine 4

Ещё один хороший пример из этой сферы — это свежий SwiftUI в Xcode.

image
SwiftUI в Xcode

▍No-code-инструменты

В сферах традиционной разработки и веб-разработки наблюдается стремительное развитие no-code-инструментов. Платформы вроде Airtable, Zapier, Builder и Retool демонстрируют нам удобства средств визуальной разработки, подключённые к существующему коду, к существующим данным и API.

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

Разработка интерфейса в Builder.io, основанная на React-компонентах. Редактирование базы данных в Airtable

Куда мы идём?

Полагаю, связь между традиционными системами программирования и no-code-средами будет, со временем, становиться всё сильнее и сильнее. Мы находимся в самом начале эры визуального программирования, сегодняшний день можно сравнить с тем временем, когда появился Apple II. У нас имеется наш вариант Macintosh (простые и мощные средства визуальной разработки) и iPhone (то, чем с лёгкостью может воспользоваться кто угодно).

Вот некоторые из многих проектов, которые сейчас выглядят особенно интересными: Storybook, JSX Lite, Blockly и Build.

Визуальные средства для работы с UI-компонентами в Storybook. Создание компонентов с помощью визуальных инструментов в JSX Lite

Разработка программ путём компоновки блоков в Blockly. Визуальное JavaScript-программирование в Build

Как вы относитесь к no-code-инструментам?

ссылка на оригинал статьи https://habr.com/ru/company/ruvds/blog/537904/

Персональный экзокортекс, Зеттелькастен и программы для его реализации

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

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

Анатолий Левенчук, известный специалиста в сфере технологий обучения называет такое явление «экзокортекс». Под этим словом он подразумевает различные системы «внешней памяти». Письменность, одно из величайших изобретений в истории — это оно.

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

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

Количество программ, которые облегчают нашу жизнь растет каждый день, но существует ли какой-то софт, который помогает решить ту фундаментальную задачу эффективного обучения, которую я обрисовал в заголовке?

Для этого нам нужно сделать небольшое лирическое отступление про одного немецкого гения.

Его звали Никлас Луман и он был невероятно продуктивным мужчиной. За 40 лет исследовательской деятельности он опубликовал более 70 книг и 400 научных статей, охватывающих широкий спектр тем: социологию, биологию, математику, кибернетику и информатику. 

В среднем он писал более семи книг каждые четыре года своей карьеры, а ещё бесконечное множество статей. И это была не сляпанная на скорую руку чепуха. Книги стали классикой, которая сделала Лумана одним из самых важных социологов двадцатого века(пдф).

Продуктивность Никласа ещё более впечатляет, если подумать о том, насколько старые инструменты он использовал. Перед самой смертью в радио-интервью Вольфгангу Хагену Луман рассказал, что не пользуется компьютером, только ручкой, бумагой и печатной машинкой, на которой печатает неумело, двумя пальцами.

Когда его спрашивали о том, как он смог опубликовать так много, Никлас обычно отвечал: «Я не придумываю всё самостоятельно. Большая часть работы происходит в моём Зеттелькастене. Я обязан своей продуктивностью именно этому методу». (первоисточник на немецком).

Из-за таких утверждений система Лумана приобрела мифический статус и так высоко ценится, что уже сама стала предметом исследовательского проекта.

Суть метода довольно проста:

  • Создавать много коротких заметок по тем темам, которые для тебя важны.

  • Соединять их между собой с помощью тегов или любых других логических связей.

  • Регулярно погружаться в полученную «сеть» и актуализировать её.

Ключевой момент — пункт номер два. Именно он помогает превращать информацию в знания.

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

Нам же сейчас важно одно — Луман создал для себя тот самый экзокортекс, свой персональный «интернет», который помогал освобождать ресурсы своей головы, помнить все самое важное и генерировать новые идеи за счет необычных сочетаний информации.

Для нас есть один нюанс — он делал это в устаревшей среде, с помощью бумажных карточек и рукописных записей. В XXI веке у нас есть web-технологии и десктопные программы, которые позволяют делать всё тоже самое, но в разы эффективнее.

Один из больших трендов этого года — программа Roam Research, которая прекрасно подходит для реализации принципов Зеттелькастена и персональной базы знаний.

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

С Roam есть несколько проблем: он стоит довольно дорого (15 долларов в месяц), нет приложения на телефон.

Поэтому если вас зацепила идея создания своего экзокортекса или персональной базы знаний, то можете глянуть в сторону бесплатной (для личного пользования) и в некоторых аспектах более интересной альтернативы — Obsidian.

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

Еще одна альтернатива — программа TheBrain. У нее совершенно другая логика работы. Интерфейс заточен больше для визуального конспектирования, не для работы с текстом. У этого есть как плюсы, так и минусы.

В базовой версии она бесплатна. Pro стоит 200 долларов и для полноценного опыта не обязательна.

Из трех упомянутых мной программ Брейн — самый древний и навороченный экземпляр. Он существует еще со времен доткомов и добрался уже до 13 версии.

Как этим пользоваться в обычной жизни

Конспектировать книги и курсы, фиксировать интересные мысли и события. Например, вот так выглядит кусочек конспекта книги Рэя Брэдбери «Дзен в искусстве написания книг» В Obsidian:

Или, например, выстраивать сеть людей. Любой человек — это контекст, связующее звено и область знаний. Вообще люди — это самый «человечный» способ связывать мир.

Когда начинаешь про эти связи думать, удивляешься, как мир взаимосвязан. Вот как выглядит Сергей Фаге в Брейне Глеба Калинина:

Кейсов великое множество, но для этого надо рассматривать конкретные программы. В ближайшее время я напишу большую заметку про Obsidian. Следите за лентой, если интересно и актуально.

ссылка на оригинал статьи https://habr.com/ru/post/538836/

«Мир Hi-Fi»: обсуждаем налог на картинку, вендор-локи, атмосферу паранойи и музыкальные ИБ-пасхалки

Ранее мы обсудили умные ТВ и апскейлинг, стриминг, музыкальное железо и даже хамминг-эффект. Сегодня продолжим делиться избранными материалами нашего «Мира Hi-Fi».

Фотография: Max Bender. Источник: Unsplash.com
Фотография: Max Bender. Источник: Unsplash.com

Борьба за права или атмосфера паранойи — в мире музыки все еще не определились. Исполнители, студии и правообладатели судятся и во время эпидемиологического кризиса. Спорят обо всем, что можно называть музыкой: от степени схожести двухсекундных сэмплов до попыток защиты не столько конкретных композиций, сколько авторского стиля [!]. Говорим об этих «прецедентах» и о бизнесе, который умело пользуется ситуацией [это страховщики]. Плюс вспоминаем обратный пример — автора и исполнителя политической сатиры и научпоп-композиций, сделавшего свое творчество общественным достоянием.

Как IT-компания боролась за право продавать музыку. Делимся историей о борьбе двух Apple, нарушенном обещании не прикасаться к музыкальному рынку, исках к тематическим «фичам» в Mac OS и тяжбах за право право продавать и распространять музыку. Как вы понимаете, в конечном счете технологическая Apple выкупила товарные знаки оппонента и сдала их ему же «в аренду», открыв себе путь к прямому взаимодействию с аудиторией.

Стриминг стал основным источником дохода музыкантов, но они не в восторге. iTunes представили ровно двадцать, iTunes Store — почти восемнадцать, а Apple Music — пять с лишним лет назад. Однако «яблоку» так и не удалось стать лидером рынка стриминга. Более того, в кризис, когда все придерживаются домашнего образа жизни и работы, многие авторы и исполнители вынуждены убирать свое творчество с этой платформы с помощью решений суда. Дело в том, что они пытаются вернуть контроль над тем, как их композиции «попадают в уши» слушателей, и увеличить долю денежных средств, поступающих от продажи треков и альбомов.

Фотография: Claudia Ramírez. Источник: Unsplash.com
Фотография: Claudia Ramírez. Источник: Unsplash.com

Почему индустрия подкастов все больше походит на стриминг сериалов и фильмов. Дело в том, что паблишеры формируют полузакрытые экосистемы с эксклюзивными аудиошоу. Это как «стриминговые войны», только в миниатюре. Они разбирают и отдельные программы, и их продюсеров — покупают студии подкастов [одна из сделок обошлась в 230 млн долларов]. Похоже, что открытый по своей природе формат постепенно уходит со сцены, а его место занимает коммерческий контент, выполненный по заказу крупных стриминговых компаний.

Налог на картинку: где взносы за ТВ обязательны, и кто их «растягивает» еще дальше. Обсуждаем телевизионные сборы по-шведски, существенная часть которых, что интересно, уходила «управляющей компании», занимавшейся менеджментом таких взносов. Еще мы вспоминаем инициативы властей Венгрии и других стран Европы, плюс — говорим о том, как налог на ТВ превращается в телеком-, а потом и в интернет-налог в ряде развитых государств.

«Все, что вы прочитаете, будет использовано против вас»: рэп-музыка в зале суда. Имидж гангстеров — это одно, а ответственность за тексты треков — совсем другое. Причем последнее часто становится отягчающим фактором для исполнителей, угодивших под суд. Объясняем, как так получается, говорим о гражданском неповиновении в рэп-лирике и обсуждаем, стоит ли считать ее жестокой, если в условном кантри есть сюжеты и пострашнее.

Фотография: Sebastiaan Stam. Источник: Unsplash.com
Фотография: Sebastiaan Stam. Источник: Unsplash.com

«Музыка большого брата»: как surveillance-контроль нашел отражение в рэп-культуре. Рассказываем об отношении рэп-исполнителей к слежке и теориям заговора. Как выясняется, представители этого жанра не зря постоянно говорили о том, что за ними присматривают. Долгие годы многие из них действительно были «под колпаком» спецслужб и органов правопорядка. Об этом сняли пару документалок на основе официальных отчетов полиции. Остается только догадываться, что стало причиной такого внимания: тексты треков, имидж, круг знакомств, образ жизни, «серые» бизнес-проекты или что-то еще. Рассматриваем эти моменты и останавливаемся на легендарных треках рэп-исполнителей о surveillance-контроле.

«Последи, чтобы мысль не убежала»: больше surveillance-пасхалок в поп-музыке. Отсылками к этой теме богата не только «рэп-игра» — в поп-культуре есть множество менее прямолинейных примеров. Взять хотя бы «Every Breath You Take» группы The Police или песню Тома Пакстона «Mr. Blue». Обсуждаем эти и другие примеры треков, которые предположительно записали в попытке «разбудить» разум слушателей — точных ответов на этот вопрос нет, что придает загадочности композициям и привлекает к ним внимание.


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


ссылка на оригинал статьи https://habr.com/ru/company/audiomania/blog/537986/

Изучаем ELK. Часть I — Установка Elasticsearch

Вступительное слово

Эта статья является первой в серии статей по стеку Elasticsearch, Logstash, Kibana (ELK). Цикл статей ориентирован на тех, кто только начинает знакомится со стеком ELK, и содержит минимально необходимый набор знаний, чтобы успешно запустить свой первый кластер ELK.

В рамках данного цикла будут рассмотрены такие темы, как:

  • установка и настройка компонентов ELK,

  • безопасность кластера, репликация данных и шардирование,

  • конфигурирование Logstash и Beat для сборки и отправки данных в Elasticsearch,

  • визуализация в Kibana

  • запуск стека в Docker.

В данной статье будет рассмотрена процедура установки Elasticsearch и конфигурирование кластера.

План действий:

  1. Скачиваем и устанавливаем Elasticsearch.

  2. Настраиваем кластер.

  3. Запускаем и проверяем работоспособность кластера.

  4. Делаем важные настройки.

Скачиваем и устанавливаем Elasticsearch

Существует множество вариантов установки Elasticsearch, под любые нужды и желания. С перечнем можно ознакомится на официальном сайте. Не смотря на то, что на своем стенде я использовал установку из Deb пакетов, считаю правильным так же описать установку из RPM пакетов и архива tar.gz для Linux системы.

Установка из Deb пакетов

  • Импортируем Elasticsearch PGP ключ:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
  • Устанавливаем apt-transport-https пакет:

sudo apt-get install apt-transport-https
  • Перед установкой пакета необходимо добавить репозиторий Elastic:

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
  • Устанавливаем Elasticsearch из пакета:

sudo apt-get update && sudo apt-get install elasticsearch
  • Настраиваем Elasticsearch для автоматического запуска при запуске системы:

sudo /bin/systemctl daemon-reload && sudo /bin/systemctl enable elasticsearch.service

Установка из RPM пакетов

  • Импортируем Elasticsearch PGP ключ:

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
  • В директории /etc/yum.repos.d/ создаем файл репозитория Elasticsearch elasticsearch.repo:

[elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md
  • Устанавливаем Elasticsearch c помощью пакетного менеджера в зависимости от операционной системы, yum или dnf для CentOS, Red Hat, Fedora или zypper для OpenSUSE:

# Yum sudo yum install --enablerepo=elasticsearch elasticsearch   # Dnf sudo dnf install --enablerepo=elasticsearch elasticsearch   # Zypper sudo zypper modifyrepo --enable elasticsearch && \   sudo zypper install elasticsearch; \   sudo zypper modifyrepo --disable elasticsearch

Установка из архива tar.gz

  • Скачиваем архив с Elasticsearch

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.1-linux-x86_64.tar.gz
  • Извлекаем данные из архива и переходим в каталог с Elasticsearch:

tar -xzf elasticsearch-7.10.1-linux-x86_64.tar.gz cd elasticsearch-7.10.1/

Текущий каталог считается, как $ES_HOME.

Конфигурационные файлы лежать в каталоге $ES_HOME/config/.

На этом шаге установка из архива считается завершенной.

Для запуска Elasticsearch можно создать отдельного пользователя, предоставив все необходимые права к каталогу с Elasticsearch и указывая данного пользователя при настройке файловых дескрипторов.

Настраиваем кластер

На текущем этапе у нас есть три хоста с установленным Elasticsearch. Следующим и самым важным этапом является настройка каждого узла для объединения их в единый кластер.

Для настройки Elasticsearch используется YAML файл, который лежит по следующему пути /etc/elasticsearch/elasticsearch.yml при установке из Deb или RPM пакетов или $ES_HOME/config/elasticsearch.yml — при установке из архива.

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

  • Указываем имя узла и определяем роли. Укажем для узла роли master и data:

# ------------------------------------ Node ------------------------------------ node.name: es-node01	        # Имя ноды node.roles: [ master, data ]  # Роли узла

master Данная роль дает возможность узлу быть избранным, как управляющий узел кластера

data узел с данной ролью содержит данные и выполняет операции с этими данными

Со списком всех ролей узла можно ознакомится тут.

  • Настраиваем адрес и порт, на которых узел будет принимать запросы:

# ---------------------------------- Network ----------------------------------- network.host: 10.0.3.11	# Адрес узла http.port: 9200					# Порт

Если указать 0.0.0.0 или просто 0, то Elasticsearch будет принимать запросы на всех интерфейсах.

  • Определяем имя кластера и начальный список узлов в голосовании по выбору master узла:

# ---------------------------------- Cluster ----------------------------------- cluster.name: es_cluster                                             # Имя кластера cluster.initial_master_nodes: ["es-node01","es-node02","es-node03"]  # Начальный набор мастер узлов

cluster.initial_master_nodes

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

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

  • Указываем список master узлов кластера:

# --------------------------------- Discovery ---------------------------------- discovery.seed_hosts: ["10.0.3.11", "10.0.3.12", "10.0.3.13"] # Узлы кластера

До версии 7.0 в конфигурации Elasticsearch также использовался параметр discovery.zen.minimum_master_nodes, который можно увидеть и сейчас в некоторых конфигурациях. Этот параметр был необходим, чтобы защитится от Split Brain, и определял минимальное количество master узлов для голосования. Начиная с версии 7.0 данный параметр игнорируется, так как кластер автоматически защищает себя. Более подробно о том, как это работает, можно прочитать в данной статье.

  • Определяем, где будем хранить данные и логи

# ----------------------------------- Paths ------------------------------------ path.data: /var/lib/elasticsearch # Директория с данными path.logs: /var/log/elasticsearch # Директория с логами

На выходе мы должны получить следующий конфигурационный файл:

# ------------------------------------ Node ------------------------------------ node.name: es-node01	        # Имя ноды node.roles: [ master, data ]  # Роли узла # # ---------------------------------- Network ----------------------------------- network.host: 10.0.3.11	# Адрес узла http.port: 9200					# Порт # # ---------------------------------- Cluster ----------------------------------- cluster.name: es_cluster                                             # Имя кластера cluster.initial_master_nodes: ["es-node01","es-node02","es-node03"]  # Начальный набор мастер узлов # # --------------------------------- Discovery ---------------------------------- discovery.seed_hosts: ["10.0.3.11", "10.0.3.12", "10.0.3.13"] # Узлы кластера # # ----------------------------------- Paths ------------------------------------ path.data: /var/lib/elasticsearch # Директория с данными path.logs: /var/log/elasticsearch # Директория с логами
  • При необходимости настраиваем межсетевой экран на хосте:

    • 9200 — прием HTTP запросов (согласно конфигурации выше http.port). По умолчанию Elasticsearch использует диапазон 9200-9300 и выбирает первый свободный.

    • 9300-9400 — порты (по умолчанию) для коммуникации между узлами кластера. Elasticsearch будет использовать первый свободный из данного диапазона (для настройки данного порта в Elasticsearch можно использовать параметр transport.port).

Запускаем и проверяем

Запускаем на каждом узле службу elasticsearch:

sudo systemctl start elasticsearch.service

Для установки из архива используем:

$ES_HOME/bin/elasticsearch

или если мы хотим запустить  Elasticsearch как демон, то:

$ES_HOME/bin/elasticsearch -d -p pid

Для выключения службы используйте Ctrl-C для первого варианта запуска (из архива) или pkill -F pid для второго варианта.

После запуска первого узла в логах можно увидеть, что узел ожидает подключение других узлов, чтобы определить, кто возьмет роль master:

[es-node01] master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster, and this node must discover master-eligible nodes [es-node01, es-node02, es-node03] to bootstrap a cluster: have discovered [{es-node01}{olhmN6eCSuGxF4yH0Q-cgA}{CHniuFCYS-u67R5mfysg8w}{10.0.3.11}{10.0.3.11:9300}{dm}{xpack.installed=true, transform.node=false}]; discovery will continue using [10.0.3.12:9300, 10.0.3.13:9300] from hosts providers and [{es-node01}{olhmN6eCSuGxF4yH0Q-cgA}{CHniuFCYS-u67R5mfysg8w}{10.0.3.11}{10.0.3.11:9300}{dm}{xpack.installed=true, transform.node=false}] from last-known cluster state; node term 0, last-accepted version 0 in term 0

После включения остальных узлов в логах появится запись о том, что кластер собрался:

[es-node01] master node changed {previous [], current [{es-node02}{VIGgr6_aS-C39yrnmoZQKw}{pye7sBQUTz6EFh7Pqn7CJA}{10.0.3.12}{10.0.3.12:9300}{dm}{xpack.installed=true, transform.node=false}]}, added {{es-node02}{VIGgr6_aS-C39yrnmoZQKw}{pye7sBQUTz6EFh7Pqn7CJA}{10.0.3.12}{10.0.3.12:9300}{dm}{xpack.installed=true, transform.node=false}}, term: 1, version: 1, reason: ApplyCommitRequest{term=1, version=1, sourceNode={es-node02}{VIGgr6_aS-C39yrnmoZQKw}{pye7sBQUTz6EFh7Pqn7CJA}{10.0.3.12}{10.0.3.12:9300}{dm}{xpack.installed=true, transform.node=false}}

Проверяем состояние кластера, обратившись к любому его узлу:

curl -X GET "http://10.0.3.11:9200/_cluster/health?pretty"  {   "cluster_name" : "es_cluster",   "status" : "green",   "timed_out" : false,   "number_of_nodes" : 3,   "number_of_data_nodes" : 3,   "active_primary_shards" : 0,   "active_shards" : 0,   "relocating_shards" : 0,   "initializing_shards" : 0,   "unassigned_shards" : 0,   "delayed_unassigned_shards" : 0,   "number_of_pending_tasks" : 0,   "number_of_in_flight_fetch" : 0,   "task_max_waiting_in_queue_millis" : 0,   "active_shards_percent_as_number" : 100.0 } 

Узнаем, какой узел взял на себя роль master. В нашем примере это узел es-node02:

curl -X GET "http://10.0.3.11:9200/_cat/master?pretty"  VIGgr6_aS-C39yrnmoZQKw 10.0.3.12 10.0.3.12 es-node02

Делаем важные настройки

Для нормальной работы кластера необходимо произвести еще некоторые настройки.

Heap size

Так как Elasticsearch написан на Java, то для работы необходимо настроить размер «кучи» (heap size). В каталоге установки Elasticsearch имеется файл jvm.options, в котором уже указаны размеры, по умолчанию — это 1 Гб. Однако, для настройки рекомендуется указать новые параметры в файле каталога jvm.options.d, который находится там же.

-Xms16g -Xmx16g

Пример выше использует минимальный Xms и максимальный Xmx размер heap size, равный 16 Гб. Для настройки данных параметров следует использовать следующие рекомендации:

  • установите значения Xmx и Xms не более 50% от имеющейся физической памяти узла. Оставшуюся память Elasticsearch будет использовать для других целей. Чем больше heap size, тем меньше памяти используется под системные кеш;

  • устанавите значение не более того значения, которое использует JVM для сжатия указателей, он же compressed object pointers. Данное значение составляет около 32 Гб. Стоит также отметить, что рекомендуется ограничивать heap size еще одним параметром JVM, а именно zero-based compressed oops (обычно размер около 26 Гб). Узнать подробнее об этих параметрах можно тут.

Отключаем подкачку

Подкачка негативно сказывается на производительности и стабильности работы Elasticsearch, ведь система может выгрузить страницы JVM на диск. Есть несколько вариантов работы с подкачкой:

  1. Полное отключение подкачки. Перезапуск Elasticseach при этом не требуется.

    sudo swapoff -a
  2. Ограничение подкачки через значение vm.swappiness=1 для sysctl.

  3. Использование mlockall для блокировки адресного пространства в оперативной памяти.

Чтобы включить mlockall в конфигурации Elasticseach elasticsearch.yml указываем для параметра bootstrap.memory_lock значение true.

bootstrap.memory_lock: true

Перезапускаем Elasticsearch и проверяем настройки через запрос к любому узлу:

curl -X GET "http://10.0.3.12:9200/_nodes?filter_path=**.mlockall&pretty"  {   "nodes" : {     "olhmN6eCSuGxF4yH0Q-cgA" : {       "process" : {         "mlockall" : true       }     },     "VIGgr6_aS-C39yrnmoZQKw" : {       "process" : {         "mlockall" : true       }     },     "hyfhcEtyQMK3kKmvYQdtZg" : {       "process" : {         "mlockall" : true       }     }   } }

Если перезапуск Elasticsearch завершился ошибкой вида:

[1] bootstrap checks failed [1]: memory locking requested for elasticsearch process but memory is not locked

или проверка показывает, что данная настройка не применилась, необходимо сделать следующее в зависимости от способа установки:

  • Установка из архива

Установите ulimit -l unlimited перед запуском Elasticsearch или значению memlock устанвоите unlimited в файле /etc/security/limits.conf.

  • Установка из пакета RPM или Deb

Установите значение параметра MAX_LOCKED_MEMORY как unlimited в /etc/sysconfig/elasticsearch для rpm или /etc/default/elasticsearch для dep.

Если вы используете systemd для запуска Elasticsearch, то лимиты должны быть указаны через настройку параметра LimitMEMLOCK. Для этого выполните команду:

sudo systemctl edit elasticsearch

и укажите следующее значение:

[Service] LimitMEMLOCK=infinity

Настройка файловых дескрипторов

Elasticsearch работает с большим количеством файловых дескрипторов, и их нехватка может катастрофически сказаться на его работе. Согласно официальной документации необходимо указать значение файловых дескрипторов не ниже 65 536.

  • Если Elasticsearch установлен из RPM или Deb пакетов, то настройка не требуется.

  • Для установки из архива необходимо в файле /etc/security/limits.conf установить параметр nofile для пользователя, который осуществляет запуск Elasticsearch. В примере ниже таким пользователем является elasticsearch:

elasticsearch - nofile 65536

Проверить установленные значения можно следующим образом:

curl -X GET "http://10.0.3.11:9200/_nodes/stats/process?filter_path=**.max_file_descriptors&pretty"  {   "nodes" : {     "olhmN6eCSuGxF4yH0Q-cgA" : {       "process" : {         "max_file_descriptors" : 65535       }     },     "VIGgr6_aS-C39yrnmoZQKw" : {       "process" : {         "max_file_descriptors" : 65535       }     },     "hyfhcEtyQMK3kKmvYQdtZg" : {       "process" : {         "max_file_descriptors" : 65535       }     }   } }

Настройка виртуальной памяти

Elasticsearch по умолчанию использует каталог mmapfs для хранения индексов, и ограничение операционной системы по умолчанию для счетчиков mmap может привести к нехватки памяти. Для настройки запустите из-под root следующую команду:

sysctl -w vm.max_map_count=262144

Чтобы настройка сохранилась после перезапуска системы, необходимо указать параметр vm.max_map_count в файле /etc/sysctl.conf.

Если Elasticsearch установлен из RPM или Deb пакетов, то настройка не требуется.

Настройка потоков

Необходимо убедиться, что количество потоков, которые Elasticsearch может создавать, было не менее 4096.

Это можно сделать, установив ulimit -u 4096 или установив значение nproc равным 4096 в файле /etc/security/limits.conf.

Если Elasticsearch работает под управлением systemd, то настройка не требуется.

DNS кеширование

По умолчанию Elasticsearch кеширует результат DNS на 60 и 10 секунд для положительных и отрицательных запросов. В случае необходимости можно настроить эти параметры, а именно es.networkaddress.cache.ttl и es.networkaddress.cache.negative.ttl, как JVM опции в каталоге /etc/elasticsearch/jvm.options.d/ для RPM и Deb или в $ES_HOME/config/jvm.options.d/ для установки из архива.

Временный каталог для JNA

Elasticsearch использует Java Native Access (JNA) для запуска кода, необходимого в его работе, и извлекает этот код в свой временный каталог директории /tmp. Следовательно, если каталог смонтирован с опцией noexec, то данный код невозможно будет выполнить.

В данном случае необходимо или перемонтировать каталог /tmp без опции noexec, или изменить настройку JVM, указав другой путь через опцию -Djna.tmpdir=<new_path>.

На этом шаге дополнительные настройки Elasticsearch окончены.

Заключение

Дойдя до этого места, вы должны иметь работоспособный кластер Elasticsearch.

В следующей статье будут описаны процедуры установки и настройки Kibana и Logstash. А в качестве проверки работоспособности кластера соберём данные из файла и посмотрим на них с помощью Kibana.

Полезные ссылки:

ссылка на оригинал статьи https://habr.com/ru/post/538840/

UbuntuDDE: замечательный гибрид

Привет, %username%. Вот уже на протяжении 15 лет провожу над собой забавный эксперимент. Заключается он в том, чтобы пробовать разные дистрибутивы Linux и делать однозначный вывод о возможности использования в качестве основной десктопной ОС. Времена, когда Linux был не слишком дружелюбен к обычному пользователю, давно прошли, и сейчас установить его не представляет труда.

Одним из первых дистрибутивов, с которым я познакомился и с которого начался мой путь в Linux, была ОС Ubuntu 6.06 LTS. Скачивание образов было непомерно дорогой роскошью, так что я отправил запрос в Canonical, оставил домашний адрес и спустя месяц получил вожделенный набор дисков (Ubuntu / Kubuntu / Edubuntu). Не могу сказать, что был в восторге от ОС, но тем не менее это был интересный опыт.

С тех пор я перебрал множество разных дистрибутивов, но в итоге самым удобным для меня стал OpenSUSE Tumbleweed. Вместе с KDE он оказался самым стабильным и универсальным. Разумеется, я не остановился на этом и пару лет назад нашел еще весьма интересный китайский дистрибутив под названием deepin (он же Hiwix, он же Hiweed Linux, он же Linux Deepin).

Рабочий стол Deepin 20.1 Community Edition
Вначале это была связка из Morphix и IceWM, затем разработчики стали использовать в качестве базовой системы Debian с Xfce. Результат им, видимо, понравился, но в итоге они ушли на связку из Ubuntu и LXDE, а затем Ubuntu и Gnome (вначале версии 2, затем 3). И оставался бы deepin рядовым клоном Ubuntu, если бы с 2013 года не началась разработка собственного окружения рабочего стола дистрибутива, которое получило название DDE — Deepin Desktop Environment.

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

  • крайне тормозные репозитории, из-за чего процедура обновления затягивалась на несколько часов;
  • директории с именами на китайском языке, вылезающими в разных местах;
  • скандал с наличием в дистрибутиве шпионского ПО;

Мне пришлось вернуться к OpenSUSE. DDE есть для дистрибутивов Arch и Manjaro, но устанавливать их не стал и оставил идею полноценного использования новой среды окружения. Лишь спустя два года мне на глаза попалась новость о выходе UbuntuDDE на базе версии Ubuntu 20.04. В дальнейшем UbuntuDDE вошел в список дистрибутивов, поддерживаемых сообществом.

И вот, в очередной раз сменив дистрибутив, мне захотелось рассказать о том, с какими сложностями и удобствами довелось столкнуться. Для начала обратим внимание на визуальную составляющую. DDE имеет два режима отображения. В русскоязычной версии они носят названия «Эффективный» и «Современный».

«Эффективный» режим DDE схож с Windows 10
Насколько можно судить по первому взгляду на эффективный режим DDE, разработчики старались сделать максимально похожий на Windows 10 стиль. Главное меню тоже частично копирует расположение и логику элементов из операционной системы компании Microsoft.

Главное меню в «Эффективном» режиме
Пользователей MacOS тоже не забыли. Чтобы сделать работу в DDE привычнее для людей, использующих Apple, достаточно переключиться в «Современный» режим. Тут же появляется док по центру, куда можно помещать нужные приложения.

Док DDE весьма сильно напоминает док MacOS («Современный» режим)
Меню тоже можно сделать похожим на лаунчпад из MacOS:

Главное меню DDE имеет схожесть с лаунчпадом MacOS
Все железо определилось и заработало корректно, за исключением трекбола Logitech Marble Trackman. Из-за отсутствия у последнего отдельного колеса прокрутки приходится использовать программное решение, детально расписанное в небольшой статье «Настраиваем трекбол Trackman Marble» пользователя @norguhtar (за что ему отдельное спасибо!). Но, в отличие от OpenSUSE, для UbuntuDDE этот трюк почему-то не сработал, и пришлось использовать альтернативный вариант с двумя командами:

xinput --set-prop "Logitech USB Trackball" "libinput Scroll Method Enabled" 0 0 1 xinput --set-prop "Logitech USB Trackball" "libinput Button Scrolling Button" 8

Также никаких проблем не возникло при установке и работе с гипервизором Oracle VM VirtualBox. Единственный нюанс: расширение Oracle VM VirtualBox Extension pack пришлось ставить из интерфейса программы (файловый менеджер не смог корректно передать команду на установку). Отмечен также забавный глюк, заключающийся в том, что в главном меню VirtualBox автоматически был помещен в раздел «Игры», а не в раздел «Другое».

В качестве офисного пакета используется привычный LibreOffice версии 7, также присутствуют два специфичных для Deepin приложения: «Просмотрщик документов Deepin» и «Текстовый редактор Deepin». Еще из полезного можно отметить утилиту Zathura (просмотрщик PDF, DjVu, PostScript). Для работы с графикой установлен GIMP, приложение для сканирования документов и просмотрщик изображений. Еще есть очень удобная утилита записи с экрана, позволяющая не только сделать скриншот выделенной области, но и снять видео этой области сразу в GIF.

Все часто используемые мной программы заработали корректно, например ksnip для снятия скриншотов экрана или Telegram Desktop. Некоторые приложения, которые предназначены только для Windows корректно работают через Wine. В UbuntuDDE 20.10 используется стабильная версия wine-5.0. Ее возможностей вполне достаточно для запуска нужных мне приложений, таких как:

  • WinBox (для конфигурирования оборудования MikroTik),
  • PIPP (препроцессор для обработки астрофотографий),
  • AutoStakkert! (утилита обработки астрофотографий).

Вместо заключения хочется отметить, что UbuntuDDE мне понравился. Разработчики явно постарались создать идеальный компромиссный гибрид, взяв лучшее из двух популярных дистрибутивов. И надо признать, им удалось. Это хороший вариант для тех, кто надумал переезжать на Linux, но не готов использовать привычные оболочки рабочего стола, такие как GNOME, KDE, Xfce, LXDE. Узнать больше об UbuntuDDE можно на официальном сайте проекта. Там же можно скачать актуальную версию ОС в виде ISO-образа.

ссылка на оригинал статьи https://habr.com/ru/company/selectel/blog/538842/