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

Jetbrains

Большой разговор с новым Kotlin Project Lead Романом Елизаровым

16.03.2021 12:09:05 | Автор: admin

В ноябре стало известно, что работу над Kotlin возглавит Роман Елизаров (elizarov). Поскольку теперь за дизайн языка отвечает он, интересно лучше понять его видение. Поэтому на онлайн-конференции Joker мы задали Роману много вопросов. А теперь для Хабра сделали текстовую версию (видеозапись тоже прикрепляем).



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


  • Как принимаются решения, ломающие обратную совместимость?
  • Чем философия Kotlin отличается от C# и почему?
  • Насколько приоритетна производительность?
  • Чем корутины в Kotlin отличаются от Project Loom в Java?
  • Какой тренд влияет на языки прямо сейчас?

Расспрашивали Антон Архипов (Developer Advocate в JetBrains) и Алексей Стукалов (руководитель направления DevRel в компании Haulmont, создавшей CUBA Platform). Но не все вопросы они придумали сами: поскольку дело происходило на конференции, часть была написана зрителями.



Взаимодействие Project Lead, команды Kotlin и партнеров


В чем заключается позиция Project Lead? Это бог и папа всего проекта или какая-то номинальная должность?


Номинальная. Я точка входа для JetBrains в Kotlin: разруливаю, куда, что и кому отправить, помогаю всем находить какие-то варианты, представляю Kotlin в каких-то организациях (и в случае с партнёрами, и внутри JetBrains). И название Project Lead неслучайно: это не Project Manager, мне не надо управлять кем-то.


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


И Kotlin очень открытый к сообществу проект. Мы не Swift, где Apple может в закрытую что-то пилить, а потом бац выкатить и поставить комьюнити перед фактом. У нас секретов нет, все эксперименты видны на GitHub.


Звучит как плоская структура, а можешь подробнее рассказать, из кого состоит команда?


Kotlin очень большой, у нас больше 100 человек, и они сформированы в небольшие команды, каждая занимается своим кусочком. Этот кусочек может быть технической частью (например, JVM-бэкенд), а может продуктовым направлением (например, Kotlin Multiplatform Mobile).


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


Все эти команды независимы друг от друга, у них свой релиз-цикл и своё понимание дальнейшего развития?


В целом, конечно, нет. Основное событие Kotlin релиз компилятора, который мы сейчас делаем 2 раза в год, плюс IDE к нему. Это большие релизы, ещё есть патчи и другое.


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


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


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


Синхронизация такого количества команд и людей это отдельная задача. Это зона ответственности Project Lead, или оно само собой работает?


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


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


Было упомянуто взаимодействие с компаниями-партнёрами. Google большой участник экосистемы Kotlin. Как вы с ними взаимодействуете?


Роман: Google действительно крупнейший партнер, и неспроста. Они не просто поддерживают Kotlin так, как это делают другие компании. Есть анекдот про свинью и курицу, где курица говорит: Давай мы откроем ресторан под названием Яйца и Бекон. Свинья подумала: Не, так не пойдет, I'll be commited, but you'll just be participating.


Курица и свинья идут по дороге.
Слушай, Свин, я тут подумала, не открыть ли нам с тобой ресторан? говорит курица.
А какое название дадим? спрашивает свинья.
Как тебе Яичница с беконом?
Не пойдет мне тогда придется посвятить себя проекту полностью, а ты будешь задействована лишь частично!
Scrum. Революционный метод управления проектами, Джефф Сазерленд

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


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


В каком-то плане они от вас зависят, потому что они должны быть встроены в ваш релиз-цикл. У них есть Early Access?


Мы координируемся с крупными партнерами так же, как и внутри между собой, когда все команды понимают, какие у нас общие планы и цели. Это не только Google, но и Gradle, Spring.


Образование и спортивное программирование


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


Роман: Ответ очень простой, у меня на эту тему есть блог Intentional qualities в Medium.


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


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


Как новичку объяснить, что такое public static void main? Ответ никак.


Я скажу просто не трогай, так должно быть.


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


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


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


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


Я вижу, что ты явно отстал от спортивного программирования, потому что там давно можно писать на Kotlin. Более того, JetBrains один из спонсоров ICPC, потому что занимается инструментами для программистов и предоставляет инструменты для всех участников соревнования.


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


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


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


Дизайн языка


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


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


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


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


Есть, конечно, неравенство: запросы, которые идут из JetBrains первоочередные. Потому что, извините, мы делаем язык, в первую очередь надо, чтобы нам было хорошо. Во вторую очередь наши большие партнеры (но это не означает, что приходит Google, говорит: Мы написали библиотеку с такой-то фичей, и мы непременно побежали её имплементировать). Затем комьюнити. Но все интересы учитываются. Есть приоритизация, а дальше идут сложные трейдоффы.


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


Посматривает ли команда Kotlin в другие новые языки есть ли там что-то полезное, что стоит внести в код?


Действительно, Kotlin изначально родился как синергия трендов и тенденций современных языков программирования. У Андрея есть замечательный доклад про то, какие языки повлияли на Kotlin, там он подробно идет по фичам и рассказывает, что для них послужило вдохновением. В докладе видно, что есть и C#, и Groovy, и Java, естественно и это влияние никуда не делось.


Очень многие говорят: Kotlin очень похож на Swift, кто на кого повлиял? Интересно, что никто ни на кого. Apple разрабатывал Swift закрыто. Kotlin разрабатывался совершенно независимо, JetBrains работала над ним закрыто меньше года, а затем проект был анонсирован и работа пошла открыто. Как мы теперь знаем, Swift тогда был на финальных стадиях дизайна. То есть Kotlin не мог повлиять на Swift, потому что там уже долго работали внутри и почти финализировали дизайн.


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


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


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


Даже не потому, что нравится, а потому что современное прикладное программирование, например, мы пишем бизнес-софт и решаем бизнес-задачи очень похоже. Не важно, на каком языке ты пишешь: на C#, Java или Kotlin у тебя те же самые проблемы, ты используешь похожие шаблоны проектирования, ты сталкиваешься с похожими проблемами, которые надо выразить в коде.


Ты не хочешь вагоны boilerplate, чтобы создать бизнес-решение. Ты хочешь, чтобы оно было компактное, чтобы код отражал твою бизнес-мысль. И многие языки (не только Kotlin) стремятся снизить этот барьер, нащупать какие-то решения, которые позволяют снижать барьер между мыслью и кодом.


