⚠️ Обращайте внимание на даты.
Этот блог больше не ведётся с 17 января 2023, и на тот момент с написания этой страницы (18.09.2018) прошло 4 года.
Меня периодически спрашивают, из чего у меня собрано моё виртуальное рабочее место. Если когда-то я мог направить на отдельную страницу сайта, то к настоящему моменту она безнадёжно устарела, а её формат мне никогда особенно не нравился: красочно, да, но малополезно: намешаны в кучу и рабочее окружение, и используемые языки, и библиотеи для языков, и коммерческие программные продукты которыми я уже не пользуюсь давно… посему я принял решение её уничтожить, вместо этого готовя такие вот краткие отчётики при особенно крупных изменениях. Насколько такое решение выдержит испытание временем, не знаю. Посмотрим.
Дистрибутив
Manjaro Linux. Я долго шёл к чему-нибудь семейства Arch Linux, и вот, наконец, пришёл. С покупкой слишком нового ноутбука. Ему требовалось сразу и довольно новое ядро, и некоторое ПО отсутствующее в репозиториях, и окружение рабочего стола с хорошей поддержкой сенсорного экрана (тачскрина), а также высоких плотностей точек на экране (hidpi).
Manjaro с Gnome 3 на Wayland подошёл по всем пунктам.
- Новые пакеты с ядрами регулярно появляются, для смены ядра есть отдельная утилита.
- Установка ПО “снаружи” сделана не путём подключения сторонних источников с пакетами (хотя это тоже возможно, просто не принято) а сборки пакетов локально на основе публичного скрипта сборки из Arch User Repository. Такой подход позволяет с лёгкостью обходить многие ограничения лицензий на ПО по распространению, не теряя при этом ни легальности (для “распространителя” во всяком случае, т. е. автора скрипта), ни лёгкости процесса установки. А также позволяет устанавливать ПО прямо из репозитория с исходным кодом, самую свежатину.
- Gnome 3 отлично работает с тачскрином. Лучше всего, что я попробовал кроме него, во всяком случае. Меня напрягало, что он плохо повлияет на время работы от батарейки, но если выключить анимацию, жить можно.
- Переход на Wayland доставил, пожалуй, больше всего боли, но в конечном счёте стоил того.
- Нужен он был затем, что при исходном масштабе (1х) на 14 дюймах с 1920 на 1080 точек все элементы интерфейса были очень мелкими, а на ближайшем увеличенном (2х) очень крупными. Нужно было что-то посередине, т. н. “дробное масштабирование”; оказалось, что оно уже есть в Gnome 3, но считается (или считалось ранее?) экспериментальной функцией.
- Переход прошёл не без потерь.
- Во-первых, никакой съёмки экрана. Протоколы (в Wayland) и клиенты (прикладное ПО) для них ещё попросту не разработаны или не реализованы.
- Во-вторых, глобальные сочетания клавиш не работают. Точнее, работают только когда ловящее его приложение в фокусе, что совершенно убивает “глобальность”. Хотя если подумать, так даже лучше, это фактически неуязвимость к кейлоггерам. А в моём случае нашлась полноценная замена. Я использую отдельную горячую клавишу, чтобы показывать и скрывать выпадающий терминал, в разное время это были Guake, Tilda, XFCE4 Terminal, сейчас опять Guake – и для Guake команда
guake -tf
эквивалентна (ну… почти) нажатию горячей клавиши “показать/скрыть”. Если добавить эту команду в настройки клавиатуры в Gnome, эффект почти неотличим. И приятно, что Guake нет нужды заталкивать в автозапуск, он запустится по первому требованию (нажатию своей кнопки).
Менеджер версий
asdf.
Моя карьера в Ruby on Rails началась с книги Майкла Хартла, а потому сразу тесно связалась с RVM и долго не могла отвязаться. Но навыки и кругозор расширялись, и вот мне кроме разных версий Ruby нужны ещё и разные версии Python, Node.js, Go, интересно также пощупать Rust, Elixir, свежий Haxe… И мне очень нравилось, как работал RVM: он собирал более-менее независимые окружения для интерпретаторов разных версий в домашней папке, так что для работы с ними не нужен был sudo
.
И достаточно долгое время я находил аналоги RVM для других языков: GVM для Go, NVM и n для Node.js… но меня не переставало настораживать, что это очень похожие средства, принципы их работы почти совпадают, они лишь чуть-чуть разные в обращении. Мне казалось, что вполне может существовать обобщённый инструмент.
Оказалось, что он есть. Этот самый asdf
поддерживает Ruby, Node.js, Python, Crystal, Clojure, Elixir, Go, Kotlin, Lua, Rust, Swift, Java… большая часть этого скорее всего мне даже не потребуется, но приятно, что если потребуется, у меня уже будет инструмент для установки и поддержки нескольких версий; и я уже буду уметь им пользоваться.
Справедливости ради, RVM умеет немножко больше, чем asdf для Ruby (который использует ruby-build от rbenv). Скажем, RVM может установить Rubinius, реализацию Ruby на LLVM. Но непохоже, чтобы он даже с учётом настоящей многопоточности привносил реальный прирост производительности. И я даже не уверен, что этот проект ещё жив. В любом случае, мало кому потребуется что-либо кроме MRI и JRuby, а их asdf ставит без затруднений (ну, [почти](https://github.com/asdf-vm/asdf-ruby/wiki/Ruby-Installation-Problems#problems-installing-ruby-23x-in-arch-linux); но всё решилось). (Мой косяк. Rubinius он тоже ставит.)
Docker
…оказался отличным инструментом для быстрого и легко зачищаемого поднятия дополнительных серверов для веб-сервисов, вроде баз данных и брокеров сообщений. Также хорошо подходит для поднятия на одной машине целых наборов сервисов, что в “микросервисной суматохе” весьма полезная возможность.
Текстовый редактор
Sublime Text. Да, всё ещё. Не так давно всё-таки вышла версия 3.0 после долгой-долгой беты. И да, я его купил. Он не так уж дорого стоит для вечного каждодневного рабочего инструмента и длительной поддержки обновлениями. Тем более что это не подписка.
Я очень хочу перейти на Atom, и для некоторых целей (Arduino) даже пользуюсь им, но в качестве текстового редактора “который всегда под рукой” у меня по-прежнему Саблайм, но пожалуй всего по одной причине: он быстр. От редактора мне нужно не так уж много, в нём всё есть, в Атоме тоже, но немножко менее расторопное. В Атоме теоретически можно с куда большим удобством пользоваться инструментами посложнее, которые делают его больше IDE чем просто редактором – но когда в проекте легко ориентироваться без сложных инструментов, а кроме редактирования почти все процессы протекают в командной строке, в IDE и им подобным нет никакой необходимости. RubyMine я не исползьую именно по этой причине: большая его часть мне просто не нужна.
Что касается Visual Studio Code… пожалуй, нет. Microsoft, закрытость кода… Хотя справедливости ради, вокруг него возникла как минимум одна очень крутая инициатива: Language Server. Его сайту вполне удаётся описать суть решаемой им проблемы. Если коротко: сейчас каждому редактору приходится реализовать поддержку одинаковых вещей (анализ на ошибки, поиск определений, автодополнение) для разных языков только для себя. Language Server же определяет общий для всех редакторов протокол: отдельно реализуются клиенты под протокол в редакторах и серверы под протокол для языков. Надеюсь, однажды дойдёт и до отладчиков. А возможно и уже дошло (Debug Adapter), просто мне не довелось попользоваться.
Прочие мелочи
- Antigen, ловко и быстро устанавливает и обновляет плагины и темы для zsh.
- Powerlevel9k, пожалуй, самая мощная тема для zsh, которой мне доводилось пользоваться.
- KeePassXC умеет не только безопасно хранить базу с паролями под одним мастер-паролем и/или ключом, но и генерировать одноразовые пароли для двухфакторной аутентификации. Для аккаунтов, которыми приходится пользоваться редко, отличное решение. Если поугореть, можно генерировать им же даже разовые коды из Authy, нужно лишь достать “секреты” для генерации разовых паролей и настроить на 10-секундные периоды и 7-цифренные коды.