Как стать автором
Обновить
15
0
Эридан Доморацкий @ProgMiner

Разработчик

Отправить сообщение

PostgreSQL Antipatterns: сражаемся с ордами «мертвецов»

Время на прочтение3 мин
Количество просмотров19K
Особенности работы внутренних механизмов PostgreSQL позволяют ему быть очень быстрым в одних ситуация и «не очень» в других. Сегодня остановимся на классическом примере конфликта между тем, как работает СУБД и тем, что делает с ней разработчик — UPDATE vs принципы MVCC.

Кратко сюжет из отличной статьи:
Когда строка изменяется командой UPDATE, фактически выполняются две операции: DELETE и INSERT. В текущей версии строки устанавливается xmax, равный номеру транзакции, выполнившей UPDATE. Затем создается новая версия той же строки; значение xmin у нее совпадает с значением xmax предыдущей версии.
Через какое-то время после завершения этой транзакции старая или новая версии, в зависимости от COMMIT/ROOLBACK, будут признаны «мертвыми» (dead tuples) при проходе VACUUM по таблице и зачищены.



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

Задача для разработчика, или как мы без вендора ручные сканеры прошивали

Время на прочтение7 мин
Количество просмотров13K
Всем привет.

Мы, Виктор Антипов и Илья Алешин, сегодня расскажем о своем опыте работы с USB-девайсами через Python PyUSB и немного о реверс-инжиниринге.


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

Помоги компилятору помочь тебе

Время на прочтение18 мин
Количество просмотров55K

Предисловие


Современные компиляторы обладают огромным количеством диагностик. И удивительно, что очень малая их часть включена по умолчанию.


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


Давайте же исправим эту вопиющую несправедливость, и прольём свет истины на возможности компилятора по предотвращению ошибок.

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

Точки соприкосновения JavaScript и Reverse Engineering

Время на прочтение8 мин
Количество просмотров25K


Если вы посмотрите описания вакансий на позицию Reverse Engineer, то вряд ли встретите там требование знания JavaScript. А если и встретите, то только в контексте его деобфускации на разных вредоносных страницах, обычно используемых эксплойт-паками.
И возможно ли вообще сосуществование JS (который некоторые даже называют веб-ассемблером) и мира low level с Assembler во главе?

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

Делаем быстрее POSTGRESQL COUNT (*)

Время на прочтение4 мин
Количество просмотров58K


Часто жалуются, что count (*) в PostgreSQL очень медленный.

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

Почему count (*) такой медленный?


Большинство людей без проблем понимают, что следующий запрос будет выполняться медленно:

SELECT count(*)
FROM /* сложный запрос */;

В конце концов, это сложный запрос, и PostgreSQL должен вычислить результат, прежде чем узнает, сколько строк он будет содержать.

Но многие люди потрясены, когда узнают, что следующий запрос медленный:

SELECT count(*) FROM large_table;

Тем не менее, если вы подумаете еще раз, все вышесказанное остается в силе: PostgreSQL должен вычислить результирующий набор, прежде чем сможет его посчитать. Поскольку в таблице не хранится «магический счетчик строк» (как в MyISAM MySQL), единственный способ подсчитать строки — это просмотреть их.

Поэтому count (*) обычно выполняет последовательное сканирование таблицы, что может быть довольно дорого.
Читать дальше →

Нейтронная звезда в пробирке. Сонолюминесценция

Время на прочтение14 мин
Количество просмотров52K
Хомяки приветствуют вас, друзья.

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



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

Роботаракан Петя за десять баксов

Время на прочтение10 мин
Количество просмотров30K

Знакомьтесь с Петей, шестиногом о трёх сервоприводах


Продолжаю публикацию статей из серии "ардуино головного мозга". Петя — это очень дешёвый (примерно десять баксов) гексапод. Он может быть прекрасным проектом на один ненастный выходной, который развлечёт как и взрослых, так и детей. Раз уж мы про развлечения, вот вам видеоролик с Петей, танцующим под фанк-музыку:


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

Статический анализ → уязвимость → профит

Время на прочтение5 мин
Количество просмотров10K

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

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

Как успешно пройти любой пентест (вредные советы)

Время на прочтение11 мин
Количество просмотров35K
Если требуется вам срочно провести пентест,
Вы при этом не хотите по затылку получать,
То тогда быстрей смотрите приготовленный для вас
Список удивительных советов — он, конечно, вас спасет.


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

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

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

Итак, команда найдена, договор подписан, уговорить спецов провести пентест спустя рукава не получилось. Ребята толковые, начнут работы с понедельника и разнесут вашу ИБ к чертям, после чего вы отхватите по шапке, и ваша некомпетентность будет раскрыта. Ситуация кажется вам максимально плачевной, но не тут-то было! Вот вам вредные советы, как устранить или хотя бы минимизировать эту головную боль.
Читать дальше →

Как в Python реализованы очень длинные числа типа integer?

Время на прочтение6 мин
Количество просмотров66K
Перевод статьи подготовлен специально для студентов курса «Разработчик Python».





Когда вы пишете на низкоуровневом языке, таком как С, вы беспокоитесь о выборе правильного типа данных и спецификаторах для ваших целых чисел, на каждом шаге анализируете достаточно ли будет использовать просто int или нужно добавить long или даже long double. Однако при написании кода на Python вам не нужно беспокоиться об этих «незначительных» вещах, потому что Python может работать с числами типа integer любого размера.
Читать дальше →

Разбираем идеальный кейс фишинга при аренде квартиры

Время на прочтение5 мин
Количество просмотров45K
Недавно я стал жертвой (к счастью, неудачной) фишинговой атаки. Несколько недель назад я бродил по сайтам Craigslist и Zillow: я хотел арендовать жилье в районе залива Сан-Франциско.
Мое внимание привлекли симпатичные фото одного местечка, и мне захотелось связаться с арендодателями и узнать о нем поподробнее. Несмотря на мой опыт в качестве специалиста по безопасности, я не понимал, что со мной общаются мошенники, вплоть до третьего письма! Ниже я подробно расскажу разберу кейс вместе со скриншотами и тревожными звоночками.

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



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

Стеганография в IP-пакетах

Время на прочтение4 мин
Количество просмотров20K
Однажды, перед защитой очередной лабораторной работы мне задали вопрос: какие поля IP-пакета можно использовать для стегано? Я не знал и лишь пожал плечами. Но вскоре я всё же решил изучить этот вопрос.

Под катом вас ждёт изучение заголовков IP-пакетов, собственная утилита ping на Python и несколько способов передать данные, не привлекая внимания.
Читать дальше →

Topleaked: инструмент ловли утечек памяти

Время на прочтение8 мин
Количество просмотров7.3K
image

История, как это часто бывает, началась с того, что упал один из сервисов на сервере. Точнее процесс был убит мониторингом за превышение использования памяти. Запас должен был быть многократным, а значит у нас утечка памяти.
Есть полный дамп памяти с отладочной информацией, есть логи, но воспроизвести не получается. То ли утечка безумно медленная, то ли сценарий зависит от погоды на Марсе. Словом, очередной баг, который не воспроизводится тестами, но встречается в дикой природе. Остаётся единственная реальная зацепка — дамп памяти.

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

Разбор демки на 128 байт из архива 1997 года

Время на прочтение15 мин
Количество просмотров45K
Очень приятно осуществлять свои желания, особенно из далёкого прошлого, такого далёкого что уже и забыл что этого когда-то хотел. Я мало знаю о демосцене и уж точно никогда не следил ни за авторами ни за их работами, мне просто нравилось смотреть то что получалось. Иногда мне хотелось в этом разобраться, но тогда мне не хватало знаний и опыта, позже усидчивости, а потом и вовсе у меня пропал к этому интерес. Но недавно мой друг, с кем мы учились в то время и который поставлял нам все новинки, включая демки, с BBS и Fidonet, потому что у него чуть ли ни у единственного был и телефон и модем и компьютер одновременно, посетил CAFePARTY со своими работами, что заставило меня открыть архив моего первого компьютера, выбрать демку и разобраться.

