Как стать автором
Обновить
5
0
Евгений Суханов @suhanoves

Пользователь

Отправить сообщение

Как правильно внести свою лепту в Open Source проект: простые подсказки

Время на прочтение6 мин
Количество просмотров69K
Open Source проекты с каждым днём набирают всё большие обороты, появляются новые, активно развиваются популярные.
Такие проекты как Bootstrap, Angular.js, Elasticsearch, Symfony Framework, Swift и многие другие привлекают новых разработчиков, их сообщество растёт. Всё это даёт огромный рост проектам, а самим разработчикам интересно поучаствовать в разработке чего-то, чем пользуется весь мир.

Я, как и многие другие программисты, не устоял и также время от времени участвую в разработке Open Source проектов, в основном на PHP. Но когда я начинал, я столкнулся с проблемой — я не знал, как правильно организовать процесс «контрибьютинга», с чего начать, как сделать так, чтобы мой Pull Request рассмотрели и т.д.

Всем начинающим «контрибьютерам», которые столкнулись с похожим проблемами, добро пожаловать под кат.


Читать дальше →
Всего голосов 80: ↑69 и ↓11+58
Комментарии41

Размещение веб-приложения на Amazon Web Services. Дёшево. Возможно ли это?

Время на прочтение3 мин
Количество просмотров34K

Наверняка все слышали про Amazon Web Services (AWS). А некоторые даже заглянули на страницу Pricing. И заметили, что цены там заметно выше, чем на DigitalOcean, Linode, Hetzner Cloud и др. Вот таблица для сравнения цен:


Тип RAM CPUs Диск Трафик Цена
DigitalOcean - 4 GB 2 vCPUs 80 GB 4 TB $20
Linode Linode 4GB 4 GB 2 vCPUs 80 GB 4 TB $20
AWS t2.medium 4 GB 2 vCPUs - - $40

Amazon берёт деньги за трафик, причём цены тоже не низкие:



Так для чего же тогда выбирать Amazon? Вот какие причины вижу я:


  1. Большое количество полезных сервисов.
  2. Free Tier.

О втором и пойдет речь в этой статье.

Читать дальше →
Всего голосов 34: ↑30 и ↓4+26
Комментарии58

Продолжаем ковырять Тинькофф API. Рассчитываем эффективность инвестиций

Время на прочтение12 мин
Количество просмотров22K

Продолжение публикации: "Что недоговаривают Тинькофф Инвестиции. Вытаскиваем все данные по портфелю через API в большую таблицу Excel".

В этот раз поговорим о совершённых доработках, всплывших подводных камнях, исправленных ошибках, участии сообщества, подсчитаем XIRR и попробуем сравнить доходность портфеля за 3 года с другими видами инвестиций.

Пост длинный, но много картинок
Всего голосов 24: ↑24 и ↓0+24
Комментарии33

Разбираемся с ChainMap из коллекций Python

Время на прочтение19 мин
Количество просмотров14K

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

В обоих случаях можно воспользоваться ChainMap из модуля коллекций. ChainMap группирует словари и отображает их в единое, обновляемое представление с поведением, подобным поведению словаря, а также представляет возможности для эффективного управления различными словарями, определения их ключей, свойств и не только. К старту курса о Fullstack-разработке на Python делимся статьёй о ChainMap, где вы найдёте ссылку на истоки появления класса — баг в Python и, конечно, примеры его применения на практике и в стандартной библиотеке Python.

Читать далее
Всего голосов 12: ↑11 и ↓1+12
Комментарии2

Всё о работе с cookie в Python — класс http.cookies

Время на прочтение4 мин
Количество просмотров17K


Модуль http.cookies реализует парсер для cookie, по большей части совместимый с RFC 2109 — документом со стандартами работы с cookie и смежными вещами.

Читать дальше →
Всего голосов 5: ↑4 и ↓1+3
Комментарии2

Гайд по использованию enum в Python

Время на прочтение6 мин
Количество просмотров119K


