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

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

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

Как хакеры ломают банки за 48 часов и что нужно для защиты

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

На последней кибербитве Standoff 12, которая проходила в ноябре 2023 года, впервые был представлен вымышленный финтех — Global Digital Bank, максимально автоматизированный, с облачными приложениями на основе микросервисов «под капотом». Задачей команд атаки (red team) было реализовать недопустимые события, в случае с финтехом — остановить работу банка, выкрасть базу данных клиентов, взломать новостной портал. Назначение PT Container Security — защитить контейнерные среды и помочь синим командам отследить действия атакующих. Что из этого получилось? Рассказываем!

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

Туториал по Unreal Engine: C++

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

Blueprints — очень популярный способ создания геймплея в Unreal Engine 4. Однако если вы уже давно программируете и предпочитаете код, то вам идеально подойдёт C++. С помощью C++ можно даже вносить изменения в движок и создавать собственные плагины.

В этом туториале вы научитесь следующему:

  • Создавать классы C++
  • Добавлять компоненты и делать их видимыми для Blueprints
  • Создавать класс Blueprint на основе класса C++
  • Добавлять переменные и делать их изменяемыми из Blueprints
  • Связывать привязки осей и действий с функциями
  • Переопределять функции C++ в Blueprints
  • Связывать событие коллизии с функцией
Читать дальше →
Всего голосов 36: ↑36 и ↓0+36
Комментарии34

Big O

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров228K
бинарный поиск
Примечание. Сокращенный перевод, скорее пересказ своими словами.
UPD: как отметили в комментариях, примеры не идеальны. Автор не ищет лучшее решение задачи, его цель объяснить сложность алгоритмов «на пальцах».


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

Если вы способны оценить код в терминах Big O, скорее всего вас считают «умным парнем». И скорее всего вы пройдете ваше следующее собеседование. Вас не остановит вопрос можно ли уменьшить сложность какого-нибудь куска кода до n log n против n^2.

Структуры данных


Выбор структуры данных зависит от конкретной задачи: от вида данных и алгоритма их обработки. Разнообразные структуры данных (в .NET или Java или Elixir) создавались под определенные типы алгоритмов.

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

Здесь мы будем использовать только массивы чисел (прямо как на собеседовании). Примеры на JavaScript.
Читать дальше →
Всего голосов 39: ↑30 и ↓9+21
Комментарии30

Странная функция Telegram

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

Пару лет назад я начал исследовать приложения телеграм, протокол MTProto. Я использовал некоторые методы API не по назначению, в общем, был типичным пользователем телеграм, пока не заметил некоторую особенность, о которой мало кто упоминает, возможность изучить которую отсутствует в большинстве официальных графических приложений (за исключением Telegram X). Я начал исследовать ее и решил поделиться об этом с читателями Хабра.

Что за особенность?
Всего голосов 94: ↑89 и ↓5+109
Комментарии115

Портативная пушка Гаусса за 1к

Время на прочтение3 мин
Количество просмотров45K
В этом посте будет рассмотрена схема и сборка портативной Пушки Гаусса, которую можно собрать за минимальную сумму, а именно, ускоритель будет собран в сумму ~ 1000р. Схема проста на столько, что ее сможет собрать не разбирающийся. Корпус в свою очередь можно скачать в виде 3D модели.

image

Принцип работы Пушки Гаусса


Мы заряжаем высоковольтный конденсатор и разряжаем его на катушку. При протекании тока в катушке, образуется электромагнитное поле, которое втягивает ферромагнитный снаряд внутрь ствола. Заряд конденсатора расходуется пропорционально быстро и, в идеале, ток через катушку перестает течь в момент, когда снаряд находится в центре ствола. После чего, силы на снаряд перестают действовать и он продолжает движение по инерции, вылетает из ствола.
Читать дальше →
Всего голосов 25: ↑16 и ↓9+13
Комментарии45

Как работают пули в видеоиграх?

