Обновить
8
0.1

Пользователь

Отправить сообщение

Фундаментальная математика — теория всего в IT и не только. Теория типов и формализация в Coq

Время на прочтение38 мин
Охват и читатели9.8K

У нас есть 3 "теории всего" - научная картина мира (все сводится к законам физики), информатика (все сводится к битам) и фундамент математики (все сводится к логике). Именно фундамент математики представляет особый интерес, так как он является фундаментом для двух других фундаментов и имеет глубокий философский смысл. Последние 2 года я сильно им увлекся и проделал довольно большую работу по углубленному изучению теории типов (Calculus of Constructions), и готов поделиться результатами, а также рассказать о девяти направлениях, где можно применить это на практике. Очень многое получилось лучше, чем я планировал. Изначально перспективы были не очень понятными, и поэтому я не рассказывал друзьям и коллегам про мою работу в этом направлении и называл это «Секретный Проект». Но теперь, когда многое прояснилось и получилось, можно поделиться успехом. Собственно, в этой статье я расскажу вам не только про сам фундамент математики, а еще его связь с ежедневной работой программиста, а также с Computer Science/Data Science и AI/ML. Я вам нарисую большую и красивую картину, на которой все понятно и логически следует из маленького набора правил выведений типов (11 штук) и аксиом теории множеств (9 штук).

У нас есть 3 фундамента математики — теория множеств (удобна для человека), теория типов (удобна для компьютера) и теория категорий (не знаю, зачем она вообще нужна). Они примерно одинаковой мощности и одну можно выразить внутри другой. Особый интерс представляет именно теория типов, тк ее довольно легко можно запрограммировать внутри компьютера и использовать как строгий фундамент для других теорий, который не дает совершить ошибку и проверяет каждое ваше действие.

Читать далее

​Как создать собственное расширение компилятора C++

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели5.6K


Это перевод статьи, которая, к сожалению, у меня не доступна без слова из трех букв. А так как тема довольно интересная, то я решил совместить полезное с полезным и не только самому покопаться с примерами из публикации, но и сделать её перевод на Хабре. Вдруг еще кому данный материал будет интересен?

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

Читать дальше →

Оптимизация кольцевого буфера для повышения пропускной способности

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели6.4K

В этой статье мы рассмотрим классический конкурентный кольцевой буфер и обсудим, как его можно оптимизировать для повышения производительности. Я покажу вам, как существенно улучшить этот показатель от 5,5 миллионов элементов в секунду до 112 миллионов элементов в секунду — и эти показатели выше, чем в реализациях Boost и Folly. Если вам требуется готовая реализация со всеми этими оптимизациями, посмотрите мою библиотеку SPSCQueue.h.

Кольцевой буфер также называется очередью «один производитель — один потребитель» (SPSC). В ней не бывает ожидания (и, соответственно, не бывает блокировок), это конкурентный примитив. Такая структура данных находит множество вариантов применения, и здесь я рассмотрю передачу сетевых пакетов между сетевым контроллером и драйверами операционной системы. Основная задача, решаемая при этом — выполнение событий ввода/вывода в относительно новом асинхронном API io_uring.

Читать далее

О настройке Open vSwitch непростым языком

Время на прочтение29 мин
Охват и читатели64K
От переводчика
SDN — программно определяемые сети — прочно вошли в нашу жизнь, однако материалов о низкоуровневой их работе на русском языке не так уж много. Предлагаю вашему вниманию перевод обучающей статьи, в которой показан пример создания автономного виртуального коммутатора с поддержкой VLAN. Такой коммутатор в своем базовом функционале может работать и без контроллера сети. Предполагается. что читатель знаком с основами и терминологией построения сетей в целом, а также имеет общее представление о программно-определяемых сетях.

Используемые термины:

OpenFlow — протокол управления передачей данных в сети. Описывает процесс взаимодействия контроллера и коммутатора, а также формат загружаемых в коммутатор правил.
Open vSwitch — программная реализация коммутатора, совместимого с протоколом OpenFlow. Используется для управления трафиком в системах виртуализации, например, OpenStack и oVirt (экспериментально).
802.1Q (VLAN) — механизм разграничения трафика как в пределах одного коммутатора, так и в локальной сети. Основан на внедрении в пакет данных тега (номера) VLAN
802.1p (QoS) — механизм управления приоритезацией трафика. Часть стандарта 802.1Q
Порт агрегации (trunk port) — порт коммутатора, соединенный с вышестоящим коммутатором. Порт агрегации разрешает отправку пакетов с любым номером VLAN
Порт доступа (access port) — порт коммутатора, разрешающий работу с пакетами только определенных VLAN.

Читать дальше →

Защита своего приложения с помощью JWT и Spring Security

Уровень сложностиСредний
Время на прочтение42 мин
Охват и читатели8.9K