Модуль enum содержит в себе тип для перечисления значений с возможностью итерирования и сравнения. Его можно использовать для создания понятных обозначений вместо использования чисел (для которых приходится помнить, какое число что обозначает) или строк (в которых легко опечататься и не заметить).

Читать дальше →
Всего голосов 9: ↑8 и ↓1+7
Комментарии4

Marshmallow vs. Pydantic: две лучшие библиотеки для сериализации и валидации данных на Python

Время на прочтение10 мин
Количество просмотров40K

Сериализация и десериализация данных — это преобразование между необработанной структурой данных и экземплярами классов для их хранения и передачи. Например, преобразование объектов Python в JSON-представление. Мы рассмотрим две популярные Python-библиотеки Marshmallow и Pydantic, которые помогут нам справиться как с преобразованием, так и с валидацией данных. Сначала я представлю вам каждую библиотеку, используя небольшие примеры, а потом мы сравним их и разберем различия. Я также расскажу, чего вам стоит избегать при работе с обеими библиотеками.

Читать далее
Всего голосов 33: ↑33 и ↓0+33
Комментарии3

Кратко: запросы к API и разбор XML-ответов. Python

Время на прочтение8 мин
Количество просмотров30K

Этот пост предназначен в первую очередь для новичков в разработке, впервые столкнувшихся с необходимостью отправить post/get запросы к какому-нибудь API и проанализировать полученный в XML ответ. Постаралась собрать необходимы минимум в одном месте.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии7

13 проектов для Python-программистов уровня intermediate

Время на прочтение10 мин
Количество просмотров76K
Изучение основ Python — прекрасный опыт. Но эйфория от изучения языка постепенно заменяется желанием создать что-то своими руками. И это нормально, но нужны идеи.

Проблема здесь в том, что некоторые проекты либо слишком просты, либо слишком сложны для разработчика среднего уровня. Эта статья — помощь программисту уровня intermediate. Она предоставляет несколько идей проектов, которые могут стать интересным вызовом для вас. Материал адаптирован на русский язык совместно с Алексеем Некрасовым, лидером направления Python в МТС, программным директором направления Python в Skillbox.
Читать дальше →
Всего голосов 11: ↑6 и ↓5+6
Комментарии0

Храним SSH-ключи безопасно

Время на прочтение2 мин
Количество просмотров34K


Хочу рассказать как безопасно хранить SSH-ключи на локальной машине, не боясь того, что какое-то приложение может украсть или расшифровать их.


Статья будет полезна тем, кто так и не нашел элегантного решения после паранои в 2018 и продолжает хранить ключи в $HOME/.ssh.


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


Это дает возможность безопасно хранить все ключи прямо в базе паролей и автоматически добавлять их в систему при её открытии. Как только база будет закрыта, использование SSH-ключей также станет невозможным.

Читать дальше →
Всего голосов 26: ↑22 и ↓4+18
Комментарии28

Django Rest Framework для начинающих: создаём API для записи и обновления данных (часть 1)

Время на прочтение13 мин
Количество просмотров28K
Продолжаем изучать Django Rest Framework с точки зрения новичка. Мы уже разобрали создание REST API для получения данных из БД, включая отдельную статью о работе сериалайзера.

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

image

Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии3

Связный список на Python: Коты в коробках

Время на прочтение3 мин
Количество просмотров108K
И снова здравствуйте! В преддверии старта курса «Разработчик Python» подготовили для вас небольшой авторский материал о связных списках на Python.



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


Читать дальше →
Всего голосов 22: ↑16 и ↓6+10
Комментарии15

Как производятся «Ласточки» — поезда с распределённой архитектурой

Время на прочтение8 мин
Количество просмотров29K


Как вы, возможно, знаете, наши крутейшие «Сапсаны» или Siemens Velaro мы покупали у немцев. Потому что никто в стране такое произвести целиком достаточно качественно просто не мог (ну, в смысле, сопоставимо с экономикой покупки). А вот «Сапсан-3» будет делаться уже на «Уральских локомотивах». Там же сейчас делают «Ласточки» с похожей архитектурой.

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

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


