D:\sideБлогРабочее окружение в 2к18

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

Дистрибутив

Manjaro Linux. Я долго шёл к чему-нибудь семейства Arch Linux, и вот, наконец, пришёл. С покупкой слишком нового ноутбука. Ему требовалось сразу и довольно новое ядро, и некоторое ПО отсутствующее в репозиториях, и окружение рабочего стола с хорошей поддержкой сенсорного экрана (тачскрина), а также высоких плотностей точек на экране (hidpi).

Manjaro с Gnome 3 на Wayland подошёл по всем пунктам.

Менеджер версий

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), просто мне не довелось попользоваться.

Прочие мелочи