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

Блог компании jetbrains

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.5 онлайн-мероприятие

14.05.2021 18:17:37 | Автор: admin

Недавно мы выпустили первое крупное обновление 2021 года. В честь этого события мы проведем онлайн-встречу, в ходе которой члены команды Kotlin ответят на ваши вопросы о недавних обновлениях и обо всем, что связано с Kotlin (на английском языке). Присоединяйтесь к нам 25 мая в 17:00 МСК.


Подробнее о самом мероприятии, о сессии Ask Me Anything (AMA) на Reddit, а также о том, как задать вопросы и выиграть футболку, читайте ниже.


image

Зарегистрироваться

Что мы для вас приготовили


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


Смотрите прямую трансляцию на нашем YouTube-канале. Ведущими будут два наших девелопер-адвоката: Светлана Исакова и Себастьян Айгнер. Они начнут с обзора новшеств в Kotlin 1.5.0 и поговорят с Романом Елизаровым о перспективах Kotlin. Присоединяйтесь будет интересно!


Как принять участие в сессии вопросов-ответов и Reddit AMA


Чтобы мероприятие прошло с максимальной пользой, присылайте свои вопросы команде заранее. Их можно отправить при регистрации или написать в Twitter с хештегом #kotlin15ask. Кроме того, вопросы можно будет задавать в чате прямой трансляции на YouTube если у вас нет вопросов сейчас, они могут появиться уже в ходе встречи.


Мы постараемся ответить на все вопросы: и на подготовленные заранее, и на те, что будут заданы в прямом эфире. Все, о чем мы не успеем поговорить до конца мероприятия, обязательно обсудим с 27 по 28 мая на сессии AMA на Reddit. Чтобы не пропустить уведомление об AMA, поставьте галочку в регистрационной форме или подпишитесь на сабреддит r/Kotlin.


Дополнительная информация и розыгрыш лотереи


Нет вопросов? Они появятся, когда вы посмотрите наши материалы о выходе Kotlin 1.5.0:


  1. Статья в блоге и раздел Что нового.
  2. Плейлист на YouTube с видеообзорами самых заметных новшеств в Kotlin 1.5.0. Подписывайтесь на наш канал там скоро появятся новые видео о Kotlin 1.5.0.

Все, кто пришлет нам свои вопросы заранее, примут участие в розыгрыше 10 футболок Kotlin. Победители будут объявлены во время мероприятия. Мы свяжемся с ними, чтобы организовать доставку выигранного приза.


Участвуйте в онлайн-мероприятии, посвященном Kotlin 1.5, и присылайте свои вопросы!



Ваша команда Kotlin
The Drive to Develop
Подробнее..

KotlinDL 0.2 Functional API, зоопарк моделей c ResNet и MobileNet, DSL для обработки изображений

25.05.2021 12:05:50 | Автор: admin

Представляем вам версию 0.2 библиотеки глубокого обучения KotlinDL.

KotlinDL 0.2 теперь доступен на Maven Central (до этого он лежал на bintray, но закатилось солнышко земли опенсорсной). Появилось столько всего нового: новые слои, специальный DSL для препроцессинга изображений, новые типы датасетов, зоопарк моделей с несколькими моделями из семейства ResNet, MobileNet и старой доброй моделью VGG (рабочая лошадка, впрочем).

В этой статье мы коснемся самых главных изменений релиза 0.2. Полный список изменений доступен по ссылке.

Functional API

Прошлая версия библиотеки позволяла описывать нейронные сети лишь при помощи Sequential API. Например, используя метод Sequential.of(..), вы могли легко описать модель как последовательность слоев и построить VGG-подобную модель.

Однако с 2014 года (эпохи взлета и расцвета подобных архитектур) много воды утекло, и было создано множество новых нейросетей. В частности, стандартным подходом стало использование так называемых остаточных нейросетей (Residual Neural Networks или ResNet), которые решают проблемы исчезающих градиентов (vanishing gradients) и, напротив, взрывающихся градиентов (exploding gradients) а значит, и проблемы деградации обучения нейросети. Подобные архитектуры невозможно описать в виде Sequential API их корректнее представлять в виде направленного ациклического графа (Directed Acyclic Graph). Для задания таких графов мы добавили в версии 0.2 новый Functional API, который позволяет нам описывать модели, подобные ResNet или MobileNet.

Ну что же, давайте построим некое подобие ResNet. Нейросеть будет обучаться на датасете FashionMnist (небольшие изображения модных вещей). Черно-белые изображения размером 28х28 отлично подойдут на старте работы с нейросетями.

val (train, test) = fashionMnist()val inputs = Input(28, 28, 1)val conv1 = Conv2D(32)(inputs)val conv2 = Conv2D(64)(conv1)val maxPool = MaxPool2D(poolSize = intArrayOf(1, 3, 3, 1),strides = intArrayOf(1, 3, 3, 1))(conv2)val conv3 = Conv2D(64)(maxPool)val conv4 = Conv2D(64)(conv3)val add1 = Add()(conv4, maxPool)val conv5 = Conv2D(64)(add1)val conv6 = Conv2D(64)(conv5)val add2 = Add()(conv6, add1)val conv7 = Conv2D(64)(add2)val globalAvgPool2D = GlobalAvgPool2D()(conv7)val dense1 = Dense(256)(globalAvgPool2D)val outputs = Dense(10, activation = Activations.Linear)(dense1)val model = Functional.fromOutput(outputs)model.use {it.compile(optimizer = Adam(),loss = Losses.SOFT_MAX_CROSS_ENTROPY_WITH_LOGITS,metric = Metrics.ACCURACY)it.summary()it.fit(dataset = train, epochs = 3, batchSize = 1000)val accuracy = it.evaluate(dataset = test, batchSize = 1000).metrics[Metrics.ACCURACY]println("Accuracy after: $accuracy")}

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

Некоторые не любят сухие отчеты и предпочитают диаграммы. В нашем случае диаграмма типична для всех представителей славного семейства ResNet.

Если вы знакомы с фреймворком Keras, то без особого труда сможете перенести модели, описанные при помощи Functional API, в Keras, используя KotlinDL.

Коллекция предварительно тренированных моделей ResNet и MobileNet

Начиная с релиза 0.2, в Kotlin DL появляется зоопарк моделей (или Model Zoo). По сути, это коллекция моделей с весами, полученными в ходе обучения на большом датасете изображений (ImageNet).

Зачем нужна такая коллекция моделей? Дело в том, что современные сверхточные нейросети могут иметь сотни слоев и миллионы параметров, обновляемых многократно в течении каждой итерации обучения. Тренировка моделей до приемлемого уровня точности (7080%) на таком большом датасете, как ImageNet, может занимать сотни и тысячи часов вычислительного времени большого кластера из видеокарт.

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

Доступны следующие модели:

  • VGG16

  • VGG19

  • ResNet50

  • ResNet101

  • ResNet152

  • ResNet50v2

  • ResNet101v2

  • ResNet152v2

  • MobileNet

  • MobileNetv2

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

Ниже вы видите пример загрузки одной из таких моделей (ResNet50):

// specify the model type to be loaded, ResNet50, for exampleval loader =ModelZoo(commonModelDirectory = File("cache/pretrainedModels"), modelType = ModelType.ResNet_50)// obtain the model configurationval model = loader.loadModel() as Functional// load class labels (from ImageNet dataset in ResNet50 case)val imageNetClassLabels = loader.loadClassLabels()// load weights if required (for Transfer Learning purposes)val hdfFile = loader.loadWeights()

Ну что же, теперь у вас есть сама модель и веса вы можете использовать их по вашему усмотрению.

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

Если вам не нужны предобученные веса, но вы не хотите описывать многослойные модели а-ля VGG или ResNet с нуля, у вас есть два пути: а) просто загрузить конфигурацию модели либо б) взять за основу полный код конструирования модели, написанный на Kotlin, он доступен для каждой из моделей через вызов функции высшего порядка, лежащей в пакете org.jetbrains.kotlinx.dl.api.core.model.

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

val model = resnet50Light(imageSize = 28,numberOfClasses = 10,numberOfChannels = 1,lastLayerActivation = Activations.Linear)

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

DSL для предобработки изображений

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

Большинство библиотек для предобработки изображений, найденные на просторах Github и имеющие разную степень заброшенности, так или иначе используют класс BufferedImage, оборачивая его более понятным и согласованным API. Мы решили упростить жизнь Kotlin-разработчиков, предложив им простой DSL, построенный на лямбда-выражениях и объектах-приемниках.

На данный момент доступны следующие функции преобразования изображений:

  • Load

  • Crop

  • Resize

  • Rotate

  • Rescale

  • Sharpen

  • Save

val preprocessing: Preprocessing = preprocess {   transformImage {       load {           pathToData = imageDirectory           imageShape = ImageShape(224, 224, 3)           colorMode = ColorOrder.BGR       }       rotate {           degrees = 30f       }       crop {           left = 12           right = 12           top = 12           bottom = 12       }       resize {           outputWidth = 400           outputHeight = 400           interpolation = InterpolationType.NEAREST       }   }   transformTensor {       rescale {           scalingCoefficient = 255f       }   }}

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

Если, экспериментируя с DSL, вы поймете, что некоторых функций вам не хватает, не стесняйтесь написать об этом в наш баг-трекер.

Новые слои

В релизе 0.2 появилось много новых слоев. В основном, это обусловлено тем, что они используются в архитектурах ResNet и MobileNet:

  • BatchNorm

  • ActivationLayer

  • DepthwiseConv2D

  • SeparableConv2D

  • Merge (Add, Subtract, Multiply, Average, Concatenate, Maximum, Minimum)

  • GlobalAvgPool2D

  • Cropping2D

  • Reshape

  • ZeroPadding2D*

* Спасибо Anton Kosyakov за имплементацию нетривиального ZeroPadding2D!

Кстати, если вы хотите добавить новый слой, вы можете самостоятельно реализовать его и создать пул-реквест. Список слоев, которые мы хотели бы включить в релиз 0.3, представлен набором тикетов в баг-трекере с пометкой good first issue и может быть использован вами как точка входа в проект.

Dataset API и парочка наследников: OnHeapDataset & OnFlyDataset

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

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

Этот метод хорош, когда оперативной памяти мало, а данных много. Но что, если оперативной памяти более чем достаточно? Это не такой уж редкий случай для задач переноса обучения: датасеты для дообучения могут быть не такими большими, как при тренировке моделей. Также можно получить некоторый прирост в скорости за счет того, что препроцессинг будет применен лишь один раз на этапе формирования датасета, а не при каждой загрузке батча. Если у вас достаточно оперативной памяти, используйте OnHeapDataset. Он будет держать все данные в оперативной памяти не нужно будет повторно считывать их с диска на каждой эпохе.

Набор встроенных датасетов

Если вы только начинаете путешествие в удивительный мир глубокого обучения, мы настоятельно рекомендуем вам строить и запускать ваши первые нейросети на широко известных датасетах, таких как MNIST (набор рукописных цифр), FashionMNIST(набор изображений модных вещей от компании Zalando), Cifar10 (подмножество ImageNet, насчитывающее 50 000 изображений) или коллекцию изображений кошек и собак со знаменитого соревнования Kaggle (по 25 000 изображений каждого класса различных размеров).

Все эти датасеты, как и модели из зоопарка моделей, вы можете загрузить в папку на вашем диске при помощи функций высшего порядка, таких как mnist() и fashionMnist(). Если датасет уже был загружен, заново по сети он грузиться не будет, а будет взят с диска.

Как добавить KotlinDL в проект

Чтобы начать использовать KotlinDL в вашем проекте, просто добавьте дополнительную зависимость в файл build.gradle:

repositories {    mavenCentral()}dependencies {    implementation 'org.jetbrains.kotlinx:kotlin-deeplearning-api:0.2.0'}

KotlinDL можно использовать в Java-проектах, даже если у вас нет ни капли Kotlin-кода. Здесь вы найдете пример построения и тренировки сверточной сети, полностью написанный на Java.

Если вы думаете, что в вашем проекте будет полезен Java API, напишите нам об этом или создайте PR.

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

Мы надеемся, что вам понравилась наша статья и новые возможности KotlinDL.

Хотите узнать больше о проекте? Предлагаем ознакомиться с Readme или со страничкой проекта на GitHub. А этот туториал поможет вам создать вашу первую нейросеть на Kotlin.

Если вам интересно, как устроен KotlinDL, как он появился и в каком направлении развивается, почему он так похож на Keras, и планируется ли поддержка PyTorch, посмотрите свежее видео от Алексея Зиновьева.

Также мы ждем вас в Slack-канале #kotlindl (инвайт можно получить тут). В нем вы можете задавать вопросы, участвовать в дискуссиях и первыми получать информацию о превью-релизах и новых моделях в зоопарке моделей.

Ваша обратная связь, ваши описания багов и краш-репорты, идеи и комментарии все это очень важно для нас. Мы ждем новых пользователей и контрибьюторов, как начинающих, так и опытных исследователей всех, кому интересны Deep Learning и Data Science на Kotlin, Java и Scala!

Подробнее..

