Как стать автором
Обновить
0
0

Пользователь

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

Вы думаете рисовать линии это просто?

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров26K

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

Читать далее
Всего голосов 60: ↑58 и ↓2+70
Комментарии39

Пентест gRPC

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров5.2K

В последнее время в современных веб-приложениях с микросервисной архитектурой всё чаще в качестве API используется фреймворк удалённого вызова процедур gRPC. Данный фреймворк чаще всего использует protocol buffers(protobuf) в качестве языка определения интерфейсов и в качестве основного формата обмена сообщениями. Однако, в отличие от более привычных форматов обмена сообщениями (JSON,XML и тд), которые являются текстовыми, в protobuf фигурируют бинарные данные. Помимо этого, gRPC в качестве транспорта использует исключительно HTTP/2. Чаще всего эти обстоятельства вызывают затруденения при тестировании безопасности веб-приложений, которые используют данный фреймворк.

Данная статья поможет разобраться в том, как тестировать веб-приложения, использующие gRPC. Содержание статьи частично пересекается с моим докладом на OFFZONE 2023, однако, если в нём был сделан упор на рассказ об аспектах protobuf и gRPC и обзор существующих инструментов для тестирования безопасности, то здесь мы рассмотрим практический пример по поиску уязвимостей на демонстрационном стенде с использованием Burp Suite и расширения prototbuf-magic, разработанным нами. Для ознакомления с основами protobuf и gRPC рекомендую послушать мой доклад.

Читать далее
Всего голосов 8: ↑8 и ↓0+12
Комментарии0

Реализация циклической генерации подземелий «изнутри»: да что тут сложного?

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров10K

Вам нравятся старые Legend of Zelda времён SNES и GBA? Может быть, вам пришлась по вкусу Dark Souls? А, возможно, вы ещё и фанат Quake? Но что объединяет все эти игры? Для меня это в первую очередь дизайн уровней. Головоломки, удобные шорткаты и нелинейность исследования - вот то, что делает карту игры частью общего игрового процесса и вдыхает жизнь в процесс исследования мира.

В наше время расцвета жанра rogue-lite вопрос генерации игровых уровней актуален как никогда. Однако по-настоящему интересные уровни в жанре - большая редкость, я бы даже сказал, феноменальная. Чаще всего уровни представляют собой просто наборы заранее заготовленных комнат-коробок, случайным образом приставленных друг к другу, без какой-либо логичной высокоуровневой картины. Но, всё же, я знаю одну игру, которая взяла принципиально другой подход: Unexplored. На мой взгляд, она пересмотрела устоявшийся стереотип об ограничениях левелдизайна в рогаликах. Всё, что для этого понадобилось - циклическая генерация подземелий (Cyclic dungeon generation).

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

Каких же?
Всего голосов 28: ↑28 и ↓0+34
Комментарии15

Книга рецептов Rust. 1/2

Уровень сложностиСредний
Время на прочтение34 мин
Количество просмотров5.5K



Hello world!


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


Читать дальше →
Всего голосов 28: ↑28 и ↓0+32
Комментарии1

Как мы применяем гибкую вёрстку для адаптива страниц под большие экраны

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров8.5K

Привет! Меня зовут Оля и я расскажу о том, как мы при помощи гибкой вёрстки настроили отображение контента на широких экранах. 

Эта статья будет полезна разработчикам веб-сайтов и послужит примером использования CSS при разработке адаптивности сайта для экранов свыше 1921 пикселей.

Читать далее
Всего голосов 8: ↑8 и ↓0+9
Комментарии6

Сложнейшая проблема компьютерных наук: центрирование

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров33K

Заявляю: «Мы, как цивилизация, разучились использовать центрирование». Ну то есть мы, конечно, знаем, как это делать — очень просто:

display: flex;
justify-content: center; /* Горизонтальное центрирование */
align-items: center; /* Вертикальное центрирование */