В прошлой статье мы познакомились с такой технологией как Keycloak. Если говорить вкратце, то Keycloak это технология, которая помогает реализовать безопасность для вашего приложения. Он автоматически генерирует JWT и предлагает готовые решения для безопасности, что упрощает работу для разработчика. Но бывает так, что встроенной генерации JWT не достаточно или она не совсем подходит, тогда нужно создать свою реализацию данного токена. В данной статье мы рассмотрим как реализовать простую генерацию своего JWT.

Читать далее

Глобально оптимальный, восьмой и наиболее быстрый вид интерпретаторов байткода

Уровень сложностиСложный
Время на прочтение15 мин
Охват и читатели6.9K

Совершать невозможное и раздавать пинки здравому смыслу — в этом и состоит жизнь членов Гуррен-Дана! (C) Камина

Эта статья вступает в техническую полемику со статьей 2015 года за авторством Atakua, подходы из которой я и атакую. Atakua исследует 7 видов интерпретаторов байткода, но делает это без уважения - быстрейшей оказывается двоичная трансляция, которая, по сути, уже не интерпретатор байткода, а форма Ahead-Of-Time компилятора. Эта двоичная трансляция транслирует байткод в машинный код, представляющий собой цепочку вызовов скомпилированных сервисных процедур. Тех самых, что в интерпретаторе байткода отвечают за выполнение каждого опкода.

Но Atakua не выжал из интерпретаторов байткода всю скорость которая возможна. Так что эта статья - туториал: как написать интерпретатор байткода, который может обгонять JIT/AOT-компиляцию по скорости. Интересно? Читайте дальше!

Бенчмарк прилагается. Будет немного хардкора и ни одной сгенерированной нейросетью картинки!

Читать далее

Рекуррентные нейронные сети наносят ответный удар

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели12K

Рекуррентные нейронные сети (RNN), а также ее наследники такие, как LSTM и GRU, когда-то были основными инструментами для работы с последовательными данными. Однако в последние годы они были почти полностью вытеснены трансформерами (восхождение Attention is all you need), которые стали доминировать в областях от обработки естественного языка до компьютерного зрения. В статье "Were RNNs All We Needed?" авторы пересматривают потенциал RNN, адаптируя её под параллельные вычисления. Рассмотрим детальнее, в чем же они добились успеха.

Читать далее

Самые быстрые мьютексы

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели5.3K

Cosmopolitan Libc хорошо известна своим «полиглотным жирным бинарным» хаком, который позволяем исполняемым файлам запускаться на шести операционных системах для AMD64/ARM64. Вас может удивить, что при этом она может быть лучше С‑библиотекой для вашего продакшена. Чтобы продемонстрировать это, давайте сравним библиотеку мьютексов Cosmo с другими платформами.

Мы напишем простой тест, который создает 30 потоков, увеличивающих одно и то же число 100 000 раз. Это поможет проверить, насколько хорошо реализация мьютексов справляется с задачей при интенсивном использовании.

Читать далее

Внешняя видеокарта backend-разработчика, или как заставить лучшего друга перестать тупить и начать помогать (часть 1)

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели5.4K

Всем привет! Меня зовут Николай Первухин. Я увлеченный разработчик на GoLang, работаю в Ozon Банке в группе разработки сервисов ЗСК (KYC).

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

Читать далее

Дэвид Харрис, автор «Цифровой схемотехники и архитектуры компьютера», ответил на вопросы про его следущую книгу и вообще

Время на прочтение13 мин
Охват и читатели11K

Встретился на ланч с Дэвидом Харрисом, автором (вместе с Сарой Харрис) популярного учебника «Цифровая Схемотехника и Архитектура Компьютера», который за последние 10 лет помог закрыть монументальную дыру в техническом образовании десятков вузов России и Украины. До этого учебника во многих вузах сразу после триггеров шло программирование микроконтроллеров, то есть раньше у многих студентов вообще не возникала база для проектирования современных чипов по маршруту RTL‑to‑GDSII, технологии, которая за последние 30 лет привела нас к смартфонам, быстрому интернету и ускорителям ИИ.

Учебник Дэвида активно используется на Школе Синтеза Цифровых Схем, которую поддерживают 24 российских и 1 белорусский университет. Регистрация на новый сезон Школы только что открылась.

Читать далее

Простая нейронная сеть на C++

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели18K

Всем привет!

При помощи нейронной сети решил проблему классификации фигур на изображениях размера 7 на 7 пикселей. Задача решалась в рамках студенческой лабораторной работы. Статья приводится в качестве руководства для решения подобных академических задач.

Читать далее

Необычные приёмы отладки, которые браузер от вас скрывает

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели11K

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

Самодельные суперконденсаторы (ионисторы)

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели25K
Картинка Freepik

Среди источников электрической энергии особое место занимают так называемые суперконденсаторы — ионисторы.

Несмотря на загадочное название, их весьма просто изготовить самостоятельно, и оно того стоит: быстрая зарядка, возможность осуществления множества циклов заряд/разряд без какого-либо разрушения (вплоть до миллионов), большая ёмкость (до десятков и даже сотен Фарад).

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

STL, allocator, его разделяемая память и её особенности

Время на прочтение11 мин
Охват и читатели14K

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