JetBrains Academy платформенные обновления, любимые проекты пользователей и годовая подписка

17.06.2021 14:15:17 | Автор: admin

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

Cо времен нашего последнего поста в JetBrains Academy изменилось довольно много: мы выпустили важные обновления платформы, опубликовали множество новых проектов и тем, а также ввели годовую подписку! Кроме того, мы проанализировали наши проекты и составили рейтинг лучших из них по мнению наших пользователей. Ниже мы расскажем обо всем этом подробнее.

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

Платформенные обновления

Обновления в JetBrains Academy происходят практически ежедневно от небольших изменений в интерфейсе для более комфортной и эффективной работы до новой функциональности. Ниже мы описываем наиболее важные изменения с точки зрения пользователя JetBrains Academy.

  • Появилось два подготовительных трека для пользователей, только начинающих свое знакомство с программированием: Python for Beginners и Preparing for the AP Computer Science. Первый поможет сделать первые шаги в изучении Python, второй в изучении Java. После их прохождения вам будет легче перейти на треки Python Developer и Java Developer. Обратите внимание, что трек Preparing for the AP Computer Science находится на ранней стадии разработки и доступен бесплатно.

  • Мы создали два новых трека для более подробного изучения отдельных концепций Java и Python. Java Desktop Application Developer подойдет для совершенствования навыков написания десктопных приложений на Java. Natural Language Processing научит работе с текстовыми данными с помощью Python. Обратите внимание, что треки находятся на ранней стадии разработки и доступны бесплатно.

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

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

    Аналитика обучения пользователя JetBrains Academy Аналитика обучения пользователя JetBrains Academy
  • Появились персональные бейджи виртуальные награды за успешное обучение и помощь пользователям. Среди них: Committed Learner, Brilliant Mind, Helping Hand, Sweetheart и многие другие.

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

    Карта знаний. Раздел Computer science > Programming languages > Java > Code organization > Code styleКарта знаний. Раздел Computer science > Programming languages > Java > Code organization > Code style
  • Для ознакомления с JetBrains Academy теперь предлагается экскурсия, разъясняющая новым пользователями термины и концепции, которые важно знать при обучении на платформе.

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

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

    Возможные действия при работе с комментариями пользователей JetBrains AcademyВозможные действия при работе с комментариями пользователей JetBrains Academy

Любимые проекты пользователей

Со времен нашего прошлого поста мы добавили более 50 новых проектов, 300 тем и получили более 280 тысяч комментариев пользователей! Мы проанализировали любимые проекты наших пользователей и составили из них рейтинг тех, которые оказались наиболее полезными, увлекательными и простыми в понимании среди более чем 110 других проектов.

Java Developer

  1. Проект Simple Banking System. Работая над упрощенной версией банковской системы, вы изучите основы SQL и познакомитесь с алгоритмом Луна, помогающим избежать ошибок при вводе номера банковской карты.

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

  2. Проект Tic-Tac-Toe with AI. Напишите собственную игру в крестики-нолики и сыграйте в нее с компьютером! Работая над этим проектом, вы узнаете о планировании и разработке сложных программ с нуля, научитесь использовать классы, объекты и методы в Java, обрабатывать ошибки и осуществлять ввод данных.

    Что отмечают пользователи: интересное применение рекурсии, углубленное ООП, знакомство с алгоритмом Минимакс.

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

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

Python Developer

  1. Проект Simple Banking System. Работая над упрощенной версией банковской системы, вы изучите основы SQL и познакомитесь с алгоритмом Луна, помогающим избежать ошибок при вводе номера банковской карты.

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

  2. Проект Rock-Paper-Scissors.Предлагаем вам создать усовершенствованную версию игры камень-ножницы-бумага камень-ножницы-бумага-ящерица-спок а затем сыграть в нее против компьютера! Это хорошая тренировка навыков написания алгоритмов, работы с массивами, модулем random и форматированием строк.

    Что отмечают пользователи: работа с файлами и коллекциями.

  3. Проект To-Do List.Создайте свой список дел для управления повседневными задачами! Создавая эту программу, вы потренируетесь работать с циклами и условными операторами, а также изучите основы SQLAlchemy.

    Что отмечают пользователи: знакомство с базами данных через SQLAlchemy.

Kotlin Developer

  1. Проект Parking Lot. В рамках этого проекта предлагаем вам создать собственную программу по управлению парковкой, которая будет сообщать о количестве свободных и занятых мест. Вы узнаете и закрепите основы программирования на Kotlin: ввод и вывод консоли, циклы и условные операторы. Также вы научитесь использовать списки и применять к ним различные операции.

    Что отмечают пользователи: практика ООП, особенно классов данных.

  2. Проект Tic-Tac-Toe. Напишите собственную игру в крестики-нолики и сыграйте в нее с компьютером! Работая над этим проектом, вы узнаете о планировании и разработке сложных программ с нуля, научитесь использовать классы, объекты и методы в Java, обрабатывать ошибки и осуществлять ввод данных.

    Что отмечают пользователи: отличная проработка основ Kotlin.

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

    Что отмечают пользователи: детальное знакомство со структурами данных и регулярными выражениями.

Годовая подписка

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

В декабре мы объявили о введении годовой подписки на JetBrains Academy. Ее стоимость равна пяти месяцам ежемесячной подписки! Теперь, в зависимости от целей и сроков обучения, вы можете воспользоваться наиболее удобной для вас формой подписки. Оформить ее можно на странице подписки вашего профиля на JetBrains Academy или на нашем сайте.

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

Мы всегда рады вашим комментариям здесь, в Twitter, Facebook и на Reddit! Они помогают нам развивать функциональность JetBrains Academy и делать проекты более качественными, полезными и увлекательными.

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

Ваша команда JetBrains Academy

Подробнее..

GoLand 2020.3 дамп горутин, запуск табличных тестов, расширенная поддержка Testify

30.12.2020 16:07:24 | Автор: admin

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

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

Что нового:

  • Дамп и фильтрация горутин в отладчике

  • Точечный запуск табличных тестов

  • Расширенная поддержка Testify фреймворка

  • Поддержка пакета time

  • Улучшения в UI

  • Обновления для веб-разработки

  • Обновления для работы с базами

  • Сервис для совместной разработки и парного программирования

Кстати, узнать о новой функциональности в интерактивной форме можно прямо в IDE. Пройдите урок What's New in GoLand 2020.3 на экране приветствия.


Улучшения в отладчике

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

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

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

В настройках вы можете задать поведение отладчика при отключении: Stop remote Delve processes, Leave it running или указать, чтобы GoLand каждый раз предлагал вам эти опции.

Тестирование

Поддержка табличного тестирования

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

Ограничения:

  • Переменные должны быть срезом, массивом или словарем, которые определены в той же функции, что и вызов, и не использованы после инициализации (за исключением цикла for).

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

  • Выражение имени подтеста может быть строковым полем, конкатенацией строковых полей или вызовом fmt.Sprintf() с %s или %d.

Расширенная поддержка Testify

Если имя подтеста в тестовой функции является строковым значением, IDE позволит запустить suite.Run и suite.T().Run отдельно. Чтобы избежать повторного запуска всего теста, теперь можно перезапустить только подтест из окна Run.

В дополнение теперь можно запускать Testify наборы с одним и тем же методом отдельно внутри одного теста.

Когда вы пишете функцию или метод из пакетов testify/assert, testify/require, testify/mock и testify/suite, которые принимают testing.T в качестве первого аргумента, GoLand предложит для них автоматическое дополнение.

Инспекции кода

Инспекция кода Incorrect usage of Println/Printf like functions предупредит о потенциальных проблемах в пакетах github.com/pkg/errors, github.com/sirupsen/logrus и go.uber.org/zap.

Также мы добавили подсветку плейсхолдеров и свернутых кусков кода. Для генерации плейсхолдеров в форматных строках, вы можете воспользоваться intention-действием Add format string argument.

Инспекция кода context.CancelFunc is not called сообщает о небезопасной отмене контекстов. Это особенно полезно, когда функция отмены возвращаемая context.WithCancel или похожими по значению функциями, не была вызвана на одном из путей выполнения.

Узнать больше про этот пакет можно здесь.

Редактирование кода

Поддержка пакета time

Мы добавили поддержку пакета time, чтобы вам было проще работать с форматированием дат и времени. Автодополнение (Ctrl+Space) предложит элементы шаблонов для YYYY, MM, DD, определенных в стандарте ISO-8601.

Также мы добавили подсветку синтаксиса, а если нажать Ctrl+P на ключе, то IDE покажет его значение. Кроме того, автодополнение кода предлагает стандартные шаблоны дат из пакета time.

Работа с пакетами

IDE предложит первыми в списке автодополнения пакеты, которые вы часто используете или которые явно объявлены в файле go.mod текущего проекта.

Мы также добавили возможность полностью исключить пакеты из пути импорта и автодополнения. Это можно сделать с помощью Alt+Enter или в окне Exclude for import and completion в разделе Preferences/Settings | Go | Imports.

Поддержка для затененных переменных

GoLand 2020.3 помогает быстрее обнаружить затененные переменные. Во-первых, IDE подсвечивает такие переменные разными цветами. А во-вторых, действие Navigate to shadowing declaration мгновенно переключит фокус на затененное объявление.

Квадратные скобки для прототипа дженериков

Руководствуясь последним обновлением прототипа дженериков от команды Go, мы добавили поддержку квадратных скобок вместо круглых.

Обратите внимание, что поддержка Enable generics (experimental support for type parameters) отключена по умолчанию в Preferences/Settings | Go.

Читайте этот пост, чтобы узнать больше о параметрах-типах.

Другие улучшения

При вводе func в тестовом файле, GoLand предложит bench и test Live Templates в списке автодополнения.

Когда вы пишете for внутри бенчмарка, IDE предложит автодополнение в виде цикла с b.N.

Качественная проверка правописания

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

Code With Me

GoLand 2020.3 поддерживает Code With Me (Early Access Program) наш новый сервис для совместной разработки и парного программирования. С его помощью вы и ваша команда можете вместе работать над проектами из своих IDE.

Подробнее о Code With Me здесь.

Улучшения пользовательского интерфейса

Обновленное окно приветствия

Мы переработали окно приветствия (Welcome), чтобы предоставить вам мгновенный доступ к:

  • Поиску проектов

  • Настройкам IDE

  • Плагинам

  • Интерактивным урокам

Синхронизация темы IDE c системными настройками

Выберите опцию Sync with OS в Preferences/Settings | Appearance & Behavior | Appearance | Theme, чтобы синхронизировать тему IDE с настройками вашей операционной системы.

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

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

Панель Project

Мы улучшили UX при работе с файлами в панели Project. Выберите файл в панели и нажмите на пробел, чтобы IDE открыла вам его предварительный просмотр. При открытии файла из Project фокус автоматически переносится в редактор, чтобы сразу начать работу с кодом.

Открыть несколько файлов в редакторе одновременно теперь можно с помощью набора клавиш. Выберите файл в Project и нажмите Shift+Enter, чтобы IDE разделила окно редактора и открыла файл в его правой части.

Интеграция с системами контроля версий

Обновленное меню VCS

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

Поддержка Git staging

В новой версии появилась поддержка добавления содержимого рабочей директории в индекс (Git staging). Добавлять файлы можно из окна Commit, а также прямо из редактора.

Чтобы включить эту функциональность, выберите опцию Enable staging area в Preferences/Settings| Version Control | Git. Как только вы это сделаете, поддержка списка изменений будет отключена.

В интерфейсе вы увидите все измененные файлы в коммите (добавленные и не добавленные). Нажмите на значок +, чтобы добавить файлы в новый узел Staged. Вы также можете добавлять файлы на стейджинг через поле редактора или вкладку Show Diff.

Оптимизация работы с ветками

Список улучшений:

  • IDE автоматически корректирует недопустимые символы в именах новых веток.

  • GoLand показывает все действия, доступные для текущей ветки и любых других.

  • Для удаленных ветвей мы переименовали действия Merge into Current и Rebase Current onto Selected в Pull into Current Using Merge и Pull into Current Using Rebase.

Другое

Возможность включить плагин под проект

Мы добавили возможность включения плагинов для текущего проекта или всех проектов с помощью опций Enable for Current Project или Enable for All Projects. В Preferences/Settings | Plugins нажмите на значок шестерёнки на странице плагина, который вы хотите включить или выключить, и выберите нужную опцию.

Альтернативная macOS раскладка

Раскладка macOS System Shortcuts в (Preferences/Settings | Keymap) предоставляет альтернативную macOS раскладку. Она лучше совместима с системными шорткатами и меньше использует F-клавиши для часто используемых действий.

Улучшенный флейм-граф в профиляторе

Мы улучшили поиск по флейм-графу в профиляторе и его визуализацию. Вы можете нажать на иконку лупы или ввести запрос в поле поиска внутри панели.

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

Веб разработка

Быстрое создание React-компонентов

Благодаря команде WebStorm, GoLand предлагает вам комфортную среду для веб-разработки. Например, реализовать недостающие React компоненты стало проще. Поставьте курсор на нужный компонент, нажмите Alt+Enter и выберите нужный вариант.

