Search
Write a publication
Pull to refresh
16
0

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

Send message

Хардкорный NAS: как собрать хранилище на OmniOS и не сойти с ума

Reading time6 min
Views13K

Привет, Хабр! Сегодня расскажу, как я собрал сетевое хранилище NAS. Недавно оно понадобилось мне для дома, и я решил не покупать, а сделать свое. Тут не все так просто: есть разные варианты — «железный» и софтовый. В первом случае просто берем готовый NAS-сервер вроде Synology или QNAP, набиваем в него дисков — и все. Недешево, хотя в большинстве случаев это оправдано бесперебойной работой.

Но я не хотел тратиться, поэтому выбрал второй вариант — самостоятельную сборку на базе ПК. Выбор огромен — от Raspberry Pi до относительно недорогих HP ProLiant MicroServer. Я собрал на «железе», которое у меня было в запасе: HP ProLiant MicroServer Gen8, CPU Intel Celeron G1610T, 16 ГБ DDR3, 4 x 4 ТБ HDD. После сборки задумался о программном обеспечении. Его много — от готовых решений вроде TrueNAS, XigmaNAS, OpenMediaVault до самостоятельной настройки сервера с нуля на базе Linux или FreeBSD.

Я не искал легких путей (ведь я инженер!) и решил поэкспериментировать. Выбрал довольно экзотический вариант создания NAS при помощи операционной системы OmniOS. ZFS в ней поддерживается нативно, а сама она продолжает славные традиции своего предка — illumos. Это стабильность, поддержка ZFS, предсказуемое поведение в продакшене, а также простая, но гибкая модель управления сервисами (SMF). Плюс четкая структура пакетов и ориентация на безопасность и прозрачность исходного кода. Подробнее обо всем этом — дальше.

Читать далее

Концепты в современном C ++

Reading time5 min
Views6.7K

C++ шаблоны — мощный инструмент, но работать с ними бывает больно: многословные ошибки, путаница с типами и enable_if, который все усложняет. Concepts в C++20 появились, чтобы упростить жизнь разработчикам и сделать шаблонный код понятнее. В этой статье — разбор конкретного кейса: как с помощью концептов задать корректные ограничения на контейнеры, избежать ловушек с массивами и получить внятные ошибки от компилятора.

Читать далее

Домашнее облако: как я построил цифровой «бункер» для важных данных

Reading time30 min
Views34K

Фото важных семейных событий и видео из путешествий, копии важных документов, музыка, фильмы, которых не найти на стримингах — многие задумывались, как сохранить все самое важное так, чтобы ситуация с не вовремя сломавшейся флешкой не обернулась потерей ценных данных навсегда. Кому-то для спокойствия достаточно Google Drive или Яндекс.Диска, но я решил пойти чуть дальше и построить собственное домашнее облако с приложениями Immich и Nextcloud.

Кстати, привет, Хабр! Я Денис Петухов, Python-разработчик в Cloud.ru и сегодня я расскажу, как построил облако в шкафу. По ходу дела дам практические рекомендации по архитектуре, выбору оборудования, приложений, настройке сети и даже приведу расчеты того, что выгоднее, и сколько электричества «съедает» домашняя хранилка в месяц.

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

VSCode, SourceCraft Code Assistant и микроконтроллеры

Level of difficultyMedium
Reading time34 min
Views9.3K

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

В этой статье я расскажу, как использовать VSCode для разработки прошивок под разные архитектуры и как мне в этом помогает SourceCraft Code Assistant от разработчиков Yandex Cloud & Yandex Infrastructure.

Читать далее

Rust в режиме «жесть»

Reading time16 min
Views14K

В этом посте будет разобрано, как написать приложение на Rust с применением самого минимального API, возможности которого искусственно ограничены (например, не применяется динамическое выделение памяти). Предполагается, что читатель немного знаком с языком Rust.

Читать далее

Три теоремы о сортировках

Level of difficultyMedium
Reading time12 min
Views14K

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

В статье хочу рассказать об этой теореме и ещё о двух, на которые я наткнулся когда вел занятия по информатике в 9-11 классах будучи студентом старших курсов. Эти теоремы для меня были удивительным открытием, радовался вне себя когда вывел сам одну из них - её я не встречал ни в одном учебнике по информатике. В последствии все три теоремы были найдены в недрах Кнута, но чёрт побери, их поиск был сложнее, чем вывод!

Если я ещё не убедил Вас прочитать статью, то вот моя последняя попытка: в статье объясню почему пузырёк -- это бесполезная фигня, но внезапно практически также работающая сортировка вставками -- это супер важная сортировка, являющаяся частью std::sort в MSVC, GCC и Clang. Расскажу, каким интересным свойством оптимальности обладает сортировка выбором, являющаяся в теории такой же неэффективной как пузырёк.

Читать далее

Стековые канарейки и где они обитают. Приручаем один из ключевых харденингов

Level of difficultyMedium
Reading time11 min
Views2K

Хабр, привет! Меня зовут Мария Недяк, я специализируюсь на разработке харденингов нашей собственной микроядерной операционной системы «Лаборатории Касперского» KasperskyOS. Если вкратце: мы стараемся сделать любые атаки на нашу ОС невозможными — или хотя бы очень дорогими :-)

Один из главных инструментов в нашей нелегкой работе — «канарейка» (ну или Stack Canary), которая защищает от базовой атаки переполнения стека. Лично я к работе с этой птичкой уже давно привыкла — набила руку во время многократных CTF-турниров, где без такого харденинга было никуда… Этот бэкграунд очень пригодился мне в «Лаборатории Касперского», когда перед нашей командой встала задача усилить «канарейку» в KasperskyOS.

В статье я подробно объясню, как работает Stack Canary, как ее ломают — и как от этих методов взлома защититься. Сразу скажу: тема непростая, так что для самых любопытных я оставила список полезной литературы в конце текста. Поехали!

Читать далее

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

Reading time12 min
Views4K

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

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

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

Читать далее

Разбираем конкурентность в Go: книги, блоги, выступления

Level of difficultyEasy
Reading time5 min
Views9.5K

Особенность Go — удобный механизм конкурентности. Создавать конкурентные задачи в парадигме языка можно буквально «бесплатно» и предельно просто: достаточно написать ключевое слово go перед вызовом функции — и она начнет выполняться в отдельном потоке.

Я Владислав Белогрудов, эксперт по разработке ПО в YADRO. В свое время изучал различные источники и лучшие практики в поиске эффективных способов организации параллельных процессов в Go. Делюсь ими с вами. 

Пополнить библиотеку

5 листингов для лучшего понимания Python

Level of difficultyEasy
Reading time13 min
Views17K

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

Читать далее

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

Level of difficultyMedium
Reading time27 min
Views52K

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

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

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

Как DNS работает через TLS: DNS-over-TLS на практике

Level of difficultyHard
Reading time12 min
Views15K

Защита DNS при помощи TLS позволяет скрыть состав DNS-трафика, который обычно передаётся в открытом виде. Соединения DNS-over-TLS не так распространены, как DNS-over-HTTPS, но зато могут прозрачно применяться не только для доступа к резолверам, но и на авторитативных серверах. Посмотрим, вооружившись консольными утилитами, как всё это работает на практике.

Читать далее

Как я избавляюсь от компьютерной шеи. Часть 2

Level of difficultyMedium
Reading time6 min
Views5.4K
В первой части:
  • Откуда появился термин «компьютерная шея»;
  • Профессиональные болячки айтишника, с которыми я обратился к врачам;
  • Дело не в шее. Диагноз и назначение лечения после сдачи анализов и посещения невролога, окулиста, рентгенолога;
  • Варианты самостоятельной профилактики ― приложения, упражнения.

В конце предыдущей части я опубликовал фотографии из зала с качелями Юлина и впечатления от первого посещения.

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

Внимание: это мой личный опыт, и все, что я описываю, выполняю по назначению врачей.

На фотографиях — я до/после посещения тренажерного зала. Даты: 02.12.2024 (слева) и 21.02.2025 (справа). Заметно уменьшился горб и стала длиннее шея.




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

Эффективное межпроцессное взаимодействие с использованием IPC и Shared Memory

Level of difficultyMedium
Reading time10 min
Views3.4K

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

Читать далее

Улучшаем процесс ревью в команде

Level of difficultyEasy
Reading time6 min
Views4.2K

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

Что же можно сделать в каждой из трех ролей, чтобы все остались довольны (и целы)?

Читать далее

Анализ логов Mikrotik в Loki и VictoriaLogs в домашних условиях

Level of difficultyMedium
Reading time3 min
Views8.4K

Со времен поднятия mktxp из взятой там же инструкции поднял на своем домашнем сервере и Loki, и, так как по инструкции оттуда не получилось настроить что бы микротик отсылал логи прям в Loki, еще Promtail. Добавил их деплой через docker compose в свои ансибл плейбуки для домашнего сервера, добавил дефолтную дашборду в графану, потом еще в плейбуки добавил ротацию, потому что в день микротик накидывал 2,5 миллиона строк в 500MB логов и забыл. А дня 3 назад перевел мониторинг на Prometheus на том же сервере на VictoriaMetrics, офигел от того что моя 100 дневная база Prometheus размеров в 47G превратилась в 16G, увидел что есть VictoriaLogs и решил заoдно посмотреть в нее, а так же поиграться c Loki и Promtail, мне там очень не нравилось что логи хранятся и в тексте и в Loki. Итак...

Читать далее

Как отслеживать состояние сетевых интерфейсов на Linux с помощью netlink

Level of difficultyMedium
Reading time29 min
Views16K

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

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

Читать далее

Сложно о простом. Как работает интернет. Часть 2. Что такое сеть, маска подсети, сегментация сети с помощью VLAN и маски

Level of difficultyEasy
Reading time12 min
Views72K

Приветствую, коллеги! Меня зовут @ProstoKirReal Мне бы хотелось с вами обсудить как работает интернет от кабелей на витой паре, соединяющие простые локальные сети до подводных коммуникационных кабелей соединяющие между собой континенты и основные операторские сети.

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

В этом цикле статей я не стану учить вас настраивать оборудование и проектировать сети. Я расскажу об основных (и не только) принципах построения сети, а также о функционировании сети и сетевых протоколов в стеке TCP/IP.

Я буду часто ссылаться к предыдущим статьям, где уже описывал сетевые протоколы. Это позволит мне сократить объемный текст. 

Читать далее

Разработка интеграции для Home Assistan на примере управления кондиционером

Level of difficultyMedium
Reading time5 min
Views6.7K

Home Assistant (HA) — это универсальная платформа с открытым исходным кодом, которая превращает ваш умный дом в единую экосистему. Её главная сила — в способности объединять устройства разных протоколов (Zigbee, Wi-Fi, Bluetooth) и производителей в единую экосистему. Но что делать, если ваше устройство не поддерживается "из коробки"? Ответ прост: создайте свою интеграцию! В этой статье я покажу, как добавить поддержку кондиционеров Hitachi через облачное API вендора.

Читать далее

Как «обмануть» драйвер Linux в QEMU: создаем виртуального двойника Intel NTB Gen3

Level of difficultyHard
Reading time23 min
Views4.4K

Наша команда системного программирования YADRO продолжает работать с open-source эмулятором QEMU.  В этой статье я расскажу, как и зачем мы создали виртуального двойника Intel NTB Gen3.

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

Читать далее

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity