Search
Write a publication
Pull to refresh
3
0
Максим @MaxxONE

Инженер

Send message

FFI: как создать мост между Rust и C/C++

Reading time12 min
Views4K

Привет, Хабр!

Сегодня мы рассмотрим, как создать безопасные FFI-интерфейсы в Rust для интеграции с C/C++ библиотеками

Если говорить проще, FFI (foreign function interface — интерфейс вызова внешних функций) – это способ «позаимствовать» функциональность из другого языка. В контексте нашей статьи, с одной стороны у нас Rust, где каждый байт памяти охраняется компилятором, а на другой C++, где свобода обращения с памятью может обернуться утечками или, что еще хуже, непредсказуемым UB (англ. undefined behavior, в ряде источников непредсказуемое поведение). И наша задача – сделать так, чтобы эти два мира не конфликтовали, а работали в унисон.

Читать далее

Планировщик Go — самый подробный гайд простым языком

Level of difficultyMedium
Reading time27 min
Views51K

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

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

Приступить к проектированию

Обзор BKHD N100 NAS — Лучшая материнская плата для домашнего NAS

Level of difficultyEasy
Reading time12 min
Views38K
Для этого обзора я приобрёл плату BKHD-1264-NAS, которая широко известна в узких кругах строителей NAS и обладателей домашних лаб.

Плата интересна наличием шести SATA портов, четырьмя портами 2.5GbE на чипах Intel i226-V, а также современным и энергоэффективным процессором Intel N100 — и всё это в компактном формате Mini ITX!

Её подробный обзор можно почитать далее в статье.

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

Если наша электроника откажет, то кто-то умрёт

Level of difficultyEasy
Reading time12 min
Views18K

Привет, меня зовут Миша. Я инженер по качеству в компании ГРАН Груп. Мы производим печатные платы, в том числе для оборудования, где один сбой стоит жизни: для кардиостимуляторов, аппаратов ИВЛ, систем управления поездами, самолётов и ракет. В статье я рассказываю, какие ошибки клиента стоят больших денег и ваших жизней, про боль госпредприятий и как мы проверяем качество платы.

Читать далее

Полуакустический телекастер с продвинутым темброблоком

Level of difficultyEasy
Reading time8 min
Views5.5K


Привет, Хабр! Мне нравятся универсальные электрогитары, способные выдавать и «жир», и «стекло». Если речь идёт о телекастере, то моему сердцу мила нэшвилловская модификация, заключающаяся в добавлении третьего датчика.

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

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

GIMP Script-Fu Первый Дан. Реализация Хеш-Таблицы

Level of difficultyMedium
Reading time9 min
Views1.3K

Библиотека функций к Script-fu

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

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

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

Читать далее

Библиография киберпанка

Level of difficultyEasy
Reading time17 min
Views16K

Если вас всё ещё преследует вопрос о том, что бы почитать в жанрах протокиберпанк, киберпанк и посткиберпанк, гляньте одним глазком в мой библиографический обзор. Почти уверен, там есть книги, которые вы ещё не прочли. Не верите? Проверьте!

Читать далее

Поступление в ШАД: как затащить математику

Level of difficultyMedium
Reading time9 min
Views18K

Всем привет!

Продолжаем говорить о поступлении в Школу анализа данных Яндекса, а именно про подготовку по математике. Обсудим с чего начать, что входит в программу экзамена и какие бесплатные ресурсы помогут выстроить эффективную подготовку (в статье около 50 ссылок на книги/курсы), а в конце статьи поговорим про плюсы и минусы платной подготовки

Читать далее

Как я отказался от оффера

Reading time16 min
Views69K

Вы, наверное, хотите сказать: "Ну отказался и отказался, что тут такого?". Чтобы добавить контекста, расскажу немного о себе. Ещё год назад я новоиспечённый гофер, только начинаю познавать основы языка, делаю свои первые пет-проекты и начинаю делать свои первые отклики. Естественно получаю кучу отказов. В тот момент я готов хвататься за любые возможности, лишь бы получить бесценный коммерческий опыт, даже работать бесплатно. По сути обучение и самообразование - это такая же неоплачиваемая работа. Если бы тогда я получил подобное предложение, я бы не смел отказаться и согласился бы на любые условия. Забавно, как быстро растут аппетиты, когда знаешь себе цену и на что ты способен.

Читать далее

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

Level of difficultyEasy
Reading time21 min
Views302K

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

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

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

Читать далее

HTTP-серверы на Fiber в Golang

Level of difficultyMedium
Reading time8 min
Views8.9K

Привет, Хабр!

Когда речь заходит о создании HTTP-серверов на Go, большинство сразу думают о привычных решениях, таких как net/http или Gin. Эти инструменты проверены временем, но что, если нужен сервер, который не просто стабилен, а работает очень быстро? Здесь помогает Fiber — лёгкий, но невероятно мощный HTTP-фреймворк, способный вывести производительность сервера на новый уровень.

С синтаксисом, знакомым всем юзерам Express.js, Fiber избавляет от лишней сложности и позволяет сосредоточиться на главном — максимальной скорости и эффективности.

Читать далее

Как объединить фронтенд с бэкендом и не сломать веб-приложение

Level of difficultyMedium
Reading time5 min
Views18K

Привет! Меня зовут Артём Шумейко, я Python-разработчик и создатель одноименного канала на YouTube. Представьте: у вас есть проект с фронтенд- и бэкенд-частью. Первый работает на одном порту и отображает данные, после — передает бэкенду. Второй работает на другом порту, принимает и обрабатывает эти данные, после чего возвращает ответ. Обычно сайты находятся на едином домене с фронтендом и бэкендом, а здесь — на двух отдельных. 

