Как стать автором
Обновить
24
Карма
0
Рейтинг
Aleksandr Goida @ETman

Software Developer

Создание Data Lake и Warehouse на GCP

Big Data *Google Cloud Platform *Распределённые системы *Data Engineering *

Эта статья не будет технически глубокой. Мы поговорим о Data Lake и Data Warehouse, важных принципах, которые следует учитывать, и о том, какие сервисы GCP можно использовать для создания такой системы. Мы коснёмся каждого из GCP сервисов и поймём почему они будут полезны при создании Data Lake и Warehouse.

Прежде чем перейти к своей версии Data Lake и Data Warehouse, я хотел бы привести несколько известных архитектур, с которыми вы, возможно, уже знакомы, если интересуетесь этой темой. Архитектура, которую я бы предложил, будет более общей, чем эти: Cloud Storage as a data lake и Architecture: Marketing Data Warehouse.

В своей более общей версии Data Lake и Data Warehouse я расскажу о таких сервисах GCP, как Data Transfer Service, Dataproc, Cloud Storage, Cloud Scheduler, BigQuery, и Cloud SQL.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 2.3K
Комментарии 7

Создание автоматической системы борьбы с злоумышленниками на сайте (фродом)

Анализ и проектирование систем *Big Data *Data Engineering *
Последние примерно полгода я занимался созданием системы борьбы с фродом (fraudulent activity, fraud, etc.) без какой-либо начальной инфраструктуры для этого. Сегодняшние идеи, которые мы нашли и реализовали в нашей системе, помогают нам обнаруживать множество мошеннических действий и анализировать их. В этой статье я хотел бы рассказать о принципах, которым мы следовали, и о том, что мы сделали для достижения текущего состояния нашей системы, не углубляясь в техническую часть.
Читать дальше →
Рейтинг 0
Просмотры 1.4K
Комментарии 0

Аутентификация в .NET Core gRpc с помощью JWT

Разработка веб-сайтов *.NET *
В этой статье я расскажу об особенностях аутентификации API в gRpc сервисах с помощью JWT. Я предполагаю, что вы знакомы с JWT и заголовками HTTP, с их использованием в .NET Core WebAPI, поэтому не буду обсуждать эти детали. Когда я пытался реализовать аутентификацию в gRpc, я столкнулся с тем, что большинство примеров написаны с использованием консольных приложений. Это слишком далеко от реальности, в которой, на мой взгляд, живут разработчики. Например, я не хочу создавать канал каждый раз, когда я хочу вызвать метод сервиса. Еще я не хочу заботиться об отправке токена и пользовательской информации с каждым запросом. Вместо этого я хочу иметь инфраструктурный уровень, который будет заботиться обо всём этом за меня. Если эта тема вам интересна, то под катом будет больше. Все примеры в статье справедливы для .NET Core 3.1.
Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 11K
Комментарии 0

Развертывание в Docker и Kubernetes образа StatsD+Grafana

.NET *Kubernetes *
В начале моего изучения Docker и Kubernetes мне нехватало простого и понятного примера, с которым можно было бы «поиграться», изучая особенности этой среды. Этой статьей хотелось бы закрыть этот пробел. Здесь я расскажу об интеграции .NET Core приложения с Telegraf и Grafana, о том, как шлются метрики и как деплоить в Docker и Kubernetes. Примеры в статье расчитаны на тех, кто начинает изучать данную область, но базовыми понятиями желательно обладать, чтобы полностью понять статью. В ней описано, как развернуть контейнер, в котором есть StatsD, InfluxDB и Grafana, а также, как отправлять метрики различных типов из приложения.
Читать дальше →
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 5.8K
Комментарии 8

Полем грядки вовремя, или 5 признаков скрытых проблем в команде

Управление разработкой *Управление проектами *
Проблем в коммуникациях очень много и их решение всегда очень специфично для каждого случая. Сложность с некоторыми проблемами состоит в том, что они скрыты и дают о себе явно знать, когда уже слишком трудно, или поздно, что-то исправлять. Я вспомнил пять случаев, с которыми лично сталкивался. Не все получилось решить, не все решал осознано. Под катом найдёте пять историй, иллюстрирующие пять признаков проблем. Каждую историю я дополнил очень сухой подсказкой об исправлении потому, что реальное решение очень субъективно.
Читать дальше →
Всего голосов 27: ↑26 и ↓1 +25
Просмотры 9.8K
Комментарии 14

Тёмные стороны деятельного человека

Управление разработкой *Управление проектами *
Если в большинстве случаев, когда вы получаете новую задачу, вы больше думаете о возможностях сделать её любой ценой, вместо того, чтобы искать препятствия и причины, почему она не может быть выполнена, то вы, в моем понимании, деятельный человек. Пока другие думают, что это невозможно, вы всё еще ищете возможности и находите их. Но на пути поиска и воплощения решения в жизнь вы можете создавать напряжение между людьми. И об этом следует помнить, преследуя цели. И речь идет не о преодолении стены, а о поиске компромиссов, работающих решений и синхронизации с другими людьми. Существует такой набор черт, которые могут создать напряженность и об этом под катом.
Читать дальше →
Всего голосов 18: ↑17 и ↓1 +16
Просмотры 11K
Комментарии 14

Несколько простых рекомендаций работы в команде

Управление разработкой *
Несколько рекомендаций работы в команде, которые могут сохранить нервные клетки всех в сложные моменты. Бывает, работы так много, что некоторые моменты забываются. Поэтому важно создать некоторый чек-лист, хотя бы для себя, чтобы иметь возможность быстро вернуть себя в эффективное состояние хорошего Team Player. Под катом рекомендации, которые вывел для себя.
Читать дальше →
Всего голосов 27: ↑14 и ↓13 +1
Просмотры 4.6K
Комментарии 34

Когда тестирование через public-метод начинает вонять (пример)

Программирование *Проектирование и рефакторинг *
В статье про тестирование public-методов коснулся юнит-тестирования приватной логики классов. Думаю, мне стоило бы переделать тезис, так как большинство, на мой взгляд, восприняло, что речь идет о тестировании именно private-методов, хотя речь шла о приватной логике. В этой статье хочу проиллюстрировать практическим примером главный тезис. Под катом пример с небольшим анализом.
Читать дальше →
Всего голосов 23: ↑15 и ↓8 +7
Просмотры 6.2K
Комментарии 35

Тестировать только через public-методы плохо

Программирование *Проектирование и рефакторинг *
В программировании и в TDD, в частности, есть хорошие принципы, которых полезно придерживаться: DRY и тестирование через public-методы. Они неоднократно оправдали себя на практике, но в проектах с большим legacy-кодом могут иметь «тёмную сторону». Например, ты можешь писать код, руководствуясь этими принципами, а потом обнаружить себя разбирающим тесты, охватывающие связку из 20+ абстракций с конфигурацией, несоизмеримо превосходящей по объему тестируемую логику. Эта «тёмная сторона» пугает людей и тормозит использование TDD в проектах. Под катом я рассуждаю, почему тестировать через public-методы плохо и как можно уменьшить проблемы, возникающие из-за этого принципа.
Читать дальше →
Всего голосов 26: ↑13 и ↓13 0
Просмотры 5.3K
Комментарии 29

Стратегия Bottom-Up по внедрению изменений в организации

Карьера в IT-индустрии
Я точно не первый, кто сталкивался с препятствиями при внедрении изменений в организации снизу-вверх, и не последний. Хочу поделиться некоторыми наблюдениями, выводами и ошибками, которые я сделал на этом пути. Возможно, кто-то был в похожей ситуации, сталкивался с похожими препятствиями и ему удалось их преодолеть. Было бы интересно услышать их опыт.

Упрощенно история выглядит следующим образом. Есть потребность в специалистах Data Science. Есть некоторое видение топ-менеджмента о том, как это должно быть и оно игнорирует людей, которые интересуются данным направлением и уже являются сотрудниками компании. Некоторые из них изучают DS самостоятельно. Чтобы ускорить обучение в этом направлении и сделать его более релевантным для нужд компании я решил организовать группу и заручиться поддержкой архитекторов и глав департаментов. Тут начинается самое интересное в этой истории. Под катом стратегия и мои выводы.
Читать дальше →
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 3K
Комментарии 0

Еще про внедрение таймзон в долгоживущий проект

.NET *C# *
Некоторое время назад начали адаптировать систему под требования нового рынка, где поддержка таймзон обязательна. Начальные изыскания описывал в предыдущей статье. Сейчас подход немного эволюционировал под влиянием реалий. Под катом описание проблем, с которыми пришлось столкнуться в ходе обсуждений, и окончательное решение, которое воплощается в жизнь.
Читать дальше →
Всего голосов 14: ↑10 и ↓4 +6
Просмотры 8.7K
Комментарии 62

Переход от DateTime к DateTimeOffset

.NET *
Представим, что вы хотите преобразовать свою систему из одного состояния в другое. Начальное состояние — это когда DateTime используется везде, в C# коде и в БД. Конечное состояние — когда везде используется DateTimeOffset. Вы хотите сделать переход плавно и внести как можно меньше изменений. Это описание может быть началом очень интересной задачи с тупиком в конце.
Читать дальше →
Всего голосов 24: ↑24 и ↓0 +24
Просмотры 20K
Комментарии 39

Цели обмена знаниями в IT компании

Управление разработкой *
«Знание есть сила», и я считаю, что компании должны поощрять культуру обмена знаниями между разработчиками. Удержание информации сотрудниками не является правильным путем по карьерной лестнице и не сделает никого ключевой персоной в долгосрочной перспективе. Ряд активностей, объединенных общим названием, напоминает win-win игру, в которой выигрывают обе стороны. За счет увеличения эффективности каждого отдельного разработчика, компании достигает более высоких целей наиболее эффективным образом. Основной трудностью, которая мешает продвижению этих активностей в компаниях, является отсутствие прямой связи между инвестициями в них и отдачи. Я не встречал четкой системы оценки прогресса этих мероприятий. Поэтому для себя расписал, как цели обмена знаниями связаны с реальными процессами в компании.
Читать дальше →
Всего голосов 15: ↑10 и ↓5 +5
Просмотры 7.4K
Комментарии 7

Настройка Swashbuckle (Swagger) для WebAPI

Разработка веб-сайтов *.NET *Проектирование и рефакторинг *
Кто хоть раз тестировал свой WebAPI знает такие инструемнты, как Postman или Advanced REST (экстеншены для Chrome). Эти инструемнты всем удобны, кроме того, что не умеют сами узнавать какие модели принимает API, какие отдает и не предоставляет информацию обо всех возможных эндпоинтах. Это неудобство решает пакет Swashbuckle, который встраивает в проект генерацию Swagger спецификации и UI. Под катом коротко о том, как его прикрутить к проекту и некоторые детали относительно авторизации и работы с «перегруженными» эндпоинтами.
Читать дальше →
Всего голосов 12: ↑10 и ↓2 +8
Просмотры 53K
Комментарии 11

Заменяем тестирование алгоритмов тестированием вносимых эффектов

TDD *IT-стандарты *
Как и ожидал, правило 8 о том, что не тестируем алгоритм методов в статье "Правила внедрения TDD в старом проекте" вызвало больше всего вопросов «как» и «зачем». В момент составления прошлой статьи мне показалось это очевидным, поэтому не остановился детальнее на этом моменте. Но т.к. вопросов возникло много, хочу описать своё видение. Поэтому под катом будет небольшой пример кода и два примера того, как его можно было бы протестировать.
Читать дальше →
Всего голосов 23: ↑21 и ↓2 +19
Просмотры 9.3K
Комментарии 29

Правила внедрения TDD в старом проекте

.NET *TDD *IT-стандарты *
Статья «Скользящая ответственность паттерна Репозиторий» подняла несколько вопросов, на которые очень сложно дать ответ. Нужен ли репозиторий, если абстрагироваться от технических деталей полностью невозможно? На сколько сложным репозиторий может быть, чтобы его написание оставалось целесообразным? Ответ на эти вопросы различается в зависимости от акцента, который делается при разработке систем. Наверно, самый сложный вопрос: нужен ли, вообще, репозиторий? Проблема «текучей абстракции» и рост сложности кодирования с увеличением уровня абстракции не позволяют найти решение, которое удовлетворяло бы оба лагеря. Например, в репортинге intention design приводит к созданию большого числа методов для каждого фильтра и сортировки, а generic решение создает большой оверхед по кодированию. Продолжать можно бесконечно…