Время на прочтение6 мин
Количество просмотров52K
Игры FPS (first-person shooter, шутер от первого лица) стали неотъемлемой частью видеоигровой индустрии ещё с момента появления в 1992 году популярнейшей Wolfenstein 3D. С тех пор жанр эволюционировал: улучшалась графика, увеличивались бюджеты на разработку, развивалась экосистема киберспорта. Но что насчёт их фундамента — механики стрельбы? Как проходило развитие на этом фронте? Почему в некоторых играх оружие кажется реальными, а в других похоже на игрушки?

Hitscan


В предыдущую эпоху многие игры для рендеринга 3D-сцен в 2D-изображения использовали технику под названием raycasting («бросание лучей»). Raycasting позволяет движку определять первый объект, с которым пересечётся луч. Но потом разработчики задались вопросом: «Что, если выпустить луч из ствола оружия, чтобы имитировать пулю?» Благодаря этой идее родился hitscan («сканирование попадания»).


Пример raycasting

В большинстве реализаций оружия с hitscan при выстреле игрока физический движок выполняет следующие операции:

  • Определяет направление, в котором указывает оружие.
  • Выпускает из ствола оружия луч на заданное расстояние.
  • Использует raycasting для определения того, попал ли луч в объект.

Если движок определил, что объект находится на линии огня, то он сообщит ему об этом, сказав, что в него «попала» пуля. Затем цель может выполнить все вычисления, необходимые для регистрации повреждений.
Всего голосов 73: ↑69 и ↓4+65
Комментарии56

Делаем свой friGate с анонимностью и без рекламы

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

Всем хороши плагины для обхода блокировок вроде популярного friGate, но есть у них один минус — любят встраивать свою рекламу и в перспективе следить за всем, что вы делаете в интернете.

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

Ssh-туннель на постоянно засыпающем и просыпающемся ноутбуке приходится каждый раз перезапускать.
Есть решения вроде autossh, но настоящего перфекциониста они не удовлетворят.

Попробуем добиться удобства, аналогичного friGate с использованием сервисов, находящихся полностью под нашим контролем.
Нам понадобятся: выделенный сервер с Linux/FreeBSD (я использовал Ubuntu), домен, letsencrypt, squid и немного магии PAC-файлов.

Домен можно взять бесплатный 3-го уровня от вашего хостера или тут: freedomain.co.nr, registry.cu.cc.

Squid поддерживает шифрованое соединение с браузером — именно то, что нужно для такого случая.
Эта возможность почему-то практически неизвестна широкой публике, поэтому появился этот пост.

image

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

Вы неправильно пишете животных

Время на прочтение5 мин
Количество просмотров372K
Животные – это платформы с очень ограниченной памятью, вычислительными способностями и возможностями модификаций. Разработчикам энимал-сцены приходится выдавать практически гениальные низкоуровневые алгоритмы. Правда, большое количество хардкода вызывает характерные проблемы с отсутствием проверки в экзотических условиях. Та же фильтрация входных данных делается очень и очень криво.


Уязвимость рекурсивных алгоритмов навигации муравья: спираль смерти

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

Но пойдём далее. Я не знаю, кто разрабатывал архитектуру ящериц, но они бегают в одном процессе, а дышат в другом. При этом платформа не поддерживает многозадачность, поэтому костыль с максимальной длиной бега в 4-6 секунд просто эпичен.
Читать дальше →
Всего голосов 442: ↑438 и ↓4+434
Комментарии352

Используем Apple Pay и карту Тройка в качестве пропуска на работу

Время на прочтение16 мин
Количество просмотров107K
Используем Apple Pay, Android Pay, Mastercard Paypass, Visa PayWave и карту Тройка в качестве пропуска на работу

TL;DR В статье описывается процесс создания системы контроля доступа (СКУД), в которой в качестве идентификатора могут использоваться карты Тройка, любые бесконтактные банковские карты EMV, а также телефоны с Apple Pay и Android Pay. Управление системой происходит через Telegram-бота.

