Минутка просвещения

Читать в телеге. Когда-то там были посты не только от меня.

Боли docker

Докер - это не всегда клево. Когда-то в далеком 2015, мы в ОСУЗ тыкали его палкой... Но получилось не очень. С тех пор много воды утекло, и многие все в kubernetes держат, но боли от контейнеров все равно актуальны: https://habr.com/ru/post/467607/.

СсылкаКомментировать

Копирование пустой строки в Intellij Idea

Иногда довольно бесит, когда промазал мимо кнопки и скопировал пустую строку. Чтобы отключить это поведение (копирование пустой строки) в Intellij, можно залезть к ней в реестр настроек. Подробнее на stackoverflow.

СсылкаКомментировать

Чтение тредов твиттера

В твитере люди иногда делают длинный тред с фактами (1 факт - 1 твит). Звучит по-уебански, но таки уж люди, они и в инстаграме статьи-лонгриды пишут. Так вот, есть специальный бот, чтобы из треда с сотней твитов сделать обычную статью: https://threadreaderapp.com/. Типа упоминаешь его твитом и он разворачивает тред.

СсылкаКомментировать

Свободное место на файловой системе

Чтобы не попасть в просак при работе со свободным местом в ФС и всем таким рекомендуется ознакомится со статьей. Можно для разогрева прочесть эту.

Даже если есть место на диске, новый файл может не создаться из-за того, что:

  • кончились свободные inode
  • кончились свободные inode для пользователя (для root есть специальный резерв)
  • может быть коллизия хэша имени в индексе каталога (поэтому много файлов в одной папке хранить плохо)
СсылкаКомментировать

Значения по умолчанию в dict в питоне

В питоне dict.get(key, default_value) вычисляет все свои аргументы сразу. Вроде мелочь, но конструкция lookup.get(z, int(z)) может поломаться. Ее ожидаемое поведение - попробовать получить что-то из словаря по ключу, а если не получилось - то по преобразованному в число ключу. Но поскольку int(z) вычисляется сразу, то на обычной строке ввод ломается. А если эта конструкция где-то глубоко, и ты хочешь быстро написать скрипт и свалить, то можно начать грешить на скрытые юникод символы и прочую дичь по непривычке. В scala, например, вычисление значения по умолчанию - ленивое.

СсылкаКомментировать

Java становится похожа на Kotlin

Java с каждой версией все больше и больше похожа на Kotlin/Scala/C#. И если раньше была вполне очевидная ниша для enterprise-языка с низким порогом вхождения, то сейчас это уже получается весьма странный зверь.

В 8 java завезли функциональные методы работы с коллекциями, лямбды и Optional.

В 10 java добавили var.

С 12 java switch может быть выражением.

В 13 java добавили тройные кавычки для строковых литералов.

В грядущей 14 версии добавят:

  • записи (как data-классы Kotlin)
  • паттерн матчинг в стиле C#
if (obj instanceof String) {
    String s = (String) obj;
    System.out.println(s.toUpperCase());
}

Но есть и довольно клевая фича, которая выгодно отличает от других: хорошее описание для NPE, которое говорит, в каком именно методе цепочки была ошибка, а не тупо строчку:

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.toUpperCase()" because the return value of "Address.getStreet()" is null
  at Program.getStreetFromRequest(Program.java:10)
  at Program.main(Program.java:6)

В 15 java обещают sealed типы. Движение в сторону здорового паттерн-матчинга.

См. также википедию и статью на хабре.

СсылкаКомментировать

Нейминг

There are only two hard things in Computer Science: cache invalidation and naming things — Phil Karlton.

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

Всякие банальности наверно говорить не стоит: и так понятно, что метод f() - вообще донное название, переменная должна быть существительным, метод - глаголом. Базовые советы неплохо расписаны в этой статье (которая у нас висит на заглавной странице Redmine, если кто не помнит).

Недавно на хабре подняли еще один вопрос про нейминг. https://habr.com/ru/post/484860/. Суть примерно такова - не надо в названии отражать, как функция работает. Надо писать, что полезного она делает.

Вообще, у нас в отделе вопрос нейминга решается обычно так:

  1. Попробуй назвать сам. Если совсем туго - возможно нарушен SRP или другая практика, код надо отрефакторить.
  2. Попроси помочь старшего друга, но хотя бы 2-3 варианта предложи сам.
  3. Спроси команду. "Если хочешь что-то понять - объясни другому". Если объясняешь человеку, который не в контексте - то, во-первых, сам сконцентрируешься на важном и лучше поймешь, что делает функция, во-вторых, незамыленный взгляд/слух способствует новым идеям и/или объективному подходу к теме.
  4. Совсем тяжелые случаи выносим на голосование.
СсылкаКомментировать