Как я провёл 18 лет в консоли Linux и ни о чём не жалею

 Публичный пост
2 января 2024  3124
ОХУЕННО ⨯2

Изначально этот пост должен был стать брюзжанием по поводу известных идей вида: «а давайте впихнём в Bash объекты вместо УсТаРеВшЕгО текста и добавим поддержку картинок с GIF-ками в вывод команд».

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

Как я пришёл к Linux’у

Началось всё весьма прозаично — мне купили первый компьютер и от знакомого «компьютерщика», который объяснял мне как им пользоваться — я услышал о том, что есть ещё какая-то операционная система под названием «Linux» для программистов и хакеров. Это отложилось где-то в глубинах моей памяти — в те времена у меня не было доступа к Интернету, кроме модемных 56 kB/s в школе, к которым я имел доступ лишь раз в 1-2 недели. Поэтому скачать дистрибутив для записи на CD-болванку я не мог, да и не знал тогда, что его можно было скачать в Интернете. Дистрибутив Windows я получил от того самого компьютерщика, а другие диски изредка брал в прокате. Естественно, никаких линуксов там не водилось — только репаки GTA, Half-Life и прочая золотая классика.

В те времена я сидел на Windows XP и занимался в основном тем, что играл с ботами в Counter-Strike, да проходил разные знаменитые синглплей-игры. Программировать на Паскале я уже умел и у меня был дистрибутив Turbo Pascal, скопированный на дискету в школе. Естественно, он запускался в полноэкранном режиме, потому что это выглядело круто! Как в фильмах про хакеров, где люди делали какую-то магию, печатая непонятный текст.

Вся эти идиллия так и длилась бы, но через пару лет я увидел на полке книжного магазина книгу «Slackware/MOPSLinux для пользователя (с диском)». Естественно, быстро и решительно я уговорил своего деда купить её. Поскольку компьютер был в моём единоличном пользовании, а переустанавливать Windows и делать бекапы (модов для CS 1.6 и своих сохранений для GTA Vice City) я уже умел — пришло время ээээкспериментов! У меня было два CD-диска с дистрибутивами Linux и Windows, семьсот пятьдесят man-страниц, 150 листов книги-самоучителя по консольным командам и гора консольных утилит в /bin и /usr/bin, один жёсткий диск на 40 Gb, Xorg -configure, создающий нерабочий /etc/X11/xorg.conf, и текстовая 80x25 консоль. Не то чтобы всё это было нужно, чтобы стать крутым хакером, но раз уж начал копаться во внутренностях системы, то иди в своём увлечении до конца. Единственное, что меня беспокоило — это fdisk. В мире нет ничего более беспомощного, безответственного и безнравственного, чем школьник, использующий fdisk для разметки диска. И я знал, что довольно скоро мы в это окунёмся.

