Search
Write a publication
Pull to refresh
3
0

Пирожочек

Send message

Ограничение памяти, доступной программе

Reading time13 min
Views60K
Решил я как-то заняться задачкой сортировки миллиона целых чисел при имеющейся памяти в 1 Мб. Но перед этим мне пришлось подумать над тем, как можно ограничить объём доступной памяти для программы. И вот, что я придумал.

Виртуальная память процесса


Перед тем, как окунуться в разные методы ограничения памяти, необходимо знать, как устроена виртуальная память процесса. Лучшая статья на эту тему — «Анатомия программы в памяти».

Прочитав статью, я могу предложить две возможности для ограничения памяти: уменьшить виртуальное адресное пространство или объём кучи.

Первое: уменьшение объёма адресного пространства. Это довольно просто, но не совсем корректно. Мы не можем уменьшить всё пространство до 1 Мб — не хватит места для ядра и библиотек.

Второе: уменьшение объёма кучи. Это не так-то просто сделать, и обычно так никто не делает, поскольку это доступно только через возню с компоновщиком. Но для нашей задачи это был бы более корректный вариант.

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

Для тестирования будем использовать небольшую программу по имени big_alloc, размещающую, и затем освобождающую 100 MiB.
Читать дальше →

Безграничные возможности FFmpeg на примерах

Level of difficultyEasy
Reading time12 min
Views72K

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

FFmpeg объединяет более 300 видео/аудио/графических кодеков, декордеров, муксеров, демуксеров и фильтров. Благодаря ему вы можете написать собственный видеоплеер в тысячу строчек кода, не разбираясь с кишочками видеообработки.

Это «движок» почти всех современных инструментов для обработки/сжатия/редактирования видео. Они просто предлагают графический интерфейс с кнопками, а ffmpeg делает реальную работу.
Читать дальше →

Выделенная память подов и вмешательство OOM Killer

Reading time5 min
Views8.3K
И снова здравствуйте! Перевод следующей статьи подготовлен специально для студентов курса «Инфраструктурная платформа на основе Kubernetes», который запускается уже в этом месяце Начнем.



В последние дни некоторые из моих подов постоянно аварийно завершали работу, оставляя в системном журнале ОС запись о том, что OOM Killer уничтожил процесс контейнера. Я решил разобраться, почему это происходит.
Читать дальше →

Ещё раз о моделях памяти, применявшихся в DOS

Level of difficultyHard
Reading time9 min
Views11K

Некоторое время назад я написал несколько статей о различных трюках, применявшихся в операционной системе DOS, чтобы вписаться в те жёсткие лимиты памяти, которые действовали в реальном режиме на архитектуре x86. Постоянно возникал и оставался без ответа один вопрос: а каковы были различные «модели», которые предлагались компиляторами тех времён? Взгляните, как выглядело меню для генерации кода в Borland Turbo C++.

Tiny (крошечный), small (маленький), medium (средний), compact (компактный), large (большой), huge (огромный)… Что означают эти опции? Каковы их эффекты? Ещё важнее… а так ли важен весь этот антиквариат сегодня, в мире 64-разрядных машин и гигабайтных ОЗУ? Чтобы ответить на этот вопрос, сделаем небольшой обзор архитектуры 8086 и тех двоичных форматов, которые поддерживались в DOS.

Читать далее

Почему измерять ≠ управлять: как KPI искажают реальность и какой инструмент использовать осознанному руководителю

Reading time8 min
Views7.7K

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

В этом материале расскажем к чему это приводит и какой инструмент использовать осознанному руководителю.

Читать далее

Detection is easy. DLL Hijacking в инструментах SysInternals

Reading time2 min
Views1.4K

Многие администраторы и специалисты по ИБ пользовались инструментами из набора SysInternals. Исследователь обнаружил, что большинство инструментов уязвимы для загрузки dll в память.

Далее рассмотрим как это можно эксплуатировать и обнаруживать.

Читать далее

Firewall не спасёт

Level of difficultyHard
Reading time15 min
Views28K
Сгенерировано с помощью GIGA-CHAT

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

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

Используем API Key и JWT Bearer аутентификацию вместе в ASP.NET Core Web API

Level of difficultyMedium
Reading time4 min
Views4.1K

Я расскажу, как реализовать аутентификацию с использованием как JWT, так и API-ключа на одном и том же endpoint в ASP.NET Core Web API. Совмещение этих схем аутентификации полезно, если вы хотите использовать токен JWT Bearer для аутентификации пользователей и API-ключ для аутентификации между сервисами.

Читать далее

Как форматировать и валидировать JSON, в SublimeText. Как добавить сочетание клавиш для команд в SublimeText

Level of difficultyMedium
Reading time2 min
Views4.3K

Предусловие перед тем, как начать: надеюсь, у вас уже скачан sublimetext или скачайте sublimetext с официального сайта.

Читать далее

Нужен ли Postgres альтернативный сборщик статистики таблиц?

Level of difficultyHard
Reading time7 min
Views2.1K

Речь здесь пойдёт о стабильности стандартной статистики Postgres и об идее очередного расширения - на этот раз альтернативы команде ANALYZE. Всё началось с того, что заканчивая работу над предыдущей статьёй я вдруг заметил, что результат выполнения одного и того же запроса теста Join Order Benchmark (JOB) в серии последовательных прогонов может отличаться в разы и даже на порядки - причем как по значению параметра execution-time, так и по pages-read. Это выглядело очень странно, поскольку и тест и ноутбук и все настройки оставались теми же - даже погода за окном. И я решил расследовать, что происходит …

Читать далее

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

Level of difficultyMedium
Reading time21 min
Views7.7K

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

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


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

Заговор разработчиков против корпораций: архитектура и принципы

Level of difficultyMedium
Reading time14 min
Views14K

С момента написания предыдущей статьи я находился под пристальным вниманием. Попытка опубликовать материалы на англоязычных платформах обернулась фиаско — в первые же минуты легионы последователей тайного братства обрушились с критикой:

— Нет никакой организации! — вопили они.

Подозреваю, что слежка велась через мой телеграм-канал.

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

Узнать тайны, о которых молчали

Стандартная библиотека С не потокобезопасна: проблему не решает даже Rust

Reading time14 min
Views6.3K

Мы работаем над базой данных EdgeDB и в настоящее время портируем с Python на Rust существенную часть кода, отвечающего за сетевой ввод/вывод. В процессе работы мы узнали много всего интересного.

Читать далее

Гессиан больше не нужен. Упрощаем оценку неопределенностей в машинном обучении

Level of difficultyHard
Reading time6 min
Views1.4K

Привет. Меня зовут Макс, с недавнего времени я занимаюсь в AIRI вопросами ИИ для вычислительной химии и физики. А до того работал в научной группе Т‑Банка, где занимался проблемой неопределенности нейронных сетей. Недавно нашу статью «Identity Curvature Laplace Approximation for Improved Out‑of‑Distribution Detection» приняли на WACV 2025 — престижную конференцию по машинному зрению.

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

Подробнее о новом методе — в тексте ниже.

Читать далее

Java для Sega Mega Drive — возможно ли это?

Level of difficultyMedium
Reading time12 min
Views4.7K

В этом проекте я хотел ответить на вопрос: возможно ли написать игру на Java для Sega Mega Drive/Genesis. Не хочу раскрывать спойлеры, но ответом будет «да».
Несколько лет назад я повстречал проект Java Grinder, который позволяет писать код для различных ретро процессоров на Java, в том числе для Sega Mega Drive. По сути, он интерпретирует байт-код из файлов .class, полученных после компиляции, в код на Ассемблере 68K. Если файлу класса нужны другие файлы классов, то они тоже считываются и обрабатываются. Все вызовы методов API записываются в выходном коде, либо как встроенный ассемблерный код, либо как вызовы предварительно написанных функций, выполняющих свою задачу.

Читать далее

Опыт написания компилятора вручную

Level of difficultyMedium
Reading time9 min
Views8.8K

Компилятор и главный репозиторий: GitHub

Здесь я напишу о своём личном проекте — компиляторе к C-подобному языку. Я не являюсь профессиональным разработчиком, изучал эту тему почти самостоятельно и не читал никакие книги по написанию компиляторов (но читал по операционным системам).

Читать далее

Невидимый вывод grep при поиске, включающим конец строки в файлах с разделителем строк CRLF

Level of difficultyEasy
Reading time6 min
Views1.8K

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

Уже сталкивался с этим, но давно и причину вспомнил не сразу. Пофрустрировав, всё-таки припомнил, разобрался детальнее и решил написать небольшую заметку.

TL;DR: Причина – встреча символа возврата каретки CR (\r) с управляющей последовательностью \x1B[K : CR возвращает курсор в начало строки, а \x1B[K удаляет всё от курсора до конца строки. ОС - Ubuntu 24.04, терминал Terminator 2.1.3, шелл Bash.

Подробности

Стоит ли использовать Python venv в контейнере, таком как Docker? Определённо

Level of difficultyMedium
Reading time6 min
Views8K

Стоит ли использовать Python venv в контейнерах, таких как Docker? На первый взгляд может показаться, что это лишний шаг, ведь контейнер уже обеспечивает изоляцию. Но что, если отказ от venv обернётся неожиданными конфликтами, сложностью поддержки и скрытыми рисками для вашего проекта?

Из этой статьи узнаем, почему даже в контейнеризированной среде venv остаётся важным инструментом для обеспечения стабильности и однородности разработки.

Читать далее

CTF и нейросети: опыт решения задач по кибербезопасности с помощью ИИ

Level of difficultyMedium
Reading time7 min
Views2K

Всем привет!
Меня зовут Глеб Санин, аналитик данных R&D-лаборатории Центра технологий кибербезопасности ГК «Солар». В этой статье я попробовал разобраться, поможет ли ИИ в решении заданий на CTF-турнирах и с какими ограничениями можно столкнуться в моменте.

О будущем использовании ИИ в CTF, как улучшить взаимодействие человека и «машины» и об этике использования ChatGPT подискутируем в комментариях.

Читать далее

Забудь про XPath и CSS-селекторы: путь от стандартных локаторов к кастомным

Level of difficultyMedium
Reading time8 min
Views3.4K

Локаторы — важная часть автоматизации тестирования. Они позволяют находить элементы на странице для взаимодействия с ними в тестах. Но что делать, если стандартные методы, такие как CSS-селекторы и XPath, становятся громоздкими, ломаются при изменении структуры страницы или не поддерживают уникальные особенности элементов? Решение — кастомные локаторы.

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

Читать далее

Information

Rating
Does not participate
Registered
Activity