• В двух словах: Лучшие практики Async/Await в .NET

    • Translation
    В преддверии старта курса «Разработчик C#» подготовили перевод интересного материала.




    Async/Await — Введение


    Языковая конструкция Async/Await существует со времен C# версии 5.0 (2012) и быстро стала одним из столпов современного программирования на .NET — любой уважающий себя C# разработчик, должен использовать ее для повышения производительности приложений, общей отзывчивости и разборчивости кода.

    Async/Await делает обманчиво простым внедрение асинхронного кода и избавляет программиста от необходимости разбираться в деталях его обработки, но многие ли из нас действительно знают, как она работает, и каковы преимущества и недостатки этого метода? Существует много полезной информации, но она разобщена, поэтому я решил написать эту статью.

    Ну что ж, давайте углубимся в тему.
    Читать дальше →
  • .NET Core 3 для Windows Desktop

    • Translation
    В сентябре мы выпустили поддержку .NET Core для создания настольных приложений Windows, включая WPF и Windows Forms. С тех пор мы были рады видеть, что многие разработчики делятся своими историями о переносе настольных приложений в .NET Core. Мы постоянно слышим от .NET-разработчиков настольных приложений для Windows истории о том, как они поддерживают свой бизнес с помощью WPF и Windows Forms, особенно в тех случаях, когда десктоп выигрывает, включая:

    • FOD-приложения (forms over data) с плотным UI
    • Отзывчивый пользовательский интерфейс с низкой задержкой
    • Приложения, которые должны работать в автономном режиме
    • Приложения с зависимостями от кастомных драйверов устройств

    Заглядывайте под кат, чтобы узнать больше о преимуществах .NET Core для создания приложений Windows.

    Читать дальше →
  • Фантастика и фентези за два с половиной года, почти сто хороших книг

    На этот пост меня подтолкнула публикация «Почему я ворую книги, бедные авторы, и как это исправить», а именно — скепсис и возражения на мой комментарий о том, что я не читаю плохие книги. Мне предложили рассказать, как я выбираю книги для чтения и что именно читаю. Ну я и повелся.
    Оформить список было сравнительно просто, FBReader любезно хранил на GoogleDrive все скачанные книги с того момента, как там появилась эта услуга. Предлагаю вашему вниманию список прочитанного мной за 2,5 года из жанров фентези и фантастики.
    Читать дальше →
  • Google после выпуска нового смартфона предложила пользователям пять приложений от цифровой зависимости

      image

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

      Данные приложения дополняют систему Digital Wellbeing (Цифровое благополучие), которую Google представила в 2018 году и которая должна стать обязательной для новых смартфонов с Android 10 с января 2020 года.
      Читать дальше →
    • Async/await в C#: концепция, внутреннее устройство, полезные приемы

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


        Читать дальше →
      • Как я провел лето с C# 8

          В недавнем выпуске подкаста DotNet & More Blazor, NetCore 3.0 Preview, C#8 и не только мы лишь вскользь упомянули такую животрепещущую тему, как C#8. Рассказ об опыте работы с C# 8 был недостаточно большим, что-бы посвящать ему отдельный выпуск, так что было решено поделиться им средствами эпистолярного жанра.


          В данной статье я бы хотел рассказать о своем опыте использования C#8 на продакшене в течение 4 месяцев. Ниже Вы сможете найти ответы на следующие вопросы:


          • Как "пишется" на новом C#
          • Какие возможности оказались действительно полезными
          • Что разочаровало
          Читать дальше →
        • Code style как стандарт разработки

            Давайте сразу, это не про скобочки. Здесь речь пойдет о том, как работает наш мозг и почему code style помогает обеспечивать линейное развитие проекта, значительно ускоряет адаптацию новых сотрудников и, в целом, формирует и воспитывает культуру разработки. Я постарался собрать в одной статье несколько исследований и принципов, посвященных работе мозга разработчика, и тому, как программисты читают код, а также поделился результатами личного эксперимента.

            Интересно? Добро пожаловать под кат.


            Читать дальше →
          • Многопоточность в .NET: когда не хватает производительности



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

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

              Под катом — видео и расшифровка моего доклада с конференции DotNext, где я разбираю несколько примеров, когда использование средств из стандартной библиотеки .NET (Task.Delay, SemaphoreSlim, ConcurrentDictionary) привело к просадкам производительности, и предлагаю решения, заточенные под конкретные задачи и лишённые этих недостатков.
              Читать дальше →
            • Как организовать работу над библиотекой общих компонентов

                Если ваша компания делает несколько продуктов в едином стиле, однажды вам в голову придет идея сделать библиотеку с общим кодом. Например, с UI-компонентами, сервисом авторизации или для работы со сторонними API. Возможно, вы зададитесь вопросами: кто должен поддерживать этот код? Как доносить изменения до пользователей? В конце концов, как вообще заставить их пользоваться вашей библиотекой?

                С 2015 года я работаю в Тинькофф в отделе сервисов для бизнеса. За это время наша команда выросла с 3 до 60+ разработчиков, а экосистема Тинькофф Бизнес — с 3 до 50 веб-приложений. На разных этапах нашего развития мы подходили к работе с общим кодом по-разному, об этом я и хочу рассказать в этой статье.

                image
                Читать дальше →
              • Искусственный интеллект общего назначения. ТЗ, текущее состояние, перспективы

                  В наше время словами «искусственный интеллект» называют очень много различных систем — от нейросети для распознавания картинок до бота для игры в Quake. В википедии дано замечательное определение ИИ — это «свойство интеллектуальных систем выполнять творческие функции, которые традиционно считаются прерогативой человека». То есть из определения явно видно — если некую функцию успешно удалось автоматизировать, то она перестаёт считаться искусственным интеллектом.

                  Тем не менее, когда задача «создать искусственный интеллект» была поставлена впервые, под ИИ подразумевалось нечто иное. Сейчас эта цель называется «Сильный ИИ» или «ИИ общего назначения».
                  Читать дальше →
                • Разработка сайта на WebAssembly с помощью NetCore 3 и Blazor

                    Мое мнение, что WebAssembly будущее интернета. Данная технология на текущий момент уже интегрирована в большинство современных браузерах (а точнее в их движках) на ПК и мобильных устройствах. В таких браузерах как Chrome, Edge, Firefox, и WebKit.


                    В данной статье я опишу как начать разработку сайта WebAssembly в Visual Studio. Статья подойдет для тех, кто хотел бы понять, как начать разрабатывать SPA приложения без использования JavaScript, зная только asp.net mvc, c#, верстку html и css.


                    На момент выхода статьи фреймворк NetCore 3 находится в стадии RC1, а Blazor имеет версию 3.0.0-preview9.19457.4. Релиз NetCore 3 запланирован на сентябрь 2019. Что относительно Blazor то его релиз обещают позднее в ноябре 2019 года, скорее всего после релиза NetCore 3.1


                    Оглавление:

                    Читать дальше →
                  • Проблемы в обновлении KB4512941 вызывают значительное понижение производительности Windows 10 Version 1903

                      30 августа 2019 года накопительное обновление KB4512941 (Build 18362.329) стало доступно для всех пользователей Windows 10 (версия 1903) и Windows Server 2019 (1903) как «необязательное обновление».

                      Скриншот из центра обновлений


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

                      old.reddit.com/r/Windows10/comments/cxmot9/windows_10_1903_update_18362329_causes_high_cpu
                      old.reddit.com/r/Windows10/comments/cxl8lp/win10_kb4512941_problems
                      Читать дальше →
                    • Инкапсуляция для настоящих самураев, или нюансы, связанные с ключевым словом internal в C#

                      Пролог: internal is new public


                      Каждый из нас мечтал о проекте, где всё будет сделано правильно. Это кажется вполне естественным. Как только ты узнаёшь о самой возможности писать хороший код, как только слышишь легенды о том самом коде, который можно легко читать и изменять, сразу загораешься тем самым «ну вот теперь я точно всё сделаю правильно, я ведь теперь умный и Макконнела читал».


                      image

                      Случился такой проект и в моей жизни. Очередной. Причём делаю я его под добровольным надзором, где за каждой моей строчкой следят. Соответственно, уже не только хотелось, но и надо было делать всё правильно. Одним из «правильно» было «чти инкапсуляцию и закрывайся по максимуму, потому что открыться всегда успеешь, а закрыться обратно потом будет поздно». И поэтому я везде, где только мог, стал использовать для классов модификатор доступа internal вместо public. И, естественно, когда ты начинаешь активно использовать новую для тебя фичу языка, возникают некоторые нюансы. О них по порядку и хочу рассказать.

                      Читать дальше →
                    • ООП, «святая троица» и SOLID: некоторый минимум знаний о них

                        Необходимое вступление


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


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


                        Столь малые гарантии поднимают вопросы о причинах, по которым статья пишется. Я считаю, что этим вещам должны учить везде, где учат программированию, вплоть до уроков информатики в школах с углублённым её изучением. Тем не менее, для меня стала пугающе нормальной ситуация, когда я узнаю, что собеседник мой коллега, причём работающий уже не первый год, но про инкапсуляцию «что-то там слышал». Необходимость собрать всё это в одном месте и давать ссылку при возникновении вопросов зрела давно. А тут ещё и мой «pet-project» дал мне изрядно пищи для размышлений.


                        Тут мне могут возразить, что учить эти вещи в школе рановато, и вообще на ООП свет клином не сошёлся. Во-первых, это смотря как учить. Во-вторых, 70% материала этой статьи применимо не только к ООП. Что я буду отмечать отдельно.



                        Читать дальше →
                      • Мониторинг .NET приложений

                        • Translation

                        .NET – управляемая среда выполнения. Это означает, что в ней представлены высокоуровневые функции, которые управляют вашей программой за вас (из Introduction to the Common Language Runtime (CLR), 2007 г.):


                        Среда выполнения предусматривает множество функций, поэтому их удобно разделить по следующим категориям:

                        1. Основные функции, которые влияют на устройство других. К ним относятся:
                          1. сборка мусора;
                          2. обеспечение безопасности доступа к памяти и безопасности системы типов;
                          3. высокоуровневая поддержка языков программирования.
                        2. Дополнительные функции– работают на базе основных. Многие полезные программы обходятся без них. К таким функциям относятся:
                          1. изолирование приложений с помощью AppDomains;
                          2. защита приложений и изолирование в песочнице.
                        3. Другие функции – нужны всем средам выполнения, но при этом они не используют основные функции CLR. Такие функции отражают стремление создать полноценную среду программирования. К ним относятся:
                          1. управление версиями;
                          2. отладка/профилирование;
                          3. обеспечение взаимодействия.

                        Видно, что хотя отладка и профилирование не являются основными или дополнительными функциями, они находятся в списке из-за ‘стремления создать полноценную среду программирования’.


                        Читать дальше →
                        • +19
                        • 8.8k
                        • 2
                      • Новости из мира OpenStreetMap № 473 (06.08.2019-12.08.2019)

                        • Translation

                        Logo


                        Подробный анализ правок в OpenStreetMap в Северной Корее 1 | style Mapbox – data OpenstreetMap contributors


                        Картографирование


                        • На MapRoulette появилась новая задача: проверить до сих пор нетронутые дороги TIGER в штате Вашингтон. Они были импортированы в OSM 12 лет назад, но несмотря на это более 15 тысяч дорог до сих пор не проверены.
                        • Юджин Элвин Виллар и другие члены филиппинского сообщества OSM с радостью заявили, что они будут использовать искусственный интеллект для улучшения качества карты Филиппин в OpenStreetMap. Подробнее об их инициативе Tabang-AI можно прочитать в WikiOSM.
                        Читать дальше →
                      • Что мне не нравится в Windows 10

                          Встретил тут очередной список «10 причин, которые сподвигли перейти с Windows 10 на Linux» и решил составить свой список того, что мне не нравится в Windows 10 — ОС, которой я пользуюсь сегодня. Переходить на Linux я не собираюсь в обозримом будущем, но это совсем не значит, что я доволен всем, что меняется в операционной системе.

                          Сразу отвечу на вопрос «а почему бы не продолжать использовать Windows 7, если что-то не нравится в 10?»

                          Моя работа связана с технической поддержкой, в том числе и компьютеров с десятками. Потому выгодней жить на актуальной версии ОС, а не отмазываться от заданий под соусом «я этой вашей десяткой не пользуюсь». На семёрке я жил, я её помню-знаю, с тех времён там ничего не изменилось. А вот десятка постоянно меняется, чуть задержишься с обновлениями — и настройки какие-то переползут в другое место, логика поведения изменится и т.п. Потому, чтобы не отстать от жизни, в повседневном использовании у меня именно Windows 10.



                          А теперь расскажу, что я в ней не люблю. Поскольку я не только пользователь, но и админ, то нелюбовь будет с двух точек зрения. Кто сам не пользуется, а только админит — тот не встретит половину вещей, а простой пользователь не встретит вторую.
                          Читать дальше →
                        • Инструментарий для анализа и отладки .NET приложений

                          • Translation

                          Заглянуть «под капот» кода или посмотреть на внутреннее устройство CLR можно с помощью множества инструментов. Этот пост родился из твита, и я должен поблагодарить всех, кто помог составить список подходящих инструментов. Если я пропустил какие-то из них, напишите в комментариях.


                          Во-первых, я должен упомянуть, что хороший отладчик уже присутствует в Visual Studio и VSCode. Также существует множество хороших (коммерческих) профилировщиков .NET и инструментов мониторинга приложений, на которые стоит взглянуть. Например, недавно я попробовал поработать с Codetrack и был впечатлён его возможностями.


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


                          Читать дальше →
                          • +50
                          • 16.3k
                          • 9
                        • Применение машинного обучения и Data Science в промышленности

                          • Translation
                          Хабр, привет. Перевел пост, который идёт строго (!) в закладки и передаётся коллегам. Он со списком блокнотов и библиотек ML и Data Science для разных отраслей промышленности. Все коды на Python, и размещены на GitHub. Они будут полезны как для расширения кругозора, так и для запуска своего интересного стартапа.

                          image

                          Отмечу, что если среди читателей есть желающие помочь, и добавить в любую из подотраслей подходящий проект, пожалуйста, свяжитесь со мной. Я их добавлю в список. Итак, давайте начнём изучение списка.
                          Читать дальше →