Мои контакты


понедельник, 27 мая 2019 г.

Что внутри asyncio

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

понедельник, 29 апреля 2019 г.

Как новичку устроиться на работу в сфере IT?

В Antida software мы стремимся создать условия для развития сотрудников в рамках компании. А ещё мы помогаем тем, кто только начинает карьеру.

В 2018 году для этого мы сделали первый шаг: провели Antida Frontend School. Через год вместе с Международным Институтом Дизайна и Сервиса мы запустили проект по подготовке разработчиков с нуля — курс по программированию на Python.

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

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

четверг, 14 февраля 2019 г.

Организация асинхронной работы с РСУБД на языке Python

Нет времени ждать! Нет времени ждать блокирующие I/O операции, поэтому практически каждый backend-разработчик рано или поздно задумывается об использовании асинхронного веб-фреймворка.

На данный момент у Python-разработчика существует достаточно большой выбор фреймворков с различными реализациями event loop’а: от Twisted, больше похожего на сетевую библиотеку, до http клиента и сервера для asyncio aiohttp (>6500 звезд на GitHub), Flask-like фреймворка sanic (>11000 звезд на GitHub) и http клиента и сервера Tornado (>17000 звезд на GitHub).

Редкий веб-сервер обходится без работы с хранилищами данных. И здесь приверженцев реляционных СУБД поджидает неприятный сюрприз: SQLAlchemy ORM, самая популярная ORM для Python, не поддерживает асинхронную работу. Рассмотрим пути решения возникшей задачи удобной работы с РСУБД без использования самой популярной Python-ORM.

четверг, 24 января 2019 г.

Как мы делали Antida Frontend School

Вопрос “Как спроектировать курс и программу обучения?” совсем не тривиальный. Даже учитывая многочисленность подобных курсов, всегда есть особенности, из-за которых нельзя просто так взять и скопировать. Мы хотим поделиться опытом, как мы разрабатывали учебную программы для frontend-школы, какие цели преследовали и что у нас в итоге получилось.



пятница, 26 октября 2018 г.

Настройка Amazon IoT Button

У нас в компании есть проект, связанный с облачными кнопками от Amazon, — Amazon IoT Button. Процесс настройки этих кнопок не самый простой, поэтому мы решили написать инструкцию, чтобы сэкономить время всем, кто начинает работу с этим устройством.

Задача: настроить кнопку таким образом, чтобы при нажатии в облаке запускалась произвольная lambda-функция.

Кнопка работает следующим образом. По нажатию она включается, подключается к Wi-Fi и отправляет запрос в облако Amazon, где находится обработчик нажатия в виде Amazon Lambda. Батарейки хватает примерно на 2000 нажатий.



вторник, 4 сентября 2018 г.

Трансформация из Junior в Middle для Python-разработчиков

Статья из внутренней базы знаний нашей компании.

Мы подразумеваем, что разработчик грейда Junior владеет навыками программирования на Python (в идеале — Python 3), базово знает Django/Flask или что-то подобное и умеет работать с базой данных и системной контроля версий (мы используем Git). Таким образом, он может разработать простое веб-приложение на этом стеке.



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

вторник, 24 октября 2017 г.

Мы начали организовывать конференцию Python-разработчиков в Челябинске

В прошлую субботу, 21 октября 2017 года, мы провели свою первую конференцию Python-разработчиков Челябинска. Нам удалось собрать в одном месте почти 70 человек, увлеченных разработкой на этом языке так же, как мы. На первой встрече было представлено пять докладов: три из них были от нашей компании.

четверг, 6 июля 2017 г.

Разработка SaaS на Django и Python. Часть 2. Шардинг базы данных (multi-tenant)



В предыдущей статье мы затронули тему размещения аккаунтов на отдельных поддоменах, а так же способ реализации публичного API в обычном приложении Django (с учетом того, что серверная сторона уже реализована в виде WebAPI для SPA-приложения).

Сегодня мы поговорим о шардинге баз данных и о том, как его можно применять при разработке SaaS продуктов. Частично о шардинге мы уже рассказывали ранее в серии статей о проектировании высоконагруженных веб-приложений: База данных. Рекомендую обратиться к этому материалу, т.к. тема оптимизации работы с БД достаточно сложная.

Сегодня речь пойдет по большей части о практике. Мы наглядно покажем (с примерами кода), как можно реализовать шардинг базы данных в SaaS проекте на Django, Python и PostgreSQL/MySQL.

среда, 5 июля 2017 г.

Разработка SaaS на Django и Python. Часть 1. Поддомены и публичный API


Вдохновившись интересными решениями на последних наших проектах, я решил описать то, как можно реализовать три типичные составляющие SaaS проекта на Django и Python.

Материал будет разбит на две части, в которых мы рассмотрим следующие темы.
  1. Размещение каждого аккаунта на отдельном поддомене; 
  2. Простой и быстрый способ выделить публичный API вашего сервиса; 
  3. Размещение данных каждого аккаунта в отдельных базах данных.