Вот этот узел — как и ещё десятки — стоит на пассажирском вагоне, а в старой архитектуре стоял бы на локомотиве

Сейчас я немного упрощу для понятности аналогии. Дело в том, что в архитектуре электропоездов довольно долго царил некий аналог монолитного подхода, а потом пришёл аналог микросервисов. То есть каждый вагон несёт на себе разные элементы, нужные для поезда, и включает их в общую сеть. Причём в случае «Ласточек» — эти самые сервисы ещё масштабируются горизонтально в зависимости от количества вагонов.

В общем, пойдёмте, покажу поезд, в котором локомотив распределён по всему поезду.
Читать дальше →
Всего голосов 55: ↑53 и ↓2+69
Комментарии46

Django Channels – ответ современному вебу

Время на прочтение13 мин
Количество просмотров49K
В мире Django набирает популярность дополнение Django Channels. Эта библиотека должна принести в Django асинхронное сетевое программирование, которое мы так долго ждали. Артём Малышев на Moscow Python Conf 2017 объяснил, как это делает первая версия библиотеки (сейчас автор уже запилил channels2), зачем она это делает и делает ли вообще.

Прежде всего, дзен Python говорит, что любое решение должно быть единственное. Поэтому в Python всего минимум по три. Сетевых асинхронных фреймворков уже существует большое множество:

  • Twisted;
  • Eventlet;
  • Gevent;
  • Tornado;
  • Asyncio.

Казалось бы, зачем писать еще одну библиотеку и надо ли вообще.


О спикере: Артём Малышев независимый Python разработчик. Занимается разработкой распределённых систем, выступает на конференциях по Python. Артёма можно найти по никнейму PROOFIT404 на Github и в социальных сетях.
Всего голосов 44: ↑41 и ↓3+38
Комментарии35

Немного подробностей про Class Based View, ч.1

Время на прочтение4 мин
Количество просмотров32K
Вступление

Здравствуйте, уважаемые читатели! Для многих джанго-разработчиков не секрет, что с версии 1.3+ вместо используемых ранее generic views нам необходимо начинать использовать class based views. А с 1.4+ версии generic views вообще могут стать deprecated. Информация про class based views (далее CBV) в интернете довольно скупа (а в рунете и подавно). Нет, конечно есть превосходные статьи, в том числе тут на хабре. Одна из статей была опубликована буквально на днях. Но я отношусь к той категории людей, что привыкли все изучать на практике и данный топик написан для таких же людей.
В качестве практического задания мной был выбран классический вариант — создание блога. Для того, чтобы использовать возможности CBV по максимуму мы немного усложним задачу. Пусть это будет не просто блог, а блог, с возможностью публиковать приватные статьи, недоступные неавторизованным пользователям.
Дальнейшие рассуждения подразумевают, что читатель ознакомлен с фреймворком Django и имеет навыки в создании проектов.
Читать дальше →
Всего голосов 22: ↑20 и ↓2+18
Комментарии19

Django ORM для начинающих | Оптимизируем запросы

Время на прочтение8 мин
Количество просмотров86K


Django ORM (Object Relational Mapping) является одной из самых мощных особенностей Django. Это позволяет нам взаимодействовать с базой данных, используя код Python, а не SQL.
Based on schegel.net

Для демонстрации опишу такую модель:

from django.db import models

class Blog(models.Model):
    name = models.CharField(max_length=250)
    url = models.URLField()

    def __str__(self):
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=250)

    def __str__(self):
        return self.name

class Post(models.Model):
    title = models.CharField(max_length=250)
    content = models.TextField()
    published = models.BooleanField(default=True)
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    authors = models.ManyToManyField(Author, related_name="posts")
Читать дальше →
Всего голосов 14: ↑9 и ↓5+8
Комментарии23

