Подъехала третья часть из серии статей по функциональному программированию. Сегодня мы расскажем обо всех типах этой парадигмы и на примерах покажем их использование. Подробнее о примитивных типах, обобщенных типах и многом другом под катом!
BackEnd разработчик ASP.NET Core.
Функциональное мышление. Часть 2
Друзья, продолжаем разбираться в функциональном программировании. Во второй части из этой серии статей вы познакомитесь с основными принципами этой парадигмы разработки и поймёте, как этот подход отличается от объектно-ориентированного или императивного программирования.
Погружение в F#. Пособие для C#-разработчиков
Этот пост будет не о том, как «перевести» код с C# на F#: различные парадигмы делают каждый из этих языков лучшим для своего круга задач. Однако вы сможете оценить все достоинства функционального программирования быстрее, если не будете думать о переводе кода из одной парадигмы в другую. Настало время любопытных, пытливых и готовых изучать совершенно новые вещи. Давайте начнем!
Все материалы из серии переводов русскоязычного сообщества F#-разработчиков вы сможете найти по тегу #fsharplangru.
Функциональное мышление. Часть 1
В этой серии статей вы познакомитесь с основными принципами функционального программирования и поймёте, что значит «мыслить функционально» и как этот подход отличается от объектно-ориентированного или императивного программирования.
Git happens! 6 типичных ошибок Git и как их исправить
![](https://habrastorage.org/webt/n_/nq/m6/n_nqm6jyinrnpra6in4_sfpjhgy.png)
Прим. перев.: На днях в блоге для инженеров любимого нами проекта GitLab появилась небольшая, но весьма полезная заметка с инструкциями, которые помогают сохранить время и нервы в случае различных проблем, случающихся по мере работы с Git. Вряд ли они будут новы для опытных пользователей, но обязательно найдутся и те, кому они пригодятся. А в конец этого материала мы добавили небольшой бонус от себя. Хорошей всем пятницы!
Все мы делаем ошибки, особенно при работе с такими сложными системами, как Git. Но помните: Git happens!
Контейнеры для взрослых (Часть 02): Практический гид по терминологии
Одни образы контейнеров прекрасно работают без каких-либо особых привилегий, другим в обязательном порядке требуются права root. Причем один и тот же образ/контейнер может объединять в себе сразу несколько шаблонов построения и сценариев использования.
![](https://habrastorage.org/webt/vb/ka/oc/vbkaocfqfq-tdb_a97lu5sifqna.png)
Ниже мы рассмотрим наиболее типовые сценарии использования контейнеров.
(Введение в терминологию контейнеров см. в первой части)
Вся правда о linux epoll
Ну или почти вся...
Я считаю, что проблема в современном интернете — это переизбыток информации разного качества. Найти материал по интересующей теме не проблема, проблема отличить хороший материал от плохого, если у вас мало опыта в данной области. Я наблюдаю картину, когда очень много обзорной информации "по верхам" (практически на уровне простого перечисления), очень мало углубленных статей и совсем нет переходных статей от простого к сложному. Тем не менее именно знание особенностей того или иного механизма и позволяет нам сделать осознанный выбор при разработке.
В статье я постараюсь раскрыть то, что является фундаментальным отличием epoll от других механизмов, то что делает его уникальным, а так же привести статьи, которые просто необходимо прочитать для более глубокого осмысления возможностей и проблем epoll.
Anyone can wield an axe, but it takes a true warrior to make it sing melees melody.
Я предполагаю, что читатель знаком с epoll, по крайней мере прочел страницу man. О epoll, poll, select написано достаточно много, чтобы каждый кто разрабатывал под Linux, хоть раз о нем слышал.
Квантовое будущее: Microsoft Quantum Development Kit
![](https://habrastorage.org/webt/sz/h9/dm/szh9dmijn7rarlewb9wwsd4kmy0.jpeg)
Сбор контекстной информации для логирования
Зачастую требуется записывать в логи дополнительную информацию, которая может прояснить ситуацию и в дальнейшем упростить отладку приложения. Например, если логируется информация об ошибке, неплохо было бы также сохранить в некоторой форме и входные данные, чтобы было проще воспроизвести проблему. Здесь я хочу описать подход, позволяющий собрать эту дополнительную информацию.
Юрий Аккерманн: «Один из фундаментальных принципов FIDO Alliance — обеспечение приватности»
Интервью со старшим сертификационным инженером FIDO Alliance о беспарольной аутентификации
Наши пользователи попросили нас реализовать двухфакторную аутентификацию через приложение Google. И недавно мы эту возможность им предоставили. Примерно в то же время консорциум FIDO Alliance опубликовал стандарты для беспарольной аутентификации на сайтах, в мобильных приложениях и веб-сервисах — WebAuthn и CTAP.
Мы заинтересовались этой темой и подготовили материал на Хабре, в котором поговорили о методах, лежащих в основе новых протоколов.
Затем, чтобы прояснить некоторые моменты, касающиеся тонкостей работы стандарта, мы пообщались с Юрием Аккерманном (herrjemand), старшим сертификационным инженером FIDO Alliance. Он ответил на несколько наших вопросов о прошлом, настоящем и будущем аутентификации FIDO. Представляем вашему вниманию текст интервью.
![](https://habrastorage.org/webt/94/wu/rq/94wurqdsizbrpdkb2orwf93yaw8.jpeg)
Слайды курса «Технологии и разработка СУБД»
![](https://habrastorage.org/webt/mu/o9/wb/muo9wbacmeq-rlwlbxxm_6g36gk.jpeg)
На протяжении последнего года моя коллега Анастасия Лубенникова и я вели курс под названием «Технологии и разработка СУБД». Данный курс посвящен разработке реляционных СУБД с акцентом на конкретную реализацию в лице PostgreSQL. Мы сотрудничали сразу с несколькими ВУЗами. На ВШЭ это был обязательный предмет, рассчитанный на студентов 4-го курса (на фото студенты сдают экзамен). В ВМК МГУ это был предмет по выбору, на который ходили студенты разных курсов.
epoll и Windows IO Completion Ports: практическая разница
Введение
В этой статье мы попробуем разобраться чем на практике отличается механизм epoll от портов завершения (Windows I/O Completion Port или IOCP). Это может быть интересно системным архитекторам, проектирующим высокопроизводительные сетевые сервисы или программистам, портирующим сетевой код с Windows на Linux или наоборот.
Обе эти технологии весьма эффективны для обработки большого количества сетевых соединений.
Они отличаются от других методов по следующим пунктам:
- Нет ограничений (кроме общих ресурсов системы) на общее количество наблюдаемых дескрипторов и типов событий
- Масштабирование работает достаточно хорошо — если вы уже мониторите N дескрипторов, то переход к мониторингу N + 1 займёт очень мало времени и ресурсов
- Достаточно легко задействовать пул потоков для параллельной обработки происходящих событий
- Нет никакого смысла использовать при единичных сетевых соединениях. Все преимущества начинают проявляться при 1000+ соединений
Если перефразировать всё вышесказанное, обе данные технологии созданы для разработки сетевых сервисов, обрабатывающих множество входящих соединений от клиентов. Но в то же время между ними есть существенная разница и при разработке тех же сервисов её важно знать.
(Upd: данная статья — перевод)
Теория вычислений. Введение в конечные автоматы
Конечные автоматы (finite-state machine)
Это до предела упрощенная модель компьютера имеющая конечное число состояний, которая жертвует всеми особенностями компьютеров такие как ОЗУ, постоянная память, устройства ввода-вывода и процессорными ядрами в обмен на простоту понимания, удобство рассуждения и легкость программной или аппаратной реализации.
С помощью КА можно реализовать такие вещи как, регулярные выражения, лексический анализатор, ИИ в играх и тд.
У конечных автоматов имеется таблица переходов, текущее состояние автомата, стартовое состояние и заключительное состояние.
Таблица переходов — В ней хранятся переходы для текущего состояния и входного символа. Простейшая реализация может быть как двумерный массив.
- По горизонтали вверху находятся возможные входные символы.
- По вертикали слева находятся текущие возможные состояния.
![image](https://habrastorage.org/webt/yk/ot/sw/ykotsw2ycozzk0jl-befj4gqesc.png)
Здесь видно, что из состояния 0 в состояние 1 можно попасть только, если у нас будет входной символ 'a', из состояния 1 в состояние 2, если символ 'b'.
Текущее состояние — множество состояний в котором автомат может находиться в данный момент времени.
Стартовое состояние — состояние откуда КА начинает свою работу.
Заключительное состояние — множество состояний в которых автомат принимает определенную цепочку символов, в ином случае отвергает.
Антипаттерны тестирования ПО
Введение
Есть несколько статей об антипаттернах разработки ПО. Но большинство из них говорят о деталях на уровне кода и фокусируются на конкретной технологии или языке программирования.
В этой статье я хочу сделать шаг назад и перечислить высокоуровневые антипаттерны тестирования, общие для всех. Надеюсь, вы узнаете некоторые из них независимо от языка программирования.
Терминология
К сожалению, в тестировании пока не выработали общую терминологию. Если спросить сотню разработчиков, в чём разница между интеграционным, сквозным и компонентным тестом, то получите сто разных ответов. Для этой статьи ограничимся такой пирамидой тестов:
![](https://habrastorage.org/getpro/habr/post_images/b6d/7a8/3ed/b6d7a83ed09e1a8046529bebfe02836e.png)
Если не видели пирамиду тестов, настоятельно рекомендую ознакомиться с ней. Вот некоторые хорошие статьи для начала:
- «Забытый слой пирамиды автоматических тестов» (Майк Кон, 2009)
- «Пирамида тестов» (Мартин Фаулер, 2012)
- «Блог отдела тестирования Google» (Google, 2015)
- «Пирамида тестов на практике» (Хэм Фокке, 2018)
(Законы Акина) законы космической инженерии
2. Создание правильной ракеты занимает бесконечное количество времени. Поэтому следует создавать ракеты, в которых что-то неправильно.
Особенности анализа CRM систем в ресторанном бизнесе
Введение в квантовые вычисления
![](https://habrastorage.org/webt/iq/pd/ar/iqpdaraq68utwdpz43nzed1llcs.jpeg)
Прокачиваем производительность C# с Федерико Луисом
Сегодня мы поговорим о производительности в C#, о способах прокачать её до неузнаваемости. Задача этой статьи — продемонстрировать такие способы повышения производительности, которые, при необходимости, вы смогли бы использовать самостоятельно. Однако эти методики не являются универсальными — вы не сможете использовать их в качестве общего решения любой задачи. Они хороши при наличии вполне конкретных сценариев использования, о которых пойдет речь ниже.
В качестве прототипа статьи был выбран доклад Федерико Луиса, основателя компании Corvalius (они занимаются R&D). Работая над движком базы данных для одного из клиентов, они посвятили около четырёх лет задачам оптимизации. Такое количество времени требуется для того, чтобы применить разного рода техники и достичь хороших показателей оптимизации. Требуется выявить все проблемы и узкие места, проследить поведение софта в соответствии со всеми имеющимися метриками и так далее. Примеры из этой статьи основаны на работе над RavenDB 4.0 (известная NoSQL база для .NET), которую компания Федерико тюнила до уровня наносекунд во всевозможных сложных кейсах.
Все примеры, которые встретятся вам в ходе рассказа (плюс некоторые дополнительные), доступны в специальном репозитории на GitHub.
Осторожно, трафик! В этом посте присутствует огромное количество картинок — слайдов и скриншотов с видео в формате 720p. На слайдах присутствует важный для понимания статьи код.
Информация
- В рейтинге
- Не участвует
- Откуда
- Краснодар, Краснодарский край, Россия
- Дата рождения
- Зарегистрирован
- Активность