Основные задачи системы


  • Избавиться от лишних карт — в качестве идентификатора используется то, что уже есть у пользователя: транспортная карта, телефон или банковская карта. Какой идентификатор использовать — каждый выбирает сам. Система работает со всеми типами идентификаторов одновременно.
  • Избавиться от бюро пропусков и сложных программ управления — нам надоело выдавать и забирать карты у пользователей, держать отдельные компьютеры для управления пропусками, изучать переусложненные программы.
  • Управление через Telegram — заведение и удаления пользователей происходит удаленно и не требует компьютера.
Всего голосов 118: ↑118 и ↓0+118
Комментарии164

Менеджерам пора проснуться

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

«Разве у тебя нет цикла, который можно написать?»

Самая популярная моя статья называется «Почему ваш программист просто хочет кодировать». К настоящему моменту её прочитали более 62 000 раз.

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

К сожалению, я не получил почти никакого отклика от менеджеров или руководителей по поводу этой истории.


Похоже, кто-то не понял суть, так что я скажу прямо.

Технические менеджеры, такие ситуации — это ваша вина


Вы несёте ответственность за немотивированных программистов, которые «просто хотят кодировать» и которых, похоже, волнуют только модные новые технологии.
Читать дальше →
Всего голосов 67: ↑62 и ↓5+57
Комментарии119

Как наконец выпустить свою первую игру

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

Есть такая вероятность, что в этом году вы наконец-то решили сделать собственную игру. Отличная цель! И она определённо того стоит!

Вы уже наверно много раз слышали один и тот же совет от сотен других людей: делайте игру простой. В своей замечательной статье Эдмунд Макмиллен писал «если вы новичок, то начинайте с малого, а потом сделайте игру ещё меньше». В столь же хорошем посте ему вторит Томми Рефенес: «Просто сделайте свою игру так, как можете, начинайте с малого, а об остальном думайте потом».

На канале Extra credits есть хорошее видео о том, что же значит «маленькая игра».

Но «простой» — это не стандартная единица изменения. Если вы никогда до этого не делали игр, то откуда вам знать, насколько проста или легка игра? Означает ли «простая» MMO ВСЕГО с тремя играбельными классами? Лёгкая игра — это открытый мир всего с двумя типами биомов и тремя деревьями технологий?

Я понимаю вашу растерянность.

В целом я выпустил пять игр и перед началом разработки трёх из них я думал, что они будут «простыми». Во всех трёх случаях я ошибался. На завершение первой готовой игры мне понадобилось больше полутора лет. Это было не «просто».

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

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

Хорошая новость заключается в том, что вы можете создать интересную игру, при этом не попадаясь во все эти мешающие разработке ловушки.
Всего голосов 37: ↑35 и ↓2+33
Комментарии35

Как создаются изометрические миры

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

Все мы играли в потрясающие изометрические игры, будь то первые Diablo, Age of Empires или Commandos. При первой встрече с изометрической игрой можно задаться вопросом: двухмерная она, трёхмерная или нечто совершенно другое. Сам мир изометрических игр обладает волшебной притягательностью для разработчиков. Давайте попробуем раскрыть тайну изометрической проекции и создадим простой изометрический уровень.

Для этого я решил использовать Phaser с кодом на JS. В результате у нас получится интерактивное приложение HTML5.

Учтите, что это не туториал по разработке на Phaser, мы просто используем его для удобного ознакомления с базовыми концепциями создания изометрической сцены. Кроме того, в Phaser есть простые способы создания изометрического контента, например, Phaser Isometric Plugin.

Для упрощения при создании сцены мы будем использовать тайлы.
Всего голосов 49: ↑49 и ↓0+49
Комментарии7

Я презираю Arduino

Время на прочтение5 мин
Количество просмотров393K
Я – выпускник специальности «Микроэлектроника и полупроводниковые устройства». За годы обучения я разработал множество устройств на микроконтроллерах, участвовал в конкурсах вместе со своей командой и являлся заведующим лабораторией встраиваемых систем. У меня есть мечта – создать в своей стране условия для разработки роботизированных систем и есть план её достижения, одним из пунктов которого является участие в подготовке большого количества профессионалов в этой области.
Arduino