Поначалу я просто читал книгу и разбирался с консольными командами. После Windows это было офигенно — ты печатаешь какой-то текст, а система тебе отвечает, прямо как фильмах. А не просто рисует песочные часы и непонятно что делает. Спустя какое-то время я научился выходить из vim, настроил вручную X-сервер по man-страницам и смог установить компилятор Паскаля, на котором я продолжал учиться программировать по ИТМОшному учебнику. Потом разобрался с тем как компилировать программы из исходников, которые я получал на дисках от журнала ][akep.

Естественно, Windows XP оставалась у меня в дуалбуте. Подавляющее большинство используемого мною софта было под Windows, с поддержкой DOC и XLS файлов в Linux в те времена было плохо, да и без игр серии GTA было скучно. А учитывая отсутствие доступа к интернету, я не мог придумать, что же ещё делать с Линуксом — KDE 2 3 установил, все программы с диска MOPSLinux перепробовал, главы про DNS и HTTP-сервер из книги я зачитал до дыр, но не видел смысла применять их на localhost’е.

Оглядываясь назад, могу сказать что полученные знания и умения стали базой, которую я использую до сих пор. Оказывается, очень полезно оказаться один на один с Linux’ом, когда тебе доступны только книжка, man-страницы и исходники программ, которые ты хочешь установить — нет ни интернета, ни знакомых, у которых можно спросить. Это позволяет многое узнать о системе и наработать навыки решения разнообразнейших проблем.

Сейчас, если какой-то старый как говно мамонта, но очень нужный legacy софт отказывается запускаться — то это его проблемы. Расчехляем ldd, делаем симлинки на нужные версии библиотек, читаем логи. Если программа тихо падает — натравливаем на неё strace. Если бы этих умений с той поры у меня не было — не представляю сколько бы времени я потратил на работе и в пет-проджектах на запуск какого-нибудь не самого «modern» и «right from future» бизнес-софта.

Период красноглазия

Где-то в 2007 году я поступил в ИТМО и переехал в Петербург. Так у меня появился доступ к огроменным (по сравнению с тем, что я видел раньше) книжным магазинам — Дом Книги на Невском и ДВК (Дом Военной Книги). Поскольку к тому моменту я уже был индоктринирован журналом ][akep — с полок были сметены:

  • «Linux в подлиннике» от издательства БХВ
  • «Разработка приложений в среде Linux» от издательства Williams Publishing (фотография диска с MOPSLinux выше как раз на фоне страниц из этой книги)
  • «Язык программирования Си» Ритчи и Кернигана.

Поскольку интернет на тот момент у меня был по dial-up, по карточкам, то использовал я его редко. В основном, чтобы заходить на de.ifmo.ru, да скачивать книги с Библиотеки Мошкова (Lib.Ru). При попытке сделать что-то большее время на карточке кончалось, мой Acorp Sprinter@56K клал трубку и приходилось снова бежать на почту за новой карточкой.

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

Привычный нам в современном понимании безлимитный интернет появился у меня где-то в районе 2009-2010 года. И вот тогда всё понеслось — я мучал жёсткий диск своего компьютера, устанавливая туда разнообразные дистрибутивы. В основном, выбирал я их по следующему принципу: «О, какая тут красивая графическая оболочка — срочно ставим!»

С того времени у меня сохранилось лишь три скриншота (тут fluxbox и vim с плагинами):



Тогда же я освоил LaTeX, устав от проблем с печатью лабораторных отчётов, когда файл сделанный в Open Office, криво печатался в книжном, рядом с университетом. А так я наконец-то мог написать текст отчёта в vim и получить на выходе красивый PDF, который выглядит и печатается одинаково везде.

Ну и продолжал осваивать системное программирование. Одна из первых написанных мною программ до сих пор лежит в SVN-репозитории на SourceForge. Это jabsh (https://sourceforge.net/p/jabsh/code/HEAD/tree/) — что-то вроде jabber remote shell. Возможности получить статический IP-адрес у меня тогда не было, а сделать что-то на своём компьютере удалённо хотелось. В то время у меня был Siemens C75 с установленным Jabber-клиентом Bombus, в котором я чатился во всяких линуксовых конференциях на jabber.ru, когда под рукой не было компьютера. И тут мне пришла в голову идея написать демона, который будет подключаться к Jabber-серверу, ждать от меня консольные команды, выполнять их и посылать результат выполнения в обратном сообщении.

Эта штука даже работала и я ей пользовался, пока не получил статический IP-адрес. У меня даже был пользователь из Индии, у которого jabsh почему-то не собирался и мы с ним какое-то время переписывались по этому поводу.

Ещё одна из программ из тех времён — проект на лето от моего будущего научного руководителя — termprogs, для управления набором «терминалов» через «АРМы», с центральным сервером, куда всё это дело подключается.

Как раз к этому моменту я заканчивал читать книгу Уильяма Стивенса «UNIX: Разработка сетевых приложений» и мог на практике поприменять все свои знания по системному программированию.

Regexp 101 в ИТМО

Где-то на 2-3 курсе в университете начались пары по системному программированию. Сначала нас обучали пользоваться терминалом и vim на тонких клиентах от Sun Microsystems, с пузатыми ЭЛТ-мониторами. На этих парах я целый семестр пинал балду и не приходил в сознание — ведь всё это я уже изучил ещё в школьные времена. А вот потом началось самое интересное.

Половина семестра у нас были отведены на изучение регулярных выражений и grep’а, sed’а и awk. А регулярные выражения прошли мимо меня и grep’ом я пользовался на уровне: «ну, если ему параметром передать строку, то он будет искать по ней совпадения в файле».

А тут зубодробительные задания, километровые regexp’ы и всё такое прочее. К концу семестра регулярные выражения у меня отскакивали от зубов. Оглядываясь назад, сейчас могу сказать, что этот курс по regexp’ам — это ещё одна базовая база, которую я постоянно использую до сих пор. Не могу представить сколько времени и сил мне сохранило моё знание регулярных выражений.


До сих пор не понимаю, откуда пошла эта идея, что «если вы решаете проблему и решили использовать регулярные выражения — то теперь у вас две проблемы». Мой опыт на работе и дома показывает, что если нужно как-то хитро разобрать строку регулярным выражением, то ты берёшь sed или Java’овские Pattern и Matcher — и разбираешь строку. Потом тестируешь получившийся код, отправляешь его тестировщикам — а дальше он просто работает годами.


В то же время я начал делиться своим опытом — писать статьи на welinux.ru, общаться на linuxforum.ru, да захаживать на собрания SPbLUG. Одно время у меня был блог на WordPress’е, который я поднял на каком-то бесплатном VPS, которым можно было пользоваться пока ты не выходил за нижние или верхние лимиты по CPU и памяти. Тогда я и пристрастился к написанию всяких текстов с офигительными историями.

Linux и embedded-программирование

В районе 2011 года я принял роковое решение — пойти в embedded-разработку. В то время эта область Computer Engineering мне казалась более интересной и романтичной, чем «обычное» программирование. Ведь тут нет никаких «упрощающих» уровней абстракции — берёшь и пишешь код, которые работает прямо на железе! А потом отлаживаешь всё это дело при помощи моргания светодиодом, отладочной печати через UART, осциллографа и такой то матери. Зато все знания про биты, байты, внутреннее устройство всяких EEPROM, SRAM и прочих вещей — используются 24/7!

Все соответствующие курсы в университете предусматривали работу под Windows — в то время нужные среды разработки и компиляторы были в основном под эту операционную систему. Но, естественно, меня это не остановило. Для половины софта я использовал VirtualBox с Windows внутри. Для второй половины — можно было спокойно найти нужные нативные инструменты.

Для обучения мы поначалу использовали специальные устройства на базе микроконтроллера семейства MCS-51. Если код для них можно было писать в чём угодно — я использовал Vim/Emacs — то с компиляцией и прошивкой готового бинарника в устройство всё было сложнее. Для компиляции использовался компилятор sdcc, для прошивки же нужна была специальная утилита m3p, написанная одним из университетских преподавателей в незапамятные времена на C. К счастью, эта утилита писалась с оглядкой на кроссплатформенность поэтому, после пары незначительных правок в исходном коде, она спокойно выполняла свою работу и под Linux.

В те времена, начав уставать от всяких «modern» дистрибутивов, которые своими NetworkManager’ами, PsshPsshAudio PulseAudio, Avahi Daemon и прочими «инновациями» — ломали мой пользовательский опыт, наработанный ещё во времена Slackware — я пришёл к Arch Linux. В нём можно было достаточно быстро поставить базовую систему без вышеописанных программ, дополнить её только нужным мне ПО и спокойно работать и смотреть мемы.

Тогда у меня уже начал формироваться определённый набор софта, которым я постоянно пользовался. По понятному стечению обстоятельств (русифицированный Slackware как первый дистрибутив и любовь сидеть в консоли, как «хакер») это был в основном консольный софт:

  • vim/emacs — для редактирования текста и кода.
  • latex — для написания всяких сложных документов, особенно если их нужно распечатывать или куда-то отправлять. Ну и для рисования презентаций, чтобы «два раза не вставать».
  • Какой-нибудь tiling WM — всё равно после месяца пользования каким-нибудь красивым KDE или GNOME я приходил к тому, что у меня все окна по умолчанию раскрыты на весь экран и раскиданы по рабочим столам, в зависимости от имени окна. А раз не видно разницы, то зачем тратить дисковое пространство на тяжеловесный DE, если всё что мне надо я могу получить в каком-нибудь xmonad или i3wm? А всякие красивости в виде теней, анимаций и прозрачности — хоть и радуют глаз первые пару недель, но потом «вау-эффект» ожидаемо теряется.
  • Ну и всякие прочие консольные утилиты, с которыми я мог работать не приходя в сознание: grep, sed, git, make, cron и так далее.

С тех пор у меня и появился отдельный репозиторий с dotfiles, в котором я таскал с системы на систему свои конфигурационные файлы к вышеописанным программам.

Немного скриншотов рабочего стола с тех времён:

Впоследствии, я много раз пытался перейти на обычный софт с GUI или всякие Web-приложения, но уже не получалось. Либо возможности по его настройке «под себя» были скудны, а некоторые опции и вовсе «прибиты гвоздями». Либо скорость его работы оставляла желать лучшего. Либо просто было неудобно — то фокус при старте приложения не там, где я привык его видеть, то главное окно отображает не ту информацию, что мне привычна, и так далее.

Последней каплей наверное оказался «редизайн» GMail, после которого он стал ещё медленнее чем раньше и ещё более жаден до оперативной памяти. На этом момент у меня сгорело всё, что только может сгореть и я переключился на mutt. К счастью, эта штука не подвержена СаМыМ СоВрЕмЕнНыМ ДиЗаЙнЕрСкИм решениям и её внешний вид не меняется из года в год. Работает она достаточно быстро, запускается увы не так быстро, даже с кэшированием, но это потому, что у меня в maildir’ах вся моя почта с 2009 года (около 47 тысяч писем). Но главное — она не поменяется в один «прекрасный» день по желанию левой пятки главы отдела дизайна из Google.

В целом, Linux постепенно переставал быть для меня какой-то религиозной штукой, вокруг которой ведутся религиозные войны за звание самого rulez’ного дистрибутива. Он начал становиться для меня просто удобной и привычной операционной системой, от которой мне требовалось немногое:

  • Не делать ничего критичного, типа обновления ПО, без моего ведома
  • Обеспечивать работу привычных мне программ
  • Придерживаться FHS (Filesystem Hierarchy Standard) и прочих стандартных вещей, которые я узнал ещё со времён Slackware — чтобы если вдруг возникнет какая-то проблема — я мог быстро и спокойно в ней разобраться, понимая, что творится в системе.
  • Не навязывать мне способ хранения моих файлов — всё должно быть отсортировано по каталогам так, как мне удобно, без всяких тегов и звёздочек с рейтингом файла.

Работа и Linux

На своей первой работе, связанной с embedded-программированием, основной системой естественно была Windows 7. Когда нужен был линукс, мы использовали Linux Mint — он просто и без заморочек работал. Ну и ещё на серверах, которых я тоже касался, выполняя всякие задачи по администрированию, был какой-то RHEL (благодаря этим задачам я поднаторел в настройке всяких Web-серверов, серверов баз данных, и ещё в iptables, rsync да bash-скриптах).

Дома у меня на тот момент тоже был установлен Linux Mint — в целом, мне уже было без разницы какой дистрибутив использовать — всё равно я ставлю систему в минимальной «консольной» конфигурации и уже сам поверх доустанавливаю что мне надо, по списку из моего репозитория с dotfiles. Казалось бы, идиллия?

Но тут в среде линуксоидов началось какое-то непонятное шевеление. Сначала в git’е переименовали ветку master на main не из-за технических соображений, а по политическим причинам, относящимся к одной-единственной далекой, заокеанской стране. К счастью, благодаря гибкости консольного ПО, этого ненужного изменения мне удалось избежать:

[init]
  defaultbranch = master

Потом стала популярной замена привычных утилит типа grep или ls на их аналоги, которые либо печатают красивый цветной вывод, либо работают быстрее (правда на тех объёмах данных, который я обычно использую — это ускорение погоды не делало). Одно время я баловался с ними, но впоследствии вернулся обратно к привычным инструментам из coreutils, ради которых не надо вкручивать в свой репозиторий с dotfiles ещё и submodules — чтобы иметь возможность притащить в свою систему очередной supercat, который умеет подсвечивать исходной код в выводе, но при этом его нет в репозиториях дистрибутива. Если мне нужны будут подсвеченные исходники — come on (!), я просто открою файл в текстовом редакторе, а cat пусть просто печатает содержимое файла в stdout, как он делал это десятки лет!

Потом ещё зачем-то начали заменять ifconfig на iproute2 — вроде как, как я слышал, из-за необходимости работать с IPv6 (во FreeBSD, насколько я знаю, просто добавили нужную функциональность в ifconfig и продолжают им пользоваться 🤷‍♂️).

Последней каплей стало использование systemd вместо System-V init или BSD-style init. Безальтернативное запихивание systemd в Debian, а через него и в используемый мною Linux Mint мне не понравилось. Вот уже десяток лет у меня на прямо на подкорке головного мозга записано, что при старте система запускает обыкновенные shell-скрипты из /etc/init.d/ или /etc/rc.d/, их можно подёргать руками прямо из консоли или даже отредактировать как угодно, чтобы понять почему какой-нибудь tao-cosnaming работает не так, как мне хочется и так далее. А тут инопланетная штука, к которой разве что бинарный реестр ещё не прикрутили — бинарные логи старта процесса, которые не посмотреть через less уже есть — и с unit-файлами, которые не обеспечивают и половины той гибкости, что была у shell-скриптов. И ещё и старательно заменяющая собой все привычные мне отдельные программы, которые всегда просто делали своё дело и не беспокоили по пустякам: grub, cron, agetty и так далее.

В этот момент (после, но не вследствие) я уволился со своей работы, связанной с embedded-программированием и пошёл за длинным рублем в кровавый Java-энтерпрайз, с байткодом, shell-скриптами и морем регулярок — всё как я люблю.

Ну а стремясь избежать наступления systemd на мои привычки, я ушёл с Linux Mint на Gentoo.

Выбрал я его потому, что на тот момент это был один из немногих дистрибутивов, который не использовал оный systemd. Вместо него была своя система инициализации (OpenRC), которая весьма и весьма похожа на систему инициализации System V.

Прописал в /etc/portage/make.conf строку:

USE="-systemd unicode -pulseaudio X alsa"

И горя с тех пор не знаю. Эта система стабильно живёт у меня уже 5 лет, спокойно пережила обновление ядра с 4.19.23 на 6.1.57 и просто работает — лишь запускаю обновление раз в месяц, если не забуду, и всё. Подозреваю, что секрет её стабильной работы в том, что я использую максимально простой (как палка-копалка) софт, созданный в незапамятные времена, без всякой инновационности и поддержки одновременного вывода звука на систему 7.1, блютус-наушники в соседней комнате и по сети на планшет. Естественно, что если всё просто и понятно устроено, то оно и не будет ломаться. Ломалось что-то после обновления у меня всего лишь пару раз.

Однажды, разработчики Midnight Commander переименовали конфигурационный файл mc.ext в mc.ext.ini, для единообразия с именами остальных конфигурационных файлов — пришлось его переименовывать и у себя.

Вторая проблема, с которой я сталкивался — как-то раз мейнтейнер бинарного пакета для Firefox забыл слинковать его с библиотеками для ALSA — в итоге в браузере не было звука. Я откатился на прежнюю версию Firefox’а, полез в багтрекер Gentoo заводить новый баг — а он там уже есть и в нём люди активно комментят. Ещё через несколько дней пакет пересобрали правильно и на этом всё.

What I expected and what I got


Это не Winamp, это Audacious :-)

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

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

Утилита для plain-text accounting’а не позволяла мне использовать систему «денежных конвертов», как я привык. Взял dialog, awk и sqlite3 и со всем этим сделал поверх hledger’а систему для ведения бюджета, которая делает то, что мне надо.

Купил я себе трекбол Logitech Trackman Marble — а на нём есть ненужные мне кнопки «Вперёд» и «Назад», но нет средней кнопки мыши и прокрутки? Не беда.

Создаём файлик /etc/X11/xorg.conf.d/50trackball.conf со следующим содержимым:

Section "InputClass"
    Identifier "Marble Mouse"
    MatchProduct "Logitech USB Trackball"
    Option "EmulateWheel" "true"
    Option "EmulateWheelButton" "9"
    Option "MiddleEmulation" "true"
    Option "ButtonMapping" "3 8 1 4 5 6 7 2 9"
    Option "XAxisMapping"  "6 7"
EndSection

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

На новой клавиатуре есть Fn-кнопки для вызова «Моего компьютера», поиска и браузера, но нет кнопок для регулирования громкости? Не беда! Расчехляем xmodmap и переназначаем коды кнопок в сгенерированном им файле:

keycode 152 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume
keycode 163 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume
keycode 180 = XF86AudioMute NoSymbol XF86AudioMute

В итоге, Linux сейчас для меня стал просто системой, которая обеспечивает среду выполнения для привычных мне программ — что и составляют привычное для меня пользовательское окружение, как стена состоит из кирпичей. Бастионы — в лице Gentoo и Devuan 3 — пока прикрывают меня от бушующего моря лишних для меня изменений (раз X-сервер у меня прекрасно работает — зачем его менять на Wayland?) и связанных с ними проблем. Пока во всём остальном Linux-мире меняют системы инициализации, выкидывают на мороз X-сервер и переписывают coreutils на Rust — у меня всё тихо и спокойно, можно спокойно читать почту и RSS-ленты в mutt год за годом.

Когда (если) эти бастионы падут — наверное уйду в монастырь на FreeBSD. Благо какой-то опыт работы в ней, с точки зрения простого пользователя, у меня уже есть. Всё моё окружение, в лице i3wm, emacs, Firefox, RawTherapee и прочего ПО, работает и там. Единственные большие изменения в моей конфигурации, которые придётся внести — это в паре мест вызывать gmake вместо make, да в скриптах использовать не привычный she-bang #!/bin/bash, а более правильный #!/usr/bin/env bash. Да, придётся потерять docker, которого сейчас нет во FreeBSD, и возможность работать с LUKS криптоконтейнерами. Но уж лучше потерять их, чем всё своё привычное и любовно настроенное окружение и свои многолетние привычки.

Всю мою историю освоения Linux можно описать как «hard to learn, hard to master». Зато в итоге, год за годом были сформированы всякие разные привычки, которые позволяют писать тексты, пользоваться Интернетом и так далее — буквально «на кончиках пальцев». Именно поэтому я тут не агитирую за то, чтобы вы немедленно переходили на i3wm или Emacs ради пРоДуКтИвНоСтИ — без вышеупомянутых привычек как у меня — это бесполезно. Надо в первую очередь хотеть изучить, например Emacs, быть готовым к тому, что придётся его какое-то время настраивать, не воспринимать это время как «ну вот, надо заниматься настройкой текстового редактора вместо того, чтобы просто открыть его и писать текст» — и тогда что-то получится. А все эти статьи «переходите на Vim, чтобы быть более продуктивным в программировании» — от лукавого. Во-первых, вы потратите время на vimtutor, вместо программирования. Во-вторых, скорость набора текста и программирование слабо связаны. Я печатаю со скоростью всего 60-70 символов в минуту, но на мою продуктивность как программиста — это никак не влияет. Ведь я набираю код на клавиатуре от силы 20-25% рабочего времени. 10-15% времени уходит на общение с коллегами и Zoom-созвоны, чтобы понять, что же имелось в виду в этом таске/баге. И оставшиеся 60-70% — на размышления перед блокнотом с ручкой в руках на тему: «как же тут правильно и быстро сделать изменение, чтобы не тратить много времени ни сейчас, ни в будущем?» Так что vim тут никак не поможет с продуктивностью — думать перед листом бумаги за меня он не будет.

В-третьих, будем честны, на данный момент, для ряда языков, большая и тяжёлая IDE по прежнему является лучшим выбором, чем Vim или Emacs. Даже невзирая на наличие LSP-сервера для вашего редактора. Например, Emacs’овый LSP для Java до сих пор работает не очень хорошо — падает на простых вещах, не обновляет контекст изменений в файлах так быстро, как это делает IDEA, надо творить всякие хитрые заклинания, чтобы он работал с Lombok и так далее.

В целом, ряд действий можно с комфортом для себя сделать в GUI и только в GUI. Проявлять фотографии стоит в RawTherapee, редактировать изображения — в GIMP, смотреть сайт в Firefox’е и так далее. Но для массы других действий — есть куча возможностей делать их «на кончиках пальцев» в консоли. Это лишь вопрос удобства — кому-то удобнее мышкой в Nautilus’е выбирать файлы для копирования, а кому-то удобнее cp ~/photos/{photo,video}_*.{jpeg,jpg,JPG,avi} /media/BACKUP делать. Прекрасно, что Linux (на данный момент) предоставляет выбор как для людей привычных к графическому интерфейсу, так и для тех, кому привычно общаться с машиной текстом.

Связанные посты
81 комментарий 👇
Алексей Злобин Инженер-программист 3 января в 13:01

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

По новомодным утилитам в целом согласен, за несколькми исключениями. Первое сама консоль. Перешёл года 4 как на fish и думаю что он наэкономил мне кучу времени даже с учётом дообучения.

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

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

  Развернуть 1 комментарий

@cheat_ex

Спасибо)