Полная поддержка pnpm

GoLand 2020.3 полностью поддерживает менеджер зависимостей pnpm наряду с npm и yarn. Если у вас установлен pnpm и вы откроете проект с pnpm-lock файлом, GoLand поменяет менеджер зависимостей автоматически. Также мы добавили pnpm в список менеджеров зависимостей: Preferences/Settings | Languages and Frameworks | Node.js and NPM.

Базовая поддержка сложной конфигурации webpack

В GoLand 2020.3 можно выбрать между ручной и автоматической идентификацией конфигурационных файлов. Эту опцию можно найти в Preferences/Settings | Languages & Frameworks | JavaScript | Webpack.

Все изменения WebStorm попали в GoLand. Чтобы узнать больше о новой функциональности, посетите эту страницу.

Работа с базами данных

Поддержка Couchbase

Благодаря команде DataGrip, GoLand расширил семейство поддерживаемых баз данных. Встречайте Couchbase! Важно отметить, что IDE поддерживает Couchbase Query, а не Couchbase Analytics.

Права доступа

DataGrip теперь знает о правах доступа и показывает их в сгенерированном DDL для объекта. Это работает для MySQL, PostgreSQL, Greenplum, Redshift и SQL Server.

Редактор больших значений

Мы улучшили в редакторе несколько вещей:

  • Теперь он отображает отформатированное значение, даже если оно не отформатировано должным образом.

  • Если в ячейке хранится однострочный XML или JSON-файл, в редакторе значений он будет показан в отформатированном виде.

  • Если вам важна ширина экрана, передвиньте редактор вниз.

  • Еще в этом же редакторе отображаются картинки.

Импорт и экспорт

Мы добавили два новых формата, чтобы облегчить вам работу с данными:

  • One-Row копирует выделенные значения в одну строку через запятую.

  • SQL-Insert-Multirow генерирует один INSERT для нескольких строк.

Кроме того, в CSV-форматах появилась новая опция: never quote values.

Как и в случае с WebStorm, GoLand наследует весь пакет обновлений от DataGrip. Подробнее о новой функциональности для работы с базами данных можно узнать здесь.

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

По традиции напоминаю, что если вы уже используете IntelliJ IDEA Ultimate, то все возможности GoLand доступны прямо там, если установить этот плагин.

Спасибо за внимание!

Подробнее..

Представляем MPS 2020.3

11.01.2021 22:22:18 | Автор: admin

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


image

Новый макрос генератора


Мы добавили новый макрос $CALL-SITE$. Он упрощает вставку узла, на который указывает макрос SWITCH/CALL, в указанное место в вызванном шаблоне. Раньше узел с прикрепленным макросом SWITCH/CALL обычно игнорировался. Теперь, если вызванный template/switch пытается использовать call site node, то узел обрабатывается как обычный шаблон, и результат передается в вызванный template/switch как неявный аргумент, который можно вставить в желаемое место.


Вот как выглядит вызов шаблона reduce_Comment, служащего местом вызова шаблона reduce_MethodDeclaration:



Если мы заглянем в шаблон, увидим, что там есть call site node с оператором $CALL-SITE$ в теле метода:



Также теперь есть вызов переключателя reduce_Expressions, параметризованного узлом шаблона (вызов метода трассировки) с помощью макроса свойства и макроса ссылки (который обеспечивает то, что вызов метода указывает на правильное объявление метода в другом месте). Внутри переключателя $CALL-SITE$ заменяет вызов метода-заполнителя на тот, который является call site node:



В объявлениях шаблона и переключателя есть флаг, который специально переключается, чтобы указать, что должен использоваться call site node. Использовать макрос $CALL-SITE$ внутри шаблона/переключателя, который не указывает на необходимость получения $CALL-SITE$, будет ошибкой. Нет необходимости указывать явный аргумент в CALL/SWITCH генератор MPS может определить, нужен ли вызываемому шаблону/переключателю call site, и вычисляет шаблон, включая макросы, CALL/SWITCH перед обработкой.


Эта функциональность полезна в таких сценариях, как приведение условных типов, например в выражениях <strong>IF</strong> needCast (<strong>Type</strong>), ELSE

, или в преобразованиях, когда есть несколько источников выражения, которые могут служить входными данными, например switch { <strong>case</strong> <strong>Double</strong> : <strong>Double</strong>.valueOf(expression); <strong>case</strong> <strong>Integer</strong> : <strong>Integer</strong>.valueOf(expression, 16); }. Поэтому нецелесообразно иметь специальный переключатель/шаблон для каждого случая.

Динамическая подсветка в редакторе


В редакторе появилась долгожданная динамическая подсветка. Эта функция очень похожа на действие Highlight Usages (Ctrl/Cmd+Shift+F7). Разница в том, что динамическая подсветка срабатывает автоматически при вводе кода или навигации по нему. Ссылки на узел, находящийся под курсором, подсвечиваются в редактируемом документе практически сразу. Вы по-прежнему можете использовать действие Highlight Usages, чтобы видеть использования выбранного узла, когда навигируетесь в другое место. При этом динамическая подсветка продолжит выделять использования узла под курсором.


Функция включается и выключается в настройках редактора MPS (опция Highlight selected node).



Улучшенный switch-оператор в BaseLanguage


В дополнение к улучшениям в редакторе, концепт switch теперь поддерживает использование нескольких case для одного и того же оператора.



Полоса ошибки на панели Project


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



Изменения в обработке фасетов модулей


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


Улучшенная аннотация корня в VCS


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


Каждую ячейку в редакторе теперь можно аннотировать с помощью опции Annotate cells:


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



Вы можете выбрать версию в столбце Annotation, и MPS подсветит все ячейки, в которые были внесены изменения:



Отслеживание перемещенных узлов в окне Diff


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



Вы можете выбрать, следует отслеживать перемещенные узлы в окне Diff или нет:


Иногда порядок узлов одного уровня не имеет значения. Вы можете скрыть несущественные перестановки, используя новую опцию Hide Unordered Moves.


Обновленный начальный экран


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



Другие улучшения


Обновленное меню VCS


Меню VCS теперь называется в соответствии с той системой контроля версий, которую вы используете. Если у вас в проекте используется только Git, меню VCS будет выглядеть так:



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


Кнопка Commit and Push


Две самые популярные кнопки Commit и Commit and Push теперь отображаются в окне Commit. Вы можете запушить изменения в удаленный репозиторий сразу после коммита, и больше не нужно прокручивать раскрывающийся список, чтобы добраться до кнопки Commit and Push.


Улучшенные ветки


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


Удобное управление вкладками в редакторе


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


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


Хорошего дня и будьте здоровы!


Ваша команда MPS
The Drive to Develop

Подробнее..

Перевод Код-ревью в IDE интеграция между Space и IntelliJ IDEA 2021.1

08.04.2021 20:08:42 | Автор: admin

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

Вчера вышло обновление IntelliJ IDEA 2021.1. В него вошла интеграция с JetBrains Space, которая позволяет использовать любую IDE на платформе IntelliJ для код-ревью: назначать ревью и управлять ими, просматривать и добавлять комментарии, принимать изменения. Как это работает, мы подробно расскажем в этом посте.

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

Доступ к код-ревью и мердж-реквестам можно получить из браузера и десктопного приложения Space. А теперь также из IDE! Нативная интеграция между Space и нашими IDE на базе IntelliJ открывает много новых возможностей, и код-ревью это только первый шаг. Мы планируем развивать и улучшать эту интеграцию.

Видео

Если вы предпочитаете видео, смотрите обзор этой функциональности от Триши Ги:

Space-плагин встроен в свежую версию IntelliJ IDEA 2021.1. Для других наших IDE плагин нужно установить вручную.

Прежде чем приступить к ревью кода, войдите в Space из IDE. Это можно сделать в настройках: Tools | Space. Введите URL-адрес своей организации Space, нажмите Log In, и ваш дефолтный браузер попросит вас предоставить доступ из IDE.

После этого в Get from VCS появится список всех проектов и репозиториев в вашей организации Space. Найдите и выберите Git-репозиторий, с которого вы хотите начать, и нажмите Clone.

У Space-плагина есть свое окно, в котором можно просматривать задания в Space Automation. Плагин также обеспечивает автодополнение и подсветку синтаксиса для файлов .space.kts.

Но мы здесь из-за код-ревью, так что перейдем к делу.

Окно Code Reviews

Окно Space Code Reviews открывается с боковой панели или через меню Tools | Space | Code Reviews. В нем вы увидите все ревью, относящиеся к текущему проекту. В окне работает поиск и фильтры.

Фильтры помогут отсортировать:

  • Открытые и закрытые ревью;

  • Ревью, в которых содержатся ваши изменения;

  • Ревью, требующие вашего внимания;

  • Изменения, которые вам нужно просмотреть;

  • Ревью, назначенные на вас.

Хронология код-ревью

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

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

В Space важное место занимают чаты. Комментарии к код-ревью это тоже чат: оставляйте дополнительные комментарии и отвечайте коллегам в тредах. Все это не выходя из IDE.

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

Ревью кода в IDE

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

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

Принять изменения или дождаться ответа

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

  • Accept Changes, то есть принять изменения, если на ваш взгляд с кодом все в порядке.

  • Wait for Response, то есть подождать ответа, если вы ознакомились с изменениями, но у вас остались вопросы или в коде есть нерешенные проблемы.

В любом случае ваш этап проверки будет завершен и ваши комментарии будут опубликованы.

Заключение

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

Space-плагин встроен в IntelliJ IDEA 2021.1, а для других наших IDE его можно установить вручную.

Вы можете бесплатно зарегистрироваться в Space и легко создать зеркало существующего Git-репозитория, чтобы пользоваться всеми возможностями Space для код-ревью в IntelliJ IDEA.

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

Подробнее..

GoLand 2021.1 Удаленная разработка на Docker, SSH и WSL 2, поддержка Go 1.16, улучшенная работа с JSON

20.04.2021 20:11:13 | Автор: admin

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

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

Если совсем коротко, теперь вы можете:

  • собирать и запускать программы на удаленном окружении: Docker, SSH и WSL 2;

  • использовать новую функциональность Go 1.16 (например, //go:embed);

  • мгновенно генерировать код из JSON;

  • с легкостью обрабатывать ошибки с помощью новых быстрых исправлений;

  • обсуждать код и обмениваться новыми знаниями с помощью сервиса для совместной разработки и парного программирования Code With Me.

Но, это конечно, не все!

Кстати, если вы работаете с базами данных, а также с JavaScript и TypeScript, то последние обновления DataGrip и WebStorm уже включены в этот релизный билд (впрочем, как и всегда). Да, GoLand это больше, чем просто IDE для Go.

И последнее, новую функциональность можно попробовать в интерактивной форме. Урок What's New in GoLand 2021.1 уже ждет вас на начальном экране.

Run Targets

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

Немного теории: добавить нужное окружение можно через меню Run | Edit Configurations. В открывшемся диалоге выбираете нужную конфигурацию, а в выпадающем списке Run on указываете окружение, на котором хотите запустить свой код.

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

А пока будем рады видеть вас в нашей документации.

Go 1.16

Поддержка //go:embed

Новости из мира Go 1.16: теперь можно встраивать файлы и папки на этапе компиляции программы в виде string (строки), []byte (слайса байтов), или с помощью embed.FS встроить сразу несколько директорий.

GoLand предоставляет подсветку кода, навигацию от директивы embed к файлам и папкам в проекте, рефакторинг Rename, Find usages (поиск использований), автодополнение кода и несколько инспекций. Например, GoLand предупредит вас, если вы попытаетесь вставить файл в переменную неправильного типа.

Обнаружение некорректного использования (t/b).Fatal

GoLand предупреждает о недопустимых вызовах testing.T метода Fatal внутри горутины, созданной во время теста.

Быстрое исправление перепишет код с вызовом t.Fatal (или аналогичного метода) так, чтобы он предупреждал о сбое теста с помощью t.Error и досрочно выходил из горутины с помощью оператора возврата (return).

Обнаружение некорректного использования asn1.Unmarshal

В Go 1.16 go vet находит неправильное использование asn1.Unmarshal и проверяет, что переменная, в которую выполняется демаршалинг (слайса байтов), не равна nil.

В GoLand 2021.1 есть аналогичная проверка с быстрым исправлением для решения этой проблемы.

Работа с JSON

Чтобы создать структуру с полями и тегами из JSON, в GoLand 2021.1 нужно просто скопировать данные в редактор кода. Это все :)

Если вы хотите отредактировать JSON перед созданием структуры, нажмите Alt+Enter, чтобы вызвать действие Generate type from JSON. GoLand откроет окно Generate Go type from the JSON с уже скопированным туда JSON. Там можно изменить данные по своему усмотрению, затем нажать кнопку Generate и ваша структура появится в редакторе. Также можно вставить JSON в окно вручную.

Кроме того, можно преобразовать JSON внутри уже существующей пустой структуры. Для этого щелкните на эту пустую структуру и вызовите действие Generate struct fields from JSON, нажав Alt+Enter или используя меню Generate.

