Блог Евгения Морозова

Написал перед отпуском статью о часто возникающей проблеме при контейнеризациии приложений со статикой:

Как организовать отдачу статических файлов в контейнеризованном Django

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

У меня нет действующего аккаунта на Хабре, поэтому опубликовано от имени Яндекс.Практикума.

#django #python #docker

Дошли руки наконец переписать конфигурацию neovim, чтобы сделать его более удобным для разработки. Раз уж переписывал с нуля, решил делать сразу на lua, так как судя по статьям о neovim это самый писк моды.

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

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

Кажется, что теперь neovim способен не только догнать по возможностям какой-нибудь VS Code, но даже и перегнать.

#neovim #lua

Негативные, в основном, т.к. во-первых, негативные предсказывать проще (для того, чтобы сказать «что-то не случится», в общем, требуется меньше усилий, чем чтобы сказать «что-то случится», т.к. не требуется угадывать что именно возникнет во втором случае), во-вторых, ничего особенно хорошего от 2022 не жду.

Предсказания немного не в тему блога, и я жалею, что блог — это не социальная сеть, в которой можно писать о чём хочешь, блог требует более чёткой структуры и направленности. От социальных сетей отказался в конце прошлого года, но не хочу отказывать себе в маленьком удовольствии побыть предсказателем. В 2019 и 2020 годах, я сделал несколько верных предсказаний, которые сообщал устно друзьям, но не записывал. В частности, летом 2019-го предсказал, что к концу 2019 – началу 2020 начнётся экономический кризис. В начале 2020-го предсказал, что международный туризм умер навсегда (на что мне не раз рассмеялись в лицо), также ошибочно предсказал, что рубль укрепится по отношению к доллару. В начале 2021-го предсказал, что к концу, максимум середине 2021-го, биткоин упадёт в несколько раз, это тоже не сбылось, хотя немного к концу года он всё-таки упал, но я имел в виду более катастрофичное падение.

Короче, это ребячество, не стану с этим спорить.

В общем, от лирики перейду к списку предсказаний.

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

  2. Цены на ископаемые ресурсы, прежде всего, энергетические, будут расти. Не буду пытаться предсказать, насколько они вырастут, предположу, что газ, уголь и нефть точно не будут стоить дешевле, чем стоят сегодня, 2 января 2022.

  3. В связи с предыдущим пунктом, возрастёт количество революций и войн в странах, обладающих данными ресурсами. Тут тоже не знаю, как количественно измерить. Просто уверен, что если в стране есть нефть, уголь или газ, скорее всего, будет минимум одна попытка свергнуть правительство. Если страна слабая, то, возможно, прямое военное вторжение.

  4. Быстрый рост зарплат в IT, ускорившийся в конце 2021, скорее всего, закончится, возможно, даже катастрофически, с резким уменьшением зарплат и рабочих мест.

У меня осталась ещё пара ощущений, чего ждать от будущего года, но они ещё более расплывчатые, поэтому не стану их приводить.

Каких-то позитивных ожиданий, к сожалению, нет. Думаю, что 2022 будет в целом тяжелее 2020 и 2021 для всех.

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

