Обновить
256K+
2042

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

162,4
Рейтинг
3 643
Подписчики
Отправить сообщение

История браузеров в игровых консолях

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

Видеоигровые консоли и веб-браузеры имеют долгую совместную историю. Ещё с самого появления World Wide Web консоли пытались выйти онлайн. Браузеры в видеоигровых консолях изначально в основном были попытками предоставить дешёвое окно в веб для обычной аудитории без технического опыта, однако со временем они становились всё более масштабными и интегральными частями систем.

В этой статье мы подробно изучим браузеры консолей, однако рассмотрим только официальные веб-браузеры. Во многие консоли можно установить браузеры через специализированные прошивки и homebrew, но они не войдут в рамки нашей статьи, как и системы без веба наподобие Satellaview, а также онлайн-сервисы, не предоставляющие браузер, например, XBAND, Sega Meganet и Sega Channel.

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

Читать далее

Doom можно запустить на чём угодно… кроме Neo Geo

Время на прочтение9 мин
Охват и читатели15K

Считается, что порт Doom можно запустить на любом технологическом устройстве. У игры изящный, быстрый, модульный код, который может работать практические везде. Порты выпустили даже для систем, появившихся до Doom, а некоторым портам помогает специальное оборудование как, например, в случае первого Doom на SNES. Чистый и изящный код написан на C, в нём не так сложно разобраться. В нём не используются никакие современные дополнения языка и какие-то устаревшие технологии, поэтому он замечательно компилируется. Кроме того, он удобен для разных endiannes, что очень важно для портируемости.

Поэтому неожиданно, что порт Doom так и не появился на Neo Geo. В конце концов, в Neo Geo работает тот же CPU Motorola 68000, что и в Sega Genesis с Commodore Amiga, а для обеих этих платформ, несмотря на их слабые характеристики, есть версии Doom. Для Neo Geo же её найти невозможно. Многие разработчики, работавшие с Neo Geo, часто говорили, что на ней практически невозможно запустить Doom. Но почему? У этой консоли есть видеодисплей, CPU, ОЗУ и всё необходимое для запуска видеоигр. Давайте же разберёмся.

Читать далее

Опасности первичных ключей UUID в SQLite и оптимизация данных

Время на прочтение6 мин
Охват и читатели7.2K

В базах данных в качестве первичных ключей часто используют случайные UUID. Один из известных недостатков случайных UUID заключается в том, что их неупорядоченность (UUID4) может вызывать большое количество дополнительных обращений к страницам кластеризованных индексов (clustered index), потому что строки вставляются в случайные места B-дерева, и его приходится постоянно перебалансировать. В этой статье я попытаюсь помочь вам выработать более интуитивное понимание того, как влияют на производительность все эти дополнительные операции со страницами.

Хотя статья посвящена конкретно SQLite, проблема случайных UUID касается и других баз данных, использующих кластеризованные индексы.

Читать далее

Охота за багом: почему для прохождения Pizza Tycoon достаточно одного Парижа

Время на прочтение6 мин
Охват и читатели10K

В новом релизе Pizza Legacy v0.1.0 появилась возможность выиграть игру, как в оригинале.

Когда я играл в Pizza Tycoon (1994 год) в детстве, то не особо задавался вопросом, как победить. Мне просто нравилось открывать рестораны и придумывать пиццы, а также приторговывать оружием для финансирования роста моей империи пиццы. Но выигрыш? Я никогда до него не доходил и, вероятно, даже не задумывался о нём.

Когда я принялся за проект воссоздания этой игры, то начал изучать файлы данных Pizza Tycoon, обнаружив графический файл ENDE.VGA и текстовый файл ENDE.E, сообщающий нам, что происходит в случае выигрыша:

Первая строка ENDE.E:

Вы достигли немыслимого! Вы — король всего западного рынка фастфуда! Вы — тот самый, МАГНАТ ПИЦЦЫ.

Это даёт нам понять, что игру как-то можно выиграть, но не как именно.

Я просто забыл об этом вопросе, ведь мне предстояло реализовать столь многое до того, прежде чем задумываться о победе игрока, но однажды наткнулся на пост «Я "выиграл" в Pizza Tycoon? (Как это произошло?)». После нахождения этого поста мне стало любопытно, но не настолько любопытно, чтобы заниматься расследованием, поэтому я поискал условия конца игры в ассемблерном коде и попросил Claude проанализировать их. Он сказал следующее:

end_of_week_processing раз в неделю проверяет, есть ли у текущего игрока >= доля рынка 5% во ВСЕХ 10 городах.

Это соответствует моим представлениям: логично с точки зрения геймплея и текста, найденного в ENDE.E. Однако это не соответствовало написанному пользователем Reddit: он утверждал, что у него были рестораны только в Париже и Берлине; возможно, он опустил какие-то подробности или у него просто был повреждённый файл сохранения? Я написал ему, но не получил ответа...

Читать далее

Хватит использовать Conventional Commits

Время на прочтение7 мин
Охват и читатели12K

Вы почти наверняка уже встречались с Conventional Commits. Их уродливые лица можно заметить в changelog опенсорсного проекта, которым вы пользовались. Возможно, это был обязательный формат коммитов опенсорсного проекта, в котором вы были контрибьютором. Многие люди безгранично им верят. Я им безгранично не верю.

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

Читать далее

Как RuneScape в 2004 году удавалось работать на 56k-соединении

Время на прочтение20 мин
Охват и читатели11K

В 2004 году я слишком много играл в RuneScape на модеме 56k, который разрывал соединение, когда мама поднимала трубку. 3D-мир, на сервере которого могло быть до тысячи игроков и десятки на экране одновременно... И всё это в браузере со скоростью 5 килобайт в секунду. Каким-то образом всё это работало. Давайте пошагово разберёмся, как же именно.

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

Методология

Подробности, приведённые в этом посте, взяты и декомпилированного клиента RuneScape 2 от 2004 года. Фрагменты кода — это приблизительная трансляция этого декомпилированного кода, местами подчищенная для удобочитаемости, но с сохранением логики.

Базовые принципы различаются между разными версиями, но большинство из них остаётся неизменным от самой RuneScape Classic (2001 год) до современной RuneScape 3 и, разумеется, до Old School RuneScape.

Если вы играли в RuneScape в начале 2000-х и у вас всё ещё есть жёсткие диски из той эпохи, то советую заглянуть в RuneScape Archive Project. Его авторы проделали отличную работу по каталогизации исторических версий RuneScape, которые в противном случае были бы утеряны, и им важен каждый вклад.

Читать далее

Атомарный кислород на орбите медленно поедает МКС

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели21K

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

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

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

Читать далее

Искусство создания дорог в играх

Время на прочтение17 мин
Охват и читатели23K

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

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

Люди тоже их создают. Для меня один из самых удивительных паттернов, которые мы придумали — это дороги.

Иногда я представляю инопланетян из далёких галактик, которые откроют Землю уже спустя много времени после нашего ухода. Леса, снова занятые природой, города, превратившиеся в развалины; однако между ними всё равно заметен слабый паттерн — сеть дорог. Мне нравится думать, что они будут чувствовать то же самое, что и я, когда смотрю на природные паттерны: «Ого, кто-то действительно это продумал».

Градостроительные симуляторы и их дороги

Должен сказать, что дороги восхищали меня с детства.

До сих пор помню, как в возрасте шести-семи лет впервые играл в SimCity 2000. Я понял не особо многое и не знал, что такое зонирование, налоги и спрос. Но дороги сразу меня восхитили.

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

Развязки. Перекрёстки с круговым движением. Эстакады. Сужения полос. Замечал каждую мелочь.

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

Читать далее

Порт классической программы 3D Movie Maker для Linux

Время на прочтение9 мин
Охват и читатели12K

А вы знали, что теперь можно нативно запускать Microsoft 3D Movie Maker в Linux? В течение последних полутора лет я работал над 3DMMEx — моим портом исходников 3D Movie Maker. Одной из целей моего форка была портируемость. Недавно проект достиг важного этапа: теперь он компилируется и запускается в Linux, благодаря чему 3DMMEx стал первым из известных форков 3D Movie Maker, работающих вне Windows! В этом посте я расскажу о некоторых из трудностей, с которыми я столкнулся при портировании на новую платформу написанного тридцать лет назад мультимедийного приложения.

Читать далее

Миллион долларов, заработанный в студенческом общежитии

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели16K

За свои первые каникулы в колледже, вдохновившись Satisfaction75, я создал устройство, которое назвал Dissatisfaction65 — беспроводную клавиатуру формата 65%. Не помню, почему конкретно, но, изготовив несколько проводных клавиатур, мне хотелось попробовать собрать самодельную беспроводную. Для реализации беспроводной связи я выбрал микроконтроллер Adafruit 32u4 Bluefruit LE, потому что опенсорсная клавиатурная прошивка QMK поддерживала Bluetooth конкретно с этой платой. Получившееся устройство выглядело прекрасно, но производительность была чудовищной. Из-за задержек при вводе пользоваться им было почти невозможно, и несмотря на огромный аккумулятор, работало оно от него всего несколько дней.

У компаний наподобие Logitech и Apple есть беспроводные клавиатуры с низкими задержками и долгой работой от аккумуляторов, поэтому я понимал, что это не предел. На следующие два месяца я погрузился в мир беспроводных микроконтроллеров и самодельных клавиатур. Почти сразу же я понял, что любители выбирают микрочипы Nordic, а правит в этом мире формат Pro Micro. В процессе исследований я обнаружил три микроконтроллера, разработчики которых пытались связать эти две технологии: BlueMicro, nRFMicro и BLE-Micro-Pro1.

Из-за форм-фактора BlueMicro я бы не смог изготовить большинство клавиатур Pro Micro, потому что они бы мешали друг другу. BLE-Micro-Pro был довольно дорогим, закрытым и продавался только в Японии. Ближе всего оказался nRFMicro. Сначала я решил модифицировать под свои нужды nRFMicro, но вскоре осознал, что мои цели слишком амбициозны, поэтому начал с нуля.

Читать далее

Как работает размытие в видеоиграх

Уровень сложностиСредний
Время на прочтение51 мин
Охват и читатели12K

Размытие — базовый строительный блок множества эффектов постобработки в видеоиграх, без него не обходятся красивые современные GUI. Оно используется в эффектах Depth of Field, Bloom или панелях с эффектом матового стекла современных пользовательских интерфейсов.

Эффект Bloom — один из множества способов применения алгоритмов размытия

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

В оригинале статьи техники размытия реализованы в реальном времени благодаря использованию GPU и возможностям WebGL браузера.

Читать далее

Возрождение классической игры для Unix: 20-летний процесс археологии ПО

Время на прочтение7 мин
Охват и читатели11K

Открытие: цифровая капсула времени из 1987 года

Представьте: на дворе 26 октября 1987 года. Ещё стоит берлинская стена, World Wide Web состоит из одного текста, а ПО распространяется через новостные группы USENET в текстовых файлах, разбитых на несколько постов. В этот день Эдвард Барлоу опубликовал на comp.sources.games нечто особенное:

«conquest – многопользовательская игра в средиземье, Part01/05»

Так Эд Барлоу впервые объявил о ней, но вскоре поменял название на Conquer.

Это была Conquer — сложная многопользовательская стратегия, повлиявшая на бесчисленное количество других. Игроки брали под своё командование народы Средиземья, управляли ресурсами, армиями, системами магии и дипломатическими отношениями. Примечательной игру делал не только геймплей, но и то, что она была создана и распространялась в эпоху, когда ещё даже не придумали понятие «open source».

Читать далее

Один простой механизм управляет практически всем в игре Cities: Skylines

Время на прочтение16 мин
Охват и читатели18K

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

Читать далее

Почему японские компании занимаются всем подряд

Уровень сложностиПростой
Время на прочтение20 мин
Охват и читатели13K

Возьмём для примера Toto.

Если вы проводите много времени в американских общественных туалетах или вы просто их особо внимательный завсегдатай, то могли заметить унитазы Toto: они отличаются запоминающимся логотипом с засечками «TOTO». Унитазы Toto не доминируют в туалетах США, потому что имеют сильных конкурентов в лице местных туалетных лидеров American Standard и Kohler; впрочем дела Toto идут всё лучше с повышением популярности у американцев биде; в глобальном же масштабе Toto — один из крупнейших в мире производителей унитазов и биде. А у себя на родине, в Японии, Toto можно найти практически повсюду: в 80% японских домов установлен биде-унитаз Toto.

Если вы давний акционер Toto, например инвестор, особо интересующийся туалетной утварью, то этот год был для вас невероятно прибыльным. На текущий момент акции Toto поднялись с начала года на 60%; всего за несколько последних недель они выросли на 30%. Дела у Toto лучше некуда: её чистая прибыль за первый квартал 2026 года выросла на 230% по сравнению с тем же периодом прошлого года.

Однако успешность года для Toto в основном определяется не унитазами и биде. Да, Toto основали в 1910-х с миссией «обеспечения здорового и цивилизованного образа жизни» посредством доступных унитазов, и за последующие десятилетия она стала мировым лидером на туалетном рынке. Но Toto занимается и кучей других вещей. Toto изготавливает не только биде и унитазы, но и плитку для ванных, готовые модули туалетов, раковины, модульные кухни, фотокаталитические покрытия для зданий и оборудование для помощи пожилым людям. И, что самое важное, Toto имеет очень прибыльный побочный бизнес — производство чипов памяти.

В когда-то скромном уголке компании, называющемся «подразделением передовой керамики», она с 1988 года производит специализированный компонент — электростатический держатель (electrostatic chuck, или e-chuck). E-chuck — это высокоточная керамическая пластина размером примерно с автомобильный руль, которая при помощи электростатической силы обеспечивает идеально плоское расположение и тепловую стабильность кремниевой пластины, пока на ней выполняется плазменное травление чипов памяти. Изготавливать такие компоненты крайне сложно, потому что керамический корпус не должен генерировать практически никаких частиц и быть отполирован до субмикронной гладкости; поэтому только несколько компаний в мире способны изготавливать e-chuck, обеспечивая стабильное качество. Почти все они — Shinko Electric, NGK, Toto, Kyocera, Sumitomo Osaka Cement, Niterra — расположены в Японии.

Бóльшую часть своей истории прибыль подразделения передовой керамики в балансовой ведомости Toto было сравнимо с погрешностью округления: как и в 1910-х, деньги компании приносил бизнес унитазов и биде. Но настала новая эра. Произошёл взрывной спрос на ИИ, а значит, и на широкополосную память, требуемую для дата-центров. Это привело к взрывному спросу на чипы памяти, а значит, и на e-chuck. Вот так подразделение передовой керамики Toto внезапно стало крупнейшим

Читать далее

Только 17% всех 64-битных целых чисел можно разложить на два 32-битных

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели8.8K

В разработке ПО произведение двух целых чисел часто вычисляется до фиксированного количества битов с переполнением. Возьмём для примера 8-битные целые. Если умножить 127 на 127, то мы получим число 1 в виде 8-битного беззнакового целого с переполнением. Реальное полное произведение равно 16129. Для представления 16129 обычно используются 16 бит точности.

Таким образом у нас появляется понятие полного произведения. Полное произведение двух 32-битных чисел обычно представляется при помощи 64 бит. У меня возник вопрос, какую долю всех 64-битных чисел можно записать, как произведение двух 32-битных целых.

Читать далее

Браузеры подстраиваются под большие сайты

Время на прочтение7 мин
Охват и читатели11K

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

Да, вы всё поняли верно. If site == X, do Y.

Особого обращения заслужили TikTok, Netflix, Instagram* и даже SeatGuru.

Так поступают Safari и Firefox. Но не Chrome.

И это говорит нам кое о чём любопытном.

Если вам любопытно, исходный код выложен на Github. Это буквально проверки доменов, встроенные в движки рендеринга браузеров и гласящие: «если пользователь находится на этом домене, рендери вот это иначе» или «если он на этом домене, обрабатывай этот вызов API по-другому». Это не баг, а фича, выпускаемая для миллиардов устройств.

Читать далее

Jira — тьюринг-полная

Время на прочтение3 мин
Охват и читатели8.6K

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

Читать далее

История IDE в Google

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

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

Контекст: я работал в Google в 2011 по 2024 год. Часть информации может быть приблизительной, и я буду дополнять её, если мне сообщат об ошибках. В этом посте речь пойдёт об основном монорепозитории Google (google3).

Фрагментированная экосистема

Как и во многих компаниях, в Google разработчики имели возможность самостоятельно выбирать IDE, и из-за этого возникла высокая степень фрагментированности. В 2011 году одним из самых опытных разработчиков-сениоров задали вопрос: «Можно ли как-то сделать так, чтобы все гуглеры пользовались одной хорошей IDE?». Если вкратце, они ответили «Нет». Джефф Дин ответил так:

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

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

Читать далее

Проектируем с нуля калькулятор на FPGA. Части 4 и 5: Фреймворк и оборудование

Время на прочтение11 мин
Охват и читатели10K

← Третья часть

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

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

Главный принцип этого фреймворка заключается в том, что единственный набор файлов исходников на Verilog можно без изменений использовать в различных средах сборки:

ModelSim для потактово точной симуляции HDL с волновым выводом

Verilator для быстрой симуляции на C++, с тестовой обвязкой (calctest) и другими инструментами

Десктопное приложение на Qt для интерактивной работы с интегрированным отладчиком на уровне исходников

Qt WebAssembly для запуска калькулятора в браузере с попиксельной точностью

Quartus для синтеза и записи на физическую плату FPGA

Каждое из окружений позволило выявлять свой класс багов. ModelSim отлавливает проблемы таймингов на уровне сигналов. Verilator обладает достаточной скоростью для проверки тысяч тестовых векторов. Симулятор на Qt позволяет удобно пользоваться интерактивной отладкой. WebAssembly доказывает работоспособность кода в совершенно иной среде исполнения, в которой видением приложения можно поделиться со всем миром. Целевая платформа FPGA, реальная плата — это то, что можно потрогать, окончательная реализация идеи.

Читать далее

Исходный код Jedi Academy переполнен яростными комментариями разработчиков

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

Недавно я вспомнил о игре Star Wars Jedi Knight: Jedi Academy, на которую подростком потратил больше десяти тысяч часов. Изучая материалы о ней, я наткнулся на любопытную историю.

Оказывается в 2013 году, сразу после покупки Lucasfilm компанией Disney и закрытия LucasArts, разработчики Raven Software запаниковали, что их работа будет навсегда положена под сукно, поэтому они в спешке выложили весь исходный код Jedi Outcast и Jedi Academy онлайн.

Этот дамп был таким внезапным, что они даже не подчистили внутренние комментарии разработчиков. Весь код превратился в капсулу времени, прочитав которую, можно узнать о том, как вымотанные программисты сходят с ума, пытаясь реализовать физику светового меча на движке Quake 3.

Заглянув в основной файл боёв (bg_saber.c), можно увидеть, что вся система схваток на световых мечах представляет собой огромную спагетти-конструкцию switch из пяти тысяч строк.

Я прошерстил кодовую базу и нашёл потрясающие комментарии...

Читать далее

Информация

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