Pull to refresh
@resetmeread⁠-⁠only

Скромный пастух нулей и единиц…

Send message

Форензика Windows

Reading time6 min
Views4.4K

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

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

Читать далее

Docker Compose: Фичи, которые ускорят вашу разработку

Level of difficultyEasy
Reading time5 min
Views21K

Привет, Хабр! Меня зовут Александр, Системный администратор в компании Барс Груп Сегодня хочу поделиться своим опытом использования новых возможностей Docker Compose, которые значительно упростили мне работу. Эти изменения касаются автоматического обновления контейнеров, работы с профилями, использования GPU, а также улучшенного управления сборкой и секретами. На практике заметил, что эти фичи мало используются, и надеюсь, что после прочтения статьи, вы будете чаще использовать эти фичи в своей повседневной работе. Давайте разбираться!

Читать далее

Лабораторный стенд для исследования характеристик проволочных антенн на основе NanoVNA-F V2

Reading time7 min
Views14K

Недавно приобрел я себе на Алиэкспресс векторный анализатор цепей портативный S-A-A-2 NanoVNA-F V2, тестер HF VHF [1]. Разработан этот прибор в Китае – ссылка на разработчика и описание прибора [2]. Инструкция (англ. язык) [3]. И еще одна инструкция [4].

Прибор удобен своей портативностью и возможностью измерять параметры цепей в диапазоне частот от 50 кГц до 3 ГГц, в частности S11 и S21. Удобство состоит еще в том, что прибор можно подключить к компьютеру (ноутбуку, планшету) по USB и на компьютере произвести анализ полученных измерений. Обнаружил, что в районе выключателя питания можно увидеть зеленый светодиод внутри корпуса, не выведенный наружу, он свечением индицирует режим измерения, отсутствие свечения режим индикации, при отсутствии качания частоты светодиод погашен.

Для начала мной были проведены измерения КСВ всех имеющихся у меня в наличии проволочных антенн. Результаты обнадежили.

После, я обнаружил в конце инструкции, что этим прибором можно управлять по виртуальному COM порту, подключив к компьютеру через USB type3 кабель (из комплекта) и используя любую терминальную программу со стандартными настройками и скоростью обмена 115200. Параметры подключения port='COM3' (у меня так определился в компьютере), baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=0.05, xonxoff=False, rtscts=False, dsrdtr=False.

Система команд прибора приведена в таблице 1. Результаты получены экспериментально, путем анализа описаний других аналогичных приборов [5] на приборе с указанной прошивкой при помощи бесплатной терминальной программы YAT – [6].

Читать далее

Работа с Terraform: эмпирические правила

Level of difficultyHard
Reading time6 min
Views2.9K

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

Читать далее

Компилятор WebAssembly, который помещается в один твит

Level of difficultyMedium
Reading time11 min
Views12K

▍ Введение


Наш первый «компилятор WebAssembly в твите» имел длину 269 байт; с тех пор мы смогли снизить её всего до 192 байтов.

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

let c=(b,l)=>WebAssembly.instantiate(new Int8Array(
[,97,115,109,1,,,,1,5,1,96,,1,127,3,2,1,,7,4,1,,,,10,
l=(b=b.split` `.flatMap(t=>t>-1?[65,t]:107+'-*/'.indexOf(t)))
.length+4,1,l-2,,...b,11]))

А вот пример его использования:

(await c('11 11 1 - + 4 * 2 /')).instance.exports['']()

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

Горизонтальное масштабирование базы данных. Репликация. Партицирование. Шардирование

Level of difficultyEasy
Reading time11 min
Views20K

В современном мире данных нагрузка на базы данных стремительно растёт. Когда один сервер перестаёт справляться с объёмом запросов, встаёт вопрос о масштабировании: как эффективно распределить нагрузку, сохранив высокую производительность и доступность?

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

Читать далее

Аппроксимация затухания в коаксиальных кабелях и ее использование для расчетов радиосистем