Сам тоже использую jq для разбора JSON'а, благо эта утилита есть сейчас чуть ли не в любом дистрибутиве.

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

Это я понимаю, поэтому «хейчу» systemd исключительно с точки зрения обычного пользователя, для которого (тут отсылка к посту @vas3k https://vas3k.blog/notes/pets_vs_cattle/) его домашняя система это «pet». Естественно, что для сисадминов с кучей серверов, которые для него являются «cattle» — требования к системе инициализации ОС будут совсем иными.

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

Эх 😢. Ещё в 2007 про это писали🤷‍♂️


  Развернуть 1 комментарий

@cheat_ex, вот fzf просто магия, люблю очень.
А jq это имхо для тех кто регулярки не знает. Ей богу, мне быстрее грепом найти то что надо, чем документацию jq курить, чтобы понять как мне там пайпы построить и где я там скобочку пропустил. Но пользуюсь иногда. По крайней мере json развернуть/свернуть, а если что сложное чатгпт помогает.

  Развернуть 1 комментарий

@grbit, ну так регулярки ты когда-то выучил, синтаксис jsonpath тоже надо учить.


Я недавно организовывал тайного санту для клуба. Некоторые операции приходилось делать руками: отправить рассылку по пользователям, проверить, кто еще не отправил подарок.

У меня был скрипт "экспорта" пользователей и скрипты с отправкой рассылок и всего остального. Все скрипты либо отдавали массив одних объектов User, либо принимали его. Вместо реализации фильтров внутри моих скриптов, я решил использовать jq.

(В скриптах hjson вместо json для человекочитаемости, но я в начале и в конце перекодирую. Вам не нужно знать, что такое hjson.)

Самое простое. Так я смотрел количество участников:

python -m utils.export_users |
    hjson -j |
    jq length

Так я делал рассылку по неотправившим подарок:

$ python -m utils.export_users |
    hjson -j |
    jq 'map(select(.is_completed == true and .delivery_status != "sent"))' |
    hjson > target.hjson

$ python -m utils.send_message message.txt < target.hjson

Так я пролистываю опаздывающих сант:

python -m utils.export_users |
    hjson -j |
    jq 'map(select(.is_completed == true and .delivery_status != "sent"))' |
    jq 'map({slug:.slug, grandchildren:.grandchildren})' |
    hjson

Так я злюсь, что Вастрик решил воткнуть немоноширный шрифт в <code>:

😡😡😡

  Развернуть 1 комментарий

😱 Комментарий удален его автором...

  Развернуть 1 комментарий

Для контекста. Вот исходник пакета utils: https://github.com/igoose1/vas3k_secret_santa/tree/main/utils

  Развернуть 1 комментарий

@grbit,

А jq это имхо для тех кто регулярки не знает

Они же вообще про разное? Регулярки — для выдёргивания на основе локального контекста, причём, как правило, без учёта экранирования/кавычек/вложенности. То есть для HTML/XML/JSON в общем случае не подходит. jq — только для JSON.

  Развернуть 1 комментарий

@yeputons, мне кажется я ошибся сделав слишком большое обобщение про jq. Мне легко вытаскивать какие-то определённые поля из json логов или респонсов от API регулярками, просто потому что я их пишу примерно со скоростью любого другого текста.
Если стоит задача не грепнуть несколько значений или строк, а со стопроцентной точностью взять какие-то определённые поля в сложной большой json структуре с повторяющимися именами полей,то конечно jq лучше регулярок.
Так кж сложилось в моей практике, что если мне нужно выполнить задачу второго типа, я считаю более надёжным написать небольшую программку, а если первого, то баша с регулярками мне всегда хватает.

  Развернуть 1 комментарий

@grbit, тут выше уже весьма продвинутые примеры, я например map/select без гугла не напишу. Даже самые простые фильтры вроде развернуть список и выбрать по пути сильно упрощают ковыряния в апишках.
Регулярка же или валится при любом изменении форматирования или замусорена игнорами пробельных символов?

  Развернуть 1 комментарий

@cheat_ex, я не понял последнего предложения. Это вопрос или утверждение?
Я не очень понимаю что значит "регулярка валится". Если формат инпута непредсказуемо меняется, то что ещё можно ожидать? А если предсказуемый, то кто виноват в том что она валится?

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

Я не говорю "jq говно", или "настоящие профессионалы используют регулярки", или "jq for suckers". Нравится, пользуйтесь ради бога, нормальный инструмент имхо. Просто для человека хорошо знающего регулярные выражения он в 99% случаев не нужен, ведь если у тебя молоток, то всё вокруг гвозди)

  Развернуть 1 комментарий