-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEZTbx9FsMyedM2jk6P9gbsg7YAjEFAmHRx0QACgkQP9gbsg7Y
AjEsDw/+LioHodwYgJUuLlFPN0Y90obQK9hk6Qk41lkch9JWpA0tPdrQq0qMLmqN
TMdv53v5VtWpWbxbpa4bwjugHtsq9Z88cEDjvFPxGrOyz3ULwDV+qRxl9n/SnfiD
Bv+EaOlyv1Rj3aH+d8P4Odd9dwBVYg2fDgoSt1boR3WQvyA7hxLZj7jsr661y/5O
Pdr+k5VSwwrm9YYbnIUbQ7dgMNXbQMtqsttKtsY/8yKXUIXHnncKgUYZUylJpsnb
QmNNzMuBx8aKeqrF0zeWSgQhFYLkh4qCMpcpYOGEYdMTqpJqvbc8fmeREnavMABA
CpzTu4JmgDhkfKacASFSYGZp6U+QA5inml/oi3rykhMRUqQY68Des7N5LvYwPtfY
jCi2fyGsmZGsx7yRKnlyhEBDqLO9TJNcpq9WJFRLJ5+E+CpoiyAyEDCRAeVnwcmb
pSGmKsqhbRcQcyEZsvED8TsY49hM4KqoAcVSE+oHzQcdExe3/3SO5QfhZ5goDudB
9MXQV9uyloIFv6mHna4MDfHfQtEbIUcBF/3QREETYdZA661gScZYH/UfdMzr4ycT
CCElGAUdxIUsBQbbpM4xDbiChGwbk6d/IRwSkYaoLLt5L2bqeGG0l1K+JykuLWxC
zL/yt2AayXVC3GIlTLWhZUQdJm7fIX80BH6gG2hVYNe3DxriQvY=
=Lm2Z
-----END PGP SIGNATURE-----

#прогнозы

При установке VSCodium в любую Linux-систему, он по умолчанию назначает себя в качестве файлового менеджера. Это значит, что любое приложение, которое пытается отобразить пользователю каталог, вместо файлового менеджера открывает vscodium, который во-первых, тяжёлый и долго запускается, во-вторых, бесполезен в качестве замены файлового менеджера.

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

В Arch Linux есть возможность запускать хуки на установку, обновление или удаление любого пакета. Создаём файл /usr/share/libalpm/hooks/vscodium.hook с содержимым:

