Получи случайную криптовалюту за регистрацию!

DevFM

Логотип телеграм канала @devfm — DevFM D
Логотип телеграм канала @devfm — DevFM
Адрес канала: @devfm
Категории: Технологии
Язык: Русский
Количество подписчиков: 1.97K
Описание канала:

Канал от Python-разработчиков:
— востребованные инструменты
— system design
— softskills
— лучшие практики разработки
— подготовка к собеседованиям
Увеличим твою ценность на рынке IT
Для связи @sa_bul

Рейтинги и Отзывы

3.50

2 отзыва

Оценить канал devfm и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

0

3 звезд

0

2 звезд

1

1 звезд

0


Последние сообщения 2

2022-09-28 10:00:23 Миграция БД без даунтайма

Во время разработки несложно вносить изменения в базу данных — достаточно создать и применить миграции. В приложении с живыми пользователя так просто это не сделать.

При последовательном обновлении базы и приложения легко оказаться в рассинхронизированном состоянии, например, с обновлённой базой и старой версией приложения. Старая версия приложения не умеет работать с обновлённой базой, в результате будут сбои до тех пор, пока новая версия приложения не заменит старую.

В статье Migrating a production database without any downtime (перевод) рассказывается на примерах и с картинками, как пошагово решать проблему обратной совместимости базы данных и приложения.

#skills
605 views07:00
Открыть/Комментировать
2022-09-27 10:01:46 История поиска работы "Борис опять"

Недавно вышла интересная серия постов о поиске работы machine learning-инженером. Пожалуй, самое ценное в ней — личный опыт и нешаблонные советы автора. История ещё не закончена, автор продолжает рассказывать о своём опыте переезда и искренне делится эмоциями.

Наши мысли по мотивам этой серии статей:
1. Всегда стоит критически подходить к таким постам. Это как книги об историях успеха — что сработало для одних, не сработает для других. Особенно аспекты, связанные с нанимающей стороной — компании разные и ситуации тоже бывают разные.

2. "Нельзя врать", — говорит автор. Врать действительно нельзя, но приукрасить можно. Грань между "приукрасить" и "врать" заслуживает отдельного поста.

3. Интересно увидеть реальное CV автора. Не будем вдаваться в нюансы составления CV, но хорошей практикой считается summary часть. В ней следует тезисно рассказать кто вы, что умеете и что хотите. Автор сетует на блок CV с перечислением технологий, которыми владеешь. И что он — инженер, готовый овладеть всеми необходимыми для решения задачи навыками. Как раз об этом и стоило бы сказать в summary. Способность осваивать новое для решения задач — скилл хорошего разработчика. А блок технологий полезен для HR, которые умеют только grep-ать резюме.

4. По этой серии постов молодой разработчик сможет приземлиться, понять, что IT это не радужное место с гарантированными 300кк/с. Найти хорошо оплачиваемую работу — это труд и дисциплина.

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

6. Переговоры — важная часть собеседований. "Уметь говорить нет" выглядит простым и понятным советом, который на деле применять совсем не просто. Хорошо работает приём, будто решение принимаете не вы, и нужно обязательно посоветоваться с третьей стороной, от которой зависит финальное решение.
#edu
1.5K views07:01
Открыть/Комментировать
2022-09-26 23:30:21 Хитрости __getattr__
В примере выше мы создаём класс Users, который, по сути, скрывает внутри обычный список пользователей.

Для получения первого и последнего пользователя потребуется писать self.users[0] и self.users[-1]. Такие конструкции раскрывают внутреннее устройство класса, загрязняют код и делают его менее читабельным. Мы заставляем внешнего потребителя класса разбираться в его внутреннем устройстве.

Один из вариантов решения — декоратор @property и создание нужных атрибутов. Но для большого количества атрибутов будет спагетти из однотипных property.

Другой приём — использование динамических атрибутов. Создаём словарь, где ключом будет имя, а значением индекс в списке пользователей. Метод getattr проверяет наличие искомого атрибута среди ключей словаря, если такой есть — то возвращает пользователя по индексу из словаря.

Детали решения
Почему первый print выведет U1?
Вся суть в том, как python ищет атрибуты. Атрибут ищется в классе. В нашем случае атрибута first нет. Далее производится поиск по иерархии наследования, и тоже безуспешно. Только в этом случае вызывается магический метод __getattr__, и параметром ему передаётся имя аргумента в виде строки "first". По словарю first превратится в нулевой индекс из self.users, что соответствует выводу U1.

Почему второй print выведет new_user?
В 17 строке явно создаем атрибут first и присваиваем ему значение new_user. В 18 строке в классе будет найден атрибут first и метод getattr не будет вызываться.

Обратите внимание ещё на одну интересность. Вывод self.users.users[0] всё ещё даст U1. Получается некая несогласованность. Мы переопределили first, и это уже не первый пользователь.

Поставьте , если интересно возможное решение такой проблемы.
713 views20:30
Открыть/Комментировать
2022-09-26 10:01:33
Что выведет второй print в 18 строке?
Anonymous Quiz
23%
Ошибка присвоения в 17 строке
13%
Исключение AttributeError
11%
U1
3%
["U1","U2", "U3"]
1%
0
49%
new_user
123 voters719 views07:01
Открыть/Комментировать
2022-09-26 10:01:28
Что выведет первый print в 16 строке?
Anonymous Quiz
17%
Исключение AttributeError
47%
U1
10%
["U1","U2", "U3"]
14%
0
14%
Исключение NameError
133 voters723 views07:01
Открыть/Комментировать
2022-09-26 10:01:07
#codereview #quiz
720 views07:01
Открыть/Комментировать
2022-09-25 14:00:54 Магия CORS

При разработке веб-приложения в консоли браузера можно увидеть не очень информативную ошибку:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at ..

В результате беглого гугления глаза разбегаются от количества разных объяснений и костылей для фикса. И часто решение сводится к "забил и поставил хедер Access-Control-Allow-Origin: *".

К сожалению, нельзя дать простое и быстрое решение этой проблемы. Мы рекомендуем статью Deep dive in CORS (перевод), где подробно, с картинками излагается история и причины возникновения CORS, где и как они применяются, и почему решение выше — плохое. В конце статьи приводятся практические советы по настройке CORS.
#procode
815 views11:00
Открыть/Комментировать
2022-09-24 16:56:05 Channel photo updated
13:56
Открыть/Комментировать
2022-09-24 16:56:04 Channel name was changed to «DevFM»
13:56
Открыть/Комментировать
2022-09-24 14:01:47
Sublime Merge — графический git-клиент

Как мы писали раньше, 85% разработчиков работают с git из консоли.

Но для сложного merge c конфликтами рекомендуем использовать sublime merge. На видео демонстрируем, как sublime merge представляет состояние разных веток и позволяет в один клик выбирать нужный код для слияния.

Также sublime merge может быть полезен тем, кто только начинает осваивать git. Он дает наглядное представление об устройстве репозитория и взаимосвязях между ветками.
#procode
773 views11:01
Открыть/Комментировать