Pull to refresh
478
179.6
Дмитрий Брайт @Bright_Translate

Переводчик

Send message

Парсер JSON в 500 строках Rust

Level of difficultyMedium
Reading time9 min
Views9.5K

За время прошлого семестра в универе я прошёл курс «Инструменты и компиляторы на основе синтаксиса». В рамках курса мы создавали сканер, парсер, компилятор и прочие инструменты для языка Plo. Писали мы их на Python, но тогда меня серьёзно заинтересовал Rust.

В итоге я решил заняться очередным хобби-проектом, и на сей раз создать парсер JSON на Rust. Мне хотелось проверить полученные на курсе навыки и, наконец-то, реализовать проект на этом языке, что я откладывал уже не один год.
Читать дальше →

Покупая домен, не забудьте проверить его на «порчу»

Level of difficultyMedium
Reading time5 min
Views15K

В середине 2022 года я купил новый домен — musicbox.fun.

Мне он был нужен для хобби-проекта — интерактивного онлайн-проигрывателя музыки, который я разместил на musicboxfun.com. Новое имя домена было короче и звучало интереснее. Тогда я счёл, что мне буквально повезло его заполучить.

Но, увы, musicbox.fun имел свою историю — до меня этот домен использовался для размещения пиратских копий музыки.
Читать дальше →

Пишем простой драйвер на Rust

Reading time9 min
Views16K

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

В своей повседневной работе я по-прежнему придерживаюсь C++, так как основная её часть связана с низкоуровневым программированием систем и ядра, а из этого языка легко задействовать написанный на С Windows API и COM API.

Rust — это язык для системного программирования, то есть он может справляться с теми же задачами, что и C/C++. Основное неудобство при этом создаёт громоздкий синтаксис, необходимый для преобразования типов С в типы Rust. Но это неудобство можно преодолеть, используя подобающие обёртки и макросы.

Короче говоря, я решил попробовать написать простой и полезный драйвер WDM. Это будет Rust-версия драйвера «Booster», о котором я пишу в своей книге (Windows Kernel Programming), позволяющего изменять приоритет любого потока на любое значение.
Читать дальше →

Windows 11 — по-прежнему ничего стоящего

Level of difficultyEasy
Reading time6 min
Views33K

С вами Dedoimedo, и я хочу поделиться историей об очередном эпизоде мазохизма. Раз в несколько месяцев я запускаю свой тестовый ноутбук, на котором в качестве альтернативной системы стоит Windows 11, и проверяю, произошли ли в этой ОС какие-нибудь ощутимые изменения. Последняя такая авантюра была в сентябре, и тогда я столкнулся с кучей проблем.

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

Windows 11 бесполезна — файловый менеджер тормозной, раздел настройки не дотягивает до панели управления, а аппаратные требования зачастую препятствуют возможности апгрейда. Что тут сказать… Карма и всё такое…

Приступим?
Читать дальше →

Почему именно в Chrome под Windows на сайтах не работают эмодзи флагов

Level of difficultyEasy
Reading time5 min
Views7.2K

Предположим, вы захотели приукрасить в UI своего сайта опцию выбора страны/языка симпатичными эмодзи флагов. Превосходно! Это создаст дополнительный визуальный ориентир, который поможет пользователям быстро находить нужную страну, да и в целом это просто красиво.

Более того, вы даже можете легко реализовать динамическое определение иконок на основе кода региона:

// Смещение для корректировки кода ASCII каждого символа в строке кода ISO страны для определения соответствующего флага.
const EMOJI_CHARACTER_OFFSET = 127397;

const getEmojiForCountryCode = (countryCode: string) =>
  String.fromCodePoint(
    ...countryCode
      .toUpperCase()
      .split('')
      .map((char) => char.charCodeAt(0) + EMOJI_CHARACTER_OFFSET),
  );

// "en-US"
const currentLanguageCode = navigator.language;
// "US"
const currentCountryCode = currentLanguageCode.split("-")[1];
// "🇺🇸"
getEmojiForCountryCode(currentCountryCode);
// "🇫🇷"
getEmojiForCountryCode("FR");
// "🇸🇪"
getEmojiForCountryCode("SE");

