• Java теперь платная? Развенчиваем слухи (или нет?)

      Уже 2 дня как вступили в силу изменения лицензионной политики Oracle на распространение сборок Java SE. В среде разработчиков-слоупоков (я тоже в их числе) начали носиться кошмарные слухи.

      Что произошло


      В середине 2018 года Oracle объявил, что собирается изменить лицензионную политику. 16 апреля 2019 года изменение вступило в силу. Теперь все опубликованные после этой даты сборки Java SE можно использовать бесплатно только для личных нужд и с целью разработки. Для использования в коммерческих целях (в том числе для продакшена) надо оформить платную подписку у Oracle.

      Что-а-а?


      Oracle выстрелил себе в ногу и убивает Java? Нет, не убивает. Нет, не выстрелил. Но проблем халявщикамвсем нам подкинул. Давайте быстро разберемся, что это означает в практическом плане, без этих ваших GPL, BCL, WTF…
      Разбираемся в режиме FAQ
    • Python Testing с pytest. Начало работы с pytest, Глава 1

      • Перевод
      • Tutorial

      Вернуться Дальше


      Я обнаружил, что Python Testing с pytest является чрезвычайно полезным вводным руководством к среде тестирования pytest. Это уже приносит мне дивиденды в моей компании.

      Chris Shaver
      VP of Product, Uprising Technology


      Читать дальше →
    • Мониторинг мёртв? — Да здравствует мониторинг



        Наша компания с 2008 года занимается преимущественно управлением инфраструктурами и круглосуточной технической поддержкой веб-проектов: у нас более 400 клиентов, это порядка 15% электронной коммерции России. Соответственно, на поддержке очень разнообразная архитектура. Если что-то падает, мы обязаны в течение 15 минут это починить. Но чтобы понять, что авария произошла, нужно мониторить проект и реагировать на инциденты. А как это делать?

        Я считаю, что в организации правильной системы мониторинга происходит беда. Если бы беды не было, то мой спич состоял из одного тезиса: «Установите, пожалуйста, Prometheus + Grafana и плагины 1, 2, 3». К сожалению, теперь так не работает. И главная проблема заключается в том, что все продолжают верить во что-то такое, что существовало в 2008 году, с точки зрения программных компонентов.

        В отношении организации системы мониторинга я рискну сказать, что… проектов с грамотным мониторингом не существует. И ситуация настолько плохая, если что-то упадёт, есть риск, что это останется незамеченным — все ведь уверены, что «всё мониторится».
        Возможно, всё мониторится. Но как?

        Все мы сталкивались с историей наподобие следующей: работает некий девопс, некий админ, к ним приходит команда разработчиков и говорит — «мы зарелизились, теперь замониторь». Что замониторь? Как это работает?

        Ок. Мониторим по старинке. А оно уже изменяется, и выясняется, что ты мониторил сервис А, который стал сервисом B, который взаимодействует с сервисом C. Но команда разработчиков тебе говорит: «Поставь софт, он же должен все замониторить!»

        Так что изменилось? — Всё изменилось!
        Читать дальше →
      • Присматриваемся к инструментам для мониторинга распределенных приложений



          Когда приложение было монолитным и вдруг, раз, стало распределённым, в формулу вычисления доступности добавляется ещё одна неизвестная — сетевая. Из-за проблем с вызовами между компонентами, приложения часто валятся и начинают дрыгать ножками. А выяснение причин нестабильной работы распределённого приложения — та ещё задачка. Дополнительную неразбериху в структуру приложения вносит условный kubernetes, который по своему внутреннему усмотрению может произвольно распределять условные поды по условным нодам. Пишу «условный», потому что на месте kubernetes может быть и Swarm и Openshift и прочие и прочие.

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

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



            К сожалению, спрос на HI-FI-смартфоны привел к маркетологическим манипуляциям. “Благодаря” этому сегодня практически любой мало мальски приличный смартфон можно увидеть в обзорах из серии “лучшие аудиосмартфоны сезона” и т.п. Несмотря на расхожее убеждение о том, что качество звука в смартфонах не имеет отличий и все смартфоны звучат одинаково, разница таки есть. Как ни странно качество отличается и во многом зависит от аппаратных возможностей устройств. Под катом о критериях качества музыкальных смартфонов и о некоторых моделях, которые, по моему мнению, заслуживают внимания.

            Термин “аудиофильский” в статье используется не как ругательство, но для упрощения и, возможно, с легким сарказмом.
            Читать дальше →
          • SIP от Мегафона по домашнему тарифу

            • Tutorial
            У многих современных смарфонов есть проблема: совмещённый слот под SIM2 со слотом под карту памяти. То есть либо симка, либо флэшка…

            Основной номер у меня на TELE2. Но есть и номер Мегафон с привязкой ко всяким сервисам по типу банк-клиентов. Я планировал перенести эти сервисы на номер в Теле2 и выкинуть Мегафон. Но Мегафон сделал «ход конём» и предложил мне скидку 50% на тариф «Включайся! Общайся». При этом в него входят настоящий безлимитный интернет (С возможностью раздачи трафика с телефона и скорость не режут) и 1100 минут по России в месяц. Разумеется, при поездке по РФ никаких дополнительных платежей. Правда я и 200 минут в месяц не выговариваю…

            Теперь выкинуть номер Мегафона — жаба давит. Но желание освободить слот под карту памяти осталось.

            Тут я вспомнил про старую услугу «Мультифон», но обнаружил, что остался только "Мультифон-бизнес" с конским тарифом по 1,6 руб. за минуту. Мультифона для обычных людей, как бы, больше не существует.



            Мой внутренний оптимист приказал думать дальше. И не зря. По итогу я получил полноценный sip аккаунт (могу звонить с компьютера) по адекватному тарифу, ходят СМС, второй слот занят картой памяти без напильника, а сама sim стоит в модеме с HiLink.
            Читать дальше →
          • Трассировка сервисов, OpenTracing и Jaeger

              image

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

              Для минимизации ручного труда мы решили воспользоваться одним из инструментов трассировки. О том, как и для чего можно использовать трассировку и как это делали мы, и пойдет речь в этой статье.
              Читать дальше →
              • +29
              • 3,4k
              • 7
            • Вышел Zabbix 4.2

                Наша команда очень рада поделиться новостью о том, что состоялся релиз свободной системы мониторинга с открытым исходным кодом Zabbix 4.2!



                Является ли версия 4.2 ответом на главный вопрос жизни, вселенной и мониторинга в целом? Давайте посмотрим!
                Читать дальше →
              • Новое в Git 3: замыкания

                • Перевод

                Git — популярная система контроля версий. В ней атомарное изменение одного или нескольких файлов называется коммитом, а несколько последовательно идущих коммитов объединяются в ветку. Ветки используются для того, чтобы реализовывать новые идеи (фичи).



                Случается, что идея оказывается тупиковой, разработчик сворачивает не туда, и возникает необходимость отката к изначальной версии, для этого нужно забыть о новой ветви и переключиться на главную dev или master, и затем продолжить работу как ни в чем не бывало. В этом случае "отросток" повиснет навсегда, как и желание его удалить. Но как удалить, если это часть истории? Этот отросток показывает усилия трудяги-программиста, пусть и тщетные. Так легче отчитываться перед начальством, ведь неудачный результат — тоже результат!


                Спешу обрадовать: разработчики Git в 3 версии введут новую команду для замыкания таких беспризорных ветвей. Напомню, что текущая актуальная версия — 2.21.0.


                Как использовать эту команду, что она дает и что думают IT компании? Статья отвечает на эти и другие вопросы.

                Читать дальше →
              • TDD приложений на Spring Boot: тонкая настройка тестов и работа с контекстом

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

                  Читать дальше →
                • Удаленный мониторинг и управление устройств на базе Linux/OpenWrt/Lede через 80-ый порт, продолжение

                  • Tutorial
                  Это заключительная часть статьи, вот начало.

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

                  Но практика показывает, что это не совсем так.
                  Читать дальше →
                • Криптография в Java. Утилита Keytool

                  • Перевод

                  Привет, Хабр! Представляю вашему вниманию перевод 10 статьи "Java Keytool" автора Jakob Jenkov из серии статей для начинающих, желающих освоить основы криптографии в Java.

                  Читать дальше →
                • Вещи, которых я не знаю в 2018

                  Привет, Хабр! Представляю вашему вниманию перевод статьи "Things I Don’t Know as of 2018" автора Дэна Абрамова.


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


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

                  Читать дальше →
                • Распределение памяти в JVM

                  • Перевод
                  Всем привет! Перевод сегодняшнего материала мы хотим приурочить к запуску нового потока по курсу «Разработчик Java», который стартует уже завтра. Что ж начнём.

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



                  Два вида памяти

                  JVM разделяет память на две основные категории: «кучу» (heap) и «не кучу» (non-heap). Куча — это часть памяти JVM, с которой разработчики наиболее знакомы. Здесь хранятся объекты, созданные приложением. Они остаются там до тех пор, пока не будут убраны сборщиком мусора. Как правило, размер кучи, которую использует приложение, изменяется в зависимости от текущей нагрузки.
                  Читать дальше →
                • Изучаем Go: подборка видеозаписей докладов



                    Сегодня язык Go широко используется для разработки распределённых и высоконагруженных приложений. Мы собрали для вас подборку видео, в основном с наших митапов, в которых разбираются преимущества и недостатки языка, и рассказывается об особенностях его применения на примерах реальных проектов.

                    Список видеозаписей:

                    1. Go в production.
                    2. Профилирование Go-приложений.
                    3. Медиасервер трансляций на Go.
                    4. Pipeline поиска по Почте на Go.
                    5. Синхронизация данных в Go с помощью mysql binlog.
                    6. Как мы начали использовать Go в Ответах Mail.ru.
                    7. Pub/Sub и 1 миллион WebSocket’ов.
                    8. Программирование на Go (курс).
                    9. Кому нужен язык Go и микросервисы.
                    Читать дальше →
                    • +31
                    • 7,9k
                    • 3
                  • Ни минуты оффлайн — Выбираем промышленный LTE-роутер

                      промышленный LTE роутер Termit CR41P, с антеннами Триада MA-2697

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

                      Мне надоело самостоятельно изобретать failover на USB модемах, и захотелось делегировать это отдельной умной железке. Я решил сравнить несколько промышленных роутеров, чтобы выяснить, оправдывают ли они свое название, и насколько они лучше моих костылей. В статье будут сравниваться роутеры производителей iRZ, Termit, Robustel.

                      Основные требования к роутерам:

                      • 2 SIM-карты и автоматическое переключение между операторами — роутер должен автоматически определять потерю связи на одном операторе и переключаться на резервного. Это особенно важно для подвижных систем, когда покрытие сотовой сети не идеально.
                      • Подключение по Ethernet — основная система должна видеть только шлюз по умолчанию, и не должна знать о модемной подсистеме на стороне роутера и переключениях каналов, поэтому никаких USB.
                      • Поддержка современных протоколов VPN: IKEv2 и OpenVPN — для удобства администрирования, и чтобы не зависеть от реальных IP-адресов, роутеры должны уметь VPN. При этом поддерживать не только устаревшие PPTP и L2TP, но и современные протоколы.
                      • (Опционально) поддержка GPS, наличие GPIO, serial интерфейсов RS-232/485 — эти функции не обязательны для наших задач, но мы рассмотрим их тоже, как бонус, который, возможно, будет кому-то полезен.
                      Читать дальше →
                    • Качество кода

                        Качество кода — тема, которая родилась вместе с программированием. Для оценки и контроля качества менеджмента предприятий применяется ISO 9000, для продуктов — ГОСТ и тот же ISO, а вот для оценки качества кода ГОСТа нет. Точного определения и стандарта для качества кода тоже нет.



                        Каждый разработчик понимает качество по-своему, исходя из опыта. Представления джунов и лидов различаются, и это приводит к разногласиям. Каждая команда для отдельных проектов оценивает код по-своему. Команда обновляется, разработчики уходят, тимлиды сменяются — определение качества меняется. Эту проблему попробует помочь решить Иван Ботанов (StressoID) из Tinkoff.ru — Frontend-developer, преподаватель онлайн-курса по Angular, спикер на митапах и конференциях, ведущий уроков на YouTube и, иногда, тренер команд в компаниях.

                        В расшифровке доклада Ивана на Frontend Conf поговорим о читаемости, нейминге, декларативности, Code style, и косвенно коснемся отношений джунов и лидов: ошибки, грабли и «сгорание» тимлидов.

                        Disclaimer: Подготовьтесь морально, в тексте будет много плохого кода, взятого с «особенного» сайта.

                        Читать дальше →
                      • Allure-Android. Информативные отчеты для мобильной автоматизации

                          Статья публикуется от имени Иванова Андрея и Батеевой Екатерины, neifmetus

                          Автоматизация мобильных приложений довольно молодая сфера: фреймворков много и многие проекты сталкиваются с проблемой выбора самого «быстрого, стабильного, простого в использовании». Также и мы около двух лет назад стояли перед выбором нового инструмента автоматизации тестирования Android приложений.
                          Все популярные инструменты так или иначе базировались на UIAutomator и Espresso, поэтому мы решили затестить их в чистом виде и сравнить с теми же Appium (самый популярный) и seeTest (использовался до этого, лучший среди платных на тот момент).

                          Из достоинств Appium можно выделить привычный многим WebDriver API, возможность использования большинства популярных языков и библиотек. Кроме этого, он широко используется во многих компаниях и позволяет писать тесты сразу под платформы iOS и Android. И, наконец, это бесплатное коробочное решение — что может быть лучше?

                          Так думали мы, пока не обнаружили следующие недостатки:
                          • низкая стабильность Appium Server
                          • нельзя взаимодействовать с публичными методами Activity (в 2018 году про создание backdoor в Appium рассказал в своей статье Николай Абалов из Badoo, прочитать можно здесь)
                          • сильно уступает по скорости выполнения тестов Espresso

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

                          Итак, фреймворк был выбран, оставалось найти остальные компоненты:
                          1. Runner — должен позволять запускать тесты параллельно и конфигурировать пулы устройств
                          2. Reporter — должен предоставлять удобочитаемый отчет, которым мог бы пользоваться любой член команды

                          Читать дальше →
                        • Shell-скрипты в Ansible

                            Предположим, что заказчик попросил вас помочь с переносом скрипта для развертывания централизованного файла sudoers на серверах RHEL и AIX.



                            Что же, это вполне распространенный сценарий, и на его примере можно продемонстрировать использование расширенных возможностей Ansible, а также того, как меняется подход – от скрипта, который выполняет некую задачу, к идемпотентному (без внесения изменений) описанию и контролю за соблюдением состояния экземпляра.
                            Читать дальше: Shell-скрипты в Ansible
                            • +10
                            • 6,4k
                            • 6
                          • Руководство пользователя Kibana. Визуализация. Часть 1

                            Доброго времени суток. Всем пользователям ElasticStack рано или поздно нужно визуализировать данные. Большинство использует Kibana. Под катом перевод официальной документации для версии 6.6.

                            Ссылка на оригинальный материал: Kibana User Guide [6.6] » Visualize

                            Содержание:

                            1. Creating a Visualization
                            2. Line, Area, and Bar charts

                            Читать дальше →