Метакод
77 subscribers
5 photos
26 links
Автор канала @pavel_maksimow
Download Telegram
Вот результат того, над чем я так самозабвенно работал прошедшее время, потому что было очень интересно. Реализовал и закрепил все свои знания в программировании на #Python, создания дашбордов в #PowerBI, сбора и обработки данных в #Clickhouse. Считаю получилось отлично. Но, к сожалению трудно масштабировать на другие проекты, в том виде, в котором она написана. Чем займусь дальше, пока не знаю. Сейчас творческий кризис...

Дашборд http://bit.ly/2rGoBh8


Отчеты:

Сравнение данных по периодам

Сводные

Когортный

ЮНИТ Экономика

Расход/доход по клиентам

Разные отчеты по контексту (сквозные данные)


Особенности проекта:

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

Смена модели аттрибуции в отчете.

Высокая скорость работы дашборда при больших данных. (Плюс еще есть потенциал для увеличения скорости)

Удобство. Смена графиков в рамках одного отчета. Возможность сменить метрику и группировку в графиках и таблицах

Доступна фильтрация по многим срезам


Что не сделано:

Отчеты по ассортименту, по местоположению юзеров, отчет RFM.


Очень долго возился с генерацией данных для демо версии и таки не довел до совершенства "отчет по качеству слов в Adwords" и "Отчет п клиентам". На реальных данных все нормально.

Буду рад отзывам на моей странице в Facebook, пишите.
https://goo.gl/zSAHg1
В обновлении Power BI добавили подсказки для таблиц. Раньше мне приходилось добавлять их отдельными блоками над таблицей. Ну и своими подсказками рекомендациями похвастаюсь походу дела🙂
Хотите автоматизировать сбор данных из разных систем и освободить свое время для более интересных занятий🙂?

Сервис 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
Написал библиотеку Python для API Mytarget
http://bit.ly/2YRQqD7
Выложил в открытый доступ свою обертку над стандартной библиотекой для работы с API Google Analytics (v3) на Python

- Умеет запрашивать данные маленькими порциями, чтобы обойти семплирование.
- Если в один ответ не поместятся все строки (макс 10000), сделает дополнительные запросы.
- По умолчанию возвращает данные в формате dataframe.

https://bit.ly/2WYeDpr
Channel name was changed to «Метакод»
Channel photo updated
Всем привет, кто еще здесь живой.
Ранее здесь я пытался писать про аналитику, когда я этим занимался.
Уже 6-ой год я занимаюсь серверной разработкой, буду теперь здесь писать про это.
Оставайтесь, кому интересно!
🫡9👍2👎1
Посмотрел интервью с Владом Ханоновым, автора книги с обезьяной "Изучаем Domain Driven Design", в этом интервью он немного рассказал про свою новую книгу, которая будет посвящена модели уровня взаимодействия между компонентами системы.

Модель определяется следующими факторами:
1. Кол-во знаний, которыми обмениваются компоненты.
Чем их больше, тем будет больше каскадных изменений.
2. Расстояние между компонентами.
Чем меньше расстояния (находятся в одном микросервисе), тем легче внести изменение и наоборот.
3. Частота внесения изменений

В итоге формула получается такой:
Кол-во знаний и расстояние должно балансировать в зависимости от кол-ва изменений.

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

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

https://youtu.be/PRL3vVfv1dA?si=UkAOjDBpWKU7uwOu&t=3083
👍1
Нашел крутую визуализацию работы Kafka, можно интерактивно менять кол-во её компонентов и смотреть, как это работает в новой конфигурации. Я прохожу интенсив по архитектуре брокеров и очередей и мне помогло заметить неочевидные моменты в её работе.

