Рубрика «ruvds_перевод» - 9

На видео выше я записал наглядную реализацию процесса, описанного в разделе «Сборка и установка».

Эта статья посвящена запуску SoftICE, популярного отладчика для DOS и Windows, в эмулированной среде MS-DOS, а также обходу недостатка Bochs, эмулятора IA-32 (x86) PC.
Весь процесс выполнялся из-под Linux. Не знаю, получится ли проделать то же самое в MacOS, не говоря уже о Windows.Читать полностью »

На что способен самодельный очиститель воздуха, который можно собрать за 30 секунд? - 1


Плохой воздух однозначно вреден, но на рынке его очистителей мы наблюдаем бардак. Каждый производитель использует свои эксклюзивные фильтры, по всей видимости, для того, чтобы клиенты были вынуждены покупать именно их. А откуда нам знать, что эти устройства вообще работают? Немногие компании публикуют лабораторные тесты. И почему какая-то большая пластиковая коробка с вентилятором и фильтром стоит аж $100-300?

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

Каково это, создавать язык программирования сегодня? - 1


«Эта книга – классика. Относитесь к ней бережно».

Такую фразу произнёс архитектор из нашей команды, передавая мне The Dragon Book. Разработкой компиляторов я увлёкся где-то 15 лет назад ещё на заре своей карьеры. Как-то раз, читая эту книгу поздно вечером, я заснул, небрежно уронив её на пол. Надеюсь, владелец не заметил небольшую вмятину на обложке после того, как я ему её вернул.

Вышла эта книжка в 1986 году. В те времена создание компиляторов было крайне сложной задачей, требовавшей обладания различными навыками в области компьютерных наук в целом и программирования в частности. Теперь, почти четыре десятилетия спустя, этой задачей занимаюсь я. Насколько сложна она сегодня? Приглашаю вместе разобрать процесс создания языка и посмотреть, насколько современные инструменты его упростили.Читать полностью »

Ладья на XSS: как я хакнул chess.com детским эксплойтом - 1


Шахматы – это одно из многих моих хобби, за которыми я провожу свободное время, когда не ковыряюсь с какой-нибудь электроникой. При этом играю я так себе, и когда мне изрядно надоело проигрывать, я решил заняться тем, что у меня получается гораздо лучше… хакнуть систему!

