Как стать автором
Обновить
8
Карма
0
Рейтинг
Кирилл Белов @KirillBelovTest

Инженер по автоматизации тестирования

  • Подписчики 2
  • Подписки 2
  • Публикации
  • Комментарии

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

Блог компании Dodo Engineering.NETAPIC#
Tutorial

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

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

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

Читать далее
Всего голосов 15: ↑13 и ↓2+11
Просмотры11K
Комментарии 4

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

.NETC#

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

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

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

Читать далее
Всего голосов 14: ↑13 и ↓1+12
Просмотры8.6K
Комментарии 4

Запуск тестов Selenium в Jenkins

Блог компании RUVDS.comТестирование IT-системПрограммированиеDevOps
Перевод
Tutorial
В наши дни понятие «DevOps» у всех на слуху. Это — организационный подход, широко используемый для ускорения разработки и развёртывания приложений. Организации внедряют у себя практики DevOps, так как они обещают дать тем, кто их использует, всё лучшее, что существует в мире разработки ПО, причём — на всех этапах работы — от планирования и тестирования, до развёртывания и мониторинга проектов. В реализации практик DevOps важную роль играют CI/CD-инструменты вроде Jenkins. А интеграция Jenkins с Selenium значительно облегчает процесс автоматизации Selenium-тестов.



В этом материале я расскажу о том, что такое Jenkins и Selenium, и остановлюсь на методах их интеграции. Если у вас уже есть некоторый опыт работы с этими системами, но вы интересуетесь тем, как наладить их совместную работу, вы можете сразу же перейти к соответствующему разделу.
Читать дальше →
Всего голосов 45: ↑42 и ↓3+39
Просмотры6.2K
Комментарии 4

Мои machine learning тулы для инвестирования

Блог компании Open Data ScienceData MiningМашинное обучениеВенчурные инвестицииИскусственный интеллект

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

Читать далее
Всего голосов 55: ↑54 и ↓1+53
Просмотры23K
Комментарии 38

Монада «Maybe» через async/await в C# (без Task-oв!)

.NETC#Функциональное программирование
Перевод


Обобщенные асинхронные типы возвращаемых значений — это новая возможность появившаяся в C# 7, которая позволяет использовать не только Task в качестве возвращаемого типа асинхронных (async/await) методов, но также и любые другие типы (классы или структуры), удовлетворяющие определенным требованиям.


В то же время async/await — это способ последовательно вызвать некий набор функций внутри некоторого контекста, что является сущностью шаблона проектирования Монада. Возникает вопрос, можем ли мы использовать async/await для написания кода, который будет вести себя так же, как если бы мы использовали монады? Оказывается, что да (с некоторыми оговорками). Например, приведенный ниже код компилируется и работает:


async Task Main()
{
  foreach (var s in new[] { "1,2", "3,7,1", null, "1" })
  {
      var res = await Sum(s).GetMaybeResult();
      Console.WriteLine(res.IsNothing ? "Nothing" : res.GetValue().ToString());
  }
  // 3, 11, Nothing, Nothing
}

async Maybe<int> Sum(string input)
{
    var args = await Split(input);//Нет проверки результата
    var result = 0;
    foreach (var arg in args)
        result += await Parse(arg);//Нет проверки результата
    return result;
}

Maybe<string[]> Split(string str)
{
  var parts = str?.Split(',').Where(s=>!string.IsNullOrWhiteSpace(s)).ToArray();
  return parts == null || parts.Length < 2 ? Maybe<string[]>.Nothing() : parts;
}

Maybe<int> Parse(string str)
    => int.TryParse(str, out var result) ? result : Maybe<int>.Nothing();

Далее я объясняю, как работает этот код ...

Читать дальше →
Всего голосов 21: ↑20 и ↓1+19
Просмотры11K
Комментарии 29

Фундаментальная теория тестирования

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


Читать дальше →
Всего голосов 13: ↑12 и ↓1+11
Просмотры75K
Комментарии 4

