Вот результат того, над чем я так самозабвенно работал прошедшее время, потому что было очень интересно. Реализовал и закрепил все свои знания в программировании на #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...
Конкретно для Postgres, есть решение для запуска его в памяти, но мне вариант с контейнером ближе, тем более, что testcontainers поддерживаются все популярные базы данных, брокеры и т.д.
GitHub
GitHub - wey-gu/py-pglite: PGlite wrapper in Python for testing. Test your app with Postgres just as lite as SQLite.
PGlite wrapper in Python for testing. Test your app with Postgres just as lite as SQLite. - wey-gu/py-pglite