Не спрашивайте, почему вам нужно запомнить четыре слова вместо просто горизонтальное/вертикальное; всё равно лучше, чем было до этого.

Ещё можно использовать сетку:

display: grid;
justify-items: center; /* Горизонтальное центрирование */
align-items: center; /* Вертикальное центрирование */

Также не спрашивайте, почему выражение justify-content стало justify-items.
Читать дальше →
Всего голосов 194: ↑189 и ↓5+227
Комментарии56

Создаём надёжные API для бэкенда при помощи конечных автоматов: подробное руководство

Время на прочтение7 мин
Количество просмотров9.3K
Я — бэкенд-разработчик, поэтому мне довелось по достоинству оценить, насколько важны конечные автоматы при построении надёжных систем, которые хорошо масштабируются. Конечные автоматы отлично подходят для моделирования сложной бизнес-логики и автоматизации переходов между состояниями. В этом посте будет разобрано, что представляют собой конечные автоматы, в чём их польза для бэкенд-разработки, и как с их помощью решать распространённые задачи.

Что такое конечные автоматы?


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

Конечные автоматы часто используются в разработке программ для моделирования сложных потоков задач. С помощью конечных автоматов можно чётко и структурированно определить поведение системы. Тогда о системе становится проще рассуждать, её удобнее отлаживать и поддерживать.
Читать дальше →
Всего голосов 9: ↑8 и ↓1+11
Комментарии27

Cloudflare открыла код Rust-фреймворка для программируемых сетевых сервисов — Pingora

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров5.4K



Мы гордимся тем, что открываем исходный код Pingora — фреймворка на Rust, который мы используем для создания сервисов, обеспечивающих значительную часть трафика в Cloudflare. Pingora выпускается под лицензией Apache 2.0.

Читать дальше →
Всего голосов 18: ↑18 и ↓0+18
Комментарии2

Опровергаю пять архитектурных заблуждений

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров24K

Привет! Я Алексей, iOS-разработчик в Тинькофф. Участвую в развитии архитектуры приложения, провожу собеседования и занимаюсь менторингом разработчиков.

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

Читать далее
Всего голосов 37: ↑33 и ↓4+32
Комментарии27

Угроза появления квантового компьютера для современной криптографии и шифрования

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров5.9K

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

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

В данном исследовании мы постараемся ответить вопрос, является ли появление квантового компьютера угрозой для современной криптографии и шифрования.

Читать далее
Всего голосов 6: ↑3 и ↓3+3
Комментарии7

Микросервисы Rust в серверном WebAssembly

Уровень сложностиСложный
Время на прочтение8 мин
Количество просмотров5.5K
image

Язык программирования Rust за последние несколько лет значительно распространился. Он несколько лет подряд считается самым любимым языком программирования среди разработчиков и включён в состав ядра Linux. Rust позволяет разработчикам писать корректные программы, обеспечивающие безопасность при работе с памятью, а также такие же компактные и быстрые, как на языке C. Он идеально подходит для создания инфраструктурного программного обеспечения, включая серверные приложения, от которых требуется высокая надёжность и производительность.
Читать дальше →
Всего голосов 21: ↑18 и ↓3+23
Комментарии11

Как правильно хешировать пароли в высоконагруженных сервисах. Опыт Яндекса

Время на прочтение8 мин
Количество просмотров40K
Я расскажу о такой проблеме, как хеширование паролей в веб-сервисах. На первый взгляд кажется, что тут все «яснопонятно» и надо просто взять нормальный алгоритм, которых уже напридумывали много, написать чуть-чуть кода и выкатить все в продакшн. Но как обычно, когда начинаешь работать над проблемой, возникает куча подводных камней, которые надо обязательно учесть. Каких именно? Первый из них — это, пожалуй, выбор алгоритма: хоть их и много, но у каждого есть свои особенности. Второй — как выбирать параметры? Побольше и получше? Как быть с временем ответа пользователю? Сколько памяти, CPU, потоков? И третий — что делать с computational DoS? В этой статье я хочу поделиться некоторыми своими мыслями об этих трех проблемах, опытом внедрения нового алгоритма хеширования паролей в Яндексе и небольшим количеством кода.



