🔥

Тред (Осип Фаткуллин)


Сегодня будет про тулинг: - Первое что ставлю на свежий ноут - Консольное - IDE - Проект

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

На macOS я перелез потому что на работе выдали ноут с ней. До этого сидел на ArchLinux с тайлингом (i3wm, а после SwayWM). Поэтому пытался приблизить интерфейс к привычному.

Тайлинг это когда окошки не "плавающие", а укладываются плиткой на экране. Каждое новое открытое окно делит экран пополам. Выглядит это примерно так (скрин с просторов интернета):
notion image

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

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

Кстати, сейчас вот пошёл гуглить, оказывается недавно на macOS сделали тайлинговый WM - Yabai. Надо будет глянуть на выходных. github.com/koekeishiya/ya…

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

И уже после этого ставлю Spectacle через brew)

Второе, что было неудобно - раскладка клавиатуры. ГДЕ МОЙ Alt, КТО ТАКОЙ ЭТОТ ВАШ Option? Меняю местами fn и option через Karabiner-Elements. Раскладку в настройках выставляю PC.

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

Как-то раз подключил мышку и был обескуражен тем, что скролл колёсика инвертирован. Тут помогает Scroll Reverser.

Про браузеры и прочую ерунду писать не буду. Каждый использует что хочет.

Терминал. Я использую Kitty, потому что он есть и на macOS, и на Linux, а значит я могу пошарить настройки между компами

Ну и с настройками OS на этом всё. Перейду к консольным утилитам, т.к. многие задачи я решаю через консоль.

По умолчанию в macOS теперь используется zsh, но я сразу меняю его на fish. Люблю fish за его функционал "из коробки". Если интересно, почитайте мою прошлогоднюю статью про работу в консоли, там достаточно много про fish и про консоль в целом. habr.com/ru/company/red…

Вместо curl использую httpie. Там и синтаксис команд попроще, и вывод поудобнее
notion image

Чтобы смотреть файлики - bat вместо cat. Добавляет номера строк и подсветку синтаксиса
notion image

Когда забился диск, чищу его через ncdu. На скрине вот собираюсь почистить кэши Gradle
notion image

Если надо смотреть диффы из консоли, ставьте delta, с ней получается такая красота
notion image

Верный друг и помощник когда IDE выжрала всю память и зависла, не давая себя выключить - htop. И вообще посмотреть кто сколько жрёт.
notion image

На замену ls и tree можно взять exa c красивой подсветкой файлов по типам
notion image
notion image

Когда работаешь с JSON'ами сильно помогает jq. Она и отвалидировать JSON может, и отформатировать, и выкусить из него только то что нужно.
notion image

Менеджер паролей. Как я мог о нём забыть. Он у меня тоже консольный. Использую pass и безмерно им доволен потому что понимаю как он работает. Пароли шифруются GPG ключом который я сам перед этим сгенерировал, а шарятся между устройствами с помощью Git'а.

Для андроида есть приложуха чтоб смотреть пароли, синхронизировать git-репозиторий и т.д., а на компе проще из консоли скопировать, она у меня всегда открыта на четвёртом рабочем столе. pass -c и готово.

Ещё для поиска по имени файла можно использовать fd или fzf. Вон в fzf даже предпросмотр содержимого есть.
notion image

А для поиска файлов по содержимому ripgrep вместо grep. Он просто сильно быстрее

Для баловства: - tokei - чтобы посчитать количество строк в проекте - hyperfine - если бенчмаркаете вызовы консольных команд
notion image

А чтобы не забыть как этим всем пользоваться, помогает утилита tldr Вот вам tldr по tldr
notion image

А ещё, возможно вы заметили, я поставил себе в консоли цветовую схему Darcula из IDEA и шрифт JetBrains Mono :) Чтоб переход из IDE в консоль и обратно был максимально бесшовным.
notion image