Рад был прочитать! У меня тоже всё держится на "бастионах", которые, как я расчитываю, не будут меняться десятилетиями, Emacs в их числе, кстати.

Но я несколько лет назад спрыгнул с подхода "стабильно работающая уже N лет система, пережившая много обновления" на противоположный: система всегда свежеустановлена (не более двух лет от роду) и всегда готова быть переустановленной в любой момент:

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

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

  Развернуть 1 комментарий

@danik, Ох, ну ты знатный наркоша, такого даже я в порыве автоматизации всего и вся не делал))

  Развернуть 1 комментарий

@hanggard, это всё от того, когда в 100-й раз уже при переезде на новое железо в течении ещё полугода БОЛЬ, что то не установлено, это не настроено, а как я там в прошлый раз с этим трахался я уже и забыл, а форум где я нашёл решение уже закрыли, уфффф. И вот с тех пор я не решаю ни одну проблему с своей системе не записав решение в скрипт. Столько нервов сэкономил - не передать!

  Развернуть 1 комментарий

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

  Развернуть 1 комментарий

@focking_fock, "как жили люди до изобретения Mac и Time Machine" 😁

  Развернуть 1 комментарий

@hanggard, ну скажем так: у меня путь к линуксу лежал через макось, и Time machine мне не зашел абсолютно т.к лично у меня работал нихрена не идеально, мб это я тупой и че то не так делал)

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