Если вы вставили невалидный JSON-код в окно Generate Go type from JSON, GoLand вам об этом скажет.

Теперь гораздо проще создавать теги JSON и XML для всех экспортируемых полей в структуре.

Когда вы используете Alt+Enter для вызова Add key to tags в структуре или на ее поле, GoLand добавит тег ко всем полям с именами. Если вы хотите изменить стиль имени поля для всех тегов, нажмите Alt+Enter еще раз на любом ключе и выберите Change field name style in tags. Поддерживаются следующие стили: fieldName, FieldName, field-name и field_name.

Вы можете обновлять все значения тегов одновременно с помощью действия Update key value in tags. Нажмите Alt+Enter на любом значении тега в структуре, и GoLand добавит курсоры в конце значений тега каждому полю.

Кроме того, у IDE есть автодополнение для токенов JSON, XML и ASN.1 внутри значений тегов.

GoLand теперь поддерживает формат JSON Lines, в котором каждая запись находится на отдельной строке. Он используется для работы со структурированными данными и логами. IDE распознает типы файлов .jsonl, .jslines, .ldjson и .ndjson.

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

Обработка ошибок

Про обработку ошибок в Go можно найти множество статей с комментарием не так уж просто, как казалось. Мы верим в то, что наша IDE должна делать жизнь пользователей проще, поэтому мы добавили инспекцию Unhandled Error уже несколько лет назад. А чтобы жизнь была не только проще, но и веселей, теперь у этой инспекции появилось несколько быстрых исправлений:

  • Handle error присваивает результаты вызова переменным и создает проверку if error != nil.

  • Wrap error handling in a closure, для операторов defer и go, создает код, похожий на Handle error, но при этом оборачивает весь код в анонимную функцию (closure).

  • Ignore explicitly теперь сработает с defer и go. Быстрое исправление присваивает результаты вызова пустым переменным и оборачивает выражение в замыкание.

Новые быстрые исправления

Быстрое исправление несовместимости типов внутри составных литералов

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

Быстрое исправление Create Type

Create Type теперь предлагает не только создать тип, который уже используется, но еще не определен, но и создаст поля для него.

Одновременная генерация set и get методов

Создание методов get и set для каждого поля в длинной структуре не подходит под определение увлекательной задачи. Чтобы избавить вас от утомительной рутины, GoLand 2021.1 может cгенерировать все необходимые геттеры и сеттеры для выбранной структуры сразу.

Нажмите Alt+Enter на любом имени поля в структуре и выберите Generate getter and setters из выпадающего меню. GoLand откроет окно Select Fields, где вы можете выбрать методы get и set для всех полей или каких-то конкретных.

Мы понимаем, что генерация геттеров и сеттеров в большинстве случаев не нужна в Go, но если вдруг у вас будет такая задача, вы знаете как ее решить быстро :)

Рефакторинги

Extract Type

Extract Type позволяет извлечь тип из существующего или преобразовать анонимный тип структуры в именованный. Чтобы вызвать рефакторинг, нажмите Ctrl+Alt+Shift+T на Windows или Ctrl+T на macOS.

Rename модуля (go.mod)

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

Вызовите Rename на имени модуля с помощью Shift+F6 на Windows/Linux или F6 на macOS. GoLand откроет окно Rename, где можно изменить имя, настроить параметры переименования в комментариях и строках, и посмотреть предварительный результат рефакторинга. Из вкладки Refactoring Preview вы можете перейти ко всем использованиям этого имени модуля. Если результат рефакторинга вас не устроит, все изменения можно отменить.

Постфиксное автодополнение

Постфиксное автодополнение varCheckError

Введите .varCheckError после выражения, возвращающего ошибку. IDE добавит имена переменных, проверку if error != nil и вернет ошибку из функции.

Форматирование

Встроенный форматер теперь может группировать импорт точно так же, как это делает goimports -local.

Чтобы использовать эту функциональность, перейдите в Preferences/Settings | Editor | Code Style | Go | Imports и включите опцию группировки импортов. Теперь вы можете выбрать импорты, которые будут сгруппированы в отдельные блоки.

Инструмент для совместного редактирования кода

Сервис для совместной разработки и парного программирования Code With Me, который мы уже анонсировали в предыдущем релизе, поменял статус EAP на релизный и теперь работает в GoLand по умолчанию, без необходимости устанавливать плагин.

Что появилось в этой версии:

  • возможность гибко настраивать уровень доступа к проекту;

  • возможность общаться по видео и аудио, переписываться в мессенджере.

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

Если у вашей компании повышенные требования к безопасности, можно установить локальную версию Code With Me и пользоваться сервисом в пределах внутренней сети.

Чуть больше о безопасности можно почитать в нашей документации.

На этой странице можно узнать, что именно входит в вашу лицензию.

Запуск и отладка с повышенными привилегиями

GoLand 2021.1 позволяет запускать расширенную sudo сессию. При первом запуске GoLand спросит, хотите ли вы, чтобы сессия продолжалась или прекращала свое выполнение немедленно. В Preferences/Settings | Appearance & Behavior | System Settings | Process Elevation всегда можно изменить свой ответ.

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

Автодополнение кода

Появилось автодополнение на основе машинного обучения (ML). Эта функциональность находится на ранней стадии разработки и является альтернативой стандартному механизму ранжирования.

Выберите Mark position changes in the completion popup в Preferences/Settings | Editor | General | Code Completion, чтобы опции автодополнения, ранжированные с помощью ML, были отмечены иконками стрелок вверх/вниз в выпадающем меню.

Улучшения пользовательского интерфейса

Меню быстрого доступа

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

Быстрый доступ к недавним проектам на Windows через меню 'Пуск'

Кликните правой кнопкой мыши на иконку GoLand в меню Пуск на Windows, чтобы открыть недавний проект.

Улучшенные всплывающие подсказки

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

Шрифты

Мы добавили больше вариантов шрифтов в Preferences/Settings | Editor | Font.

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

Предварительный просмотр HTML-файлов

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

Чтобы его открыть, нажмите на значок GoLand в виджете в правом верхнем углу редактора.

Раскрытие вкладок в режиме разделенного редактора

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

Плагин Makefile Language

Плагин Makefile Language для поддержки языка GNU Make теперь включен в IDE. Благодаря нашему коллеге, Виктору Кропп (который работал над плагином в свое свободное время (!!!)), в GoLand 2021.1 вы найдете все необходимое: подсветку кода, быстрый просмотр документации, Find Usages, навигацию и автодополнение.

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

По традиции напоминаю, что если вы уже используете IntelliJ IDEA Ultimate, то все возможности GoLand доступны прямо там, если установить этот плагин.

Спасибо за внимание!

Подробнее..

Вышел MPS 2021.1

04.06.2021 20:14:20 | Автор: admin

Последние несколько месяцев мы совершенствовали различные подсистемы нашего продукта, чтобы сделать его максимально удобным для пользователей. Читайте ниже о новой функциональности в MPS 2021.1 или посмотрите это видео:




Редактор


Масштабирование


Размер шрифта теперь можно быстро настроить в открытом окне редактора просто зажмите клавишу CTRL и прокрутите колесико мыши. Размер шрифта не запоминается когда вы снова откроете файл, будет использовано значение по умолчанию. Вы можете включить/отключить эту опцию в разделе Preferences | Editor | General: Change font size with Ctrl/Cmd+Mouse Wheel.


Улучшение производительности форматирования с отступами


Для наиболее частых сценариев реализация форматирования с отступами (indent layout) стала инкрементальной это ускорит отрисовку редакторов больших моделей, которые используют форматирование с отступами (например, BaseLanguage). Вы можете отключить эту опцию при помощи параметра VM mps.indent_layout.disable_incremental.


Настройки толщины шрифта


При длительной работе над кодом важно подобрать шрифт, который бы не сильно утомлял глаза. Мы добавили настройки типографики, чтобы вы могли подобрать идеальные размеры шрифта. Версия 2021.1 позволяет настраивать толщину обычных и жирных шрифтов через меню Preferences | Editor | Fonts.





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


Улучшения аннотирования кода


Использование дополнительной информации от системы контроля версий позволило нам улучшить аннотацию кода. Новый алгоритм вычисления изменений ревизии отслеживает перемещение узлов в модели. Цвет строк/ячеек с аннотациями определяется только на основе тех ревизий, где были фактически произведены изменения. Если столбец с аннотациями раскрыт, то в контекстном меню ячеек в основном редакторе появится новая группа опций, таких как Copy Revision Number, Show Diff и другие.





Окно Diff для коммитов слияния


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





Синхронизация прокрутки в редакторе Diff


Мы добавили кнопку, позволяющую выключить синхронизацию прокрутки в окне редактора Diff.





Использование графа ревизий в алгоритмах для аннотации и истории кода


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


Действие Save to Shelf


Новое действие Save to Shelf копирует изменения на вкладку Shelf, сохраняя их в локальной истории изменений. Чтобы запустить это действие, нажмите A на macOS или Ctrl+Shift+A на Windows или Linux и введите Safe to Shelf.


Генератор


Упрощенный доступ к параметрам макроса $LOOP$


Теперь вы можете обратиться к входному узлу макроса LOOP при помощи выражения LOOP.inputNode вам не нужно использовать макрос VAR. В том же пространстве имен можно получить доступ к индексу LOOP: используя LOOP.index вместо необходимой ранее контекстной переменной.





Обновленный оператор Transform в объявлении GenPlan


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


Улучшение скомпилированных шаблонов


В IDE в настройках генератора имеется опция Warn when child cannot be placed into role, которая проверяет, может ли создаваемый образец узла быть использован в указанной роли родительского узла. Эта опция также доступна в настройках сборки проектов. Генератор может показать предупреждение, которое обычно означает, что в шаблонах имеются несоответствия, например неправильно размещенные фрагменты шаблона или аннотация COPY-SRC.


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


Разное


Java-компилятор для модулей MPS с фасетом Java


Мы существенно изменили подход к компиляции модулей MPS в Java. Это напрямую связано с задачей по поддержке обработки аннотаций, получившей большое количество голосов. Мы перевели инфраструктуру Java-компилятора для MPS на набор API javax.tools.JavaCompiler теперь MPS может использовать любой компилятор, который реализует стандартный API javax.tools. На данный момент MPS применяет тот компилятор, который назначен стандартным для данного API. При желании вы можете выбрать Eclipse Compiler for Java (ECJ), если он доступен. Когда в classpath есть библиотеки ECJ, можно переключить MPS на использование ECJ, задав mps.compiler.java=ecj в качестве свойства системы (например, изменив mps.vmpoptions). Следует отметить, что если при использовании инфраструктуры нового компилятора возникнут неустраняемые проблемы, то можно задействовать устаревший механизм API прямой компиляции ECJ, изменив конфигурацию на mps.compiler.java=ecjlegacy в качестве свойства системы.


Кроме того, сейчас мы запускаем компилятор с опцией -release с версией, указанной в настройках проекта (Preferences -> Java Compiler). Эта опция строже, чем сочетание -source/-target, которое использовалось MPS в предыдущих релизах, поскольку она контролирует применение API библиотек, которые были доступны в определенных релизах. Если из-за использования API, недоступных в некоторых релизах, вы столкнетесь с проблемами компиляции, возможно, придется обновить версию Java в проекте.


Исходная версия MPS для миграции проекта


При создании проекта теперь сохраняется значение исходной версии MPS. Миграции с версий MPS, предшествующих исходной, не применяются. Это дает авторам возможность назначить исходный порог для миграций проекта (версию можно изменить в интерфейсе для миграции проектов, используя метод getBaselineVersion():int).


Если для проекта отсутствует версия, при миграции версией по умолчанию будет 2018.1. Миграцию любого проекта можно запустить вручную из меню Migrations.


Улучшения рефакторинга Method signature


В окне рефакторинга Method Signature теперь можно указать значения по умолчанию для новых аргументов или аргументов, у которых поменялись типы. Если вы удалите параметр метода, но в коде останутся его использования, MPS введет новую локальную переменную и таким образом восстановит связь. Кроме того, теперь обрабатываются параметры типа vararg.


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





Новые возможности для комментариев BaseLanguage


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



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


Улучшенные выражения lang.smodel


Выражения model.roots(), model.rootsIncludingImported() и model.nodesIncludingImported() теперь, аналогично model.nodes(), поддерживают #expression для указания концептов.


Управление видимостью модулей плагина


Долгое время в MPS считалось, что конечному пользователю видны все модули из языковых плагинов. Из-за увеличения числа языков и усложнения плагинов бывают случаи, когда разработчики языков хотят скрыть определенные модули, чтобы не запутать и не перегрузить конечного пользователя огромным количеством невостребованных языков или функций. Плагины сообщают MPS о том, какие модули они затрагивают, при помощи расширения com.intellij.mps.LanguageLibrary. Теперь у расширений есть опциональный атрибут hide=true, который разрешает фильтровать модули плагина на основе образца, указанного в com.intellij.mps.VisibleModuleMask. У большинства плагинов MPS появился флажок для удобства фильтрации собственных языков MPS, если разработчику языков необходимо их скрыть. MPS обеспечивает для своих модулей маски в составе плагина jetbrains.mps.ide.devkit, причем разработчики собственных IDE обычно не включают этот плагин в дистрибутив и полностью контролируют отображаемые модули своего продукта.