Будучи новичком я не понимал, как объединить фронтенд и бэкенд. Думал, нужно подключать два домена и неведомым образом их «подружить». Но все оказалось намного проще. В тексте поделюсь подробной инструкцией и покажу, как задеплоить проект на облачный сервер

Читать далее

Светящиеся конденсаторы и дисплеи на их основе (в том числе DIY) на любой поверхности? Почему нет…

Level of difficultyMedium
Reading time11 min
Views12K
Картинка Freepik

Что, если я скажу вам, что существуют светящиеся конденсаторы, которые могут быть использованы в качестве элементов дисплеев?

Несмотря на странное, на первый взгляд, утверждение, всё более, чем реально, и, мало того, известно около века…
Читать дальше →

Тысяча и одна библиотека С++

Reading time65 min
Views47K

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

Столкнувшись много раз подряд с тем, что найти что-то толковое довольно непросто, я решил попробовать распутать это узел и предложить для русскоязычных читателей свой справочник классных библиотек на С++. Я исходил из этого источника. Это очень многогранный и объемный список библиотек языка С++, но, скажем так, у меня были к нему вопросы. Потому я сделал перевод, затем значительно улучшил его в плане содержания (далее объясню, как, почему и зачем). На выходе получилось около 1000 библиотек. Как в сказке). Они, конечно, не покрывают все возможные задачи и предметные области, но поверьте, они затрагивают действительно многое.

Прикоснуться к сокровищнице языка С++

systemD с 0 до 1: библия сисадмина

Level of difficultyMedium
Reading time27 min
Views51K


Что бы кто ни говорил, systemD становится стандартом систем инициализацией в линуксе. И с 80% вероятностью все сервера будут с systemD. Не факт, конечно, есть и личные сервера, на которых может стоять хоть Gentoo, хоть Devuan, хоть NixOS.

Некоторые дистрибутивы хотят даже перейти с загрузчика Grub на systemd-boot! Потому знать, как работать с данной системой инициализации, должен каждый сисадмин и просто программист, ибо сейчас он практически везде.

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

А также напишем небольшой скрипт на Python для автомизации некоторых задач. Приятного чтения, господа линуксоиды и просто пользователи!
Читать дальше →

Rust и асинхронные функции: как улучшить структуру кода и повысить производительность с помощью абстракций

Reading time26 min
Views3.5K

В начале 2010-х годов в программировании появился новый подход к реализации параллелизма с использованием абстракций future и promise, а также синтаксического приёма async/await. Эти технологии облегчили работу с асинхронным кодом, но вызвали ожесточённые споры среди разработчиков. Автор статьи, системный программист Saoirse Shipwreckt*, рассматривает две противоположные точки зрения на future от их апологета Мариуса Эриксена и критика Боба Нистрома. 

Под катом читайте о преимуществах и недостатках абстракций, а также о различных видах параллелизма в Rust и способах улучшения структуры кода с помощью future.

*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис.

Читать далее

Бесшовность 2.0: как работает шардирование в Сбере

Level of difficultyMedium
Reading time10 min
Views7.4K

Если у вас не просто большая компания, а целая экосистема с разными сервисами, IT-инфраструктура должна обеспечивать бесшовность. Клиенты и сотрудники могут входить в систему с разных устройств, но изменение информации в одном канале должно отображаться в других, а целостность данных сохраняться, даже если вход совершен в двух каналах параллельно. И в идеале — так, чтобы клиент не видел «внутренней кухни».

Меня зовут Владимир Паршин, я ведущий ИТ-инженер в СберТехе. Расскажу, как выстроена работа с бесшовностью в Сбере.

В статье будет про драматичное прошлое, Джастина Бибера и балансировку нагрузки. А главное — про то, какие решения СберТеха под капотом банка сейчас обеспечивают обработку данных огромного числа клиентов и сотрудников.

Читать далее

Эффективные трассировки в Go

Level of difficultyMedium
Reading time6 min
Views3.9K

Пакет runtime/trace содержит мощный инструмент для понимания программ Go и устранения неполадок. Функциональность внутри позволяет создавать трассировку исполнения каждой горутины за определенный период времени. С помощью go tool trace command (или превосходного инструмента gotraceui с открытым исходным кодом) можно визуализировать и исследовать данные в этих трассировках.

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

Читать далее

Безопасность веб-приложений: анализ методов защиты от атак на уровне Backend

Level of difficultyMedium
Reading time18 min
Views10K

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

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

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

Читать далее

Аутентификация для WebSocket и SSE: до сих пор нет стандарта?

Level of difficultyMedium
Reading time21 min
Views20K

WebSocket и SSE появились более десяти лет назад, однако до сих пор в стандартах отсутствуют рекомендации по решению задачи аутентификации для подобных соединений.

В статье разберем особенности аутентификации применительно к протоколу WebSocket и технологии Server-Sent Events, обсудим, какие нюансы могут быть, когда клиентская часть находится в браузере, и на что еще стоит обратить внимание, чтобы избежать неочевидных проблем.

А еще заодно поговорим про уязвимость Cross-Site WebSocket Hijacking (CSWSH) и в целом посмотрим на многие вопросы через призму информационной безопасности.

Читать далее

Information

Rating
10,258-th
Location
Екатеринбург, Свердловская обл., Россия
Date of birth
Registered
Activity