Всё идёт шикарно!

Как вдруг…
Читать дальше →

Декодирование телефонного сигнала из фильма Pink Floyd: «The Wall»

Level of difficultyMedium
Reading time5 min
Views24K

Люблю загадки… Недавно меня попросили расшифровать сигнал телефонного вызова из фильма «The Wall» 1982 года, снятого по мотивам одноимённого альбома Pink Floyd. Услышать сигнал вызова можно в этой сцене, когда главный персонаж, Пинк, звонит в Лондон с таксофона в Лос-Анджелесе.

Вот этот пятисекундный аудиоклип:
Читать дальше →

Операционная система в 1 000 строках кода (часть 5)

Level of difficultyMedium
Reading time21 min
Views7.3K

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

▍ Навигация по частям


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

Операционная система в 1 000 строк кода (часть 4)

Reading time14 min
Views4.5K

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

Навигация по частям


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

Прозрачное программное обеспечение

Reading time11 min
Views1.3K
Приветствую, уважаемые читатели!

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

Посвящена книга одному из фундаментальных и важнейших аспектов современного мира программного обеспечения – его безопасности. И акцент в ней сделан не столько на ее общих принципах, сколько на защите цепочек поставок ПО, которые в последние годы стали одним из излюбленных векторов атаки среди злоумышленников. Чего стоит один только инцидент с SolarWinds 2019 года, названный Счетной палатой США одной из наиболее широкомасштабных хакерских кампаний против правительства и частного сектора за всю историю. Или же случай с уязвимостью Log4j в декабре 2021 года, когда вопреки умеренной сложности устранения самой этой уязвимости, основная проблема заключалась в ее локализации.
Читать дальше →

Операционная система в 1 000 строк кода (часть 3)

Level of difficultyMedium
Reading time28 min
Views8.6K

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

▍ Навигация по вышедшим частям


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

Операционная система в 1 000 строках кода (часть 2)

Level of difficultyMedium
Reading time18 min
Views10K

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

▍ Навигация по вышедшим частям


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

Операционная система в 1 000 строках кода (часть 1)

Level of difficultyMedium
Reading time11 min
Views35K

Всем привет! В этой небольшой книге (серии статей, — прим. пер.) мы с нуля, шаг за шагом, напишем скромную ОС.

▍ Навигация по частям



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

В рамках предстоящей серии статей мы на языке С реализуем базовое переключение контекста, страничное распределение памяти, режим пользователя, командную оболочку, драйвер дискового устройства и операции чтения/записи. И хотя такой объём работы может показаться масштабным, всё это уместится всего в 1 000 строк кода.

Но сразу предупрежу — процесс окажется не так прост, как выглядит на первый взгляд. Самой сложной частью создания собственной ОС является отладка. И мы не сможем использовать для этого printf, пока её не реализуем. Здесь вам потребуется освоить различные техники и приёмы отладки, которые в разработке ПО вы никогда не использовали. В частности, начиная «с нуля», вы будете встречать сложные этапы вроде процесса загрузки и страничной организации памяти. Но не пугайтесь, «отлаживать ОС» мы тоже научимся!

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

Что случилось с легковесными десктопными приложениями? История Electron

Level of difficultyEasy
Reading time7 min
Views38K

Electron — это один из самых известных инструментов современного разработчика. Если присмотреться, то это родственник React Native, манящий лозунгом «пиши один раз, запускай везде!», но с гораздо меньшими издержками по сборке и релизу, чем в случае мобильной разработки. Его уникальное преимущество заключается в комбинации Node.js и Chromium, создающей мощную десктопную среду для веб-технологий. Официальный блог Electron не так давно отметил своё десятилетие, что весьма удивляет с учётом того, насколько глубоко этот инструмент успел проникнуть в культуру разработки.
Читать дальше →

Упрощаем «простой» ELF

Level of difficultyMedium
Reading time13 min
Views8.1K