[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = vscodium*
[Action]
Depends = coreutils
Depends = desktop-file-utils
When = PostTransaction
Exec = /usr/bin/sh -c '/usr/bin/sed -i "s/inode\/directory;//" /usr/share/applications/VSCodium.desktop && /usr/bin/update-desktop-database'

Теперь, после установки или обновления vscodium, приложения продолжат пользоваться существующим файловым менеджером по умолчанию.

#linux #vscodium

В начале 00-х познакомился на тусовке фотографов с одним человеком. Тогда он работал в очень далекой от IT области, увлекался только фотографией (почти как я, разве что я работал в IT). Мы не подружились, хотя какое-то время часто общались о чем-то на форумах, несколько раз пересекались на встречах фотографов-любителей.

Прошло более 16 лет. Встречаю этого человека теперь на тех же сайтах, где бездарно трачу время я сам. Различные соцсети айтишников, мотоциклистов, и всякие там пикабу. Узнаю по постам и комментариям человека, что он теперь программист, увлекся мотоциклами, а еще использует Linux.

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

Необычное совпадение. Умеет жизнь удивлять.

#жизнь

Первый опыт написания чего-то нужного лично мне на Rust: annotate-branches или просто anb. Утилита, выводящая список веток Git в текущем каталоге, вместе с кратким описанием и статусом задачи из Jira (предполагается, что ветки имеют такие же названия, как и задачи в Jira).

Можно было намного быстрее и короче написать этот скрипт на shell, но каждый изучающий Rust просто обязан переписать что-то тривиальное (или не очень) на Rust. Кроме того, это хорошее упражнение для новичка в языке, т.к. требуется задействовать подпроцессы, регулярные выражения, и взаимодействие с сервисами по сети. Неожиданно легко получилось написать, ожидал, что будет дольше и труднее.

Написал еще до Нового Года, но руки не дошли анонсировать в блоге. Точнее, терзали сомнения, стоит ли публиковать что-то настолько тривиальное. В итоге решил, что стоит.

#rust

Последние события окончательно убедили в необходимости окончательного удаления профиля Facebook. Не буду повторять все причины по которым считаю социальные сети злом, а Facebook и Instagram — злейшим из зол, думаю, эти причины уже набили оскомину всем моим друзьям в FB, а другим, наверное, не так интересны.

Удаление профиля в Facebook хорошо описанно в их же собственной справке. Первым делом необходимо создать файл с дампом всей вашей информации в FB (если не хочется терять загруженные фотографии и сообщения). В моём случае он создавался менее 10 минут и имел размер около 600 Мб. Это обычный архив, в котором находятся все мои сообщения в HTML формате, а также все фотографии, которые я загружал в Facebook. Ожидал, что размер будет больше, но видимо, это связано с тем, что долгое время уменьшал размер фотографий вручную перед загрузкой в FB. Поэтому многие сохраненные фотографии имеют низкое разрешение и маленький размер.

Затем вводится пароль для подтверждения удаления профиля. В течение месяца можно передумать и отменить удаление. Говорится, что после этого профиль и все данные удаляются навсегда (так я и поверил). Но в этот раз вряд ли передумаю. Опыт временного удаления профиля на два месяца показал, что без социальных сетей жить не только возможно, но даже и лучше, чем с ними.

#жизнь

Certificate

Ссылка на курс на Udemy

Курс довольно простой и короткий, вопросы к курсу тоже очень простые, но курс всё равно понравился. Для новичка довольно объясняется много важных вещей, при этом очень понятным языком, и на примерах, отличающихся от Rust Book (которые используют множество других курсов), что позволяет взглянуть на язык с немного другого ракурса.

#rust #курсы #udemy #mooc

Прошёл курс по структурам данных на Stepik. Получил сертификат с отличием.

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

#stepik #mooc #курсы #алгоритмы

До нового года осталось меньше месяца, а я только нашёл эту прекрасную страницу: Learning Rust in 2020.

Я стал осторожно изучать Rust с начала 2020. Особых причин для изучения не было. Хотелось изучить какой-то новый язык программирования, чего уже давно не делал, так как не было времени и сильной необходимости. При этом не люблю языки, работающие на виртуальных машинах (видимо, сказывается нелюбовь, вызванная столкновениями с ранними версиями Java, которые всегда больше обещали, чем делали). Есть исключение: мне нравится Clojure и я делал к нему несколько подходов, но очень глубоко не погрузился. Мне не хочется изучать еще один интерпретируемый язык. Я трушу идти в экзотические и/или пуристские языки (Haskell, Scala).

Rust показался идеальной целью по многим параметрам. Он производительный и мощный — в том смысле, что может работать на голом железе, без интерпретаторов, байт кода, сборки мусора, и так далее. При этом, он высокоуровневый, но без сборки мусора, которая заменена на мощную и сложную систему управления памятью, иногда называемой «сборкой мусора во время компиляции».

После прочтения Rust Book, прежде чем перейти к написанию какого-нибудь хобби-проекта на Rust, хотелось для начала набить руку на простых примерах на сайтах типа LeetCode или CodeWars. Однако первые же попытки решить простейшие задачи на LeetCode стали вызывать серьезные трудности. Я знал, что на Rust сложно реализовывать структуры данных из-за стремления компилятора сделать программы максимально безопасными. Но не предполагал насколько, и насколько сложно решать эти проблемы имея за поясом только Rust Book, которая, всё-таки, не объясняет множество критически важных вещей.

Страница Learning Rust in 2020 немного подняла самооценку, так как на ней поясняется, что, к сожалению, задачи на LeetCode и CodeWars плохо сформулированы на неидиоматичном Rust. Предлагается несколько альтернатив, например, Exercism — сайт, на котором можно решать задачи, составленные профессионалами на идиоматичном Rust. Более того, обещается, что проверять и подсказывать будут настоящие наставники. Зарегистрировался и решил первую тривиальную задачу. Постараюсь информировать о ходе прохождения курса, концепция мне очень нравится. Но прежде надо будет закончить другой начатый курс: Learn Rust by Building Real Applications , который пока нравится тем, что доступно и просто объясняет как некоторые сложные концепции, которые не до конца объяснены в Rust Book, так и многие вещи, которые даже не были затронуты в Rust Book.

#rust #курсы #ссылки