Attacker & Defender


Прежде чем переходить к алгоритмам и построению схемы хеширования, надо вообще понять, от чего же мы защищаемся и какую роль в безопасности веб-сервиса должно играть хеширование паролей. Обычно сценарий таков, что атакующий ломает веб-сервис (или несколько веб-сервисов) через цепочку уязвимостей, получает доступ к базе данных пользователей, видит там хеши паролей, дампит базу и идет развлекаться с GPU (и, в редких случаях, с FPGA и ASIС).
Читать дальше →
Всего голосов 106: ↑100 и ↓6+94
Комментарии65

Что стоит почитать и посмотреть летом — рекомендации ученых из Университета ИТМО

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

Сегодня мы решили открыть новую рубрику в нашем блоге на Хабре — делиться «неклассическими» рекомендациями от представителей Университета ИТМО и спикеров нашего подкаста «ITMO Research_». В сегодняшнем выпуске: YouTube- и Telegram-каналы, книги и другой контент, который подойдет для изучения в относительно спокойной обстановке — в отпуске или во время отдыха.

Читать далее
Всего голосов 5: ↑4 и ↓1+4
Комментарии0

Где учиться программированию в Петербурге: программы при поддержке JetBrains

Время на прочтение10 мин
Количество просмотров27K
Мы заинтересованы в том, чтобы повышать образовательный уровень в IT-сфере,  и готовы строить высшее образование вместе с вузом.

В этом посте мы расскажем об образовательных проектах в Петербурге, которые поддерживает JetBrains: о бакалаврских и магистерских программах в НИУ ВШЭ, ИТМО, СПбГУ и о Computer Science Center.


Читать дальше →
Всего голосов 13: ↑12 и ↓1+17
Комментарии10

Заметки об объектной системе языка Python ч.2

Время на прочтение10 мин
Количество просмотров87K
Вторая часть заметок об объектной системе python'a (первая часть тут). В этой статье рассказывается, что такое классы, метаклассы, type, object и как происходит поиск атрибутов в классе.

Читать дальше →
Всего голосов 74: ↑70 и ↓4+66
Комментарии20

Web приложение для работы с markdown заметками

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

За долгое время у меня накопилось много различных заметок, подсказок и шпаргалок на различные темы, как связанные с it, так и совсем не связанные. Появилась необходимость это удобно и структурировано хранить.

Я попробовал различные wiki движки, но не всё мне в них нравилось, иногда функционала было недостаточно, а иногда было слишком много. Я подумал, что если хочешь сделать хорошо — сделай это сам нужно написать свой велосипед.

Мне давно хотелось написать web-приложение на Python, поэтому выбор пал на этот язык. Под катом исходный код и описание, а также ссылка на репозиторий.
Читать дальше →
Всего голосов 12: ↑11 и ↓1+10
Комментарии22

Как создать сайт? Структура и контент

Время на прочтение19 мин
Количество просмотров57K
Итак, вы решили быть последовательными и начать разработку сайта с самого важного и фундаментального этапа — со структуры (visual sitemap) и контента. Ок, значит, вы попали в правильное место, где мы собрали для вас инструкции и эффективные советы как это лучше всего сделать и с чего начать. Да пребудет с вами сила, так как такой фундаментальный гид за один присед вряд ли удастся осилить.

Пример структуры веб-сайта Octopus.do

Пример структуры веб-сайта (Блоки кликабельны)

Какие разделы включить? Что по поводу контента? Мы серьезно все продумали, потратили более месяца на исследования и собрали в этом гиде весь наш 18-летний опыт по созданию сайтов. Дочитав эту статью, вы обретете исчерпывающее представление о том, почему именно так должен быть структурирован сайт компании или продукта, мы также немного коснемся фундаментальных принципов SEO и планирования контента.
Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии4

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность