Русский
Русский
English
Статистика
Реклама

Релиз

IntelliJ IDEA 2020.3

28.12.2020 16:18:38 | Автор: admin
Привет Хабр!

Представляем последнее большое обновление IntelliJ IDEA в этом году. Версию 2020.3 можно скачать с нашего сайта, установить через приложение Toolbox, обновиться прямо в IDE или, если вы пользуетесь Ubuntu, с помощью snap-пакетов.


IntelliJ IDEA 2020.3 несет в себе множество полезных функций: интерактивные подсказки в отладчике, поддержку Git-стейджинга, расширенную поддержку записей и запечатанных классов из Java 15. В новой версии проще работать с окном Endpoints, фреймворками и профилировщиком. Мы также обновили начальный экран, улучшили сортировку вариантов автодополнения на основе машинного обучения и расширили возможности спелл-чекера.


Подробно ознакомиться с новыми функциями вы можете на сайте.




Вот главные улучшения, вошедшие в версию 2020.3:


Редактор


  • Новые параметры переименования предлагают три опции: переименовать объект в комментариях, строках или в текстовых вхождениях.
  • Теперь можно переносить вкладки в разные области экрана и таким образом делить его по вертикали и по горизонтали. А с помощью действия Open in Right Split можно разделить редактор вертикально при открытии файла.
  • Закреплять вкладки стало проще: добавляйте файлы перетаскиванием. Также можно собрать все закрепленные вкладки в отдельном ряду.
  • Вы можете выбрать IntelliJ IDEA в качестве стандартного приложения для открытия файлов.
  • Теперь можно добавить шаблон, который создает сразу несколько файлов. Внутри шаблона вы можете ввести паттерн для создания имени файла и пути.
  • Мы улучшили форматирование Markdown, синхронизировали прокрутку превью и редактора, а также добавили поддержку Mermaid.js.

Взаимодействие с IDE


  • На начальном экране теперь четыре вкладки: для управления проектами, настройки интерфейса IDE, установки плагинов и быстрого доступа к справке и обучающим материалам.
  • Со вкладки Learn IntelliJ IDEA на экране приветствия можно перейти к интерактивным курсам, которые познакомят вас с возможностями IntelliJ IDEA на реальных примерах кода.
  • Теперь можно синхронизировать тему IDE с системными настройками.
  • Мы добавили новый режим чтения для файлов библиотек и файлов, предназначенных только для чтения. В таких файлах удобнее читать комментарии.
  • Чтобы открывать файлы в режиме LightEdit, используйте команду -e(edit). В окне LightEdit можно активировать режим IDE, чтобы использовать все функции IntelliJ IDEA.
  • При нажатии Alt+Enter IDE показывает варианты исправления ошибок правописания. Кроме того, для проверки стиля и грамматики мы начали использовать новую версию движка LanguageTool, который поддерживает более десятка новых языков.
  • В диалоге Search Everywhere можно искать Git-сообщения, теги и ветки, а также использовать его в качестве калькулятора.
  • Теперь по клику на файл его содержимое можно увидеть во вкладке предпросмотра.
  • IntelliJ IDEA сообщит вам о выходе обновления JDK и предложит его установить.
  • Мы добавили панель со смайлами для Linux.

Отладчик


  • В режиме отладки нажмите на переменную, чтобы получить подсказку с указанием связанных полей, значения которых можно изменить.
  • Мы добавили новый тип watch expressions, которые связаны с определенным контекстом и отображаются прямо в редакторе.
  • Во время работы отладчика доступны новые функции профилирования: Show referring objects и Calculate retained size.
  • Теперь на каждый сеанс отладки для задачи Gradle открывается только одна вкладка. В ней отображаются фреймы, переменные, а также вывод консоли.

VCS


  • В новой версии появилась поддержка Git-стейджинга. Теперь вы можете добавлять файлы на стейджинг прямо из IDE. В окне Commit вы увидите две новые секции Staged и Unstaged.
  • Меню VCS называется по имени системы контроля версий, которую вы используете. Еще мы убрали из него все действия, кроме самых актуальных.
  • IntelliJ IDEA автоматически исправляет недопустимые символы в именах веток. А в контекстном меню текущей ветки добавились новые связанные действия.

Java


  • IntelliJ IDEA сортирует варианты автодополнения на основе технологии машинного обучения.
  • Мы добавили новое действие для преобразования записей (records) в классы.
  • В этой версии анализ кода, рефакторинги и автодополнение поддерживают запечатанные классы.
  • Если в ваших файлах используется механизм шебанг, IntelliJ IDEA автоматически определит это и откроет их как надо.
  • Мы упростили извлечение Java-методов: IDE сразу же выполняет рефакторинг без промежуточных диалогов.
  • Добавили новые инспекции и intention-действия для Java, а также улучшили автодополнение.
  • Плагин для Lombok теперь встроен в IDE.

Совместная разработка


  • IntelliJ IDEA 2020.3 поддерживает Code With Me (EAP) наш новый сервис для парного программирования и совместной разработки.

Конфигурации запуска


  • Мы изменили интерфейс конфигураций запуска/отладки и разместили наиболее часто используемые настройки на одном экране. Кроме того, вы можете добавлять дополнительные параметры, если необходимо.

Профилировщик


  • Теперь в окне Profiler можно присоединить профилировщик к работающему приложению и быстро получить доступ к ранее созданным снэпшотам.
  • Открыть любой файл .jfr или .hprof теперь можно несколькими способами: перетащить его в редактор, использовать меню File | Open или дважды кликнуть по файлу на панели Project.

Поддержка фреймворков


  • В этой версии мы значительно улучшили окно Endpoints. Теперь в вы можете фильтровать результаты поиска веб-сервисов и удобно расположить их в IDE. Для каждого веб-сервиса есть доступ к документации, специальному HTTP-клиенту и Open API.
  • Можно экспортировать HTTP-запросы в cURL.
  • Автодополнение URL-адресов стало более информативным: отображаются иконки фреймворков, HTTP-методы и расположение исходных классов и файлов. URL-адреса, объявленные как deprecated, перечеркнуты.
  • Нажав на новый значок глобуса рядом с URL-адресом, вы быстро перейдете к доступным действиям.
  • Теперь анализ кода работает для Spring API: MVC Functional Routing, RestOperations, WebTestClient и Reactive WebClient.
  • HTTP-запросы в старом формате легко преобразовать в новый формат.
  • Мы улучшили анализ кода Swagger и добавили поддержку Swagger Hub.
  • При импорте Quarkus и Micronaut проектов автоматически создаются конфигурации запуска.
  • В IntelliJ IDEA работает автодополнение для имен методов-запросов в Micronaut Data репозиториях. Мы также добавили поддержку SQL и JPQL языков в аннотации Micronaut @Query.

