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

Вам следует написать новый (ужасный) язык программирования - 1


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

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

Любой может получить доступ к удалённым и приватным данным репозиториев GitHub - 1


Кто угодно может получать доступ к данным из удалённых форков, удалённых репозиториев и даже приватных репозиториев GitHub. И эти данные доступны всегда. Это известно разработчикам GitHub, и они намеренно спроектировали систему таким образом.

Это настолько огромный вектор атак для всех организаций, использующих GitHub, что мы решили ввести новый термин: Cross Fork Object Reference (CFOR). Уязвимость CFOR возникает, когда форк одного репозитория может получить доступ к требующим защиты данным из другого форка (в том числе и к данным из приватных и удалённых форков). Аналогично Insecure Direct Object Reference, при CFOR пользователи передают хэши коммитов, чтобы напрямую получать доступ к данным коммитов, которые иначе были бы для них невидимыми.

Давайте рассмотрим несколько примеров.Читать полностью »

Почему порой так сложно вводить текст в терминал - 1


Как-то раз я спросила у пользователей Mastodon, что их не устраивает в работе с терминалом, и одним из ярких замечаний оказалось «редактирование уже введённой команды».

Мне эта проблема тоже реально знакома. Несмотря на то, что ввод текста и его редактирование является «базовой» задачей, мне потребовалось около 15 лет каждодневной работы с терминалом, чтобы привыкнуть к использованию Ctrl+A для перехода к началу строки (или Ctrl+E для перехода в конец — я использовала вместо этого Home/End).

Так что сегодня речь пойдёт о том, что ввод текста порой вызывает сложности. Я также поделюсь с вами кое-какими советами, которые сама была бы рада услышать давно.Читать полностью »

Реализация сапёра в 100 строках чистого Ruby - 1


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

Сразу внесу ясность: я не говорю о код-гольфинге, хотя это занятие тоже бывает интересным. Я имею в виду сокращение количества строк кода без потери его читаемости. По факту одним из самых приятных аспектов Ruby является то, что уменьшение количества строк кода зачастую может повысить его читаемость.

В нашем случае мы проделаем это на примере старого доброго «Сапёра». Помню, как играл в него на Windows XP ещё пацаном. Если и вы разделяете аналогичные воспоминания, то приветствую вас, мои друзья-миллениалы! Читать полностью »

Как уничтожить вашу ОС с помощью TAR - 1


Это короткая история о том, насколько опасной может оказаться обычная распаковка tar, и что можно сделать для минимизации или избежания связанных с ней рисков.

▍ Ошибка

Недавно я экспериментировал с установкой Void Linux через chroot методом XBPS. Для подготовки базовой системы Void Linux на моём хосте с Fedora Linux требовался XBPS Package Manager. Одним из вариантов было скачать архив статически собранных инструментов из официального репозитория. Я выбрал https://repo-default.voidlinux.org/static/xbps-static-latest.x86_64-musl.tar.xzЧитать полностью »

Как malloc сломала JPGLoader в Serenity, или как выиграть в лотерее - 1


Пару лет назад мне выпала возможность расследовать в SerenityOS интересный баг, связанный с декодированием изображений JPG, которые по какой-то причине при просмотре выглядели так, как вы видите выше.

Странно, не так ли? Похоже, будто просто перепутали RGB и BGR. При этом внесение в JPGLoader.cpp следующего изменения:

-   const Color color { (u8)block.y[pixel_index], (u8)block.cb[pixel_index], (u8)block.cr[pixel_index] };
+   const Color color { (u8)block.cr[pixel_index], (u8)block.cb[pixel_index], (u8)block.y[pixel_index] };
    context.bitmap->set_pixel(x, y, color);

приводит к корректному показу картинки. Вроде бы можно считать дело закрытым!

…Но нет. Возникает вопрос, почему вообще произошёл этот сбой?Читать полностью »

Реверс-инжиниринг умных часов - 1


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

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

Проблемная секунда - 1


Сегодня каждый может легко проверить текущее время множеством способов. У нас есть смартфоны, часы, компьютеры, ТВ, холодильники и так далее. Все знают, какой на дворе год, и что он означает. Мы разбираемся во временны́х зонах и знаем, что такое всемирное координированное время (UTC). Всё кажется таким тривиальным. Однако с точки зрения IT-систем здесь существует множество сюрпризов, вынуждающих нас сталкиваться с проблемами, которые возникают очень редко.

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

Разбираем устройство радарного датчика движения стоимостью $1 - 1


Недавно я приобрёл дешёвые микроволновые датчики движения RCWL-0516, отчасти с целью понять, как китайцы умудрились собрать радар стоимостью меньше доллара.

Заставить работать такой оказалось несложно. Я просто подключил контакт VIN к 5 вольтам, GND к земле и добавил блокировочный конденсатор на контакт 3V3. Когда в радиусе 5 метров происходит какое-то движение, контакт OUT на 3 секунды поднимает уровень напряжения до 3 В.

В общем, девайс работает, но как?

Начал я с того, что нашёл спецификацию для большой микросхемы SOIC-16. Оказывается, BISS0001 — это инфракрасный датчик движения? Как же он устроен? Читать полностью »

Как нормализовывать телефонные номера - 1


Замечали когда-нибудь, что все записывают телефонные номера по-разному? Некоторые пишут их через пробелы, другие через дефис, а кто-то использует скобки. Разные люди по-разному группируют цифры номеров в числа.

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


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