И если это решение было хорошо нащупано, то его быстро одобрят. Например, C# придумал async/await и запустил его в массы в 2010 году. Но проблема была у всех! Увидели крутое решение раз, и оно всюду, потому что проблема всеобщая, и её нужно решить. И это было огромным вдохновением также и для Kotlin, чтобы сделать корутины. Любой современный программист сталкивается с асинхронщиной, без неё никак в современном мире.


Это может означать, что существует какой-то асимптотически самый крутой язык, к которому все стремятся, и лет через 20 все языки сольются в него?


Нет-нет! У каждого большого языка со множеством пользователей есть уникальная философия, и за каждым стоит какая-то единая мысль. Хорошие языки не затаскивают фичу просто так.


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


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


Попробуем понять философию Kotlin на примере. В C# есть ключевое слово event. Оно не несёт ничего сверхъестественного, всё достаточно легко реализуется в функциональном стиле. Для шарпистов оно удобное и они спрашивают, как мы без ивентов вообще живём.


Вопрос: появятся ли в Kotlin ивенты? И какая часть философии запрещает или заставляет завести нечто подобное?


Этот пример как раз хорошо иллюстрирует отличия философии дизайна C# и Kotlin. Обычный процесс создания фич в C# такой: есть какая-то проблема, и мы её решаем. Затаскиваем какую-то новую фичу, специально делаем ключевые слова. Были у людей проблема с генераторами сделали генераторы с yield и так далее. Есть проблема с асинхронностью затащили ещё два ключевых слова async/await. Надо добавить ивенты сделали специальную фичу event. Надо конструировать объекты, пересоздавать и подменять в них какие-то поля сделали специальную конструкцию with. И это очень шарповый подход: создавать уникальную синтаксическую конструкцию для решения конкретной проблемы.


И в целом у C# тенденция целенаправленно прибивать фичи гвоздями. Ну, иногда бывает процесс обобщения, как это было с async/await, когда сначала прибили всё к конкретному типу task, а затем обобщили.


И это хорошо для Microsoft, которая строит свой мир по принципу я всё контролирую сверху вниз. Я бог, и я знаю, что вы будете делать. Я делаю не просто язык, а язык, с помощью которого вы будете писать на наших библиотеках, под наши application-сервера, деплоить в наше облако и редактировать в наших IDE.



Для Microsoft естественна такая философия дизайна. Когда они делали async/await, они специально делали его под конкретную библиотеку с конкретными задачами.


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


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


Поэтому у нас нет ивентов, но есть перегрузка оператора +=, есть лямбды. Ты можешь легко и непринужденно набросать в 10 строк DSL, который для конечного программиста будет выглядеть ровно как ивенты в C#.


Язык даёт тебе строительные блоки, из которых ты в конечном счете соберешь штуку, которая тебе нужна в конкретном домене. А в другом домене нужно другое, значит, из строительных блоков можно собрать что-то другое.


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


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


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


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


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


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


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


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


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


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


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


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


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


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


Если в Web Archive поискать старые документы про Python, найдётся вступление, что Python подходит не только для создания маленьких программ, но и для больших: больше 10 тысяч строк кода. Тогда для Python программа больше 10 тысяч строк казалась дико большой.


Когда создавался Kotlin, изначально была задача, что мы на нем будет писать программы от 1 миллиона строк кода. А из этого автоматом следует тулинг: как поддерживать программу в миллион строк без него? Из этого следствие язык должен быть изначально продуман так, чтобы он был понятен инструментам.


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


Чем Kotlin принципиально отличается от Java? Или Kotlin красивая упаковка для Java, как Swift для Objective-C?


Swift и Objective-C совершенно разные языки. Хотя они интероперируемы между собой, и дизайн Swift заточен на то, чтобы хорошо оперировать с Objective-C.


То же и здесь. Kotlin это новый язык, который изначально был задуман, чтобы легко дружить с Java. Но это совсем другой язык, у него другая идеология. Он создавался для большого промышленного программирования, которым приятно пользоваться и работать в масштабе.


Изначально стояла задача решить боли Java. Огромное влияние на дизайн Kotlin возымела книга Effective Java. Там советы что в Java надо делать, а что не надо. И если вы её прочитаете, обнаружите, что половина этих вещей уже учтена в дизайне Kotlin. Если там написано не делайте этого, то в Kotlin этого просто нельзя сделать. Если там написано всегда делайте вот так, то в Kotlin просто сделана такая фича из коробки.


И Kotlin изначально задумывался как язык, учитывающий недостатки Java: он исправляет её проблемы с системой типов, добавляет null safety (потому что известная большая проблема у любого Java-проекта это NullPointerException), решает проблемы с многословностью (потому что тебе постоянно нужно делать codegen или писать геттеры и сеттеры), решает проблемы с абстракциями (потому что в Java по своему опыту сталкивался с паттерном, что каждый вызов нужно заворачивать в try из пяти строчек кода, определенным способом написанный копипастой).


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


О Kotlin вечно говорят в паре с Java, но сейчас он запустил корни уже в самые разные аспекты разработки: и фронт, и натив, и мобильная разработка. Остаётся ли JVM-платформа главным таргетом, или все одинаково полезны? И если что-то нельзя сделать на всех платформах, вы откажетесь это сделать?


Будем честны с собой. Да, сейчас для Kotlin JVM это основной рынок, и JVM самая большая платформа в мире для разработки на бэкенде. Но если посмотреть на графики, то эта платформа в целом не растёт. (Хотя и не умирает крики, что завтра Java умрёт, преувеличены.)


Новая интересная движуха происходит за пределами JVM-платформы. Появляются новые языки и технологии, фронт, cloud. То есть рост IT-рынка происходит за пределами JVM. А Kotlin задумывался не как сиюминутный язык, чтобы поиграться и бросить это игра вдолгую. Мы планируем работать над Kotlin многие десятки лет и оставаться современным языком.


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


Когда мы начинали Kotlin, приложения в основном писались на Java, было логично таргетить JVM. Время меняется, сейчас многие приложения пишутся далеко не на JVM, поэтому Kotlin надо туда.


Джависты привыкли, что программы, написанные на Java 2, должны работать на Java 15. А в JS-мире готовы переписывать, там меньше приверженцев жёсткой обратной совместимости. Какая философия у Kotlin?


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


До сих пор меньшая часть enterprise-проектов перелетела через Java 9. Многие застыли на Java 8 не от хорошей жизни, а потому что уже столько всего поломали, что хрен ты перепрыгнешь через девятку. В этом смысле там много примеров, как не надо делать.


Тема жизни после Java 8 такая болезненная, что на JPoint об этом был отдельный доклад Триши Джи.

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


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


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


Любой слом кода это недовольные люди, да?


Да, но единственный способ ничего не ломать это ничего не менять. Так не бывает. Вот это семантическое версионирование полный миф. Любой, даже самый минорный багфикс кому-то что-то сломал бы, потому что кто-то заточился под конкретное поведение. Мы прекрасно это понимаем.



Релевантный выпуск xkcd


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


В Kotlin есть хороший защитный механизм: благодаря Google есть структура Kotlin Foundation. Она во многом выполняет формальную роль, защищает торговую марку Kotlin от притязаний, но ещё выполняет важную вещь в рамках неё работает language committee.


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


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


Есть поверье, что именно комитетное управление в своё время сильно затормозило развитие Java. Как ты на это смотришь?


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


В Java и JVM появляется много новых фич, влияет ли это как-то на эволюцию Kotlin или его планы?


Безусловно влияет. Я уже сказал, что для нас JVM важная платформа, и Kotlin называется так, потому что K следующая буква после J. Он и задумывался как Java 2.0. И никуда не делась цель дать людям, пишущим на Java, возможность лёгкой миграции на более современный язык.


Что означает лёгкая миграция? Наши пользователи те, у кого миллионы строчек кода. Они не могут переписать свой код на Kotlin за один день. Поэтому есть явная цель: чтобы можно было, взяв проект на Java, адаптировать код постепенно. В большом проекте по-другому не получится.


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


В Kotlin уделяют много внимания продуктивности разработчика (чтобы он писал код быстрее), а насколько высок приоритет производительности (чтобы этот код исполнялся быстрее)?


Конечно, мы не C++, у нас нет цели zero cost abstractions. И нет цели делать системный язык для программирования низкого уровня, когда ты контролируешь каждый бит. Но перформанс нам не чужд. В любой современной разработке приложения тебе приходится работать с большими данными, списками. И важен, скорее, асимптотический перформанс.


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


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


Но в Kotlin есть задача, чтобы если потом в результате профилирования выяснилось, что в этом месте что-то подтормаживает, то были инструменты это исправить. А не как в Python, где если ты уткнулся в перформанс, то идёшь переписывать на C, другого варианта нет.


В Java давно обещают завезти Project Loom насколько это событие для Kotlin, где есть корутины? Возможно ли реализовать корутины на Loom?


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


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


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


Естественно, в основном это код, который делает I/O, поэтому он редко засыпает. Чаще всего работает без остановки, выполняет какую-то логику и иногда натыкается на то, что надо подождать I/O.


У Kotlin стояла другая задача. Мы видим, что в экосистеме Java растёт огромное число асинхронного программирования. В это вкладываются Spring, Vert.x, куча людей. Это код, который постоянно засыпает, просыпается, делает микрозадачи. Он выполняет много маленьких кусочков задачи, переключаясь между исполнением разных вещей.


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


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


То есть другая цель. И другое применение. Когда начинаешь смотреть в UI, что там делает активный и асинхронный код? Он асинхронный не потому, что постоянно делает I/O, а потому что летит куча ивентов, и куча маленьких кусков работы между переключениями. Чуть-чуть поработали и уснули, чаще всего мало работы и много переключений.


Поэтому трейдоффы в производительности другие. Корутины Kotlin не очень работают с кодом, который редко спит, а Project Loom наоборот. Мы проводили эксперименты. Loom пока недоступен даже в виде экспериментальной фичи, но можно выкачать самому, собрать билд и поиграться. Мы поигрались и подтвердили свою интуицию. Если начать делать реактивные стримы через Loom и постоянно их будить, то продолбаешь столько перформанса, что зачем тебе это? А если делать в Project Loom то, для чего он заточен, код, который будет иногда засыпать, то он хорошо себя ведёт.


Project Loom особо не нужен новый синтаксис, это библиотечная штука. Ты стартуешь виртуальный поток, I/O-операция в нём стоит тебе дёшево, потому что она заблокирует виртуальный поток. Мы сделаем библиотечную поддержку этого.


Сейчас в корутинах есть такое неудобство, что если пишешь асинхронный код с корутиной и хочешь вызвать блокирующую функцию (какой-нибудь парсер, который будет что-нибудь подсчитывать с сокета), неудобно, что ты должен это написать withContext(Dispatchers.IO). Чтобы выделить для этого специальный пул, который не страшно заблокировать.


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


И Project Loom позволит не требовать такой заворот, мы сможем запустить корутину в виртуальных средах, и так как они виртуальные, их можно будет блокировать безопасно. Потому что ты блокируешь виртуальный поток.


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


На Joker 2020 о Project Loom подробно рассказал Алан Бейтман (Oracle), для Хабра был сделан текстовый перевод. А о корутинах ещё в 2018-м у нас рассказывал сам Роман, доступна видеозапись.

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


Понятия не имею, я же не футурист, и хрустального шара у меня нет. Давайте посмотрим, что происходит сейчас. Тут надо понимать, что тренд реактивщины и функциональщины пока только в начале. Например, только недавно стали популярны реактивные UI-фреймворки. React, SwiftUI, Jetpack Compose и так далее.


Они стали популярны, но некоторые ещё только в разработке Jetpack Compose ещё не дошел до релиза. Мы видим, что реактивные UI-фреймворки предъявляют к языкам новые требования, которых раньше не было.


И, например, специально для поддержки React в JavaScript чуваки в Facebook совершенно сбоку запилили JSX целое расширение языка. В SwiftUI зарелизили жирный апдейт, они затащили в язык целый паровоз фич только для того, чтобы язык смог поддерживать этот реактивный UI.


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


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


Тем не менее, это реальность, как подростковый секс: все про него говорят, но никто не пишет.


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


А надо ли это? Идти же надо от запроса.


Конечно, надо. Мне очень нравится цитата Форда: Если бы я, когда делал свою Ford Model T, слушал бы людей и спросил бы у них, что вы хотите, они бы сказали мы хотим более быстрых лошадей.


Здесь такая же проблема. Ты говоришь запрос, здесь нет никакого запроса. Люди писали говнокод, 10 страниц кода UI, и ни у кого не возникало мысли, что можно написать 10 строчек, а всё остальное за тебя сделает реактивный фреймворк.


Кто-то по этому скучает.


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


А у нас в Ktor страничка кода то же самое делает. Всего одна! Её может написать любой среднестатистический программист, который прочитал спеку, что такое HTTP-заголовок. Вот куда мы стремимся.


Как сказал Роман, сейчас JVM основной рынок для Kotlin. Значит, если вы прочитали этот текст, то с высокой вероятностью связаны с JVM-миром. Тогда вам будет интересно на нашей Java-конференции JPoint (13-17 апреля, онлайн).

А если вы Android-разработчик, то вам подходит конференция о мобильной разработке Mobius (13-16 апреля).

И даже если вы дотнетчик, JS-разработчик или тестировщик, для вас в апреле мы тоже проведём конференции.
Подробнее..

Из студентов в преподаватели интервью с выпускниками магистерской программы JetBrains ИТМО. Часть 2

01.03.2021 18:19:29 | Автор: admin
Продолжаем знакомить вас с выпускниками магистратуры JetBrains и ИТМО Разработка программного обеспечения, которые по завершении обучения пополнили преподавательский состав программы. Во второй части интервью ребята рассказывают подробнее о своих задачах, подходах к преподаванию и дают советы абитуриентам. Первая часть интервью.



Есть ли что-нибудь, что вас раздражает в работе преподавателя?

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

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

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

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

Влад К.: Меня по-настоящему раздражает выкладывать файлики на вики. Да, очень. Любая опечатка или неточность, которую надо поправить, и понеслось правишь TeX, компилируешь, скачиваешь, находишь нужный файл на вики (самое сложное!) и кидаешь туда новую версию. Наверно, это можно как-то автоматизировать, но у нас такого курса не было!

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

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

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

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

А что радует и мотивирует больше всего?

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

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

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

Влад К.: Как и любого человека, которому нравится то, о чем он рассказывает, меня радует, когда кто-нибудь из студентов говорит, что решение задачи красивое.

Расскажите, как именно вы участвуете в преподавании?

Влад Т.: Я проверяю работы на нескольких практических курсах и веду практику на курсе Software Engineering. Раньше я участвовал в собеседованиях приемной комиссии и в оценке научно-исследовательских работ.

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

Дима Н.: Веду семинары и проверяю домашние задания в курсе по программированию на Java и других JVM-языках.

Леша: Основная моя деятельность в магистратуре лекции и практики по Python, практики по Java и домашние задания по Software Engineering. Еще я периодически читаю аналогичные курсы, но на других, обычно непрофильных программах.

Артем: Помогаю с курсом по С++, который преподается у ребят в магистратуре и CS центре. В основном я занимаюсь всем, что связано с домашними заданиями (проверка, помощь в подготовке условий, автотесты). У нас на курсе процесс проверки решения состоит из двух этапов: автоматические тесты и код-ревью. Студенты далеко не с первого раза успешно проходят второй этап. Преподаватель оставляет комментарии, задает вопросы, а студенты должны исправить решения. Таким образом происходит непрерывный диалог, что, на мой взгляд, очень круто!

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

Влад К.: Я принимаю участие в проведении двух курсов Алгоритмы и структуры данных и Дискретная математика. И там и там веду практические занятия и проверяю домашние задания. Дополнительно я отвечаю за информационное взаимодействие со студентами и стараюсь отвечать на все возникающие вопросы.

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

Рома: Два учебных года я вел практические занятия на курсе по C++. В мои обязанности входила подготовка материалов для семинаров, их проведение, работа со студентами, проверка заданий, помощь в проведении экзамена. Практически все время я работал в паре с еще одним коллегой, поэтому составлением и проверкой задач я занимался не в одиночку.

Сколько времени в неделю у тебя уходит на преподавание?

Влад Т.: Сейчас где-то 5 часов. Вероятно, будет больше.

Дима Н.: Полтора часа непосредственно на пару, часов пять-восемь на проверки, еще пара часов на подготовку к занятиям.

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

Саша: На проверку домашек у половины группы уходит примерно один рабочий день.

Осенний семестр в магистратуре проходил полностью онлайн. Как вы относитесь к этому формату?

Влад Т.: Вполне хорошо. На мой взгляд, это очень подходящий формат для IT-программ. Возможно, даже более подходящий, чем очное обучение.

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

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

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

Что бы вы посоветовали ребятам, которые планируют поступать на программу?

Влад Т.: Заранее оценить свои силы, не бояться нового и быть готовыми погрузиться в учебу с первых дней. Ну и удачи!

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

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

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

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

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

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

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

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

Ну и дерзкий совет: не планируйте поступать просто берите и поступайте!
Подробнее..

Научное программирование в МФТИ

13.05.2021 16:14:30 | Автор: admin

Привет, это Александр Нозик, и этот пост посвящен еще одной "интересной" магистерской программе (на этот раз на физтехе, совместно с JetBrains, Таврида Электрик и целым списком научных организаций). Про интересность вы решите сами, но программа в этот раз действительно уникальная (пока по крайней мере). Называется она Научное программирование (официальное название "Разработка и применение программного обеспечения в физических исследованиях") и расположена на ФПМИ и ЛФИ в МФТИ. Посвящена не отдельно физике, не отдельно программированию, не отдельно computer science, а стыку всего этого.

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

Если нет, то читаем дальше.

Зачем это?

Комната в CERN, где был изобретен интернетКомната в CERN, где был изобретен интернет

Дело в том, что все аспекты нашей современной жизни так или иначе связаны с компьютерами и программированием, наука и инженерия не исключение. Ученые и инженеры существенную часть своего рабочего времени посвящают работе с компьютерами. Если мы говорим про науку, то все начинается со стадии проектирования эксперимента. Мы делаем большие объемы математического моделирования, чтобы понять, что вообще можно измерить и как это лучше сделать. В конце концов, мы не можем работать методом тыка. Современные эксперименты очень дороги, и делать их, не зная заранее, что там можно измерить, очень невыгодно. Дальше нам надо собрать данные, для этого используются разнообразные автоматизированные системы управления. Эти данные нужно хранить (а данных может быть очень много, петабайты). К данным нужно обеспечить удобный доступ, организовать резервное хранение, сервисы по индексации и визуализации. В конце концов данные нужно обработать. А тут уже нужно задействовать весь арсенал современных компьютерных методов работы с данными от параллельных и распределенных вычислений до машинного обучения.

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

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

