Собрали в одном месте самые важные ссылки
читайте нас в Twitter
Расскажем о том, мы в KION готовим Geo по IP, как обогащаем продуктовые события (6000RPS), как используем в витринах гео информацию. Как мы это делаем быстро и вкусно, используя только Python, FastAPI и Mongo. Как подготавливаем и томим геоинформацию в Monge чтобы отвечать очень быстро.
При работе с большими коллекциями в MongoDB, размер которых превышал десятки миллионов записей, возникла необходимость формировать случайные выборки уникальных значений полей, принадлежащих документам этой коллекции.Для такой операции, в MongoDB штатно предусмотрена функция $sample, которую можно использовать в составе pipeline при проведении агрегации данных. Однако, как показала практика, выполнение выборки полей таким образом на большой коллекции может занимать весьма ощутимое время. Чтобы сократить время выполнения таких выборок, потребовалось разработать собственный алгоритм, который на порядки увеличил скорость работы. Ниже приведен подход и вариант реализации данного алгоритма.
В этой статье хочу рассказать о том, как написать полезный сервис, для получения ИНН по персональным данным (паспортные данные). ИНН физического лица получаем с использование сайта https://service.nalog.ru/. Похожая функциональность, скорее всего, уже где-то и кем-то была реализована. Основная идея статьи - поделиться опытом работы с Python в части создания законченного проекта с использованием контейнера зависимостей, создания слушателей для RabbitMQ и работой с базой данных MongoDB. Работа с клиентами сервиса реализована через RabbitMQ в режиме непрерывного чтения очереди, отправкой результата в выходную очередь. Сервис будет жить в Kubernetes, что требует наличие liveness и readiness проб. Для этого используется веб-сервер.
В этой статье я хочу рассказать о своих ошибках, которые я допустил, когда писал сервис, у которого MongoDB была основной БД для хранения пользовательских данных (да и не только, но об этом ниже).
Это пост-отчёт с митапа «Быстрый бэкенд», который прошёл в офисе Joom. С коллегами из Джум Лабс и Авито обсудили, как живётся с большим кластером MongoDB, как битмап-индексы помогают быстро искать по каталогам и как анализировать большие объемы Jaeger-трейсов. В этом посте — видеозаписи докладов, презентации спикеров и несколько фотографий со встречи.
У Яндекса много самописных сервисов для внутренних задач: Яндекс.Формы, Яндекс.Диск, трекер, календарь. Со временем их решили использовать не только внутри компании, но и за ее пределами. Так появилась платформа Яндекс.Коннект.
Большинство сервисов Коннекта построено на Python V3. В качестве web-фреймворка используется Django, реже Flask и Tornado, а новые чаще пишутся на FastAPI. Сервисы, как и базы PostgreSQL, MySQL и MongoDB, живут в облаке. В качестве очереди сообщений почти везде используется Celery с MongoDB в качестве брокера. Он и стал проблемой.
Все больше растет популярность голосовых интерфейсов. Многие технологические компании-гиганты стремятся сделать своего голосового помощника. Но речевые технологии доступны и обычным пользователям. Каждый может использовать их в своих проектах и делать голосовые интерфейсы еще удобнее и популярнее .
Голосовой дневник - лишь один из примеров того, как можно встроить функции голосового интерфейса в повседневные действия.
Геоинформация - это любые сведения, отражающие расположение, форму и размеры объекта (далее - геообъект). Ее учет ведется в картографии, геологии, метеорологии, землеустройстве, экологии, муниципальном управлении, транспорте, экономике, обороне и многих других областях. Геоинформация является неотъемлемой частью так называемых Больших данных, что приводит к необходимости разработки средств ее анализа и визуализации.
Машинное обучение уже везде и, пожалуй, почти невозможно найти софт, не использующий его прямо или косвенно. Давайте создадим небольшое приложение, способное загружать изображения на сервер для последующего распознавания с помощью ML. А после сделаем их доступными через мобильное приложение с текстовым поиском по содержимому.
Мы будем использовать Flask для нашего REST API, Flutter для мобильного приложения и Keras для машинного обучения. В качестве базы данных для хранения информации о содержимом изображений используем MongoDB, а для получения информации возьмём уже натренированную модель ResNet50. При необходимости мы сможем заменить модель, используя методы save_model() и load_model(), доступные в Keras. Последний потребует около 100 Мб при первоначальной загрузке модели. Почитать о других доступных моделях можно в документации.
Анализ публикаций Lenta.ru за 18 лет (с сентября 1999 по декабрь 2017 гг.) средствами python, sklearn, scipy, XGBoost, pymorphy2, nltk, gensim, MongoDB, Keras и TensorFlow.
Ivideon (http://ivideon.com/) - это популярный облачный сервис для домашнего и бизнес-видеонаблюдения.
Наша highload-платформа постоянно обрабатывает, хранит и стримит видео с десятков тысяч камер по всему миру. У нас собственные подсистемы кодирования видео, биллинг, распределённое хранилище архива и ещё десятки микросервисов для разных задач. Всё это работает на стеке Python/Tornado, C++/Asio, MongoDB, Redis, Hg (BitBucket).
В нашу backend-команду мы ищем сильного разработчика, который поможет нам развивать сервисы стриминга видео.
Нужно хорошо разбираться в:
1. Программировании в целом (алгоритмы/структуры данных);
2. Проектировании и технологиях разработки (архитектурные паттерны/тестирование/документирование);
3. Сетевом программировании и распределённых системах;
4. Серверных Linux;
5. Грамотном выражении своих идей.
У нас в облаке софт на смеси C++ и Python, поэтому нужен приличный уровень владения хотя бы чем-то одним, в идеале - обоими, но это дело наживное. Ещё существенный момент - нужен не просто кодер, а человек, который сможет под задачу сам придумать архитектуру решения + реализовать.
Что придется разрабатывать:
Компоненты облака, занимающиеся обработкой видео: геобалансировку, стриминг, облачное кодирование, архив, видеоаналитику и т.д.
Формальные требования:
- Знание современного Python (PEP-8, 2.7 vs 3.x);
- Опыт разработки под Linux и высокий общий уровень владения этой системой (bash, популярные утилиты);
- Опыт работы с сетью (TCP, HTTP + REST);
- Знание классических алгоритмов и структур данных;
- Опыт работы с системами контроля версий (мы используем Mercurial).
- Опыт разработки с использованием одного из распространенных веб-фреймворков (Tornado, Flask, Django);
- Опыт работы с SQL- и NoSQL-базами (идеально - MongoDB);
- Плюсом будет владение C++ и опыт коммерческой разработки на нём;
- Опыт работы с project management-системами и багтрекерами.
- Знание паттернов и принципов проектирования;
- Плюсом будет опыт работы с видео-кодеками, передачей видео по сети или VoIP.
Кратко про нас и что предлагаем:
- Самому проекту уже более 10 лет, работаем по всему миру (тот же сайт и личный кабинет у нас уже доступен на 8 языках), есть представители в США и Европе.
- Команда облачного направление - 6 человек (хотим найти ещё парочку), it отдел - 45 человек, всего в компании нас более 170.
- По количеству пользователей сейчас приближаемся к 2.5 млн.
У нас большое облако на сервис-ориентированной архитектуре, решающее спектр задач от биллинга пользователей до элементов internet of things.
- Ключевые подсистемы: публичный API, стриминговая платформа, облачный архив, видеоаналитика, биллинг, бэкофисные сервисы. Также команда облака поддерживает свои CI и test automation-платформу. Используем Python+Tornado, C++, Linux, MongoDB.
- Гибкий график. Работа в офисе в Москве на ст. м. Варшавская. От метро до офиса курсирует бесплатный автобус (2 минуты в пути) или 10 минут пешком;
- Удобная кухня в офисе с чаем/кофе и запасами печенек, тортиков, сладостей, фруктов и прочего;
- Настольный теннис для любителей активного отдыха и массажное кресло для всех остальных, часто играем в настольные игры и начали формировать команду для соревнований по пейнтболу;
- Молодой амбициозный коллектив, демократичная, дружеская атмосфера и очень адекватное руководство;
- Способствуем развитию и профессиональному росту сотрудников, помогаем с покупкой необходимой профессиональной литературы;
- Оформляем по ТК РФ с первого дня. Всё белое. Зарплатная вилка, в которой идеально было бы найти специалиста - до 230 000 рублей, но готовы обсуждать и выше.
Контакты:
Почта - m.kuzmin@ivideon.com
Telegram - https://telegram.me/maxim_kuzmin
Skype - kuzmin.maks
Luigi — фреймворк на языке Python для построения сложных последовательностей по выполнению зависимых задач. Довольно большая часть фреймворка направлена на преобразования данных из различных источников (MySql, Mongo, redis, hdfs) и с помощью различных инструментов (от запуска процесса до выполнения задач разных типов на кластере Hadoop). Разработан в компании Spotify и открыт в виде open source инструмента в 2012 году.
В минувшие выходные прошла третья конференция питонистов в Питере — Piter Py #3 (http://it-sobytie.ru/events/5862). Конференция длилась три дня, была наполовину англоязычной, все эти дни слова "Docker", "Mongo", "Ansible" произносились даже чаще, чем "Python". И здесь я впервые услышал о существовании YAML-программистов. Делюсь собственными впечатлениями и, полагаю, выражаю мнение большинства других посетителей.
Речь пойдёт об инструменте, который позволит вам построить полноценный и простой в использовании REST API за минимальное количество времени. Называется он – Python Eve.
К сожалению в Интернете очень много инструкций на эту тему, но все они вводят в заблуждение. Начинающие разработчики, начитавшись подобных статей, думают, что REST API это GET/POST/PUT/DELETE. Заказчики думают, что это дело пары часов. А когда они встречаются вместе, происходят магия в виде Express.js/Mongoose/Passport и ещё кучи хлама, который течёт и временами блокирует event-loop. Всё это запускается с помощью какого-нибудь supervisor, потому что иногда падает и надо как-то перезапускать.
Это достаточно вольный перевод статьи об основных новшествах асинхронного драйвера для mongodb используемого в tornado. Основной мотив, который послужил для написания этого перевода — новшества, появившиеся в этой версии, такие как поддержкаasyncio, async, await и Python 3.5. Сама статья не сколько перечисление новшеств, сколько лаконичные примеры асинхронной работы с MongoDB.
В Django 1.9 будет добавлено поле JSONField, его можно использовать с базой данных PostgreSQL >= 9.4. Давайте попробуем с ним поработать и оценить, насколько оно удобно.
В данный момент доступна альфа версия django 1.9, финальная запланирована на декабрь 2015. Установить альфа версию можно так:
pip install --pre django
Итак представим, что у нас есть интернет магазин, в котором мы предлагаем товары разных типов. Например, ноутбуки и футболки. Очевидно, что у таких товаров будет разный набор параметров: у футболок будет размер, цвет, а у ноутбуков - размер экрана, частота процессора, объем жесткого диска и прочее. Один из подходов для работы с такими данными в SQL - Entity–attribute–value model (EAV).
В последнее несколько лет MongoDB приобрела огромную популярность среди разработчиков. То и дело в интернете появляются всякие статьи как очередной молодой популярный проект выкинул на свалку истории привычные РСУБД, взял в качестве основной базы данных MongoDB, выстроил инфраструктуру вокруг неё, и как все после этого стало прекрасно. Даже появляются новые фреймворки и библиотеки, которые строят свою архитектуру целиком на Mongo (Meteor.js например). По долгу работы я примерно 3 года занимаюсь разработкой и поддержкой нескольких проектов, которые используют MongoDB в качестве основной БД, и в этой статье хочу рассказать, почему на мой взгляд с MongoDB далеко не все так просто, как написано в мануалах, и к чему вы должны быть готовы, если вдруг решите взять MongoDB в качестве основной БД в ваш новый модный стартап :-) Все что описано ниже можно воспроизвести с использованием библиотеки PyMongo для работы с MongoDB из языка программирования Python. Однако скорее всего с аналогичными ситуациями вы можете столкнуться и при использовании других библиотек для других языков программирования.