Давно не писал т.к. погрузился в создание аналитического продукта. Думаю, что в этом или следующем месяце презентую. Но т.к. телеграм решили заблокировать, об этом вы можете узнать на моей странице в FB https://www.facebook.com/pavel.maksimow
Подпишитесь!
Подпишитесь!
Вот результат того, над чем я так самозабвенно работал прошедшее время, потому что было очень интересно. Реализовал и закрепил все свои знания в программировании на #Python, создания дашбордов в #PowerBI, сбора и обработки данных в #Clickhouse. Считаю получилось отлично. Но, к сожалению трудно масштабировать на другие проекты, в том виде, в котором она написана. Чем займусь дальше, пока не знаю. Сейчас творческий кризис...
Дашборд http://bit.ly/2rGoBh8
Отчеты:
Сравнение данных по периодам
Сводные
Когортный
ЮНИТ Экономика
Расход/доход по клиентам
Разные отчеты по контексту (сквозные данные)
Особенности проекта:
Блок рекомендаций требуемых действий для кампаний, групп и ключевиков в контексте. Учитывается расходы за все время и показатель LTV.
Смена модели аттрибуции в отчете.
Высокая скорость работы дашборда при больших данных. (Плюс еще есть потенциал для увеличения скорости)
Удобство. Смена графиков в рамках одного отчета. Возможность сменить метрику и группировку в графиках и таблицах
Доступна фильтрация по многим срезам
Что не сделано:
Отчеты по ассортименту, по местоположению юзеров, отчет RFM.
Очень долго возился с генерацией данных для демо версии и таки не довел до совершенства "отчет по качеству слов в Adwords" и "Отчет п клиентам". На реальных данных все нормально.
Буду рад отзывам на моей странице в Facebook, пишите.
https://goo.gl/zSAHg1
Дашборд http://bit.ly/2rGoBh8
Отчеты:
Сравнение данных по периодам
Сводные
Когортный
ЮНИТ Экономика
Расход/доход по клиентам
Разные отчеты по контексту (сквозные данные)
Особенности проекта:
Блок рекомендаций требуемых действий для кампаний, групп и ключевиков в контексте. Учитывается расходы за все время и показатель LTV.
Смена модели аттрибуции в отчете.
Высокая скорость работы дашборда при больших данных. (Плюс еще есть потенциал для увеличения скорости)
Удобство. Смена графиков в рамках одного отчета. Возможность сменить метрику и группировку в графиках и таблицах
Доступна фильтрация по многим срезам
Что не сделано:
Отчеты по ассортименту, по местоположению юзеров, отчет RFM.
Очень долго возился с генерацией данных для демо версии и таки не довел до совершенства "отчет по качеству слов в Adwords" и "Отчет п клиентам". На реальных данных все нормально.
Буду рад отзывам на моей странице в Facebook, пишите.
https://goo.gl/zSAHg1
Хотите автоматизировать сбор данных из разных систем и освободить свое время для более интересных занятий🙂?
Сервис Novostat Teleport поможет https://teleport.novostat.pro
Для кого он?
Для тех, кто периодически собирает данные в Google Sheets.
Для тех, кто хочет построить сквозную аналитику
Куда можно загружать данные?
- в Google Sheets, BigQuery, Clickhouse
Откуда можно выгружать?
- Criteo
- Google: Ads, Analytics, Sheets
- Яндекс: Маркет, Метрика, Директ
В ближайшее время будут добавлены Facebook, Vkontakte, Mytarget, а также crm системы и коллтрекинги.
Список доступных источников будет расширяться 😉
Данные из ваших систем Novostat Teleport не хранит, не анализирует и не использует, кроме тех, что нужны для осуществления работы сервиса. И не будет этого делать.
Сервисом можно пользоваться бесплатно до 7 апреля, а может и больше (посмотрим🤔). Сейчас он находится на стадии тестирования
Если будут вопросы, найдете ошибки или понадобится помощь, то обращайтесь @pavel_maksimow
Сервис Novostat Teleport поможет https://teleport.novostat.pro
Для кого он?
Для тех, кто периодически собирает данные в Google Sheets.
Для тех, кто хочет построить сквозную аналитику
Куда можно загружать данные?
- в Google Sheets, BigQuery, Clickhouse
Откуда можно выгружать?
- Criteo
- Google: Ads, Analytics, Sheets
- Яндекс: Маркет, Метрика, Директ
В ближайшее время будут добавлены Facebook, Vkontakte, Mytarget, а также crm системы и коллтрекинги.
Список доступных источников будет расширяться 😉
Данные из ваших систем Novostat Teleport не хранит, не анализирует и не использует, кроме тех, что нужны для осуществления работы сервиса. И не будет этого делать.
Сервисом можно пользоваться бесплатно до 7 апреля, а может и больше (посмотрим🤔). Сейчас он находится на стадии тестирования
Если будут вопросы, найдете ошибки или понадобится помощь, то обращайтесь @pavel_maksimow
Выложил в открытый доступ свою обертку над стандартной библиотекой для работы с API Google Analytics (v3) на Python
- Умеет запрашивать данные маленькими порциями, чтобы обойти семплирование.
- Если в один ответ не поместятся все строки (макс 10000), сделает дополнительные запросы.
- По умолчанию возвращает данные в формате dataframe.
https://bit.ly/2WYeDpr
- Умеет запрашивать данные маленькими порциями, чтобы обойти семплирование.
- Если в один ответ не поместятся все строки (макс 10000), сделает дополнительные запросы.
- По умолчанию возвращает данные в формате dataframe.
https://bit.ly/2WYeDpr
Всем привет, кто еще здесь живой.
Ранее здесь я пытался писать про аналитику, когда я этим занимался.
Уже 6-ой год я занимаюсь серверной разработкой, буду теперь здесь писать про это.
Оставайтесь, кому интересно!
Ранее здесь я пытался писать про аналитику, когда я этим занимался.
Уже 6-ой год я занимаюсь серверной разработкой, буду теперь здесь писать про это.
Оставайтесь, кому интересно!
🫡9👍2👎1
Посмотрел интервью с Владом Ханоновым, автора книги с обезьяной "Изучаем Domain Driven Design", в этом интервью он немного рассказал про свою новую книгу, которая будет посвящена модели уровня взаимодействия между компонентами системы.
Модель определяется следующими факторами:
1. Кол-во знаний, которыми обмениваются компоненты.
Чем их больше, тем будет больше каскадных изменений.
2. Расстояние между компонентами.
Чем меньше расстояния (находятся в одном микросервисе), тем легче внести изменение и наоборот.
3. Частота внесения изменений
В итоге формула получается такой:
Кол-во знаний и расстояние должно балансировать в зависимости от кол-ва изменений.
Замечу, что такая формула подойдет для определения решения, когда не стоит выносить компонент в микросервис.
- Когда компоненты обмениваются большим кол-ом знаний , а изменения вносятся часто. Лучше их расположить рядом, чтобы легче вносить изменения.
Когда можно выносить в микросервис? В случаях, в которых нам придется меньше или реже вносить синхронные изменения в оба компонента.
Т.е. сервисы должны обмениваться малым кол-вом знаний или внесение изменений должен быть редким.
https://youtu.be/PRL3vVfv1dA?si=UkAOjDBpWKU7uwOu&t=3083
Модель определяется следующими факторами:
1. Кол-во знаний, которыми обмениваются компоненты.
Чем их больше, тем будет больше каскадных изменений.
2. Расстояние между компонентами.
Чем меньше расстояния (находятся в одном микросервисе), тем легче внести изменение и наоборот.
3. Частота внесения изменений
В итоге формула получается такой:
Кол-во знаний и расстояние должно балансировать в зависимости от кол-ва изменений.
Замечу, что такая формула подойдет для определения решения, когда не стоит выносить компонент в микросервис.
- Когда компоненты обмениваются большим кол-ом знаний , а изменения вносятся часто. Лучше их расположить рядом, чтобы легче вносить изменения.
Когда можно выносить в микросервис? В случаях, в которых нам придется меньше или реже вносить синхронные изменения в оба компонента.
Т.е. сервисы должны обмениваться малым кол-вом знаний или внесение изменений должен быть редким.
https://youtu.be/PRL3vVfv1dA?si=UkAOjDBpWKU7uwOu&t=3083
YouTube
Влад Хононов: Как DDD меняет разработку? Интервью с автором Learning DDD
Domain-Driven Design — мощный инструмент для проектирования сложных систем, но его внедрение часто вызывает вопросы. Почему стратегический уровень DDD играет ключевую роль? Какие сложности поджидают разработчиков на этом пути? И что нужно сделать, чтобы DDD…
👍1
Нашел крутую визуализацию работы Kafka, можно интерактивно менять кол-во её компонентов и смотреть, как это работает в новой конфигурации. Я прохожу интенсив по архитектуре брокеров и очередей и мне помогло заметить неочевидные моменты в её работе.
Еще вспомнил, что у меня в закладках сохранена интерактивная визуализация по алгоритам балансировки трафика, тоже рекомендую.
Внизу этой страницы.
Еще вспомнил, что у меня в закладках сохранена интерактивная визуализация по алгоритам балансировки трафика, тоже рекомендую.
Внизу этой страницы.
👍1
Раньше работал в давно живущих проектах, где GitLab и CI/CD уже настроен, просто комитишь код и жмёшь Merge. С одной стороны хорошо, не надо в этом разбираться. С другой стороны не знаешь, как это работает и не можешь настроить на новом проекте. Хорошо, что мне это потребовалось сделать на реальных проектах, сразу закрепил знания на практике. Выбрал этот курс, мне кажется из-за того, что там был готовый docker конфиг и инструкция по развёртыванию локального GitLab.
В целом, хорошая база для разработчика. Если до этого ковырял GitLab "по ситуации", то курс помогает выстроить целостное понимание и разобраться в деталях.
В целом, хорошая база для разработчика. Если до этого ковырял GitLab "по ситуации", то курс помогает выстроить целостное понимание и разобраться в деталях.
Stepik: online education
Gitlab в работе
Изучите базовые функциональные возможности платформы GitLab для DevOps. Разберемся на практике с базовыми возможностями от создания групп, проектов, добавления пользователей до написания скриптов для Gitlab CI/CD.
Во второй части курса мы изучим основы…
Во второй части курса мы изучим основы…
👍3
В Python есть предел, когда повышение кол-ва потоков в ThreadPoolExecutor не даёт ускорение, потому что из-за GIL потоки могут работать только на одном ядре и оно не успевает обработать CPU нагрузку этих потоков. Автор этой статьи предлагает гибридный ProcessThreadPoolExecutor, совмещающий потоки и процессы. Логика несложная - делить входные данные на пакеты для каждого процессора, передавая их в ProcessPoolExecutor, в котором каждый процессор запускает обработку данных пакета с помощью ThreadPoolExecutor. Ускорение значимое, стоит обратить внимание. В статье есть примеры, бенчмарки и готовый код.
death and gravity
ProcessThreadPoolExecutor: when I/O becomes CPU-bound
...in which we build a hybrid concurrent.futures executor that runs I/O bound tasks on all available CPUs, thus evading the limitations imposed by the dreaded global interpreter lock on the humble ThreadPoolExecutor.
🆒1
Как делать хорошие вещи? Следовать стандартам. Даже сообщения комитов получатся более выразительными и структурированными, когда следуешь стандарту. Я использую этот. В PyCharm в версии 2025.1 добавили фичу, сгенерировать сообщение комита. Выбираете файлы и строки для комита, он анализирует изменения и пишет сообщение. Лучшего результата добился, когда в промте указал, чтоб он следовал этому стандарту. Получается настолько хорошо и по делу, что сам перестал писать их.
👍2
Услышал мнение, что прошло время, когда уникальные знания, глубокая техническая экспертиза востребованы. Сейчас ценнее уметь быстро создать и выкатить продукт, используя AI инструменты, чем закапываться в книги в поисках деталей работы языка программирования или учить паттерны проектирования.
Если порефлексировать, был момент, раньше я стремился создавать продукты. Было так, я видел целое представление чего я хочу, в плане продукта и незакапываясь в технические детали работы технологий, по необходимости просто подключал их в проект, например базу данных или веб фреймворк. И даже что-то получалось, Но уходило много времени, а результата не приносило, потому что техничекая часть продукта, это только часть продукта. Пришлось менять вектор от придумывания создания продуктов к реализации себя в профессии разработчика. Поначалу оказалось испытанием. Я мог один реализовать продукт, если чего не знал, мог пойти изучить и довести до рабочего состояния. Но на собеседовании этого не объяснишь, про это и не спрашивают. От тебя требуется, чтоб ты уже знал конкретные технологии, алгоритмы, паттерны. Потому что разработчику дают декомпозированную задачу и ожидают, что ты её сделаешь. Думаю, что сейчас AI инструменты, дают больше шансов людям, которые видят целостное видение продукта и у которых есть силы и желание самостоятельно их реализовывать.
https://youtu.be/Oqe6vucYpDo?si=B8ovi_4UC9_2dnS6&t=6352
Если порефлексировать, был момент, раньше я стремился создавать продукты. Было так, я видел целое представление чего я хочу, в плане продукта и незакапываясь в технические детали работы технологий, по необходимости просто подключал их в проект, например базу данных или веб фреймворк. И даже что-то получалось, Но уходило много времени, а результата не приносило, потому что техничекая часть продукта, это только часть продукта. Пришлось менять вектор от придумывания создания продуктов к реализации себя в профессии разработчика. Поначалу оказалось испытанием. Я мог один реализовать продукт, если чего не знал, мог пойти изучить и довести до рабочего состояния. Но на собеседовании этого не объяснишь, про это и не спрашивают. От тебя требуется, чтоб ты уже знал конкретные технологии, алгоритмы, паттерны. Потому что разработчику дают декомпозированную задачу и ожидают, что ты её сделаешь. Думаю, что сейчас AI инструменты, дают больше шансов людям, которые видят целостное видение продукта и у которых есть силы и желание самостоятельно их реализовывать.
https://youtu.be/Oqe6vucYpDo?si=B8ovi_4UC9_2dnS6&t=6352
YouTube
Дмитрий Нестерук «Разработка с Использованием ИИ (Refresh Весна 2025)»
Продолжаем обсуждать разработку с использованием ИИ. В этой итерации акцент сделан непосредственно на решении задач программирования. Можно ли простым запросом создать крупную информационную систему? Как гарантировать что мы получаем рабочий продукт, а не…
👍2
Недавно обнаружил в Pydantic тип
Пример из документации с официального сайта Pydantic.
SecretStr
. При любой печати скрывает секреты, повышая безопасность. Приятная полезная мелочь. Пример из документации с официального сайта Pydantic.
from pydantic import BaseModel, SecretStr
class User(BaseModel):
username: str
password: SecretStr
user = User(username='scolvin', password='password1')
print(user)
#> username='scolvin' password=SecretStr('**********')
print(user.password.get_secret_value())
#> password1
print((SecretStr('password'), SecretStr('')))
#> (SecretStr('**********'), SecretStr(''))
docs.pydantic.dev
Pydantic Types - Pydantic
Data validation using Python type hints
👍3
В этом году познакомился с идеей конечных автоматов. В кратце, они снижают сложность кода и повышают его читаемость, когда в программе есть множество состояний и переходов между ними. Сегодня нашел статью, на мой взгляд с хорошей реализацией в Python. Про саму идею узнал в этом видео.
Хабр
Декларативные конечные автоматы на Python
С конечными автоматами я впервые познакомился во времена своего увлечения геймдевом. В разработке игр все поголовно используют эту абстракцию. Однако, это далеко не единственная их...
🆒1
Нашел решение для автоматического создания контейнера с базой данных для запуска тестов. Больше не придется запускать руками или писать shell скрипты.
Все проще. Подключается через фикстуру, вот мой пример .
Все проще. Подключается через фикстуру, вот мой пример .
GitHub
GitHub - testcontainers/testcontainers-python: Testcontainers is a Python library that providing a friendly API to run Docker container.…
Testcontainers is a Python library that providing a friendly API to run Docker container. It is designed to create runtime environment to use during your automatic tests. - testcontainers/testconta...