Еще вспомнил, что у меня в закладках сохранена интерактивная визуализация по алгоритам балансировки трафика, тоже рекомендую.
Внизу этой страницы.
👍1
Раньше работал в давно живущих проектах, где GitLab и CI/CD уже настроен, просто комитишь код и жмёшь Merge. С одной стороны хорошо, не надо в этом разбираться. С другой стороны не знаешь, как это работает и не можешь настроить на новом проекте. Хорошо, что мне это потребовалось сделать на реальных проектах, сразу закрепил знания на практике. Выбрал этот курс, мне кажется из-за того, что там был готовый docker конфиг и инструкция по развёртыванию локального GitLab.
В целом, хорошая база для разработчика. Если до этого ковырял GitLab "по ситуации", то курс помогает выстроить целостное понимание и разобраться в деталях.
👍3
В Python есть предел, когда повышение кол-ва потоков в ThreadPoolExecutor не даёт ускорение, потому что из-за GIL потоки могут работать только на одном ядре и оно не успевает обработать CPU нагрузку этих потоков. Автор этой статьи предлагает гибридный ProcessThreadPoolExecutor, совмещающий потоки и процессы. Логика несложная - делить входные данные на пакеты для каждого процессора, передавая их в ProcessPoolExecutor, в котором каждый процессор запускает обработку данных пакета с помощью ThreadPoolExecutor. Ускорение значимое, стоит обратить внимание. В статье есть примеры, бенчмарки и готовый код.
🆒1
Как делать хорошие вещи? Следовать стандартам. Даже сообщения комитов получатся более выразительными и структурированными, когда следуешь стандарту. Я использую этот. В PyCharm в версии 2025.1 добавили фичу, сгенерировать сообщение комита. Выбираете файлы и строки для комита, он анализирует изменения и пишет сообщение. Лучшего результата добился, когда в промте указал, чтоб он следовал этому стандарту. Получается настолько хорошо и по делу, что сам перестал писать их.
👍2
Услышал мнение, что прошло время, когда уникальные знания, глубокая техническая экспертиза востребованы. Сейчас ценнее уметь быстро создать и выкатить продукт, используя AI инструменты, чем закапываться в книги в поисках деталей работы языка программирования или учить паттерны проектирования.
Если порефлексировать, был момент, раньше я стремился создавать продукты. Было так, я видел целое представление чего я хочу, в плане продукта и незакапываясь в технические детали работы технологий, по необходимости просто подключал их в проект, например базу данных или веб фреймворк. И даже что-то получалось, Но уходило много времени, а результата не приносило, потому что техничекая часть продукта, это только часть продукта. Пришлось менять вектор от придумывания создания продуктов к реализации себя в профессии разработчика. Поначалу оказалось испытанием. Я мог один реализовать продукт, если чего не знал, мог пойти изучить и довести до рабочего состояния. Но на собеседовании этого не объяснишь, про это и не спрашивают. От тебя требуется, чтоб ты уже знал конкретные технологии, алгоритмы, паттерны. Потому что разработчику дают декомпозированную задачу и ожидают, что ты её сделаешь. Думаю, что сейчас AI инструменты, дают больше шансов людям, которые видят целостное видение продукта и у которых есть силы и желание самостоятельно их реализовывать.
https://youtu.be/Oqe6vucYpDo?si=B8ovi_4UC9_2dnS6&t=6352
👍2
Недавно обнаружил в 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(''))
👍3
В этом году познакомился с идеей конечных автоматов. В кратце, они снижают сложность кода и повышают его читаемость, когда в программе есть множество состояний и переходов между ними. Сегодня нашел статью, на мой взгляд с хорошей реализацией в Python. Про саму идею узнал в этом видео.
🆒1
Нашел решение для автоматического создания контейнера с базой данных для запуска тестов. Больше не придется запускать руками или писать shell скрипты.
Все проще. Подключается через фикстуру, вот мой пример .
Конкретно для Postgres, есть решение для запуска его в памяти, но мне вариант с контейнером ближе, тем более, что testcontainers поддерживаются все популярные базы данных, брокеры и т.д.