Смотрим любое кино мгновенно

МикроформатыДецентрализованные сетиРасширения для браузеровУправление медиа

После ареста серверов Moonwalk жить стало в разы труднее. Лично я уже совсем отвык от торрентов. Нужно что-то качать, ждать, чем-то открывать, куда-то кликать, иногда еще и место на диске кончается. Как можно ждать час пока скачается фильм? За час можно жизнь прожить. Пришлось искать решение, которое позволит смотреть кино также просто, как и раньше. Норматив: от идеи посмотреть что-нибудь до начала просмотра - не более минуты.

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

Читать далее
Всего голосов 94: ↑80 и ↓14+66
Просмотры80K
Комментарии 265

О фейковых криптовалютах (Ethereum, Tron, Ripple и пр)

Платежные системыКриптовалюты

К сожалению, концепция криптовалют, несмотря на своё изящество, не нашла понимания у основной массы пользователей. "Среднему пользователю" неважно, лежат ли его деньги в распределённом блокчейне или на каком-то конкретном сайте. Для него это всё равно "где-то в сети". Когда деньги на сайте - даже спокойнее, потому что понятно, кто за него отвечает, в случае чего можно поругаться или написать в соцсети о том, какие они негодяи, или даже подать в суд, а если деньги "потерялись" в блокчейне, то и пожаловаться некому. Пользователи, покупающие биткоины, не хранят приватные ключи у себя, а в основном делегируют это посторонним сайтам, потому для них разницы действительно нет. А даже если хранят у себя - сначала ведь этот ключ они где-то генерируют, и потом скачивают. Понятно, что это уже не полностью их ключ. В результате распространяются слухи о "взломе биткоина", когда деньги уходят хакерам, и подобные байки. С другой стороны, умные и авторитетные люди объясняют, что блокчейн и построенные на нём криптовалюты - это надёжно и правильно, и не верить им нет оснований.

Это закономерно привело к появлению муляжей криптовалют, которые якобы используют те же технологии, но при этом дают преференции их создателям, т.е. не такие уж децентрализованные. Для пользователей всё равно, а создателям профит. Самый распространённый из таких муляжей - Ethereum.

Читать далее
Всего голосов 286: ↑261 и ↓25+236
Просмотры243K
Комментарии 522

Спросите Итана: пространство-время – реальная сущность или просто концепция?

Научно-популярноеФизика
Перевод

Схема сильного искривления пространства-времени вблизи горизонта событий чёрной дыры. Чем ближе вы приближаетесь к массивному телу, тем сильнее искривляется пространство. В итоге вы оказываетесь в таком месте, откуда не может убежать даже свет: внутри горизонта событий.

Большинство людей, думая о Вселенной, представляют себе материальные объекты, находящиеся на огромных космических расстояниях друг от друга. Под действием собственной гравитации материя схлопывается, формируя такие космические структуры, как галактики. Газовые облака, сжимаясь, порождают звёзды и планеты. Звёзды испускают свет, сжигая топливо в реакциях ядерного синтеза. Этот свет проходит по всей Вселенной, подсвечивая всё, на что натолкнётся. Однако Вселенная – это не только объекты внутри неё. Есть ещё и ткань пространства-времени, играющая по своим правилам – по правилам общей теории относительности (ОТО). Ткань пространства-времени искривляется в присутствии материи и энергии, при этом само искривление ткани пространства-времени диктует материи и энергии, как им двигаться. Но что такое, конкретно, пространство-время – это нечто «реальное», или просто облегчающий подсчёты инструмент? Об этом нас спрашивает читатель:
Что именно представляет собой пространство-время? Это реальная штука типа атомов, или математический конструкт, используемый для описания того, как масса «порождает» гравитацию?


Отличный вопрос, а его тема достаточно сложна для размышлений. Более того, до появления Эйнштейна наше представление о Вселенной сильно отличалось от текущего. Давайте вернёмся в далёкое прошлое Вселенной, когда у нас ещё не было концепции пространства-времени, и будем двигаться вперёд, до сегодняшнего дня.
Читать дальше →
Всего голосов 31: ↑29 и ↓2+27
Просмотры11K
Комментарии 43

Вышел Windows Terminal Preview 1.6

Блог компании MicrosoftНастройка LinuxСистемное администрирование.NETРазработка под Windows

Добро пожаловать на наш первый релиз Windows Terminal 2021 года! Этот релиз приносит новые функции для Windows Терминал Preview 1.6, а также перемещает Windows Терминал в версию 1.5, которая включает в себя функции из этой статьи. Вы можете загрузить обе версии из Microsoft Store или со страницы релизов GitHub. Ниже приведены некоторые из основных моментов в этом выпуске, однако мы рекомендуем изучить полные заметки о релизе, чтобы узнать все, что улучшилось с версией 1.6.

Читать далее
Всего голосов 26: ↑24 и ↓2+22
Просмотры13K
Комментарии 19

В чём разница между узлом и элементом DOM?

Блог компании RUVDS.comРазработка веб-сайтовHTML
Перевод
Объектная модель документа (Document Object Model, DOM) — это интерфейс, который рассматривает HTML- или XML-документы в виде древовидных структур, каждый узел которых является объектом документа. DOM, кроме того, предоставляет набор методов для выполнения запросов к дереву документа, для изменения его структуры и для выполнения с ним некоторых других действий.



При работе с DOM, кроме того, используется термин «элемент». Элементы очень похожи на узлы, но, всё же, это — не одно и то же. В чём же разница?
Читать дальше →
Всего голосов 51: ↑47 и ↓4+43
Просмотры19K
Комментарии 7

Наследование в Nuget-пакетах

Блог компании Райффайзенбанк.NETООП
image

Nuget-пакет — это не только архив с переиспользуемыми сборками, но и контент с target-скриптами, которые задают поведение MsBuild при сборке приложения. Это дает нам возможность рассматривать nuget-пакет в качестве самостоятельного объекта, у которого есть состояние и поведение.

А раз у нас есть объект, то что мешает попробовать посмотреть на работу с ним со стороны объектно-ориентированной парадигмы? Давайте попробуем применить для nuget-пакетов один из основных принципов ООП — наследование.
Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Просмотры3.1K
Комментарии 7

Selenium + AutoIT. Автоматизация тестирования Windows окон

Блог компании Digital DesignТестирование IT-системТестирование веб-сервисов
Tutorial
Меня зовут Иван Сидоренко, я инженер по тестированию в компании Digital Design.

Передо мной стояла задача разработки авто-тестов для одного из наших проектов с помощью инструмента Selenium WebDriver на языке Java. Подробнее про это вы можете прочитать в моей прошлой статье

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


Читать дальше →
Всего голосов 4: ↑3 и ↓1+2
Просмотры3.8K
Комментарии 7

Атрибуты C#: обо всех аспектах

.NETC#ООП
Здравствуй, читатель. В этой статье описаны атрибуты со всех сторон — начиная от спецификации, смысла и определения атрибутов, создания собственных и работе с ними, заканчивая добавлением атрибутов на рантайме и наиболее полезными и интересными существующими атрибутами. Если вам интересна тема атрибутов в C#, то добро пожаловать под кат.

Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Просмотры19K
Комментарии 1

Парсинг telegram каналов для агрегатора контента на PHP

PHPРазвитие стартапа
Из песочницы
Tutorial
Recovery mode
Привет, Хабр!

Несколько лет назад я начал разрабатывать свой агрегатор контента, что бы упростить свой серфинг в сети. Изначально я парсил только rss, vk и facebook, но в прошлом году решил сделать полный рефакторинг проекта: отказаться от парсинга на клиенте, сделать нормальный back-end, использовать базу данных для хранения данных и расширить список поддерживаемых ресурсов.

Помимо стандартного набора из rss, fb, vk, twitter, instagram, youtube я добавил поддержку произвольных открытых каналов из telegram.

image