Давайте-ка напишем простую программу для Linux. Насколько трудной она может быть? Только тут надо учесть, что простота противоположна сложности, но не трудности*, и создать нечто простое на удивление трудно. А что останется, если избавиться от сложности стандартной библиотеки, всех современных средств безопасности, отладочной информации и механизмов обработки ошибок?
Читать дальше →

Эксперимент по ускорению SQLite

Level of difficultyMedium
Reading time5 min
Views7.5K

SQLite быстра, но можно ли сделать её ещё быстрее? Исследователи из Университетов Хельсинки и Кембриджа задались этим вопросом и опубликовали работу Serverless Runtime / Database Co-Design With Asynchronous I/O. В ней они продемонстрировали возможность 100-кратного снижения времени задержки, и ниже я в общих чертах эту их работу прокомментирую.

Речь пойдёт об исследовании возможностей Limbo — переписанной на Rust версии SQLite.
Читать дальше →

Сортировка «Милосердный Сталин»

Level of difficultyMedium
Reading time7 min
Views25K

Merciful Stalin Sort (сортировка «Милосердный Сталин») — это новый алгоритм сортировки, вдохновлённый пресловутым Stalin Sort (сталинской сортировкой). В ходе развлекательного эксперимента со сталинской сортировкой возникла интригующая идея: что, если вместо удаления выбивающихся элементов, сохранить те, которые идут по порядку, и рекурсивно упорядочить остальные? Логика заключалась в том, чтобы добиться повышения производительности за счёт уменьшения массива, требующего сортировки, особенно в случае частично упорядоченных массивов. Это и привело к разработке сортировки «Милосердный Сталин».
Читать дальше →

Как инженеры Apple ошиблись с полярностью конденсатора

Level of difficultyMedium
Reading time4 min
Views62K

Хочу затронуть давнюю шумиху на тему того, что в схеме Apple Macintosh LC III один из конденсаторов установлен задом наперёд. LC III — это модель Mac размером с «коробку от пиццы». Выпускалась она с начала 1993 по начало 1994 года преимущественно для сферы образования. Также существовала линейка потребительских модификаций в виде моделей Performa 450, 460, 466 и 467. Масштабного отзыва устройств со стороны Apple так и не последовало, что, на мой взгляд, и вызвало среди сообщества скептическое отношение к проблеме. Поэтому предлагаю взглянуть на эту историю более подробно и подробно рассмотреть саму схему устройства. Действительно ли инженеры Apple допустили ошибку?
Читать дальше →

Бюджетный квадрокоптер на базе ESP32 своими руками

Level of difficultyMedium
Reading time5 min
Views41K
За последние годы дроны стремительно переросли из нишевых хобби-девайсов в гибкие инструменты, применяемые для множества всевозможных задач — от фотографии до сельского хозяйства и даже военной сферы. В зависимости от назначения, характеристик и способности нести полезную нагрузку подобные устройства могут стоить от нескольких тысяч до миллионов.

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

20-летие Linux для десктопных систем (часть 2)

Level of difficultyMedium
Reading time9 min
Views9.7K

Коротко о прошлой части: в стремлении создать идеальную десктопную систему, аналогичную GNOME и Debian, молодой Ploum присоединяется к тайному проекту «no-name-yet», который в итоге становится Ubuntu.
Читать дальше →

20-летие Linux для десктопных систем (Часть 1)

Level of difficultyEasy
Reading time6 min
Views15K

Двадцать лет назад на меня снизошло озарение: Linux готов для десктопа.

(*смех аудитории*)

Я был одним из тех подростков, которых то и дело звали «починить» компьютер. Соседи, друзья, родственники. Да, такой вот подросток-ботан. Вы наверняка понимаете, о чём я. Но в итоге мне надоело устанавливать взломанные антивирусы и налаживать системы Microsoft Windows, избавляя RAM от вредоносов и оживляя тормозящие процессоры в компьютерах, мигающих светодиодами питания в мольбе облегчить их страдания.

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

И, к моему удивлению, некоторые это предложение принимали.
Читать дальше →

Information

Rating
28-th
Location
Россия
Works in
Date of birth
Registered
Activity