Как стать автором
Обновить
1
0
Александр Моргунов @therealmoronto

.NET Developer

Отправить сообщение

.NET Core Workers as Windows Services

Время на прочтение3 мин
Количество просмотров13K
In .NET Core 3.0 we are introducing a new type of application template called Worker Service. This template is intended to give you a starting point for writing long running services in .NET Core. In this walkthrough we will create a worker and run it as a Windows Service.

Read more →
Всего голосов 8: ↑7 и ↓1+6
Комментарии0

Интересные моменты в C# (boxing unboxing)

Время на прочтение2 мин
Количество просмотров73K
В этой статье мы коротко пройдемся по малоизвестным особенностям boxing/unboxing.

Предыдущая статья о foreach
Предыдущая статья об Array

Типичный вопрос на собеседовании об упаковке и распаковке выглядит следующим образом — «Что будет при запуске данного кода, и если он не будет работать то как его исправить?».

Тестовый код:
object box = (int)42;
long unbox = (long)box;

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

Правильный ответ:
object box = (int)42;
long unbox = (long)(int)box;

Обычно это считается правильным ответом, но это не совсем так…
Читать дальше →
Всего голосов 40: ↑29 и ↓11+18
Комментарии10

Почему программист поменял работу?

Время на прочтение13 мин
Количество просмотров14K

По мнению абсолютного большинства жителей этой планеты, разработчики это - какие-то зажравшиеся люди, которые сидят в своих уютных креслах, занимаются какой-то фигнёй и получают за это непомерные деньги. Эталонные тепличные условия и голубая мечта, которая выродилась в пренебрежительное “Войти в айти”. Но если предположить, что всё действительно так, как принято считать - и стул удобный, и денег платят много, и работа интересная - то почему же программисты, как и все остальные люди, иногда меняют место работы? Может быть, недостаточно платили? Или кресло было не такое удобное? Что-то же должно побудить человека, у которого всё хорошо (по мнению окружающих), выйти из зоны комфорта и пойти искать новое место работы. И что именно он ищет на этом новом месте? Давайте поговорим об этом. И да, многое здесь может показаться банальным, но почему-то достаточное количество людей предпочитают не брать в расчёт и половину из этих банальностей. Или делают вид, что им всё равно.

Читать далее
Всего голосов 21: ↑15 и ↓6+14
Комментарии23

Принципы работы IQueryable и LINQ-провайдеров данных

Время на прочтение8 мин
Количество просмотров76K
Средства LINQ позволяют .Net-разработчикам единообразно работать как с коллекциями объектов в памяти, так и с объектами, хранящимися в базе данных или ином удаленном источнике. Например, для запроса десяти красных яблок из списка в памяти и из БД средствами Entity Framework мы можем использовать абсолютно идентичный код:

List<Apple> appleList; 
DbSet<Apple> appleDbSet;
var applesFromList = appleList.Where(apple => apple.Color == “red”).Take(10);
var applesFromDb = appleDbSet.Where(apple => apple.Color == “red”).Take(10);

Однако, выполняются эти запросы по-разному. В первом случае при перечислении результата с помощью foreach яблоки будут отфильтрованы с помощью заданного предиката, после чего будут взяты первые 10 из них. Во втором случае синтаксическое дерево с выражением запроса будет передано специальному LINQ-провайдеру, который транслирует его в SQL-запрос к базе данных и выполнит, после чего сформирует для 10 найденных записей объекты С# и вернет их. Обеспечить такое поведение позволяет интерфейс IQueryable<T>, предназначенный для создания LINQ-провайдеров к внешним источникам данных. Ниже мы попробуем разобраться с принципами организации и использования этого интерфейса.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии3

Bloody hell и другие английские выражения, которые помогут сойти за британца

Время на прочтение6 мин
Количество просмотров34K

Британский и американский английский — это по факту два совершенно разных языка, которые всего лишь сильно похожи друг на друга. Они ведь уже почти 250 лет развиваются отдельно, со времен обретения США независимости. 

Мы уже ранее писали материал о том, какие фразы использовать, чтобы речь была больше похожей на американскую. А британцев обделили. 

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

Читать далее
Всего голосов 24: ↑24 и ↓0+24
Комментарии34

Почему в Visual Studio стек вызовов асинхронного кода иногда перевёрнут?

Время на прочтение5 мин
Количество просмотров6.4K

Вместе с моим коллегой Евгением мы потратили много времени. Приложение обрабатывает тысячи запросов в асинхронном конвейере, полном async/await. Во время нашего исследования мы получили странные вызовы, они выглядели как бы “перевернутыми”. Специально к старту нового потока курса по разработке на C#, рассказываем, почему вызовы могут оказаться перевёрнутыми даже в Visual Studio.

Читать далее
Всего голосов 11: ↑9 и ↓2+9
Комментарии2

Преобразуем миры Minecraft в трёхмерные фотореалистичные сцены с помощью нейросетей

Время на прочтение6 мин
Количество просмотров13K


Мы представляем GANcraft — работающий без участия человека фреймворк нейронного рендеринга для генерации фотореалистичных изображений больших миров из 3D-блоков, например, таких, которые созданы в Minecraft. Наша система получает на входе мир из семантических блоков, в котором каждому блоку назначена метка, например, «земля», «дерево», «трава», «песок» или «вода».

Мы задаём мир как непрерывную объёмную функцию и обучаем нашу модель рендерингу фотореалистичных изображений с сохранением внешнего вида с произвольных точек обзора без наличия реальных изображений блочного мира.

Кроме позиции камеры, GANcraft позволяет пользователю задавать семантику и стиль сцены.
Всего голосов 20: ↑19 и ↓1+26
Комментарии8
Понятие «софт-скилы» стало популярно лет пять назад. А вот зародилось ещё в середине прошлого века, когда армии США понадобилось улучшить качество коммуникаций между военными.

В списке «софтов» — лидерство, коммуникативность, умение убеждать и подобные им качества. Вроде бы просто и понятно. Но ещё в семидесятых один офицер с иронией заметил: «Софт-скилы — просто те навыки, о которых мы мало понимаем». В офисных войсках в «софтах» тоже разбираются не все, несмотря на обилие коучей, тренингов и книг.

Мы расспросили о софт-скилах людей, которые часто их применяют, — «рядовых» и «офицеров» IT-подразделений Rambler Group. В этом материале — их очень разные мнения о том, какие «софты» полезны айтишнику и зачем они нужны, и опрос, который покажет, чья позиция ближе Хабру.
А на чьей стороне вы?
Всего голосов 26: ↑15 и ↓11+27
Комментарии11

Async/await в C#: концепция, внутреннее устройство, полезные приемы

Время на прочтение24 мин
Количество просмотров228K
Доброго времени суток. В этот раз поговорим на тему, в которой начинал разбираться каждый уважающий себя адепт языка C# — асинхронное программирование с использованием Task или, в простонародье, async/await. Microsoft проделали хорошую работу — ведь для того, чтобы использовать асинхронность в большинстве случаев нужно лишь знание синтаксиса и никаких других подробностей. Но если лезть вглубь, тема довольно объемная и сложная. Ее излагали многие, каждый в своем стиле. Есть очень много классных статей по этой теме, но все равно существует масса заблуждений вокруг нее. Постараемся исправить положение и разжевать материал настолько, насколько это возможно, не жертвуя ни глубиной, ни пониманием.


Читать дальше →
Всего голосов 34: ↑32 и ↓2+30
Комментарии27

Особенности строк в .NET

Время на прочтение10 мин
Количество просмотров106K
Строковый тип данных является одним из самых важных в любом языке программировании. Вряд ли можно написать полезную программу не задействовав этот тип данных. При этом многие разработчики не знают некоторых нюансов связанных с этим типом. Поэтому давайте рассмотрим кое-какие особенности этого типа в .NET.

Итак, начнем с представления строк в памяти


В.NET строки располагаются согласно правилу BSTR (Basic string or binary string). Данный способ представления строковых данных используется в COM (слово basic от языка программирования VisualBasic, в котором он первоначально использовался). Как известно в C/C++ для представления строк используется PWSZ, что расшифровывается как Pointer to Wide-character String, Zero-terminated. При таком расположении в памяти в конце строки находится null-терминированный символ, по которому мы можем определить конец строки. Длина строки в PWSZ ограничена лишь объемом свободной памяти.
Читать дальше →
Всего голосов 83: ↑78 и ↓5+73
Комментарии34

Популярные заблуждения о C#

Время на прочтение11 мин
Количество просмотров71K

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

Читать далее
Всего голосов 74: ↑71 и ↓3+87
Комментарии63

Шпаргалка для собеседования .Net

Время на прочтение9 мин
Количество просмотров104K

Однажды (давно это было) мы с 3-мя коллегами решили на интерес проходить собеседования, вакансии отбирали уровня middle. Занимались этим недели 2, по нескольку собеседований в неделю каждый.

В результате получился список тем по .Net, которые спрашивают на собеседованиях.

Читать далее
Всего голосов 17: ↑11 и ↓6+10
Комментарии0

Руководство по Docker Compose для начинающих

Время на прочтение9 мин
Количество просмотров865K
Автор статьи, перевод которой мы сегодня публикуем, говорит, что она предназначена для тех разработчиков, которые хотят изучить Docker Compose и идут к тому, чтобы создать своё первое клиент-серверное приложение с использованием Docker. Предполагается, что читатель этого материала знаком с основами Docker. Если это не так — можете взглянуть на эту серию материалов, на эту публикацию, где основы Docker рассмотрены вместе с основами Kubernetes, и на эту статью для начинающих.

image
Читать дальше →
Всего голосов 40: ↑37 и ↓3+34
Комментарии14

Под капотом у Dictionary и ConcurrentDictionary

Время на прочтение5 мин
Количество просмотров174K
Некоторое время назад, я решил, что хочу знать больше подробностей о работе многопоточности в .NET и что я уделял этому незаслуженно мало внимания в прошлом. Информации на эту тему великое множество (отправной точкой я для себя выбрал этот раздел книги «C# in a nutshell»), но, как оказалось, только малая часть ресурсов пытаются объяснить что-то в деталях.

Каждый мастер должен знать свои инструменты, а что может использоваться чаще коллекций? Поэтому я решил сделать небольшой обзор многопоточных коллекций и начать с ConcurrentDictionary (беглый обзор уже встречался здесь, но его там совсем мало). Вообще, я несколько удивился, что такой статьи для .NET еще нет (зато хватает по Java).

Итак, поехали.
Читать дальше →
Всего голосов 58: ↑57 и ↓1+56
Комментарии31

Юнит-тестирование для чайников

Время на прочтение15 мин
Количество просмотров1.1M
Даже если вы никогда в жизни не думали, что занимаетесь тестированием, вы это делаете. Вы собираете свое приложение, нажимаете кнопку и проверяете, соответствует ли полученный результат вашим ожиданиям. Достаточно часто в приложении можно встретить формочки с кнопкой “Test it” или классы с названием TestController или MyServiceTestClient.



То что вы делаете, называется интеграционным тестированием. Современные приложения достаточно сложны и содержат множество зависимостей. Интеграционное тестирование проверяет, что несколько компонентов системы работают вместе правильно.

Оно выполняет свою задачу, но сложно для автоматизации. Как правило, тесты требуют, чтобы вся или почти вся система была развернута и сконфигурирована на машине, на которой они выполняются. Предположим, что вы разрабатываете web-приложение с UI и веб-сервисами. Минимальная комплектация, которая вам потребуется: браузер, веб-сервер, правильно настроенные веб-сервисы и база данных. На практике все еще сложнее. Разворачивать всё это на билд-сервере и всех машинах разработчиков?

We need to go deeper
Всего голосов 70: ↑63 и ↓7+56
Комментарии65

Каково работать вместе с очень ужасным разработчиком

Время на прочтение6 мин
Количество просмотров22K


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

В былые времена у всех, от стажёра отдела QA до руководства, имелся какой-нибудь опыт кодинга. Те времена давно уже миновали, и теперь у нас есть несколько уровней «мастеров» методологии и менеджеров, за свою жизнь не написавших ни строки, считающих любые жалобы на чужую работу самовольством и личными конфликтами, а также не принимающих никакой критики своих технических навыков.

Если я скажу, что тот или иной член команды халтурит, и даже объясню всё вежливо и с техническими подробностями, менеджеры воспримут это как «ссору» и сосредоточат всё своё внимание на сплочённости коллектива, подразумевая, что проблемы создаю именно я.
Читать дальше →
Всего голосов 44: ↑32 и ↓12+32
Комментарии66

Почему вы никогда не должны соглашаться на собеседования с программированием

Время на прочтение5 мин
Количество просмотров75K
Собеседование инженера программиста сегодня часто включает в себя некий тест или упражнение на программирование, и я думаю, что это очень плохая вещь. Вот почему.


Приятного чтения!
Всего голосов 74: ↑53 и ↓21+52
Комментарии283

Сравнение C# и JavaScript. Основы

Время на прочтение11 мин
Количество просмотров46K

C# and JavaScript


Мой более-менее серьезный путь в программировании начался с написания программ на языке C#, иногда я пробовал писать на JavaScript, и то и дело впадал в ступор в таких ситуациях, когда неверно указывал имя переменной и узнавал об этом спустя много много лет час отладки, так как со мной рядом не было моего компилятора, который бы меня выручил в трудную минуту. Через некоторое время, помимо C# я начал писать много кода на JavaScript и в настоящее время могу делать это без особых трудностей, меня больше не смущает неявное приведение типов и динамическая типизация.


В данной статье я бы хотел систематизировать свои базовые знания об этих языках и рассмотреть их сходства и различия. Данная статья может служить руководством для C# разработчиков, которые хотят изучить JavaScript и наоборот. Также хочу заметить, что в данной статье описываются возможности клиентского JS, так как опыта разработки на Node.js у меня нет. Итак, если вы все ещё не потеряли интерес — приступим.

Читать дальше →
Всего голосов 37: ↑20 и ↓17+3
Комментарии30

Библиотека Frontend-разработчика, часть 2: Интернет-ресурсы

Время на прочтение4 мин
Количество просмотров10K

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

Ну, удиви
Всего голосов 7: ↑7 и ↓0+7
Комментарии3

Дайджест свежих материалов из мира фронтенда за последнюю неделю №447 (21 — 27 декабря 2020)

Время на прочтение3 мин
Количество просмотров8.4K
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него.

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

Информация

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