День четыреста тринадцатый. #ЧтоНовенького
Анонс .NET5 Preview 1
.NET5 продолжит объединение .NET в единую платформу: ASP.NET Core, Entity Framework Core, WinForms, WPF, Xamarin и ML.NET. Впервые вся платформа будет использовать унифицированные BCL (Библиотеки Базовых Классов) для всех моделей приложений. Версия 5, которая выше, чем версии .NET Core и .NET Framework, даёт понять, что .NET5 - это будущее .NET, как единой унифицированной платформы для создания приложений любого типа.
.NET Core, а затем .NET5 - это .NET для создания НОВЫХ приложений. .NET Framework будет поддерживаться до тех пор, пока поддерживается Windows. Будет продолжаться обеспечение безопасности и исправление ошибок, а также обновление сетевых и крипто API. Он будет оставаться безопасным и поддерживаться для поддержки существующих приложений на .NET Framework.
16 марта выпущена первая предварительная версия .NET5, релиз которого запланирован на ноябрь. В Preview 1 впервые включена поддержка Windows ARM64. Версия включает в себя среду выполнения .NET Core. Ожидается, что в Preview 2 будет включен SDK (ядро ASP.NET, но не WPF или Windows Forms, которые войдут в более поздние версии). Поддержка Windows ARM64 также будет перенесена в .NET Core 3.1.
Основные цели выпуска .NET5
1. Унифицированный SDK
- Одна BCL для всех приложений .NET5. Сегодня приложения Xamarin используют Mono BCL, но перейдут на использование .NET Core BCL, улучшая совместимость между моделями приложений.
- Интеграция мобильной разработки (Xamarin) в .NET 5 вместо Mono.
2. Нативные приложения, поддерживающие несколько платформ, например Windows Desktop, Microsoft Duo (Android) и iOS, с использованием нативных элементов управления, поддерживаемых на этих платформах.
3. Веб-приложения, поддерживающие несколько платформ: приложения на Blazor, которые могут работать в браузерах, на мобильных устройствах и как нативные настольные приложения (например, в Windows 10).
4. Нативные высокопроизводительные облачные приложения, микросервисы и поддержка создания нескольких проектов (API, веб-интерфейсов, контейнеров) как локально, так и в облаке.
5. Постоянные улучшения: более быстрые алгоритмы в BCL, улучшенная поддержка контейнеров во время выполнения, поддержка HTTP3.
Preview 1 пока не содержит всего этого но этот функционал будет выходить в будущих предварительных версиях.
Улучшения в Preview 1
1. Улучшения производительности регулярных выражений.
2. Улучшение качества кода в RyuJIT
- улучшены паттерны проверки на null
- улучшена оценка распространённых выражений
- оптимизировано свойство “строка”.Length
- изменён порядок применения оптимизаций в JIT, так что ключевые оптимизации применяются раньше
3. Диагностика нагрузки сборки добавлена в канал событий (Event Pipe)
4. API для профилировщиков в канале событий
Канал событий был добавлен в .NET Core 2.2 для диагностики производительности в любой операционной системе. В .NET5 добавлена возможность профилировщикам писать события в канал событий.
5. Консолидация GitHub репозиториев с кодом пакетов .NET
В .NET Core 1.0 было более 100 репозиториев для ASP.NET, EF и .NET Core. Теперь их можно сосчитать по пальцам одной руки, и почти все перемещены в общий репозиторий dotnet.
Источник: https://devblogs.microsoft.com/dotnet/announcing-net-5-0-preview-1/
Анонс .NET5 Preview 1
.NET5 продолжит объединение .NET в единую платформу: ASP.NET Core, Entity Framework Core, WinForms, WPF, Xamarin и ML.NET. Впервые вся платформа будет использовать унифицированные BCL (Библиотеки Базовых Классов) для всех моделей приложений. Версия 5, которая выше, чем версии .NET Core и .NET Framework, даёт понять, что .NET5 - это будущее .NET, как единой унифицированной платформы для создания приложений любого типа.
.NET Core, а затем .NET5 - это .NET для создания НОВЫХ приложений. .NET Framework будет поддерживаться до тех пор, пока поддерживается Windows. Будет продолжаться обеспечение безопасности и исправление ошибок, а также обновление сетевых и крипто API. Он будет оставаться безопасным и поддерживаться для поддержки существующих приложений на .NET Framework.
16 марта выпущена первая предварительная версия .NET5, релиз которого запланирован на ноябрь. В Preview 1 впервые включена поддержка Windows ARM64. Версия включает в себя среду выполнения .NET Core. Ожидается, что в Preview 2 будет включен SDK (ядро ASP.NET, но не WPF или Windows Forms, которые войдут в более поздние версии). Поддержка Windows ARM64 также будет перенесена в .NET Core 3.1.
Основные цели выпуска .NET5
1. Унифицированный SDK
- Одна BCL для всех приложений .NET5. Сегодня приложения Xamarin используют Mono BCL, но перейдут на использование .NET Core BCL, улучшая совместимость между моделями приложений.
- Интеграция мобильной разработки (Xamarin) в .NET 5 вместо Mono.
2. Нативные приложения, поддерживающие несколько платформ, например Windows Desktop, Microsoft Duo (Android) и iOS, с использованием нативных элементов управления, поддерживаемых на этих платформах.
3. Веб-приложения, поддерживающие несколько платформ: приложения на Blazor, которые могут работать в браузерах, на мобильных устройствах и как нативные настольные приложения (например, в Windows 10).
4. Нативные высокопроизводительные облачные приложения, микросервисы и поддержка создания нескольких проектов (API, веб-интерфейсов, контейнеров) как локально, так и в облаке.
5. Постоянные улучшения: более быстрые алгоритмы в BCL, улучшенная поддержка контейнеров во время выполнения, поддержка HTTP3.
Preview 1 пока не содержит всего этого но этот функционал будет выходить в будущих предварительных версиях.
Улучшения в Preview 1
1. Улучшения производительности регулярных выражений.
2. Улучшение качества кода в RyuJIT
- улучшены паттерны проверки на null
- улучшена оценка распространённых выражений
- оптимизировано свойство “строка”.Length
- изменён порядок применения оптимизаций в JIT, так что ключевые оптимизации применяются раньше
3. Диагностика нагрузки сборки добавлена в канал событий (Event Pipe)
4. API для профилировщиков в канале событий
Канал событий был добавлен в .NET Core 2.2 для диагностики производительности в любой операционной системе. В .NET5 добавлена возможность профилировщикам писать события в канал событий.
5. Консолидация GitHub репозиториев с кодом пакетов .NET
В .NET Core 1.0 было более 100 репозиториев для ASP.NET, EF и .NET Core. Теперь их можно сосчитать по пальцам одной руки, и почти все перемещены в общий репозиторий dotnet.
Источник: https://devblogs.microsoft.com/dotnet/announcing-net-5-0-preview-1/
👍1
День четыреста четырнадцатый. #ЧтоНовенького
Вышла VS 2019 версии 16.5
Вот некоторые новые функции для разработки в С#:
1. Конвертация if в операторы или выражения switch. Наведите курсор на ключевое слово if, нажмите
2. Упрощение интерполированных строк поможет сделать строку более понятной и лаконичной. Поместите курсор на строку, нажмите
3. Извлечение в локальную функцию позволяет превратить фрагмент кода существующего метода в локальную функцию. Выделите код, который вы хотите извлечь, нажмите
4. Изменение членов на статические. Поместите курсор на имя члена, нажмите
5. IntelliSense теперь поддерживает завершение для не импортированных методов расширения. Включить эту опцию можно в Tools > Options > Text Editor > C# > Intellisense и выбрать Show items from unimported namespaces(experimental).
Источник
Вышла VS 2019 версии 16.5
Вот некоторые новые функции для разработки в С#:
1. Конвертация if в операторы или выражения switch. Наведите курсор на ключевое слово if, нажмите
Ctrl+.
, и выберите Convert to ‘switch’ statement/expression.2. Упрощение интерполированных строк поможет сделать строку более понятной и лаконичной. Поместите курсор на строку, нажмите
Ctrl+.
и выберите Simplify interpolation.3. Извлечение в локальную функцию позволяет превратить фрагмент кода существующего метода в локальную функцию. Выделите код, который вы хотите извлечь, нажмите
Ctrl+.
и выберите Extract local function.4. Изменение членов на статические. Поместите курсор на имя члена, нажмите
Ctrl+.
и выберите Make static.5. IntelliSense теперь поддерживает завершение для не импортированных методов расширения. Включить эту опцию можно в Tools > Options > Text Editor > C# > Intellisense и выбрать Show items from unimported namespaces(experimental).
Источник
День четыреста пятнадцатый. #Оффтоп #97Вещей
97 Вещей, Которые Должен Знать Каждый Программист
31. Не Трогайте Этот Код!
Это случалось с каждым из нас в какой-то момент. Ваш код перенесен на демо-сервер для тестирования системы, и тестировщик пишет, что столкнулся с проблемой. Ваша первая реакция: «Я знаю, что не так, дай я быстро поправлю».
Проблема здесь в том, что вы думаете, что у вас как у разработчика должен быть доступ к демо-серверу.
В большинстве сред веб-разработки архитектура может быть примерно следующей:
- Локальная разработка и юнит-тестирование на машине разработчика
- Сервер разработки, на котором выполняется ручное или автоматическое интеграционное тестирование
- Демо-сервер, на котором команда QA и заказчики проводят приёмочное тестирование
- Производственный сервер
Да, есть и другие сервера и сервисы, такие как система контроля версий и тикеты, но идея понятна. В этой модели разработчик - даже старший разработчик - никогда не должен иметь доступа за пределы сервера разработки. Большая часть разработки выполняется им на локальной машине с использованием его любимого набора IDE, виртуальных машин и чёрной магии.
После внесения в систему контроля версий код автоматически или вручную должен быть перенесён на сервер разработки, где его можно протестировать и при необходимости настроить, чтобы убедиться, что вся система работает. Но с этого момента разработчик может лишь следить за процессом.
Менеджер по тестированию должен разместить код на демо-сервере для команды QA. Точно так же, как разработчикам не нужно иметь доступ к чему-либо, кроме сервера разработки, так и команде QA и заказчикам не нужно ничего трогать на сервере разработки. Если код готов к приёмочным испытаниям, выпустите его на демо-сервер и не просите пользователя «просто быстро взглянуть на кое-что» на сервере разработки. Помните, что, если вы пишете проект не один, у других людей на сервере разработки есть код, который может быть не готов к просмотру пользователем. Менеджер релизов - единственный человек, который должен иметь доступ к обоим серверам.
Ни при каких обстоятельствах, вообще никогда, разработчик не должен иметь доступ к производственному серверу! Если возникает проблема, служба поддержки должна решить её или попросить, чтобы разработчик её исправил. После того, как исправление внесено в систему контроля версий, служба поддержки возьмёт его оттуда. Одни из самых больших программных катастроф, которые я видел, произошли потому, что какой-то… э-э-эм… ну, в общем, я… нарушал это правило. Если что-то сломалось, производственный сервер не место, чтобы это исправлять.
Источник: https://www.oreilly.com/library/view/97-things-every/9780596809515/
Автор оригинала – Cal Evans
97 Вещей, Которые Должен Знать Каждый Программист
31. Не Трогайте Этот Код!
Это случалось с каждым из нас в какой-то момент. Ваш код перенесен на демо-сервер для тестирования системы, и тестировщик пишет, что столкнулся с проблемой. Ваша первая реакция: «Я знаю, что не так, дай я быстро поправлю».
Проблема здесь в том, что вы думаете, что у вас как у разработчика должен быть доступ к демо-серверу.
В большинстве сред веб-разработки архитектура может быть примерно следующей:
- Локальная разработка и юнит-тестирование на машине разработчика
- Сервер разработки, на котором выполняется ручное или автоматическое интеграционное тестирование
- Демо-сервер, на котором команда QA и заказчики проводят приёмочное тестирование
- Производственный сервер
Да, есть и другие сервера и сервисы, такие как система контроля версий и тикеты, но идея понятна. В этой модели разработчик - даже старший разработчик - никогда не должен иметь доступа за пределы сервера разработки. Большая часть разработки выполняется им на локальной машине с использованием его любимого набора IDE, виртуальных машин и чёрной магии.
После внесения в систему контроля версий код автоматически или вручную должен быть перенесён на сервер разработки, где его можно протестировать и при необходимости настроить, чтобы убедиться, что вся система работает. Но с этого момента разработчик может лишь следить за процессом.
Менеджер по тестированию должен разместить код на демо-сервере для команды QA. Точно так же, как разработчикам не нужно иметь доступ к чему-либо, кроме сервера разработки, так и команде QA и заказчикам не нужно ничего трогать на сервере разработки. Если код готов к приёмочным испытаниям, выпустите его на демо-сервер и не просите пользователя «просто быстро взглянуть на кое-что» на сервере разработки. Помните, что, если вы пишете проект не один, у других людей на сервере разработки есть код, который может быть не готов к просмотру пользователем. Менеджер релизов - единственный человек, который должен иметь доступ к обоим серверам.
Ни при каких обстоятельствах, вообще никогда, разработчик не должен иметь доступ к производственному серверу! Если возникает проблема, служба поддержки должна решить её или попросить, чтобы разработчик её исправил. После того, как исправление внесено в систему контроля версий, служба поддержки возьмёт его оттуда. Одни из самых больших программных катастроф, которые я видел, произошли потому, что какой-то… э-э-эм… ну, в общем, я… нарушал это правило. Если что-то сломалось, производственный сервер не место, чтобы это исправлять.
Источник: https://www.oreilly.com/library/view/97-things-every/9780596809515/
Автор оригинала – Cal Evans
Новые даты DotNext 2020 Piter!
Из-за действующего запрета на проведение массовых мероприятий мы переносим конференцию
на 18-19 июня в «Park Inn by Radisson Пулковская».
Билеты
Купленный вами или вашей компанией билет остается действительным на новые даты.
Если новая дата вам подходит, менять билет не нужно, всё будет работать.
Если новая дата вам не подходит — обратитесь в наш саппорт [email protected] или @JUGConfSupport_bot. Мы поможем вам с возвратом денег, заменой билета на осеннюю конференцию или заменой участия на онлайн с частичным возвратом.
Новая площадка меньше изначально запланированной, поэтому дополнительно мы готовим большой пакет обновлений для онлайн-участников.
Программа
Сейчас мы договариваемся со спикерами на новые даты. Не всем спикерам подойдут новые даты, и программа немного изменится. Но мы приложим все усилия, чтобы программа стала интереснее и полезнее.
Одно из новшеств конференции — добавление онлайн-трека: один зал будет специально оборудован для того, чтобы мы могли проводить доклады и дискуссионные зоны с удаленными спикерами. Будем держать вас в курсе.
На случай продления карантина и ограничений
Мы прорабатываем разные форматы участия в конференции (онлайн и смешанные) на случай, если введенные недавно ограничения не позволят нам собраться вместе и летом. Будем оперативно сообщать вам обо всех изменениях в наших каналах и на сайте https://bit.ly/3940lZV
Стоимость билетов заморожена до июня, промокод также действителен: NetDevDiary20pc
По всем оставшимся вопросам — пишите в саппорт ([email protected] или @JUGConfSupport_bot).
Из-за действующего запрета на проведение массовых мероприятий мы переносим конференцию
на 18-19 июня в «Park Inn by Radisson Пулковская».
Билеты
Купленный вами или вашей компанией билет остается действительным на новые даты.
Если новая дата вам подходит, менять билет не нужно, всё будет работать.
Если новая дата вам не подходит — обратитесь в наш саппорт [email protected] или @JUGConfSupport_bot. Мы поможем вам с возвратом денег, заменой билета на осеннюю конференцию или заменой участия на онлайн с частичным возвратом.
Новая площадка меньше изначально запланированной, поэтому дополнительно мы готовим большой пакет обновлений для онлайн-участников.
Программа
Сейчас мы договариваемся со спикерами на новые даты. Не всем спикерам подойдут новые даты, и программа немного изменится. Но мы приложим все усилия, чтобы программа стала интереснее и полезнее.
Одно из новшеств конференции — добавление онлайн-трека: один зал будет специально оборудован для того, чтобы мы могли проводить доклады и дискуссионные зоны с удаленными спикерами. Будем держать вас в курсе.
На случай продления карантина и ограничений
Мы прорабатываем разные форматы участия в конференции (онлайн и смешанные) на случай, если введенные недавно ограничения не позволят нам собраться вместе и летом. Будем оперативно сообщать вам обо всех изменениях в наших каналах и на сайте https://bit.ly/3940lZV
Стоимость билетов заморожена до июня, промокод также действителен: NetDevDiary20pc
По всем оставшимся вопросам — пишите в саппорт ([email protected] или @JUGConfSupport_bot).
DotNext 2021 Piter. Конференция для .NET-разработчиков. 20-23 апреля, онлайн.
.NET-конференция. 20-23 апреля, онлайн. 4 дня и несколько десятков технических докладов.
День четыреста шестнадцатый. #Оффтоп
Как Работать Удалённо?
В связи с последними событиями многих разработчиков переводят на удалённую работу. И для тех, кто никогда до этого не работал удалённо, это может вызывать опасения.
Коммуникация
Как общаться с коллегами, когда ты привык, что они за соседними столами? Правильная коммуникация между членами команды играет едва ли не главную роль. Множество проектов потерпели неудачу не по причине плохого кода, а именно по причине плохой коммуникации и недопонимания. Теперь важнейший элемент коммуникации – прямое живое общение – отсутствует.
В этом случае чрезвычайно важно уделить внимание письменной коммуникации, т.к. она в любом случае будет основной. Главная задача – снизить возможность недопониманий до минимума.
1. Постарайтесь выражать мысли наиболее подробно и чётко:
- выделяйте главные мысли жирным или курсивом
- составляйте списки задач или условий (отформатированные как списки 1…, 2…, 3…)
2. Если вы менеджер проекта, получили задание от заказчика и составляете подробное ТЗ для программиста, имейте в виду, что многим программистам очень помогает наличие исходного задания. Возможность взглянуть на общую картину невероятно полезна. Вдруг вы что-то упустили. Может быть программист предложит более эффективный способ реализовать задачу.
3. Не предполагайте, что имел в виду ваш собеседник. Если вам что-то непонятно, лучше потратить несколько минут и переспросить, чем тратить несколько часов, реализовывая не то, что нужно. Перескажите собеседнику то, как вы поняли, что он имел в виду (если это какая-то логика работы программы, опишите её по шагам), и спросите, правильно ли вы поняли.
4. Очень помогают программы, захватывающие область экрана и позволяющие сделать скриншот или видео с описанием последовательности действий при возникновении бага или для теста функциональности. Это гораздо проще, чем описывать словами. Мы в компании используем Jing, но есть и более современные инструменты.
5. Письменная коммуникация в большинстве случаев лишена эмоционального окраса. Наверное, каждый сталкивался с тем, что собеседник внезапно обижался на ваше сообщение, хотя вы ничего оскорбительного не имели в виду. Поэтому очень важно для всех участников переписки воспринимать сообщения в нейтральном или положительном ключе. Спокойно перечитайте сообщение, которое вы посчитали обидным или агрессивным с предположением, что отправитель не хотел вас задеть (что чаще всего так).
6. Ваши сообщения тоже должны содержать как можно меньше эмоций. Здесь прелесть переписки в том, что в лицо можно много наговорить, не подумав, а пока пишешь сообщение, есть время всё исправить.
7. В некоторых случаях очень важно понимать, чем занимаются ваши коллеги. Чтобы не делать ту же работу, что и они, и опять же снизить риск недопонимания. В этом случае помогут как специализированные инструменты, вроде багтрекера, так и обычные «ежедневные апдейты». Простое, не сильно формализованное сообщение всем членам команды (например, в отдельном общем чате) о том, чем вы занимаетесь сегодня, когда планируете это закончить и что планируете делать завтра или в ближайшие пару дней.
8. Иногда переписки, даже в чате, недостаточно. Тогда на помощь приходят телефон, Skype, видеоконференции, TeamViewer и множество других инструментов.
Продуктивность
Лично для меня не составляет проблемы работать из дома, однако многим недостаёт «рабочей атмосферы», есть множество отвлекающих факторов и соблазнов (хочется вздремнуть, а кровать так близко). В этом случае потратьте время и создайте для себя настолько рабочую атмосферу, насколько возможно:
1. Выберите удобное место (отдельный кабинет, спальня, кухонный стол, балкон).
2. Создайте рабочую атмосферу: уберите со стола лишние и отвлекающие вещи (см. пункт 6. Политика чистого стола), повесьте список задач, включите фоновый шум офиса (их куча на ютубе), скажите домашним, что вы «на работе» и беспокоить вас нельзя.
3. Выберите подходящий для вас график: чётко в рабочие часы с 9 до 5, либо несколько интервалов в течение дня.
Источник: https://youtu.be/HTcbWifD5v0
Как Работать Удалённо?
В связи с последними событиями многих разработчиков переводят на удалённую работу. И для тех, кто никогда до этого не работал удалённо, это может вызывать опасения.
Коммуникация
Как общаться с коллегами, когда ты привык, что они за соседними столами? Правильная коммуникация между членами команды играет едва ли не главную роль. Множество проектов потерпели неудачу не по причине плохого кода, а именно по причине плохой коммуникации и недопонимания. Теперь важнейший элемент коммуникации – прямое живое общение – отсутствует.
В этом случае чрезвычайно важно уделить внимание письменной коммуникации, т.к. она в любом случае будет основной. Главная задача – снизить возможность недопониманий до минимума.
1. Постарайтесь выражать мысли наиболее подробно и чётко:
- выделяйте главные мысли жирным или курсивом
- составляйте списки задач или условий (отформатированные как списки 1…, 2…, 3…)
2. Если вы менеджер проекта, получили задание от заказчика и составляете подробное ТЗ для программиста, имейте в виду, что многим программистам очень помогает наличие исходного задания. Возможность взглянуть на общую картину невероятно полезна. Вдруг вы что-то упустили. Может быть программист предложит более эффективный способ реализовать задачу.
3. Не предполагайте, что имел в виду ваш собеседник. Если вам что-то непонятно, лучше потратить несколько минут и переспросить, чем тратить несколько часов, реализовывая не то, что нужно. Перескажите собеседнику то, как вы поняли, что он имел в виду (если это какая-то логика работы программы, опишите её по шагам), и спросите, правильно ли вы поняли.
4. Очень помогают программы, захватывающие область экрана и позволяющие сделать скриншот или видео с описанием последовательности действий при возникновении бага или для теста функциональности. Это гораздо проще, чем описывать словами. Мы в компании используем Jing, но есть и более современные инструменты.
5. Письменная коммуникация в большинстве случаев лишена эмоционального окраса. Наверное, каждый сталкивался с тем, что собеседник внезапно обижался на ваше сообщение, хотя вы ничего оскорбительного не имели в виду. Поэтому очень важно для всех участников переписки воспринимать сообщения в нейтральном или положительном ключе. Спокойно перечитайте сообщение, которое вы посчитали обидным или агрессивным с предположением, что отправитель не хотел вас задеть (что чаще всего так).
6. Ваши сообщения тоже должны содержать как можно меньше эмоций. Здесь прелесть переписки в том, что в лицо можно много наговорить, не подумав, а пока пишешь сообщение, есть время всё исправить.
7. В некоторых случаях очень важно понимать, чем занимаются ваши коллеги. Чтобы не делать ту же работу, что и они, и опять же снизить риск недопонимания. В этом случае помогут как специализированные инструменты, вроде багтрекера, так и обычные «ежедневные апдейты». Простое, не сильно формализованное сообщение всем членам команды (например, в отдельном общем чате) о том, чем вы занимаетесь сегодня, когда планируете это закончить и что планируете делать завтра или в ближайшие пару дней.
8. Иногда переписки, даже в чате, недостаточно. Тогда на помощь приходят телефон, Skype, видеоконференции, TeamViewer и множество других инструментов.
Продуктивность
Лично для меня не составляет проблемы работать из дома, однако многим недостаёт «рабочей атмосферы», есть множество отвлекающих факторов и соблазнов (хочется вздремнуть, а кровать так близко). В этом случае потратьте время и создайте для себя настолько рабочую атмосферу, насколько возможно:
1. Выберите удобное место (отдельный кабинет, спальня, кухонный стол, балкон).
2. Создайте рабочую атмосферу: уберите со стола лишние и отвлекающие вещи (см. пункт 6. Политика чистого стола), повесьте список задач, включите фоновый шум офиса (их куча на ютубе), скажите домашним, что вы «на работе» и беспокоить вас нельзя.
3. Выберите подходящий для вас график: чётко в рабочие часы с 9 до 5, либо несколько интервалов в течение дня.
Источник: https://youtu.be/HTcbWifD5v0
День четыреста семнадцатый. #ЗаметкиНаПолях
Эмоджи и String.Length в C#
Вы используете
Однако вам нужно количество символов, а не фактическая длина массива
Источник: https://schneids.net/emojis-and-string-length
Эмоджи и String.Length в C#
Вы используете
String.Length
для вычисления длины строки, которая может включать эмоджи? Попробовав вычислить String.Length
для такой строки, можно получить не совсем то, что вы ожидаете. Как думаете, что будет выведено на консоль?var str = "👶👶👶👶🍼🍼";Выведется
Console.WriteLine(str.Length);
12
. Это происходит потому, что строки C# по умолчанию имеют формат UTF-16, а символы Юникода, выходящие за пределы 16-разрядного UTF, сохраняются в виде суррогатных пар, т.е. двух символов, представляющих один 32-разрядный символ.Однако вам нужно количество символов, а не фактическая длина массива
char
, и в этом случае можно использовать System.Globalization.StringInfo
для вычисления длины строки:var str = "👶👶👶👶🍼🍼";Это выведет искомое число
var stringInfo = new System.Globalization.StringInfo(str);
Console.WriteLine(stringInfo.LengthInTextElements);
6
.Источник: https://schneids.net/emojis-and-string-length
День четыреста восемнадцатый. #Оффтоп
На канале Visual Studio Toolbox вышло новое видео «Введение в gRPC». В получасовом ролике рассказывается, что это, с чем его едят и как это реализовано в .NET и Visual Studio.
gRPC - это независимая от языка высокопроизводительная среда удаленного вызова процедур (RPC).
Основными преимуществами gRPC являются:
- Современный, высокопроизводительный, легкий RPC фреймворк.
- Разработка API по контракту с использованием Protocol Buffers, позволяющая создавать независимые от языка реализации.
- Инструменты для разных языков, позволяющие создавать строго типизированные серверы и клиенты.
- Поддержка клиентских, серверных и двунаправленных потоковых вызовов.
- Снижение использования сети благодаря двоичной сериализации Protobuf.
Эти преимущества делают gRPC идеальным для:
- Легких микросервисов, где эффективность имеет решающее значение.
- Многоязычных систем.
- Point-to-point сервисов реального времени, которые должны обрабатывать потоковые запросы или ответы.
Для тех, кому сложно воспринимать английскую речь (с индийским акцентом), примеры описаны в документации:
- Введение в gRPC в .NET Core
- gRPC сервисы в C#
- Руководство по созданию простого сервиса gRPC
На канале Visual Studio Toolbox вышло новое видео «Введение в gRPC». В получасовом ролике рассказывается, что это, с чем его едят и как это реализовано в .NET и Visual Studio.
gRPC - это независимая от языка высокопроизводительная среда удаленного вызова процедур (RPC).
Основными преимуществами gRPC являются:
- Современный, высокопроизводительный, легкий RPC фреймворк.
- Разработка API по контракту с использованием Protocol Buffers, позволяющая создавать независимые от языка реализации.
- Инструменты для разных языков, позволяющие создавать строго типизированные серверы и клиенты.
- Поддержка клиентских, серверных и двунаправленных потоковых вызовов.
- Снижение использования сети благодаря двоичной сериализации Protobuf.
Эти преимущества делают gRPC идеальным для:
- Легких микросервисов, где эффективность имеет решающее значение.
- Многоязычных систем.
- Point-to-point сервисов реального времени, которые должны обрабатывать потоковые запросы или ответы.
Для тех, кому сложно воспринимать английскую речь (с индийским акцентом), примеры описаны в документации:
- Введение в gRPC в .NET Core
- gRPC сервисы в C#
- Руководство по созданию простого сервиса gRPC
YouTube
Introduction to gRPC
In this episode, Robert is joined by Sourabh Shirhatti, who shows how to build a gRPC service with Visual Studio. Sourabh starts with an introduction to gRPC, a language agnostic, high-performance Remote Procedure Call (RPC) framework, and reviews why it…
День четыреста девятнадцатый. #АтакиНаСайты
ASP.NET MVC 5. Безопасность Веб-Приложений
4. Оверпостинг
Привязка модели ASP.NET MVC - это мощная функция, которая значительно упрощает процесс обработки пользовательского ввода, автоматически сопоставляя входные данные со свойствами модели на основе соглашений об именовании. Однако она открывает ещё один вектор атаки, позволяющий злоумышленнику заполнить свойства модели, которые вы не указывали в форме ввода. Допустим, мы создаём систему отзывов о товарах магазина:
Атака оверпостингом использует общую для MVC веб-сред функцию. В марте 2012 года такой атаке подвергся GitHub.com. Атакующий создал новый открытый ключ администратора и вручную добавил его в скрытое поле формы. После отправки формы он получал административные привилегии.
Предотвращение оверпостинга
1. Самый простой способ предотвратить атаку оверпостингом - использовать атрибут BindAttribute, чтобы явно контролировать, какие свойства должны получать значения через связыватель модели. Можно использовать либо белый список:
2. Можно использовать одну из перегрузок UpdateModel или TryUpdateModel, которая принимает список полей для привязки:
Источник: Jon Galloway “Professional ASP.NET MVC 5”. – John Wiley & Sons Inc., 2014. Глава 7.
ASP.NET MVC 5. Безопасность Веб-Приложений
4. Оверпостинг
Привязка модели ASP.NET MVC - это мощная функция, которая значительно упрощает процесс обработки пользовательского ввода, автоматически сопоставляя входные данные со свойствами модели на основе соглашений об именовании. Однако она открывает ещё один вектор атаки, позволяющий злоумышленнику заполнить свойства модели, которые вы не указывали в форме ввода. Допустим, мы создаём систему отзывов о товарах магазина:
public class Review {У нас есть простая форма с двумя полями, доступными для пользователя
public int ReviewID { get; set; } // Первичный ключ
public int ProductID { get; set; } // Внешний ключ
public Product Product { get; set; } // Внешняя сущность
public string Name { get; set; }
public string Comment { get; set; }
public bool Approved { get; set; }
}
Name
и Comment
:Name: @Html.TextBox("Name") <br />Несмотря на то, что в форме открыты только имя и комментарий, злонамеренный пользователь может легко вмешаться в отправляемые данные формы, используя инструменты веб-разработчика, добавив «
Comment: @Html.TextBox("Comment")
Approved=true
» в строку запроса или POST-данные формы. Связыватель модели не знает, какие поля вы включили в форму, и установит для свойства Approved
значение true
.Атака оверпостингом использует общую для MVC веб-сред функцию. В марте 2012 года такой атаке подвергся GitHub.com. Атакующий создал новый открытый ключ администратора и вручную добавил его в скрытое поле формы. После отправки формы он получал административные привилегии.
Предотвращение оверпостинга
1. Самый простой способ предотвратить атаку оверпостингом - использовать атрибут BindAttribute, чтобы явно контролировать, какие свойства должны получать значения через связыватель модели. Можно использовать либо белый список:
[Bind(Include="Name, Comment")]либо чёрный
[Bind(Exclude="ReviewID, ProductID, Product, Approved"]При этом можно разместить
BindAttribute
либо в классе модели, либо в списке параметров метода действия контроллера.2. Можно использовать одну из перегрузок UpdateModel или TryUpdateModel, которая принимает список полей для привязки:
UpdateModel(review, "Review", new string[] { "Name", "Comment" });3. Возможно, лучший способ справиться с оверпостингом - это избегать привязки непосредственно к модели данных. Это можно сделать, используя модель представления, содержащую только те свойства, которые пользователю разрешено устанавливать:
public class ReviewViewModel {Привязка к модели представления намного надёжнее привязки к модели данных. Вместо того, чтобы помнить о включении новых полей в белый или черный списки, в подходе с моделью представления единственный способ использовать привязку к свойству - это включить его в модель представления.
public string Name { get; set; }
public string Comment { get; set; }
}
Источник: Jon Galloway “Professional ASP.NET MVC 5”. – John Wiley & Sons Inc., 2014. Глава 7.
День четыреста двадцать первый. #DesignPatterns
Паттерны проектирования
17. Паттерн «Компоновщик» (Composite)
Компоновщик — это относительно низкоуровневый паттерн проектирования, который лежит в основе других паттернов. Команды объединяются в составные команды, декоратор является составным объектом с одним дочерним элементом, посетитель очень часто обходит составные объекты иерархической формы.
Назначение: применяется для моделирования иерархических структур данных, простые элементы которых объединяются в более сложные компоненты. Он позволяет работать с такими объектами единообразно, скрывая от клиента разницу между одиночным и составным объектами.
Причины использования: Во многих приложениях часто возникает потребность в древовидных структурах данных, одни узлы которых являются «листьями», а другие содержат потомков — дочерние узлы. При этом нужен унифицированный протокол работы с такими структурами данных, когда интерфейс объектов является одинаковым для одиночных и составных узлов. Композитные структуры активно применяются для создания элементов управления пользовательского интерфейса, работы с иерархическими данными (XML), деревьев выражений и ряда других задач.
Классическая диаграмма приведена на рисунке ниже:
-
-
-
-
Особенности
При работе с паттерном «Компоновщик» возникает вопрос должен ли интерфейс компонента содержать методы добавления/удаления компонентов. С одной стороны, клиенты должны работать с простыми и составными объектами единообразно, что делает разумным добавление операций
1. Использование фабричных методов. Самый простой вариант — сделать классы компонентов неизменяемыми. В этом случае составной объект будет формироваться фабричным методом или конструктором, а необходимость в методах
2. Методы Add/Remove находятся в составном компоненте. Если формировать составные объекты с помощью конструкторов неудобно, но процессы формирования и использования компонентов четко разделены, то разумно поместить операции по добавлению/удалению компонентов в класс
3. Методы Add/Remove находятся в базовом компоненте. Если же составной объект является базовым сценарием, а одиночный компонент — частным случаем, то гораздо проще добавить операции
Источник: Тепляков С. "Паттерны проектирования на платформе .NET." — СПб.: Питер, 2015. Глава 15.
Паттерны проектирования
17. Паттерн «Компоновщик» (Composite)
Компоновщик — это относительно низкоуровневый паттерн проектирования, который лежит в основе других паттернов. Команды объединяются в составные команды, декоратор является составным объектом с одним дочерним элементом, посетитель очень часто обходит составные объекты иерархической формы.
Назначение: применяется для моделирования иерархических структур данных, простые элементы которых объединяются в более сложные компоненты. Он позволяет работать с такими объектами единообразно, скрывая от клиента разницу между одиночным и составным объектами.
Причины использования: Во многих приложениях часто возникает потребность в древовидных структурах данных, одни узлы которых являются «листьями», а другие содержат потомков — дочерние узлы. При этом нужен унифицированный протокол работы с такими структурами данных, когда интерфейс объектов является одинаковым для одиночных и составных узлов. Композитные структуры активно применяются для создания элементов управления пользовательского интерфейса, работы с иерархическими данными (XML), деревьев выражений и ряда других задач.
Классическая диаграмма приведена на рисунке ниже:
-
Component
— базовый класс компонента. Содержит операцию, также может содержать методы добавления/удаления компонентов;-
Composite
— составной компонент, который делегирует выполнение основной операции всем дочерним компонентам;-
Leaf
— одиночный компонент, который не может содержать дочерних элементов;-
Client
— потребитель компонента, который единообразно работает с одиночными и составными объектами.Особенности
При работе с паттерном «Компоновщик» возникает вопрос должен ли интерфейс компонента содержать методы добавления/удаления компонентов. С одной стороны, клиенты должны работать с простыми и составными объектами единообразно, что делает разумным добавление операций
Add/Remove
в базовый класс Component
. С другой стороны, эти методы не могут быть нормально реализованы в классе Leaf
. Есть три варианта решения этой проблемы:1. Использование фабричных методов. Самый простой вариант — сделать классы компонентов неизменяемыми. В этом случае составной объект будет формироваться фабричным методом или конструктором, а необходимость в методах
Add/Remove
полностью пропадет.2. Методы Add/Remove находятся в составном компоненте. Если формировать составные объекты с помощью конструкторов неудобно, но процессы формирования и использования компонентов четко разделены, то разумно поместить операции по добавлению/удалению компонентов в класс
CompositeComponent
. В этом случае часть клиентов будут знать о классе CompositeComponent
, а остальные клиенты станут использовать класс Component
с более простым интерфейсом.3. Методы Add/Remove находятся в базовом компоненте. Если же составной объект является базовым сценарием, а одиночный компонент — частным случаем, то гораздо проще добавить операции
Add/Remove
в базовый класс. В этом случае операции класса Leaf
могут генерировать исключение InvalidOperationException
или просто ничего не делать в зависимости от того, является вызов операции Add
на одиночном компоненте ошибкой или нет.Источник: Тепляков С. "Паттерны проектирования на платформе .NET." — СПб.: Питер, 2015. Глава 15.
День четыреста двадцать второй. #Оффтоп
Важное обновление по обучению и сертификации Microsoft
Новости коронавируса добрались и до моего канала. Но у меня новости – ВНЕЗАПНО! – хорошие. Компания Microsoft в связи с ситуацией с COVID-19 в мире внесла несколько изменений в процессы обучения и сертификации. Сначала самое главное, что касается меня лично.
1. Продление срока действия сертификатов MCSA, MCSD, MCSE и соответствующих экзаменов
«Мы знаем, что многие из вас работают над получением сертификата Microsoft Certified Solutions Architect (MCSA), Microsoft Certified Solutions Developer (MCSD) или Microsoft Certified Solutions Expert (MCSE). Мы понимаем, что текущая ситуация может потенциально помешать вам завершить сертификацию до изначальной даты истечения сертификатов 30 июня 2020 года. Для решения этой проблемы мы перенесли эту дату на 31 января 2021 года, чтобы дать вам больше времени для сдачи экзаменов и получения сертификата.»
2. Многие центры тестирования Pearson VUE закрыты, поэтому пока доступна возможность только онлайн сдачи экзаменов. В Microsoft пообещали, что увеличат пропускную способность канала, чтобы проблем с сетью не возникало.
3. Отменён штраф за перенос или отмену экзаменов. Раньше бесплатно можно было перенести экзамен не позднее, чем за 6 дней. Теперь отмену или перенос экзамена даже в день сдачи обещают сделать бесплатными.
4. На полгода продлён срок действия ролевых сертификатов, до 31 января 2021 года продлён срок действия экзаменационных ваучеров или предложенных скидок, которые истекают в период до 31 августа 2020.
5. Подписчики Visual Studio могут получить до шести месяцев бесплатного доступа к курсам Pluralsight. Активируйте бонус, нажав на плитку Pluralsight на портале подписчиков. Я успешно воспользовался. Правда, мне дали только на месяц. Но я уже подписался на роль «ASP.NET Web Developer», которая, судя по списку курсов, соответствует нужному мне сертификату «MCSA: Web Applications»:
- C#
- ASP.NET Core
- ASP.NET MVC5
- Entity Framework Core
- Data Modeling
- Querying Data with T-SQL
- Visual Studio 2019
И 3 необязательных курса:
- JSON
- Git
- NoSQL Databases Mongo Edition (MongoDB)
Источники:
- https://www.microsoft.com/en-us/learning/community-blog-post.aspx?BlogId=8&Id=375289
- https://devblogs.microsoft.com/visualstudio/visual-studio-subscriptions-resources-for-remote-learning-and-productivity/
Важное обновление по обучению и сертификации Microsoft
Новости коронавируса добрались и до моего канала. Но у меня новости – ВНЕЗАПНО! – хорошие. Компания Microsoft в связи с ситуацией с COVID-19 в мире внесла несколько изменений в процессы обучения и сертификации. Сначала самое главное, что касается меня лично.
1. Продление срока действия сертификатов MCSA, MCSD, MCSE и соответствующих экзаменов
«Мы знаем, что многие из вас работают над получением сертификата Microsoft Certified Solutions Architect (MCSA), Microsoft Certified Solutions Developer (MCSD) или Microsoft Certified Solutions Expert (MCSE). Мы понимаем, что текущая ситуация может потенциально помешать вам завершить сертификацию до изначальной даты истечения сертификатов 30 июня 2020 года. Для решения этой проблемы мы перенесли эту дату на 31 января 2021 года, чтобы дать вам больше времени для сдачи экзаменов и получения сертификата.»
2. Многие центры тестирования Pearson VUE закрыты, поэтому пока доступна возможность только онлайн сдачи экзаменов. В Microsoft пообещали, что увеличат пропускную способность канала, чтобы проблем с сетью не возникало.
3. Отменён штраф за перенос или отмену экзаменов. Раньше бесплатно можно было перенести экзамен не позднее, чем за 6 дней. Теперь отмену или перенос экзамена даже в день сдачи обещают сделать бесплатными.
4. На полгода продлён срок действия ролевых сертификатов, до 31 января 2021 года продлён срок действия экзаменационных ваучеров или предложенных скидок, которые истекают в период до 31 августа 2020.
5. Подписчики Visual Studio могут получить до шести месяцев бесплатного доступа к курсам Pluralsight. Активируйте бонус, нажав на плитку Pluralsight на портале подписчиков. Я успешно воспользовался. Правда, мне дали только на месяц. Но я уже подписался на роль «ASP.NET Web Developer», которая, судя по списку курсов, соответствует нужному мне сертификату «MCSA: Web Applications»:
- C#
- ASP.NET Core
- ASP.NET MVC5
- Entity Framework Core
- Data Modeling
- Querying Data with T-SQL
- Visual Studio 2019
И 3 необязательных курса:
- JSON
- Git
- NoSQL Databases Mongo Edition (MongoDB)
Источники:
- https://www.microsoft.com/en-us/learning/community-blog-post.aspx?BlogId=8&Id=375289
- https://devblogs.microsoft.com/visualstudio/visual-studio-subscriptions-resources-for-remote-learning-and-productivity/
TECHCOMMUNITY.MICROSOFT.COM
Microsoft Learn Blog
День четыреста двадцать третий. #ЗаметкиНаПолях
Я не сторонник микрооптимизаций. Код должен быть в первую очередь читаемым и легко сопровождаемым. Но иногда есть моменты, когда минимальное изменение может ускорить работу. Вот пример.
Недавно в пул реквесте для среды выполнения .NET на GitHub возникла дискуссия, в ходе которой Ян Котас из Microsoft отметил, что порядок интерфейсов важен для производительности операции приведения к интерфейсному типу. Я никогда не слышал об этом и, судя по комментариям, я не одинок.
В CLR определения классов содержат массив реализованных интерфейсов. Это означает, что, если вы осуществляете приведение к последнему интерфейсу, определённому в классе, среда выполнения должна пройти весь массив, чтобы выполнить приведение. А приведение к первому интерфейсу гораздо быстрее.
Конечно, в обоих случаях это происходит очень быстро, но, если приведений миллионы, это может быть важно! Вот код реального примера с таймингом.
Я не сторонник микрооптимизаций. Код должен быть в первую очередь читаемым и легко сопровождаемым. Но иногда есть моменты, когда минимальное изменение может ускорить работу. Вот пример.
Недавно в пул реквесте для среды выполнения .NET на GitHub возникла дискуссия, в ходе которой Ян Котас из Microsoft отметил, что порядок интерфейсов важен для производительности операции приведения к интерфейсному типу. Я никогда не слышал об этом и, судя по комментариям, я не одинок.
В CLR определения классов содержат массив реализованных интерфейсов. Это означает, что, если вы осуществляете приведение к последнему интерфейсу, определённому в классе, среда выполнения должна пройти весь массив, чтобы выполнить приведение. А приведение к первому интерфейсу гораздо быстрее.
Конечно, в обоих случаях это происходит очень быстро, но, если приведений миллионы, это может быть важно! Вот код реального примера с таймингом.
День четыреста двадцать четвёртый. #Оффтоп #97Вещей
97 Вещей, Которые Должен Знать Каждый Программист
32. Инкапсулируйте Поведение, А Не Только Состояние
«Инкапсуляция – это не сокрытие!»
ExtremeCode
В теории информационных систем инкапсуляция является одной из наиболее полезных конструкций при работе с большими и сложными структурами системы. В индустрии ПО ценность инкапсуляции хорошо понятна. Она поддерживается языковыми конструкциями программирования, такими как подпрограммы и функции, модули и пакеты, классы и так далее.
Модули и пакеты помогают инкапсулировать масштабные сущности, в то время как классы, подпрограммы и функции инкапсулируют детали реализации. За прошедшие годы я обнаружил, что классы являются одной из самых проблемных для разработчиков конструкций с точки зрения инкапсуляции. Нередко можно найти класс с одним основным методом из 3000 строк или класс только со свойствами для его примитивных атрибутов. Эти примеры демонстрируют, что создатели такого класса не полностью используют объектно-ориентированное мышление и не умеют использовать силу объектов в качестве моделирующих конструкций.
Объект инкапсулирует как состояние, так и поведение, где поведение определяется фактическим состоянием. Рассмотрим объект «
Как это работает на практике лучше всего проиллюстрировать на примере. Допустим, у нас есть три класса:
Менее опытные ООП-разработчики могут принять решение обернуть все бизнес-правила в отдельный объект, который часто называют
Не нарушайте инкапсуляцию, а используйте всю мощь вашего языка программирования для её поддержания.
Источник: https://www.oreilly.com/library/view/97-things-every/9780596809515/
Автор оригинала – Einar Landre
97 Вещей, Которые Должен Знать Каждый Программист
32. Инкапсулируйте Поведение, А Не Только Состояние
«Инкапсуляция – это не сокрытие!»
ExtremeCode
В теории информационных систем инкапсуляция является одной из наиболее полезных конструкций при работе с большими и сложными структурами системы. В индустрии ПО ценность инкапсуляции хорошо понятна. Она поддерживается языковыми конструкциями программирования, такими как подпрограммы и функции, модули и пакеты, классы и так далее.
Модули и пакеты помогают инкапсулировать масштабные сущности, в то время как классы, подпрограммы и функции инкапсулируют детали реализации. За прошедшие годы я обнаружил, что классы являются одной из самых проблемных для разработчиков конструкций с точки зрения инкапсуляции. Нередко можно найти класс с одним основным методом из 3000 строк или класс только со свойствами для его примитивных атрибутов. Эти примеры демонстрируют, что создатели такого класса не полностью используют объектно-ориентированное мышление и не умеют использовать силу объектов в качестве моделирующих конструкций.
Объект инкапсулирует как состояние, так и поведение, где поведение определяется фактическим состоянием. Рассмотрим объект «
Дверь
». Она имеет четыре состояния: «Закрыта
», «Открыта
», «Закрывается
», «Открывается
». И предоставляет две операции: «Открыть
» и «Закрыть
». В зависимости от состояния операции «Открыть
» и «Закрыть
» будут вести себя по-разному. Это неотъемлемое свойство объекта делает процесс проектирования концептуально простым. Он сводится к двум простым задачам: назначение ответственности и делегирование её от объекта к объекту, включая протоколы взаимодействия между объектами.Как это работает на практике лучше всего проиллюстрировать на примере. Допустим, у нас есть три класса:
Customer
, Order
и Item
. Объект Customer
– это естественное место для инкапсулирования данных об остатке средств и правил проверки остатка. Объект Order
знает о связанном с ним объекте Customer
, и его операция добавления позиции товара addItem делегирует фактическую проверку платёжеспособности клиента ему самому, вызывая метод проверки остатка средств и передавая ему стоимость добавленного товара customer.validateCredit(item.Price)
. Если условие не выполняется, может быть сгенерировано исключение, и покупка отмененяется.Менее опытные ООП-разработчики могут принять решение обернуть все бизнес-правила в отдельный объект, который часто называют
OrderManager
или OrderService
. В этих проектах Order
, Customer
и Item
рассматриваются лишь как набор данных. Вся логика отделена от классов данных и объединена в один большой метод со множеством внутренних конструкций if-then-else. Такие методы легко ломаются и их почти невозможно поддерживать. Причина? Нарушена инкапсуляция.Не нарушайте инкапсуляцию, а используйте всю мощь вашего языка программирования для её поддержания.
Источник: https://www.oreilly.com/library/view/97-things-every/9780596809515/
Автор оригинала – Einar Landre
This media is not supported in your browser
VIEW IN TELEGRAM
День четыреста двадцать пятый. #ЧтоНовенького
VS 2019 16.6 Preview 2. Начало
Visual Studio 2019 версии 16.6 Preview 2 предоставляет несколько новых интересных возможностей, которые вы можете попробовать уже сегодня.
1. Модернизирована функциональность Git. Вы можете начать работу с кодом, просматривая онлайн-репозитории GitHub или Azure в Visual Studio и клонируя их локально. Для новых проектов вы можете инициализировать Git-репозиторий и поместить его в GitHub одним щелчком мыши. Новое окно инструмента Git объединяет все операции Git, связанные с вашим кодом.
Функция упрощает сложную навигацию для Git, которая использовалась в Team Explorer. Новое окно минимизирует переключение контекста между инструментами и приложениями, и вы можете быстро выполнять нужные операции. Также появилось новое меню Git на замену старому Teams.
Если вы хотите попробовать новый инструмент скачайте превью версию, перейдите в Tools > Options и включите функцию New Git user experience в разделе Preview Features.
Источник
VS 2019 16.6 Preview 2. Начало
Visual Studio 2019 версии 16.6 Preview 2 предоставляет несколько новых интересных возможностей, которые вы можете попробовать уже сегодня.
1. Модернизирована функциональность Git. Вы можете начать работу с кодом, просматривая онлайн-репозитории GitHub или Azure в Visual Studio и клонируя их локально. Для новых проектов вы можете инициализировать Git-репозиторий и поместить его в GitHub одним щелчком мыши. Новое окно инструмента Git объединяет все операции Git, связанные с вашим кодом.
Функция упрощает сложную навигацию для Git, которая использовалась в Team Explorer. Новое окно минимизирует переключение контекста между инструментами и приложениями, и вы можете быстро выполнять нужные операции. Также появилось новое меню Git на замену старому Teams.
Если вы хотите попробовать новый инструмент скачайте превью версию, перейдите в Tools > Options и включите функцию New Git user experience в разделе Preview Features.
Источник
День четыреста двадцать шестой. #АтакиНаСайты
ASP.NET MVC 5. Безопасность Веб-Приложений
5. Открытое перенаправление
Любое веб-приложение, которое перенаправляет на URL-адрес, указанный в запросе, например, в строке запроса или в данных формы, потенциально может быть атаковано для перенаправления пользователей на внешний вредоносный URL-адрес. Это называется атакой с открытым перенаправлением. Всякий раз, когда логика вашего приложения перенаправляет на указанный URL-адрес, вы должны убедиться, что URL-адрес перенаправления не был подделан.
Простая атака с открытым перенаправлением
Рассмотрим пример. В веб-приложении при попытке посетить действие контроллера, помеченное атрибутом
Более сложная атака включает элементы фишинга. Подобная атака была проведена на сайт NerdDinner (после этого уязвимость на сайте была исправлена). Сначала злоумышленник отправляет ссылку на страницу входа в NerdDinner, которая включает перенаправление на поддельную страницу:
Вы, скорее всего, не заметите этого, особенно потому, что злоумышленник убедился, чтобы его поддельная страница выглядела точно так же, как и страница настоящего сайта. Поддельная страница входа содержит сообщение о неправильном пароле. Пользователь ничего не подозревает и вводит логин и пароль повторно. Поддельная страница сохраняет эту информацию и отправляет вас обратно на настоящий сайт NerdDinner.com. На данный момент сайт NerdDinner.com уже аутентифицировал вас, поэтому поддельная страница входа в систему может безопасно перенаправлять туда. В итоге у злоумышленника есть ваши логин и пароль, а вы даже не знаете, что предоставили их ему.
Предотвращение атаки с открытым перенаправлением
Проверка адреса перенаправления предотвращает такую атаку. В ASP.NET Core также можно использовать действие
Источник: Jon Galloway “Professional ASP.NET MVC 5”. – John Wiley & Sons Inc., 2014. Глава 7.
ASP.NET MVC 5. Безопасность Веб-Приложений
5. Открытое перенаправление
Любое веб-приложение, которое перенаправляет на URL-адрес, указанный в запросе, например, в строке запроса или в данных формы, потенциально может быть атаковано для перенаправления пользователей на внешний вредоносный URL-адрес. Это называется атакой с открытым перенаправлением. Всякий раз, когда логика вашего приложения перенаправляет на указанный URL-адрес, вы должны убедиться, что URL-адрес перенаправления не был подделан.
Простая атака с открытым перенаправлением
Рассмотрим пример. В веб-приложении при попытке посетить действие контроллера, помеченное атрибутом
AuthorizeAttribute
, неавторизованный пользователь попадает в представление /Account/LogOn
. Это перенаправление на включает параметр строки запроса returnUrl
, чтобы пользователи могли вернуться на первоначально запрошенный URL после успешного входа в систему. Поскольку этот параметр не проверяется, злоумышленник может изменить его на любой URL-адрес для проведения атаки с открытым перенаправлением.Более сложная атака включает элементы фишинга. Подобная атака была проведена на сайт NerdDinner (после этого уязвимость на сайте была исправлена). Сначала злоумышленник отправляет ссылку на страницу входа в NerdDinner, которая включает перенаправление на поддельную страницу:
https://nerddinner.com/Account/LogOn?returnUrl=https://nerddiner.com/Account/LogOnОбратите внимание, что обратный URL-адрес указывает на поддельный сайт nerddiner.com, в котором одна «n». Этот домен контролирует злоумышленник. Когда вы проходите по ссылке, вы попадаете на обычную страницу входа на NerdDinner.com. При успешном входе в систему действие
LogOn
перенаправляет вас на URL-адрес, указанный в параметре строки запроса returnUrl
. В данном случае это введённый злоумышленником URL:https://nerddiner.com/Account/LogOn
. Вы, скорее всего, не заметите этого, особенно потому, что злоумышленник убедился, чтобы его поддельная страница выглядела точно так же, как и страница настоящего сайта. Поддельная страница входа содержит сообщение о неправильном пароле. Пользователь ничего не подозревает и вводит логин и пароль повторно. Поддельная страница сохраняет эту информацию и отправляет вас обратно на настоящий сайт NerdDinner.com. На данный момент сайт NerdDinner.com уже аутентифицировал вас, поэтому поддельная страница входа в систему может безопасно перенаправлять туда. В итоге у злоумышленника есть ваши логин и пароль, а вы даже не знаете, что предоставили их ему.
Предотвращение атаки с открытым перенаправлением
Проверка адреса перенаправления предотвращает такую атаку. В ASP.NET Core также можно использовать действие
LocalRedirect
. Но, возможно, вы захотите предпринять дополнительные действия при обнаружении открытого перенаправления. Тогда можно проверять адрес перенаправления с помощью метода расширения Url.IsLocalUrl(returnUrl)
, возвращающего bool
. И если адрес не является локальным, например, регистрировать это как исключение безопасности и отображать пользователю сообщение, что ссылка, которую они использовали, могла быть вредоносной.Источник: Jon Galloway “Professional ASP.NET MVC 5”. – John Wiley & Sons Inc., 2014. Глава 7.
День четыреста двадцать седьмой. #ЧтоНовенького
VS 2019 16.6 Preview 2. Продолжение
Visual Studio 2019 версии 16.6 Preview 2 предоставляет несколько новых интересных возможностей, которые вы можете попробовать уже сегодня.
Первая часть
2. Новый инструмент .NET Async
Новый инструмент является частью набора инструментов Performance Profiler. Это упрощает понимание и оптимизацию async/await кода в .NET. По сути, вы можете использовать его для получения точной информации о сроках выполнения различных задач, включая то, сколько времени они ожидали отправки в поток, сколько времени потребовалось для завершения и были ли задачи объединены в цепочку.
4. Новые возможности отладки JavaScript/TypeScript
Отладчик JavaScript/TypeScript теперь поддерживает отладку service worker’ов, web worker’ов, iFrame’ов и кода JavaScript вашей страницы одновременно. Кроме того, теперь поддерживается отладка серверных и клиентских приложений JavaScript одновременно.
5. Построитель Моделей ML.NET
С помощью ML.NET Model Builder вы можете легко создавать и использовать пользовательские модели машинного обучения для классификации текста, прогнозирования значений, рекомендаций и классификации изображений в своих приложениях .NET. Всё, что вам нужно сделать, это выбрать сценарий машинного обучения и набор данных. Model Builder позаботится об обучении моделей, выборе наилучшей модели для ваших данных и создании кода .NET для использования модели в вашем приложении. Вы даже можете масштабироваться до облака и использовать возможности машинного обучения Azure для моделей классификации изображений, не выходя из Visual Studio или .NET.
6. Обновления процесса публикации
Теперь предлагается новый процесс в виде мастера для создания новых профилей публикации. Этот инструмент проведёт вас через различные варианты. Даже если некоторые компоненты Visual Studio отсутствуют в вашей установке, вы всё равно будете иметь доступ к полному набору целей и параметров публикации. Следовательно, любые недостающие компоненты будут идентифицированы и запрошены для установки по требованию. Сводная страница профиля публикации также была обновлена в соответствии с новыми возможностями, доступными на вкладке Connected Services для настройки зависимостей для служб Azure.
Источник: https://devblogs.microsoft.com/visualstudio/visual-studio-2019-version-16-6-preview-2/
VS 2019 16.6 Preview 2. Продолжение
Visual Studio 2019 версии 16.6 Preview 2 предоставляет несколько новых интересных возможностей, которые вы можете попробовать уже сегодня.
Первая часть
2. Новый инструмент .NET Async
Новый инструмент является частью набора инструментов Performance Profiler. Это упрощает понимание и оптимизацию async/await кода в .NET. По сути, вы можете использовать его для получения точной информации о сроках выполнения различных задач, включая то, сколько времени они ожидали отправки в поток, сколько времени потребовалось для завершения и были ли задачи объединены в цепочку.
4. Новые возможности отладки JavaScript/TypeScript
Отладчик JavaScript/TypeScript теперь поддерживает отладку service worker’ов, web worker’ов, iFrame’ов и кода JavaScript вашей страницы одновременно. Кроме того, теперь поддерживается отладка серверных и клиентских приложений JavaScript одновременно.
5. Построитель Моделей ML.NET
С помощью ML.NET Model Builder вы можете легко создавать и использовать пользовательские модели машинного обучения для классификации текста, прогнозирования значений, рекомендаций и классификации изображений в своих приложениях .NET. Всё, что вам нужно сделать, это выбрать сценарий машинного обучения и набор данных. Model Builder позаботится об обучении моделей, выборе наилучшей модели для ваших данных и создании кода .NET для использования модели в вашем приложении. Вы даже можете масштабироваться до облака и использовать возможности машинного обучения Azure для моделей классификации изображений, не выходя из Visual Studio или .NET.
6. Обновления процесса публикации
Теперь предлагается новый процесс в виде мастера для создания новых профилей публикации. Этот инструмент проведёт вас через различные варианты. Даже если некоторые компоненты Visual Studio отсутствуют в вашей установке, вы всё равно будете иметь доступ к полному набору целей и параметров публикации. Следовательно, любые недостающие компоненты будут идентифицированы и запрошены для установки по требованию. Сводная страница профиля публикации также была обновлена в соответствии с новыми возможностями, доступными на вкладке Connected Services для настройки зависимостей для служб Azure.
Источник: https://devblogs.microsoft.com/visualstudio/visual-studio-2019-version-16-6-preview-2/
День четыреста двадцать восьмой. #ЧтоНовенького
VS 2019 16.6 Preview 2. Окончание
Visual Studio 2019 версии 16.6 Preview 2 предоставляет несколько новых интересных возможностей, которые вы можете попробовать уже сегодня.
Первая часть | Вторая часть
7. Продуктивность в .NET
Добавлено несколько новых возможностей в меню Quick Actions and Refactorings, доступному через
2. Возможность автоматически генерировать заголовочные комментарии для существующих файлов, проектов и решений с помощью EditorConfig. Вы можете добавить правило
3. Теперь вы можете упростить условные выражения, удалив ненужный код, используя новую возможность Simplify conditional expression (см. картинку 4 ниже).
4. Кроме того, появилась новая опция Convert verbatim string, которая позволяет преобразовывать обычные строковые литералы в дословные и обратно (см. картинку 5 ниже).
Источник: https://devblogs.microsoft.com/visualstudio/visual-studio-2019-version-16-6-preview-2/
VS 2019 16.6 Preview 2. Окончание
Visual Studio 2019 версии 16.6 Preview 2 предоставляет несколько новых интересных возможностей, которые вы можете попробовать уже сегодня.
Первая часть | Вторая часть
7. Продуктивность в .NET
Добавлено несколько новых возможностей в меню Quick Actions and Refactorings, доступному через
Ctrl+.
1. Явное приведение, когда выражение не может быть приведено явным образом. Выберите пункт меню Add explicit cast (см. картинку 1 ниже).2. Возможность автоматически генерировать заголовочные комментарии для существующих файлов, проектов и решений с помощью EditorConfig. Вы можете добавить правило
file_header_template
в файл EditorConfig и задать ему нужный заголовок. В первой строке любого файла вызовите Quick Actions and Refactorings > Add file banner. Также здесь вы можете применить заголовок к файлу, всем файлам проекта или решения, в блоке Fix all occurences in: (см. картинки 2 и 3 ниже).3. Теперь вы можете упростить условные выражения, удалив ненужный код, используя новую возможность Simplify conditional expression (см. картинку 4 ниже).
4. Кроме того, появилась новая опция Convert verbatim string, которая позволяет преобразовывать обычные строковые литералы в дословные и обратно (см. картинку 5 ниже).
Источник: https://devblogs.microsoft.com/visualstudio/visual-studio-2019-version-16-6-preview-2/