Search
Write a publication
Pull to refresh
13
0

Software Developer

Send message

Иммутабельность в C#

Reading time13 min
Views24K

В разработке программного обеспечения иммутабельным (immutable — неизменяемым) называется объект, который после своего создания не может быть изменен. Зачем вам может понадобиться такой объект? Чтобы ответить на этот вопрос, давайте проведем анализ проблем, которые могут возникнуть в результате мутации (изменения) объектов. Вернемся к основам того, что делает каждое приложение: создает, извлекает, обновляет и удаляет данные (CRUD-операции). Ядро любого приложения манипулирует объектами. Ответ на вопрос о том, работает ли приложение в соответствии со своей спецификацией, в первую очередь определяется правильностью обработки данных. Вам необходимо быть уверенными, что код работает правильно, каждый раз, когда он затрагивает какой-либо объект. 

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

Если ваше приложение является многопоточным, иммутабельность должна быть фундаментальной частью вашей архитектуры, поскольку неизменяемые объекты по своей природе являются потокобезопасными и невосприимчивыми к состояниям гонки. Если ваше приложение использует data transport objects (DTO — объекты передачи данных), вам также следует серьезно подойти к иммутабельности ваших объектов. Предметом дискуссий остается лишь то, как наиболее эффективно реализовать и работать с иммутабельными объектами, поскольку C# не предлагает встроенной поддержки таких объектов. Эта статья предлагает ответ на этот вопрос.

Читать далее

Сумачечая производительность LINQ в .Net7

Reading time3 min
Views15K

Исторически так сложилось, что LINQ взыскал "сомнительную" репутацию за его скромную производительность. LINQ медленный, аллоцирует память, сложно читается, поэтому обычно его используют как инструмент запросов к БД и то, зачастую сложные запросы легче написать на SQL. Даже на собеседованиях джунов просят не использовать LINQ в алгоритмах.

Однако в .NET 7 всё будет по-другому...

Подробней...

Почему Билл Гейтс сделал себя сам. Развенчиваем мифы о всемогущей матери

Reading time11 min
Views21K

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

Но всё это – полная ерунда. Сегодня поведаю вам о том, почему Билл Гейтс сделал себя сам, что предшествовало его работе с IBM, и почему его мать, при всем уважении к ней, была неспособна повлиять на его судьбу так, как это представляют в своих влажных мечтах многие наши соотечественники.

Пора разобраться с этим недоразумением раз и навсегда.

Читать далее

Как россиянину получить ВНЖ в Армении в 2025 году?

Reading time11 min
Views128K

На первый взгляд может показаться, что получать вид на жительство (ВНЖ) в Армении гражданину России вовсе не обязательно — ведь в стране разрешено находиться до 180 дней в году без оформления дополнительных документов. Но на практике все оказывается не так однозначно, и веские причины для оформления ВНЖ всё же существуют.

После февраля 2022 года российские граждане столкнулись с серьёзными ограничениями в финансовой сфере. Многие банки в Европе и других странах начали отказывать россиянам в открытии счетов или замораживали уже действующие. К этой тенденции присоединились крупные платёжные системы, криптовалютные платформы, инвестиционные сервисы, а также фриланс-биржи. Во многих случаях для продолжения работы с этими сущностями требуется предоставить документы, подтверждающие проживание за пределами России — одним из таких документов может быть именно ВНЖ.

Читать далее

Документы перед выездом из РФ

Reading time10 min
Views65K

Всем привет!

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

Топ документов возглавляет генеральная доверенность. Очень настоятельно прошу ее сделать на вашего родственника или на человека, которому вы безоговорочно доверяете, но который на какое-то время точно останется в России. Можно сделать доверенность на нескольких людей. Цена вопроса - в районе 2,500 рублей за 1 доверенность. При этом, человек, на которого вы оформляете доверенность может не присутствовать, вам понадобится только копия его паспорта (страница с фото + прописка).

Доверенность можно оформить на любой срок, хоть на 50 лет, нотариус запишет срок, который вы назовете. Также доверенность можно сделать с возможностью ее передоверия другому человеку: например, я оформила доверенность на Васю Пупкина с правом передоверия, а Вася Пупкин передоверил ее Ивану Иванову. Мероприятие рискованное, но если вы доверяете человеку и понимаете, что возможно он тоже через какое-то время покинет РФ - такой вариант для вас подойдет.

Важный момент: генеральная доверенность - вещь серьезная, поэтому ее в любой момент можно и нужно отменить.

Что входит в такую доверенность (если кратко):

Читать далее

Асинхронный код в Startup ASP.NET Core: 4 способа обхода GetAwaiter().GetResult()

Reading time8 min
Views22K
С тех пор, как в C# 5.0 завезли механизм async/await, нас постоянно во всех статьях и доках учат, что использовать асинхронный код в синхронном очень плохо. И призывают бояться как огня конструкции GetAwaiter().GetResult(). Однако есть один случай, когда сами программисты Microsoft не гнушаются этой конструкцией.


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

Про фразовые глаголы-4 (in/out)

Reading time4 min
Views16K
Перед этой статьёй рекомендуется прочитать две первые части:
1. habr.com/ru/post/495794
2. habr.com/ru/post/496190

Out соответствует русским приставкам со значениями «наружу» и «до конца, полностью»:

  • вы-: hear – «слушать». Hear me out! – Вы-слушай меня!
  • раз-/«рас-»: sell – «продать» sell out – рас-продать.
  • из- (со значением «до конца, полностью»): wear — «носить», wear out — из-носить/ся (об одежде/обуви, например).
  • из- (со значением «вы-» – наружу): hound – «охотничья собака», как глагол – «гнать» (зверя). Hound out – «из-гнать» (= «вы-гнать»). They hounded him out of Parliament – они из-гнали его из Парламента. Если держать в голове базовые значения глаголов kick (пинать) и boot (пинать ногой в сапоге), становится очевидно, почему ФГ kick out и boot out используются как синонимы hound out. Всегда буквально умоляю студентов держать в голове базовое значение глагола, из которого образуется фразовый. Слушаются не всегда… :(
Читать дальше →

Про фразовые глаголы-5 (up/down)

Reading time4 min
Views15K
Сначала рекомендуется прочитать предыдущие части:

1. habr.com/ru/post/495794
2. habr.com/ru/post/496190
4. habr.com/en/post/499368

Значение up «до конца, полностью» выражается (помимо приведённых в первой статье) русскими приставками:

из-/ис-: beat – «бить», beat up – «из-бить»; use – «пользовать», use up – ис-пользовать (какой-то ресурс до конца): Masha used up all of my shampoo.

от-: build – «строить», build up – «отстроить»; polish – «полировать», polish up – «от-полировать».

по-: hang – «вешать», hang up – «по-весить» (трубку). Show – «казать/являться», show up – «по-явиться». Vasya showed up on time – Вася пришёл/появился вовремя.

при- в значении приближения [к стандартам]: dress – «одеть», dress up – «при-одеть» (одеть подчёркнуто стильно или ярко). Masha was dressed up – Маша была приодета.

Dress out – «разодеть», только устаревшее. В данном случае up ≈ out, как в русском «при-» ≈ «раз-»: приоделась ≈ разоделась. Up акцентирует завершённость гардероба (наряда), out – содержит ещё лёгкую эмоциональную составляющую «преувеличенности» действия – «раз-одеть».

Dress up/dress out имеют бесчисленные синонимы: tog up = tog out, deck up = deck out, rig up = rig out, fig up = fig out, trick up = trick out. Есть даже fancy up и gussy up, но с out эти глаголы не употребляются.*
Читать дальше →

Как снизить зависимость кода от структуры данных?

Reading time7 min
Views9.8K

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

Читать далее

Big O нотация в Swift

Reading time3 min
Views14K

Данная статья поможет начинающим iOS разработчикам разобраться в производительности алгоритмов в Swift.

Обозначение Big O нотация (или просто Big O) — это способ оценки относительной производительности структуры данных или алгоритма, обычно по двум осям: времени и пространству.

Читать далее

Компилятор C# 10, .NET 6 и интерполяция строк

Reading time24 min
Views19K

К старту курса по разработке на C# делимся материалом из блога .NET о том, как компилятор C# 10 и .NET 6 упрощают программирование, как они обращаются с форматированием, а также о причинах конкретных решений команды .NET. И это далеко не всё. За подробностями приглашаем под кат.

Читать далее

Исследуем .NET 6. Часть 5. Поддержка EF Core в WebApplicationBuilder

Reading time10 min
Views6.2K

До сих пор в этой серии я рассматривал новые минимальные API хостинга, созданные с использованием WebApplication и WebApplicationBuilder. Они обеспечивают более простую модель для создания веб-приложений, сохраняя при этом те же общие функциональные возможности, что и приложения .NET Core 3.x/5 на основе универсального хоста.

Однако c этим упрощением есть проблемы. Более сложный код запуска в ранних версиях, обычно разделённый между Program.cs и Startup, имел преимущества, так как он предоставлял хорошо известные точки расширения (hooks), которые инструменты могли использовать для перехвата процесса запуска приложения.

Классическим примером этого является инструментарий EF Core*EN. Если вы когда-либо использовали EF Core, возможно, вы знакомы с проблемами, возникающими при попытке изменить код запуска. А уж когда фреймворк меняет свой код запуска по умолчанию, понятно, что без проблем не обойтись!

Читать далее

Исследуем .NET 6. Часть 4. Создание конвейера промежуточного ПО в WebApplication

Reading time10 min
Views7K

В моем предыдущем посте я рассмотрел код WebApplicationBuilder, включая некоторые из его вспомогательных классов, таких как ConfigureHostBuilder и BootstrapHostBuilder. В конце поста мы создали экземпляр WebApplicationBuilder и вызвали Build() для создания WebApplication. В этом посте мы немного рассмотрим код, лежащий в основе WebApplication, и сосредоточимся на настройке промежуточного ПО и конечных точек.

Читать далее

Исследуем .NET 6. Часть 3. Рассматриваем код WebApplicationBuilder

Reading time15 min
Views9.7K

Часть 1. ConfigurationManager
Часть 2. WebApplicationBuilder

В предыдущем посте я сравнивал новый WebApplication с универсальным хостом. В этом посте я рассмотрю код, лежащий в основе WebApplicationBuilder, чтобы увидеть, как он обеспечивает более чистый, минимальный API хостинга, при этом обеспечивая ту же функциональность, что и универсальный хост.

Читать далее

Исследуем .NET 6. Часть 2. WebApplicationBuilder

Reading time11 min
Views27K

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

Часть 1. ConfigurationManager

Читать далее

Исследуем .NET 6. Часть 1

Reading time10 min
Views23K

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

Читать далее

Очень типобезопасно! Концепт продвинутой расширяемой системы единиц измерения с generic math для .NET

Reading time3 min
Views5.1K

Что может быть лучше десятка пары часов проведенных с дженериками и compile time safety в C#?

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

Читать далее

4 года Q#

Reading time3 min
Views6.6K

В этой статье мы решили собрать все самые важные новинки в языке Q# за этот год. Среди них Azure Quantum, QIR Alliance, Python и многое другое. Подробности под катом.

Здесь вы можете увидеть все примечания к выпускам за год.

Читать далее

Структурное логирование и интерполированные строки в C# 10

Level of difficultyMedium
Reading time11 min
Views30K

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

Читать далее

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

Level of difficultyEasy
Reading time10 min
Views94K

Декабрь 2020, вторая волна Ковида в разгаре. Я ПМ на удаленке в Американской компании. После похорон отца в Тбилиси я находился в прострации, надо было возвращаться в США и как-то менять своё положение, ведь денег, которых я зарабатывал явно не хватало на нормальную жизнь. Сами воспоминания о моём предыдущем поиске вызывали во мне холодный озноб и какой-то внутренний голос тихо шептал «подожди, сейчас пандемия, многие и о таком мечтают, как-нибудь выкрутишься…».

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

Я зарегистрировал себе американский номер в Google Voice, чтобы мне начали звонить рекрутеры и начал рассылать резюме. Я разослал около сотни адаптированных резюме и указал в LinkedIn что активно ищу работу. Постепенно на меня начали выходить рекрутеры небольших компаний, но я понимал, что в них условия будут в лучшем случае на 40% лучше текущей и это все равно не решало моих проблем. Хоть и казалось, что на LinkedIn висят тысячи позиций, однако основных работодателей я этим исчерпал. Подавался я в основном на Sr. Project Manager или Engineering Manager позиции.

Осознание пришло, когда я стал читать teamblind.com – лучший ресурс в США по анализу рынка в ИТ и levels.fyi где можно посмотреть реальные зарплаты. Раньше я читал Glassdoor, но информация на нем устарела.

Оказалось, что в финансовой сфере в США, которая мне была интересна - плохие условия и токсичная культура, тоже самое в консалтинге кроме компаний из Big4 или MBB где надо работать долгие часы, но возможно получать 1+ миллион долларов в год дослужившись до партнёра. Самыми интересными оказались компании, которые называют FAANG (Fb, Apple, Amazon, Netflix, Google) иногда в место этого списка используют FAANGMULA справедливо добавляя туда Microsoft, Uber, Lyft и Airbnb – все они технологические, инновационные компании не просто создающие бизнес-продукты, но и технологии, которыми пользуются весь мир. Компании, создающие де-факто стандарты разработки цифровых продуктов, инвестирующие в научные исследования, создающие легендарные условия для своих сотрудников, чем привлекают умнейших инженеров и ученных со всего мира.

Читать далее

Information

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