Pull to refresh
15
0

Project/Product manager and Python dev

Send message

Ускоряем Python в сто раз при помощи менее чем ста строк на Rust

Level of difficultyMedium
Reading time15 min
Views19K

Однажды на работе у нас возникла проблема с производительностью одной из наших основных Python-библиотек.

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

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

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

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

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

Если вы хотите сразу перейти к получившемуся коду, то читайте раздел «Подведение итогов».
Читать дальше →
Total votes 76: ↑72 and ↓4+68
Comments10

Задача коммивояжера (TSP) точное решение — метод целочисленного линейного программирования (Integer programming)

Reading time20 min
Views22K

Дочитав эту статью до конца, вы сможете решать точно задачу коммивояжёра на сотню элементов за считанные секунды!

Заинтригованы? Тогда, добро пожаловать под кат.

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

Хочется лучше жить? Просто начни просить

Level of difficultyEasy
Reading time7 min
Views63K

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

Читать далее
Total votes 181: ↑152 and ↓29+123
Comments282

8 сервисов для зарубежных покупок в 2024 году

Reading time6 min
Views212K

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

Прочитав кучу отзывов (спойлер: в основном плохих), я попробовала заказать товары через так называемые “Сервисы-посредники” или “Байер-сервисы”. В статье расскажу об опыте работы с 8 сервисами, с помощью которых можно привести товары в Россию.

Читать далее
Total votes 49: ↑46 and ↓3+43
Comments51

Поиск объектов на видео с помощью Python

Reading time5 min
Views21K

В данной статье хочу рассказать про поиск объектов на видео с помощью Python и OpenCV. Помимо обычных видео, можно использовать и камеры.

Полный код и все исходники можно найти на моем Github.

Данный проект является продолжением моей предыдущей статьи - Поиск объектов на фото с помощью Python. Для того, чтобы не тратить много времени на ее изучение, я распишу весь процесс по новой.

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

Часть 3. Распознаем время на видеозаписях матчей Dota 2 с помощью трансформеров

Reading time6 min
Views4.5K

На YouTube есть множество каналов, где люди выкладывают нарезки с интересными моментами из профессиональных матчей по Dota 2. Зачастую на видео есть маленькие часы из интерфейса игры. Время на них мы и будем распознавать.

Читать далее
Total votes 5: ↑4 and ↓1+3
Comments8

DANets: Глубокие абстрактные сети для классификации и регрессии табличных данных

Reading time26 min
Views2.2K

Аннотация

Табличные данные широко распространены в различных реальных приложениях. Хотя многие широко используемые нейронные компоненты (например, свертки) и расширяемые нейронные сети (например, ResNet) были разработаны сообществом машинного обучения, только немногие из них показали свою эффективность для табличных данных, и лишь немногие проекты были релевантно адаптированы к табличным структурам данных. В этой статье мы предлагаем новый и гибкий нейро-компонент для табличных данных, называемый абстрактным слоем (ABSTLAY), который обучаем явно группировать коррелирующие входные объекты и генерировать объекты более высокого уровня семантической абстракции (формализации). Кроме того, мы разрабатываем метод репараметризации структуры для сжатия слоя ABSTLAY, тем самым значительно снижая вычислительную сложность на контрольном слое. Специальный базовый блок строится с использованием ABSTLAY, и мы создаем семейство глубоких абстрактных сетей (DANET) для классификации табличных данных и регрессии путем группировки (таксономии) таких блоков. В DANET введен специальный кратчайший путь для извлечения информации из необработанных табличных объектов, способствующий взаимодействию объектов на разных уровнях. Всесторонние эксперименты с семью реальными табличными наборами данных показывают, что наши ABSTLAY и DANET эффективны для классификации и регрессии табличных данных, а их вычислительная сложность не превосходит сложности конкурентных методов. Кроме того, мы оцениваем прирост производительности DANET по мере его углубления, проверяя модифицируемость нашего метода. Наш код доступен по адресу https://github.com/WhatAShot/DANet .

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

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

Reading time11 min
Views238K

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

Собираем все данные по портфелю и по всем операциям через Tinkoff API.

Строим огромную Excel таблицу со всеми данными.

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

Пытаемся понять, что нам с этим делать.

Read more
Total votes 158: ↑155 and ↓3+152
Comments112

