Alinsky.tech
129 subscribers
86 photos
23 videos
21 links
Personal blog of a random Engineer
GitHub: github.com/SKY-ALIN
Website: Alinsky.tech
Me: @sky_alin
Download Telegram
Типизация опциональности в питоне.

Этот спор древен примерно также как и вопрос: -табы или пробелы? Однажды из-за этого я умудрился даже с коллегами поругаться, поэтому давайте разберёмся из-за чего бывают конфликты у задротов 🤔

Суть в следующем: допустим у нас есть произвольный тип T, но мы хотим задать такой тайпхинт, чтобы иметь возможность оставить переменную с типом Т неопределенной. Как мы это сделаем?

Существует 3 решения:

a: T = None
b: Optional[T] = None
c: Union[T, None] = None


Далее подробнее про каждый из вариантов.

Вариант A:
Самый простой и некоторые линтеры вполне корректно его обработают, подменив на вариант B, но заточенные на типизацию вроде mypy и pyright дадут вам смачного леща, потому что ну а какого хрена вы присвоили неверный тип, а??

Вариант B:
Самый распространенный вариант и куда лучше чем A, но идейно неверный. Представьте следующее выражение:
def f(b: Optional[T]): pass
На уровне логики аргумент b является опциональным, но в то же время, если мы его не передадим в функцию, то программа упадет с ошибкой, т к фактически на уровне кода b является обязательным. Какая-то суперпозиция получается 🤔 Дело в том, что на самом деле понятия опционального аргумента и аргумента, способного принимать None - это совершенно разные и не связанные понятия, которые ошибочно были склеины в классе Optional. В помойку его!

Вариант C:
Фактически это аналог записи вида c: T | None появившейся с версии 3.10, но если вы используете версию младше или пишете обратносовместимый код, то это тот самый вариант, который верен и на уровне логики и на уровне кода. Его я и считаю правильным использовать.

Давайте рассмотрим способы возможного применения последнего варианта в разрезе опциональности. Допустим у нас есть класс пользователя:

class User:
    id: int
    name: Union[str, None]
    last_name: Union[str, None] = None


Из записи атрибутов следует следующая логика:
* id - атрибут типа int, который должен быть обязательно указан.
* name - атрибут, который может быть как str, так и None, но должен быть обязательно указан.
* last_name - атрибут, который может быть как str, так и None, но является опциональным т к он уже имеет дефолтное значение.

Хинт: для того чтоб быстро зарефачить проект с варианта B на вариант C можно воспользоваться утилитой no-optional.

Установка:
pip install no-optional

Рефакторинг одного файла:
no_optional <filename>

А следующей командой можно отредактировать весь проект целиком:
find <project_folder> -iname "*.py" | xargs python -m no_optional

#dev
👍6🔥2❤1
Знаете, у Казахстана просто огромный потенциал. Казахстан - страна будущего. Да и вообще, быть может я в душе казах? Короче, я уезжаю жить в Казахстан!
🤩6👍5🤔1
Все мои коллеги: Стараются быть максимально серьезными и профессиональными.

Я: Высокопоставленные аниме ножки живущие в землянке под мухомором.
🤣3
Вот бы подготовил меня кто в детстве к тому, что выгорать я буду вовсе не от кучи работы или сложных проектов, а от ебучих новостей. Извините, господа, что редко пишу. Однажды, как у меня станет меньше головной боли, то я буду писать интересные вещи порегулярнее ❤️
❤20👍1🙏1
Чат гпт - это просто что то невероятное.

Те кто юзали ее для достижения конкретных задач, а не в виде эксперимента, расскажите в комментариях как вам удалось применить ее на практике
Причина по которой нужно проверять произношение в других языках :)
😁4🤣3
В Казахстане с 27 января ужесточают миграционную политику.

Раньше сюда можно было приехать на 90 дней, и по истечению этого срока уехать, и снова сразу же въехать вновь на 90 дней, и так сколько угодно. Так называемый визаран.

Теперь же в Казахстане можно прибывать только 90 дней раз в 180 дней, что делает его неподходящим вариантом для долговременного прибывания, но лишь на первый взгляд.

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

В Казахстане есть так называемое РВП - разрешение на временное проживание. Этот документ не так крут как ВНЖ, но его невероятно просто и быстро можно получить. Самое главное что даёт РВП - это возможность прибывать в Казахстане в течении года + возможность продлевать его бесчисленное количество раз. Проще всего его получить устроившись на работу фиктивно. Для этого есть 2 варианта:

1. Открыть ИП и оформить самого себя как сотрудника в этом ИП.

2. Устроиться в чужую компанию существующую только на бумаге.

Для того чтобы это провернуть вам не нужно знать юридические особенности и париться с документами, тут очень распространена услуга оформления всего этого под ключ, стоит лишь немного погуглить;)

Средняя цена вопроса по схеме 1 - примерно 150к тенге (22к рублей).
Средняя цена вопроса по схеме 2 - примерно 250к тенге (37к рублей).

Просто введите в гугле "Купить РВП в Казахстане" и изучите несколько первых ссылок.

Также стоит сказать, что если у вас нет удаленной работы и вы бы действительно хотели тут работать face-to-face, то вам поможет получить такой документ ваш работодатель.

Поделитесь этой информацией с вашими знакомыми, которые уехали в Казахстан и не знают что им сейчас делать 🙏🏻 #relocation
🕊5❤1
Недавно наткнулся на годный набор видео с прикольными визуализациями о хороших практиках в программировании, которые часто игнорируют даже опытные разрабы. Видео на английском, но если вдруг что, то там есть субтитры. Вот этот набор:

* Правильное использование абстракций

* Минусы наследования

* Вложенность - жопа

* Хороший нейминг

* Комменты - в мусор

Вообще все эти видео с одного канала и я надеюсь парниша не забросит его. #dev
👍5❤2🔥1
[1/4] Долгожданный (в любом случае лично для меня) пост про фреймворк Regta. Вчера я опубликовал финализирующий релиз этой технологии и это её обзор.

Regta - это программный планировщик задач, оптимизированый специально для Python и спроектированный непосредственно для использования в продакшене. Кстати, во многом благодаря нему топ постов в меню в закрепе регулярно обновляется. Давайте начнем с бенефитов, которые он дает.

1. Поддержка асинхронности, многопоточности и многопроцессности. Это позволяет более эффективно использовать ресурсы сервера. В случае, например, с такими планировщиками как Cron, сервер очень быстро просядет в связи с тем, что Cron запускает каждую задачу в отдельном дорогостоящем процессе, в то время как Regta дает возможность запустить легковесную корутину или поток под задачу.

2. Regta учитывает время, затраченное на выполнение задач и потерянное при перезагрузке сервера без внешних систем и хранения кеша, что позволяет всегда иметь миллисекундную точность при выполнении задач. Если задача должна быть выполнена в 21:00 по Москве, значит она будет выполнена ровно в 21:00 по Москве что бы не произошло. Ну, если не отрубить питание, конечно, но вот перебои обработает корректно.

3. Секси ANSI подсветка. Если у современной консольной утилиты нет читабельной подсветки логов, то она не может считаться современной 🏳️‍🌈 

На этом пока остановлюсь чтоб не сильно затягивать пост. Про остальные бенефиты вроде локализации, логирования и мультипарадигменности можно прочитать в доке regta.alinsky.tech #tech
🎉4❤3
Alinsky.tech
Забавная особенность - в этот модуль я заложил 2 способа инициализации: хипстерский и олдскульный. Какой вам нравится больше?:) #tech
[2/4] Далее кратко на практике. Давайте напишем максимально простую задачу, которая будет просто писать в лог сообщение раз в 3 минуты. Пример кода для этого можно посмотреть на картинке. Достаточно всего-то импортировать декоратор async_job и указать интервал в формате Period, о котором я уже писал в отдельном посте, или просто в timedelta #tech
👏2👍1
[3/4] Для запуска же достаточно просто ввести команду regta run #tech
🤩2👍1
[4/4] А вот сравнение возможностей Regta с популярными альтернативами. По почти всем показателям она выигрывает среди аналогов. Полную статью со сравнением можно прочитать по ссылке regta.alinsky.tech/alternatives

Резюмируя сравнение, если перед вами стоит задача регулярного выполнения задач на Python в целях внутренней автоматизации, то Regta будет для вас наилучшим вариантом. Если же вам нужно выполнять миллионы задач с динамическим расписанием, например, рассылать отложенные сообщения как в телеге, то используйте для этого Celery, во всех же остальных случаях можно смело дрочить на Regta. #tech

Звездочки можно ставить туда github.com/SKY-ALIN/regta ⭐ 🙃
🤩6🔥1🤔1🫡1
Наконец-то я нашел аниме-персонажа с которым я могу себя ассоциировать на все 100%

Лучшее аниме 2022 на мой взгляд. Лично мне зашло даже больше киберпанка (づ ᴗ _ᴗ)づ♡
🤩5👍3❤1🙏1
Сорян что не писал, меня санитары только сейчас начали иногда развязывать.

За последние 2.5 года я объездил пол мира, получил новое гражданство, сменил имя и фамилию, прошел путь до руководителя разработки, открыл еще один бизнес и успешно его развалил, несколько раз становился миллионером и столько же раз терял все в 0 и был в долгах, меня искали менты за дискредитацию и вообще я в лужу падал. Много всего произошло о чем я еще долго не смогу рассказать и мне нужно было многое переосмыслить, включая этот канал. Я его создал в конце 2021 под давлением друзей которые хотели чтобы я делился своими «знаниями» и «учил», но на самом деле это совсем не то что мне тогда было нужно. Однако, я подумываю сюда вернуться, но в основном вместо всяких гайдов, обзоров стран и новостей из моей жизни вы тут увидите тупые мемчики, а у меня за это время скопилась целая коллекция!! Ну и конечно, никаких гарантий, что через какое то время я не возьму новый перерыв от социума^

За это время канал похудел более чем в 2 раза, но часть осталась! Скорее всего просто потому что он скатился глубоко вниз в чатах и об этом месте все забыли, но все же! Всех цмок в пупок ^-^
377641
Я ни за чьи отношения так не переживал, как за этих двоих. Кенье вообще ребёнок в разводе 😭
1622🗿1111
-Нет паранойи из-за того что камера не заклеена?
-Бро, это линукс, камера не работает
163221
Ну, понеслась. У нас началась еще одна война… 🇮🇱
Please open Telegram to view this post
VIEW IN TELEGRAM
1853🗿1