• API, ради которых наконец-то стоит обновиться с Java 8. Часть 1

      На сегодняшний день Java 8 является самой популярной версией Java и ещё довольно долго будет ей оставаться. Однако с тех пор уже выпущено пять новых версий Java (9, 10, 11, 12, 13), и совсем скоро выйдет ещё одна, Java 14. В этих новых версиях появилось гигантское количество новых возможностей. Например, если считать в JEP'ах, то в сумме их было реализовано 141:



      Однако в этом цикле статей не будет никакого сухого перечисления JEP'ов. Вместо этого я хочу просто рассказать об интересных API, которые появились в новых версиях. Каждая статья будет содержать по 10 API. В выборе и порядке этих API не будет какой-то определённой логики и закономерности. Это будет просто 10 случайных API, не ТОП 10 и без сортировки от наиболее важного API к наименее важному. Давайте начнём.

      Читать дальше →
    • API, ради которых наконец-то стоит обновиться с Java 8. Часть 2

        Продолжаем рассказ про API, которые появились в новых версиях Java.



        1. Files.mismatch()


        Появился в: Java 12


        На практике довольно часто возникает необходимость проверить, являются ли два файла в точности одинаковыми или нет. С помощью метода Files.mismatch(), появившегося в Java 12, это наконец-то можно сделать. Этот метод возвращает позицию первого несовпадающего байта в двух файлах или -1, если файлы идентичны.


        Это может быть полезно, например, когда синхронизируешь содержимое двух директорий. Чтобы не перезаписывать файл при копировании тем же самым содержимым и лишний раз не нагружать диск, можно сначала проверить, идентичны файлы или нет:


        public static void syncDirs(Path srcDir, Path dstDir)
                throws IOException {
            // Для простоты демонстрации считаем, что поддиректорий нет
            try (Stream<Path> stream = Files.list(srcDir)) {
                for (Path src : stream.collect(toList())) {
                    Path dst = dstDir.resolve(src.getFileName());
                    if (!Files.exists(dst)) {
                        System.out.println("Copying file " + dst);
                        Files.copy(src, dst);
                    } else if (Files.mismatch(src, dst) >= 0) {
                        System.out.println("Overwriting file " + dst);
                        Files.copy(src, dst, StandardCopyOption.REPLACE_EXISTING);
                    }
                }
            }
        }
        Читать дальше →
      • Одинадцать скрытых жемчужин Java 11

        • Перевод
        • Tutorial

        Java 11 не представил никаких новаторских функций, но содержит несколько жемчужин, о которых вы могли ещё не слышать. Уже смотрели на новинки в String, Optional, Collection и других рабочих лошадках? Если нет, то вы пришли по адресу: сегодня мы рассмотрим 11 скрытых жемчужин из Java 11!

        Читать дальше →
        • +18
        • 8,1k
        • 2
      • 90 новых фич (и API) в JDK 11

        • Перевод

        Привет, Хабр! Представляю вашему вниманию перевод статьи «90 New Features (and APIs) in JDK 11» от автора Simon Ritter.



        Новый шестимесячный релизный цикл JDK для многих означает, что некоторые ещё даже не выяснили, какие новые функции в JDK 10, а на пороге уже JDK 11. В одном из ранних блогов (англ.), были перечислены все 109 новых фич и API, которые удалось найти в JDK 10. Поэтому для JDK 11 было решено поступить аналогично. Тем не менее, был выбран другой формат. Этот пост будет поделён на два раздела: новые фичи, которые доступны разработчикам (публичный API) и всё остальное. Таким образом, если вас интересует только то, что непосредственно повлияет на вашу разработку, вы можете пропустить вторую часть.


        Общее число изменений, которое удалось подсчитать, получилось равным 90 (это JEP плюс новые классы и методы, исключая отдельные методы для HTTP-клиента и Flight Recorder) (прим. переводчика: Java Flight Recorder (JFR) был одним из коммерческих дополнений от Оракла встроенным в JDK, но начиная с Java 11, благодаря JEP 328, был передан в опенсорс). Хоть и в JDK 11 удалось найти на одиннадцать изменений меньше, чем в JDK 10, считаю, что справедливо сказать, что в JDK 11 добавлено больше функциональных возможностей, однозначно на уровне JVM.

        Читать дальше →
        • +21
        • 41,6k
        • 5
      • Руководство по версиям и возможностям Java

        • Перевод

        Здесь есть все, что вам нужно знать о различных версиях и функциях Java.



        Java 8, Java 11, Java 13 — какая разница?


        Вы можете использовать это руководство, чтобы найти и установить последнюю версию Java, понять различия между дистрибутивами Java (AdoptOpenJdk, OpenJDK, OracleJDK и т.д.), А также получить обзор возможностей языка Java, включая версии Java 8-13.

        Читать дальше →
      • Десять вещей, которые можно делать с GraalVM

        • Перевод


        От переводчика: GraalVM — новая, интересная технология, но на Хабре по ней не так много статей, которые бы могли показать примеры возможностей Graal. Статья ниже — это не просто перечисление того, что GraalVM умеет, но ещё и небольшой мастер-класс, аналогичный тому, который Chris Seaton и Олег Шелаев проводили на Oracle CodeOne 2018. Вслед за автором, призываю — пробуйте делать примеры из статьи, это действительно интересно.


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


        1. Быстрое выполнение Java
        2. Уменьшение времени старта и потребления памяти для Java
        3. Комбинирование JavaScript, Java, Ruby и R
        4. Исполнение программ, написанных на платформо-зависимых языках
        5. Общие инструменты для всех языков программирования
        6. Дополнение JVM приложений
        7. Дополнение платформо-зависимых приложений
        8. Код Java как платформо-зависимая библиотека
        9. Поддержка нескольких языков программирования в базе данных
        10. Создание языков программирования для GraalVM
        Читать дальше →
      • Измеряем скорость кода Java правильно (используя JMH)

        Привет, Хабр!


        Это вводная статья про то, как следует делать тесты производительности на JVM языках (java, kotlin, scala и тд.). Она полезна для случая, когда требуется в цифрах показать изменение производительности от использования определенного алгоритма.


        Все примеры приведены на языке kotlin и для системы сборки gradle. Исходный код проекта доступен на github.


        КДВП

        Читать дальше →
        • +10
        • 20,2k
        • 8
      • Первые шаги по Rust

          image


          Всем привет. Недавно познакомился с новым для себя языком программирования Rust. Я заметил, что он отличается от других, с которыми мне до этого доводилось сталкиваться. Поэтому решил покопать глубже. Результатами и своими впечатлениями хочу поделиться:


          • Начну с главной, на мой взгляд, особенности Rust
          • Опишу интересные детали синтаксиса
          • Объясню, почему Rust, скорее всего, не захватит мир

          Сразу поясню, что я около десяти лет пишу на Java, так что рассуждать буду со своей колокольни.

          Читать дальше →
        • Rust vs. C++ на алгоритмических задачах

          Не так давно я стал присматриваться к языку программирования Rust. Прочитав Rustbook, изучив код некоторых популярных проектов, я решил своими руками попробовать этот язык программирования и своими глазами оценить его преимущества и недостатки, его производительность и эко-систему.

          Язык Rust позиционирует себя, как язык системного программирования, поэтому основным его vis-à-vis следует называть C/C++. Сравнивать же молодой и мультипарадигмальный Rust, который поддерживает множество современных конструкций программирования (таких, как итераторы, RAII и др.) с «голым» C я считаю не правильно. Поэтому в данной статье речь пойдет об сравнении с C++.

          Чтобы сравнить код и производительность Rust и C++, я взял ряд алгоритмических задач, которые нашел в онлайн курсах по программированию и алгоритмам.

          Статья построена следующим образом: в первой части я опишу основные плюсы и минусы, на которые я обратил внимание, работая с Rust. Во второй части я приведу краткое описание алгоритмических задач, которые были решены в Rust и C++, прокомментирую основные моменты реализации программ. В третьей части будет приведена таблица замера производительности программ на Rust и C++.
          Читать дальше →
        • Must-have плагины и несколько полезностей для С\С++ разработки в VS Code



            Удивительно, но до сих пор на Хабре нет хорошей подборки плагинов для Visual Studio Code для тех, кто пишет на С/С++. Microsoft в своем блоге опубликовали только статью, совсем базового уровня с инструкцией по настройке. Но большинство читателей Хабра, тем более из разработчиков, обойдется без такой подробной инструкции. Есть только несколько подборок для веб-разработчиков, но не для С++.

            Наверное это связано с тем, что большинство С++ разработчиков использует тяжеловесные IDE, в первую очередь конечно же Visual Studio.

            Но в Linux и MacOS с полноценными IDE всё не так просто, да и тяжелая среда разработки не всегда нужна или просто не хочется ее использовать.

            Я же хочу обратить ваше внимание на полезные плагины, которые облегчают жизнь и работу, а также рассказать про полезные настройки и особенности VS Code, которые вы могли просто упустить.
            Читать дальше →
          • Запуск кластера RabbitMQ в Kubernetes

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

            В наших решениях мы используем интеграцию и с помощью Kafka, и с помощью gRPC, и с помощью RabbitMQ.

            В этой статье мы поделимся нашим опытом кластеризации RabbitMQ, ноды которого размещены в Kubernetes.

            image

            До RabbitMQ версии 3.7 его кластеризация в K8S была не очень тривиальной задачей, со множеством хаков и не очень красивых решений. В версии 3.6 использовался autocluster плагин из RabbitMQ Community. А в 3.7 появился Kubernetes Peer Discovery Backend. Он встроен плагином в базовую поставку RabbitMQ и не требует отдельной сборки и установки.

            Мы опишем итоговую конфигурацию целиком, попутно комментируя происходящее.
            Читать дальше →
          • Сервис оповещения миллиона пользователей с помощью RabbitMQ

              Почти в самом начале создания платформы (некоего фундамента, фреймворка на котором базируются все прикладные решения) нашего облачного веб-приложения СБИС мы поняли, что без инструмента, позволяющего сообщить пользователю о каком-либо событии с сервера, жить будет довольно-таки трудно. Все мы хотим мгновенно видеть новое сообщение от коллеги (которому лень пройти 10 метров), поднимающую корпоративный дух новость от руководства, очень важную задачу от отдела тестирования или получение поощрения (особенно денежного). Но путь становления был тернист, поэтому расскажем немного про трудности, которые мы встретили при взрослении от 5.0e3 до 1.0e6 одновременных подключений от пользователей.


              Читать дальше →
            • Обзор систем мониторинга серверов. Заменяем munin на…

              • Tutorial
              Очень долго хотел написать статью, но не хватало времени. Нигде (в том числе на Хабре) не нашёл такой простой альтернативы munin, как описанная в этой статье.


              Читать дальше →
            • Знакомство с виртуализацией, контейнерами и Kubernetes: 18 материалов о работе в облаке



                В этой подборке мы объединили статьи и руководства для тех, кто хочет познакомиться с виртуализацией. В материалах под катом — как появилась виртуальная инфраструктура, что такое контейнеризация и чем занимается Cloud DevOps Engineer.
                Читать дальше →
              • Инфраструктура для микросервисов. K8s и все-все-все

                  Как-то я уже писал тут о переезде из Азии в Европу, а теперь хочу написать, что я в этой Европе делаю. Есть такая профессия — DevOps, точнее нет, но так получилось, что это именно то чем я сейчас занимаюсь. Сейчас для оркестрации всего что бежит в докере мы используем rancher, о чем я тоже уже писал. Но вот случилось ужасное, вышел ранчер 2.0 который переехал на kubernetes (дальше просто k8s) и поскольку k8s сейчас действительно стандарт для управления кластером, возникло желание тоже построить всю инфраструктуру заново с блекджеком и библиотекаршами. Что еще добавляет пикантности это то что компания постоянно нанимает разных специалистов из разных стран и с разными традициями и кто-то и собой приносит puppet, кому-то милее ansible, а кто-то вообще считает что Makefile + bash — наше все. Поэтому однозначного мнения как все должно работать просто нет, а очень хочется.


                  Предварительно был собран такой зоопарк технологий и инструментов:


                  zoo

                  Читать дальше →
                • О ненависти к С++

                  • Перевод
                  С++ or not C++, C++ или Java/Python/Ruby? Как часто вы задаёте или слышите подобные вопросы? Не хотелось бы поднимать очередной холивар — по моему мнению, умные люди давно должны были бы прийти к выводу, что при выборе языка нет той серебряной пули, которая бы поставила окончательную точку, — у каждого языка есть свои плюсы и минусы и чаще всего проблемы в прокладке между клавиатурой и стулом.

                  Читать дальше →
                • 10 причин [не] использовать k8s

                    Сегодня мы поговорим про Kubernetes, про грабли, которые можно собрать при его практическом использовании, и про наработки, которые помогли автору и которые должны помочь и вам. Постараемся доказать, что без k8s в современном мире никуда. Противникам k8s также предоставим отличные причины, почему не стоит на него переходить. То есть в рассказе мы будем не только защищать Kubernetes, но и ругать его. Отсюда в названии появилось это [не].

                    Эта статья основана на докладе Ивана Глушкова (gli) на конференции DevOops 2017. Последние два места работы Ивана так или иначе были связаны с Kubernetes: и в Postmates, и в Machine Zone он работал в инфракомандах, и Kubernetes они затрагивают очень плотно. Плюс, Иван ведет подкаст DevZen. Дальнейшее изложение будет вестись от лица Ивана.


                    Читать дальше →
                  • Ансамбль солёных поваров-кукловодов: сравниваем Ansible, SaltStack, Chef и Puppet

                      Сегодня мы поговорим о том, что такое SCM и расскажем несколько историй, через призму которых рассмотрим Ansible, SaltStack, Chef и Puppet, выбрав лучший вариант для конкретной задачи.


                      В основе материала — расшифровка доклада Андрея Филатова, ведущего системного инженера компании EPAM Systems, c нашей октябрьской конференции DevOops 2017.
                      Читать дальше →
                    • Actions on Google: начните разрабатывать приложения для Google Ассистента, который скоро запустится в России


                        Привет, Хабр! В ближайшие месяцы в России появится Google Ассистент, чтобы сделать ваше общение с поисковиком более естественным и похожим на настоящий диалог. Ассистент поможет находить голосом необходимую информацию — будь то погода, загруженность дорог по пути на работу, данные о любимых актерах и многое другое. А еще он позволит юзерам взаимодействовать с приложениями — благодаря Actions on Google.


                        С помощью Actions on Google вы сможете разрабатывать свои приложения (экшены) для Ассистента и — таким образом — расширять его функционал и, следовательно, сделать его еще полезнее для пользователей. И начать делать это стоит уже сегодня, так как Google Ассистент появится в России совсем скоро. Как только сервис станет доступным, пользователи смогут взаимодействовать с вашими приложениями путем диалога — ровно так же, как и в других ситуациях, где можно использовать Ассистент, например, при поиске Информации в интернете.

                        Читать дальше →
                      • [Перевод] Как работает Graal — JIT-компилятор JVM на Java

                        Привет, Хабр! Представляю вашему вниманию перевод статьи "Understanding How Graal Works — a Java JIT Compiler Written in Java".


                        Введение


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


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

                        Читать дальше →
                        • +36
                        • 12,9k
                        • 3