Но такое, каждому свое.

  Развернуть 1 комментарий

@focking_fock,
Но теперь я уже подумываю - а не вернуться ли на мак, т.к сначала я сидел на синкпаде с intel gpu, а потом решил что хочу 4к экран и купил синкпад с nvidia. И я какбэ слышал что nvidia на линуксе это анальный ад, но я был наивен и не подозревал насколько.
Есть свой шарм в том чтобы купить ноут и он сразу работал без адских танцев с бубном с сраными драйверами и тп

  Развернуть 1 комментарий

@hanggard, да не особо много там делать в общем-то. Достаточно только документировать изменения в системе, хранить дотфайлы где-нибудь.

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

  Развернуть 1 комментарий

@focking_fock,

записывать это в заметку

А ты пробовал лимит в хистори баша убрать?
Потом такой cat ~/.bash_history | grep apt\ install собственно и всё

  Развернуть 1 комментарий

@hanggard, ну блин, тайм машин место жрёт. Дотфайлы в гите всё же копейки по сравнению с полными бэкапами

  Развернуть 1 комментарий

@focking_fock, сижу на синкпаде с райзеном и 4к+ полёт идеальный.
До этого с интелом тож проблем не было.

Сочувствую по части нвидиа, но вас предупреждали...

  Развернуть 1 комментарий

@grbit, а это какая модель?
У меня P1 с i7 и nvidia, и все модели с 4к экранами которые есть в РФ только с нвидиа. И я даже на глобальном сайте леново смотрел - все только нвидиа(

  Развернуть 1 комментарий

@grbit, о! отличная идея кстати, че я раньше про это не подумал то. Спасибо!

  Развернуть 1 комментарий

@focking_fock, а, о.
Я тебя не так понял. У меня 4к монитор по type c а не ноут со встроенным 4к

  Развернуть 1 комментарий

@hanggard, TimeMachine что есть что его нет.... пока не умеет с облака тянуть — бесполезный для большинства юзеров (не у всех есть внешний диск)

  Развернуть 1 комментарий

@grbit, Зато был разок случай, когда она спасла ситуацию. А так — купил внешнюю SSD на терабайт и не парюсь.

  Развернуть 1 комментарий

@danik, вау! а для макоси такое реально?
кстати, надо с тобой про emacs поговорить, я его пытаюсь осваивать с org-mode...

  Развернуть 1 комментарий

@AlexRiabtsev, для макоси наверняка реально в той части, что ставится через brew. Но вот настройки системы, боюсь, не переживут мажорной версии ОС, наверняка там формат меняется без оглядки на обратную совместимость.

А про Емакс я всегда рад, сам юзаю org-mode уже годами, доначу его разрабам, но всё равно чувствую, что делаю ещё только первые шаги :-)

  Развернуть 1 комментарий