Чтобы сохранять настройки всего этого счастья и шарить их между компами, использую YADM. Мои конфиги (dotfiles) лежат в гите и при необходимости я их синхронизирую. yadm.io

Перейдём к IDE. Простите, друзья iOS-еры, дальше не интересно будет. Я использую.. нет, не Android Studio :D Сижу в IDEA Ultimate и прекрасно себя чувствую.

Да, есть недостаток, что фичи Android Studio доезжают немного позже. Например, в IDEA 2021.3 плагин андроида соответствует Android Studio Arctic Fox 2020.3.1 Но есть огромное преимущество - работает стабильнее. Многие баги из Android Studio не доезжают до IDEA.

А ещё новые фичи IDEA прилетают раньше, и зачастую я их даже больше жду чем нововведений в AS.

Из плагинов. Detekt - чтобы сразу видеть что ему не нравится, а не узнавать об этом на CI. Archive Browser - чтобы смотреть содержимое всех архивов, а не только APK и подключенных библиотек. Conventional Commit - чтобы сообщения коммитов соответствовали гайдлайнам проекта

Ещё использую стандартный плагин Task Management. Благодаря ему почти полностью отпадает потребность ходить в Jira. Перевёл задачу в In Progress прямо из IDE и работаешь. А дальше автоматизации сами задачу по flow проведут.

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

Понял, что забыл среди консольных утилит упомянуть scrcpy. Очень удобно, если нужно пошарить экран телефона в условный Zoom. Подключаешь телефон через scrcpy и шаришь.
notion image

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

Как уже писал во вторничном треде, кодстайл между участниками проекта шарим через editorconfig.

Шарим некоторые файлы из папки .idea: - dictionaries/project.xml - здесь проектные словечки, чтобы для них тоже работала проверка правописания - detekt.xml - настройки плагина detekt - externalDependencies.xml - плагины, которые нужны для работы с проектом

Ещё шарим vcs.xml. В нем кроме настроек репозитория ещё настройки для Issue Navigation хранятся. Issue Navigation это когда номера issue в IDE кликабельные и нажав на них можно сразу прыгнуть в issue-tracker.
notion image

На каждом MRе на CI гоняем detekt (с type resolution) и Android Lint. А результаты красиво отображаем в виде комментариев к MRу через Danger. danger.systems/ruby/
notion image

Это не всё что можно делать через Danger. В него можно любую нужную логику запихнуть: - проверять именование веток по правилам - смотреть количество изменений в ветке и исходя их этого вешать тег small, medium, large и т.д. - проверять, что нет лишних merge-коммитов из master

- через danger можно реализовать ревью-рулетку - проверять, не вносятся ли изменения в "опасные файлы" (например скрипты сборок, настройки линтеров) - подтягивать список задач сделанных в ветке и добавлять в описание - писать что нибудь приятное, если в MRе всё хорошо

Ещё на CI можно гонять отдельный линтер для сообщений коммитов, если у вас есть договорённости по их именованию. Тут поможет commitlint.

Кстати, если вам интересно про гит, для чего нужна чистая история, соглашения об именовании коммитов и т.д., то об этом и многом другом у меня был доклад на подлодке (доступ по ссылке). youtu.be/rR8ZnvLHnj8

Неплохие советы даёт компилятор Kotlin, поэтому считаем все warning'и ошибками с помощью флага -Werror

На этом всё. И вот я всё это рассказываю и мне стало интересно на чём нынче работают люди?
🤔 11.3% Linux
🤔 75.9% macOS
🤔 12.8% Windows

Почему macOS?
🤔 21.1% Из-за железа
🤔 27.1% Из-за экосистемы
🤔 12.0% Просто выдали мак
🤔 39.8% Разрабатываю под iOS

А к пользователям Windows вопрос. Вы используете WSL или обходитесь без консоли совсем? Кто-нибудь использует менеджер пакетов Chocolatey?

Осип ФаткуллинОсип Фаткуллин