Как ускорить intellij idea
IntelliJ IDEA 2019.3: оптимизация производительности и улучшение качества
В этом релизе мы сосредоточились на производительности и качестве. Вместе с другими командами JetBrains, мы занимались оптимизацией производительности, повышением отзывчивости интерфейса, улучшением существующей функциональности.
Чтобы правильно расставить приоритеты, мы полагались на ваши отзывы и благодарим всех, кто делился идеями и сообщал об ошибках в нашем трекере. В результате мы исправили более 1600 проблем, которые в общей сложности получили около 4000 голосов пользователей.
Мы также работали над поддержкой новых фреймворков для создания микросервисов, таких как Micronaut, Quarkus и Helidon, и сделали долгожданную поддержку MongoDB.
Оптимизация производительности
Мы много работали над улучшением производительности IntelliJ IDEA. Вот что у нас получилось:
Одной из главных задач в этом году было сократить время запуска IDE. Мы внесли существенные архитектурные изменения в платформу IntelliJ: некоторые процессы, которые при запуске происходили последовательно, теперь выполняются параллельно. Кроме того, мы реорганизовали классы, чтобы ускорить инициализацию, оптимизировали загрузку шрифтов на macOS и многое другое.
Мы уделили внимание повышению отзывчивости интерфейса и избавились от многих зависаний в различных частях IntelliJ IDEA. Нам удалось устранить причины зависаний из более чем 1600 баг-репортов. Кроме того, сообщать о зависаниях теперь легче.
Теперь IntelliJ IDEA работает гораздо быстрее, когда в редакторе или отладчике открыто много вкладок, а также когда регулярное выражение соответствует очень длинным строкам в Find in Path. Открытие дерева проекта тоже занимает меньше времени.
Мы ускорили работу редактора, оптимизировав вывод типов в Java. Вывод типов для длинных цепочек вызовов методов теперь работает намного быстрее. Подсветка синтаксиса Java тоже работает быстрее, особенно это касается методов с generic varargs (Arrays.asList, Map.ofEntries и т.д.), которые могут содержать десятки аргументов. Объединение нескольких строк с помощью действия Join Lines тоже ускорилось.
Поддержка Kotlin 1.3.60 тоже привела к улучшениям, например, ускорилась подсветка синтаксиса Kotlin в редакторе.
Другие исправления коснулись VCS: удалось сократить время обработки событий и игнорируемых файлов, устранить зависания и ускорить обновление статуса в больших проектах.
В подсистеме сборки мы снизили пиковое потребление памяти при импорте больших Gradle-проектов. А еще исправили проблемы с редактированием файлов pom.xml в Maven-проектах: теперь IDE предлагает варианты автодополнения без задержек.
Мы довольны результатами, но не останавливаемся на этом. В следующих версиях будем и дальше оптимизировать производительность и постараемся сделать запуск IDE еще быстрее.
Улучшение качества
У IntelliJ IDEA богатая экосистема плагинов, но есть недостаток: при установке или удалении плагина нужно перезапускать IDE. Мы начали решать эту проблему и реализовали базовую инфраструктуру для динамической установки плагинов, без перезапуска IDE. Пока что это работает только для тем интерфейса и сочетаний клавиш.
Системы контроля версий
Много нового в поддержке VCS. Чтобы упростить работу с ветками, вместо действия Checkout as. мы добавили два новых: Checkout и New Branch from Selected. Действие New Branch from Selected создает новую локальную ветку, но не включает отслеживание какой-либо удаленной ветки. При вызове действия Checkout IDE создает новую локальную ветку, извлекает ее из репозитория и включает отслеживание выбранной удаленной ветки, если нет локальной ветки с таким же именем.
Мы переработали диалог Clone и сделали единый интерфейс для скачивания проектов с различных VCS-хостингов. Теперь вы можете войти в свой аккаунт прямо из обновленного диалога. Если вы уже залогинились, IDE покажет списки всех репозиториев, сгруппированных по учетным записям или организациям, в которых вы состоите.
В предыдущей версии мы поддержали функциональность Java 13, а в этот раз значительно улучшили поддержку текстовых блоков Java 13. Недавно мы рассказывали об этом в нашем блоге.
Теперь есть простой способ просмотреть иерархию вызовов для выбранного поля: используйте новое действие Field Call Hierarchy (Ctrl/Cmd+Alt+H).
Если у вас установлен флажок Show quick documentation on mouse move, при наведении указателя мыши на предупреждение или ошибку отобразится единая подсказка с описанием предупреждения или ошибки и справочной информацией о коде.
Раньше в таких случаях IDE показывала только подсказку об ошибке без документации, а иногда появлялось целых два всплывающих окна.
Мы обновили поведение диалога intention actions: действия не исчезнут из списка предложений, если вы выбрали одно из них и закрыли диалог.
Окно Services теперь всегда отображается, и его поведение можно можно настроить внутри самого окна. Кроме того, вы можете скрыть определенные конфигурации запуска.
— Подсказки о несоответствии типа стали более подробными и понятными.
— При открытии проекта IntelliJ IDEA показывает его название.
— Мы поддержали вставки фрагментов кода на новых языках шаблонов, в частности Pug (ранее — Jade), Handlebars, EJS и Slim.
— Появилась плавная прокрутка колесом мыши.
— Полосы прокрутки можно сделать более заметными, используя чекбокс Use contrast scrollbars в меню Preferences/Settings | Appearance & Behavior | Appearance.
Поддержка новых фреймворков и технологий
Несмотря на то, что при подготовке этой версии мы в основном были сосредоточены на качестве, мы также работали над несколькими новыми функциями и рады их представить. Всё, что описано ниже, есть только в IntelliJ IDEA Ultimate.
Вокруг микросервисов было много разговоров задолго до того, как мы начали планировать этот релиз. В какой-то момент мы подумали, что нам стоит добавить поддержку технологий, которые используются для разработки Java и Kotlin-проектов с микросервисной архитектурой. Звезды сошлись, и мы начали работать над интеграцией.
Во-первых, мы расширили помощь при написании кода и возможности навигации для фреймворков разработки микросервисов нового поколения: Micronaut, Quarkus и Helidon. Для тех, кто занимается реактивным программированием, мы добавили поддержку Spring Web Flux.
Обычно микросервисы взаимодействуют друг с другом через HTTP/WebSocket, поэтому следующим шагом для нас было добавить поддержку API HTTP-клиентов Java, таких как java.net.URI/URL, Retrofit v2, OkHttp v3, а также клиентских библиотек популярных серверных фреймворков: Spring Feign, MicroProfile REST Client и т.д. Что важно, теперь IDE предоставляет автодополнение URL-адресов и навигацию для HTTP/WebSocket API.
Во-вторых, мы добавили новое окно Endpoints, чтобы было удобно просматривать конечные точки вашего проекта. В этом окне отображаются как клиентские, так и серверные API. Постепенно сюда будут добавлены не только HTTP API, но и API обмена сообщениями, gRPC и GraphQL.
Наконец, мы расширили поддержку спецификаций API. В этой версии мы поддержали Swagger 2 и OpenAPI Specification 3. Поддержка включает в себя проверку на соответствие схеме, автодополнение, навигацию, поиск использований и рефакторинг Rename в YAML/JSON-файлах, содержащих описания API.
На данный момент все это работает только для проектов на Java и Kotlin, но в следующих версиях мы планируем поддержать другие языки и фреймворки.
Кроме того, IntelliJ IDEA 2019.3 наконец поддерживает MongoDB. В этой версии коллекции и поля отображаются в проводнике баз данных, вы можете выполнять запросы и просматривать их результаты.
Важные исправления
— IDE теперь находит каталог, в который Gradle был установлен через Homebrew.
— Стало проще вручную устанавливать домашний каталог Gradle.
— IntelliJ IDEA теперь поддерживает хранение паролей в KWallet на Linux.
— Для проектов JavaFX IDE может отображать файл FXML со встроенным Scene Builder на вкладке Scene Builder.
— В окне Debug работает навигация с клавиатуры.
— Можно скопировать выбранный текст из окна инспекции через Ctrl/Cmd+C.
— Фокус не теряется при переключении между окнами IDE.
— Улучшено расположение окон и всплывающих подсказок.
— Если в IDE выбрана тема Darcula, системные окна MacOS при вызове открываются в темной теме.
Мы также обновили JetBrains Runtime 11 (JBR 11).
— Исправили рендеринг шрифтов на macOS Catalina.
— Устранили проблему с открытием проекта на macOS 10.15 Catalina.
— Исправили символы в диалоге Evaluate Expression.
— IntelliJ IDEA обнаружит конфликты между сочетаниями клавиш IDE и шорткатами операционной системы.
— В редакторе устранили проблему со шрифтами, которые всегда были выделены курсивом.
— Исправили начальный экран на Windows.
Все подробности о новой версии читайте на сайте или посмотрите обзор (на английском).
Как ускорить работу IntelliJ IDEA
Автор: beowulf13th · 27 Фев 2020
Появился у меня, благодаря работодетелю, новый рабочий ноут. 32 Гб оперативы, i7 девятого поколения и вот это вот всё.
И всё было хорошо, пока я не подумал, а почему бы и не упороться?
Что было сделано? Сначала нашёл программу для создания RAM диска. Есть платные и бесплатные решения. Я воспользовался ImDisk Toolkit.
В целом простая софтина, которой указываешь размер, тип файловой системы и букву диска (по умолчанию R:\ )
Есть проблема с Windows 10 (может и раньше). В ней по умолчанию включен быстрый запуск. Это гибернация просто стильно-модно-молодёжно. Когда вы выключаете — оператива сбрасывается на диск, когда включаете — считывается снова. Не работает при перезагрузке (что логично). Поэтому ImDisk про это напомнит. Я пожертвовал этой фичей, потому что с такими характеристиками грузиться стало не шибко дольше.
Да и к тому же я включаю ноут, пока воткнёшь все моники, пока чаю нальёшь — уже все запускается 🙂
Дальше решил проверить какой получился профит от создания RAM диска.
В целом — хорошо. В 5-6 раз.
Приступил к допиливанию IDEA.
Отлично. Таким образом у нас кэши и индексы будут лежать на RAM диске. Один большой недостаток в этом всём это то, что теперь нет локальной истории, а индексирование проекта будет происходить при первом открытии проекта. Я осознанно пошёл на это, локальная история обычно годится в течение одного сеанса работы, а подождать индексации на таких мощностях — дело полминуты.
Преимущества этого всего достаточно субъективны. Единожды открытый проект переоткрывается просто мгновенно. Даже проект в 44 gradle модуля.
Таким образом, при старте у нас создаются необходимые папки, а IDEA копируется на RAM диск и кладёт свои кэши и индексы туда же.
После переноса в RAM диск идея тоже стала грузиться ощутимо быстрее.
Работаем в IntelliJ IDEA на слабом железе
Обнаружил секретный репозиторий на гитхабе JetBrains под названием Projector. Благодаря нему написал кусок кода в IntelliJ IDEA, запущенной на Android-планшете. Рассказываю, как это повторить.
Проблема
Все мы любим IntelliJ IDEA, но есть с ней неувязочка — она жрёт ресурсы компьютера. Может, крипту майнит, никто не знает.
У всех нас есть что-то вроде старого ноутбука, который ты очень любишь, но работать на нём уже не получается — уж слишком он слабый. На некоторых девайсах Идеи и не было никогда. Например, на Android-планшетах. Зайдите на сайт — нет там сборки под Arm.
(На самом деле, это не совсем правда, запустить Идею на Arm можно — но поддержки не заявлено и ссылки на странице загрузки нет. Раз уж мы начали колдовать, то надо рубить правду-матку).
В отдельном аду жарятся последователи секты DevOps. Если ты разработчик в среде с кучей современных DevOps-инструментов, то твоя среда исполнения локально на макбуке и на проде — это две совершенно разные вещи. Отсюда возникают всякие миникубы, тиллеры, лупбэк прокси и прочие костыли. Остюда — ноут, обжигающий коленки во время билда.
Примерно те же проблемы у пользователей C++. Большие проекты вроде браузера Chromium могут занимать на жестком диске десятки гигабайт и компилироваться сутками напролёт. Когда ноутбук уходит в троттлинг от перегрева, пользоваться им не очень удобно. SSD протираются до дыр, а если SSD напаян и гарантия закончилась — выбрасывать его придется вместе с ноутбуком.
Решением было бы разделить фронтенд и бэкенд IDE. Запускаем тяжелый вычислительный бэкенд в дата-центре, или просто на своём домашнем Threadripper 3990X. Соединяемся с бэкендом из локального приложения, написанного на Java.
Удалённый рабочий стол — отстой
Конечно, многие пытались запускать Идею через TeamViewer, Microsoft Remote Desktop, VNC, и так далее. Существуют компании, которые только так и работают — сотрудники сидят на удалёнке и кодят через Remote Desktop.
Видите в этом проблему? Вот, посмотрите:
Теперь я должен вам новые глаза!
Это то, что вы видите при соединении через удалённый рабочий стол. Все ощущения изящества интерфейсов, чёткости шрифтов, вся магия Идеи куда-то улетучивается, и во рту остаётся только горечь от пожатого джипегом мыла.
Из этого можно вынести какой-то опыт. Например, TeamViewer тормозит меньше, но изображение больше артефачит. RDP выдает лучше картинку, но безбожно тормозит. И там и там есть вопросы к качеству мобильных приложений — если хочется запускать на планшете.
Что же делать? Сколько надо полоскать рот, чтобы извести оттуда привкус мыла?
Ваше слово, товарищ Projector!
Вот как выглядит картинка на моем планшете Huawei MediaPad M5:
Вначале я хотел сфотографировать шрифты с близкой дистанции, но неспособность камеры Sony RX100 v5 сфокусироваться на таком расстоянии похоронила эту идею. Вместо этого держите нотариально заверенный скриншот:
Видите косяки в шрифтах, покорёженных джипегом?
Не трудитесь, их там нет. Это настоящие векторные шрифты, и Идея тоже настоящая. Ну, почти. Это полноэкранный браузер.
Магия заключается в том, что в репозитории проекта Projector на GitHub лежит запускатор IntelliJ IDEA в серверном режиме.
Почему это работает?
Судя по всему, Projector работает на переписанном изнутри рендерере AWT из OpenJDK. Теперь AWT рисует всё не на обычных поверхностях из операционной системы, а прямо в браузере. Как именно эта магия работает я сейчас быстро описать затрудняюсь — это тема для отдельной статьи.
Но эффект потрясающий — любое приложение, написанное на Java и Swing, автоматически начинает работать в браузере без переписывания кода!
Хочу! Что нужно делать?
Сразу видно, что проект очень экспериментальный. Эта штука для тех, кто очень любит всё новое и хочет попробовать использовать в повседневной жизни. Но ставить на эту штуку свою жизнь я бы не стал.
Расскажу о том, как всё это запустить и начать разбираться. Дальше вы уже сами.
Общие инструкции есть вот в официальном репозитории.
Подготовка сервера
Вам понадобится компьютер с Docker.
Завести всё это можно и без Docker, но конкретно эта статья подразумевает его наличие, ибо без Docker всё становится куда сложнее.
«Сервер» может быть как машиной в облаке, так и вашим обычным компьютером — неважно.
Я всё тестировал в двух конфигурациях: Linux на десктопе и Linux на удалённой виртуалке с четырьмя ядрами и 4 гигабайтами оперативной памяти. Для других операционных систем могут потребоваться корректировки.
В Ubuntu 16.04 установка докера делается вот по этой инструкции. Если у вас другая операционная система — придется погуглить самостоятельно.
Краткое содержание установки Docker на Ubuntu 16.04:
Дальше нужно немного поднастроить саму операционку. Если вы используете Linux-десктоп как рабочую машину в графическом режиме, то ничего делать не нужно.
Если же вы хотите развернуть что-нибудь вроде тестового сервера в облаке (благо сейчас это делается двумя щелчками мыши в Amazon и других облачных сервисах), нужно будет поставить пару пакетов.
Суть в том, чтобы у вас в командной строке появились xvfb (виртуальный фреймбуфер) и dbus-launch. Зачем нужен фреймбуфер я сказать затрудняюсь, но без этого не работают скрипты сборки. Вероятно, тяжелое наследие AWT.
Вот что нужно установить для Ubuntu 16.04:
Устанавливать gnome-keyring приходится по внутренним убунтовым причинам. Иначе окажется, что у вас проблемы с секретами для десктопа. Если у вас не Ubuntu, то скорей всего, это не нужно.
Дальше нужно создать фреймбуфер:
Скрипт этот стоит засунуть куда-нибудь в автозагрузку. Например, в юнит systemd. Ну или просто руками каждый раз набирать заново.
Тут критик воскликнет — ага, фреймбуфер, рендерите джипеги на сервере! Нет, он нужен только чтобы запустить скрипт сборки имиджа. В рендеринге он не участвует. Это просто артефакты легаси-кода, торчащего из джавы 1998-ого года производства. Думаю, в ближайшем времени разработчики выпилят необходимость использовать фреймбуфер на этапе сборки.
Собираем и запускаем образ Projector
Скачиваем репозиторий со сборочными скриптами:
Собираем и запускаем образ:
Заходим в IntelliJ IDEA из браузера
Если вы всё это время работали на своём (локальном) компьютере, то ссылка выглядит так: http://localhost:8080/projector/.
Если же вы запускаете всё это на удалённой машине (например, в облаке), то ссылка выглядит так: http://hostname:8080/projector/?host=hostname&port=8887.
Вместо hostname нужно ввести IP-адрес вашего сервера или доменное имя. Обратите внимание, что hostname в URL встречается два раза. Без этого не заработает.
Как работать в Android
Стандартный браузер Google Chrome в Android тратит слишком много места на всякие ненужные вещи вроде адресной строки. Для решения этой проблемы поможет бесплатное приложение Fully Kiosk Browser.
Если вам не мешает адресная строка, но мешают органы управления Android, то можно использовать бесплатное приложение Fullscreen Immersive.
Одновременно и то и другое использовать не имеет смысла, т.к. FUlly Kiosk Browser уже умеет отключать органы управления Android-оболочки и делает это по-умолчанию.
Как работать в iOS
Понятия не имею! Из всех эппловских девайсов у меня есть только служебный макбук и личный айфон. На айфоне проверять всё это бессмысленно (экран слишком маленький), а на макбуке никаких проблем не существует.
Как запаролить соединение?
Идём в файлы проекта, которые мы скачали ранее, открываем файл run-container.sh и ищем строчку:
И добавляем туда ещё один параметр с негуманоидным именем, значение которого — ваш пароль:
Теперь контейнер можно запускать!
Теперь можно пойти в браузер и подключиться по новому URL. Новый отличается от старого наличием параметра token с вашим паролем.
Как сделать безопасное соединение?
Про это я написал на Хабре отдельную статью. Приготовьтесь к тому, что придется сделать кучу нудной работы в консоли.
Перспективы
Можно мгновенно придумать множество областей, где поможет этот проект:
Кто знает, что ещё нас ждёт! Перспективы безграничные.
Проблемы
Надо сказать, что MediaPad M5 двухлетней давности на чипсете Kirin 960 — не самая мощная машина в истории. (Зато это толстый надежный кирпич металла, которым можно копать землю в огороде!) И конечно, при редактировании большого количества текста появляются тормоза перерисовки. Браузеру сложно рисовать столько графики быстро.
Тем не менее, чтобы что-то отлаживать — этого уже вполне достаточно. Отладчик будет красивый, четкий и приятный, а не как через Remote Desktop.
Если же запускать всё это на ноутбуке, тормозов почти нет. Особенно если там есть видеокарта, а не как у планшета MediaPad M5, где вместо видеокарты работает Mali-G71.
Выводы
Найдено чудесное решение для запуска IntelliJ IDEA (и всех IDE от JetBrains) на удалённом сервере.
Если честно, это чуть ли не лучшая новость про IDEA за последние годы. Новый хоткей — это приятно, но в целом — ничего не меняет. Projector же меняет всё. Удивительно, что об этом никто ничего не пишет, что из каждого утюга не доносится победная песнь проекта Projector.
Сам я сейчас занимаюсь тем, что пытаюсь упаковать запускатор IDEA в качестве нативного приложения для Windows, Android и iOS с помощью нативных для платформы средств (Electron и WebView). Некоторое время еще нужно писать код, а потом публикация на сторы может занять длительное время. Как чего получится — напишу статью на Хабр.
Где-то в богом забытом репозитории на GitHub обнаружилось настоящая гора золота. К сожалению, чудес не бывает, и наверняка, это золото охряняют драконы. Посмотрим, кто выйдет на свет!
Работаем в IntelliJ IDEA на слабом железе
Обнаружил секретный репозиторий на гитхабе JetBrains под названием Projector. Благодаря нему написал кусок кода в IntelliJ IDEA, запущенной на Android-планшете. Рассказываю, как это повторить.
Проблема
Все мы любим IntelliJ IDEA, но есть с ней неувязочка — она жрёт ресурсы компьютера. Может, крипту майнит, никто не знает.
У всех нас есть что-то вроде старого ноутбука, который ты очень любишь, но работать на нём уже не получается — уж слишком он слабый. На некоторых девайсах Идеи и не было никогда. Например, на Android-планшетах. Зайдите на сайт — нет там сборки под Arm.
В отдельном аду жарятся последователи секты DevOps. Если ты разработчик в среде с кучей современных DevOps-инструментов, то твоя среда исполнения локально на макбуке и на проде — это две совершенно разные вещи. Отсюда возникают всякие миникубы, тиллеры, лупбэк прокси и прочие костыли. Остюда — ноут, обжигающий коленки во время билда.
Примерно те же проблемы у пользователей C++. Большие проекты вроде браузера Chromium могут занимать на жестком диске десятки гигабайт и компилироваться сутками напролёт. Когда ноутбук уходит в троттлинг от перегрева, пользоваться им не очень удобно. SSD протираются до дыр, а если SSD напаян и гарантия закончилась — выбрасывать его придется вместе с ноутбуком.
Решением было бы разделить фронтенд и бэкенд IDE. Запускаем тяжелый вычислительный бэкенд в дата-центре, или просто на своём домашнем Threadripper 3990X. Соединяемся с бэкендом из локального приложения, написанного на Java.
Удалённый рабочий стол — отстой
Конечно, многие пытались запускать Идею через TeamViewer, Microsoft Remote Desktop, VNC, и так далее. Существуют компании, которые только так и работают — сотрудники сидят на удалёнке и кодят через Remote Desktop.
Видите в этом проблему? Вот, посмотрите:
Теперь я должен вам новые глаза!
Это то, что вы видите при соединении через удалённый рабочий стол. Все ощущения изящества интерфейсов, чёткости шрифтов, вся магия Идеи куда-то улетучиливается, и во рту остаётся только горечь от пожатого джипегом мыла.
Из этого можно вынести какой-то опыт. Например, TeamViewer тормозит меньше, но изображение больше артефачит. RDP выдает лучше картинку, но безбожно тормозит. И там и там есть вопросы к качеству мобильных приложений — если хочется запускать на планшете.
Что же делать? Сколько надо полоскать рот, чтобы извести оттуда привкус мыла?
Ваше слово, товарищ Projector!
Вот как выглядит картинка на моем планшете Huawei MediaPad M5:
Вначале я хотел сфотографировать шрифты с близкой дистанции, но неспособность камеры Sony RX100 v5 сфокусироваться на таком расстоянии похоронила эту идею. Вместо этого держите нотариально заверенный скриншот:
Видите косяки в шрифтах, покорёженных джипегом?
Не трудитесь, их там нет. Это настоящие векторные шрифты, и Идея тоже настоящая. Ну, почти.
Магия заключается в том, что в репозитории проекта Projector на GitHub лежит запускатор IntelliJ IDEA в серверном режиме.
Почему это работает?
Судя по всему, Projector работает на переписанном изнутри рендерере AWT из OpenJDK. Теперь AWT рисует всё не на обычных поверхностях из операционной системы, а прямо в браузере. Как именно эта магия работает я сейчас быстро описать затрудняюсь — это тема для отдельной статьи.
Но эффект потрясающий — любое приложение, написанное на Java и Swing, автоматически начинает работать в браузере без переписывания кода!
Хочу! Что нужно делать?
Сразу видно, что проект очень экспериментальный. Эта штука для тех, кто очень любит всё новое и хочет попробовать использовать в повседневной жизни. Но ставить на эту штуку свою жизнь я бы не стал.
Расскажу о том, как всё это запустить и начать разбираться. Дальше вы уже сами.
Общие инструкции есть вот в официальном репозитории.
Подготовка сервера
Вам понадобится компьютер с Docker.
Завести всё это можно и без Docker, но конкретно эта статья подразумевает его наличие, ибо без Docker всё становится куда сложнее.
«Сервер» может быть как машиной в облаке, так и вашим обычным компьютером — неважно.
Я всё тестировал в двух конфигурациях: Linux на десктопе и Linux на удалённой виртуалке с четырьмя ядрами и 4 гигабайтами оперативной памяти. Для других операционных систем могут потребоваться корректировки.
В Ubuntu 16.04 установка докера делается вот по этой инструкции. Если у вас другая операционная система — придется погуглить самостоятельно.
Краткое содержание установки Docker на Ubuntu 16.04:
Дальше нужно немного поднастроить саму операционку. Если вы используете Linux-десктоп как рабочую машину в графическом режиме, то ничего делать не нужно.
Если же вы хотите развернуть что-нибудь вроде тестового сервера в облаке (благо сейчас это делается двумя щелчками мыши в Amazon и других облачных сервисах), нужно будет поставить пару пакетов.
Суть в том, чтобы у вас в командной строке появились xvfb (виртуальный фреймбуфер) и dbus-launch. Зачем нужен фреймбуфер я сказать затрудняюсь, но без этого не работают скрипты сборки. Вероятно, тяжелое наследие AWT.
Вот что нужно установить для Ubuntu 16.04:
Устанавливать gnome-keyring приходится по внутренним убунтовым причинам. Иначе окажется, что у вас проблемы с секретами для десктопа. Если у вас не Ubuntu, то скорей всего, это не нужно.
Дальше нужно создать фреймбуфер:
Скрипт этот стоит засунуть куда-нибудь в автозагрузку. Например, в юнит systemd. Ну или просто руками каждый раз набирать заново.
Собираем и запускаем образ Projector
Скачиваем репозиторий со сборочными скриптами:
Собираем и запускаем образ:
Заходим в IntelliJ IDEA из браузера
Если вы всё это время работали на своём (локальном) компьютере, то ссылка выглядит так: http://localhost:8080/projector/.
Если же вы запускаете всё это на удалённой машине (например, в облаке), то ссылка выглядит так: http://hostname:8080/projector/?host=hostname&port=8887.
Вместо hostname нужно ввести IP-адрес вашего сервера или доменное имя. Обратите внимание, что hostname в URL встречается два раза. Без этого не заработает.
Как работать в Android
Стандартный браузер Google Chrome в Android тратит слишком много места на всякие ненужные вещи вроде адресной строки. Для решения этой проблемы поможет бепсплатное приложение Fully Kiosk Browser.
Если вам не мешает адресная строка, но мешают органы управления Android, то можно использовать бесплатное приложение Fullscreen Immersive.
Одновременно и то и другое использовать не имеет смысла, т.к. FUlly Kiosk Browser уже умеет отключать органы управления Android-оболочки и делает это по-умолчанию.
Как работать в iOS
Понятия не имею! Из всех эппловских девайсов у меня есть только служебный макбук и личный айфон. На айфоне проверять всё это бессмысленно (экран слишком маленький), а на макбуке никаких проблем не существует.
Как запаролить соединение?
Идём в файлы проекта, которые мы скачали ранее, открываем файл run-container.sh и ищем строчку:
И добавляем туда ещё один параметр с негуманоидным именем, значение которого — ваш пароль:
Теперь контейнер можно запускать!
Теперь можно пойти в браузер и подключиться по новому URL. Новый отличается от старого наличием параметра token с вашим паролем.
Для локальной машины: https://localhost:8080/projector/?token=mypassword
Для облачного сервера: https://hostname:8080/projector/?host=//hostname&port=8887&token=mypassword
Как сделать безопасное соединение?
Про это я написал на Хабре отдельную статью. Приготовьтесь к тому, что придется сделать кучу нудной работы в консоли.
Перспективы
Можно мгновенно придумать множество областей, где поможет этот проект:
Кто знает, что ещё нас ждёт! Перспективы безграничные.
Проблемы
Надо сказать, что MediaPad M5 двухлетней давности на чипсете Kirin 960 — не самая мощная машина в истории. (Зато это толстый надежный кирпич металла, которым можно копать землю в огороде!) И конечно, при редактировании большого количества текста появляются тормоза перерисовки. Браузеру сложно рисовать столько графики быстро.
Тем не менее, чтобы что-то отлаживать — этого уже вполне достаточно. Отладчик будет красивый, четкий и приятный, а не как через Remote Desktop.
Если же запускать всё это на ноутбуке, тормозов почти нет. Особенно если там есть видеокарта, а не как у планшета MediaPad M5, где вместо видеокарты работает Mali-G71.
Выводы
Найдено чудесное решение для запуска IntelliJ IDEA (и всех IDE от JetBrains) на удалённом сервере.
Если честно, это чуть ли не лучшая новость про IDEA за последние годы. Новый хоткей — это приятно, но в целом — ничего не меняет. Projector же меняет всё. Удивительно, что об этом никто ничего не пишет, что из каждого утюга не доносится победная песнь проекта Projector.
Сам я сейчас занимаюсь тем, что пытаюсь упаковать запускатор IDEA в качестве нативного приложения для Windows, Android и iOS с помощью нативных для платформы средств (Electron и WebView). Некоторое время еще нужно писать код, а потом публикация на сторы может занять длительное время. Как чего получится — напишу статью на Хабр.
Где-то в богом забытом репозитории на GitHub обнаружилось настоящая гора золота. К сожалению, чудес не бывает, и наверняка, это золото охряняют драконы. Посмотрим, кто выйдет на свет!