Для более полного представления я взглянул на проблему абстракций со стороны применения их в уже готовом коде, в legacy code. Репозиторий, в таком случае, нас интересует только, как инструмент для достижения качественного и безбажного кода. Конечно, этот паттерн — не единственное, что необходимо для применения TDD практик. Наевшись «невкусной еды» в нескольких больших проектах и наблюдая за тем, что работает, а что нет, я вывел для себя несколько правил, которые мне помогают следовать TDD практикам. С удовольствием выслушаю конструтктивную критику и иные приёмы внедрения TDD.
Читать дальше →
Всего голосов 29: ↑27 и ↓2 +25
Просмотры 20K
Комментарии 86

Скользящая ответственность паттерна Репозиторий

Программирование *
В ходе многих дискуссий о применимости паттерна Repository я заметил, что люди разделены на два лагеря. В рамках этого текста я, условно, их назову абстракционистами и конкретистами. Разница между ними заключается в том, как они относятся к значению паттерна. Первые считают, что репозиторй стоит иметь, т.к. он позволяет абстрагироваться от деталей хранения данных. Вторые считают, что мы не можем полностью абстрагироваться от этих деталей, поэтому сама идея репозитория бессмыслена, а его использование пустая трата времени. Спор между ними обычно превращается в холивар.

Что не так с репозиторием? Очевидно, что с самим паттерном все нормально, но разница в его понимании разработчиками. Я попробовал исследовать это и наткнулся на два основных момента, которые, на мой взгляд, являются причиной разного к нему отношения. Одним из них является «скользящая» ответственность репозитория, а другой связан с недооценкой unit testing. Под катом я объясню первый.
Читать дальше →
Всего голосов 12: ↑9 и ↓3 +6
Просмотры 12K
Комментарии 161

Сравнение конфигураций Dependency Injection фреймворков

.NET *C# *

Много раз я спрашивал себя, что какой IoC контейнер подойдет для того или иного проекта. Их производительность — это только одна сторона медали. Полное сравнение производительности можно найти здесь. Другая сторона медали — простота и скорость обучения. Так что я решил сравнить несколько контейнеров с этой точки зрения и взял Autofac, Simple Injector, StructureMap, Ninject, Unity, Castle Windsor. На мой взгляд, это наиболее популярные IoC контейнеры. Вы можете найти некоторые из них в списке 20 лучших пакетов NuGet и также я добавил другие по своим предпочтениям. Лично мне очень нравится Autofac и во время работы над этой статьей я еще больше утвердился, что это лучший выбор в большинстве случаев.


Здесь описываются основы IoC контейнеров, таких как конфигурация и регистрации компонентов. Есть мысль так же провести сравнение управления lifetime scope и продвинутых фитч. Примеры кода можно найти в репозитории LifetimeScopesExamples GitHub.

Читать дальше →
Всего голосов 23: ↑20 и ↓3 +17
Просмотры 36K
Комментарии 15

Введение в написание тестов и знакомство с xUnit

Программирование *
Идея статьи возникла после нескольких лекций о том, как писать тесты и как использовать xUnit. Обо всём можно по отдельности почитать подробно. Здесь же я собрал общую информацию о том, как удачно на практике всё это применяется и сопроводил ссылками, для дальнейшего ознакомления. Обзор делался по версии 2.0.
Читать дальше →
Всего голосов 9: ↑7 и ↓2 +5
Просмотры 38K
Комментарии 5

Создание тестового DB-контекста в тестах с использованием xUnit

.NET *TDD *
Из песочницы
В случаях, когда ваше приложение имеет нетривиальную схему данных (люди, продукты, заказы, цены, объемы, состояния, зависящие от кучи параметров и т.д.) бывает проще иметь некоторый дамп данных, воссозданный на тестовом окружении, или взятый с продакшна, и использовать его для тестов. В этом случае, может понадобиться несколько дампов данных, для каждого из случаев, которые автоматические тесты должны уметь накатывать и откатывать на тестовое окружение. В этой статье я попытаюсь показать, как это можно сделать, используя fixtures и collections фреймворка xUnit. Все решение построена на базе xUnit версии 2.0 от 16 марта 2015 года.
Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 8.5K
Комментарии 0

Информация

В рейтинге
Не участвует
Откуда
Lozenets, Sofiya, Болгария
Дата рождения
Зарегистрирован
Активность