@danik, да, вот я тоже думаю, что мажорные обновления не переживут, но надо проверять как-то.
а про org-mode приду к тебе в телеграмчик ))

  Развернуть 1 комментарий

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

  Развернуть 1 комментарий

😱 Комментарий удален его автором...

  Развернуть 1 комментарий

Какой приятный пост. Как много строк согрело мне сердце, читать было невероятно тепло, спасибо большое!

Примерно такую же базу приобрёл сам, только начинал с GUI и ушёл в консоль. Моё знакомство пришлось на бум популярности убунту, мол "вам не нужно знание линукса, теперь можно кликать мышкой!". Ах, еслибы это было правдой в начале 2010-х.

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

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

  Развернуть 1 комментарий

@grbit, На свежих версиях пульса идет в связке с pipewire, наверное, поэтому хорошо и работает. Для меня лично это манна небесная, потому как записываю музыку, а мучаться с настройками jackd каждый раз не хотелось. pipewire работает нормально из коробки

  Развернуть 1 комментарий
Yury Kuznetsov DevOps, недорого, самовывоз 3 января в 14:38

Спасибо за пост! Написано от души и очень увлекательно.
Сам я полез в Линукс буквально только что, в 33 годика, по велению сердца (уж больно оно любит денежки), и мне крайне интересно почитать, что и как у других людей происходит.
Забавно, что если вкратце, то можно всё свести к вкусам фломастеров. "Мне так удобно" и "я так привык" - по итогу, решающие аргументы в любом холиваре.
Чтобы не начинать, я сам считаю что гвозди лучше забивать молотком, а микробов - микроскопом.

  Развернуть 1 комментарий
Yuri Kh Софтвер Оверинжинир 18 января в 11:31

ИТМО, случайно, не кафедра ВТ? :)

Сильно триггернулся на Sun'овские терминалы, 51-й микроконтроллер и развеселые лабы по sed/grep/awk :)

  Развернуть 1 комментарий

@b00blik, она самая, родимая!)

  Развернуть 1 комментарий

@evgandr, на стуле не качаемся! И куда в одежде в 372 зашел?

  Развернуть 1 комментарий

@kkobylyanskiy, О Господи, нееет! 😱😱😱
Теперь у меня вьетнамские флэшбеки)

  Развернуть 1 комментарий

Спасибо за интересный пост который всколыхнул воспоминания 🙂

Напишу кратко о своем пути.

В 2003 году появился компьютер и диалап. Спустя некоторое время я нашел пиратский сайт с архивами журнала Xakep. Это были HTML-файлы без картинок упакованнные в архивы. Благодаря этому каждый выпуск журнала весил всего 200-250кб. Там я прочитал про Linux и начал искать вожделенный диск с дистрибутивом.

По счастливой случайности у одноклассника брат оказался программистом. Так в мои руки попались диски с Red Hat Linux 8.0 😎

Помню как меня поразила красота инсталлятора Anaconda и как я в первый раз загрузил Linux. Правда чуть позже я снес ОС так как хотелось играть в игори) Но линукс меня уже заманил)

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

  Развернуть 1 комментарий
Egor Suvorov Программист/преподаватель C++ 3 января в 04:03

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

Нужна определённая мудрость, чтобы отличить такую ситуацию от «распарсить CSV/JSON и посмотреть внутрь». Поэтому к регуляркам и настороженное отношение — ими можно попытаться начать парсить HTML, SQL, арифметические выражения…

  Развернуть 1 комментарий

@yeputons, классификация грамматик по Хомскому поможет. Регулярки являются автоматным языком. JSON как и большинство и ЯП - это контекстно свободные грамматики.

Если "на глаз", то автоматная грамматика не подходит для рекурсии (вложенных структур).

  Развернуть 1 комментарий

@aemarkov, Это академические регулярки автоматны. А программисты там такого навертели, причём в каждом языке своё… Например, backreference. Хотя не уверен, что рекурсию там можно выразить.

  Развернуть 1 комментарий
Evgeniy Maruschenko Data Engineer/Software Engineer 3 января в 04:33

Да, кстать, привет! Мы скорее всего с тобой общались на ЛОРе) Были же времена.

  Развернуть 1 комментарий

@maruschin, возможно, но сейчас уже не вспомню) С тех времён у меня ни аккаунта, ни комментариев на ЛОРе не осталось

  Развернуть 1 комментарий

Чтобы избегать systemd как раз перепрыгнул на FreeBSD. Через 3 года вернулся: полетел SSD, срочно надо было работать и не было времени на настройки. Снапшот zfs с фряхи не запустился на zfs на линуксе :-(

Docker там запускается через jail: https://wiki.freebsd.org/Docker. Почти всегда этого хватает, хотя что-то у меня не поднималось.

Рекомендую всерьез глянуть в BSD-системы! Там еще есть OpenBSD и NetBSD, которые славятся своей стабильностью. И man-ы там всегда заполнены, не надо лезть в интернет. В OpenBSD-сообществе правило: если в документации чего-то не хватает, это баг.


А еще я посматриваю на alpine. Если ты работал с докером, то понимаешь, что там лишнего вообще нет.

z3bra.org вот вообще устал от приколов современных и написал свой дистрибутив. Но когда работать?

  Развернуть 1 комментарий

Самая главная неприятность во фряхе — там не было драйверов на мою вай-фай карточку. На линуксах было. Приходилось к своему ноутбуку втыкать телефон по USB или искать ethernet.

Зато мне понравился хак. Можно поднять маленький linux-дистр в jail, с него подключаться к wi-fi и с него роутить сеть в хостовой FreeBSD. Звучит весело, но я не справился так провернуть.

  Развернуть 1 комментарий

@oskar

Docker там запускается через jail: https://wiki.freebsd.org/Docker. Почти всегда этого хватает, хотя что-то у меня не поднималось.

О, не знал, это прекрасно, спасибо!) Скорее всего docker'а в jail'е мне хватит, потому что docker я использую в основном чтобы поставить редкий софт с хитрыми зависимостями (типа 32-битных библиотек) и при этом не «замусоривать» основную систему.

  Развернуть 1 комментарий

Слушайте, ну вот кто мне объяснит, как правильно пересесть на VIM как на IDE?

Я уже как трерьий год снёс винду, и везде сижу на лине. Админил его много лет. В консоли раобтать умею. Вимом пользоваться тоже умею. Знаю не только, как выходить, но и многое другое. Осталось только привыкнуть к тому, чтобы редактировать в нём проекты, вместо задравшей VSCode, но блин!

  Развернуть 1 комментарий

@newarked, а зачем? Я уже 5 лет сижу на jetbrains с плагином vim поверх. Плагин отличный, всё умеет.

VIM как основную IDE я использовал только пока для Go не существовало IDE вообще. Сейчас Goland предоставляет более широкие возможности рефакторинга.

  Развернуть 1 комментарий

@newarked, не надо vim как ide, он очень хорош тут или там быстро посмотреть, но IDE это другое. vim вам никогда из marp или из d2 не нагенерит превью, но вот изменить 80 из 82 вхождений словосочетания — незаменимо

  Развернуть 1 комментарий

@newarked, Попробуй поставить какой нибудь opinionated сетап неовима, в котором сразу из коробки предустановлены и настроены плагины.
Так можно понять на что способен неовим, без заморочек с настройкой конфигов с нуля. Всякие красивости, lsp, форматтеры, дебаггеры и тп. И при этом по сравнению с ide работает супер шустро, и всякие фичи вима под капотом.

Я лично юзаю Lunarvim, очень нравится - https://www.lunarvim.org/
Но еще есть NvChad вроде норм - https://nvchad.com/
И еще всякие разные.

  Развернуть 1 комментарий

@newarked, да, добавлю что не нужно себя корить, если используете не "эффективные" программы: винду, а не линукс; ide, а не vim; cli, а не мышевозные интерфейсы; и т.д.

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

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

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

П.С. Я линуксоид, вимер и консольщик со стажем, не вижу смысла в антагонизме интерфейсов, нужно уметь эффективно пользоваться всем.

  Развернуть 1 комментарий

@newarked, NeoVim + Какой-то готовый конфиг типа того же NVChad, при помощи него разрабатывать на чем-то вне JVM мира будет просто.

Весь JVM - только в спец IDE, увы.

  Развернуть 1 комментарий
Ruslan Akmanov Старший инженер тестирования и сопровождения 4 января в 06:59

Охо-хо, привет коллега! Очень похожая история и путь и у меня, началась в 2013-м, когда увидел у геофизиков странную систему IRIX, потыкал консоль, запустил doom и завертелось. Через 2 месяца у меня уже был ноут в дуалбуте c SUSE и второй ноут Eeepc со Slaсkware.

  Развернуть 1 комментарий

Ура, Пост про Linux! Очень понимаю путь, но начал я его в силу возраста немного позже. Первым диском на руках стал OpenSolaris 2009, который мне дала учительница английского (sic!), получив на какой-то выставке непонятно за что (выставке по языкам, поэтому что там делал этот диск я хз вдвойне).

Это, конечно, не тот экспириенс, что можно получить со Slackware, но меня идея совершенного другой ОС очень заинтересовала, ведь до этого я игрался исключительно с Win XP/Vista.

По итогу я заказал с сайта Ubuntu бесплатные (да, на тот момент и такое было) диски с Ubuntu/Kubuntu 10.04 и Ubuntu Server (хз зачем, но почему нет?) и пошел играться. В итоге засел с Ubuntu прям надолго. Там подтянул знание терминала, а уж с этим багажом пригодился и Ubuntu Server -- решил сделать себе медиасервер, который по-моему по итогу проработал лет 10.

Начиная с 10.04 я уже совсем улетел в этот мирок и в течение следующих лет пяти кажется попробовал всё, кроме Gentoo (идея пересборки всего даже в 17 лет мне казалась безумием).

Сейчас уже последние лет 5 сижу исключительно на Arch и Fedora (в зависимости от кейса).

Но я никогда не отвергал новое и всегда старался сразу садиться на bleeding edge поезд, поэтому с systemd на "ты" я уже лет 10, юзаю почти все компоненты (systemd-resolved, systemd-networkd, systemd-cryptenroll, systemd-nspawn итд). Унификация -- супер, код у systemd отличный, что-то даже если пропатчить надо проект легко пересобрать при желании. Баш-скрипты для инициализации на мой взгляд наоборот куда сложней.

В Москве юзал на трёх мониторах сетап со Sway и был обмазан 3 слоями дотфайлов, но сейчас в эмиграции и на ноуте юзаю практически голый GNOME с подтюненым терминалом. Грустно, что нормальную интегрированную DE с тайлингом мы вряд ли увидим. Есть, конечно, плагин к GNOME от System76, но на мой взгляд он весьма корявый.

  Развернуть 1 комментарий

Obligatory link — https://nushell.sh/. Там по трубам не объекты ездят, а таблички (с опциональной типизацией колонок, еяпп), и это, похоже, оптимальный вариант для shell scripting. Собственно, в https://www.jntrnr.com/case-for-nushell/ подробно написано, почему именно.

  Развернуть 1 комментарий

@AndreiDziahel, Ух ты! Одна из тех замечательных штук, которые, безусловно, классные, но вот прям щаз не нужны. А когда будут нужны, ты уже забудешь, где ты это видел 🙂

  Развернуть 1 комментарий

@Spaider, если переехать на nushell совсем, проблема отпадает сама собой!

  Развернуть 1 комментарий

А я свой первый дистрибутив Linux выбрал по толщине носителя 🤭
Это был Red Hat Linux в паке аж из шести CD и с красивой обложкой!
Как он попал в 2001 году в далёкий Хабаровск - одному Бобу Янгу известно, но ждал он явно меня!

  Развернуть 1 комментарий

Тоже начинал с Бейсика и Паскаля. Никлаус Вирт покинул этот бренный мир 1 января. Помянем!

  Развернуть 1 комментарий

End.

  Развернуть 1 комментарий

F

  Развернуть 1 комментарий

Так-то в systemd тоже можно шелл скрипты через один лишний уровень абстракции запихнуть и какая-никакая обратная совместимость с sysV есть :-)

Здоровский пост, приятно почитать такое в клубе.

  Развернуть 1 комментарий

@frenzykryger, с systemd под капотом у меня ощущения от рестарта системных сервисов не те))

  Развернуть 1 комментарий

Каждый раз читаю этот пост «как я провел 18 лет в колонии и ни о чем не жалею» 😅🙈

  Развернуть 1 комментарий

Тёплая, ламповая история!

Я начал вкатываться в Линукс где-то на третьем курсе универа (примерно в 2015), когда мне понадобилось работать с Point Cloud Library и Robot Operation System. Если первый еще можно было как-то собрать под винду (но неудобно), то второй - Linux only.

К тому времени у меня был опыт и некого админства винды, и опыт программирования на сях и всяких C# и вообще сильный упор на экосистему MS с этими вашими Visual Studio и прочими .NET.

Сначала просто использовал линукс для определенных задач, но потом постепенно пересел практически полностью и где-то последние 6 лет линукс является основной системой, хотя винда в дуалбуте была почти всегда. Начинал с Убунты, пробовал разные ubuntu-based дистрибутивы, конечно же ставил разные цветастые DE, потом уполз на Arch с тайлингом.

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