Так и автор однажды задался мыслью, а что если … если произойдёт вырождение адресов сегментов разделяемой памяти в разных процессах. Вообще-то именно это происходит, когда процесс с разделяемой памятью делает fork, а как насчет разных процессов? Кроме того, не во всех системах есть fork.

Казалось бы, совпали адреса и что с того? Как минимум, можно пользоваться абсолютными указателями и это избавляет от кучи головной боли. Станет возможно работать со строками и контейнерами С++, сконструированными из разделяемой памяти.

Отличный, кстати, пример. Не то, чтобы автор сильно любил STL, но это возможность продемонстрировать компактный и всем понятный тест на работоспособность предлагаемой методики. Методики, позволяющей (как видится) существенно упростить и ускорить межпроцессное взаимодействие. Вот работает ли она и чем придётся заплатить, будем разбираться далее.
Читать дальше →

Суперскалярный стековый процессор: продолжаем скрещивать ужа и ежа

Время на прочтение6 мин
Охват и читатели8.5K

Продолжение статьи, где удалось продемонстрировать, что фронтенд стековой машины вполне позволяет спрятать за ним суперскалярный процессор с OoO.
Тема данной статьи — вызов функций.
Читать дальше →

Реверс-инжиниринг  GDB для работы с Pwndbg

Время на прочтение6 мин
Охват и читатели1.4K

Функционал GDB существенно сужается, когда приходится иметь дело с файлами, из которых убраны отладочные символы (получаются так называемые «урезанные бинарники»). Функции и имена переменных превращаются в бессмысленные адреса. Для установки контрольных точек приходится отслеживать адреса нужных нам функций из внешнего источника. Также нужно выводить в консоль структурированные значения и после этого корпеть над дампом памяти, пытаясь вычленить, где именно пролегают границы полей.

Вот почему этим летом, работая в Trail of Bits, я расширил Pwndbg — плагин для GDB. Поддерживает его мой наставник Доминик Чарнота. Я добавил в инструмент две фичи, благодаря которым практическая отладка урезанных бинарников сближается с аналогичной работой, знакомой нам из работы с отладчиком в IDE. Теперь в Pwndbg интегрирован инструмент Binary Ninja, позволяющий лучше выяснять специфику GDB+Pwndbg, а также выводить дамп структур Go, чтобы отлаживать бинарники Go стало удобнее.

Читать далее

Какой роутер для OpenWrt купить в 2025 году?

Уровень сложностиПростой
Время на прочтение21 мин
Охват и читатели228K

Я много пишу про OpenWrt и часто получаю вопросы о том, какой взять роутер под эту ОС. В прошлом году я уже делал обзор роутеров, лучше всего подходящих под OpenWrt. Тогда выбор был не очень большой, но сейчас всё изменилось в лучшую сторону. Поэтому я сделал новый актуальный разбор для тех, кто не знает, какой роутер выбрать.

Роутер, как и любой другой девайс, нужно покупать под запрос. Например, линуксоиды привыкли покупать ноутбуки именно под Linux, а не первый попавшийся. Также и тут: если нужен OpenWrt, то роутер тоже надо выбирать с умом, а не надеяться на то, что кастомная прошивка сделает конфетку из роутера за 700 р.

В 2023 и 2024 появились интересные роутеры, которые уже поддерживаются проектом OpenWrt. Эти роутеры сделаны на базе ARM-процессоров. Такие роутеры появились у нескольких компаний, и дальше их количество будет только увеличиваться.

Читать далее

DuckDB. Колоночная OLAP СУБД в кармане

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели3.8K

Привет, меня зовут Антон, я старший инженер в департаменте аналитических решений ЮMoney. В компании мы используем технологию MSSQL OLAP-кубов SSAS, которая хорошо себя зарекомендовала — она сравнительно легко развёртывается и достаточно производительная. Но есть ряд минусов: Microsoft прекратил развивать её примерно в прошлом десятилетии, технология требует производительных серверов, ну и, конечно, вопрос зависимости от иностранного вендора тоже стоит остро. Поэтому, посматривая по сторонам в поисках альтернативы, я решил попробовать недавно появившуюся технологию DuckDB. Особых надежд не было, но хотелось понять, на каком она уровне по сравнению с привычными для меня инструментами. 

Читать далее

Как посчитать синус быстрее всех на хабре

Время на прочтение15 мин
Охват и читатели38K

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

Как мы делали гибридную обработку звука: всё об аудиософте в SberBoom и почему просто годных излучателей недостаточно

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели2.1K

40-ваттный всенаправленный звук в SberBoom — профессиональная гордость нашей команды. В прошлой статье мы рассказали, как придумали акустическую архитектуру. А в тут рассказали, как устроено звуковоспроизведение в ядре Linux. В этот раз объясним из каких софтовых решений складывается звук SberBoom. Почему стандартные методы коррекции звука — не наш выбор? Как реальность расходится с вендорской документацией и зачем реверсинжинирить усилители? Читайте под катом.

Читать далее

Информация

В рейтинге
3 427-й
Зарегистрирован
Активность