Level of difficultyMedium
Reading time4 min
Views1.8K

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

Читать далее

Хронология зарубежной научной фантастики

Level of difficultyEasy
Reading time28 min
Views25K

Опубликованный хронологический справочник содержит зарубежные литературные произведения научной фантастики, которые литературоведы и литературные критики относят к классике жанра. Хронология охватывает период со 160 года до 1 января 2025 года.

Читать далее

Подключаем длинную линию 1-wire к Ардуино

Reading time3 min
Views9.3K

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

Берется какая‑нибудь ардуиноподобная плата, или что‑то из серии ESP, один из выводов GPIO настраивается в прошивке как линия 1-wire, а микросхема DS1820 подключается примерно так:

Читать далее

Gambit Scheme: проверяем, определён ли атом

Level of difficultyMedium
Reading time3 min
Views679

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

Одной из самых проблематичных операций, реализацию которой затрудняет идеология Scheme, является стандартная для ряда диалектов форма is-bound?, предназначенная для проверки, определён ли её аргумент, то есть занесён ли он в системный ассоциативный список атомов и, как следствие, имеет ли он вообще какое-либо значение. Рассмотрим, как мы можем реализовать данную форму в Gambit Scheme.

Читать далее

90% разработчиков не понимают принцип инверсии зависимостей из SOLID. DIP — это не про абстракции

Reading time4 min
Views61K

Зачастую, когда речь заходит про принцип инверсии зависимостей, можно услышать, что инверсия зависимостей (далее DIP) — это что-то там про зависимость от абстракций, и приводятся примеры, где в качестве «плохого» случая, используются конкретные классы, а в исправленном случае, используются абстрактные классы или интерфейсы. Но такая трактовка принципа в корне неверна.

Почему такая трактовка неверна и в чем же суть принципа — об этом и пойдет речь далее.

Читать далее

KEDA: автоматическое масштабирование в Kubernetes

Level of difficultyEasy
Reading time5 min
Views2K

Привет, друзья-разработчики и Kubernetes-энтузиасты! Сегодня мы с вами погрузимся в мир KEDA (Kubernetes-based Event Driven Autoscaling) — инструмента, который позволит вашим приложениям масштабироваться как по волшебству.

KEDA позволяет Kubernetes автоматически масштабировать приложения на основе различных внешних событий: сообщений в очередях, метрик из Prometheus, вебхуков и многого другого. Мастхев для некоторых микросервисов.

Читать далее

Cortex-M0+ под ногами или бесплатная «девборда»

Level of difficultyEasy
Reading time7 min
Views23K

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

Читать далее

Telegram-бот-магазин на Python: пошаговый гайд с оплатой, каталогом и админкой (Aiogram 3 + SQLAlchemy 2)

Reading time52 min
Views36K

Сегодня я к вам с новым практическим проектом на Python. На этот раз мы создадим полноценного Telegram-бота для продажи цифровых товаров с базой данных, которой будем управлять через SQLAlchemy 2, админ-панелью, пользовательской частью и интегрированной оплатой через Юкассу.

Я шаг за шагом проведу вас через все этапы разработки такого бота: начиная от регистрации токена в BotFather и заканчивая деплоем готового продукта на удаленном хостинге, чтобы бот мог бесперебойно работать 24/7 без привязки к вашему компьютеру или интернет-соединению.

Читать далее

Специализированные репозитории для Debian своими руками. Самый полный мануал

Level of difficultyMedium
Reading time12 min
Views9K

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

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

Однако в случае с Debian поднятие полного зеркала может осложняться объемом репозиториев — там по‑настоящему много пакетов, включая и те, что обычно не нужны на серверах, например игры. Помимо этого, официальной поддержки Debian не существует, а работать как-то нужно. Поэтому в этой статье мы расскажем о способе создания готовых архивов для зеркал с урезанными подборками пакетов, нужных для установки и/или обновления одного или более серверов с известным набором ПО.