Kubernetes


  • Вы можете загружать логи подов на свой компьютер и быстро удалять ресурсы Kubernetes.
  • Теперь можно автоматически загружать CRD-схемы из активного кластера.
  • Мы добавили действия Open Console и Run Shell.

Kotlin


  • Даты выхода обновлений плагина Kotlin теперь синхронизированы с выпуском новых версий IntelliJ IDEA.
  • Inline-рефакторинг возможен для элементов, объявленных в Java. При инлайне код автоматически конвертируется в Kotlin.
  • Также можно использовать inline-рефакторинг для элементов из библиотек с приложенными исходниками, в том числе для scope-функций also, let, run, with и apply.
  • При inline-рефакторинге улучшена обработка лямбда-выражений.
  • Мы добавили поддержку структурного поиска и замены (SSR) для Kotlin.

Инструменты для работы с базами данных


  • Теперь можно использовать SQL для запросов к MongoDB.
  • IntelliJ IDEA поддерживает сервис Couchbase Query.
  • Добавлены два новых формата экспорта: One-row и SQL-Insert-Multirow.

JavaScript


  • Мы интегрировали TypeScript language service с окном Problems и перенесли действия из окна TypeScript в специальный виджет в строке состояния.
  • Если у вас есть нереализованный React-компонент, IntelliJ IDEA создаст необходимую конструкцию кода за вас.
  • Теперь можно переходить к различным элементам JavaScript- и TypeScript-файлов с панели навигации.

Scala


  • Сервер компиляции Scala теперь компилирует независимые модули параллельно.
  • Мы добавили диаграммы компиляции, чтобы помочь вам оптимизировать структуру модулей проекта и параметры виртуальной машины на сервере компиляции.
  • Scala-плагин теперь может комбинировать префиксы пакетов IntelliJ IDEA с цепочками предложений пакетов и относительными импортами Scala.
  • Добавлена поддержка MUnit со всей привычной функциональностью.
  • Scala-плагин понимает новый синтаксис методов main.

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


Программируйте с удовольствием!

Подробнее..

Нововведения в Kotlin 1.4.0

11.01.2021 16:10:01 | Автор: admin

Сегодня я решил написать о самых главных нововведениях в Kotlin 1.4.0. Думаю, что начинающим Android разработчикам будет очень интересна данная тема и они смогут применить новые фишки в своих приложениях. Также, я надеюсь, что моя статья будет полезна и для профессиональных разработчиков, которые очень любят и помогают развивать Kotlin.

Основные темы, которые я затрону:

  • Нововведения в синтаксисе

  • Новые инструменты в IDE

  • Новые компилятор

  • Качество и производительность

Ну что ж, предлагаю вам налить себе кофе или чай, запастись сладеньким и можно начинать)

Немного о релизах Kotlin

На момент написания статьи самыми новыми релизами были:

Релиз

Дата и краткое описание

Kotlin 1.4.0

17 августа, 2020, основной пласт нововведений, который мы сегодня рассмотрим. Улучшение производительности, введение новых синтаксических конструкций и добавление новых функций в IDE.

Kotlin 1.4.10

Kotlin 1.4.20

Kotlin 1.4.21

7 сентября, 2020, исправление багов для Kotlin 1.4.0

23 ноября, 2020, несколько улучшений, такие как производительность и поддержка новых функций для JVM.

7 декабря, 2020, исправление ошибок для Kotlin 1.4.20

Нововведения в синтаксисе

SAM - интерфейсы

Одной из самых важных и довольно полезных фишек является добавление нового синтаксиса для SAM интерфейсов (SAM - Single Abstract Method, также интерфейс с одним методом называют функциональным).

Чтобы указать компилятору Kotlin о том, что перед нами SAM интерфейс нужно использовать ключевое слов fun, как ниже в примере:

fun interface ItemSelectListener {fun onItemSelect(position: Int): String}val items = listOf("Item 1", "Item 2", "Item 3")val myListener = ItemSelectListener { position ->items[position]}fun main() {    print("selected item -> ${myListener.onItemSelect(0)}")}

Одно из применений: передача обработчиков событий в адаптер RecyclerView для отслеживания нажатия на элемент списка.

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

Явный API режим

Kotlin предлагает новый явный API режим для разработчиков библиотек.

Основные моменты:

  1. Явный API режим помогает делать API библиотек чистым и последовательным

  2. Накладывает различные требования и ограничения на публичные API:

    1. Строгое использование модификаторов доступа

    2. Явное указание типов для свойств и функций, которые являются частью публичного API

  3. Некоторые определения исключены из проверок: свойства data классов, первичные конструкторы и т.д.

Более подробно

Смешанные именованные и позиционные параметры

Довольно легко объяснить на примере. До Kotlin 1.4.0 нельзя было делать так:

fun foo(a: Int, b: String = "", c: Int) {}fun main() {foo(a = 10, "Hello, World", c = 100000)}

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

Конечная запятая

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