pentagra.com

Объективно оценивая свои силы я взял 128 байтовое интро которое мне понравилось визуально. Файл pentagra.com за подписью Mcm, 128 байт, последнее изменение 24.09.1996 18:10:14, шестнадцатеричный дамп:

000000: b0 13 cd 10 68 00 a0 07 06 1f ac ba c8 03 ee 42
000010: b1 40 ee 40 6e 6e e2 fa b8 3f 3f bb 40 01 bf 40
000020: 05 57 b1 78 ab 03 fb e2 fb 5f b1 60 88 01 aa 03
000030: fb 03 fb e2 f7 b1 61 88 01 aa 2b fb 2b fb e2 f7
000040: bf d1 99 57 b1 78 ab 2b fb e2 fb 5f b1 8f f3 ab
000050: 81 fe 00 fa 73 12 ac 0a c0 74 0d 48 88 44 fe 88
000060: 04 88 40 ff 88 84 bf fe 03 f2 42 75 e3 e4 60 3c
000070: 01 75 a5 b8 03 00 cd 10 c3 00 00 00 00 4d 63 6d
Читать дальше →

Пусть засияет свет

Время на прочтение11 мин
Количество просмотров11K


Работа Джима Санборна (Jim Sanborn) Kryptos до сих не поддалась дешифровке. Наверное, это одна из самых известных и интересных нерешенных криптографических задач современности. А может быть это искусственно раздутый интерес.

Криптос появлялся на хабре не раз, а раз, два, три.

Но речь пойдёт не про него, а про более раннюю работу Санборна — Кириллический проектор, он же Cyrillic Projector.

И вот его удалось прочесть. И там есть рука KGB.
Читать дальше →

Движок, скриптовый язык и визуальная новелла — за 45 часов

Время на прочтение21 мин
Количество просмотров47K

visual novel, engine and scripting language for 45 hours


Приветствую. Так получилось, что уже три года подряд в качестве подарка на Новый год определенным людям я делаю игру. В 2018-ом году это был платформер с элементами головоломки, о котором я писал на хабре. В 2019-ом — сетевая RTS для двух игроков, о которой я ничего не писал. И наконец, в 2020-ом — визуальная новелла, о которой далее и пойдет речь, созданная в условиях сильно ограниченного времени.


В этой статье:


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

Интересно? Тогда добро пожаловать под кат.


Осторожно: тут много текста и ~3.5мб изображений

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

Пишем драйвер для ноутбука for fun and profit, или как закоммитить в ядро даже если ты дурак

Время на прочтение5 мин
Количество просмотров38K

С чего всё началось


Начнём с постановки проблемы. Дано: один ноутбук. Новый ноутбук, геймерский. С RGB-подсветкой. Вот такой примерно ноутбук:

image
Картинка взята с lenovo.com

Есть ещё программа к этому ноутбуку. Программа как раз этой подсветкой и управляет.

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

Как ханипоты деанонимизируют хакеров и онлайн-мошенников

Время на прочтение5 мин
Количество просмотров11K


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

Руководство по миграции WordPress-сайта

Время на прочтение7 мин
Количество просмотров217K


Каждый веб-разработчик регулярно сталкивается с задачей миграции. Сюда входят и развёртывание (deploy) локальной версии на удалённом сервере, и перенос работающего сайта с одного сервера на другой. Некоторые печатные издания для программистов называются «Cookbook» – что буквально значит «книга рецептов». Рецептов множество, какой из них лучший — дело вкуса. В этом материале автор расскажет о том, какую технологию переноса типичного сайта на WordPress он считает оптимальной, и почему.
Читать дальше →

Hibernate — о чем молчат туториалы

Время на прочтение12 мин
Количество просмотров129K
Эта статья не будет затрагивать основы hibernate (как определить entity или написать criteria query). Тут я постараюсь рассказать о более интересных моментах, действительно полезных в работе. Информацию о которых я не встречал в одной месте.
image
Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Петродворец, Санкт-Петербург и область, Россия
Зарегистрирован
Активность