Другие улучшения


Предварительный просмотр HTML-файлов


Мы добавили встроенное превью для HTML-файлов. Чтобы его открыть, нажмите на логотип MPS в виджете в правом верхнем углу редактора. Превью обновляется в реальном времени, когда вы редактируете HTML-код или изменяете связанные CSS и JavaScript-файлы.





Поддержка Apple Silicon


Теперь вы можете пользоваться MPS на Mac-устройствах с чипом M1. Скачать установщик JetBrains MPS для Apple Silicon можно с нашего сайта либо из Toolbox App.


Автоматический импорт настроек


Раньше окно Import Settings появлялось каждый раз, когда вы устанавливали новую версию MPS. Теперь, если IDE найдет необходимые конфигурационные файлы, окно не появится.


Специальные возможности


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


Незначительные изменения



  • Теперь показывается выполнение intention-действия макроса Call-Site. (MPS-32928)
  • Внесены изменения в диалоговое окно новой модели. (MPS-30787)


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



Ваша команда JetBrains MPS
The Drive to Develop
Подробнее..

Представляем YouTrack Lite

14.12.2020 20:04:49 | Автор: admin
Привет, Хабр!

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

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

image


Что такое YouTrack Lite?


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

Рай перфекциониста: структура и порядок


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

image

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

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

image

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

image

Что вижу, то пою: текстовый редактор WYSIWYG


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

image

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

Недавно просмотренные задачи и статьи как никогда кстати


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

image

Выбор между YouTrack Lite и Classic


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

image

А что еще нового?


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

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

YouTrack Lite и остальные нововведения можно попробовать бесплатно. Существующие облачные экземпляры YouTrack будут обновлены на новую версию в течение 2-3 недель.

Нам очень важно ваше мнение! Делитесь вашими впечатлениями в комментариях или пишите нам в поддержку лично мы всегда рады пообщаться и помочь.
Подробнее..

YouTrack теперь с центром уведомлений

07.04.2021 20:14:16 | Автор: admin

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

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

Держите руку на пульсе

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

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

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

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

Время под контролем: теперь и в YouTrack Lite

В версии 2020.6 мы представили альтернативный интерфейс YouTrack Lite с удобным текстовым редактором и табличным представлением списка задач. Мы получили много положительных отзывов о новом интерфейсе и продолжили его развивать: по просьбам наших пользователей в этой версии мы добавили функции учета времени. Теперь YouTrack Lite позволяет указывать затраченное время и просматривать единицы работы.

Связь с внешним миром: ссылки в строковых полях

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

Поиск полного дерева подзадач

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

Этот синтаксис можно применять не только к типу связи подзадача, но и ко всем типам связи с направленностью объединение, например, к дубликатам (совокупность дубликат: ID задачи)

Иерархия групп

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

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

Дополнительные поля в профилях пользователей

Помимо учетных данных, имен и электронных адресов, в профилях пользователей теперь можно указывать дополнительную информацию например, телефонные номера или должности сотрудников. Рабочие процессы (workflows) YouTrack тоже могут оперировать этими полями. Например, вы сможете разрешить выполнение определенных действий только генеральному директору компании. Кроме того, настраиваемые атрибуты могут быть синхронизированы с AD-сервером (или любым LDAP-сервером) и доступны через REST API Hub, что открывает еще больше возможностей для автоматизации.

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

Лучше один раз увидеть, чем сто раз прочитать. Напомню, что YouTrack со всеми его новшествами можно попробовать бесплатно. Мы будем рады вашей обратной связи!

Команда YouTrack

Подробнее..

Теперь YouTrack интегрируется с GitLab CICD

28.05.2021 14:21:34 | Автор: admin

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

На связи команда JetBrains YouTrack, и у нас для вас новый релиз! Мы дополнили интеграцию с GitLab теперь YouTrack не только отслеживает коммиты и merge-реквесты, но и поддерживает интеграцию с GitLab CI/CD. А это значит, что задачи в YouTrack смогут обновляться автоматически по результатам автоматизированных сборок в GitLab CI/CD. Также мы дополнили релиз интересными улучшениями для работы с задачами. За подробностями добро пожаловать под кат!

Об интеграции с GitLab CI/CD что это и зачем

Непрерывная интеграция и развертывание (CI/CD) были придуманы, чтобы упростить жизнь разработчикам. Благодаря CI/CD вы можете не беспокоиться о том, что ваш код навредит проекту или сломает его, а самое главное вам больше не нужно проверять это вручную.

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

YouTrack уже давно позволяет интегрировать в процесс управления задачами TeamCity и Jenkins, а теперь к ним присоединился и GitLab CI/CD.

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

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

Что еще нового?

Мы внесли ряд улучшений в YouTrack Lite и Classic. В YouTrack Lite появилась функция Похожие задачи, которая позволяет избежать дублирования задач. Когда при создании задачи вы вводите ее название, YouTrack ищет задачи со схожим названием и предлагает вам просмотреть их и убедиться, что новая задача их не дублирует. В YouTrack Classic мы добавили удобный текстовый редактор такой же, как в базе знаний и в YouTrack Lite. Теперь вы можете одним щелчком переключаться между режимом разметки и режимом WYSIWYG, встраивать мультимедийные объекты, создавать таблицы и контрольные списки.

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

Лучше один раз увидеть, чем сто раз прочитать. Напомню, что YouTrack со всеми его новшествами можно попробовать бесплатно. Мы будем рады вашей обратной связи!

Команда YouTrack

Подробнее..

Обновленный плагин YouTrack для IDE на платформе IntelliJ

03.06.2021 20:19:56 | Автор: admin

Привет Хабр!

В командах разработки трекеры задач и IDE редко существуют друг без друга. Поэтому мы решили существенно проапгрейдить плагин YouTrack для IDE на платформе IntelliJ. Плагин интегрируется с вашими любимыми IDE от JetBrains AppCode, CLion, DataGrip, GoLand, IntelliJ IDEA, PhpStorm, PyCharm, Rider, RubyMine и WebStorm, а также с Android Studio и дает вам доступ ко всем задачам и уведомлениям прямо из IDE. Также с помощью плагина стало удобнее вести учет времени. Для него появилось несколько режимов теперь вы сможете сосредоточиться на написании кода и не тратить время на отчетность. Ниже расскажу обо всем подробнее.

Карманный трекер: все под рукой

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

Плагин отображает список задач, актуальных для вас прямо сейчас. Это может быть ваш личный бэклог, задачи к предстоящему релизу, технический долг. Список можно в любой момент изменить, выведя на первый план актуальные задачи. Вы можете обновлять задачи прямо из IDE: добавляйте комментарии, выполняйте команды и меняйте статус все это позволит держать команду в курсе прогресса. Кроме того, плагин позволяет получать в IDE уведомления об изменениях в задачах (те же, что вы получаете по почте) и наоборот создавать новые задачи в YouTrack всего за пару кликов, предварительно выделив нужный кусок кода в IDE.

Остаемся в контексте текущих задач

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

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

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

Теряем счет времени с автоматическим режимом учета

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

У автоматического режима есть несколько настроек. Например, он может вносить в систему затраченное время при каждом коммите, при закрытии проекта в IDE, по заданному вами графику (например, каждый день в 19:00) или по прошествии определенного периода неактивности в IDE.

Контролируем каждый шаг в ручном режиме

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

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

Попробуете?

Лучше один раз увидеть, чем сто раз услышать. Плагин можно использовать с версией 2021.1 всех IDE JetBrains на платформе IntelliJ, включая AppCode, CLion, DataGrip, GoLand, IntelliJ IDEA, PhpStorm, PyCharm, Rider, RubyMine и WebStorm, а также с Android Studio. Чтобы установить плагин, откройте в IDE меню Settings -> Plugins и найдите там плагин YouTrack Integration.

Для настройки плагина вам понадобится YouTrack версии 2020.4.6808 или младше и постоянный токен.

Каких еще возможностей вы ждете от интеграции? Что позволило бы еще эффективнее использовать YouTrack вместе с IDE? Расскажите нам о своем опыте! Ваши отзывы помогут нам сделать плагин YouTrack еще лучше.

Ваша команда YouTrack

Подробнее..

Мы скачали 10 миллионов Jupyter-ноутбуков с Github и вот что мы выяснили

17.12.2020 20:07:58 | Автор: admin

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

На связи команда Datalore by JetBrains. Хотим поделиться с вами результатами анализа нескольких миллионов публично доступных репозиториев Github с Jupyter-ноутбуками. Мы скачали ноутбуки, чтобы немного больше узнать в цифрах о текущем статусе, пожалуй, самого популярного инструмента для data science.

Вдохновившись исследованием, проведенным командой Design Lab из UC San Diego, мы дважды скачали Jupyter-ноутбуки: в октябре 2019 и в октябре 2020.

Два года назад в открытом доступе было 1,23 миллиона ноутбуков. В октябре 2020 года число ноутбуков выросло в 8 раз, и мы смогли скачать 9,72 миллиона файлов. Этот датасет мы сделали публичным инструкцию по скачиванию можно найти в конце поста.

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

Мы будем рады, если вы захотите поработать с данными и провести собственный анализ. Делитесь с нами результатами, отмечая в Твиттере @JBDatalore или написав нам на contact@datalore.jetbrains.com.

Теперь перейдем к цифрам.

Язык data science

Несмотря на большой рост популярности R и Julia в последние годы, Python остается лидирующим программным языком для Jupyter-ноутбуков.

Помимо этого встречаются ноутбуки, написанные на Bash, MatLab и Scilab, а также на языках, с которыми ноутбуки ассоциируются, пожалуй, в последнюю очередь: Scala, C++ и Java.

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

В табличке можно увидеть разницу в процентах использования Python 2 и Python 3 в ноутбуках в 2018, 2019 и 2020 годах.

Python 2

Python 3

Other languages

Исследование 2018

52,5%

43,8%

3,7%

Исследование 2019 (JetBrains Datalore)

18,1% (всего 1029 K)

72,6% (всего 4128 K)

9,3% (всего 529 K)

Исследование 2020 (JetBrains Datalore)

11,8% (всего 1154 K, +125 K к 2019)

79,3% (всего 7710 K, +3582 K к 2019)

10,8% (всего 1050 K, +521 K к 2019)

Количество ноутбуков, написанных на Python 3, увеличилось с 2019 года на 87%, а количество ноутбуков с Python 2 на 12%.

На графике ниже можно увидеть распределение количества ноутбуков, написанных на Python и R, по версиям языков:

Топ библиотек data science

Чтобы помочь пользователям Datalore начать работу с ноутбуками как можно быстрее, мы предустановили самые используемые Python-библиотеки. Для этого мы посчитали статистику импортов в скачанных Jupyter-ноутбуках.

Не оказалось неожиданностью, что 60% ноутбуков содержат в списке зависимостей Numpy, 47% импортируют Pandas и Matplotlib.

Более подробную информацию можно увидеть на графике:

Самые популярные комбинации библиотек:

Рост PyTorch и TensorFlow

Члены нашей команды интересуются библиотеками для глубинного обучения, и мы решили сравнить рост библиотек PyTorch и TensorFlow.

Из таблицы ниже можно увидеть, что число импортов у PyTorch растет значительно быстрее, чем у TensorFlow.

В то же время нужно учитывать, что библиотека Keras может использовать TensorFlow в качестве транзитивной зависимости, а Fast.ai использует PyTorch в качестве зависимости. Это означает, что скорость роста TensorFlow, вероятно, выше, но мы не можем говорить с уверенностью, какая из библиотек больше использовалась в последние годы.

TensorFlow

Keras

PyTorch

Fastai

Исследование 2019 (JetBrains Datalore)

321 K

231 K

110 K

19 K

Исследование 2020

(JetBrains Datalore)

430 K (+34%)

367 K(+59%)

253 K(+130%)

25 K(+32%)

Содержание ячеек в ноутбуках

Немного общих цифр относительно ячеек (данные подсчитаны для ноутбуков, написанных на Python 3.6 и выше):

  • 71,90% ноутбуков содержат Markdown.

  • 42,13% ноутбуков содержат графики или картинки в output.

  • 12,34% ноутбуков содержат LaTex.

  • 19,77% ноутбуков содержат HTML.

  • 20,63% ноутбуков содержат код внутри Markdown.

Markdown очень широко используется в Jupyter-ноутбуках. 50% ноутбуков содержат более 4 ячеек Markdown и более 14 ячеек кода.

Графики ниже показывают распределения Markdown-ячеек и ячеек с кодом:

На графике ниже можно увидеть распределение количества строк кода. Хотя существуют отдельные экземпляры ноутбуков, имеющие более 25 000 строк кода, 95% ноутбуков содержат менее 465 строк:

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

Воспроизводимость Jupyter-ноутбуков

