Обновляем ключи для apt

В наше время тотальной слежки и всеобщего недоверия всё должно подписываться публичными ключами. Утрирую, конечно, но проблема стара как мир - как убедиться, что файл был создан действительно тем, кому мы доверяем? Сегодня речь пойдёт об apt и установку пакетов. Прошло то время, когда люди ставили ПО из исходников. Это было реально неудобно по многим причинам, так что на свет появился сначала dpkg, а потом и apt-get. dpkg умеет работать с зависимостями и устанавливать пакеты, а apt - искать их в репозиториях.

Готовимся резать лосей в портфеле

Скоро декабрь - самая пора резать лосей. Не тех, за которыми надо охотиться, а которые у нас в брокерском портфеле (loss - минусовые позиции). Тем более, что год выдался удивительным на события, и отрицательных позиций, уверен, много у каждого. Вот и я решил узнать что можно продать с минимальным убытком. Считать ручками как-то лень, так что весь код на github. Немного теории 🔗Наш налоговый кодекс допускает некоторую оптимизацию уплаты. Первая попавшаяся статья говорит нам, что можно провернуть много чего, но я пользуюсь только парой пунктов:

Тангенциальное обучение - мой путь

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

Дорогие рекрутеры!

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

Современный фронтенд неизлечимо болен

Волею судеб мне пришлось глубоко погрузиться в промышленную фронтенд разработку. До этого у меня были некоторые свои небольшие проекты, но писал я их в одиночку и не знал всех best practice. Следовал логике что чем проще, тем лучше, и они как-то работали. Пример можно посмотреть на GitHub GeoPuzzle - там используется React вместе с bootstrap, получилось достаточно минималистично. Сейчас же я работаю с крупным проектом на сотни компонент, несколько десятков страниц и сложной бизнес-логикой.

Не все индексы одинаково полезны

Каждый разработчик знает, что если запрос тормозит, то надо просто добавить индекс. Контринтуитивна обратная ситуация - чтобы запрос работал быстрее, надо индекс удалить. Вот именно с таким случаем я и столкнулся на работе. Попробуем смоделировать ситуацию. У нас есть всего одна таблица, в которой хранится информация по обработанным задачам. Пользователи дёргают ендпоинт, запускается Celery задача, и результат отправляется на email. Ничего сложного, всего несколько столбцов: id - уникальный ключ task_id - номер задачи user_id - кто запустил started_at - время начала finished_at - время окончания О хранении исторической информации в реляционной БД Вообще, хранить в Postgres данные, которые не меняются - не самая хорошая практика.

Моя любовь к линтерам

Я думаю, все понимают пользу стайлгайдов и оду линтерам не писал только ленивый, так что я собираюсь покинуть их число. За последние 10 лет правила форматирования кода появились у всех языков (а для некоторых даже несколько!). Причина понятна - единообразно написанный код проще читать. Глаз не цепляется за пропущенный пробел или скобку не на той строке. В Go это даже возведено в абсолют - вы не можете форматировать свою программу по-другому.

Правильный запуск python-пакетов

На днях меня попросили посмотреть один странный баг, связанный с запуском приложения. Вот так $ python mymodule интерпретатор валился с ошибкой ModuleNotFoundError: No module named 'http.server'; 'http' is not a package (или ImportError: cannot import name 'server' from partially initialized module 'http' - зависит от того как импортировать http.server). Проблема уходит, если запускать пакет правильно $ python -m mymodule. И вроде бы вопрос закрыт, можно было бы и забить, но что-то меня заставило копнуть глубже и разобраться чем эти 2 команды различаются.

Сбивается время при переключении систем в дуалбуте

У меня на ноутбуке установлено 2 ОС: Linux Mint и Windows 10. Первая - для работы, вторая - для Steam. Переключаюсь поиграть я не так чтобы часто, но в этот раз меня окончательно достал сброс времени при возврате в linux на 3 час, так что я решил всё-таки разобраться в проблеме. Мой часовой пояс Europe/Moscow UTC+3, значит где-то не происходит перевод из datetime with timezone в naive datetime или наоборот. И что же может быть общего между двумя ОС на разных разделах диска?

Заводим Caddy на DigitalOcean с Let's Encrypt

За свои 15 лет в IT я перепробовал разные веб-серверы. Сначала это был Apache (куда же без него), потом перешёл на более лёгкий nginx (а как меня однажды OpenResty спас!). Поразвлекался с lighttpd когда держал дома FreeNAS, даже заводил pet-project под YAWS. И вот в одном из репозиториев увидел новый для себя Caddy. Поспрашивал в местных чатиках кто его использует, и меня убедили, что он уже вполне production-ready. Более того - настраивать ничего не надо, сертификаты сам обновляет, быстрый, всего один бинарник!