• 9 лучших опенсорс находок за сентябрь 2019

      Доброго Хактоберфеста, дамы и господа. Подготовил для вас подборку самых интересных находок из опенсорса за сентябрь 2019.


      За полным списком новых полезных инструментов, статей и докладов можно обратиться в мой телеграм канал @OpensourceFindings (по ссылке зеркало, если не открывается оригинал).


      В сегодняшнем выпуске.
      Технологии внутри: Python, C, Rust, Ruby, JavaScript, Go.
      Тематика: веб разработка, администрирование, инструменты разработчика.


      Прошлый выпуск.

      Читать дальше →
    • Описание алгоритмов сортировки и сравнение их производительности

      Вступление


      На эту тему написано уже немало статей. Однако я еще не видел статьи, в которой сравниваются все основные сортировки на большом числе тестов разного типа и размера. Кроме того, далеко не везде выложены реализации и описание набора тестов. Это приводит к тому, что могут возникнуть сомнения в правильности исследования. Однако цель моей работы состоит не только в том, чтобы определить, какие сортировки работают быстрее всего (в целом это и так известно). В первую очередь мне было интересно исследовать алгоритмы, оптимизировать их, чтобы они работали как можно быстрее. Работая над этим, мне удалось придумать эффективную формулу для сортировки Шелла.

      Во многом статья посвящена тому, как написать все алгоритмы и протестировать их. Если говорить о самом программировании, то иногда могут возникнуть совершенно неожиданные трудности (во многом благодаря оптимизатору C++). Однако не менее трудно решить, какие именно тесты и в каких количествах нужно сделать. Коды всех алгоритмов, которые выложены в данной статье, написаны мной. Доступны и результаты запусков на всех тестах. Единственное, что я не могу показать — это сами тесты, поскольку они весят почти 140 ГБ. При малейшем подозрении я проверял и код, соответствующий тесту, и сам тест. Надеюсь, что статья Вам понравится.
      Читать дальше →
    • И ещё о сортировках

        И ещё о сортировках


        Рискну опять поднять эту тему. Начну со ссылки на статью Михаила Опанасенко (oms7), очень впечатляющую по объёмам проделанной работы, а также по количеству приведёных ссылок. Свой материал начал готовить, не зная об этой публикации, что впоследствии, после ознакомления привело к необходимости его существенной переработки. Для тех, кто уже прочитал эту статью, сообщаю, что в моём материале, исследуются более разнообразные по типам данные, в частности, строки и вещественные числа, используются библиотеки boost и bsd, а также затрагиваются некоторые другие отсутствующие в названной статье темы.
        Читать дальше →
      • Мониторинг .NET приложений

        • Перевод

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


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

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

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


        Читать дальше →
        • +19
        • 9,3k
        • 2
      • Современное окружение для React Native приложений

        • Перевод
        • Tutorial
        В этой статье мы рассмотрим настройку React Native окружения с использованием expo-cli, Typescript, и Jest.

        Typescript поможет нам избежать ошибок при разработке и написать более эффективное мобильное приложение.

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

        Также интеграция с React Native даст нам возможность использовать сервис автодополнения, навигацию по коду и рефакторинг.

        Expo — это набор инструментов, которые упрощают создание нативных React приложений. В этом уроке я собираюсь показать вам, как вы можете быстро создавать нативные React приложения, используя Expo.


        Читать дальше →
      • Инструментарий для анализа и отладки .NET приложений

        • Перевод

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


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


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


        Читать дальше →
        • +50
        • 17,5k
        • 9
      • Использование DiagnosticSource в .NET Core: практика

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


          В настоящее время DiagnosticSource уже используется в AspNetCore, EntityFrameworkCore, HttpClient и SqlClient — каждый из них отправляет собственные события, которые могут быть перехвачены и обработаны.


          В этой статье я хочу рассмотреть несколько примеров того, как можно на практике использовать DiagnosticSource в приложениях ASP.NET Core.


          • CorrelationID и пробрасывание заголовков между сервисами
          • Сбор метрик и трассировок
          • Логирование

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

          Читать дальше →
        • День, когда Dodo IS остановилась. Асинхронный сценарий

            Привет, Хабр! Каждый SRE в нашей команде когда-то мечтал спокойно спать по ночам. Мечты имеют свойство сбываться. В этой статье я расскажу про это и про то, как мы достигаем производительности и устойчивости своей системы Dodo IS.

            Читать дальше →
          • .NET: Инструменты для работы с многопоточностью и асинхронностью. Часть 1

              Публикую на Хабр оригинал статьи, перевод которой размещен в блоге Codingsight.
              Вторая часть доступна здесь

              Необходимость делать что-то асинхронно, не дожидаясь результат здесь и сейчас, или разделять большую работу между несколькими выполняющими ее единицами была и до появления компьютеров. С их появлением такая необходимость стала очень ощутимой. Сейчас, в 2019, набирая эту статью на ноутбуке с 8 ядерным процессором Intel Core, на котором параллельно этому работает не одна сотня процессов, а потоков и того больше. Рядом, лежит уже немного потрепанный, купленный пару лет назад телефон, у него на борту 8 ядерный процессор. На тематических ресурсах полно статей и видео, где их авторы восхищаются флагманскими смартфонами этого года куда ставят 16ти-ядерные процессоры. MS Azure предоставляет менее чем за 20$/час виртуальную машину со 128 ядерным процессором и 2 TB RAM. К сожалению невозможно извлечь максимум и обуздать эту мощь не умея управлять взаимодействием потоков.
              Читать дальше →
              • +34
              • 27,8k
              • 5
            • Асинхронное программирование (полный курс)

              • Tutorial

              Методы асинхронного программирования


              Асинхронное программирование за последнее время стало не менее развитым направлением, чем классическое параллельное программирование, а в мире JavaScript, как в браузерах, так и в Node.js, понимание его приемов заняло одно из центральных мест в формировании мировоззрения разработчиков. Предлагаю вашему вниманию целостный и наиболее полный курс с объяснением всех широко распространенных методов асинхронного программирования, адаптеров между ними и вспомогательных проемов. Сейчас он состоит из 23 лекций, 3 докладов и 28 репозиториев с множеством примеров кода на github. Всего около 17 часов видео: ссылка на плейлист.

              Читать дальше →
            • Опыт разработки сервиса Refund Tool с асинхронным API на Kafka

                Что может заставить такую большую компанию как Lamoda с отлаженным процессом и десятками взаимосвязанных сервисов существенно менять подход? Мотивация может быть совершенно разная: от законодательной до присущего всем программистам желания экспериментировать.

                Но это вовсе не значит, что нельзя рассчитывать на дополнительную выгоду. В чем конкретно можно выиграть, если внедрить events-driven API на Kafka, расскажет Сергей Заика (fewald). Про набитые шишки и интересные открытия тоже обязательно будет — не может эксперимент без них обойтись.



                Disclaimer: Это статья основана на материалах митапа, который Сергей провел в ноябре 2018 года на HighLoad++. Живой опыт Lamoda работы с Kafka привлек слушателей не меньше, чем на другие доклады из расписания. Нам кажется, это отличный пример того, что всегда можно и нужно находить единомышленников, а организаторы HighLoad++ и дальше будут стараться создавать располагающую к этому атмосферу.
                Читать дальше →
              • Помогаем Queryable Provider разобраться с интерполированными строками

                Тонкости Queryable Provider


                Queryable Provider не справляется вот с этим:


                 var result = _context.Humans
                                      .Select(x => $"Name: {x.Name}  Age: {x.Age}")
                                      .Where(x => x != "")
                                      .ToList();

                Он не справится с любым выражением, которое будет использовать интерполированную строку, но без трудностей разберет такое:


                 var result = _context.Humans
                                      .Select(x => "Name " +  x.Name + " Age " + x.Age)
                                      .Where(x => x != "")
                                      .ToList();

                Особенно болезненно править баги после включение ClientEvaluation(исключениe при вычислении на клиенте), все профайлы автомаппера должны быть подвергнуты жесткому анализу, на поиск этой самой интерполяции. Давайте разберемся в чем дело и предложим свое решение проблемы

                Читать дальше →
              • JSON API – работаем по спецификации

                  В последнее время веб-разработка разделилась. Теперь мы все не full-stack программисты — мы фронтендеры и бэкендеры. А самое сложное в этом, как и везде, это проблема взаимодействия и интеграции.

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

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


                  Читать дальше →
                • 42 оператора расширенного поиска Google (полный список)

                  • Перевод
                  • Tutorial
                  Те, кто давно занимается поисковой оптимизацией, хорошо знают об операторах расширенного поиска Google. Например, почти все знают об операторе site:, который ограничивает поисковую выдачу одним сайтом.

                  Большинство операторов легко запомнить, это короткие команды. Но уметь эффективно их использовать — совсем другая история. Многие специалисты знают основы, но немногие по-настоящему овладели этими командами.

                  В этой статье я поделюсь советами, которые помогут освоить поисковые операторы для 15 конкретных задач.
                  Читать дальше →
                  • +121
                  • 88,2k
                  • 40
                • Пробую .NET Core + Kubernetes + appmetrics + prometheus + grafana + jobs + health checks

                  • Tutorial
                  Краткое знакомство с kubernetes для разработчиков на примере разворачивания простого шаблонного сайта, с постановкой его на мониторинг, выполнением джобов по расписанию и health checks (все исходники прилагаются)

                  Установка Kubernetes
                  Установка UI
                  Запуск своего приложения в кластере
                  Добавление кастомных метрик в приложение
                  Сбор метрик через Prometheus
                  Отображение метрик в Grafana
                  Выполнение задач по расписанию
                  Отказоустойчивость
                  Выводы
                  Заметки
                  Список литературы
                  Читать дальше →
                  • +19
                  • 15,4k
                  • 4
                • Руководство по ML.NET — первое приложение за 10 минут

                  • Перевод
                  В прошлом году мы представили ML.NET, кросс-платформенную и открытую систему машинного обучения для разработчиков .NET. За это время она очень сильно развилась и прошла через множество версий. Сегодня делимся руководством по тому, как создать свое первое приложение на ml.net за 10 минут.

                  Читать дальше →
                • JOIN локальной коллекции и DbSet в Entity Framework

                  • Перевод

                  Чуть больше года при моём участии состоялся следующий "диалог":


                  .Net App: Эй, Entity Framework, будь любезен дай мне много данных!
                  Entity Framework: Прости, не понял тебя. Что ты имеешь ввиду?
                  .Net App: Да просто мне прилетела коллекция из 100k транзакций. И теперь надо по-быстрому проверить корректность цен на бумаги, которые там указаны.
                  Entity Framework: Ааа, ну давай попробуем…
                  .Net App: Вот код:


                  var query = from p in context.Prices
                              join t in transactions on 
                                new { p.Ticker, p.TradedOn, p.PriceSourceId } equals
                                new { t.Ticker, t.TradedOn, t.PriceSourceId }
                              select p;
                  query.ToList();

                  Entity Framework:



                  Классика! Думаю многим знакома эта ситуация: когда очень хочется “красиво” и быстро сделать поиск в базе, используя JOIN локальной коллекции и DbSet. Обычно этот опыт разочаровывает.


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

                  Читать дальше →
                • Mkcert: валидные HTTPS-сертификаты для localhost


                    В наше время использование HTTPS становится обязательным для всех сайтов и веб-приложений. Но в процессе разработки возникает проблема корректного тестирования. Естественно, Let’s Encrypt и другие CA не выдают сертификаты для localhost.

                    Традиционно есть два решения.
                    Читать дальше →
                  • Как наконец-то начать писать тесты и не пожалеть об этом

                    • Tutorial


                    Приходя на новый проект, я регулярно сталкиваюсь с одной из следующих ситуаций:

                    1. Тестов нет совсем.
                    2. Тестов мало, их редко пишут и не запускают на постоянной основе.
                    3. Тесты присутствуют и включены в CI (Continuous Integration), но приносят больше вреда, чем пользы.

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

                    Что можно сделать, чтобы изменить сложившуюся ситуацию? Идея использования тестов не нова. При этом большинство туториалов напоминают знаменитую картинку про то, как нарисовать сову: подключаем JUnit, пишем первый тест, используем первый мок — и вперед! Такие статьи не отвечают на вопросы о том, какие тесты нужно писать, на что стоит обращать внимание и как со всем этим жить. Отсюда и родилась идея данной статьи. Я постарался кратко обобщить свой опыт внедрения тестов в разных проектах, чтобы облегчить этот путь для всех желающих.
                    Читать дальше →
                  • Универсальный API для получения информации по чекам

                      UPD: после обновления на стороне ФНС АПИ перестал работать.


                      Соответствующая задача создана. Как будет время посмотрю.

                      Привет жителям Хабра.

                      В данной статье хотелось бы рассказать про API для получения чеков, которое нам не предоставила всеми любимая ФНС.

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

                      t=20180518T220500&s=975.88&fn=8710000101125654&i=99456&fp=1250448795&n=1

                      Но расстраиваться я не стал и подумал, что ФНС позаботилась о нас и предоставила API для получения такой информации. Погуглив некоторое время я понял, что ФНС нам предоставила только мобильное приложение для проверки чека и просмотра той информации, что поступила к ним от магазина.
                      Читать дальше →