Для Jupyter-ноутбуков существует проблема не всегда готовый ноутбук можно воспроизвести. Зачастую это означает, что ячейки были выполнены автором не в прямой последовательности. Мы проверили порядок выполнения ячеек кода всех доступных Jupyter-ноутбуков и выяснили, что 36% Jupyter-ноутбуков выполнены в нелинейном порядке, т. е. при исполнении кода линейно результат выполнения может отличаться.

Мы стали смотреть детальнее, зависит ли порядок выполнения кода в ноутбуке от количества Markdown-ячеек и ячеек кода. Не удивительно, но оказалось, что, чем меньше ячеек кода в ноутбуке, тем меньше вероятность, что код выполнен в линейном порядке.

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

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

Ссылки

Предыдущее исследование 2018 года

Ноутбук в Datalore с предобработанными данными

Инструкция по получению доступа к данным:

  1. Скачайте оригинальный датасет:

    1. Ссылка для скачивания исходных данных из бакета (10 млн файлов, 4,4 ТБ): https://github-notebooks-update1.s3-eu-west-1.amazonaws.com/

    2. Получение списка файлов c помощью AWS S3 API может занять время, поэтому воспользуйтесь этим JSON со всеми именами файлов: https://github-notebooks-samples.s3-eu-west-1.amazonaws.com/ntbslist.json

    3. Добавьте имя файла из JSON к адресу бакета, чтобы получить прямую ссылку, например: https://github-notebooks-update1.s3-eu-west-1.amazonaws.com/0000036466ae1fe8f89eada0a7e55faa1773e7ed.ipynb

  2. Или воспользуйтесь предобработанными данными из исследования (3 ГБ). Файлы доступны в этом Datalore-ноутбуке.

Подробнее..

Как изменился Datalore за 2020 год мощная онлайн-среда для Jupyter-ноутбуков

21.01.2021 18:22:37 | Автор: admin

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


Datalore это мощная онлайн-среда для Jupyter-ноутбуков, разработанная в JetBrains. Здесь мы собрали описание самых важных обновлений Datalore за прошедший год.


image


Профессиональный план Datalore


В ноябре мы запустили Datalore Professional. Этот план был разработан для решения сложных задач с большими наборами данных, которым требуется мощное вычислительное оборудование.


Вот сравнительная таблица параметров Datalore Community и Datalore Professional.


Community Professional
Базовый CPU-процессор (4 ГБ RAM, имя AWS: t3.medium) 120 часов
Мощный CPU-процессор (16 ГБ RAM, 2 ядра vCPUs, на 400% быстрее базового CPU-процессора, имя AWS: r5.large) 120 часов
GPU-процессор (1 NVIDIA T4 GPU, 16 ГБ RAM GPU, 4 ядра vCPU, имя AWS: g4dn.xlarge) - 20 часов
Хранилище 10 ГБ 20 ГБ
Цена Бесплатно 19,90$ в месяц

Улучшения в редакторе кода


Анализ кода из PyCharm


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




Совместимость с ядром Jupyter


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


Ядро Jupyter теперь полностью поддерживается вместе с виджетами, графическими библиотеками и shell-командами.




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


Поддержка Kotlin


Kotlin это язык программирования с открытым исходным кодом, разработанный в JetBrains. Он хорошо подходит для анализа данных и разработки мультиплатформенных приложений. В Datalore мы добавили поддержку Kotlin в ноутбуки IPython. Попробуйте! Просто выберите Kotlin в качестве языка при создании ноутбука.


Поддержка workspace-файлов и S3-бакетов


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


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


Улучшения пользовательского интерфейса


Боковая панель для быстрых действий


Чтобы вы могли быстрее работать с файлами и перемещаться по содержимому ноутбуков, мы добавили вкладку боковой панели внутри редактора. С этой панели есть прямой доступ к прикрепленным файлам, включая файлы ноутбука и workspace-файлы. Кроме того, вы можете использовать оглавление и обозреватель переменных. Окно быстрых команд (Shortcuts) также появится на боковой панели при открытии из меню Help.




Темный режим


В прошлом году мы представили темный режим. Вы можете изменить тему ноутбука в меню View в редакторе, где также можно включить режим Distraction free и опцию разделенного просмотра Split view.




Панель инструментов Markdown


Мы также представили панель инструментов для более удобного редактирования Markdown. Она помогает описывать код с помощью текста, формул LaTex и HTML-кода внутри ячеек Markdown.


Сотрудничество с Anaconda


У JetBrains долгая история сотрудничества с Anaconda, а PyCharm IDE для Python, рекомендованная в установщике Anaconda. С октября 2020 года и Datalore, и PyCharm представлены в новом Anaconda Navigator! Обновите Anaconda Navigator до последней версии и запускайте Datalore прямо оттуда.




Исследования и уроки:


В прошлом году мы сделали несколько интересных исследовательских и обучающих проектов:



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


Всем здорового и продуктивного года!


Команда Datalore

Подробнее..

Big Data Tools EAP 12 экспериментальная поддержка Python, поиск по ноутбукам в Zeppelin

16.12.2020 18:10:53 | Автор: admin

Только что вышло очередное обновление EAP 12 для плагина под названием Big Data Tools, доступного для установки в IntelliJ IDEA Ultimate, PyCharm Professional и DataGrip. Можно установить его через страницу плагина или внутри IDE. Плагин позволяет работать с Zeppelin, загружать файлы в облачные хранилища и проводить мониторинг кластеров Hadoop и Spark.


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



Экспериментальная поддержка Python в Zeppelin


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


Добавить целый новый язык звучит как очень сложная задача. К счастью, в наших IDE уже есть отличная поддержка Python: либо в PyCharm, либо в Python-плагине для IntelliJ IDEA. Нам нужно было взять эту готовую функциональность и интегрировать внутрь Zeppelin. Вместе с этим возникает много нюансов, специфичных для Zeppelin: как нам проанализировать список зависимостей, как найти правильную версию Python, и тому подобное.



Начиная с EAP 12, код на Python нормально подсвечивается в нашем редакторе ноутбуков Zeppelin, отображаются грубые синтаксические ошибки. Можно перейти на определение переменной или функции, если они объявлены внутри ноутбука. Можно сделать привычные рефакторинги вроде rename или change signature. Работают Zeppelin-специфичные таблицы и графики в конце концов, зачастую ради них люди и используют Zeppelin.



Конечно, многие вещи ещё предстоит сделать. Например, очень хотелось бы видеть умное автодополнение по функциям Spark API и другому внешнему коду. Сейчас мы нормально автодополняем только то, что написано внутри ноутбука. У нас есть хорошие идеи, как это реализовать в следующих релизах. Иначе говоря, не надо ждать какого-то чуда: теперь у вас есть полнофункциональный редактор Python, но это всё. Поддержка Python получилась довольно экспериментальной, но, как говорится, путь в тысячу ли начинается с первого шага. А ещё, даже имеющейся функциональности может оказаться достаточно, чтобы писать код в вашем любимом IDE и не переключаться на веб-интерфейс Zeppelin.


Смешиваем Scala и Python


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


Смешивать разные языки вполне возможно. Но не забывайте, что для полноценной поддержки Scala вам понадобится IntelliJ IDEA с плагинами Scala и Python. В PyCharm этот Scala-код хоть и будет выполняться, но его поддержка в редакторе останется на уровне plain text.



Поиск по ноутбукам Zeppelin


У нас всегда была возможность найти, в каком же файле на диске находится нужный нам текст (например, с помощью Find in Path, Ctrl+Shift+F). Но этот стандартный интерфейс поиска не работает с ноутбуками, ведь они не файлы!


Начиная с EAP 12 мы добавили отдельную панель поиска по ноутбукам. Откройте панель Big Data Tools, выделите какое-нибудь из подключений к Zeppelin и нажмите на кнопку с изображением лупы (или используйте сочетание клавиш Ctrl+F на клавиатуре). В результате, вы попадёте в окно под названием Find in Zeppelin Connections. Активация одного из результатов поиска приведет к открытию этого ноутбука и переходу на нужный параграф.



Похожий поиск есть и в веб-интерфейсе Zeppelin. Для получения результатов поиска мы используем стандартный HTTP API, поэтому результаты должны совпадать с тем, что вы видите в интерфейсе Zeppeliln по аналогичному поисковому запросу. Если вы раньше пользовались веб-интерфейсом и привыкли к поиску по ноутбукам, теперь он имеется и в Big Data Tools.


Функция небольшая, но очень полезная. Непонятно, как мы без неё жили раньше.


Исправления ошибок


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


Если вам интересен обзор основных улучшений, то их можно найти в разделе What's New на странице плагина. Если вы ищете какую-то конкретную проблему, вам может подойти полный отчет из YouTrack.


Спасибо, что пользуетесь нашим плагином! Напоминаю, что установить свежую версию можно либо в браузере, на странице плагина, или внутри IDE по названию Big Data Tools. На странице плагина можно оставлять ваши отзывы и предложения (которые мы всегда читаем), и ставить оценки в виде звёздочек.


Документация и социальные сети


Ну и наконец, если вам нужно разобраться функциональностью Big Data Tools, у нас есть подробная документация в вариантах для IntelliJ IDEA и PyCharm. Если хочется задать вопрос, можно сделать это прямо в комментариях на Хабре или перейти в наш Twitter.


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


Команда Big Data Tools

Подробнее..

DataGrip 2021.1 Редактирование прав, контекстные шаблоны, предсказуемая навигация и не только

01.04.2021 20:04:02 | Автор: admin

Привет!

Сегодня мы выпустили DataGrip 2021.1: наш самый мощный релиз за последние годы. И это не шутка!

Самое важное:

  • Интерфейс для работы с правами доступа

  • Контекстные шаблоны Live Templates

  • Упрощенная навигация

  • Легкое копирование источников данных

  • Улучшенная сортировка

  • Редактирование данных в MongoDB

  • Поддержка Azure MFA

Редактирование прав

В окне редактирования объекта теперь можно изменять права на объект.

Также права можно добавлять и изменять в окне редактирования пользователя или роли. Напомним, что вызываются окна редактирования нажатием Cmd/Ctrl+F6.

Это работает в PostgreSQL, Redshift, Greenplum, MySQL, MariaDB, DB2, SQL Server и Sybase.

Контекстные шаблоны

Нас давно просили сделать как у других: чтобы для таблицы в проводнике можно было быстро сгенерировать простой запрос, например SELECT TOP 100 FROM %tableName%.

Мы всегда отвечали, что как только вы научитесь пользоваться шаблонами кода Live Templates, ваша жизнь изменится навсегда, и не надо будет тыкать мышкой во вложенные меню.

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

В итоге мы сделали новый вид шаблонов кода контекстные шаблоны. Работают они так:

Посмотрим шаблон Select first N rows from a table. Найдите его в настройках:

Он выглядит, как обычный шаблон, и его можно использовать в таком качестве. Но у переменной $table$ есть специальное выражение dbObjectName(). Вы увидите это, нажав на Edit Variables. Так вот, именно это выражение делает шаблон контекстным, то есть значение в эту переменную можно подставить автоматически кликнув на любой объект в проводнике базы данных.

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

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

Редактор данных

Редактирование данных в MongoDB

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

<img src="http://personeltest.ru/aways/habrastorage.org/webt/1t/ux/8y/1tux8yvfyrs2eiha3byoj0ss2tu.png" />

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

Сортировка

Сортировка стала более удобной:

  • Мы добавили поле ORDER BY, а <Filter> переименовали в WHERE. Впишите в ORDER BY условия сортировки, чтобы получился работающий запрос.

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

Если хотите отсортировать данные на стороне DataGrip, отключите Sort via ORDER BY. Конечно, в этом случае, сортируются данные только на текущей странице.

Теперь вы можете по умолчанию открывать таблицы отсортированными по числовому первичному ключу.

Панель инструментов

Мы немного обновили панель инструментов в редакторе данных: добавили кнопки Revert Changes и Find. Кнопки Rollback и Commit в режиме автоматического подтверждения транзакций скрываются.

Транспонирование однострочных результатов

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

Навигация

Предсказуемые действия

Мы удалили эти настройки:

Если вы никогда не меняли их значения по умолчанию, то главное изменение в новой версии для вас такое: действие Go to declaration (Ctrl/Cmd+B) теперь открывает DDL этого объекта. Раньше оно подсвечивало объект в проводнике базы данных.

Для перемещения к объекту в проводнике мы представили новое сочетание клавиш: Alt+Shift+B для Windows/Linux и Opt+Shift+B для macOS.

Теперь нет сложной логики, и каждое нажатие горячих клавиш ведет в туда, куда вы ожидаете попасть:

  • Ctrl/Cmd+B открывает DDL.

  • F4 открывает данные.

  • Alt/Opt+Shift+B подсвечивает объект в проводнике.