fun reformat(str: String,              wordSeparator: Char = ' ', // конечная запятая) {  // TODO}

Улучшения вызываемых ссылок на функции

Теперь вы можете использовать ссылки на функции, которые имеют default аргументы:

fun foo(a: Int = 0): String = "value -> $a" // параметр 'a' имеет значение по умолчанию 0fun apply(f: () -> String): String = f()fun main() {    println(apply(::foo))}

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

Например у нас есть функция foo, которая принимает другую функцию, которая ничего не возращает (Unit). Мы можем передать ей любую ссылку на функцию, у которой совпадает количество аргументов, а возвращаемый тип может быть любой:

fun foo(f: () -> Unit) { }fun returnValue(): Int = 42fun main() {    foo { returnValue() } // Так было до Kotlin 1.4.0    foo(::returnValue) // начиная с Kotlin 1.4.0 можно передать сюда функцию,     // которая возвращает любой тип}

Вы можете адаптировать ссылки на функции, когда передается переменное количество аргументов:

fun foo(a: Int, vararg words: String) {}fun useCase0(f: (Int) -> Unit) {}fun useCase1(f: (Int, String) -> Unit) {}fun useCase2(f: (Int, String, String) -> Unit) {}fun test() {    useCase0(::foo)     useCase1(::foo)     useCase2(::foo) }

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

fun lockUI() {}fun takeSuspend(f: suspend () -> Unit) {}fun test() {    takeSuspend { lockUI() } // до Kotlin 1.4.0    takeSuspend(::lockUI) // В Kotlin 1.4.0 можно сделать так}

Использование breakandcontinueвнутриwhenвыражений, включенных в цикл for

В Kotlin 1.4.0 вы можете использовать ключевые слова break и continue в операторе when, когда он вложен в циклfor (до этого нужно было создавать метки, более подробно)

fun foo(numbers: List<Int>) {    for (num in numbers) {        when {            num % 2 == 0 -> continue            num == 10 -> break            else -> println(x)        }    }}

Новые инструменты в IDE

Новое гибкое окно создания проекта

Теперь вы можете создавать и конфигурировать различные типы проектов Kotlin более гибко и специфично:

Новое окно создания проекта позволяет:

  1. Выбрать шаблон проекта (в будущем будет добавлено больше шаблонов)

  2. Выбрать систему сборки (Gradle, Maven)

  3. Посмотреть структуру проекта до его создания

  4. Добавить/удалить модули, поддерживаемые данным шаблоном проекта

  5. Настроить JVM версию, framework для тестирования и другие вещи.

Отладчик Корутин

Очень много разработчиков на Kotlin используют всеми известные корутины (а как же без них).

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

Теперь появился новый инструмент, который находится в Debug Tool Window в Intellij IDEA, который позволяет:

  1. Легко проверить состояние каждой корутины

  2. Посмотреть значения локальных и захваченных переменных для корутин

  3. Посмотреть полный стек создания корутины, а также стек внутри корутины (все фрэймы с локальными переменными)

  4. Также можно получить полный отчет, воспользовавшись функцией Get Coroutines Dump

Новый компилятор

Главной целью создания нового компилятора было соответствие характеристикам:

  1. Скорость

  2. Создание общего интерфейса для разных платформ, которые поддерживает Kotlin

  3. Обеспечение API для расширения компилятора

Основные улучшения по сравнению с предыдущим компилятором:

  1. Новый более мощный алгоритм для автоматического вывода типов с поддержкой более сложных сценариев вывода типов и с улучшенниями для делегированных свойств. (данный алгоритм уже был доступен в версии Kotlin 1.3 при указании дополнительных опций, в новой версии он будет использоваться по умолчанию). Вы можете найти более десятка исправленных багов и ошибок в новом алгоритме на YouTrack

  2. Унифицированный backend компилятора (в Kotlin есть несколько backend, такие как: Kotlin/JVM, Kotlin/JS и Kotlin/Native. Последний был основан на промежуточном представлении (IR) для Kotlin кода)

Сейчас компания JetBrains работает над более производительной frontend реализацией.

Frontend - это часть компилятора, которая разбирает код, разрешает имена, выполняет проверки типов и многое другое.

Качество и производительность

Одной из главных целей данного релиза является улучшение производительности и стабильности IDE, фокус на вещах, которые важны для разработчиков, а также сделать Kotlin более продуктивным и быстрым.

Основные улучшения:

  1. Было исправлено более 60 ошибок производительности, включая большое количество случаев зависания IDE и утечек памяти

  2. Прирост в скорости IDE, который можно увидеть, пройдя по ссылке (здесь время подсвечивания синтаксиса Kotlin при открытии большого проекта). Также на рисунке ниже показано время срабатывания автодополнения (которое уменьшилось по сравнению с предыдущими релизами)

  3. И многие другие, которые напрямую связаны с созданием нового компилятора.

Немного полезных ссылок

  1. Информация о релизе Kotlin 1.4.0 на блоге JetBrains

  2. Нововведения на официальном сайте Kotlin

  3. Kotlin 1.4.0 Online Event (на английском)

  4. Статистика от StackOverflow Survey 2020

  5. Cтатистика от JetBrains

Подробнее..
Категории: Kotlin , Релиз , Новинки

Перевод Вс, что вам нужно знать об управлении релизами

14.12.2020 18:12:07 | Автор: admin
В постоянно меняющемся, эволюционирующем мире приложений отдавать полусырые релизы пользователям не вариант. Именно здесь на первый план выходит управление релизом. Данный материал от одного из менеджеров компании Hike, рассказывает о трейн-релизах и о стратегии ветвления, вводя в курс дела тех, кто хочет расширить свою зону компетенции и получить представление об управлении проектом.




Что это такое управление релизом?


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

  1. Планирование релиза
  2. Сборка релиза
  3. Приемочное пользовательское тестирование
  4. Подготовка релиза
  5. Развертывание релиза.


Планирование релиза


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

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

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

  1. Отсечение: начинается 1-й день.
  2. Внутреннее тестирование версий альфа/UAT: Три дня.
  3. Поэтапное развертывание [1%] Представление на ревью.
  4. Продолжительность ревью: 3 дня.
  5. Один день при 20% пользователей.
  6. Один день при 50% пользователей, в тот же день рост до 100% пользователей.

В соответствии с приведенным выше примеромв общей сложности потребуется 10 дней, пока новая версия приложения не будет общедоступна.



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

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

  • Сроки
  • Сроки поставки
  • Требования
  • Общий масштаб проекта

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



Как только план утверждается и окончательно оформляется, начинается самое интересное!

Важные аспекты планирования релизов


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

  • Релиз-менеджер управляет релизом и координирует его.
  • Мы принимаем только код с проведенным ревью и протестированный код.
  • В процессе есть этап внедрения.
  • Мы мониторим выпущенную версию приложения.

Построение релиза


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

В определённый день и время (скажем, в понедельник, в 15:00) происходит замораживание/отсечение кода. До этого момента команды успевают посмотреть, протестировать и смержить фичи в ветку разработки, которая должна быть частью трейн-релиза. В 15:00 релиз-менеджер создаст из ветки разработки ветку релиза. Этот шаг автоматизирован с помощью Jenkins.

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



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



Релиз веток и контроль версий


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



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

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



Пользовательское приемочное тестирование


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



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

  • Могут ли пользователи работать с приложением?
  • Соответствует ли поведение приложения ожиданиям?
  • Решает ли приложение проблему пользователей?

Без эффективного UAT (User Acceptance Testing) шансы на успех разрабатываемого проекта значительно снижаются. Именно поэтому пользовательское является такой важной частью процесса поставки. Как отмечалось ранее, UAT часть итеративного процесса. По мере выявления ошибок команда возвращается, чтобы исправить их. Ошибка исправляется в ветке релиза, а затем мержится обратно в ветку разработки. Сборка должна пройти стадию UAT, чтобы её можно было изучить на предмет окончательного внедрения и выпуска.

Pro Tip: всегда включайте внутреннее тестирование в планирование UAT!

Одним из способов ускорить UAT релиза для нас было использование внутренних тестовых треков, предоставляемых Google. Это помогает нам быстрее распространять тикеты среди коллег и фиксировать их отзывы посредством автоматического создания тикетов JIRA. Перед отправкой финального теста команда также следит за тем, чтобы отзывы были учтены.

Подготовка и релиз


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

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



Развертывание релиза


Наконец-то настал важный день, когда окупилась вся тяжелая работа нашей команды. Пришло время выпустить наш продукт в дикую природу продакшна. Помимо простой отправки сборки в производственную среду, стадия внедрения также содержит обучение работе с продуктом как конечного пользователя, так и компании в целом. Например, пользователи должны быть уведомлены об изменениях в релизе, и именно здесь на появляется в поле зрения What's New (Что нового). У нас есть автоматизированный процесс на Jenkins, содержащий такие шаги:

  • Создание окончательной сборки [с указанием ветки и названия версии].
  • Добавление Whats New в релизе.
  • Добавление процента развертывания.
  • У каждого этапа есть ручной ввод сигналов (красный/зеленый) от каждой из команд [UAT, бенчмарк, производительность, автоматизация].

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



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

Если ошибка становится заметной в 1%, у команды есть шанс отреагировать на проблему и решить, нужно ли исправлять ее быстро. Если это так, то трейн-релиз не должен достигнуть следующего шага развертывания в 5%. Вместо этого проблема решается для 1% пользователей. Как только проблема устраняется и решение проверено, трейн-релиз может перейти на стадию 5%.

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

Анализ после релиза


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

Кроме того, ревью приложения дают представление о вашем продукте, которое гораздо труднее получить при других подходах. И Google Play, и App Store предоставляют разработчикам приложений возможность отвечать на отзывы, что может быть невероятно полезным инструментом для получения дополнительной информации о проблемах с приложением от пользователей. Отзывы могут выявить проблемы, с которыми сталкиваются пользователи при работе с вашим приложением, и проинформировать о будущих изменениях.

Подведем итоги


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

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


image

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


Подробнее..

Какв Ozon пришли к релизам мобильных приложений раз в неделю

23.05.2021 16:04:26 | Автор: admin

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

С чем мы столкнулись, пока выпускали релизы по этой схеме:

  1. Сложно спрогнозировать, когда выйдетфича.Ок,мы как-топрикидывалисроки, ночембольшебыл разрабатываемый функционал, тем сложнееточно оценить срок.Трекатьпрогресс фичитоже не очень удобно, потому что оно там делается,и промежуточныебилдыс чем-то готовым для посмотретьсложнособирать.

  2. Долгоправитьбаги.Вкоде они могутбыть исправленыбыстро. А вотдо пользователейфиксдоходит уже вместе с той самой глобальной фичей.

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

  4. Долго релизить мелкие фичи. Какие-то улучшения могут занимать немного времени на разработку, но быть важными для пользователей и бизнеса. Точно так же, какисправления багов в пункте выше, для релиза они будут ждать того монстра, которого мы пилимтримесяца.

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

  6. Многохотфиксов. Чем больше число и объем изменений, тем сложнеебудет найти все баги перед релизом. Вот и появляютсяхотфиксы. Ещёза такой долгий срок разработки может прилететь какая-то очень срочная фича, ждать нельзя надо срочно выпускать(например, поддержать разрешение на отслеживание или добавить что-то по срочному рекламному контракту).

Проблеммного,и они все значимые. Когда бизнеспришёл к нам и сказал, что надо релизить быстрее мы уже ожидали этого. Но не ожидали, что они скажут: Релизьте раз в неделю.

Мы в шоке, как это реализоватьнепонятно.Мы в шоке, как это реализоватьнепонятно.

Тут у насслучиласьстадия отрицания:Мы не успеем всёпроверить, никаких фичей в релиз не попадет, Apple ревьюит о-го-госколько.Зачем, почему, может,не надо?.В ответ мы услышали: Релизы раз в неделю.

Сокращаем время выпуска релиза: первая попытка

Решили, что надодвигаться к целиитерационно.

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

Ок, дата есть. Прикинули, что неделя уходит на регресс. На разработку остается три недели. Запланировали работына весь срок девелопмента.

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

Идёт первый месяц. Работаем. Пилим фичи, тестируем. Все заряжены.Но в итоге получили: тотобъём работ, который запланировали разработать за три недели, закончили под конецчетвёртой. Стали искать, где же выиграть время,нашли только один варианттестирование. Как могли, сократили регресс, но всёравно нашлинесколько критичных багов. В итогев зависимости от платформы с релизом опоздали на неделю-полторы.

Вторая попытка: нужно что-то менять

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

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

Пробуем всёравно каждый раз не успеваем.

Стали анализировать,из-за чегоне выходит уложиться в срок:

  1. Неправильно оцениваем время на разработку.

  2. Блочимсябекендом от этого тормозится и разработка, и тестирование.

  3. Продактыпоздно вносятпоследниеправки в ТЗ.

  4. Не учитываем время на починкубагов.

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

И тут пришлиQA.Сказали, что при двухнедельных релизахскоупнеособосократился.

Разработчиков много, они разделены по разномуфункционалуи задвенедели успеваютнакомититьпрактически во все компоненты. Стало понятно, что несмотря на то, что мыНИ РАЗУне успели в срок ни при месячном релизе, ни при двухнедельных пора двигаться дальше.

Недельные релизымыидём к вам!

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

Понедельник

Релизная ветка

Вторник

Фичи

Среда

Фичи

Четверг

Фичи

Пятница

Фиксы багов

Фичиуходятвсвои фича-ветки. И когда она полностью сделана, проверена, принятапродактом, тогда уже попадает вdevelop.

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

Получается, что где-то в среду-четверг должен начаться процентныйроллаутприложения.

Меняемся в тестировании

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

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

Чтобы разработка не зависала на начальных этапах, мы выработали требования кфиче, которуюберём в работу у неёдолжныбыть в наличии

  1. Дизайн;

  2. Бекенд;

  3. Контракт.

Если чего-то из этого нет смысла братьфичув разработку на мобильной платформе тоже нет.

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

  1. Бекендфичидолжен быть напродакшене.

  2. К началурелизноготестирования нет критичныхбагов(ни на фронте, ни набекенде).

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

Меняемся в разработке

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

Ещёмы постоянно автоматизируем процессы, чтобы разработчикам надо было меньше отвлекатьсяна какие-то рутинные вещи,и они могли сконцентрироваться на разработке.

Тикетавтоматом двигается по статусам. Запушилкоммит перешел вinprogress.Создалmergerequest перешел вcodereview.ПрошелreviewпопалвQA.

Втикетеавтоматически проставляется версия релиза, куда он попал и номербилда.

По каждой сборке запускаютсяUI-автотестыпозатронутомуфункционалу.Это тоже определяется самопо измененным файлам вmergerequest.В результате репорт попадаетвкомментарийтикета вJira.

Дажеmergerequestна влитие эпика вdevсоздаётсяпросто по принятию продактом фичивJira.Если нет конфликтов, то и вливается сам.Релиз сам закрывается, а новый самсоздаётся.

QA Notes

Ещёмы ввели требования к разработчикам писатьQANotes.Там указывается:

  1. Что было сделано.

  2. Что могло быть задето.

  3. Приложены скриншоты или видео.

  4. На какой среде удалось проверить.

  5. Для багаещёпричина, из-за чегосломалось(в идеалетикет, которыйпривёл к такому поведению).

QANotesпозволили значительно ускоритьтестированиеиревьюкода. А ещёдали нам скрытый бонус:пропалиреопеныотQAиз-закрешейна старте.

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

Автотестыраньше находят баги. Теперь не надо ждатьрелизноготестирования, чтобы увидеть проблемы после интеграции. Прогоныавтотестовпроисходят после каждоговливания эпика вdev,а такжекаждуюночь. Еслинадо, то можно запустить на эпик-веткедо вливания вdev. Раньше нашли баг раньше исправили.

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

А еще добавиласьротируемаяроль QAза релиз.Этоттестировщикгде-то раз вдватримесяцаделаетповторяющиесявещи:

  1. Составляет наборрелизныхтестов.

  2. Распределяет нагрузку команды тестирования пофичам. Если видит, что у одних сейчас малотикетов, а другие не успевают может перекинуть кого-то в помощь.

  3. Напоминаеттестировщикампосмотретьотчёты поавтотестамнарелизномбилде.

  4. Пушитпересборкурелиз-кандидатов, если что-то добавилось.

  5. После релиза неделюмониторитпаденияи отвечает на запросы поддержки.

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

Автоматизация помогает контролировать стабильность среды с помощью выполнения тестов после изменения кода приложения:

Мы также проверяем, что новыеавтотестыне ломают существующие:

Новая схема релиза мобильных приложений

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

Теперь мы спокойнее переносимфичи. Неприятно, когда не успели, но перенос выхода фичи на неделю воспринимается спокойнее, чем на более долгий срок.

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

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

Какиеестьсложности

В первую очередь этонепростойрефакторинг. Когдавмерживодинкоммит, вам надо перепроверить всёприложение.Сейчас мы прежде всеговливаемтакое по понедельникам-вторникам, чтобырефакторингмаксимально настоялся вdev, накрутилсяавтотестамии был потроган при тестированиифичей.

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

Что ещёможно улучшить

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

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

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

  1. Строгие требования к готовностифичи.

  2. Приоритет напереоткрытыхтикетах.

  3. Весь функционалзакрытфичефлагами.

  4. Строгое расписание релизов.

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

Подробнее..

Vivaldi 3.4 Игры со временем

15.10.2020 10:04:28 | Автор: admin
image

Привет Хабр!

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

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

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

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

Vivaldi для ПК


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



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



Не секрет, что самая высокая экономия времени достигается с помощью автоматизации. Если дать задачу машине выполнять рутинные действия без участия человека освободившееся время можно потратить на другие дела. Браузер это, конечно, не робот, но и он кое-что может. Например, в данной версии Vivaldi появилась возможность назначить автоматическое обновление веб-страницы с определённой периодичностью. Теперь не придётся тратить время на ручное обновление страницы, чтобы увидеть изменения курса валют, и онлайн-банк не закроет сессию, если вы заболтались по телефону.



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

Мы немного добавили искусственного интеллекта в функцию размещения. Теперь порядок приоритетности будет выглядеть следующим образом: если вы активируете функцию размещения (кнопкой, жестом, комбинацией клавиш), то в первую очередь браузер будет пытаться разместить выбранные вкладки; если таковых не имеется браузер разместит в одном окне активную группу вкладок; если в данный момент нет никаких активных групп на горизонте, браузер разместит в одном окне текущую активную вкладку и предыдущую активную вкладку. Таким образом, если вы посмотрели одну страницу с товаром и перешли к другой странице с подобным товаром, а затем решили их сравнить, разместив в одном окне, вам не нужно дополнительно тратить время на выделение двух вкладок. Вы просто активируете функцию размещения удобным вам способом.

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

И ещё одно улучшение хоть и не ускорит работу в браузере, но тоже добавит маленькую крупинку радости в песочные часы пользовательского комфорта. Теперь можно установить в качестве картинки профиля любое изображение с локального компьютера. Ходят слухи, что работают даже анимированные картинки:



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

Полный список изменений в десктопной версии вы можете посмотреть здесь, свежую версию загрузить со страницы загрузки, а мы пока перейдём к знакомству с новой мобильной версией

Vivaldi 3.4 для Android


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

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



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

И ещё мы немного изменили главное меню адаптировали его под новый интерфейс.



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

Как мы спасли динозавра


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

В очередные кухонные посиделки Бьёрн Йонссон из Porcelain Fortress, тихо размышлявший о чём-то своём с кружкой кофе в руке, задумчиво произнёс:

Ну, в этом же нет смысла

Мы насторожились Бьёрн никогда не говорил чего-то просто так. Немного помолчав он продолжил:

Кактусы это больно

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

Динозавры так не прыгают.

Ход мыслей Бьорна нас озадачил мы начали искать связь между кактусами и динозаврами, а Бьорн тем временем допил свой кофе и завершил разговор ещё более странной фразой:

С этим надо что-то делать.

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

А через несколько дней он пришёл на кухню уже с ноутбуком и показал нам новую игру, которую он задумал для нашего браузера. Она предназначалась для замены штатной игры Chromium, которая предлагалась пользователям при отсутствии подключения к сети да, тот самый Ти-Рекс, скачущий через кактусы. Бьёрн сказал, что гонка динозавра не имеет цели, а в хорошей игре всегда должен быть смысл. И ещё игра должна быть красивой. И он ещё много чего говорил, с чем мы все были согласны.

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

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



На упрощённый с помощью кнопки в центре экрана:



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

На этом всё, всем спасибо за помощь в подготовке новых версий браузера и ждём ваших отзывов и пожеланий. Мобильная версия доступна в Google Play Store.



P.S. Скриншоты с результатами можно публиковать в комментариях такое мини-состязание. Кстати, в игре можно увидеть Йона фон Тэчнера нашего директора. Кто его первый увидит получит подарок от нас.
Подробнее..

В МойОфис появилась поддержка средств российской криптографии

13.11.2020 12:14:13 | Автор: admin


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

Одновременно вышел новый релиз 2020.02.R2: таблицы стали открываться быстрее в 8 раз, улучшены почтовые и календарные системы, добавлены функции работы с фигурами и сводными таблицами, а также расширен состав комплекта средств для разработчиков. Читайте подробности под катом, и да, все скриншоты кликабельны.


Хабр, привет! Меня зовут Лина Удовенко, я возглавляю департамент коммуникаций МойОфис. Пару дней назад мы опубликовали новый релиз МойОфис, который уже доступен нашим партнерам и пользователям. За последние три месяца команда разработки провела большую работу и смогла существенно увеличить функциональность коммерческих продуктов. Теперь МойОфис поддерживает отечественные сертифицированные средства криптографической защиты информации (СКЗИ) в почтовых приложениях и редакторах документов на любых платформах настольных компьютерах, мобильных устройствах и в веб-браузерах.

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

Поддержка российской криптографии


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

Для реализации отечественных криптоалгоритмов выбрана линейка продуктов КриптоПро, как наиболее распространенная на территории РФ, особенно в органах государственной власти и крупных коммерческих структурах. Продукты КриптоПро поддерживают широкий спектр носителей ключевой информации и все операционные системы, на которых работает МойОфис.

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

Защита каналов связи


В продуктах МойОфис появилась поддержка российских криптографических алгоритмов при использовании протокола TLS (Transport Layer Security), который необходим для надежной защиты информации при передаче данных по публичным сетям.



Такая функция позволяет при использовании сертифицированных средств криптографической защиты информации реализовать выполнение требований законодательства РФ в части защиты каналов связи.

Шифрование и электронная подпись почтовых сообщений


Для обеспечения подтверждения авторства, целостности и конфиденциальности сообщений электронной почты применяется наиболее распространенный стандарт S/MIME, в котором была реализована поддержка российских криптоалгоритмов.



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



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



В профиле пользователей приложения МойОфис Контакты добавлен раздел Безопасность, где отображается информация о сертификате пользователя.

МойОфис Почта


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



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



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

Редакторы документов


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



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

Подробнее..

До 40 релизов в день в Enterprise наша сool story

17.06.2021 12:20:28 | Автор: admin

Пару слов о нас: мы команда банка Открытие, которая отвечает за разработку всех розничных фронтов от рабочего места сотрудника в отделении до мобильных приложений физических лиц. В последние пару лет мы переживаем взрывной рост в несколько раз у нас более 400 сотрудников ИТ и мы продолжаем расти и расти. Как оказалось, многие решения, которые были приняты на старте нашей работы, оказались верными. И о некоторых из них мы вам расскажем. Готовы? Поехали!

Один из вопросов на старте цифровой трансформации банка был таким: как нам хранить исходный код используя монорепозиторий для хранения всех миросервисов или много репозиториев? Мы выбрали такой подход: для каждого приложения, библиотеки или микросервиса создаем отдельный репозиторий.

В рамках дискуссий внутри команды для нас было очевидно, что:

  • Монорепоэто решение, которое невзлетает из коробки, так как у нас банально много кода (на сегодня его около 100 GB), который просто будет долго выкачиваться к себе на локальную машину изрепозитория;

  • Когда мы попытаемся открыть такой огромный проект вIDE, она скорее всего приляжет;

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

  • Оставался открытым вопрос разграничения доступа внутрирепозитория(большие компании, которыепиарилиподход смонорепонесколько лет назад,решали этокастомнымсамописом, который разграничивал доступ, например, на уровне папок);

  • Очевидным плюсом было удобстворазруливаниязависимостей (в одномрепозиторииэто можноконтролировать на уровне кода). Так чтоесли отказываться отмонорепозитория, то надо было придумать как решить эту проблему.

Кирпичики, из которых складывается наше решение

Учитывая номер версии МАЖОРНАЯ.МИНОРНАЯ.ПАТЧ, следует увеличивать:

  1. МАЖОРНУЮ версию, когда сделаны обратно несовместимые изменения в работе сервиса;

  2. МИНОРНУЮ версию, когда вы добавляете новую функциональность, ненарушая обратной совместимости;

  3. ПАТЧ-версию, когда вы делаете какие-то внутренние исправления в работе сервиса, которые никак не меняют внешние контракты.

Дополнительные обозначения дляпредрелизныхибилд-метаданных возможны как дополнения к МАЖОРНАЯ.МИНОРНАЯ.ПАТЧ формату.

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

  • Публикация контрактов

В конвейер сборки сервисов внедрен процесс генерации и публикации контрактов, в которых однозначно описан интерфейс взаимодействия с ними. Доменные сервисы общаются с внешними потребителями наружу черезGraphQL(на самом деле у нас500+ сервисов, которые поделены на доменные группы, наподобие модной нынче и активно продвигаемойdomainorientedmicroservicearchitecture(DOMA). У каждой доменной группы есть только один внешнийGraphQLфасад, а внутри сервисы общаются поRabbitMQ, но для простоты понимания рассмотрим только пример с доменными сервисами). Сам контракт представляет из себя SDL схему, котораягенеритсяпри помощи стандартного функционала из коробкибиблиотекиqraphql-dotnetпри помощи утилитыgraphql-sdl-exporter. На самом деле утилиту мы написали сами, но решили ей поделиться и выложили еев паблик.

Что происходит после коммита:

Весь процесс контроля автоматизирован и встроен в конвейер сборки.

Шаги:

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

  2. После из этого контракта (SDL схемы) при помощи утилит специфичных для каждого языка генерируются клиенты для различных потребителей на их языках, которые представляют собой пакеты, хранящиеся в репозитории пакетного менеджера. В нашем случае это NuGet, NPM, Graddle для .Net, JS и Java соответственно. В качестве инструмента для хранения и управления пакетов используется Arfifactory. Версия контракта (сервиса-поставщика) соответствует версии пакета. Например, сервис Payments версии 2.1.3 имеет контракт версии 2.1.0 (не 2.1.3, т.к. перегенерация для версий от 2.1.1 и выше не требуется, а потребуется только для 2.2.0).

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

    Очень важный момент: Для feature веток и ветки master существуют различные хранилища пакетов: Release для master, Snapshot - для feature-веток. Причем из ветки master нет доступа к пакетам из Snapshot.

Рассмотрим пару примеров, которые продемонстрируют работу такого подхода.

Пусть сервис Accounts версии 4.7.2 потребляет сервис Payments версии 2.1.3 (обращается к нему, используя контракт в виде nuget пакета версии 2.1.0). Появилась необходимость добавить новую фичу в сервис Payments.

Вариант 1:

Допустим, что доработка сервиса Payments будет содержать обратно совместимые изменения. Тогда потребуется увеличить его минорную версию и после доработки она станет 2.2.0, что приведет к перегенерации контракта и клиентов для сервиса Payments, которые тоже станут версии 2.2.0.

Когда разработчиксервиса Payments Вася сделает коммит в свою feature ветку, увеличив версию сервиса, в хранилище Snapshot появятся новые клиенты для сервиса Payments. Разработчик сервиса Accounts Петя сможет обновить свой пакет для работы с сервисом Payments до версии 2.2.0 с новой функциональностью, сможет ей воспользоваться и реализовать свою логику работы с Payments в своей feature ветке своего репозитория.

Пока Вася доводит свой функционал до идеала, Петя допиливает свою функциональность, которая теперь зависит от версии Payments 2.2.0 и подливает свои изменения в ветку master, что в нашем случае приводит к инициации процесса релиза сервиса Accounts на прод. В процессе сборки сервис Accounts пытается разрешить свои зависимости и, в частности, получить новую версию пакета для работы с Payments 2.2.0 из хранилища Release (напомню, что master смотрит только туда), где его нет. Сборка падает с ошибкой. Автоматический контроль сработал. Петя идет к Васе, просит его побыстрее раскатать на прод новую версию сервиса Payments, после чего катит свою новую версию Accounts.

Вариант 2:

В сервисе Payments необходимо сделать обратно несовместимые изменения. Вообще мы такое категорически не приветствуем, но иногда такая необходимость возникает. Вася знает о своих потребителях (откуда скажем позже), он пишет письма ответственным и предупреждает всех о том, что собирается ломать обратную совместимость и увеличить версию своего сервиса до 3.0.0. В день Икс Вася опубликует версию Payments на тестовый контур и ждет результатов интеграционных тестов. У тех, кто не готов к обновлению сервиса Payments, попадают Beta тесты и тестовый контур станет неработоспособным в той части, которая потребляет сервис Payments. Новые контракты Payments при этом будут лежать в Snapshot. Вася не обновляет master-ветку, пока все потребители Payments не обновят свои версии пакетов для работы с Payments и не будут готовы синхроннос ним (сразу после него) раскататься на бой.

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

Кстати, информация о том, кто использует клиента к сервису позволяет построить карту зависимостей системы и визуализировать ее в виде графа.

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

Подробнее..

IntelliJ IDEA 2020.2

27.08.2020 18:04:37 | Автор: admin
Привет, Хабр!

Недавно состоялся релиз IntelliJ IDEA 2020.2! В новой версии много нового: теперь можно полноценно управлять пул-реквестами GitHub из IDE и просматривать все ошибки и предупреждения в проекте с помощью виджета Inspections. Работать с несовершенным кодом помогает также новое окно Problems, в котором можно увидеть подробное описание ошибок и быстро их исправить. Если вы вносите изменения, которые мешают работе другого кода, IDE сообщит вам об этом в подсказке Related Problems.

Кроме того, IntelliJ IDEA 2020.2 поддерживает Jakarta EE и предоставляет новые возможности для работы с Quarkus, Micronaut, Amazon SQS API и OpenAPI.


В разделе Whats New на сайте подробно описаны все изменения, но здесь мы собрали самое важное.


image

Java


  • Мы заранее подготовились к релизу Java 15 в сентябре, поэтому в IntelliJ IDEA 2020.2 можно работать с записями, запечатанными классами и текстовыми блоками.
  • Если изменение Java-метода или поля привело к ошибкам в других файлах, IDE сообщит об этом. Нажмите на подсказку и увидите список ошибок, которые можно сразу исправить.
  • При помощи статического анализа IDE определяет, какое выражение вызвало исключение во время работы приложения.
  • Из структурного поиска можно легко создать инспекцию с описанием и уровнем важности.
  • Рефакторинг Introduce Variable работает более гибко: теперь можно заменить только вхождения выражения внутри условия или цикла (раньше можно было заменить либо одно, либо все вхождения).
  • Когда вы вызываете метод Stream API на коллекции/массиве, IDE автоматически подставляет stream(). Кроме того, в цепочках вызовов автодополнение предлагает методы нужного типа.
  • Новое действие разрешает преобразовать цепочку вызовов Optional в цепочку if-выражений.
  • Вы можете свернуть несколько однотипных операторов в цикл, а intention-действие Unroll loop теперь разворачивает больше циклов, запрашивая количество итераций у анализатора потока данных.
  • Чтобы шаблоны live templates для Java было проще найти, мы сгруппировали их под отдельным узлом в Settings | Preferences / Editor / Live Templates.
  • Благодаря анализу потока данных, IDE сообщает о нетривиальных выражениях, которые вычисляются в 0, и предупреждает о ненужных сравнениях, в которых результат Math.min или Math.max не бывает больше или меньше другого операнда.

Редактор


  • Добавили виджет Inspections, который показывает, сколько предупреждений и ошибок найдено в вашем файле, и позволяет легко перемещаться между ними.
  • В новом окне Problems можно посмотреть список предупреждений и ошибок с описаниями и быстро исправить проблемный код.
  • Теперь можно заранее посмотреть, как будет выглядеть код после применения быстрого исправления (quick-fix).

Система контроля версий


  • Все действия по обработке пул-реквестов GitHub доступны прямо из IDE. Вы можете просматривать, назначать и объединять пул-реквесты, читать комментарии (как в хронологии, так и в коде), отправлять комментарии и ревью, а также принимать изменения.
  • Для работы над проектами в файловых системах Linux или Windows, можно пользоваться Git, установленный в WSL2.
  • Появилась возможность удалять коммиты, выбирать несколько коммитов из локальной ветки и объединить их в один на вкладке Log.
  • При сравнении двух веток в IntelliJ IDEA все коммиты отображаются в одном окне.
  • Вместо авторизации в GitHub по паролю теперь используется авторизация по протоколу OAuth.

Фреймворки и технологии


  • В сентябре выходит Jakarta EE 9, и IntelliJ IDEA уже поддерживает основные технологии, включая CDI, JPA, Batch, Bean Validation, JSF, JAX-RS, WebSocket, Servlets, JSP, JSON-P, JSON-B, Security, EJB и JTA.
  • Теперь можно создавать проекты Java EE 8 и Jakarta EE 9 в обновленном мастере проектов.
  • Подсветка кода и автодополнение работают для файлов конфигурации .properties и YAML в проектах Quarkus.
  • IDE позволяет переходить от файлов свойств Quarkus к настроенным bean-компонентам и обратно, а также от Java-кода к файлам свойств.
  • В редакторе предусмотрена навигация по встроенным bean-компонентам. Кроме того, мы обновили инспекции для работы с упрощенным синтаксисом Quarkus.
  • В тестах REST Assured теперь работает автодополнение URL-адресов и навигация к соответствующим ресурсам.
  • В IDE появилась интеграция с интерфейсом Swagger.
  • IntelliJ IDEA теперь показывает структурные различия между спецификациями OpenAPI.
  • Можно создавать проекты Micronaut в мастере создания проектов.
  • Для приложений Micronaut и Amazon SQS API, в которых используется асинхронная обработка данных через RabbitMQ или Kafka, теперь работает автодополнение имен, поиск использований, и навигация по очередям и темам с помощью значков на поле редактора.
  • IntelliJ IDEA может автоматически генерировать HTTP-запросы JAX-RS и MicroProfile и открывать их во встроенном REST-клиенте.
  • Selenium-плагин поддерживает интеграцию с Selenoid. Теперь прямо из файла browsers.json можно запустить новое тестовое окружение.

Профилировщик


  • Мы улучшили инструмент просмотра дампов памяти HPROF. Теперь для каждого объекта возможно увидеть количество памяти, которое он не дает освободить; пути до ближайших корневых объектов сборщика мусора; дерево доминаторов (удерживаемые от удаления объекты); а также обратные ссылки из других объектов.

Взаимодействие с IDE


  • С помощью нового плагина Shared Indexes можно загружать уже построенные индексы, вместо того чтобы создавать их локально. Это ускорит индексирование больших проектов на 6075%.
  • Во время индексирования теперь работает автодополнение для Java и PHP.

Терминал


  • Управлять IDE можно прямо из терминала. Если команда подсвечена в терминале, нажмите Cmd/Ctrl+Enter, чтобы открыть соответствующий инструмент в графическом интерфейсе IDE. Читайте, как это работает в нашем блоге.

Инструменты сборки


  • Maven Wrapper теперь автоматически устанавливает версию Maven, необходимую для вашего проекта.
  • Раньше было обязательно использовать одну и ту же версию Maven во всех открытых проектах, а, начиная с этого релиза, можно выбирать нужную для вашего проекта.
  • Теперь вывод встроенного инструмента сборки отображается в окне Build, там же, где обычно вы видите результаты сборок Gradle и Maven.
  • IntelliJ IDEA 2020.2 поддерживает автодополнение имен проектов и навигацию от имени проекта к файлам build.gradle.

JavaScript и TypeScript


  • Новые intention-действия (Alt + Enter) помогут ускорить некоторые операции. Например, можно быстро преобразовать цикл for с числовым индексом в перебирающий метод forEach.
  • Теперь очень легко использовать Prettier в качестве форматера по умолчанию в JavaScript-проектах: просто отметьте галочкой опцию On code reformat в настройках.
  • Мы добавили поддержку Nuxt.js и настройки стиля кода, специфичные для Vue.

База данных


  • Теперь можно просматривать и редактировать длинные значения на отдельной панели в режиме Maximize.
  • Работать с ячейками типа boolean стало гораздо удобнее, потому что вы видите в них значения, а не флажки.
  • Результаты запросов к базе данных можно увидеть в редакторе.
  • Мы добавили начальную поддержку диалекта Google BigQuery. IDE обеспечивает подсветку и автодополнение запросов.

Docker


  • Благодаря поддержке TLS-соединений с демоном Docker, пользователи Windows могут безопасно подключиться к Docker.

Kubernetes


  • В настройках Preferences/Settings | Build, Execution, Deployment | Kubernetes теперь можно указать кастомный файл kubeconfig.
  • Мы добавили поддержку редактирования ConfigMaps/Secrets. Более того, IDE берет информацию не только из текущего проекта, но и из кластера.
  • Для объектов ConfigMaps/Secrets и их ключей можно вызвать Find Usages из кластера.

Scala


  • Добавлен автоматический импорт Implicits.
  • В новой версии фигурные скобки добавляются и удаляются в зависимости от отступов.
  • В редакторе появились навигационные значки для компаньонов. Вы также можете перейти к компаньону, вызвав действие Go To на ключевых словах class, trait или object.
  • Мы сделали рендеринг Scaladoc прямо в редакторе и улучшили его во всплывающем окне Quick Documentation: абзацы, списки и макросы отображаются корректно.
  • Теперь можно сразу подставить и имя метода, и его аргументы, если в текущей области доступа присутствуют соответствующие значения.
  • Кроме того, вы можете применить статическую функцию к аргументу при помощи точечной записи, которая может использоваться в сочетании с алгебраическими типами данных.

Android


  • IntelliJ IDEA 2020.2 включает в себя все нововведения из Android Studio 4.0.

Другие изменения


  • Если вы используете программу чтения с экрана, IDE определит это и автоматически включит функции специальных возможностей.
  • В IntelliJ IDEA 2020.2 можно использовать эмодзи Unicode на Linux.
  • Значительно улучшена производительность удаленной отладки Java-проектов.
  • Мы перешли с JavaFX на JCEF (Chromium Embedded Framework). Начиная с версии 2020.2, больше не будет встроенной поддержки JavaFX, теперь она вынесена в отдельный плагин, который внешние плагины могут использовать в качестве зависимости.
  • У сочетания клавиш Alt+6 (Linux and Windows) / Cmd+6 (macOS) новое назначение: теперь вместо вызова TODO оно открывает окно Problems.
  • Начиная с этой версии, IntelliJ IDEA не поддерживает запуск и тестирование проектов, написанных на Java 5 и более ранних версиях. В редакторе поддержка Java 5 остается.

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


Скачивайте IntelliJ IDEA 2020.2 и работайте еще продуктивнее с новыми фичами!


Программируйте с удовольствием!

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru