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

Переводчик-фрилансер

Мир на геодезической сфере: алгоритмы игры Planet

Время на прочтение 6 мин
Количество просмотров 3K
Работа с 3D-графикой *Разработка игр *Игры и игровые консоли
Перевод
Я уже больше года не писал статей с анализом процедурной генерации в играх. Сегодня мы изучим Planet — игру 2016 года с уютным дизайном, созданную одним из моих любимых разработчиков, Оскаром Сталбергом.


Другие скриншоты



Planet — наполовину технологическое демо, наполовину игра, в итоге создающая настоящую магию. Не так уж просто разобраться, как она работает, однако, к счастью, мне удалось узнать основные подробности из постов в Twitter и статей самого Оскара.
Читать дальше →
Всего голосов 30: ↑30 и ↓0 +30
Комментарии 2

Если тебя взломали, то ты не бот

Время на прочтение 4 мин
Количество просмотров 1.7K
Информационная безопасность *Платежные системы *
Перевод

Меня всегда потрясает, насколько творчески люди могут использовать утечки данных. Разумеется, есть много вредного (фишинг, хищение личных данных, спам), но часто данные, незаконно полученные из чужой системы, применяют удивительно положительным образом. Когда я создавал Have I Been Pwned (HIBP), моя мантра звучала так: «делай хорошее после того, как случилось плохое». И сервис делал именно это: позволял людям и организациям узнавать о том, что они подверглись утечкам. Однако применять сервис можно гораздо шире, и об одном из способов я давно хотел написать после того, как услышал о нём от первого лица. Пока я просто назову этот подход «Взломан или бот» и обрисую картину на примере другой проблемы: снайпинга.
Читать дальше →
Всего голосов 14: ↑13 и ↓1 +12
Комментарии 4

Объяснение терминологии Arm: Arm ARM, Armv9, ARM9, ARM64, Aarch64, A64, A78…

Время на прочтение 6 мин
Количество просмотров 9K
Компьютерное железо Процессоры
Перевод

Если вы новичок в экосистеме Arm, то считайте это кратким введением в терминологию, которую вы могли видеть раньше, но понимаете не до конца.

Архитектура Arm — это семейство архитектур с набором упрощённых команд (Reduced Instruction Set Architecture, RISC) с режимами простой адресации. Обработка данных выполняется над регистровыми операндами, в противном случае используются загрузки и сохранения для перемещения данных в регистры и из них.

Arm Limited — это британская компания, занимающаяся разработкой и поддержкой архитектуры Arm.

ARM — это устаревшая аббревиатура Acorn RISC Machine, а позже — Advanced RISC Machines. Как мы увидим ниже, в случае развития архитектуры предыдущую терминологию иногда переименовывают.
Читать дальше →
Всего голосов 32: ↑32 и ↓0 +32
Комментарии 6

Процедурная генерация 3D-мешей для интро на 64 КБ

Время на прочтение 7 мин
Количество просмотров 3.2K
Программирование *C++ *Assembler *Работа с 3D-графикой *Демосцена
Перевод

В предыдущей статье [перевод на Хабре] мы рассказали, как генерируются текстуры в демо H – Immersion. На этот раз мы изучим ещё один важный инструмент для создания демо нужного размера — процедурную геометрию.

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

Руны и лёд: техническое собеседование по TypeScript

Время на прочтение 6 мин
Количество просмотров 9.6K
Ненормальное программирование *JavaScript *Программирование *TypeScript *
Перевод

Крисс проводит тебя в комнату для совещаний.

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

«Как дела?», — спрашивает он.

Сложный вопрос для начала беседы, придётся объяснять внутренний механизм, приводящий в движение твои действия. Возможно, он риторический?

«Действительно, как?», — улыбаешься ты.

«… хм, отлично. Ну, приступим?»

Ты утвердительно киваешь.

«Хорошо. Мы займёмся небольшой программной головоломкой, чтобы я понял, как ты умеешь решать задачи. Не волнуйся, если не получится сделать это упражнение, мне главное понять, как ты мыслишь и общаешься».

Волноваться? Ты с трудом вспоминаешь это ощущение. Возможно, оно осталось в твоей юности, когда ты зимовал на Свальбарде* с медведями. Ещё до того, как ты понял сейд.
Читать дальше →
Всего голосов 48: ↑47 и ↓1 +46
Комментарии 14

Изучаем чёрный рынок фальшивых звёзд GitHub

Уровень сложности Простой
Время на прочтение 11 мин
Количество просмотров 8.7K
Open source *Git *GitHub *Карьера в IT-индустрии
Обзор
Перевод

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

Если вам неинтересна история, то можете сразу перейти к коду в конце статьи.

А если вам понравилась статья, перейдите в репозиторий Dagster и поставьте нам реальную звезду GitHub!
Читать дальше →
Всего голосов 31: ↑31 и ↓0 +31
Комментарии 5

Может ли GPT-4 на самом деле писать код?

Уровень сложности Простой
Время на прочтение 17 мин
Количество просмотров 44K
Программирование *Разработка игр *Машинное обучение *Искусственный интеллект
Аналитика
Перевод

С момента выпуска ChatGPT я видел достаточно много статей о его способности писать код. Люди рассказывали о том, как они попросили его спроектировать и реализовать головоломку с числами (не зная, что «изобретённая» им игра уже существует) и как бот клонировал Pong; и даже я сам использовал его для создания нескольких простых вспомогательных скриптов на Python. Это очень мощный и довольно полезный инструмент.

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

Поэтому я решил протестировать бота на особенно сложной «алгоритмической» задаче, которую решил пару лет назад. Я выбрал нечто мелкое и изолированное, чтобы уместить в промпт ChatGPT, но с достаточным количеством тонких моментов, чтобы он, по моему мнению, испытал бы проблемы с реализацией.
Читать дальше →
Всего голосов 58: ↑55 и ↓3 +52
Комментарии 32

Стохастический язык программирования на основе алгоритмов Маркова

Время на прочтение 13 мин
Количество просмотров 18K
Ненормальное программирование *Программирование *Математика *
Перевод

MarkovJunior — это вероятностный язык программирования, в котором программы являются сочетаниями правил перезаписи, а инференс выполняется при помощи распространения ограничений. MarkovJunior назван в честь математика Андрея Андреевича Маркова, придумавшего и исследовавшего то, что сейчас называется алгоритмами Маркова.
Читать дальше →
Всего голосов 136: ↑136 и ↓0 +136
Комментарии 24

Как Discord хранит триллионы сообщений

Уровень сложности Простой
Время на прочтение 10 мин
Количество просмотров 21K
Мессенджеры *Администрирование баз данных *Rust *Хранение данных *
Обзор
Перевод

В 2017 году мы написали пост о том, как храним миллиарды сообщений [перевод на Хабре]. В нём мы рассказали о том, как начали с использования MongoDB, но потом выполнили миграцию данных в Cassandra, потому что искали надёжную, устойчивую к сбоям базу данных, имеющую относительно низкую стоимость обслуживания. Мы знали, что будем расти, так и произошло!

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

Спустя почти шесть лет мы многое изменили; изменился и способ хранения сообщений.
Читать дальше →
Всего голосов 39: ↑37 и ↓2 +35
Комментарии 12

Пишем игру от первого лица в 2КБ на Rust

Уровень сложности Средний
Время на прочтение 21 мин
Количество просмотров 9.9K
Разработка игр *Алгоритмы *Математика *Rust *
Туториал
Перевод

Введение


Поначалу кажется, что создать игру от первого лица без движка или графического API практические невозможно. В этом посте я расскажу, как это сделать при помощи алгоритма под названием ray casting.

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

Для начала разберёмся, как работает алгоритм, а затем построчно напишем его. Затем мы пересмотрим код, добавим несколько возможностей и оптимизируем его размер. Я постарался сделать пост максимально доступным и дружелюбным, но вам поможет приличное знание программирования, Rust и основ геометрии.
Читать дальше →
Всего голосов 78: ↑77 и ↓1 +76
Комментарии 10

Мы обнаружили в GPT-2 нейрон конкретного токена

Время на прочтение 10 мин
Количество просмотров 14K
Математика *Машинное обучение *Искусственный интеллект
Перевод

Мы начали с вопроса: откуда GPT-2 знает, когда использовать слово an, а не a? Выбор зависит от того, начинается ли следующее за ним слово с гласной, однако GPT-2 может прогнозировать только одно слово за раз.

У нас по-прежнему нет полного ответа, однако мы нашли нейрон MLP в GPT-2 Large, который необходим для прогнозирования токена " an". Также мы выяснили, что веса этого нейрона соотносятся с эмбеддингом токена " an", что позволило нам найти другие нейроны, прогнозирующие конкретный токен.
Читать дальше →
Всего голосов 31: ↑30 и ↓1 +29
Комментарии 6

Неожиданная эффективность условных вероятностей

Время на прочтение 11 мин
Количество просмотров 6K
Алгоритмы *Математика *Научно-популярное
Перевод

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

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

Математика самонаводящихся ракет из аниме

Время на прочтение 4 мин
Количество просмотров 15K
Разработка игр *Алгоритмы *Математика *Unity *
Перевод

Я создал прототип ракетной атаки! Для этого понадобилась хитрая математика, о которой будет рассказано в этой статье.

Мы поговорим о кубических кривых Безье, шуме Перлина и rotation minimizing frames.
Читать дальше →
Всего голосов 77: ↑76 и ↓1 +75
Комментарии 11

Пишем расширение Chrome, которое ворует вообще всё

Время на прочтение 10 мин
Количество просмотров 17K
Информационная безопасность *Google Chrome Расширения для браузеров Браузеры
Туториал
Перевод

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

Мы добьёмся двух целей:

  • Исследуем грани возможного для расширений Chrome
  • Продемонстрируем, что вы подвержены опасности, если не будете аккуратны с тем, что устанавливаете.

Примечание: на самом деле реализация этого расширения — злодейство. Вам не следует использовать в злонамеренных целях полномочия расширений, красть пользовательские данные и создавать зловредные браузерные расширения. Любые реализации, производные расширения или применение этих техник без разрешения Национальной баскетбольной ассоциации не рекомендуются.
Читать дальше →
Всего голосов 41: ↑39 и ↓2 +37
Комментарии 12

Пишем GPT в 60 строк NumPy (окончание, 2/2)

Уровень сложности Средний
Время на прочтение 15 мин
Количество просмотров 8.3K
Python *Алгоритмы *Математика *Машинное обучение *Искусственный интеллект
Туториал
Перевод
image

В первой части поста мы начали реализацию с нуля GPT всего в 60 строках numpy.

Во завершающей части мы загрузим в нашу реализацию опубликованные OpenAI веса обученной модели GPT-2 и сгенерируем текст.
Читать дальше →
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 5

Пишем GPT в 60 строк NumPy (часть 1 из 2)

Уровень сложности Средний
Время на прочтение 16 мин
Количество просмотров 52K
Python *Алгоритмы *Математика *Машинное обучение *Искусственный интеллект
Туториал
Перевод

В этом посте мы начнём реализацию с нуля GPT всего в 60 строках numpy. Во второй части статьи мы загрузим в нашу реализацию опубликованные OpenAI веса обученной модели GPT-2 и сгенерируем текст.
Читать дальше →
Всего голосов 96: ↑94 и ↓2 +92
Комментарии 32

Моделируем 3D-персонажа для игры при помощи Midjourney

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 16K
Работа с 3D-графикой *Разработка игр *Графический дизайн *Дизайн игр *
Обзор
Перевод
image

На примере любопытного небольшого прототипа я захотел проверить, сколько труда потребуется при использовании ИИ для создания максимально возможного количества графики 2,5D-игры в жанре point and click.

Было понятно, что искусственный интеллект без проблем справится с задниками, поскольку игра, фактически, остаётся по большей мере в 2D, но с персонажами ситуация чуть более сложная. Мне понадобится крайне быстрый конвейер работы, позволяющий использовать данные захвата движения, поэтому создание анимаций не окажется узким местом. Я должен был найти способ перенести сгенерированную ИИ графику в форму, которая приемлема для захвата движения.

Мне показалось, что лучше всего будет сгенерировать концепты персонажей при помощи ИИ, а затем смоделировать их в 3D.

Я работаю в игровой индустрии уже более двадцати лет, и в основном занимаюсь моделированием персонажей и фонов. Поэтому будет интересно проверить, позволит ли ИИ мне работать быстрее. И насколько?
Читать дальше →
Всего голосов 43: ↑43 и ↓0 +43
Комментарии 16

Поднимаем зомби: перехват контроля над мёртвым IoT-производителем

Уровень сложности Простой
Время на прочтение 12 мин
Количество просмотров 10K
Реверс-инжиниринг *Производство и разработка электроники *Интернет вещей
Перевод

В 2017 году появилась компания NYCTrainSign, которая изготавливала реплики таймеров обратного отсчёта, показывающие, сколько осталось до прибытия следующего поезда Нью-Йоркского метро.


Однако этот таймер не вешался на потолок, а ставился на стол в качестве стильного украшения дома.

Человек, отвечавший за маркетинг, успешно смог привлечь интерес к проекту. Помню множество постов в Facebook* и Instagram*, демонстрирующих потенциальную пользу вывески для кафе и пиццерий, посетители которых могли видеть, когда им нужно выходить, чтобы попасть на поезд.

Однако под флёром Instagram* скрывались посредственные технические решения и недопустимо высокие затраты на производство. [* Запрещены в России.]

В начале 2018 года компания перестала отвечать под постами в соцсетях, а приобретённые таблички получили очень немногие покупатели. Компания порекомендовала покупателям оспорить платёж, чтобы попробовать вернуть свои деньги.
Читать дальше →
Всего голосов 34: ↑34 и ↓0 +34
Комментарии 10

Что может быть проще (сложнее), чем упорядочивание чисел?

Время на прочтение 9 мин
Количество просмотров 6K
Программирование *Алгоритмы *Математика *Rust *
Перевод

Предположим, вы программист и у вас есть два числа. Вы хотите узнать, какое из чисел больше. Если оба числа имеют одинаковый тип, то почти в любом языке программирования решение будет тривиальным. Для этой операции обычно даже есть специальный оператор <=. Вот пример на Python:

>>> "120" <= "1132"
False

Сравнение двух чисел на Brainfuck оставим в качестве упражнения для читателя.

Ой. Ну, строго говоря, это строки, а не числа, а строки обычно сортируются лексикографически. Но это всё-таки числа, хотя и представленные в виде строк. Это может показаться глупым, но такая проблема очень распространена в интерфейсах пользователя, например, в списках файлов. Именно поэтому нужно отбивать числовые имена файлов нулями (frame-00001.png) или использовать описания, сохраняющие лексикографический порядок, например, ISO 8601 для дат.

Впрочем, я отклонился от темы. Предположим, числа действительно представлены числовыми типами. Тогда всё просто и <= отлично работает:

>>> 120 <= 1132
True

Но так ли это?
Читать дальше →
Всего голосов 27: ↑26 и ↓1 +25
Комментарии 21

Почему запись от руки остаётся лучшим способом запоминания информации

Время на прочтение 6 мин
Количество просмотров 15K
Учебный процесс в IT Научно-популярное Мозг
Перевод

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

Рукописные заметки дали бы мне множество осязаемых ресурсов, которые помогли бы найти критически важную отсутствующую информацию: более свежие воспоминания о митинге, пробелы в подробностях обсуждения да и простое чтение записей с бумаги помогло бы мне лучше вспомнить события. Подробные печатные заметки не помогают запоминать и удерживать информацию на совещаниях так же, как это могли бы сделать рукописные заметки, хотя всё равно были бы полезны.
Читать дальше →
Всего голосов 16: ↑14 и ↓2 +12
Комментарии 28

Информация

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