Удаление настроек всегда ломает привычки некоторому количеству людей. Мы постарались учесть это. Вот наши советы таким пользователям:

  • Все сочетания клавиш можно менять. Если, например, вы не хотите отвыкать от того, что Ctrl/Cmd+B подсвечивает объект в проводнике, назначьте это сочетание клавиш действию Select in database tree.

  • В то же время, если вам нравится, что внутри скрипта Ctrl/Cmd+B и Ctrl/Cmd+Click открывает определение CREATE, не убирайте эти сочетания с действия Go to declaration, если вы последовали предыдущему совету.

  • Если вам нравилось, что при отключенной настройке Preview data editor over DDL editor двойной клик по таблице открывал DDL, это можно вернуть через ключ в реестре. Он называется database.legacy.navigate.to.code.from.tree. Но мы не советуем менять значения в реестре и надеемся, что те полпроцента людей, у которых эта галочка была снята, быстро привыкнут к новому поведению :)

Если мы про что-то забыли, пишите, пожалуйста, в комментах.

Вкладка Database

Тут мы ничего особо не сделали просто переименовали вкладку Tables в Database. Этим мы напоминаем, что по сочетанию клавиш Cmd+O/Ctrl+N можно искать не только таблицы, но и процедуры, функции, схемы.

Соединение

Поддержка Azure MFA

Мы поддержали интерактивную аутентификацию через Azure Active Directory. Если она включена, при соединении у вас автоматически откроется браузер, где вы сможете завершить аутентификацию.

Версия 2.x драйвера для Redshift

Этот драйвер можно скачать в DataGrip, начиная с версии 2021.1. Главное изменение состоит в том, что теперь запросы можно останавливать.

Полная поддержка Google Big Query

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

Поддержка диалекта CockroachDB

Теперь DataGrip правильно подсвечивает запросы и показывает ошибки в скриптах для CockroachDB. Соответствующую интроспекцию мы сделаем в одном из следующих релизов.

Улучшения в окне соединения

Сделали это окно чуть более дружелюбным:

  • Источники данных и драйверы разделены на две вкладки.

  • На странице каждого драйвера появилась кнопка Create data source.

  • Кнопка Test Connection переехала вниз теперь ее видно из всех вкладок, а не только из General и SSH/SSL.

  • Для источников данных на основе файлов (так называемых DDL Data Sources) теперь можно явно задать диалект.

  • Поле JDBC URL расширяется, потому что адреса для подключения бывают очень длинными.

Проводник базы данных

Легкое копирование источников данных

Возможность копировать и вставлять источники данных мы сделали давно. Но с этого релиза вы можете использовать самые знаменитые сочетания клавиш в мире Ctrl/Cmd+C/V/X.

  • Напоминаем, что когда вы копируете источник данных, в буфер обмена сохраняется XML. Его можно послать коллеге в мессенджере, а он вставит его в свою IDE все сработает.

  • Если копирование и вставка происходит в одном проекте, вам не понадобится заново вводить пароль.

  • Источник данных можно не только копировать, но и вырезать. Вырезание отменяется при помощи Ctrl/Cmd+Z.

Новый интерфейс

Объекты второстепенной важности (роли, пространства имен, внешние источники и др.) мы поместили в папки Server Objects и Database Objects.

Если хотите чтобы было, как раньше, включите настройку Group Database and Schemas.

[Oracle] Скрытие сгенерированных объектов

Если отключить Show generated objects, то из проводника пропадут:

  • Таблицы материализованных представлений

  • Логи материализованных представлений

  • Вторичные таблицы

[SQLite] Новые типы объектов

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

Улучшения для неподдерживаемых баз

Шаблоны для источников данных

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

Еще раз напомним, что поддержка для таких источников данных базовая. Скрипты подсвечиваются на основе стандарта SQL:2016, а информация об объектах берется из драйвера.

Написание запросов

Инспекция про избыточные имена в CTE

Если запрос не запустится из-за избыточных имен в общем табличном выражении, DataGrip сообщит об этом.

[SQL Server] Системные функции можно использовать без имени схемы

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

Поддержка JSON Lines

Формат JSON Lines используется для хранения данных и логов. И новая версия правильно подсвечивает файлы этого формата.

Толщина шрифта

Теперь вы можете настраивать толщину шрифта.

Импорт / Экспорт

Незагруженные данные

Если бинарные данные не были загружены полностью, вы увидите такое сообщение:

Настройка, которая определяет, какое количество данных DataGrip загружает по умолчанию, находится здесь: Settings/Preferences | Database | Data Views | Maximum number of bytes loaded per value.

Запрос в файле Excel

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

First row is header в контекстном меню импорта

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

Интерфейс

Прикрепление папки при помощи drag-n-drop

Прикрепить папку, то есть открыть ее в панели Files, теперь можно, перетащив её.

Открытие вкладок в режиме разделенного редактора

Если редактор разделен вертикально на несколько вкладок, вы можете расширить окно редактора для любой из вкладок, кликнув по ней дважды. Чтобы вернуться в прежнее состояние, снова кликните дважды по окну.

Длинные названия вкладок

В одной из предыдущих версий мы укоротили названия вкладок. Это не всем понравилось, поэтому мы сделали настройку:

На этом все!

Скачать триал на месяц

Фидбек принимаем в комментариях к посту и здесь:

Трекер (это если точно нашли проблему)

Телеграм-канал

Твиттер

Почта

Команда DataGrip

Подробнее..

AppCode 2020.3 локализация для Swift, переход к определению до индексации, улучшенные рефакторинги и многое другое

14.12.2020 12:16:00 | Автор: admin

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


КПДВ



Поддержка Swift


Поддержали пачку новых возможностей языка:


  • SE-0279, SE-0286: Multiple trailing closure syntax.
  • Allow synthesis of Equatable and Hashable in conditional conformances (see the SE-0185 amendment).
  • SE-0276: Multi-pattern catch clauses.
  • SE-0269: Increased availability of implicit self in @escaping closures when reference cycles are unlikely to occur.
  • SE-0044: Import as member (OC-20445).
  • SE-0280: Enum cases as protocol witnesses.

Локализация


В AppCode давно есть локализация для строк в Objective-C, в этом релизе реализовали то же самое для Swift:


  • Добавили действие для выделения строки в .strings-файл: Локализация строки
  • Сделали фолдинг для NSLocalizedString: Фолдинг для локализованных строк
  • Реализовали навигацию, автодополнение и поиск использований для ключей локализации.

Действия для изменения кода


Добавили несколько небольших, но полезных действий по модификации кода:


  • Проверку и удаление ненужных self:Проверка и удаление ненужных self
  • Действие для удаления ненужных аргументов в замыканиях: Удаление ненужных списков аргументов
  • Конвертацию замыканий в конце выражения в аргументы метода (и наоборот):Замыкание в аргумент метода
  • Превью для быстрых исправлений: Превью

Change Signature


Rename, который работает для смешанного Objective-C/Swift кода, у нас уже есть. А в этом релизе доработали Change Signature, чтобы он тоже работал сразу же со смешанным кодом. Кроме этого:


  • Добавили выбор типа throw в диалог рефакторинга: Change Signature
  • Стали нормально обрабатывать значения по умолчанию для аргументов и variadic-параметры
  • Стали правильно показывать превью для init-методов.

Rename


Сделали новое отображение для настроек рефакторинга Rename открыть их можно по :


Rename


Переход к определению типа


Работает даже до конца индексации реализовали по тому же принципу, что и автодополнение с использованием SourceKit.


Отладчик


В отладчике появилось несколько полезных платформенных возможностей:


  • Возможность просмотреть поля переменной прямо в редакторе и добавить ее в Inline Watches:
    Inline watches
  • Отображение Inline Watches в табе Variables:Inline Watches
  • Стрелочка счетчика команд, которую можно двигать во время отладки: Program counter

Code With Me


Code With Me


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


Контроль версий


Теперь вместо changelistов можно включить git stage:


Git stage


А Search Everywhere получил новый таб для поиска по коммитам:


Git tab


Поддержка XCFrameworks


Это про сущности из .xcframework теперь они корректно определяются IDE.


Просмотр определения


Возможен прямо из Project view с помощью Space:


Просмотр определения


На этом всё! Все вопросы и пожелания пишите прямо тут в комментариях будем рады ответить!


Команда AppCode

Подробнее..

Научно-исследовательские инициативы JetBrains

03.03.2021 14:04:54 | Автор: admin
Develop with pleasure, The drive to develop об этом вы наверняка от нас слышали. Но наши интересы далеко не ограничиваются разработкой и созданием мощных инструментов для повышения продуктивности. Мы верим, что можем многое изменить и сделать мир лучше. Один из верных способов проведение исследований в области передовых технологий и образования. Совместно с ведущими научными учреждениями мира мы занимается прикладными исследованиями, способными влиять на жизни людей и двигать нас всех вперед.

Наши научные исследования объединены в рамках направления JetBrains Research.

Ниже мы представим исследовательские группы JetBrains Research и расскажем, чем они занимаются.

Наука сегодня для технологий будущего



JetBrains Research объединяет более 150 исследователей, участвующих в проектах более 19 лабораторий и групп. Лаборатории и группы ведут работу в самых разных направлениях от физики элементарных частиц до разработки ПО.


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



Исследовательские группы



BioLabs


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


Задача BioLabs раскрыть механизмы эпигенетической регуляции у людей и животных и понять, какое значение эти механизмы играют в процессах дифференцировки и старения клеток. Самым крупным является проект старения, реализуемый BioLabs совместно с Университетом Вашингтона в Сент-Луисе. Другие исследовательские проекты посвящены различным темам, включая новые алгоритмы анализа данных, эффективные инструменты обработки данных для секвенирования нового поколения (Next Generation Sequencing), масштабируемые конвейеры данных, подходы к визуализации и мета-анализу существующих баз данных с информацией о механизмах эпигенетической регуляции. BioLabs также отвечает за PubTrends новый сервис для анализа научных публикаций, позволяющий быстрее анализировать тренды и находить значимые работы. Такой сервис необходим, поскольку число работ, публикуемых каждый год, неуклонно растет, и уследить за всеми публикациями по выбранной теме практически невозможно.


Вернуться к списку исследовательских групп


Группа биоинформатики


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

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


Вернуться к списку исследовательских групп


Лаборатория нейробиологии и физиологии развития


Нейробиология и физиология развития прошли долгий путь и накопили фундаментальную базу исследований. И тем не менее многое в этой науке по-прежнему остается неизведанным. А ведь эти науки таят в себе огромный потенциал к пониманию человеческого мозга.
Задача лаборатории нейробиологии и физиологии развития разработать вычислительный фреймворк для создания динамических пространственных моделей структуры нервных тканей и динамики базовых стимулов. Проект Biological Cellular Neural Network Modeling (BCNNM) использует последовательности биохимических реакций для запуска сложных моделей нейронных сетей при формировании исходных стволовых клеток. Фреймворк можно использовать для in silico репликации экспериментов, проведенных in vitro, чтобы получать измерения с ключевых компонентов, а также выполнять предварительную вычислительную проверку новых гипотез.


Вернуться к списку исследовательских групп



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


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


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


Вернуться к списку исследовательских групп


Исследовательская группа Paper-Analyzer


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


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


Вернуться к списку исследовательских групп


Лаборатория криптографии


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


Лаборатория криптографии занимается исследованиями современных задач в области криптографии и информационной безопасности. Она сотрудничает с COSIC исследовательской группой компьютерной безопасности и промышленной криптографии в Левене (Бельгия), Selmer Center в Университете Бергена (Норвегия) и INRIA (Франция). Исследования ведутся по различным направлениям: криптографические логические функции, симметричные шифры, легковесная криптография, технология блокчейна, квантовая криптография и информационная безопасность. Помимо публикации монографий и статей в ведущих журналах о криптографии, сотрудники лаборатории преподают криптографию в Новосибирском государственном университете и организуют NSUCRYPTO Международную студенческую олимпиаду по криптографии.


Вернуться к списку исследовательских групп


Группа HoTT и зависимых типов


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


Исследовательская группа занимается созданием Arend зависимо-типизированного языка и инструмента доказательства теорем, основанного на гомотопической теории типов. HTT является более продвинутым фреймворком, чем те, на которых основаны инструменты вроде Agda и Coq. Конечная цель создать онлайн-помощник для доказательства теорем, основанный на современной теории типов, который бы позволил формализовать определенные разделы математики.


Вернуться к списку исследовательских групп


Лаборатория методов ядерно-физических экспериментов


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


Лаборатория методов ядерно-физических экспериментов базируется в МФТИ. Основной интерес лаборатории методологии и ПО для решения задач в области физики элементарных частиц. На данный момент команда программистов лаборатории занимается разработкой нового поколения инструментов для получения данных (медленное управление, обработка сигналов) и анализа данных. Исследования лаборатории охватывают три сферы: физика элементарных частиц без ускорителя (эксперименты GERDA, Троицк ню-масс, KATRIN и IAXO), численное моделирование в физике элементарных частиц (эксперименты с ускорителем и без, атмосферное электричество, физика рентгеновского излучения) и разработка программного обеспечения для экспериментальной физики (системы получения и анализа данных, проекты по разработке инфраструктур, научные библиотеки для языка Kotlin). Огромное внимание уделяется и обучению: лаборатория старается дать молодым студентам возможность получить реальный опыт в физике и разработке.


Лаборатория методов ядерно-физических экспериментов


Вернуться к списку исследовательских групп


