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

ASP.NET Core WebAPI, SQL, JavaScript

Send message

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

Reading time8 min
Views3.3K

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

Читать далее
Total votes 7: ↑4 and ↓3+1
Comments12

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

Reading time5 min
Views5.2K

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

Читать далее
Total votes 5: ↑3 and ↓2+1
Comments0

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

Reading time6 min
Views37K

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

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

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

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

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

Читать далее
Total votes 29: ↑11 and ↓18-2
Comments62

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

Reading time4 min
Views55K

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

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

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

Читать далее
Total votes 58: ↑50 and ↓8+54
Comments399

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

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


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

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

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

Reading time9 min
Views57K


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

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


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

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

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

Reading time14 min
Views18K

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

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

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

Читать далее
Total votes 13: ↑11 and ↓2+11
Comments4

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

Reading time42 min
Views22K

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

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

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

Читать далее
Total votes 13: ↑12 and ↓1+12
Comments10

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

Reading time11 min
Views17K

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


.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. Обычно этот опыт разочаровывает.


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

Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments25

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

Reading time10 min
Views9K

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

Читать далее
Total votes 6: ↑6 and ↓0+6
Comments2

HTML трюки

Reading time2 min
Views14K
image

1. Атрибут `loading=lazy`


Совет по производительности. Вы можете использовать атрибут loading = lazy, чтобы отложить загрузку изображения до тех пор, пока пользователь не домотает до них.

<img src='image.jpg' loading='lazy' alt='Alternative Text'>  
Total votes 35: ↑26 and ↓9+22
Comments16

История советских ядов: состав, кто их разрабатывал и зачем

Reading time15 min
Views35K

Яд — оружие женщин? Да, это оружие женщин, трусов и евнухов.

История разработки ядов и их использования окутаны ореолом мифов и легенд. Сейчас мы уже не можем досконально разобраться в устройстве токсинов, которые пускали в ход Александр Борджиа или чем пропитывала перчатки Екатерина Медичи.

Поэтому в этой статье будет краткая сводка советских разработок XX века — давайте без политики разберемся в том, что мы точно знаем про советские яды, их создателей, а также про местных Джеймсов Бондов, которые их использовали. А история там богатая.

Токсикологическая лаборатория 


Истоки


История советских ядов и секретных убийств при помощи отравлений неразрывно связана с одним учреждением. В далеком 1921 году Владимир Ленин основал строго засекреченную, токсикологическую лабораторию для «борьбы с врагами советской власти» (формулировка из Положения о лаборатории). Новосозданная организация получила нейтральное название «Специальный кабинет» и подчинялась непосредственно председателю Совета Народных Комиссаров (т.е. Ленину). В задачи входило изготовление и совершенствование ядов для убийства «врагов». Во время жизни и после смерти вождя пролетариата «кабинет» особо себя не проявил: работа велась дилетантски, к тому же Лубянка предпочитала более эффективные методы устранения неугодных. 


Генрих Ягода
Читать дальше →
Total votes 91: ↑59 and ↓32+52
Comments59

Лотерея Green Card DV-2022: россиян оставили за железным занавесом. Есть ли шанс получить визу?

Reading time7 min
Views181K

До ежегодного розыгрыша лотереи, дающей возможность получить гринкарту (вид на жительство в США) остаются считанные часы. Однако, если многие победители предыдущей лотереи DV-2021 потеряли свои счастливые билеты из-за пандемии и президентской прокламации P.P. 10141, то в этом году победителям из России полностью отрезали возможность пройти собеседование на получение визы.

Read more
Total votes 42: ↑24 and ↓18+16
Comments120

Создание программного продукта и управление его развитием

Reading time5 min
Views21K
Привет, Хабр! Сегодня мы начинаем публикацию серии практических материалов для продакт-менеджеров, основателей стартапов и всех остальных, кто хочет приобрести навыки менеджера по разработке программных продуктов. Этот и последующие посты былы подготовлен на основе лекций курса «Создание программного продукта и управление его развитием», который был организован с помощью компании Acronis.

image

Всех, кто планирует запускать свои продукты, стремится расширить свои компетенции или хочет подискутировать с нами — прошу под кат.
Total votes 15: ↑15 and ↓0+15
Comments5

Описание элементов перечислений в Swashbuckle

Reading time6 min
Views7.3K

Swagger — замечательная вещь! Он позволяет легко посмотреть, каким API обладает ваш сервис, сгенерировать клиента для него на различных языках и даже попробовать поработать с сервисом через UI. В ASP.NET Core для поддержки Swagger существует пакет Swashbuckle.AspNetCore.


Но есть один недостаток, который мне не нравится. Swashbuckle способен строить описания методов, параметров и классов, основываясь на XML-комментариях в коде .NET. Но он не показывает те описания, которые применяются непосредственно к членам перечислений.

Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments4

Разделённые запросы в EF Core

Reading time7 min
Views16K

ORM Entity Framework Core с каждой версией становится все более и более богатой на фичи. Команда разработчиков тратит много времени на перфоманс и вероятно простое обновление Nuget-пакета уже приведет к некоторому бусту, который почувствуют пользователи. Но сегодня я хочу рассказать о совершенно конкретной фиче: это новый режим запросов — "разделённые запросы" или "split queries" в оригинале.

Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments12

CQS (CQRS) со своим блэкджеком

Reading time7 min
Views18K
Command-query separation (CQS) — это разделение методов на read и write.

Command Query Responsibility Segregation (CQRS) — это разделение модели на read и write. Предполагается в одну пишем, с нескольких можем читать. М — масштабирование.

Этот подход часто используют как способ организации кода, даже если хранилище одно. Но как всегда, в реальных более-менее сложных проектах эта штука дает сбой.
Читать дальше →
Total votes 4: ↑4 and ↓0+4
Comments12

Preload, prefetch и другие теги

Reading time9 min
Views140K
Есть много способов повышения веб-производительности. Один из них — предзагрузка контента, который понадобится позже. Префетчинг CSS, предварительный рендеринг полной страницы или резолвинг доменного имени. Делаем всё заранее, а потом мгновенно отображаем результат! Звучит круто.

Ещё круче, что это очень просто реализовано. Пять тегов <link rel> дают браузеру команду на предварительные действия:

<link rel="prefetch" href="/style.css" as="style" />
<link rel="preload" href="/style.css" as="style" />

<link rel="preconnect" href="https://example.com" />
<link rel="dns-prefetch" href="https://example.com" />

<link rel="prerender" href="https://example.com/about.html" />
Читать дальше →
Total votes 33: ↑33 and ↓0+33
Comments1

Анатомия GNU/Linux

Reading time13 min
Views116K

Какое-то время назад на Хабре была небольшая волна постов на тему «Почему я [не] выбрал Linux». Как порядочный фанатик я стриггерился, однако решил, что продуктивнее что-нибудь рассказать о своей любимой системе, чем ломать копии в комментариях.

У меня сложилось впечатление, что многие пользователи GNU/Linux слабо представляют, из чего сделана эта операционная система, поэтому утверждают, что она сляпана из попавшихся под руку кусков. В то же время, архитектура большинства дистрибутивов является устоявшейся и регламентируется рядом стандартов, включая стандарт графического окружения freedesktop.org и Linux Standard Base, расширяющий стандарты Unix. Мне при знакомстве с GNU/Linux несколько лет назад для погружения не хватало простой анатомической карты типичного дистрибутива, поэтому я попробую рассказать об этом сам.

Читать далее
Total votes 161: ↑161 and ↓0+161
Comments137

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