Pull to refresh
1
0
Александр Моргунов @therealmoronto

.NET Developer

Send message

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

Reading time2 min
Views73K
В этой статье мы коротко пройдемся по малоизвестным особенностям boxing/unboxing.

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

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

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

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

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

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

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

Reading time13 min
Views14K

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

Читать далее
Total votes 21: ↑15 and ↓6+14
Comments23

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

Reading time8 min
Views77K
Средства 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-провайдеров к внешним источникам данных. Ниже мы попробуем разобраться с принципами организации и использования этого интерфейса.
Читать дальше →
Total votes 26: ↑26 and ↓0+26
Comments3

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

Reading time6 min
Views34K

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

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

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

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

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

Reading time5 min
Views6.4K

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

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

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

Reading time6 min
Views13K


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

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

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

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

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

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

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


Читать дальше →
Total votes 34: ↑32 and ↓2+30
Comments27

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

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

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


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

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

Reading time9 min
Views104K

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

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

Читать далее
Total votes 17: ↑11 and ↓6+10
Comments0

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

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

image
Читать дальше →
Total votes 40: ↑37 and ↓3+34
Comments14

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

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

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

Итак, поехали.
Читать дальше →
Total votes 58: ↑57 and ↓1+56
Comments31

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

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



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

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

We need to go deeper
Total votes 70: ↑63 and ↓7+56
Comments65

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

Reading time6 min
Views22K


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

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

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

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

Reading time5 min
Views75K
Собеседование инженера программиста сегодня часто включает в себя некий тест или упражнение на программирование, и я думаю, что это очень плохая вещь. Вот почему.


Приятного чтения!
Total votes 74: ↑53 and ↓21+52
Comments283

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

Reading time11 min
Views47K

C# and JavaScript


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


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

Читать дальше →
Total votes 37: ↑20 and ↓17+3
Comments30

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

Reading time4 min
Views10K

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

Ну, удиви
Total votes 7: ↑7 and ↓0+7
Comments3

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

Reading time3 min
Views8.4K
Предлагаем вашему вниманию подборку с ссылками на новые материалы из области фронтенда и около него.

Читать дальше →
Total votes 24: ↑24 and ↓0+24
Comments2
1

Information

Rating
Does not participate
Location
Yerevan, Yerevan, Армения
Date of birth
Registered
Activity