Под катом пошаговая инструкция, как парсить любые каналы в telegram без регистрации и смс.
Читать дальше →
Всего голосов 21: ↑14 и ↓7+7
Просмотры54K
Комментарии 26

Вы безумны, остановитесь пока не поздно

ПрограммированиеУчебный процесс в ITКарьера в IT-индустрииIT-компании
Из песочницы
image

Привет Хабр! Всего каких-то пару лет назад на страницах нашего любимого ресурса красовались вдохновляющие статьи успешного успеха, как вчерашний сантехник / таксист / сварщик / сутенёр успешно интегрировался в IT сообщество и начал зарабатывать 100500$ в секунду левой пяткой. Здорово, не правда ли? Но всё ли так радужно с этими историями с точки зрения действующих разработчиков? Прошу под кат.
Читать дальше →
Всего голосов 300: ↑269 и ↓31+238
Просмотры148K
Комментарии 893

Jupyter для .NET. «Как в питоне»

.NETC#МатематикаF#
Несколько месяцев назад Microsoft рассказали о Jupyter в .NET. Но активности по этому топику очень мало, а ведь тема очень интересная. Но что такое прикольное придумать? Я решил сделать удобный вывод класса Entity из библиотеки символьной алгебры:



Выглядит круче, чем в питоне. Делается просто, доставляет массу удовольствия. Приглашаю под кат!
Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Просмотры6.9K
Комментарии 11

50 вопросов по Docker, которые задают на собеседованиях, и ответы на них

Блог компании SouthbridgeКарьера в IT-индустрии
Перевод


Docker, первый выпуск которого был еще в 2013 году, — весьма удобный инструмент для сборки пакетов, поставки и запуска приложений в «контейнерах». Большинство крупных компаний, например, Google, Amazon и VMware рассматривают Docker как зрелую технологию для контейнеров, поэтому сейчас самое время изучить этот инструмент и в результате продвинуться по карьерной лестнице. Хотите? В статье будут приведены вопросы по Docker, ответы на которые нужно знать, если вы идете на собеседование.

Читать дальше →
Всего голосов 24: ↑16 и ↓8+8
Просмотры27K
Комментарии 18

Нелинейный мир и инструменты для расчета сложных нелинейных задач методом конечных элементов

Блог компании НанософтАнализ и проектирование системРабота с 3D-графикойАлгоритмыCAD/CAM
Привет, Хабр! В названии этой статьи есть словосочетание «нелинейный мир»… Думаю, что большинство читателей поняли смысл этого словосочетания, но я всё же расшифрую его.

Реальные системы можно рассматривать как линейные только в ограниченном диапазоне нагрузок. Реальный же мир вокруг нас нелинеен (рис. 1). Нелинейность есть нарушение принципа суперпозиции в некотором явлении (механической системе): результат действия суммы факторов не равен сумме результатов от отдельных факторов. Однако по разным причинам, в том числе в связи с отсутствием необходимых знаний, навыков моделирования, необходимого программного обеспечения, инженеры зачастую решают задачи только в линейных постановках. Даже когда линейный подход дает очень большие погрешности. Точное же моделирование поведения системы часто требует проведения нелинейного анализа.


Рис. 1
Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Просмотры3.2K
Комментарии 6

XPATH + XML = быстрая обработка

Программирование


При выполнении запросов язык XPath оперирует такими сущностями как узлы. Узлы бывают нескольких видов: element (узел-элемент), attribute (узел-атрибут), text (узел-текст), namespace (узел-пространство имён), processing-instruction (узел-исполняемая инструкция), comment (узел-комментарий), document (узел-документ).

Рассмотрим, как в XPATH задаётся последовательность узлов, направления выборки и выбирать узлы с конкретными значениями.
Читать дальше →
Всего голосов 9: ↑7 и ↓2+5
Просмотры4K
Комментарии 8

Информация

В рейтинге
Не участвует
Откуда
Саратов, Саратовская обл., Россия
Зарегистрирован
Активность