vim пробовал, настраивал (использовал nvim), но потом вернулся на б-гмерзкую электронную VSCode. Там всё есть, и есть миллион плагинов на то, чего нет. Лично мне графический интерфейс редактора со всякими поисками и историей гита оказался удобнее, а код пишешь, как заметил автор, не так часто, чтобы все эти dws$^sxYs вима давали мне особое преимущество. Вим использую как легковесный редактор.

  Развернуть 1 комментарий

а давайте впихнём в Bash объекты вместо УсТаРеВшЕгО текста и добавим поддержку картинок с GIF-ками в вывод команд

Так ведь давно есть. Первое называется PowerShell, ему уже 15+ лет и это намного лучше «баша», второе — sixel (когда появился, не знаю, но очень давно) и собственное расширение iterm для показа картинок.

  Развернуть 1 комментарий

@bolknote, лучше это не метрика, есть метрика удобства использования и т.д. Я себе запомнил что интерфейс хорош, если априорное ожидание пользователя (user experience) от интерфейса программы (user interface) не сильно меняется, ему не приходится кардинально переучиваться чтобы выполнять аналогичную работу.

Априори, все любители и матерые пользователи шелов знакомы в основном с bash и zsh, а это все никсы включаю MacOS, pws вот только недавно появился в windows и не стал стандартом в Win интерфейсе.

В итоге для того чтобы почувствовать что pws лучше bash/zsh, нужно переучить и помнить контекст использования шелов, в Win команды такие, в MacOS такие.

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

PowerShell инструмент хороший, но не лучше Bash/Zsh, это еще один инструмент который приходится изучать.

  Развернуть 1 комментарий

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

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

Я хорошо знаю bash, я когда-то неплохо изучил PowerShell. Как мы знаем, в bash нас ждут текстовые строки с произвольным разделителем, который может попасться внутри полей, в PowerShell — свойства объектов.

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

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

А уж о задаче заэкранировать какие-нибудь кавычки в кавычках внутри команды, которую мы передадим через ssh на удалённую машину — я вообще молчу.

  Развернуть 1 комментарий

@bolknote

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

Это тезис не имеет отношение к этом обсуждению, но вы используете qwerty или dvorak? Если первое, то почему? Дворак же лучше?

Если ваш ответ qwerty, то вы поймете почему я говорю что bash "лучше", скорее для меня идеоматичнее.

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

А уж о задаче заэкранировать какие-нибудь кавычки в кавычках внутри команды, которую мы передадим через ssh на удалённую машину — я вообще молчу.

Проблема джуна

  Развернуть 1 комментарий

Дворак же лучше?

Чем же он лучше? Скоростью набора? Но клавиатура не ограничивает мою скорость набора, я не формулирую мысли и не программирую с такой скоростью. Тогда в чём смысл переучиваться?

Проблема джуна

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

  Развернуть 1 комментарий

@maruschin, теперь осталось сопоставить аналогию bash -> pws, qwerty -> dvorak.

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

  Развернуть 1 комментарий

@maruschin, когда-то все хорошие решения были малораспространены, так это и работает.

С двораком ситуация другая — где ниша этой раскладки? Что она даёт? Большинству людей (включая меня) ничего не жмёт, а там где жмёт, дворак не поможет. Насколько я знаю, в печатающих машинках для стенографии (которые мы видим в американских фильмах) не дворак.

  Развернуть 1 комментарий

@bolknote, имхо правильнее кавычки поставить так: power shell намного "лучше" баша =)

Просто субъективное мнение, холивар не разжигаю, участвовать в спорах про вкусы фломастеров не буду)

  Развернуть 1 комментарий

@grbit, разумеется нет ни одной причины так считать.

  Развернуть 1 комментарий

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

У меня вопрос появился .... почему Gentoo ? Логично было бы остаться на Арче и выбрать другую init систему ... runit и тд. , учитывая что Арч был вам знаком

  Развернуть 1 комментарий

@sandra1n, деталей не помню сейчас уже. С Gentoo я тогда тоже был знаком и идея USE-флагов (аналогичная тому, что есть в портах FreeBSD) мне весьма нравилась. Плюс вроде как столкнулся с тем, что в каких-то программах мейнтейнеры не включили нужную мне функциональность — поэтому в итоге поставил Gentoo.
Тем более что в те времена в списке non-systemd based дистрибутивов она шла первой)

  Развернуть 1 комментарий
Антон Баранов Директор по развитию 17 января в 02:22

О, прям знакомое начало) я потом в админы ушёл, потом в продажи, но красноглазпя юность навсегда в сердце)))

  Развернуть 1 комментарий

Не представляю, как жить без свистоперделок. Поэтому пользуюсь bat, duf и прочими заменами coreutils с красивым текстом.

  Развернуть 1 комментарий

@azhinu, напиши свой список? Я такой же, но, например, про duf я не знал, у меня был ncdu

  Развернуть 1 комментарий

@danik, А duf аналог df, а не du. Вместо du использую gdu.

  Развернуть 1 комментарий

А есть какой удобный фреймворк для LaTeX-презентаций?

  Развернуть 1 комментарий

@kevit, единственный, который я использовал — это LaTeX Beamer.

Там, если собрать себе шаблон для tex-файла презентации, типа такого: https://github.com/eugeneandrienko/dotfiles/blob/master/utils/emacs/.emacs.d/templates/latex-beamer/presentation.tex. То дальше можно просто описывать слайды через \begin{frame}...\end{frame}, примерно так:

\section{Docker internals}
\begin{frame}
    \center{\Huge{Docker internals}}
\end{frame}

\subsection{Слои}
\begin{frame}[fragile]{Слои}
\begin{tabular}{lr}
    \raisebox{-1\height}{\includegraphics[width=0.5\textwidth]{image-layers.jpg}} &
    \begin{minipage}[t]{0.5\textwidth}
    \begin{itemize} 
        \item Каждый Docker-образ состоит из набора слоёв\cite{docker-icl}.
        \item Каждый слой~"--- результат выполнения определённой директивы из Dockerfile.
        \item Каждый слой в образе~"--- доступен только для чтения.
    \end{itemize}
    \end{minipage}
\end{tabular}
\end{frame} 

\begin{frame}{Слои}
\begin{itemize}
\item При запуске контейнера к слоям из образа добавляется ещё один
слой, доступный для записи. Этот слой удаляется при остановке
контейнера.
\item Если один образ наследуется от другого, то слои второго образа
переиспользуются в первом.
\item Аналогичное поведение верно и для скачиваемых из внешнего источника
образов. 
\end{itemize}
\end{frame}

\begin{frame}{Слои}
    \center{\includegraphics[width=0.8\textwidth]{saving-space.jpg}}
\end{frame}

В результате получается вот такой PDF для презентации:

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

  Развернуть 1 комментарий

😱 Комментарий удален его автором...

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб