Pull to refresh
15
0
Alexander Tsygankov @AlexanderZug

User

Send message

Шпаргалка по команде Pytest

Level of difficultyEasy
Reading time3 min
Views1.9K

Будет полезно для новичков и не только - чтобы основные опции были под рукой.

Начну с базы. Все команды этого фреймворка начинаются со слова pytest .

Остальное тут:

Читать далее
Total votes 10: ↑6 and ↓4+5
Comments1

Программирование — это вообще не просто!⠀

Reading time19 min
Views43K


Привет, Хабр!


Идея статьи появилась, когда я начал повсюду замечать якобы подтверждения мифа, что «программирование — это просто»‬‬.


В новостях «восьмилетняя девочка, которая второй раз в жизни занимается программированием, наклепала чат-бота за 45 минут»‬ (ага, да!).


Курсы предлагают мне за 10 месяцев с нуля стать миддл+ (ага, да!).


Но я-то знаю, как оно на самом деле. Мы, программисты, обычно решаем проблемы и двигаемся дальше, но я решил запротоколировать всё как есть, и в течение пары месяцев скрупулёзно записывал всю ту хрень, что происходила со мной и моими коллегами, чтобы показать программирование без прикрас. Поехали!


Читать дальше →
Total votes 205: ↑195 and ↓10+221
Comments111

Работа программистом в Германии: как пережить испытательный срок

Reading time8 min
Views29K

Живу в Германии, работаю программистом в местной компании и хочу рассказать об одном из самых сложных и напряженных - по крайней мере, субъективно, - этапов работы - испытательном сроке (нем. Probezeit), о его особенностях, как формальных, так и неформальных и об отличие от российских реалий, с которыми мне довелось сталкиваться. Одним словом, если вы еще никогда не проходили испытательный срок на позиции разработчика junior'a, будь-то в Германии, России или какой либо другой стране, то этот текст точно для вас; ну а если же вы уже "тертый калач" и общее время пройденных вами испытательных сроков немногим короче, чем хвост у кометы Галлея, но вы никогда не взаимодействовали с немецкими фирмами, то и для вас этот небольшой экскурс в инокультурную корпоративную среду, надеюсь, также будет любопытен. Итак, погнали!

Читать далее
Total votes 57: ↑50 and ↓7+54
Comments91

Молниеносный инкрементальный линтинг Python-кода

Level of difficultyMedium
Reading time11 min
Views7.3K

Линтинг кода бывает очень долгим, а в ситуациях наличия большого legacy‑проекта, который решили «причесать», линтинг может причинять боль и страдания разработчикам. В этой статье мы найдем решение, которое позволит без проблем линтить код с любого этапа разработки и делать это супер быстро и инкрементально!

Читать далее
Total votes 2: ↑1 and ↓10
Comments2

Оптимизация запросов к БД на django

Level of difficultyEasy
Reading time3 min
Views5.3K

Стоит ли использовать django в 2024? Я думаю — да. DRF очень удобен, скорость разработки очень высока (особенно, если использовать generic views, django‑filters), огромное количество готовых батареек сильно облегчает жизнь и встроенная админка хорошо подходит для большинства сайтов. Полностью асинхронные фреймворки (или переход на другой язык) не дадут большого выиграша, если ваш сервис много работает в БД — вы упретесь в её производительность и ограничения количества соединений с пулом бд. Далее я вкратце пробегусь по основным моментам и дам ссылки на документацию и готовые батарейки.

Читать далее
Total votes 10: ↑9 and ↓1+10
Comments12

Как вкусно приготовить «Сельдерей» (Celery)

Level of difficultyHard
Reading time8 min
Views4.6K

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

Читать далее
Total votes 13: ↑12 and ↓1+14
Comments2

MinIo и Boto3: маленький гайд по созданию скрипта для объектного хранилища на python

Level of difficultyEasy
Reading time5 min
Views3.7K

MinIo, как система объектного хранилища данных, заслуженно пользуется любовью разработчиков: инструмент приятный и, довольно, простой в использовании и освоении. Вот и для одного из наших крупных проектов на работе недавно возникла потребность в использовании S3 хранилища, мы, однако, по корпоративным соображениям выбрали для применения в продакшене другой инструмент, а именно - IONOS (компания у нас немецкая и на ионосе много еще чего завязано), но для тестов и для локального запуска скриптов ничего лучше MinIo в голову нам не пришло. Подобное сочетание при этом вызвало необходимость в использовании такой Python библиотеки, которая могла бы работать и "на наших, и на ваших", а в нашем случае и на MinIo, и на IONOS (поменял параметры в конфиге и тот же самый код, что работал локально, начинает работать и с продакшеном) и этой библиотекой стал Boto3 (стандартный пакет minio для этих целей не подходил). Именно об этой констелляции - Python, MinIo и Boto3 - дальше мне и хотелось бы рассказать, ну а если вместо MinIo вы захотите использовать что-то другое, то "поменял параметры в конфиге и тот же самый код, что работал локально, начинает работать и с продакшеном".

Читать далее
Total votes 7: ↑6 and ↓1+7
Comments3

Тестируем внешнее django-приложение при помощи pytest

Level of difficultyMedium
Reading time2 min
Views2.3K

Я не буду спрашивать, как вы попали в такую ситуацию. Я в неё как-то попала, значит, и вы тоже могли. Я просто расскажу, как из неё выбраться.

Итак, у вас есть джанго-приложение, апишка к нему, и вы хотите написать автотесты на пайтест, находясь вне этого джанго-приложения. Погнали.

Читать далее
Total votes 3: ↑2 and ↓1+3
Comments1

Как я стал разработчиком в Германии и чего мне это стоило (спойлер: ничего). Часть I

Level of difficultyEasy
Reading time7 min
Views7.4K

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

Читать далее
Total votes 15: ↑9 and ↓6+6
Comments17

Как я стал разработчиком в Германии и чего мне это стоило (спойлер: ничего). Часть II

Level of difficultyEasy
Reading time6 min
Views10K

Отдельно поговорим о немецком собеседовании на позицию разработчика. Здесь есть ряд особенностей, которые зачастую не встречаются на российских просторах, хотя общий формат подобных собеседований как у нас, так и в Германии весьма схож. Если вы не прочитали первую часть статьи, то категорически рекомендую начать именно с нее, там вы узнаете о том, как в принципе сделать так, чтобы попасть на первое собеседование, ну а тут попытаемся разобраться с тем, что вас ждет, если вы все-таки попали...

Читать далее
Total votes 17: ↑9 and ↓8+6
Comments17

Окей, Джанго, у меня к тебе несколько вопросов

Reading time36 min
Views57K

Недавно я проходил очередное интервью, и меня спросили, пишу ли я на flask, на что я ответил, что я себя люблю, и поэтому пишу на django. Меня не взяли, потому что, кхм, у них, оказывается, много чего было на фласке, и вышло неловко. Да-да, я знаю, фласк крут, потому что он простой, всё что надо ставишь сам, а чего не надо там и так нет, но как по мне, всё равно потом получается django.

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

Читать далее
Total votes 78: ↑74 and ↓4+85
Comments23

Django REST. Реализация функционала добавления в «избранное» с возможностью расширения типов добавляемого контента

Level of difficultyEasy
Reading time5 min
Views7.5K

Допустим у нас есть зарегистрированные пользователи и какая-то модель, например "Компании", которую пользователь может добавлять в избранное. Обычно такая задача решается путем создания третьей таблицы Favorite, являющейся связующим звеном, для реализации ManyToManyField связи между пользователем и компанией

Читать далее
Total votes 4: ↑4 and ↓0+4
Comments1

PyCharm Docker Django Debug

Level of difficultyEasy
Reading time2 min
Views9.5K

Эта статья посвящена настройке IDE для возможности запуска и отладки Django сервера. Статья нацелена на людей которые столкнулись с подобной проблемой и хотелось бы поделиться опытом, так как сам прошёл эти этапы.

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments3

Python Дайджест: как сделать CI для OpenSource проекта с Github Actions

Level of difficultyMedium
Reading time5 min
Views2.4K

Экватор рассказа про техническое оживление Python Дайджест проекта. Ранее рассказал как перейти с Python 3.4 на Python 3.11 и автоматически актуализировать весь код. В этой части расскажу про организацию CI для Open Source проекта на основе Github Actions — как гонять тесты, проверять код, зависимости, разворачивать приложение и делать бэкапы на внешнее хранилище.


Читать дальше →
Total votes 5: ↑5 and ↓0+5
Comments0

Современный Python: как начать свой проект с нуля при помощи Pyenv и Poetry

Reading time7 min
Views59K

Рассказываем, как начинающему разработчику установить и управлять различными версиями Python с помощью Pyenv, подготовить свой проект и создать виртуальное окружение через Poetry.

Читать далее
Total votes 15: ↑11 and ↓4+8
Comments16

Выгрузка отфильтрованных пользователем данных из таблицы в админке Django

Reading time4 min
Views3.4K

Генерал Венделер обладал редким даром излагать свои решения в краткой, ясной и доходчивой форме. (С) х/ф "Приключения принца Флоризеля."

Коллега обратился с запросом.

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

Сайт сделан на админке Django. Будем реализовывать это лапидарное ТЗ от коллеги.

Поехали
Total votes 2: ↑2 and ↓0+2
Comments6

KISS — принцип проектирования, содержащий все остальные принципы проектирования

Reading time12 min
Views95K
Постараюсь объяснить сущность принципа проектирования KISS просто и одновременно очень подробно. KISS – это очень общий и абстрактный принцип проектирования, который содержит в себе практически все остальные принципы проектирования. Принципы проектирования описывают как писать «хороший» код. Однако что значит хороший код? Некоторые считают, что это код, который выполняется максимально быстро, некоторые – что это код, в котором задействовано как можно больше паттернов проектирования… Но верный ответ лежит на поверхности. Код – это информация в чистом виде. А основные критерии ценности информации – это 1)достоверность 2)доступность 3)понятность. То, почему важны достоверностью и доступность – очевидно. От кода нет проку, если он работает с ошибками или если сервер с приложением «лежит». Почему же важна понятность кода? В понятном коде проще искать ошибки, проще его изменять, дорабатывать и сопровождать. Итак, понятность – основная ценность, к которой должен стремиться программист. Однако тут есть одна неувязочка. Дело в том, что понятность – вещь сугубо субъективная.
Читать дальше →
Total votes 22: ↑9 and ↓13-4
Comments84

Генераторы для самых маленьких

Reading time13 min
Views60K

Всем привет! В бытность мою, когда я самостоятельно изучал Python, я находил достаточно теоретического материала о языке и его возможностях. Однако даже после прочтения нескольких статей на разных сайтах и книг многое не укладывались у меня в голове (да, вот такой вот я тугой). Непонятные концепции приходилось зубрить «на веру» без глубокого понимания, потому что практические примеры в статьях были для меня сложны. Время шло, я становился опытнее, понимание приходило на практических задачах, и в какой-то момент я стал учить Python'у своих друзей. В рамках наставничества я обнаружил, что, кажется, наметил путь, по которому можно объяснять сложные концепции простыми словами.

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

Сегодня хочется ещё раз поговорить о генераторах. Итак, в бой!

Читать далее
Total votes 26: ↑24 and ↓2+22
Comments15

Как работает yield

Reading time6 min
Views694K
На StackOverflow часто задают вопросы, подробно освещённые в документации. Ценность их в том, что на некоторые из них кто-нибудь даёт ответ, обладающий гораздо большей степенью ясности и наглядности, чем может себе позволить документация. Этот — один из них.

Вот исходный вопрос:
Как используется ключевое слово yield в Python? Что оно делает?

Например, я пытаюсь понять этот код (**):
def _get_child_candidates(self, distance, min_dist, max_dist):
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild

Вызывается он так:
result, candidates = list(), [self]
while candidates:
    node = candidates.pop()
    distance = node._get_dist(obj)
    if distance <= max_dist and distance >= min_dist:
        result.extend(node._values)
        candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
        return result


Что происходит при вызове метода _get_child_candidates? Возвращается список, какой-то элемент? Вызывается ли он снова? Когда последующие вызовы прекращаются?

** Код принадлежит Jochen Schulz (jrschulz), который написал отличную Python-библиотеку для метрических пространств. Вот ссылка на исходники: http://well-adjusted.de/~jrschulz/mspace/

Подробный и обстоятельный ответ
Total votes 141: ↑136 and ↓5+131
Comments41
1

Information

Rating
5,258-th
Location
Titisee-Neustadt, Baden-Württemberg, Германия
Date of birth
Registered
Activity

Specialization

Backend Developer, Fullstack Developer
Middle
Git
Python
Linux
PostgreSQL
Docker
OOP
Django
Flask
REST
RabbitMQ