Лаборатория исследований процессов обучения


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


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


  1. Кто идет в STEM и программирование?
  2. Какие факторы (когнитивные возможности, история семьи и т. д.) приводят человека к лучшим результатам и уменьшают вероятность забросить учебу?
  3. Существуют ли характерные установки (мотивация, вовлеченность и т.д.), способные пересилить первоначальные данные?
  4. Какие методологии обучения приносят успех, а какие повышают вероятность неудачи?

Вернуться к списку исследовательских групп


Лаборатория алгоритмов мобильных роботов


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


Лаборатория алгоритмов мобильных роботов объединяет исследования в области разработки эффективных алгоритмов для мобильных роботов. В лаборатории имеется единственный в России экземпляр Duckietown платформы и среды, позволяющих разрабатывать алгоритмы для мобильных роботов. В центре внимания лаборатории задача одновременной локализации и построения карты (SLAM). SLAM подразумевает составление и последующее поддержание карты неизвестной среды; при этом благодаря анализу данных с различных датчиков можно отслеживать местонахождение агента в среде. Сложность задачи SLAM связана с шумами, свойственными физическим датчикам, а также с необходимостью следить за изменениями в динамической среде. Кроме того, многие алгоритмы SLAM рассчитаны на недорогое оборудование, которое задает строгие требования к производительности. В 2019 году лаборатория роботов участвовала в третьих AI Driving Olympics соревнованиях роботов, управляющих беспилотным транспортом. Эти престижные соревнования считаются местом силы для развития знаний в сфере беспилотных автомобилей. Наша лаборатория заняла первое место во всех трех состязаниях. Примечательно, что это был первый прецедент победы алгоритма глубокого обучения на этих соревнованиях.


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


Лаборатория алгоритмов мобильных роботов


Вернуться к списку исследовательских групп


Проблемы оптимизации в программной инженерии


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


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


Вернуться к списку исследовательских групп


Группа параметризованных алгоритмов


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


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


Вернуться к списку исследовательских групп


Лаборатория параллельных вычислений


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


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


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


Вернуться к списку исследовательских групп


Лаборатория киберфизических систем


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


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


Вернуться к списку исследовательских групп


Методы машинного обучения в области программной инженерии


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


Группа методов машинного обучения в области программной инженерии занимается разработкой и тестированием методов улучшения инструментов и процессов разработки путем применения анализа данных (включая машинное обучение) к данным из программных репозиториев. Совместно с командами нескольких продуктов JetBrains группа занимается интеграцией в продукты современных методов на основе данных. В данный момент группа работает над десятком исследовательских проектов на различные темы от поддержки библиотек сбора данных до генерации кода из описаний на естественном языке. Недавние результаты работы группы включают новый подход к рекомендации рефакторингов Move method, исследование нарушений лицензий в заимствованном коде на GitHub, современный подход к присуждению авторства исходного кода и метод построения векторных представлений стиля кода без явных признаков.


Вернуться к списку исследовательских групп


Лаборатория языковых инструментов


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


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


Вернуться к списку исследовательских групп


Лаборатория верификации и анализа программ (VorPAL)


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


В лаборатории верификации и анализа программ студенты, аспиранты и исследователи занимаются разработкой программных технологий, основанных на формальных методах, таких как верификация, статический анализ и методы трансформации программ. Эти методы помогают повысить продуктивность разработчиков при использовании ими автономных инструментов, расширений языков программирования и плагинов для IDE.
Существенная часть исследований посвящена изучению возможностей по расширению Kotlin. Мы верим, что Kotlin можно продолжать улучшать и расширять. Например, это могут быть макросы, liquid-типы, pattern matching, вариативные дженерики. Также в лаборатории занимаются исследованием применения
конколического тестирования в Kotlin, различных техник фаззинга компилятора и других областей.


Лаборатория верификации и анализа программ (VorPAL)


Вернуться к списку исследовательских групп


Лаборатория инструментов совместной работы


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


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


Вернуться к списку исследовательских групп



Если вы хотите присоединиться к какой-либо из групп, создать совместный проект или у вас есть общие вопросы, пишите нам по адресу info@research.jetbrains.org.


Благодарим Ольгу Андреевских за помощь в подготовке этой публикации.



Ваша команда JetBrains Research
The Drive to Develop
Подробнее..

XUnit тестирование в TeamCity

15.01.2021 14:04:54 | Автор: admin

Microsoft активно развивает свои проекты с открытым кодом, например, ASP.NET Core или MSBuild. Вместе с этим набирает популярность и тестовый фреймворк xUnit, используемый в них для модульного тестирования. В этой статье мы рассмотрим несколько способов запуска xUnit-тестов для непрерывной интеграции проекта средствами TeamCity.


Примеры конфигураций сборки можно найти на этом демо-сервере TeamCity, а исходный код лежит в этом репозитории: Lib это код тестируемого приложения, а Lib.Tests проект с тестами. Оба этих проекта нацелены на .NET версий net472 и netcoreapp2.1.


Для поддержки xUnit, в тестовом проекте задана NuGet-зависимость на соответствующий пакет xunit:


<PackageReference Include="xunit"/>


Этот мета-пакет не содержит бинарных файлов, а добавляет несколько зависимостей на NuGet-пакеты xunit.core, xunit.assert и xunit.analyzers. Это тестовое API xUnit. Каждый тестовый метод в xUnit помечается атрибутом [Fact] для обычных тестов или [Theory] для параметризованных тестов. Обычно, каждому тестируемому модулю соответствует свой тестовый класс с набором тестовых методов, проверяющих ту или иную логику. Каждому тестируемому проекту соответствует свой тестовый проект.


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


xUnit console runner


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


  1. Где взять xunit.console на агенте TeamCity, чтобы потом использовать его для запуска тестов?
  2. Какую версию xunit.console выбрать? Пакет xunit.runner.console содержит набор исполняемых файлов для разных версий .NET.
  3. Как быть, если нужно выполнить тесты в нескольких сборках одного тестового проекта, созданных для разных версий .NET?
  4. Как настроить сбор статистики покрытия кода? Эта статистика, конечно, не может полностью отражать качество модульного тестирования, но она может быть полезной для обнаружения кода, непокрытого тестами.
  5. Какие параметры использовать для тестовой утилиты и для сбора статистики покрытия кода?
  6. Как передать результаты тестов и статистику покрытия в TeamCity?

Рассмотрим пример конфигурации сборки TeamCity, содержащей 5 шагов, в каждом из которых мы используем ранер .NET:


image


Первым шагом решаем вопрос (1): Где взять xunit.console?:


image


Этот шаг использует команду .NET, чтобы добавить зависимость на пакет xunit.runner.console в тестовый проект Lib.Tests. При восстановлении зависимости на шаге 2 утилита xunit.console появится на агенте TeamCity. Если есть несколько тестовых проектов, то зависимость можно будет добавить только в один. Но как определить точный путь к xunit.console после его загрузки? Если ничего не предпринять, пакет будет загружен в стандартную директорию кэша NuGet-пакетов:

  • в Windows: %userprofile%\.nuget\packages
  • на Mac/Linux: ~/.nuget/packages

Эти пути известны, но они зависят от операционной системы, от аккаунта, под которым запущен агент TeamCity, и от персональных настроек среды окружения для этого аккаунта. Условия могут меняться от агента к агенту. Чтобы быть уверенным, по какому пути найдется xunit.console, лучше задать переменную среды окружения NUGET_PACKAGES со значением %teamcity.build.checkoutDir%/packages. Эта переменная определяет, где появятся NuGet-пакеты после восстановления зависимостей на следующем шаге сборки. В этом примере она указывает на произвольную директорию packages, относительно корневой директории проекта. Вот как это выглядит на странице редактирования параметров:


image


Благодаря этой переменной окружения, путь к xunit.console больше не зависит от внешних факторов. Следующий шаг довольно прост. Он строит решение (solution), восстанавливая зависимости:


image


После его выполнения, в директорию packages добавятся NuGet-пакеты всех зависимостей, включая xunit.runner.console, а в директорию Lib.Tests/bin/Debug тестовые сборки, соответствующие целевым версиям .NET. И если версия тестовой сборки в директории Lib.Tests/bin/Debug/net472 уже готова для выполнения тестов, то директория Lib.Tests/bin/Debug/netcoreapp2.1 для .NET CoreApp 2.1 не содержит всех требуемых бинарных зависимостей. Вместо этого, в ней присутствуют _JSON-_файлы с описанием того, где найти эти бинарные зависимости. Шаг 3 собирает всё вместе для приложений .NET CoreApp 2.1:


image


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


  • Lib.Tests/bin/Debug/net472
  • Lib.Tests/bin/Debug/netcoreapp2.1/publish

Необходимые для запуска тестов утилиты xunit.console соответственно находятся в:


  • packages/xunit.runner.console/**/net472/xunit.console.exe
  • packages/xunit.runner.console/**/netcoreapp1.0/xunit.console.dll

где ** версия пакета xunit.runner.console.


Вопросы (1) и (2) решены. Для решения вопроса (3) необходимо добавить два шага, выполняющих тесты для двух версии .NET. Потенциально, количество целевых версий тестовых проектов .NET может быть довольно большим, поэтому и шагов тестирования с похожим набором параметров тоже может быть много. Эту проблему можно решить, например, с помощью PowerShell-скрипта или TeamCity Kotlin DSL. С вопросами (4) и (5), в общем случае, приходится разбираться самостоятельно, но, использовав команду .NET, мы получим следующие преимущества:

  • статистику покрытия кода с передачей параметров, кроссплатформенностью и всеми отчетами
  • автоматический запуск xunit.console.dll и _xunit.console.exe _подходящим способом, в зависимости от выбранного окружения (ОС, Docker, и т.д.)

Следующие два шага выполняют тесты командой .NET:

image


image


Открытым остался последний вопрос (6): Как передать результаты тестов TeamCity?. xunit.console делает это самостоятельно, полагаясь на переменную среды окружения _TEAMCITY_PROJECTNAME, которую агент TeamCity автоматически добавляет ко всем порожденным процессам. xunit.console передает результаты тестов, используя TeamCity service messages.


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


Meta-Runners Power Pack


Пакет TeamCity мета-ранеров Power Pack содержит мета-ранер xUnit.net-dotCover, который упрощает запуск xUnit-тестов и сбор статистики покрытия кода. Пример конфигурации сборки с его использованием содержит всего два шага:


image


Здесь первый шаг идентичен шагу (2) из предыдущего подхода. Второй шаг, на основе мета-ранера, запускает тесты и выглядит внушительно:


image


Этот шаг получает xunit.console из того же NuGet-пакета xunit.runner.console и запускает тесты сборок только для полных версий .NET Framework (в нашем случае .NET Framework 4.72), попутно собирая статистику покрытия кода. Он заменяет 2 шага скачивания xunit.console и запуска тестов по сравнению с предыдущим подходом.


Недостатки мета-ранера xUnit.net-dotCover:


  • Не может запускать тесты в тестовых проектах, собранных для .NET Core и .NET 5+.
  • Пользовательский интерфейс для передачи параметров dotCover не очень нагляден.
  • Нужно самостоятельно выбирать версию xunit.console в поле Xunit Runner Executable.

Очевидно, что мета-ранер не подходит для нашего случая, но, тем не менее, является рабочим решением для тестовых проектов, нацеленных на полные версии .NET Framework.


dotnet test


.NET Runner с командой test является самым простым, надежным и мощным способом тестировать .NET код в TeamCity. Наша задача решается всего лишь одним простым шагом конфигурации:


image


Такой подход имеет следующие преимущества:


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


  • Тесты могут выполняться для всех тестовых сборок решения или нескольких решений, для одного или нескольких проектов.


  • Можно запускать тесты для определенной версии .NET или для набора версий в многоцелевых проектах с использованием элемента TargetFrameworks, включая Full .NET Framework, .NET Core и .NET 5+.


  • Поддерживается тестирование в Docker-контейнерах.


  • Кросс-платформенный сбор статистики покрытия кода.



Если тестовый проект создан в средах разработки Visual Studio или Rider или с использованием шаблонов из командной строки dotnet new, например, dotnet new xunit -o Lib.Tests, то ничего дополнительного делать не нужно. Если же тестовый проект создается в "блокноте", то, помимо зависимости xunit, дополнительно нужно добавить зависимость на пакет Microsoft.NET.Test.Sdk и на тестовый адаптер xunit.runner.visualstudio:


<PackageReference Include="Microsoft.NET.Test.Sdk"/>


<PackageReference Include="xunit.runner.visualstudio"/>


Пакет Microsoft.NET.Test.Sdk содержит набор свойств и скриптов MSBuild, которые делают проект тестовым, а тестовый адаптер отвечает за интеграцию определенного тестового фреймворка: в нашем случае xunit.runner.visualstudio, с Visual Studio Test Platform. Другие фреймворки также имеют свои адаптеры, например, NUnit NUnit3TestAdapter, а MSTest MSTest.TestAdapter.


Мы рекомендуем использовать именно этот подход для тестирования вместе с xUnit и другими тестовыми фреймворками.


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

Подробнее..

Категории

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

  • Имя: Макс
    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