Я радуюсь, когда будущие инженеры создают свои устройства и расстраиваюсь, когда слышу, как кто-то говорит об использовании Arduino в них.

Это не первая моя статья на эту тему: у меня возникает желание написать такую сразу после прочтения фразы о безграничных возможностях платформы в DIY-топике на Хабре. У меня возникает желание написать об истинной цене деталей после прочтения статьи о покупке конструктора за $200 почти ничего не содержащего (уж простите, запамятовал где видел).

Читать дальше →
Всего голосов 456: ↑366 и ↓90+276
Комментарии516

Как ошибка невозвратных затрат может разорить разработчика игр

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

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

Но что, если вы не хотите признавать, что функцию или проект нужно менять или даже отказаться от них полностью?

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

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

Экономисты называют это ошибкой невозвратных затрат или ошибкой «Конкорда» (в память о разработке сверхзвукового пассажирского самолёта «Конкорд»). Это иррациональное усиление, при котором человеку кажется, что он вложил очень много денег/времени/энергии в работу и её прекращение окажется пустой тратой ресурсов. Однако в реальности решение продолжать не должно быть никак связано с предыдущими тратами; самое важное — это понять, оправдают ли себя дополнительные усилия.
Всего голосов 30: ↑30 и ↓0+30
Комментарии16

Две правды, одна ложь: популярные концепции о «выдающихся программистах»

Время на прочтение6 мин
Количество просмотров31K
Кент Бек (Kent Beck), легендарный разработчик ПО, создатель методологий экстремального программирования и test-driven development и автор многих книг по программированию, однажды сказал: «Я не великий программист, я просто хороший программист с замечательными привычками». Какими привычками и способностями обладают «рок-звезды» программирования?

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

Читать дальше →
Всего голосов 28: ↑22 и ↓6+16
Комментарии41

Must-have документация для мобильного разработчика. Часть 1

Время на прочтение9 мин
Количество просмотров33K
Во время разработки приложений необходимо учитывать интересы сразу нескольких групп участников: заказчики (бизнес), проектировщики, тестировщики, разработчики и дизайнеры. Однако документация обычно готовится только для заказчиков, а про разработчиков и тестировщиков почему-то постоянно забывают. В нашей первой статье мы расскажем о том, как можно самостоятельно подготовить необходимый комплект документации, утереть нос проектировщикам и получить документацию, которая будет соответствовать коду, а не абстрактным бизнес-фичам.


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

Android архитектура клиент-серверного приложения

Время на прочтение13 мин
Количество просмотров105K
Клиент-серверные приложения являются самыми распространенными и в то же время самыми сложными в разработке. Проблемы возникают на любом этапе, от выбора средств для выполнения запросов до методов кэширования результата. Если вы хотите узнать, как можно грамотно организовать сложную архитектуру, которая обеспечит стабильную работу вашего приложения, прошу под кат.


Читать дальше →
Всего голосов 30: ↑27 и ↓3+24
Комментарии36

Введение в RxJava: Ключевые типы

Время на прочтение7 мин
Количество просмотров136K
rxjava
В вводной статье мы рассмотрели преимущества реактивного подхода в программировании на Java, а также ситуации в которых библиотека Rx бывает более или менее полезной. В этой части мы рассмотрим основные типы, на которых базируется концепция реактивного программирования и несколько дополнительных классов, которые помогут нам в понимании принципов работы библиотеки.
Читать дальше →
Всего голосов 17: ↑14 и ↓3+11
Комментарии0

Вашим пользователям не нужны пароли

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

Rusty lock


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


Но давайте подумаем, возможно, вашим пользователям не нужны пароли.


Одно из возможных решений, это использовать OAuth 2.0, но не у всех пользователей может быть аккаунт в социальной сети и желание его использовать на вашем ресурсе.


Но как-же тогда избавиться от пароля? На этот вопрос, я и попробую ответить в статье.

Читать дальше →
Всего голосов 92: ↑73 и ↓19+54
Комментарии500
1
23 ...

Информация

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