Читать далее

Как работает Evercookie в 2023 году

Level of difficultyMedium
Reading time35 min
Views5K

В 2010 году Сами Камкар написал скрипт, который позволял идентифицировать пользователя сайта, если тот ранее посещал его. Решение было названо эверкукой (суперкукой). Данная статья рассматривает механизм восстановления куки и отвечает на вопрос работает ли это в 2023 году. В конце статьи приводится реализация части evercookie для Angular.

Читать далее

Quansheng UV-K5/K6, трансивер, из которого можно сделать что угодно: аппаратные доработки

Reading time7 min
Views23K

Привет, Хабр! В прошлый раз мы рассказывали о трансивере Quansheng UV-K5/K6 и его возможностях. Сегодняшняя статья посвящена аппаратным доработкам этого дешёвого и доступного китайского девайса. С их помощью можно расширить принимаемый диапазон, обзавестись большим количеством памяти для контактов, реализовать своеобразный TeamViewer для удалённого управления трансивером и обеспечить работу в сети APRS. Приятного чтения!

Читать далее

Практика использования парсер-комбинаторов peco и оператора match для создания простых DSL на языке Python

Level of difficultyEasy
Reading time13 min
Views5.5K

Задачи разработки компиляторов и интерпретаторов конфигурационных языков или даже полноценных Тьюринг-полных языков программирования время от времени встают перед разработчиками программного обеспечения. На практике, как правило, речь идёт о разработке предметно-ориентированных языков (англ. Domain Specific Language, DSL), проектируемых специально для решения узкого класса прикладных задач.

В статье рассматривается один из способов реализации DSL на примере разработки системы символьного дифференцирования, как в SymPy, с использованием парсер-комбинаторов peco и структурного сопоставления с образцом по PEP 636. Материал рассчитан на прикладных разработчиков, уже знакомых с Python, но, надеюсь, может быть полезен и продолжающим компиляторщикам.

Читать далее

Envoy в Legacy-среде: использование протоколов xDS для управления Data Plane

Level of difficultyHard
Reading time15 min
Views1.1K

Привет, Хабр! Давайте продолжим изучать возможности Envoy, но уже в контексте динамической конфигурации. В первой статье мы рассматривали настройку статической конфигурации, однако она имеет свои особенности. Статическая конфигурация подходит, когда ваши upstream (серверы, к которым Envoy отправляет запросы) редко изменяются. Envoy работает как прокси, и каждый запрос проходит через него. Чтобы правильно обработать запрос, Envoy должен иметь актуальную информацию о бэкенд-серверах, такую как их IP-адреса и порты. Когда информация о бэкенде меняется, необходимо обновить конфигурацию в статическом файле и перезапустить Envoy, что не всегда удобно.

Читать далее

Рекурсивные запросы в SQLAlchemy

Reading time18 min
Views4.7K

Когда возникает необходимость работать с иерархической структурой данных, кажется, что решение давно найдено, ведь подобные задачи уже неоднократно решались. Возможно, даже выбран инструмент, например, Python и SQLAlchemy. Однако, углубляясь в задачу, понимаешь, что вариантов множество, даже в вопросе, как извлечь данные из базы: использовать стратегию selectin для загрузки родительских элементов? Или, возможно, стоит применить joinload? А может, лучше воспользоваться CTE‑запросами, которые рекомендуются в 90% статей? Но насколько CTE действительно эффективно по сравнению с другими методами? Более того, большинство примеров рассматривают ситуации в идеальных условиях, далёких от реальных проектов.

В этой статье я рассмотрю основные способы получения иерархической структуры из БД на примере реального многослойного приложения с использованием SQLAlchemy 2.0. Как обычно, есть важные нюансы, о которых редко упоминают, хотя они весьма любопытны. В завершение проведу сравнение производительности всех описанных подходов.

Погружаемся

Information

Rating
Does not participate
Registered
Activity