Полезности для разработчика на Django

Время на прочтение6 мин
Количество просмотров8.2K

Для написания данной статьи был изучен очень большой пласт материала, разбросанного по всему Интернету, по форумам, чатам, сайтам-блогам, stackoverflow. Я собрал все воедино, так как это пригодится и мне и очень надеюсь, что другие разработчики на Django, также, останутся довольны данным материалом. Если есть что добавить (улучшить) или поправить, пожалуйста, пишите в комментариях или в Диалоги ( личные сообщения ) Хабр.

Мы рассмотрим: "Тестирование handler 404" в окружении разработчика, "Формсеты и динамическое добавление форм", а также "Экспорт данных в PDF с поддержкой кириллицы (русских символов / букв)".

Читать далее
Всего голосов 5: ↑4 и ↓1+5
Комментарии4

Атрибуты и протокол дескриптора в Python

Время на прочтение6 мин
Количество просмотров16K

Рассмотрим такой код:


class Foo:
    def __init__(self):
        self.bar = 'hello!'

foo = Foo()
print(foo.bar)

Сегодня мы разберём ответ на вопрос: «Что именно происходит, когда мы пишем foo.bar




Вы, возможно, уже знаете, что у большинства объектов есть внутренний словарь __dict__, содержащий все их аттрибуты. И что особенно радует, как легко можно изучать такие низкоуровневые детали в Питоне:


>>> foo = Foo()
>>> foo.__dict__
{'bar': 'hello!'}

Давайте начнём с попытки сформулировать такую (неполную) гипотезу:


foo.bar эквивалентно foo.__dict__['bar'] .


Пока звучит похоже на правду:


>>> foo = Foo()
>>> foo.__dict__['bar']
'hello!'

Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии2

Руководство по магическим методам в Питоне

Время на прочтение28 мин
Количество просмотров603K
Это перевод 1.17 версии руководства от Rafe Kettler.


Содержание


  1. Вступление
  2. Конструирование и инициализация
  3. Переопределение операторов на произвольных классах
  4. Представление своих классов
  5. Контроль доступа к атрибутам
  6. Создание произвольных последовательностей
  7. Отражение
  8. Вызываемые объекты
  9. Менеджеры контекста
  10. Абстрактные базовые классы
  11. Построение дескрипторов
  12. Копирование
  13. Использование модуля pickle на своих объектах
  14. Заключение
  15. Приложение 1: Как вызывать магические методы
  16. Приложение 2: Изменения в Питоне 3


Вступление


Что такое магические методы? Они всё в объектно-ориентированном Питоне. Это специальные методы, с помощью которых вы можете добавить в ваши классы «магию». Они всегда обрамлены двумя нижними подчеркиваниями (например, __init__ или __lt__). Ещё, они не так хорошо документированны, как хотелось бы. Все магические методы описаны в документации, но весьма беспорядочно и почти безо всякой организации. Поэтому, чтобы исправить то, что я воспринимаю как недостаток документации Питона, я собираюсь предоставить больше информации о магических методах, написанной на понятном языке и обильно снабжённой примерами. Надеюсь, это руководство вам понравится. Используйте его как обучающий материал, памятку или полное описание. Я просто постарался как можно понятнее описать магические методы.
Читать дальше
Всего голосов 143: ↑139 и ↓4+135
Комментарии59

Порядок разрешения методов в Python

Время на прочтение15 мин
Количество просмотров180K
В этой заметке рассматривается алгоритм MRO С3 и некоторые специфические проблемы множественного наследования. Хотя и алгоритм и проблемы не ограничиваются рамками одного языка, я акцентировал своё внимание на Питоне. В конце приведён список полезных ссылок по данной теме.
Читать дальше →
Всего голосов 63: ↑62 и ↓1+61
Комментарии12

Информация

В рейтинге
Не участвует
Откуда
Ростов-на-Дону, Ростовская обл., Россия
Дата рождения
Зарегистрирован
Активность