Прошёл следующий курс на Skillbox, который называется “Основы генетики”. Если честно, то немного разочарован. Нет на мой взгляд самого интересного: генной инженерии, CRISPR/CAS9, расшифровки ДНК, сборки вакцины от COVID и т.п. С другой стороны он именно что про основы. Если вы не прогуливали биологию в школе и хоть как-то следите за генетикой, то найдёте для себя мало нового. Тем не менее, что я узнал:
пол у других животных может быть абсолютно по-разному спроектирован (Y-хромосома не обязательно отвечает за мужской) при кодировании мРНК репликация идёт только от 5’ к 3’ основаниям понимание статистики в генетике крайне необходимо как устроен горизонтальный перенос генов между бактериями и растениями мне интересно больше изучение генотипа и микробиологии, нежели фенотипа Из плюсов хочется отметить хорошо сделанные слайды и, пожалуй, раскрытие темы основ генетики.
Пользуясь возможностью, стал проходить курсы Skillbox. В первую очередь для общего развития, и начал с истории. Мне интересна эта наука, потому что позволяет понять почему что-то появилось в нашей жизни именно в таком виде; что повлияло и какие были предпосылки. Это даёт представление как о границах применимости инструмента или понятия, так и о его актуальности. Возможно, наша жизнь настолько изменилась, что пора бы уже этот атавизм и отбросить.
Начал с курса “Мир Страдающего Средневековья”.
Просто добавляйте по одному слову… 🔗То, что ChatGPT может автоматически генерировать что-то, что хотя бы на первый взгляд похоже на написанный человеком текст, удивительно и неожиданно. Но как он это делает? И почему это работает? Цель этой статьи - дать приблизительное описание того, что происходит внутри ChatGPT, а затем исследовать, почему он может так хорошо справляться с созданием более-менее осмысленного текста. С самого начала я должен сказать, что собираюсь сосредоточиться на общей картине происходящего, и хотя я упомяну некоторые инженерные детали, но не буду глубоко в них вникать.
По мотивам моего доклада на PyCon “Контейнеризация Python без боли”. На своей практике я постоянно сталкиваюсь со спорами какой базовый образ лучше использовать для проектов: alpine или debian. Аргументы есть и у той, и у другой стороны, но мне это настолько надоело, что я решил сам разобраться и наконец-то поставить точку. В конце концов “В наше время верить нельзя никому, даже себе. Но мне - можно.” (с)
Сравниваем базовые образы alpine и debian 🔗Перед тем, как мы перейдём к специфике запуска python-проектов под alpine, давайте заглянем под капот базовых образов и сравним что они нам предлагают.
В наше время тотальной слежки и всеобщего недоверия всё должно подписываться публичными ключами. Утрирую, конечно, но проблема стара как мир - как убедиться, что файл был создан действительно тем, кому мы доверяем? Сегодня речь пойдёт об apt и установку пакетов.
Прошло то время, когда люди ставили ПО из исходников. Это было реально неудобно по многим причинам, так что на свет появился сначала dpkg, а потом и apt-get. dpkg умеет работать с зависимостями и устанавливать пакеты, а apt - искать их в репозиториях.
Скоро декабрь - самая пора резать лосей. Не тех, за которыми надо охотиться, а которые у нас в брокерском портфеле (loss - минусовые позиции). Тем более, что год выдался удивительным на события, и отрицательных позиций, уверен, много у каждого. Вот и я решил узнать что можно продать с минимальным убытком. Считать ручками как-то лень, так что весь код на github.
Немного теории 🔗Наш налоговый кодекс допускает некоторую оптимизацию уплаты. Первая попавшаяся статья говорит нам, что можно провернуть много чего, но я пользуюсь только парой пунктов:
Дорогие рекрутеры! Я искренне ценю ваш труд. Перебрать сотни резюме, созвониться с кандидатом, организовать встречи, собрать фидбек - это требует огромных усилий. Особенно, если это работа, которую надо делать каждый день. И я представляю вашу радость, когда оффер наконец-то принимают, и новый человек в команде хорошо приживается. Поздравляю! Но случается это, увы, не так часто. И мне хотелось бы рассказать как процесс общения и найма выглядит со стороны кандидата и как можно улучшить коммуникацию.
Каждый разработчик знает, что если запрос тормозит, то надо просто добавить индекс. Контринтуитивна обратная ситуация - чтобы запрос работал быстрее, надо индекс удалить. Вот именно с таким случаем я и столкнулся на работе.
Попробуем смоделировать ситуацию. У нас есть всего одна таблица, в которой хранится информация по обработанным задачам. Пользователи дёргают ендпоинт, запускается Celery задача, и результат отправляется на email. Ничего сложного, всего несколько столбцов:
id - уникальный ключ task_id - номер задачи user_id - кто запустил started_at - время начала finished_at - время окончания О хранении исторической информации в реляционной БД Вообще, хранить в Postgres данные, которые не меняются - не самая хорошая практика.
Я думаю, все понимают пользу стайлгайдов и оду линтерам не писал только ленивый, так что я собираюсь покинуть их число. За последние 10 лет правила форматирования кода появились у всех языков (а для некоторых даже несколько!). Причина понятна - единообразно написанный код проще читать. Глаз не цепляется за пропущенный пробел или скобку не на той строке. В Go это даже возведено в абсолют - вы не можете форматировать свою программу по-другому.
На днях меня попросили посмотреть один странный баг, связанный с запуском приложения. Вот так $ 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 команды различаются.