Фоновые задачи на Faust, Часть I: Введение

Reading time5 min
Views5.9K

https://habrastorage.org/webt/wo/6b/ui/wo6buieqgfwzr4y5tczce4js0rc.png


  1. Часть I: Введение
  2. Часть II: Агенты и Команды

Как я дошёл до жизни такой?


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

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

Финансовые графики для вашего приложения

Reading time4 min
Views20K


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


В статье расcмотрю три основных для меня библиотеки, сделаю сравнение и дополню комментариями из личного опыта.

Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments13

Говорит и показывает Ишутин

Reading time9 min
Views7K

Иллюстрация киберздоровья


image

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

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

Выраженный синдром Марфана, как правило, подразумевает гипермобильность суставов, что делает гражданина Ишутина ценнейшей иллюстрацией интересующих нас эффектов, т.к. деформация опорно-двигательного аппарата, вызванная длительным сидением за компьютером, проявляется при дисплазии соединительной ткани гораздо полнее и быстрее.
Цитаты взяты из работы «Физические нагрузки современного человека» НАУКА (1982), В.П.Загрядский, З.К.Сулимо-Самуйлло. Книга рекомендуется к ознакомлению всем работникам операторского профиля.

Total votes 10: ↑8 and ↓2+6
Comments24

Напишем и поймем Decision Tree на Python с нуля! Часть 2. Основы Python, необходимые для генерации Decision Tree

Reading time8 min
Views4.2K
Привет, Хабр! Представляю вашему вниманию перевод статьи "Pythonで0からディシジョンツリーを作って理解する (2. Pythonプログラム基礎編)".

Данная статья — вторая в серии. Первую вы можете найти здесь.

2.1 Комментарии обозначаются # или ''' (три одинарные кавычки)


# Комментарий
a = 1 # Комментарий 

''' Это тоже комментарий
b = c
c = d
'''

2.2 Использование динамической типизации (тип определяется автоматически)


# динамическая типизация переменных
# = копирование значения справа налево
i = 1 #  целое число (int)
f = 2.1 # число с плавающей запятой (float)
s = "a" # строковый тип (string)
b = True # логический тип (boolean)
l = [0,1,2] # массив,список (array) 
t = (0,1,2) # кортеж (tuple)
d = {"a":0, "b":1} # словарь, ассоциативный массив

print(i,f,s,b,l,t,d)
# 1 2.1 a True [0, 1, 2] (0, 1, 2) {'a': 0, 'b': 1}

# Когда хотим определить тип, используем type
print(type(i)) # Вывод <class 'int'>

# Переменная не сохраняет, а содержит фактическое значение
# Это, своего рода, переменная-ссылка, указывающая на местоположение значения
# Можно получить идентификатор актуального значения через id
print(id(l)) # 00000000000000 (меняется от исполнения к исполнениюц)
l2 = l # Приведу в пример копию массива, где ссылаюсь на 2 его элемента, а фактический массив - 1. 
print(id(l2)) # 00000000000000 (то же значение, что у вышеуказанного id(l))
# Поскольку существует только один фактический массив, кажется, что он был добавлен в массив l, даже если вы добавили элемент со ссылкой на l2.
l2.append(1)
Читать дальше →
Total votes 10: ↑6 and ↓4+2
Comments2

Что такое опционы и кому это нужно. Ликбез для гика, ч. 6

Reading time17 min
Views51K
Меня зовут Михаил Андреев, я разработчик в нашем подразделении FX Derivatives Desk (на сленге отрасли позиция называется Quant Developer). В этом посте расскажу про опционы и все что с ними связано.

Эти инструменты не так близки простому обывателю, как, например, банковский вклад, но для современных финансовых рынков они важны. И их периодически обсуждают в неспециализированных СМИ, и я думаю, что составить общее представление об опционах и том, как с ними работают финансовые компании, полезно.


Кроме этого, эта тема связана с интересной математикой, вычислительными методами и разработкой программных систем — всё как мы любим.
Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments9

Опционы: пут-колл парити, броуновское движение. Ликбез для гика, ч. 7

Reading time11 min
Views13K
Это вторая часть рассказа про опционы, где мы разберемся с пут-колл парити, условием безарбитражности рынка, познакомимся с идеями хеджирования и репликации и поговорим про то, что такое броуновское движение и как оно связано с моделированием поведения курса финансового актива во времени.

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


Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments34

Тесты в Python: все основные подходы, плюсы и минусы. Доклад Яндекса

Reading time23 min
Views83K
Перед вами доклад Марии Зеленовой zelma — разработчика в Едадиле. За час Маша рассказала, в чём состоит тестирование программ, какие тесты бывают, зачем их писать. На простых примерах можно узнать про библиотеки для тестирования Python-кода (unittest, pytest, mock), принципы их работы и отличия между ними.


— Добрый вечер, меня зовут Маша, я работаю в отделе подготовки анализа данных Едадила, и сегодня у нас с вами лекция про тестирование.
Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments3

Сертификация. Стоит ли пользоваться дампами и при чем здесь цепи Маркова?

Reading time15 min
Views4K
Более 20 лет назад я заинтересовался телекомом. Я начал с чтения книжек, одной из которых был курс CCNA. Тогда это была довольно тоненькая книжечка с FDDI, Token Ring, ISDN и подобными вещами, о которых новое поколение сетевиков только слышали. И тогда я впервые прочитал про CCIE сертификацию. У меня осталось впечатление, что обладатели этого статуса являются воистину IT богами. Конечно же, мне захотелось достичь этого сетевого самадхи.

С тех пор прошло много времени. Я получил CCNA потом CCNP, с успехом просрочил все эти сертификаты за ненужностью и лет через 10 стал CCIE. Я по-прежнему занимаюсь сетями, и, надо сказать, похоже, люблю свою работу, но романтизм, конечно, прошел. Двадцать лет назад отношение ко всему этому было совсем другим. Это был драйв, это было настоящее приключение.

Сейчас такого интереса уже нет, и отношение к сертификации у разных инженеров тоже разное, да и сам я отношусь к этому неоднозначно. Я ясно осознаю, что это своеобразная игра, часто не совсем честная игра, и, если вы не знаете правил, то, даже обладая прекрасными знаниями и навыками, у вас достаточно большой шанс проиграть. В этой статье мы с помощью несложной математики рассмотрим эти правила, что позволит вам составить свою по возможности максимально честную и одновременно выигрышную стратегию.
Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments5

Фасетные фильтры: как готовить и с чем подавать

Reading time6 min
Views23K

О чем речь 


Как сделать фасетный поиск в интернет-магазине? Как формируются значения в фильтрах фасетного поиска? Как выбор значения в фильтре влияет на значения в соседних фильтрах? В поиске ответов дошел до пятой страницы поисковой выдачи Google. Исчерпывающей информации не нашел, пришлось разобраться самому. Статья описывает:

  1. как реагирует UI, когда пользователь использует фильтры;
  2. алгоритм формирования значений фильтров; 
  3. шаблоны запросов и структуры индекса ElasticSearch с пояснениями.

Здесь нет готовых решений. Скопировать и вставить не получится. Для решения собственной задачи придется вникнуть.


Читать дальше →
Total votes 7: ↑6 and ↓1+5
Comments7

PgGraph — утилита для архивации и поиска зависимостей таблиц в PostgreSQL

Reading time10 min
Views4.9K

Сегодня я хочу представить читателям Хабра утилиту, написанную на Python, для работы с зависимостями таблиц в СУБД PostgreSQL.

API утилиты простое и состоит из трех методов:

  • archive_table — рекурсивная архивация/удаление строк с указанными Primary Keys
  • get_table_references — поиск зависимостей для таблицы (покажет таблицы, на которые ссылается указанная и ссылающиеся на нее)
  • get_rows_references — поиск строк в других таблицах, которые ссылаются на указанные строки в нужной таблице
Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments5

Практики хорошего code review, или что такое code review за 15 минут. Доклад Никиты Соболева на DUMP в Казани

Reading time8 min
Views9.2K

В 2019 году на DUMP в Казани выступал Никита Соболев – технический директор компании wemake.services. И Никита на протяжении почти 40 минут пытался вскипятить мозги слушателей секции Backend, рассуждая о code review. Сегодня хотим привести расшифровку этого «взрывного» доклада, чтобы если уж мозги бурлили, то у всех сразу.


А вот, кстати, и сам Никита Соболев во время своего выступления.



Читать дальше →
Total votes 19: ↑16 and ↓3+13
Comments3

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity