Pull to refresh
28
0.5

Погромист на csharp

Send message

Динамические методы в .NET

Level of difficulty Medium
Reading time 9 min
Views 14K

На сегодняшний день в.NET существует несколько видов кодогенерации: новомодные Source Generators, компилируемые Expression Trees, динамические сборки и динамические методы. Каждый способ имеет свои области применения, плюсы и минусы.

В этой статье я хочу рассказать про динамические методы. Мы разберёмся как создавать их, как работает стековая машина и рассмотрим некоторые базовые операции Common Intermediate Language: работу с константами, математические и битовые операции, а также работу с аргументами методов и локальными переменными.

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

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

Налоговый и валютный резидент РФ —последствия приобретения и утраты статусов — полный FAQ с примерами

Reading time 27 min
Views 28K

Друзья, всех приветствую и предлагаю ознакомиться, как мне кажется с довольно полным FAQ по теме налогового и валютного резиденства РФ. По ходу материала есть некоторые примеры, а внизу вопросы & ответы.

Читать далее
Total votes 51: ↑46 and ↓5 +41
Comments 47

Какие вопросы задать работодателю на собеседовании?

Reading time 3 min
Views 167K

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

Я составил 50 самых важных вопросов будущему работодателю, которые ты обязан задать на собеседовании.

Читать далее
Total votes 26: ↑24 and ↓2 +22
Comments 18

Как незаметно стать антиваксером (возможно, это про вас) — ликбез для взрослых

Reading time 18 min
Views 36K


Как показала недавняя практика, в вакцинах в России разбираются в среднем никак.

Во-первых, их надо обновлять. Если вы не обновляли «детские» прививки, поздравляю, вы пассивный антиваксер и потенциально представляете опасность для общества.

Во-вторых, просто знать, какие вакцины делать и когда, какие они бывают и что можно «добрать» для защиты организма, если этого не делали вам в детстве.

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

Давайте проговорим ещё раз, от каких болезней можно и нужно привиться взрослым, когда и как.
Читать дальше →
Total votes 142: ↑119 and ↓23 +96
Comments 144

Прокачиваем Android проект с GitHub Actions. Часть 1

Reading time 15 min
Views 16K

Привет!

Это пост для тех, кто заинтересовался возможностями GitHub Actions, но никогда не имел опыта реальной настройки build-систем. Примеры будут полезны как для прокачки собственного pet-проекта, так и для понимания, как настраивается CI/CD, если по работе нет связанных с этим задач.

Читать далее
Total votes 19: ↑19 and ↓0 +19
Comments 2

Повышаем надёжность HttpClient’а в .NET Core или как ошибиться в 3 строках кода 4 раза

Reading time 13 min
Views 37K

За несколько недель до 14 февраля системе Dodo IS немного поплохело под нагрузкой. Одной из причин стало то, что в backend’ах мобильного приложения и сайта не совсем корректно работали политики поверх HttpClient’а (Retry, Circuit Breaker, Timeout). В этой статье я хочу поделиться с вами потенциальными проблемами, которые могут возникнуть при неправильном использовании таких политик.


Читать дальше →
Total votes 44: ↑43 and ↓1 +42
Comments 36

Почему, зачем и когда нужно использовать ValueTask

Reading time 14 min
Views 59K

Этот перевод появился благодаря хорошему комментарию 0x1000000.

image


В .NET Framework 4 появилось пространство System.Threading.Tasks, а с ним и класс Task. Этот тип и порождённый от него Task<TResult> долго дожидались, пока их признают стандартами в .NET в роли ключевых аспектов модели асинхронного программирования, которая была представлена в C# 5 с его операторами async/await. В этой статье я расскажу о новых типах ValueTask/ValueTask<TResult>, разработанных для улучшения производительности асинхронных методов в случаях, когда издержки на выделение памяти нужно принимать во внимание.

Читать дальше →
Total votes 23: ↑21 and ↓2 +19
Comments 2

Навигация в кроссплатформенном приложении на .NET Core с сохранением состояния на диск на примере ReactiveUI и Avalonia

