Pull to refresh
-10
0
Влад @Varim

ASP.NET Core WebAPI, SQL, JavaScript

Send message

Три мушкетёра — Event Sourcing, Event Storming и Event Store — вступают в бой: Часть 1 — пробуем Event Store ДБ

Reading time7 min
Views13K


Привет, Хабр! Решил я значит на время отойти от Scala, Idris и прочего ФП и чуть чуть поговорить о Event Store — базе данных в которой можно сохранят события в потоки событий. Как в старой доброй книге у нас тоже мушкетёров на самом деле 4 и четвертый это DDD. Сначала я с помощью Event Storming выделю команды, события и сущности с ними связанные. Потом сделаю на их основе сохранение состояния объекта и его восстановление. Буду я делать в этой статье обычный TodoList. За подробностями добро пожаловать под кат.
Читать дальше →

Автоматическое разрешение конфликтов с помощью операциональных преобразований

Reading time9 min
Views11K
image

Автоматическое разрешение конфликтов в среде с более, чем одним ведущим узлом (в данной статье под ведущим узлом понимается узел, который принимает запросы на изменение данных) – очень интересная область исследований. Существует несколько различных подходов и алгоритмов, в зависимости от области применения, и в данной статье будет рассмотрена технология Операциональных Преобразований (Operational Transformations, OT) для разрешения конфликтов в приложениях совместного редактирования, таких как Google Docs и Etherpad.
Читать дальше →

Совместное редактирование. Часть 1

Reading time9 min
Views44K
Добрый день. Последний год я занимаюсь в проекте «МойОфис» вопросами совместного редактирования (collaboration). Оглядываясь назад, могу констатировать, что это непростая и очень интересная задача. Поэтому я хотел бы подробно рассказать о ней и дать ответы на следующие вопросы:

  1. Какие существуют подходы к обеспечению совместного редактирования?
  2. Насколько они сложны в реализации?
  3. Можно ли взять готовую библиотеку и использовать ее в своем проекте?
  4. Можно ли вести разработку без оглядки на совместное редактирование?



Для того чтобы подробно и аргументированно ответить на них, необходимо написать довольно много материала, поэтому статей будет несколько, присаживайтесь поудобнее, мы начинаем.
Читать дальше →

Прогулка по заводу желаний

Reading time36 min
Views33K
Откуда приходят и куда исчезают желания?

Иногда трудно заставить себя делать что-то нужное: мыть посуду, делать зарядку, работу работать… В интернете есть много статей с рецептами преодоления нежелания, и каждый день добавляются новые. Я вижу во многих статьях одну и ту же проблему.

Взять, например, дерево — почему оно не цветет? Или дождей давно не было, или тень от других деревьев закрыла свет, или соль в почву попала, или вредные насекомые завелись, или дерево слишком молодое, или зима наступила, или это нарисованное дерево — можно придумать много очень разных причин. От причины зависит выбор действия, которое поможет увидеть цветущее дерево.

Взять, например, не дерево, а танк — почему он не заводится? Или водитель плохо обучен, или механик пошутил, или диверсант слил горючее, или денег не хватает на ремонт, или генерал приказал ждать команды, или танк утонул, или еще не сошел со сборочного конвейера — причины могут быть очень разные. От причины зависит выбор действия, которое поможет завести танк.

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

Или еще проще — проблемы нет, у вас воля слабая, отговорки ищете, возьми и сделай (just do it).

Позвольте усложнить.
Читать дальше →

TDD: Что пошло не так?

Reading time5 min
Views16K

Эта статья является переводом материала «TDD: What went wrong or did it?».

В сфере разработки программного обеспечения уже давно хвалят Test Driven Development (TDD, разработка через тестирование). Однако в последнее время было сказано много резких слов в адрес TDD, поскольку его обвиняют в плохом проектировании программного обеспечения и невыполнении многих своих обещаний. Кульминацией этой тенденции стал пост Дэвида Хайнемайера Ханссона «TDD is dead. Long live testing.» (TDD мертв. Да здравствует тестирование).

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

Читать далее

«Я больше не могу»: 5 причин эмоционального выгорания программиста и что с этим делать

Reading time5 min
Views29K

 
Андрей Н. начал кодить 8 лет назад, и готов был работать сутками напролет, набирая «шабашки» на выходные, а в свободное от работы время изучая новые фреймворки. Работа приносила удовольствие, он наконец-то нашел себя! Спустя 8 лет Андрей с трудом заставляет себя встать с кровати утром, работа не приносит радости, как не приносит ее ничто другое: все виды развлечений, которые развеивали ранее, больше не интересны. У Андрея эмоциональное выгорание, которое предшествует депрессии.

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

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

«Мотивировать vs Вдохновлять. Инсайты о том, как раскрыть таланты в команде с пользой для всех»: интервью с самим собой

Reading time16 min
Views6.2K

Мой босс ну просто «не очень хороший» человек... Сделаешь задачу хорошо, все проходят молча, но когда что-то не устраивает — активно высказываются... Даешь им бонусы, плюшки, а взамен отдачи нет… Наш тимлид думает, что классно лидит команду, а у команды другое мнение на этот счёт… Говорят, что «всё хорошо и всё нравится», но потом увольняются… Руководитель не умеет признавать свои косяки, маскирует их и даже переводит стрелки… Инициатива всё ещё наказуема?! Деньги — отличный мотиватор, но через пол года любая зп кажется маленькой…  Постоянно срываются дэдлайны, а всем как будто пофиг… Задаёшь 3 вопроса, получаешь в лучшем случае ответ только на 2 из них… Порой кажется, что меня окружают одни идиоты... Лезешь из кожи вон, работаешь без выходных и даже ночью, а в замен даже спасибо не говорят... Не пинганешь (не дёрнешь) лишний раз, не получишь ответа... Постоянно опаздывают на работу… Вдохновляй, мотивируй — все равно не будет так, как ты хочешь… . Почему так бывает?

Эти и многие другие моменты внутри команды и проекта в целом знакомы многим из нас. В этой статье делюсь инсайтами, которые смог понять за последние 13 лет и проверить на практике. Решил написать в стиле интервью с «самим собой». Ироничная попытка поговорить с собой о мотивации и талантах.

Читать далее

Когда использовать mocks в юнит-тестировании

Reading time13 min
Views87K

Эта статья является переводом материала «When to Mock».

Использование моков в модульном тестировании является спорной темой. Автор оригинала заметил, что на протяжении всей своей карьеры в программировании он сначала перешел от «моков почти для каждой зависимости» к политике «без моков», а затем к «только моки для внешних зависимостей».

Ни одна из этих практик не является достаточно хорошей. В этой статье Владимир Хориков покажет, какие зависимости следует мокать, а какие использовать как есть в тестах.

Читать далее

Распределенная трассировка запросов в .NET

Reading time20 min
Views20K


В любой системе возникает задача понять, как взаимодействуют компоненты между собой. Особенно важно это в распределённых системах. Как понять, какие компоненты обработали запрос, сколько времени это заняло, какой был порядок обработки. Всё это можно узнать, но нужно добавить немного инфраструктуры.

Егор Гришечко — работал разработчиком в компании Insolar. Команда Егора делает полностью распределенную систему, и поэтому они сталкиваются с большинством проблем, которые присущи распределенным системам. Сейчас Егор трудится в Uber и занимается разработкой инфраструктуры.

Под катом — текстовая расшифровка и видео доклада Егора с конференции DotNext 2019 Moscow. Доклад будет полезен разработчикам микросервисных систем, которые смогут для себя открыть эти технологии. А также будет интересен бэкенд-разработчикам, интересующимся метриками и мониторингом.

От веб-студии к SaaS сервису для автоматизации склада (часть первая)

Reading time8 min
Views3.4K

Началось все в апреле 2010 года. Я только что успешно продал долю в довольно крупной веб-студии, на создание которой потратил более 10 лет своей жизни и задумался о бизнесе, которому я посвящу свои следующие годы.

Читать далее

Мониторинг и наблюдаемость в облачных приложениях ASP.NET Core

Reading time5 min
Views5.5K

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

Читать далее

Какие языки программирования учить?

Reading time6 min
Views37K

Чем больше освоишь, тем круче будешь

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

Я сам в свое время ходил и думал, что бы такого изучить, чтобы потом писать в резюме много умных слов. Затем однажды на работе познакомился с коллегой, С++ разработчиком, который за всю жизнь освоил только один этот язык и все. А зарплата у него была, как у меня, может даже больше. Помню, как он ходил и с интересом спрашивал, как такие же вещи можно делать на С #. Это меня очень удивило, потому что я увидел, что человек достаточно успешен в IT-карьере, хотя он хорошо выучил всего один язык, а за его пределами почти ничего не знает.

Конечно, это не значит, что надо ограничивать свой кругозор единственным языком. На мой взгляд, секрет успеха в том, чтобы стать профи в чем-то одном, а затем осваивать смежные области, которые будут дополнять друг друга и двигать в направлении одной цели. Например, если вы занимаетесь Web-разработкой, будет плюсом знать какой-то язык для бэкэнда и JavaScript для фронтэнда. Но если я буду учить С++ для бэкэнда, то знания JavaScript для фронтэнда мне ничего не даст, потому что я никогда не буду использовать их вместе.

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

Читать далее

Как формируются зарплаты с точки зрения экономики и почему программисты столько получают

Reading time4 min
Views56K

Всем же интересно про зарплаты? Давайте про зарплаты

Меня зовут Алексей и я работаю в Райффайзенбанке техлидом. Последние 12 лет я нон-стоп нанимаю технических специалистов и меня всегда интересовал зарплатный гэп между айтишниками и не-айтишниками. Судя по дискуссиям в интернете — разница в зарплатах волнует многих. Так получилось, что в качестве хобби я интересуюсь экономикой. Поэтому когда моих знаний стало хватать для понимания причин такого разрыва, то в голове сразу же щелкнули шестеренки, картина мира обрела гармонию и я получил заслуженную порцию дофамина.

Под катом я рассказываю о том, как формируется зарплата (особенно программиста) с точки зрения экономики.

Читать далее

Что такое дружба после 30? (Теория взрослой жизни)

Reading time8 min
Views82K
Подобным вопросом в той или иной форме задаются очень многие взрослые люди. Взрослому должно быть более-менее понятно, что новые друзья находятся где-то за пределами области известного опыта, потому что в области известного опыта и с друзьями всё известно. То есть, «искать друзей» превращается в «искать хз кого хз где» — и это только половина беды, потому что дальше вопрос: а как тогда понять, что нашёл? Не зная, что ищешь, нельзя установить критерии выбора — в какой момент станет понятно, что нашёл? А что искал? А неизвестно же. Это логический тупик. Выход из него — правильная постановка вопроса.


Дружба — атрибут детства. Это не значит, что дружбы не может быть во взрослой жизни — очень даже может, но при определённых условиях, которые становятся понятны, если разобраться в разнице между детской и взрослой ролями человека в обществе.

Человек — существо социальное в том смысле, что «человечность» — то есть, то, что отличает человека от животного, как её ни назови (личность, душа, personality) возникли в процессе эволюции Homo как коллективного существа. Животные, даже стайные, действуют автономно — исходя из заложенных инстинктов и приобретённых навыков. Приматы вида Homo в процессе эволюции развили способность предсказывать поведение других членов группы, чтобы корректировать своё поведение в реальном времени. Феномен личности — то есть, предиктивной модели поведения других членов группы — возник как побочный эффект подобного усложнения взаимодействия. Self-awareness — то есть, распознание себя как личности, постройка предиктивной модели самого себя — эволюционный пик этого процесса, с которого, собственно, «человек» (то есть, «не-животное») как феномен и начался.
Читать далее

Как защититься от синдрома запястного канала? 

Reading time9 min
Views61K


Наряду с компьютерным зрительным синдромом, о котором мы уже рассказывали ранее, среди IT-специалистов распространен и другой весьма серьезный недуг — синдром запястного канала. В чем проявляется данное заболевание и можно ли предотвратить его развитие? Давайте разбираться. 

Причины и симптоматика синдрома запястного канала


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

Человеческий организм имеет огромное количество подобных мест: на одной лишь руке могут развиться 8 разных туннельных синдромов. Поэтому с медицинской точки зрения называть синдром запястного канала, о котором пойдет речь в сегодняшней статье, просто туннельным синдромом, без уточнения локализации патологического процесса, некорректно. Хотя справедливости ради стоит сказать, что именно карпальный туннельный синдром (так называют синдром запястного канала неврологи) является самой распространенной формой компрессионно-ишемической невропатии из всех существующих: его общая доля в популяции составляет около 5%, а ежегодный прирост заболеваемости достигает 3 случаев на каждую тысячу населения.
Читать дальше →

Как я сделал Discord бота для игровой гильдии с помощью .NET Core

Reading time14 min
Views18K

Всем привет! Недавно я написал Discord бота для World of Warcraft гильдии. Он регулярно забирает данные об игроках с серверов игры и пишет сообщения в Discord о том что к гильдии присоединился новый игрок или о том что гильдию покинул старый игрок. Между собой мы прозвали этого бота Батрак.

В этой статье я решил поделиться опытом и рассказать как сделать такой проект. По сути мы будем реализовывать микросервис на .NET Core: напишем логику, проведем интеграцию с api сторонних сервисов, покроем тестами, упакуем в Docker и разместим в Heroku. Кроме этого я покажу как реализовать continuous integration с помощью Github Actions.

От вас не потребуется никаких знаний об игре. Я написал материал так чтобы можно было абстрагироваться от игры и сделал заглушку для данных об игроках. Но если у вас есть учетная запись в Battle.net, то вы сможете получать реальные данные.

Читать далее

О классах Program и Startup — инициализация ASP.NET приложения. Часть I: Program и IHostBuilder

Reading time42 min
Views23K

Не так давно на Хабре я увидел статью с многообещающим названием "Что из себя представляет класс Startup и Program.cs в ASP.NET Core". Меня всегда интересовало и интересует, что именно происходит под капотом той или иной библиотеки или фреймворка, с которыми мне доводится работать. И к веб-приложениям на ASP.NET Core это относится в полной мере. И я надеялся получить из этой статьи новую информацию о том, как работают упомянутые классы при запуске такого приложения. Та статья, к сожалению, меня разочаровала: в ней всего лишь в очередной раз был пересказан кусок руководства, никакой новой информации я оттуда не получил. И при чтении ее я подумал, что, наверное, есть и другие люди, которым, как и мне, интересно не просто знать, как применять тот или иной фреймворк (ASP.NET Core в данном случае), но и как он работает. А так как я по разным причинам последнее время довольно сильно углубился во внутреннее устройство ASP.NET Core, то я подумал, что теперь мне есть много что рассказать о нем из того, что выходит за рамки руководств. И вот потому я решил для начала написать статью про то, что действительно представляют из себя классы Startup и Program - так, чтобы рассказать не о том, как ими пользоваться, а о том, как работают эти классы, причем - в контексте работы всего веб-приложения на ASP.NET Core. Однако поскольку необъятное объять нельзя, то предмет этот статьи ограничен. Прежде всего, она ограничивается рассказом только про веб-приложения, созданные с использованием нового типа шаблона приложения - Generic Host. Во-вторых, статья будет посвящена только тому, как происходит инициализация веб-приложения, потому что основная роль рассматриваемых классов именно такова - инициализация и запуск размещенного приложения.

И ещё - предупреждение, судя по одному из комментариев - необходимое, чтобы не вводить в заблуждение потенциальных читателей: эта статья не предназначена служить руководством, она не содержит рецептов "как это использовать на практике". Такая информация есть в многочисленных уже написанных другими руководствах, и я не вижу для себя смысла писать еще одно. Да и объем статьи и без того велик.

Итак, кому рассматриваемая тема, даже в столь ограниченном объеме, интересна - добро пожаловать под кат.

Читать далее

JOIN локальной коллекции и DbSet в Entity Framework

Reading time11 min
Views18K

Чуть больше года при моём участии состоялся следующий "диалог":


.Net App: Эй, Entity Framework, будь любезен дай мне много данных!
Entity Framework: Прости, не понял тебя. Что ты имеешь ввиду?
.Net App: Да просто мне прилетела коллекция из 100k транзакций. И теперь надо по-быстрому проверить корректность цен на бумаги, которые там указаны.
Entity Framework: Ааа, ну давай попробуем…
.Net App: Вот код:


var query = from p in context.Prices
            join t in transactions on 
              new { p.Ticker, p.TradedOn, p.PriceSourceId } equals
              new { t.Ticker, t.TradedOn, t.PriceSourceId }
            select p;
query.ToList();

Entity Framework:



Классика! Думаю многим знакома эта ситуация: когда очень хочется “красиво” и быстро сделать поиск в базе, используя JOIN локальной коллекции и DbSet. Обычно этот опыт разочаровывает.


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

Читать дальше →

Опенсорсные инструменты и пакеты для работы с HTTP API

Reading time10 min
Views9.7K

Мы продолжаем серию статей о создании HTTP API с помощью .NET 5. В предыдущей статье мы рассмотрели создание обнаруживаемых HTTP API с помощью ASP.NET Core 5 Web API. В этой статье мы рассмотрим пакеты и инструменты для работы с HTTP API с открытым исходным кодом. Ну что ж, приступим!

Читать далее

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity

Specialization

Backend Developer
Senior
From 6,500 $
ASP.NET Web API
Entity Framework
RabbitMQ
Redis
Apache Kafka
Elasticsearch
Docker
English
SQL
.NET