В этой статье я расскажу о том, как использовал свои знания по кибербезопасности для обнаружения XSS-уязвимости (Cross-Site Scripting, межсайтовый скриптинг) на крупнейшем шахматном сайте интернета со 100 миллионами участников – Chess.com. Но для начала небольшое вступление (в котором будет затронута немного менее серьёзная, но достаточно занятная, уязвимость OSRF (On-site Request Forgery, подделка запросов на сайте).Читать полностью »

Передавать пустые срезы между Rust и C-C++ на удивление сложно - 1


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

В общих чертах она выглядит так:

  • В правила работы с указателями и memcpy в С не заложены грамотные способы представления пустого среза памяти.
  • В С++ с правилами указателей проблем нет, но поведение memcpy здесь аналогично её поведению в С.
  • Интерфейс внешних функций (Foreign Function Interface, FFI) в Rust не лишён накладных издержек. Rust использует несовместимое с C/C++ представление срезов, требуя их преобразования при передаче в обоих направлениях. При этом о преобразовании очень легко забыть.
  • Срезы в Rust также несовместимы с арифметикой указателей, что создаёт проблемы в работе итератора срезов стандартной библиотеки. (Обновление от 2024-01-16: похоже, над этой проблемой работают).

Поскольку проблемы FFI касаются нескольких языков, я писал статью в качестве общей справки, описывающей их несогласованность. Читать полностью »

Разбираем самый маленький PNG в мире - 1


Самый миниатюрный PNG в мире весит 67 байт и представляет собой один чёрный пиксель. Выше вы видите его в 200-кратном увеличении.

Красота, не так ли?

Состоит этот файл из четырёх частей:

  1. Сигнатура PNG, одинаковая во всех файлах этого формата: 8 байт.
  2. Метаданные изображения, включая его размеры: 25 байт.
  3. Данные пикселя: 22 байта.
  4. Маркер «конец изображения»: 12 байт.

Далее я опишу этот файл подробнее и постараюсь объяснить принцип работы формата PNG.

В качестве небольшой затравки скажу, что в конце предстоит неожиданный поворот. Хотя, надеюсь, вам и без того интересно побольше узнать о PNG.Читать полностью »

Арифметика первого класса в системе типов Rust - 1


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

Скрытые возможности элемента <input> - 1


Элемент <input> в HTML самый интересный.

Большинство его собратьев вне зависимости от своих атрибутов ведут себя одинаково. При этом атрибут type элемента <input> может принимать 22 разных значения, которые не только меняют его поведение, но и влияют на внешний вид (зачастую в ущерб стилистике).

Элемент <input> отвечает за всё, начиная с текстового ввода и чекбоксов, заканчивая переключателями и кнопкой для сброса всех полей в форме. В этой статье я опишу не только различные типы <input>, но и сопутствующие атрибуты, о которых вы могли не знать, и которые делают этот элемент более удобным и применимым в различных ситуациях. Приступим!Читать полностью »

Оптимизируя неоптимизируемое: ускорение компиляции C++ - 1


В этой статье речь пойдёт о повышении скорости компиляции библиотеки {fmt} до уровня библиотеки ввода-вывода Cи stdio.

Дня начала немного теории. {fmt} – это популярная открытая библиотека С++, представляющая более эффективную альтернативу С++ библиотеке iostreams и библиотеке Си stdio. Последнюю она обошла по целому ряду аспектов:

  • Безопасность типов с проверками форматирующих строк во время компиляции. Эти проверки включены по умолчанию начиная с С++ 20, и присутствуют в качестве дополнения для С++ 14/17. Форматирующие строки среды выполнения в {fmt} также оказываются безопасными, чего невозможно достичь в printf.
  • Расширяемость. Определяемый пользователем тип можно сделать форматируемым. При этом большинство типов стандартных библиотек, например, контейнеры и пакеты для обработки даты и времени, предлагают возможность форматирования изначально.
  • Производительность. {fmt} намного быстрее любой распространённой реализации printf, порой на несколько порядков (например, в форматировании чисел с плавающей запятой).
  • Возможность переноса поддержки Unicode.

Тем не менее одной из областей, в которой stdio по-прежнему опережала {fmt}, являлось время компиляции.Читать полностью »

Собираем автономную игру на C# в 2 килобайтах - 1


Моё детство пришлось на эпоху 1,44-мегабайтных дискет и 56-килобитных модемов, поэтому я всегда любил маленькие программы. Раньше можно было записать на дискету кучу мелких игр и таскать её с собой. Если программа не помещалась на дискету, я задумывался, почему — в ней много графики? Есть музыка? Возможно, она выполняет много сложных операций? Или она просто раздута?

В наши дни дисковое пространство стало настолько дешёвым, что люди отказались от оптимизации по размеру.

Размер важен только при передаче: если вы передаёте программу по проводам, мегабайты равны секундам. По быстрому соединению на 100 Мбит в лучшем случае можно передать 12 МБ в секунду. Если на другом конце провода находится человек, ожидающий завершения скачивания, то разница между пятью и одной секундой может существенно повлиять на его ощущения.

Человек может зависеть от времени передачи как напрямую (пользователь, скачивающий программу по сети), так и косвенно (serverless-сервис, отвечающий на веб-запрос).

Люди обычно воспринимают всё, что длится меньше 0,1 секунды, как мгновенное, 3 секунды — это примерно тот предел, после которого прерывается состояние потока пользователя; а уж 10 секунд удержать внимание пользователя очень сложно.

Хотя уменьшение сегодня уже необязательно, оно всё равно лучше.

Эта статья задумывалась как эксперимент, позволяющий выяснить, каким может быть минимальный размер полезного автономного исполняемого файла C#. Могут ли приложения на C# достичь размеров, при которых пользователи будут ощущать их скачивание как мгновенное? Позволит ли это использовать C# там, где он не используется сейчас?
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js