Reading time 18 min
Views 20K



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


MVVM фреймворк ReactiveUI предлагает сохранять состояние приложения путём сериализации графа моделей представления в момент приостановки программы, при этом механизмы определения момента приостановки различаются для фреймворков и платформ. Так, для WPF используется событие Exit, для Xamarin.Android — ActivityPaused, для Xamarin.iOS — DidEnterBackground, для UWP — перегрузка OnLaunched.


В данном материале рассмотрим использование ReactiveUI для сохранения и восстановления состояния ПО с GUI, включая состояние роутера, на примере кроссплатформенного GUI фреймворка Avalonia. Материал предполагает наличие базовых представлений о шаблоне проектирования MVVM и о реактивном программировании в контексте языка C# и платформы .NET у читателя. Последовательность действий, описанная в статье, применима к ОС Windows 10 и Ubuntu 18. Код проекта, описанного в статье, доступен на GitHub.

Приступим!
Total votes 31: ↑30 and ↓1 +29
Comments 0

Как я осилил английский

Reading time 13 min
Views 347K
Всем привет. Я – айтишник «за 30», и я люблю английский язык. Так получилось, что на протяжении многих лет английский никак не хотел полюбить меня. Перед вами живой пример человека с «плохой памятью», «неспособностью к языкам», богатейшим опытом неудачного изучения английского как на курсах, так и самостоятельно, упущенными из-за незнания языка шансами и возникшими на этой почве комплексами. Все, что можно было сделать в изучении иностранного языка плохо, я попытался сделать еще хуже. Не смотря на все это, перед вами история с хэппи эндом, которая, верю, поможет кому-то избежать глупых ошибок, сэкономить время, избавится от иллюзий и предрассудков по поводу изучения нового языка с около нулевого уровня.
Читать дальше →
Total votes 155: ↑151 and ↓4 +147
Comments 256

Расширение, изменение и создание элементов управления на платформе UWP. Часть 1

Reading time 8 min
Views 5.5K


В 2006 году вместе с .NET 3.0 разработчикам были предоставлены программные платформы WPF и Silverlight. На протяжении следующих десяти лет Microsoft выпускала новые версии своей операционной системы и соответствующие им платформы. И вот, в 2016 году вместе с Windows 10 была выпущена Universal Windows Platform.

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

Эти задачи обусловлены тем, что на любой платформе разработчик располагает ограниченным набором элементов управления необходимых для разработки приложений. Его инструментарий составляют элементы из поставки Microsoft (в случае с UWP — Windows Universal Platform SDK) и от сторонних поставщиков или разработчиков. Даже все вместе они не могут покрыть всех требований, которые появляются при разработке приложений. Имеющиеся элементы управления могут не устраивать по ряду причин: внешний вид, поведение или функционирование. К сожалению, по сей день нет единого источника информации, который подробно и доступно освещал бы решения данных задач. Все, что остается разработчикам на протяжении длительного времени — собирать информацию в интернете крупица за крупицей.

Целью данной серии из трех статей является систематизация способов изменения, расширения и создания новых элементов управления.
Читать дальше →
Total votes 7: ↑7 and ↓0 +7
Comments 7

Релиз кросс-платформенного XAML UI-фреймворка AvaloniaUI 0.5

Reading time 3 min
Views 20K

Состоялся релиз версии 0.5 кросслплатформенного XAML UI фреймворка AvaloniaUI (раннее назывался Perspex). Фреймворк сделан по тем же принципам, что и WPF/UWP, т. е. используется XAML, биндинги и шаблонизированные элементы управления. На текущий момент это единственный способ сделать UI на настоящем XAML, который будет работать на Windows, OS X и Linux (так же имеется экспериментальная поддержка iOS и Android).


КПДВ


Каталог встроенных контролов (gif 3MB)


Начать работать с фреймворком можно скачав дополнение для Visual Studio 2017 и создав проект из шаблона. Так же стоит ознакомиться с документацией на wiki.


В этом релизе: Поддержка .NET Core, переход на GTK3 для *nix-систем, поддержка вывода через Linux fbdev, система расширений, исправлено множество ошибок.

Читать дальше →
Total votes 41: ↑40 and ↓1 +39
Comments 56

Мифы и заблуждения о проектировании в Scrum

Reading time 8 min
Views 21K

Сегодня гибкими методологиями сложно кого-то удивить: со дня принятия манифеста Agile прошло уже 15 лет, еще раньше мир узнал про Scrum. Это уже обыденность для многих компаний, занимающихся разработкой ПО и кажется, что добавить здесь нечего.

Но при всей популярности Scrum в своей работе и на разного рода семинарах и конференциях временами сталкиваюсь с непониманием его базовых принципов. И все чаще в комментариях на Хабре вижу негативные отзывы: у кого-то не получается договориться с заказчиками о переходе на итерационную разработку, кто-то не может адаптировать команду. Наверно, самый популярный отзыв о Scrum, который можно встретить звучит так: «Мы тратим по полчаса на митинги с нулевой пользой, а потом работаем как раньше, только добавилась головная боль с демо, ретро и планированием».
Читать дальше
Total votes 23: ↑22 and ↓1 +21
Comments 39

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

Reading time 25 min
Views 679K
Взявшись за написание небольшого, но реального и растущего проекта, мы «на собственной шкуре» убедились, насколько важно то, чтобы программа не только хорошо работала, но и была хорошо организована. Не верьте, что продуманная архитектура нужна только большим проектам (просто для больших проектов «смертельность» отсутствия архитектуры очевидна). Сложность, как правило, растет гораздо быстрее размеров программы. И если не позаботиться об этом заранее, то довольно быстро наступает момент, когда ты перестаешь ее контролировать. Правильная архитектура экономит очень много сил, времени и денег. А нередко вообще определяет то, выживет ваш проект или нет. И даже если речь идет всего лишь о «построении табуретки» все равно вначале очень полезно ее спроектировать.

К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

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

Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
Читать дальше →
Total votes 88: ↑85 and ↓3 +82
Comments 45

Skype начал скрывать IP адреса по умолчанию

Reading time 1 min
Views 31K
image

Корпорация Microsoft наконец решила проблему с IP адресами в своем мессенджере Skype. Еще четыре года назад было известно, что уязвимость в VoIP мессенджере позволяла злоумышленнику получать IP адреса пользователей в сервисе. Несмотря на то, что Microsoft относительно недавно предоставила возможность пользователям скрывать свой IP, только сейчас эта опция стала дефолтной.

Тяжелее всего приходилось геймерам и стримерам (и тем более геймерам-стримерам). Противники игрока всегда могли вычислить его IP, и осуществить DDoS атаку, выбрасывая геймера из системы. Изначально злоумышленнику нужен был Skype ID, после чего этот идентификатор при помощи сервиса резолвился в IP.
Читать дальше →
Total votes 22: ↑18 and ↓4 +14
Comments 29

Кроссплатформенный IDE для .NET/C# от JetBrains

Reading time 1 min
Views 62K
Сегодня анонсирован новый продукт от JetBrains на платформе IntelliJ. Кодовое имя прокта — Project Rider. Сообщается, что IDE содержит большое количество фич, соответствующих возможностям ReSharper.



Для своей работы IDE использует Resharper, который запускается в отдельном процессе, и служит в качестве бэкенда для редактора кода. IDE поддерживает .NET Framework, Mono и DNX/CoreCLR, и работает на платформах Windows, Mac OS X и Linux. Сообщается, что выход данного продукта связан в том числе и с движением Microsoft в сторону Open Source, а также, с растущей популярностью альтернативных платформ в мире .NET.

Предполагаемая дата релиза — осень 2016 года, но пользователи получат возможность протестировать продукт раньше, воспользовавшись Early Access Program.
Total votes 56: ↑50 and ↓6 +44
Comments 139

Полезные дополнения к ReSharper

Reading time 3 min
Views 18K


Всем привет!

Как я заметил, немало людей использует ReSharper, однако полностью игнорируют его расширения (плагины). В этой статье я опишу те из них, которые показались мне полезными.
Названия расширений кликабельны и ведут на их детальное описание.
Читать про плагины
Total votes 24: ↑18 and ↓6 +12
Comments 12

Новый LampTest.ru

Reading time 4 min
Views 17K
Светодиодные лампочки появились уже во многих домах, а скоро они будут у всех, но не все лампочки хорошие и не всегда реальные параметры лампы соответствует тому, что заявляет производитель. Чуть больше года назад у меня родилась идея сделать сайт с результатами инструментальных тестов светодиодных ламп. На мой клич о помощи откликнулся замечательный программист из Нижнего Новгорода Сергей Андреев, который создал быстрый, красивый и удобный сайт. LampTest.ru работает уже полгода, а сегодня я рад представить его обновлённую версию.



За это время я протестировал 278 ламп, включая 226 светодиодных.

Читать дальше →
Total votes 34: ↑33 and ↓1 +32
Comments 60

Третья альфа версия Perspex UI Framework с поддержкой iOS/Android

Reading time 3 min
Views 7.5K
Мы рады представить третью альфа версию Perspex (см. предыдущий анонс).
Perspex — кроссплатформенный UI-фреймворк для .NET с открытым исходным кодом, сделанный по образу и подобию WPF, с XAML, биндингами, шаблонами контролов, собственной системой отрисовки и прочими плюшками.

В этом релизе добавлена первоначальная поддержка платформ iOS и Android, улучшены дизайнер и XAML, исправлено множество ошибок.



Список изменений под катом.
Читать дальше →
Total votes 24: ↑24 and ↓0 +24
Comments 9

Visual Studio Online: непрерывная интеграция и тестирование

Reading time 10 min
Views 20K


Visual Studio Online, как и Team Foundation Server 2015, обладает возможностями для реализации процесса непрерывной интеграции.
 
В этой статье мы рассмотрим пример использования Visual Studio Online (VSO) с репозиторием Git, а также способы настройки процессов непрерывной интеграции, тестирования и автоматического развертывания.
 
Настройка сервиса Visual Studio Online один из самых быстрых способов для организации и планирования процесса сборки и развертывания приложений для различных платформ. Сервис в течение нескольких минут развернется и запустится на нашей облачной инфраструктуре без необходимости установки или настройки на отдельном сервере.
Читать дальше →
Total votes 20: ↑18 and ↓2 +16
Comments 4

Про Garbage Collector, Unity и слабые ссылки

Reading time 5 min
Views 21K
Есть у меня в проекте некий интерфейс IT и factory метод типа

interface IT {}
public IT CreateT(IA a, IB b, IC c, Type concreteType)
{
    // куча говнокода, который создает объект типа concreteType, определяемого в месте вызова в рантайме.
}


Классы, реализующие IT, имеют конструкторы с разными сигнатурами, принимающими какую-то комбинацию объектов типов IA, IB или IC, поэтому с ростом количества реализаций IT, код их создания начинал пахнуть все сильнее, и, наконец, было принято решение его выкинуть и заменить простым кодом с Unity, примерно такого содержания:

private static IT CreateITInternal(IA a, Type targetType)
{
    using (UnityContainer cont = new UnityContainer())
    {
        cont.RegisterInstance<IA>(a, new ExternallyControlledLifetimeManager());
        cont.RegisterType(typeof(IT), targetType, new ExternallyControlledLifetimeManager());
        return cont.Resolve<IT>();
    }
}

(для простоты я оставлю только ссылки на IA, чтобы не загромождать код. Unity нам тут нужен только для облегчения инстанциирования объектов и мы не хотим давать ему контролировать время жизни никаких объектов, поэтому использован ExternallyControlledLifetimeManager)
Код написан, тесты написаны, все зелено, все работает, выкатывам в продакшен. И тут началось…
Читать дальше →
Total votes 20: ↑15 and ↓5 +10
Comments 20

Information

Rating
1,551-st
Location
Ижевск, Удмуртия, Россия
Registered
Activity