Как это?

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

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

  • Вычислительные методы

  • Анализ данных

  • Научная этика

  • Научный семинар

Остальные предметы выбираются студентом совместно с научным руководителем. Научный руководитель в нашей программе играет ключевую роль, потому что мы пытаемся охватить очень широкую область со множеством узких специализаций, и именно научный руководитель (и компания или институт, стоящие за ним) являются "направляющей", по которой студент будет двигаться. По этой причине руководителя нужно выбрать заранее и убедиться в том, что он (или она) вам подходит и вы подходите ему (или ей). В качестве бонуса от такой процедуры вы можете получить гарантированное поступление в магистратуру МФТИ. Наши промышленные партнеры (JetBrains и Таврида Электрик) готовы оплатить обучение для ограниченного количества студентов, которые прошли собеседования с руководителями, но по какой-то причине не прошли по конкурсу.

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

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

Математическое моделирование в физике частиц

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

Максим Долгоносов из ИКИ РАН и ВШЭ представляет широкое направление, связанное с моделированием космических детекторов и высокоэнергетических процессов в атмосфере (с заходом в физику плазмы). Над этой проблемой сейчас также работает очень активная группа в МФТИ под руководством Егора Стадничука и Екатерины Свечниковой из ИПФ РАН.

Художественное видение реакторной модели возникновения наземных гамма-всплесков. Автор: Екатерина СвечниковаХудожественное видение реакторной модели возникновения наземных гамма-всплесков. Автор: Екатерина Свечникова

Игорь Анатольевич Пшеничнов из ИЯИ РАН является ведущим мировым специалистом по фотоядерным реакциям, физике ядер-спектаторов и моделированию на платформе Geant4 как для экспериментов в физике частиц, так и для прикладных исследований, например медицинской физики. Ученики Игоря Анатольевича работают в МФТИ.

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

В лаборатории Nuclear Physics Methods JetBrains Research мы Александр Нозик и Roland Grinis также занимаемся разработкой новых экспериментальных инструментов для моделирования процессов (в основном на Kotlin и с использованием разных новых технологий.

Моделирование на сетках

Айно Константиновна Скасырская является уникальным специалистом по сеточным расчетам разного рода (гидродинамика, термодинамика, расчет механических напряжений, электромагнитные поля). Для таких расчетов нужно не только хорошо разбираться в решении дифференциальных уравнений на сетках, но и владеть современными коммерческими пакетами, такими как ANSYS и COMSOL. Ученики Айно Константиновны чрезвычайно востребованы в промышленности.

Анализ данных в астрофизике и физике космических лучей

На данный момент этой задачей занимаются сразу две не связанные между собой группы, сотрудничающие с нашей магистерской программой: Олег Евгеньевич Калашев из ИЯИ РАН и Дмитрий Костюнин из DESY (Германия). Обе группы занимаются анализом данных с крупных международных экспериментов, таких как Telescope Array, Tunka-rex и HESS, с использованием современных компьютерных методов, включая машинное обучение.

Иллюстрация из сборника "Физики шутят"Иллюстрация из сборника "Физики шутят"

Программное обеспечение для крупных проектов

Лев Шагалов курирует широкий спектр задач от крупной коммерческой компании Таврида Электрик одного из наших основных партнеров. Среди этих задач есть как разработка высоконагруженных распределенных систем последнего поколения для управления электросетями, так и разработка и внедрение "умных" алгоритмов в энергетической отрасли.

Константин Герценбергер является главой группы программного обеспечения в эксперименте BM@N на коллайдере NICA и занимается разработкой и поддержкой всех программных систем эксперимента. Петр Климай в рамках этой же коллаборации занимается системами хранения, индексации и визуализации больших объемов данных.

Игорь Хохряков входит в коллаборацию TANGO-controls и вместе со мной занимается разработкой распределенных гетерогенных систем сбора данных нового поколения и системами визуализации для них (кому интересно, пойдите посмотрите тут и тут.

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

Ильмир Усманов из JetBrains (отделение в Мюнхене) входит в команду Kotlin language research и занимается проектированием и оптимизацией элементов компилятора Kotlin, нужных в том числе для высокопроизводительных вычислений.

Roland Grinis в плотном сотрудничестве с лабораториями JetBrains Research и Kotlin scientific community занимается разработкой и интеграцией инструментов для высокопроизводительных тензорных вычислений и их использованием для реализации прикладного моделирования.

Еще?

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

Демонстрация библиотеки VisionForge. Визуализация трэков мюонов в подземном эксперименте Muon MonitorДемонстрация библиотеки VisionForge. Визуализация трэков мюонов в подземном эксперименте Muon Monitor

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

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

Как к нам попасть?

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

Более подробная и актуальная информация есть на сайте.

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

Подробнее..

Серия вебинаров по серверной разработке на Kotlin

07.12.2020 14:17:59 | Автор: admin
Все больше инженеров выбирают Kotlin для разработки серверных приложений. Полная совместимость с Java, корутины и высокая безопасность делают Kotlin отличным инструментом для подобных задач.

Мы организуем серию вебинаров (на английском языке), где расскажем о разработке бэкенда на Kotlin в сочетании с технологиями Apache Kafka, Spring Boot и Google Cloud Platform. Вебинары подойдут для Kotlin- и Java-разработчиков любого уровня подготовленности, в том числе для разработчиков мобильных приложений без опыта серверной разработки.

Kotlin и Apache Kafka, 10 декабря 2020, 19:30 20:30 МСК
Kotlin и Google Cloud Platform, 17 декабря 2020, 19:30 20:30 МСК
Kotlin и Spring Boot, 14 января 2021, 19:30 20:30 МСК

Подробнее о каждом из вебинаров читайте ниже.


Kotlin и Apache Kafka


image

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

O чем этот вебинар?


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

Спикеры:
  • Антон Архипов, Developer Advocate в команде Kotlin, JetBrains
  • Виктор Гамов, Developer Advocate, Confluent

Когда состоится вебинар?


10 декабря 2020
19:30 20:30 МСК
Подробная информация

Kotlin и Google Cloud Platform


image

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

О чем этот вебинар?


На вебинаре мы расскажем, как применить Kotlin в проекте с кодовой базой на Java, поговорим о таких возможностях Kotlin, как корутины, и продемонстрируем процесс развертывания приложения на Google Cloud.

Спикер: Джеймс Уорд, Developer Advocate, Google Cloud Platform

Когда состоится вебинар?


17 декабря 2020
19:30 20:30 МСК
Подробная информация

Kotlin и Spring Boot


image

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

О чем этот вебинар?


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

Спикер: Рэй Цанг, Developer Advocate в Google Cloud Platform и Java Champion

Когда состоится вебинар?


14 января 2021
19:30 20:30 МСК
Подробная информация

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

Все вебинары бесплатные. Записи будут доступны на канале JetBrains TV в Youtube. Подпишитесь на JetBrains TV, чтобы не пропустить появление записей.

Узнайте больше о бэкенд-разработке на Kotlin


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

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

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
Подробнее..

Recovery mode Почему Kotlin лучше Java?

24.05.2021 08:13:54 | Автор: admin

Это ответ на переведенную публикацию Почему Kotlin хуже, чем Java?. Поскольку исходная аргументация опирается всего на два примера, то не теряя времени пройдем по этим недостаткам Kotlin.

Проприетарные метаданные?

изрядное количество подробностей внутренней работы kotlinc скрыто внутри сгенерированных файлов классов...без IDEA Kotlin немедленно умрет

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

Kotlin будет отставать?

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

В Kotlin сделали примерно так:
if (x instanceof String) {
// теперь x имеет тип String! System.out.println(x.toLowerCase());
}

Но в Java версии 16+ стало так:
if (x instanceof String y) {
System.out.println(y.toLowerCase());
}

Получается, что оба языка имеют способ обработать описанный сценарий, но разными способами. Я уверен, что если бы мог вдавить огромную кнопку сброс, разработать Kotlin с нуля и снова выпустить сегодня бета-версию, то в Kotlin было бы сделано так же, как сейчас в Java. Учитывая, что синтаксис Java более мощный: мы можем сделать с ним намного больше, чем просто проверить тип (например, деконструировать типы-значения).
...
Ему придётся опираться только на себя и перестать рекламировать доступность всех преимуществ Java и её экосистемы. Пример с instanceof уже демонстрирует, почему я думаю, что Kotlin не будет лучше Java: почти каждая новая фича, которая появилась в Java недавно или вот-вот появится (в смысле, имеет активный JEP и обсуждается в рассылках) выглядит более продуманной, чем любая фича Kotlin.

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

when(val v = calcValue()) {  is String -> processString(v)}

Здесь в одной области можно проверить сразу несколько типов вместе со значениями значения, без создания дополнительных переменных. Попробуйте повторить в Java c if/instanceof/switch:

when(val v = calcValue()) {  is String -> processString(v)  42 -> prosess42()  is Int -> processInt(v)  else -> processElse(v)}

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

Прямо сейчас Kotlin оседлал волну успеха, но со временем жизнь его будет тем тяжелее, чем шире будет зазор между ним и Java, и чем сложнее будет преодолеть этот зазор.

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

Нативная поддержка null, которая греет душу любого котлиниста, легко заменяется в Java на обёртку из Optional.ofNullable. Data-объекты могут быть заменены более богатым функционалом record.

Все догоняющие возможности Java содержат фатальные изъяны по умолчанию, все больше заставляют прибегать к солгашениям, а не к дизайну языка. Вместо Optional можно передать null, а record ничуть не более богатый чем data class.

Как думаете, сохранит Kotlin свою популярность через пять лет и почему?

Некоторые в комментариях вспомнили историю Scala и Java. Но есть и другая история, история того что сделал С++ со старым Си.
Java несомненно останется там где нужно поддерживать старые решения. Однако новые решения для все больше писаться на Kotlin, пока он не станет языком по умолчанию, как это уже произошло в Android экосистеме, и прямо сейчас происходит для backend разработки в jvm экосистеме. Kotlin не просто лучше, он дает думать в другой парадигме, открыт для новых возможностей, страхует от многих ошибок на этапе компиляции.

Подробнее..

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

Подробнее..

НИУ ВШЭ Петербург и JetBrains проведут школу по практическому программированию для старшеклассников

11.03.2021 14:15:49 | Автор: admin

Питерская Вышка и компания JetBrains приглашают учащихся 10 и 11 классов на школу по практическому программированию и анализу данных. Среди лекторов ведущие преподаватели Петербурга и специалисты IT-компаний: Сергей Копелиович, Егор Суворов, Иван Ямщиков, Михаил Дворкин, Алексей Шпильман и другие.

Школа пройдет в два этапа: первый этап состоится с 22 по 28 марта в онлайн-формате. Второй этап будет очным, участники встретятся в Санкт-Петербурге с 5 по 10 мая. Участие в школе бесплатное.

Александр Омельченко, декан факультета Санкт-Петербургская школа физико-математических и компьютерных наук:

Наша школа это первый шаг на пути к самостоятельной работе в IT-компании. Мы не будем заниматься решением олимпиадных задач или подготовкой к ЕГЭ. Наша цель показать, как работать в команде, попробовать свои силы в исследовательском проекте в области машинного обучения, языков программирования, в реальной промышленной разработке. Участники смогут реализовать свой первый проект и понять, готовы ли они заниматься machine learning или software engineering.

Первый этап: с 22 по 28 марта, дистанционно

На этом этапе участников ждет продвинутый курс по алгоритмам от Сергея Копелиовича. Сергей окончил МатМех СПбГУ и учился в Академическом университете. Со школьных лет занимался олимпиадным программированием и математикой. Золотой медалист IOI 2005, 2006 и ACM ICPC 2009. Работал программистом в Яндексе, Вконтакте и ЦРТ. С 2009 года преподает алгоритмы в университетах и образовательных центрах (СПбГУ, СПбАУ, НИУ ВШЭ Петербург, Computer Science Center).Также участникам прочитают обзорные лекции по C++, Python, применению машинного обучения и облачным технологиям. Подробная программа доступна по ссылке.

Второй этап: с 5 по 10 мая, Санкт-Петербург

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

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

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

Подробности по ссылке. Регистрация завершится 20-го марта.

Подробнее..

Computer Science Center открыл приём заявок на новый учебный год

24.03.2021 16:21:32 | Автор: admin

До 10 апреля продолжается набор на вечерние курсы по математике и программированию в CS центре. Computer Science Center это совместный проект Школы анализа данных Яндекса, JetBrains и Computer Science клуба при ПОМИ РАН. Курсы проходят очно в Санкт-Петербурге и Новосибирске, жители других городов могут заниматься дистанционно. Обучение в Computer Science Center бесплатное.

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

Большинство наших студентов учатся в вузах или работают, поэтому расписание составлено так, чтобы занятия можно было совмещать с основной деятельностью. Однако будьте осторожны: на учёбу в Computer Science Center придется тратить не менее 15 часов в неделю. Если у вас недостаточно времени (или мотивации), советуем начать с онлайн-курсов на платформе Stepik.

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

  • Computer Science,

  • Data Science,

  • Software Engineering.

Подробнее обо всех направлениях на сайте. Для выпуска студенты проходят три семестра практики или научно-исследовательской работы (примеры есть на этой странице).

Чтобы стать студентом или студенткой CS центра, нужно справиться с вступительными испытаниями:

  • заполните анкету на сайте до 10 апреля,

  • решите задания онлайн-теста до 11 апреля,

  • участвуйте в онлайн-экзамене в конце апреля-начале мая,

  • пройдите собеседование в мае-июне.

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

Если вы еще не решили, стоит ли ввязываться в эту авантюру, посмотрите на отзывы выпускников:

Станислав Гордеев, разработчик игрового движка в People Can Fly (Варшава), выпускник 2018 года направления Software Engineering:

Когда-то давно, в сентябре 2014, будучи ещё студентом-физиком, я случайно наткнулся на хабро-статью про онлайн-курсы на Stepik, заинтересовался и прошёл курсы по C++ и алгоритмам, кроме того, узнал о CSC. На тот момент у меня помимо интереса появилась довольно амбициозная цель попасть в большой gamedev. Поступление оказалось совсем не лёгким и до последнего дня с письмом о зачислении я не верил, что всё получится. Моё обучение началось в 2016, и с тех пор я семимильными шагами приближался к своей цели. А все из-за неповторимой атмосферы знаний, амбиций, дружелюбия, которая не позволяет сидеть на месте, которая заставляет поверить в себя. Сейчас я с уверенностью могу сказать, что моя цель осуществилась в первую очередь благодаря CS центру, потому что это больше, чем просто курсы. Старайтесь, и у вас всё получится.

Анна Атаманова, разработчица в Яндексе, выпускница 2016 года направления Data Science:

Почему СS центр это дико круто:

курсы! (всё новое и интересное по основным направлением центра тут-тут-тут);

увлечённые своим делом преподаватели (таких людей в любом случае приятно слушать);

мотивированные, заинтересованные студенты (да у них можно узнать чуть ли не больше, чем на паре);

проекты! стажировки! (опыт, реальные задачи);

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

Артемий Пестрецов, разработчик в JetBrains, преподаватель CS центра, выпускник 2019 года направлений Data Science и Software Engineering:

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

Все отзывы можно посмотреть на этой странице.


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

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

Ждем будущих студентов Computer Science Center!

Подробнее..

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 доступны прямо там, если установить этот плагин.

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

Подробнее..

Личный опыт подготовка к магистратуре JetBrains в Университете ИТМО и первые впечатления

16.05.2021 16:07:51 | Автор: admin

Всем привет! На связи Антон Клочков, студент первого курса корпоративной магистратуры JetBrains Разработка программного обеспечения на базе Университета ИТМО. Я хочу рассказать, как выбирал программу, и главное оправдались ли мои ожидания.

Northern Eurasia Regional Contests 2017. Антон в центре снимка [прим. ред.]Northern Eurasia Regional Contests 2017. Антон в центре снимка [прим. ред.]

Пара слов о себе

Я из небольшого города в Хабаровском крае Советской Гавани. В школьные годы участвовал в разных олимпиадах, но занимал только призовые места, и дальше региона мне пройти не удавалось. Пишу код с восьмого класса, разработкой занимаюсь с первого курса вуза.

Школу я закончил весьма успешно: золотая медаль и 276 баллов по ЕГЭ дали возможность поступить в Университет ИТМО, чем я и воспользовался. Выбрал бакалаврскую программу Программирование и интернет-технологии, где познакомился с множеством замечательных людей и расширил свой кругозор в области разработки программного обеспечения.

В конце второго курса я присоединился к 3D4Medical в роли R&D Engineer занимался оптимизациями графического движка, разрабатывал внутренние инструменты и реализовывал фичи для приложения компании Complete Anatomy. К началу четвертого курса я сменил акцент с разработки в сторону машинного обучения и перешел в другую компанию BrainGarden, где развивал проекты, связанные со SLAM (Simultaneous localization and mapping) и computer vision. Меня устраивал уровень зарплаты и был очевиден карьерный путь. Однако пробелы в области алгоритмов и в некоторых разделах математики не давали покоя. Я понимал, что магистратура возможность устранить эти пробелы, и решил выбрать для себя подходящую программу.

Выбор и поступление

На корпоративную программу JetBrains я подал документы после тщательного обдумывания и сравнения с аналогами. Критерии были следующие:

  1. Есть предметы, имеющие отношение и к разработке, и к машинному обучению. У меня был опыт работы с задачами по deep learning, и хотелось развиваться в этом направлении.

  2. Программа базируется в Санкт-Петербурге он мне очень нравится своим спокойствием и доступностью цивилизации.

  3. Большинство преподавателей являются очень хорошими специалистами в отрасли, либо работают в ней прямо сейчас.

  4. Программа актуальна. Мне жалко тратить свое время на учебу, когда полученными знаниями можно воспользоваться, только если работаешь с технологиями времен СССР.

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

В итоге в поле зрения оказалась моя нынешняя программа, а также Машинное обучение и анализ данных из петербургского кампуса НИУ ВШЭ. Знакомые студенты обеих программ заверили, что оба варианта очень сложные и интересные. Но Университет ИТМО был мне ближе по духу, поэтому я сделал выбор в его пользу.

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

Немного про учебу

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

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

Тем не менее, даже на дистанте преподаватели дают материал на высшем уровне. Например, мне кажется, что Александр Владимирович Смаль (ведет курс Алгоритмы и структуры данных) изобрёл великолепную технику преподавания. Когда требуется большое количество выкладок на доске, он использует планшет и стримит с него экран, на котором пишет. Выглядит это так:

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

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

Научно-исследовательская работа

Кроме лекций и практик каждый семестр студенты выполняют научно-исследовательскую работу (НИР). Стоит сказать, что это один из самых интересных аспектов нашей магистратуры. Студенты получают темы от компаний: JetBrains, Яндекс, ВКонтакте и других, выбирают себе приглянувшиеся и под контролем сотрудников компании работают над ними. В частности, в первом семестре я взял тему Generative adversarial audio denoiser в компании MynaLabs.

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

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

Что в итоге

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

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

Оцените свою мотивацию. Эта программа реально сложная. Поэтому подумайте дважды, а то и трижды, зачем она вам. Я не пытаюсь отговорить, просто на одном желании долго не протянуть.

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

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

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


Что еще есть у нас в блоге на Хабре:


Подробнее..

Вышел 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
Подробнее..

Мы скачали 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

Подробнее..

Music2Dance как мы пытались научиться танцевать

19.05.2021 08:16:04 | Автор: admin

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

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

Из к/ф Криминальное чтивоИз к/ф Криминальное чтиво

Существующие подходы

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

Cуществуют и более серьезные работы генерация 3D-движений для людей. Большинство таких подходов основываются исключительно на глубоком обучении. Лучшие результаты на лето 2020 года показывала архитектура DanceNet, и мы решили взять именно её в качестве бейзлайна. Дальше мы обсудим их подход подробнее.

Предобработка данных

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

Музыка: onset, beats, chroma

Наверное, самый распространенный способ извлечение фичей из аудио это подсчет спектрограммы или мелграммы преобразование звука из амплитудного домена в частотный при помощи преобразования Фурье. Однако, в нашей задаче мы работаем с музыкой, а не произвольным аудиосигналом, и низкоуровневый анализ в данном случае не подходит. Нас интересуют ритм и мелодия, поэтому мы будем извлекать onset, beats и chroma (начало ноты, ритм и настроение мелодии).

Видео: извлечение позы человека

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

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

Синим отмечены ключевые точкиСиним отмечены ключевые точки

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

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

Архитектура DanceNet

Архитектура DanceNet. Источник: https://arxiv.org/abs/2002.03761Архитектура DanceNet. Источник: https://arxiv.org/abs/2002.03761

Архитектура DanceNet cocтоит из нескольких основных частей:

  • Кодирование музыки;

  • Классификация музыки по стилю;

  • Кодирование кадров видео;

  • Предсказание следующего кадра по предыдущим и музыке;

  • Декодирование полученного кадра.

Рассмотрим немного подробнее каждую из частей:

  1. Кодирование музыки. Предобратанный аудиосигнал кодируется при помощи сверточной нейросети с Bi-LSTM слоем.

  2. Классификация музыки по стилю. Аналогично предыдущему пункту, сверточная нейросеть с Bi-LSTM слоем.

  3. Кодирование-декодирование кадра. Маленькая двухслойная сверточная сеть.

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

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

Наше решение

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

Архитектура решения. Эпоха тренировкиАрхитектура решения. Эпоха тренировки

Наше решение состоит из четырех основных частей:

  • Датасет

  • Модель для предсказания следующего положения (DanceNet)

  • Модель для исправления следующего положения положения (RL модель)

  • Функция потерь

Датасет

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

DanceNet

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

RL модель

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

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

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

В качестве алгоритмов обучения с подкреплением мы решили выбрать один алгоритм, использующий Q-Learning (наш выбор пал на TD3, как на наиболее стабильный и выразительный) и один не использующий (мы остановились на PPO).

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

Функция потерь

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

L(S, S_{real},R)=-\parallel S-S{real} \parallel_2-R ,

где S положение, Sreal правильное положение, R награда среды.

Модель на фазе тестирования

Архитектура решения. Эпоха тестированияАрхитектура решения. Эпоха тестирования

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

Результаты

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

Наш грустный танец. Спасибо за ваш интерес!


Другие материалы из нашего блога о стажировках:


Подробнее..

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

Подробнее..

Круглый стол в Wrike Маркетинговая автоматизация инструменты, интеграции, процессы

01.02.2021 20:15:32 | Автор: admin

Откроем новый год событий в Wrike TechClub круглым столом по автоматизации маркетинговых процессов. 18 февраля в 18:00 (Мск) соберемся (виртуально, конечно) с одними из самых крутых экспертов отрасли, чтобы поговорить об актуальных вызовах для маркетинговых отделов.

Примерные темы для обсуждения:

Лиды.Маркетинговая воронка и воронка продаж

Автоматизация: процессы и инструменты

Lead nurturing

Кроссканальный маркетинг

Эксперименты

Спикеры:

Мариам Ванян, Head of Marketing Operations, Wrike

Ирина Манолова, Marketing Automation Specialist, JetBrains

Ксения Бородулина, Solution Engineer, CRM and Marketing Automation, Veeam

Анна Фомина, Email Marketing & Marketing Automation Team Lead @ Wrike

Надежда Николаева, Marketing Automation Specialist, Selectel

Сергей Лебедев, Marketo Administrator, Wrike

Встреча пройдет 18 февраля в 18:00 по Мск, онлайн.

Зарегистрироваться бесплатно

Подробнее..

Научно-исследовательские инициативы 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
Подробнее..

Открытые материалы курс по вычислительной нейронауке

04.01.2021 18:18:07 | Автор: admin

В осеннем семестре 2020 года командалаборатории Нейробиологии и физиологии развития прочитала курс Вычислительные Нейронауки для студентов партнерских магистратур ВШЭ и ИТМО, а также для заинтересованных вольнослушателей. Курс проводится в рамках образовательных программ JetBrains c 2019 года. В этом году, в отличие от прошлого, формат обучения был, естественно, дистанционный лекции и семинары проводились в виде видеоконференций. В ходе курса студентам был предложен базовый материал для изучения и обсуждения в аудитории, материалы для самостоятельного, более глубокого погружения, интересные практические задания по моделированию нейронов и биологических нейронных сетей.

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

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

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

Если вас заинтересовал наш курс или какие-то отдельные темы, которых мы коснулись приглашаем вас в следующем осеннем семестре: будет еще интереснее, поскольку мы постоянно расширяем и дорабатываем контент. Прослушать курс могут все желающие. Вы также можете посмотреть все лекции 2020 года в любое удобное для вас время видеоматериалы доступны наYouTube-каналеJetBrains Research.

Слайд из лекции о кодировании и декодировании информации в НС.Слайд из лекции о кодировании и декодировании информации в НС.
Подробнее..

Категории

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

  • Имя: Макс
    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