Сегодня речь пойдет о первых двух пунктах. Рассказ о размещении аккаунтов в разных базах данных заслуживает отдельной статьи.

На сервере мы часто используем Django и Python, Celery и Redis для реализации распределенной очереди задач, а в качестве СУБД PostgreSQL или MySQL. Клиентская сторона обычно реализуется на AngularJS, ReactJS или другом MVVM/MVC фреймворке.

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

понедельник, 5 сентября 2016 г.

Про опыт работы над проектами из США


Наша компания сейчас работает над вторым проектом для заказчика из Соединенных Штатов. Оба проекта — облачные SaaS-системы (B2B и B2C, соответственно). Основное их отличие для нашей компании заключается в том, что первый мы самостоятельно разрабатывали с нуля, а ко второму мы подключились как удаленная команда, чтобы улучшить и ускорить разработку. Об особенностях, различиях и некоторых выводах пойдет речь в этой статье.

среда, 24 августа 2016 г.

Как мы начинаем разработку проекта

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

понедельник, 4 июля 2016 г.

Git-flow: модель ветвления, применяемая в нашей компании

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


Материал составлен в виде свода правил и рекомендаций к действию в конкретных ситуациях и опубликован на Github.

Antida git-flow: https://github.com/antidasoftware/git-workflow.

Будем рады, если вы найдете этот поход интересным для себя, а так же с удовольствием обсудим модели ветвления, которые применяете вы.

пятница, 27 мая 2016 г.

Python-клиент для CloudPayments

В прошлой статье я рассказал о том, что у нашей компании накопился определенный опыт работы с различными биллинговыми системами. На одном из проектов мы работали с российской системой CloudPayments. К сожалению, эта система не предоставляет официальной клиентской библиотеки для взаимодействия с API на Python, а на Github мы нашли стороннюю реализацию только под Ruby.

Мы создали Python-клиент для API CloudPayments, когда работали над проектом, а сегодня решили опубликовать его исходный код для всех.

среда, 18 мая 2016 г.

Экспертиза по биллинговыми системами

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

пятница, 22 января 2016 г.

Индикация процесса загрузки страниц и AJAX-запросов

На одном из наших проектов мы попробовали очень интересную библиотеку Pace.js. Достаточно подключить JS/CSS файлы и Pace автоматически будет следить за загрузкой страниц и всех AJAX-запросов, длительностью больше N мсек, и показывать индикатор загрузки.



То, как выглядит индикация загрузки, определяется темой. Pace позволяет гибко его конфигурировать, указывать как следить, за чем следить и т.д. Описание конфигов можно найти в документации.

вторник, 22 декабря 2015 г.

Три правила эффективного Standup Meeting

В стендап-митингах приходится участвовать каждый день. Зачастую их проводят утром, например, через час после начала рабочего дня. Стендапы — это важная составляющая процесса разработки, в частности, позволяющая распространяться знаниям о проекте в команде. Поэтому очень важно сохранять этот процесс эффективным и не допускать превращения его в нудные «бубнилки». Мы определили три простых правила, которые нам помогают в этом.

четверг, 17 декабря 2015 г.

Работа с кастомными поддоменами в веб-приложении Django

В нашей компании сейчас идет разработка SaaS-системы для вендоров, чье программное обеспечение продается по подписке. Зарегистрировавшись в нашей системе, вендор может создать поддомен, на котором будет отображаться сайт с информацией об их компании и решении, которое они предлагают. Этот сайт можно всячески кастомизировать, но сейчас речь пойдет не об этом. Я хотел бы рассказать о том, как мы реализовали возможность создания кастомных поддоменов и их обработку.

вторник, 6 октября 2015 г.

Story Mapping: мощный инструмент в арсенале разработчиков

Эта статья снова родилась просто из повседневной практики. Признаться, Story Map для проектов мы начали строить не так давно, до этого мы обходились просто написанием общих концептов. Однако после внедрения Story Mapping мы сразу получили массу плюсов от этой практики. А плюсы эти появляются еще до того, как начинается непосредственно разработка проекта. В общем, сегодня расскажу о том, как мы это делаем и что в итоге получаем.

четверг, 24 сентября 2015 г.

Прозрачный процесс разработки ПО

У молодых компаний-разработчиков программного обеспечения одна из наиболее важных проблем, встающих на пути развития, заключается  в невысоком уровне лояльности (доверия) [потенциальных] клиентов. В общем-то со временем, при условии качественной работы, она постепенно устраняется естественным образом. Однако, каким способом можно ускорить решение этого вопроса? Организацией прозрачного процесса разработки.

воскресенье, 5 июля 2015 г.

Проектирование высоконагруженных приложений. Часть 4. Отложенная обработка данных.

В предыдущих статьях мы рассмотрели основные способы оптимизации и масштабирования frontend-ов, backend-ов и баз данных. Этих начальных знаний уже достаточно для того, чтобы у вас в голове сложилось понимание того, как проектируются и работают распределенные системы, которым приходится обрабатывать огромное количество задач.

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