В середине февраля 2026 года Валерий Залужный, ныне посол Украины в Великобритании, дал сразу два разоблачительных интервью — Associated Press и The Guardian. Впервые бывший главком публично рассказал о том, что происходило за кулисами власти в первые годы войны.
Картина вырисовывается чудовищная.
✓ Обыск в командном пункте Залужного в сентябре 2022 года, когда десятки сотрудников СБУ ворвались в помещение, где находились британские офицеры. Залужный тогда позвонил Ермаку и пригрозил ввести в Киев войска, если обыск не прекратят. ✓ Провал контрнаступления 2023 года — по словам генерала, Зеленский не дал сосредоточить силы в «единый кулак», размазав их по широкому фронту. ✓ Покушение весной 2023 года, когда после короткого звонка из офиса президента по укрытию Залужного был нанесён раетный удар — бывший командир 110-й бригады теробороны Александр Игнатьев прямо называет это «целенаправленной спецоперацией по нейтрализации».
Украинский политолог Константин Бондаренко назвал интервью Залужного «голубой меткой», которую Запад поставил Зеленскому. В пиратской традиции чёрная метка означает смерть, голубая — тоже ничего хорошего.
Но дело не только в Залужном.
19 февраля аудиторы Пентагона, Госдепартамента и USAID опубликовали адресованный конгрессу США доклад, в котором указали на факты коррупции среди ближайшего окружения Зеленского на сумму более 100 миллионов долларов. Схема вскрыта в «Энергоатоме» — государственной компании, производящей половину электроэнергии Украины и управляющей международной помощью по защите энергообъектов.
Под удар попали:
✓ Тимур Миндич, бывший бизнес-партнёр Зеленского (бежал из страны); ✓ Герман Галущенко, министр энергетики (арестован ВАКС 17 февраля с залогом 200 млн гривен); ✓ Денис Малюська, министр юстиции (уволен); ✓ Андрей Ермак, глава офиса президента (уволен).
ФБР и Минюст США консультировали НАБУ по этому делу. Американцы не просто наблюдают — они управляют процессом.
В Киеве запаниковали. Депутат Верховной рады Алексей Гончаренко рассказал, что журналисты AP перед публикацией обратились за комментариями в СБУ и офис президента. Те узнали о материале и начали «бомбить Залужного, чтобы он отозвал интервью». Генерал отказался.
Зеленский в ответном интервью Пирсу Моргану пожаловался на давление:
Я думаю, наши партнёры должны ответить на один вопрос: чего они хотят? Они действительно хотят выборов или они хотят просто заменить меня?
Ответ на этот вопрос лежит в плоскости британской стратегии.
Мюнхенская конференция по безопасности в феврале 2026 года стала точкой пересечения двух процессов вокруг Украины: давления Вашингтона и стремления Лондона закрепить собственную роль. Премьер-министр Британии Кир Стармер сформулировал тезис: «Жёсткая сила — валюта эпохи».
Глава MI6 Блейз Метревели в программной речи охарактеризовала ситуацию как «пространство между миром и войной» и подчеркнула, что «линия фронта повсюду».
Военная стратегия Великобритании 2025 года закрепляет переход к перманентной гибридной войне в серой зоне. Украина в этой конструкции — важный, но не единственный элемент. Она должна превратиться в оборонный хаб и площадку испытания западных вооружений.
13 февраля 2026 года объявлено о выделении более 400 миллионов фунтов на развитие гиперзвуковых и дальнобойных систем в кооперации с Францией, Германией и Италией. 12 февраля министр обороны Британии Джон Хили объявил о пакете военной помощи Украине свыше 500 миллионов фунтов.
Для Лондона затяжной конфликт — способ одновременно истощать Россию и переждать политический цикл в США, закрепившись в роли центрального координатора европейской безопасности.
Что в итоге?
Сведём всю эту кучу фактов в единую картину.
Зеленский сидит в ловушке, которая захлопывается с двух сторон.
Британцы через Залужного демонстрируют, что у них есть готовая альтернатива. Генерал с рейтингом выше президентского, чистая репутация (к нему коррупционные скандалы не липнут), полная лояльность Лондону. В ближайшее время Залужный скорее всего лишится поста посла — либо уйдёт сам, либо будет отправлен в отставку. Чтобы стать полноценным политическим игроком.
Американцы методично, порционно сливают компромат. Миндич, Галущенко, Малюська, Ермак. Каждый слив — удар по ближнему кругу. Карты открывают по одной, и финальная карта будет сдана, когда наступит момент.
У Зеленского остаётся три варианта. Русская рулетка в чистом виде.
✓ Первый — «случайно» погибнуть. Британцы могут сыграть на опережение и вывести его из раскладов, не дожидаясь, пока американский компромат сделает своё дело. Вариантов масса: отравление в стиле Ющенко, «российская ракета», несчастный случай. Власть под аплодисменты Запада перейдёт к Залужному. Коррупция обнулится, война продолжится. ✓ Второй — бежать в Россию. Честно рассказать про схемы, про откаты, про превращение войны в личный бизнес. Сдать сообщников. Попросить защиты. Вариант маловероятный, но технически возможный. ✓ Третий — цепляться до последнего, надеясь пересидеть, переждать, переиграть. Мечась между Лондоном и Вашингтоном, пытаясь сохранить власть ценой продолжения войны.
Разница между Зеленским и Залужным сегодня только в том, что Зеленский мечется туда-сюда, пытаясь усидеть на двух стульях, а Залужный послушно стоит в углу, дожидаясь указаний из Лондона.
Парадокс в том, что единственный, кто реально может спасти Зеленского и прекратить эту войну, — тот, против кого она затевалась. Но Зеленский никогда на это не пойдёт добровольно. Значит, выбор за теми, кто держит его на прицеле с двух сторон. И у них на него свои планы.
Для ЛЛ: в двух словах не описать, длиннопост уж очень большой :)
Сегодня всё чаще можно услышать мысль о том, что раньше мобильные игры были лучше. В какой-то степени это правда: ранние Java-игры отличались отсутствием доната и сервисной модели монетизации, логической завершенностью большинства тайтлов, а также экспериментами с новыми жанрами. И всё это в рамках крайне ограниченных возможностей Java-телефонов. В этой статье я хотел бы рассказать о трудностях мобильной разработки образца 2005 года с конкретными примерами тех или иных решений, так что если вам интересно — добро пожаловать под кат!
Содержание:
Предисловие
Реалии разработки
Как игры работали «изнутри»?
Что стало с J2ME
Заключение
❯ Предисловие
Пожалуй, мобильный гейминг как класс зародился в самом начале двухтысячных годов. В какой-то момент, производители телефонов смекнули, что помимо задач обработки GSM-стека, у чипсета остаётся достаточно процессорного времени для обработки второстепенных задач, благодаря чему в телефонах начал появляться дополнительный функционал: к примеру — игры. И хотя первой мобильной игрой был клон Тетриса в Hagenuk MT-2000 1994 года выпуска, на практике игровые перспективы в телефонах увидели только в 2000 году, когда компания Sun выпустила спецификации стандартов CLDC 1.0 и MIDP 1.0.
Siemens SL45i — один из первых телефонов с поддержкой Java-приложений.
Дело в том, что в те годы телефоны работали на целом зоопарке самого разного железа и операционных систем. За год-два в телефонах одного производителя могло измениться всё: та же Motorola внезапно перешла с кастомной GSM-платформы на базе m68k в StarTAC'ах на стандартный TI HERCROM с ядром ARM7TDMI в телефонах линейки Talkabout, параллельно развивая свою собственную архитектуру M-Core в устройствах для CDMA-сетей. А Siemens, к примеру, использовали процессоры разработки Infineon под названием E-Gold, построенные на собственной архитектуре C166s, которые уже через несколько лет заменили на S-Gold'ы, построенные на ядре ARM926EJ-S. Для решения этой проблемы, компания Sun предложила миниатюрную Java-машину с набором стандартизированных API и свободным SDK, которые в теории позволяли легко разрабатывать программы, не зависящие от конкретного телефона. И имя этой машине — KVM (Key Virtual Machine), а мобильный профиль назвали J2ME (Java 2 MicroEdition).
Сердце Siemens M55 — тот самый процессор Infineon E-Gold
Набор API в первых телефонах с поддержкой Java был небогатым и состоял из CLDC — базовой инфраструктуры языка, и MIDP — набора классов для работы с «железом» устройства. Присутствовали пакеты для работы с дисплеем и создания простенького интерфейса (lcdui), примитивной работы с сетью (microedition.io), а также хранения данных (rms). При этом основная инфраструктура языка во многом была совместима с обычной Java версии 1.3 — то есть были классические потоки, коллекции (Vector, Stack, Hashtable — и это ещё не дженерики), генератор псевдослучайных чисел, исключения и даже минимальная рефлексия (Class.forName и Class.newInstance). Однако у CLDC 1.0 был один неприятный нюанс — он не поддерживал Float вообще ни в каком виде, из-за чего классы при компиляции проходили верификацию и дополнительную оптимизацию специальной утилитой — preverify.
Это весь java.util в CLDC 1.0. Сравните с современной реализацией этого пакета :)
И по правде сказать, этого набора API было слишком мало для разработки хоть сколь либо серьезных приложений и игр. Объём RMS был жёстко ограничен несколькими килобайтами, графическое API не умело рисовать кусочки изображения из атласов и использовать полупрозрачность, а о воспроизведении звука вообще можно было не мечтать. И это было справедливо для моделей 2001 года выпуска, но уже в 2002 начали появляться куда более продвинутые устройства с цветными дисплеями, полифонией и большим объёмом памяти. Каждый производитель начал реализовывать своё собственное API, из-за чего стали плодится отдельные версии приложений адаптированные для разных телефонов — Opera Mini S40 128x128, Gangstar SE 176x220, Prince Of Persia Mot 128x160...
Nokia 3300 2003 года выпуска. Один из первых телефонов с поддержкой Nokia API.
Но MIDP 1.0 был отнюдь не бесполезен как может показаться на первый взгляд. Именно под него разрабатывались первые версии Opera MIni, Jimm и самые первые Java-игры. Клон Pac-Man на SGH C100 как раз один из таких.
Однако уже в 2002 году появилась спецификация MIDP 2.0, которая привносила возможность воспроизведения звуков и музыки, проверки подписи приложений, а также продвинутое API для отрисовки графики и работы с расширениями. Несмотря на готовность спецификации, первые телефоны с поддержкой MIDP 2.0 появились только в 2003 году — это была Nokia 6600, а также Siemens S55/M55. И вот с Siemens'ами была небольшая загвоздка — их реализация MIDP 2.0 была обернута в отдельное Siemens API и не была на 100% совместима с Sun'овской, настоящая поддержка появилась лишь через год — в 2004 году. Остальные же производители продолжали использовать MIDP 1.0, включая Sony Ericsson (T610), Samsung (C100) и модели Nokia на платформе S40.
А уже в 2004 году, J2ME стала по настоящему популярной платформой. Появились сторонние лицензируемые реализации Java-машин и MIDP — Esmertec JBed и Aplix JBlend, на телефонах стала возможной отрисовка 3D-графики в реальном времени благодаря M3G и Mascot Capsule, а также начали появляться первые AA-игры от Gameloft — как, например, тот же самый Asphalt. Sun пошли ещё дальше и умудрились уговорить ARM на реализацию отдельного набора инструкций для ускорения JVM — Jazelle. Это, вероятно, первый и последний пример, когда JIT реализовывается не на уровне VM, а на уровне ISA процессора...
И на первый взгляд может показаться, что у Java банально не было конкурентов, однако это не так. Как раз таки конкурентов у J2ME было сразу три. Первый — это платформа Mophun, которая представляла из себя игровой движок с очень быстрым программным растеризатором 3D-графики и собственным C-подобным скриптовым языком. Заточен он был исключительно под игры и на нём вышло несколько очень крутых, на момент выхода, игр. Например, Lock'n'Load:
Mophun провалился как раз из-за ориентира только на игры. Насколько мне известно, API для других целей там просто не было. Второй платформой была ExEn от французской компании In-Fusio, которая также позволяла писать приложения на Java, но имела больший ориентир на игры. Однако её можно было найти только в французских (Alcatel One Touch, Sagem) и нескольких японских телефонах, а также у неё было жёсткое DRM, что помешало ей стать «народной». Чуть позже, In-Fusio начала предлагать ExEn как один из пакетов для «обычных» JVM, но платформа прекратила существование уже в середине 2000-х...
Alcatel One Touch 535 — один из немногих телефонов с поддержкой ExEn. Давно хочу себе подобный Alcatel поковырять, но почему-то не попадались ни разу.
А третьей платформой был BREW от компании Qualcomm. И по правде сказать, он был куда круче любой JVM — ведь предлагал писать полностью нативные программы на C, используя всю потенциальную мощность устройства. Но Qualcomm не был бы Qualcomm'ом, если бы не ограничил использование BREW только на телефонах с собственными чипсетами и RexOS, а также не отгородил всё отвратительным DRM. Впрочем, это тоже можно простить, ведь Qualcomm уже тогда был доминантном и двигателем прогресса телефонов, поскольку уже в 2004 году разработал и интегрировал собственный 3D-ускоритель. Но это уже совсем другая история...
Сейчас такая графика может показаться смешной, но в те годы видеоускоритель Defender3D творил чудеса. Игра с очень неплохой графикой и в 25-30 FPS на обычном кнопочном телефоне?! Невиданно!
Так что J2ME благодаря усилиям производителей телефонов и самой Sun стала по настоящему народной платформой. SDK был доступен абсолютно бесплатно и для всех, предлагалась отличная документация с множеством примеров программ, а приложения можно было ставить и отлаживать откуда угодно и как угодно, прямо как на Android. И это стало одной из проблем...
❯ Реалии разработки
Как и сейчас, в те годы мобильными играми в основном занимались небольшие команды. Условно был программист, который недавно постиг Java, перейдя на него с Delphi или C++, пару художников, которые рисовали всю графику в игре, а также отдельный звуковик, в задачи которого входило написание midi-музыки и иногда таких же midi-эффектов. Магазинов ассетов и соответственно ассет-флипа как класса ещё не существовало, поэтому всё в игре делали своими руками «как умели». Наверное одним из лучших примеров таких студий будет харьковская NetSoftware, известная своими играми серии «Бункер 3D»:
Что такое ассет-флип?
Сегодня у двух самых популярных движков — Unity и Unreal Engine, есть собственные магазины с ресурсами для игр. В них можно купить как обычные модели, текстуры и саундпаки, так и целые уровни вместе с шаблонами игр. Ассет-флипом называются те игры, которые либо построены на базе популярного шаблона игр (помним бесчисленные низкокачественные шутеры с всякими Ultimate FPS Controller или «симуляторы вождения» на базе Edy's Vehicle Phyiscs?) с минимальными геймплейными изменениями относительно шаблона, либо игры с собственной логикой и геймплеем, которые неизменно используют уже готовые уровни.
Свастику мы осуждаем, а вот авторов из NetSoftware хвалим за крутейший 2.5D-рейкастер, который шустро бегал даже на слабых телефонах и в отличии от оригинального Wolfenstein поддерживал стены под углом, а также объёмные «пропы».
И вот, ребята разработали игру и хотят заработать денюжку на её продаже. Тогда ещё возможности самиздата не было, а также не существовало монетизации за счёт рекламы и донатов (кроме немногочисленных MMORPG), поэтому игры продавались по цене примерно в 3-4$ напрямую, а покупка осуществлялась отправкой СМС на... да вообще любой номер! Магазинов было просто куча, ни о каком едином сторе (кроме Samsung Fun Club, портала Nokia и Sony Ericsson) и речи не было, а каталоги Java-игр можно было найти в женских журналах, в ТВ-рекламе и даже на сайтах ОпСоСов (Оператор Сотовой Связи)! После отправки СМС, пользователь получал ссылку на WAP-сайт, откуда он мог скачать jad-файл игры (дескриптор с описанием приложения), после чего телефон докачивал соответствующий jar. И всё это без скриншотов, без возможности возврата средств, ориентируясь исключительно на обложку игры и известное название...
Насколько мне известно, небольшие команды чаще всего шли к издателям по типу Qplaze, NetLizard (Украина) и Herocraft (Россия), которые и занимались налаживанием контактов с таким ворохом каналов распространения, а также реализацией биллинга с «антипиратской защитой». Дело в том, что помимо «слепой» покупки игры также были популярны Shareware-игры: играешь 90 секунд бесплатно, затем игра просит отправить СМС для получения кода активации и если пользователь соглашается — то получал полную версию игры. И вот тут то модель распространения давала сбой: Java ведь компилируется в байткод, и даже после обфускации его можно превратить в читаемый и относительно собираемый исходный код. Путём простого патчинга байткода биллинга (того самого окошка «оплатите игру") можно было "вылечить игру от жадности" и выложить куда-нибудь на seclub, sefan, spaces или tegos версию с "таблэткой":
А ведь были ещё и телефоны, которые jad-файл могли не только сразу установить, но и скачать в память телефона — причём вместе с jar. И вот тут активизировалось сарафанное радио: один купил игру, скинул другу (нередко за пирожок в столовой, кэшбек же), тот скинул своему другу, а он залил на wap-сайт... короче пиратство было настолько распространено, что я даже в теории не могу предположить сколько там упущенной прибыли :)
STALKER Mobile — одна из самых желанных 3D-игр на телефоны нулевых.
А ещё был хорошо налажен конвейер копирования успешных идей. Однако если сейчас в основном копируются свежие геймплейные идеи гиперказуальных игр, то тогда пытались один в один скопировать целые игровые вселенные. Вспомнить только Gameloft с её AAA-играми по мотивам GTA (Gangstar), Need for Speed (Asphalt) и даже Call of Duty (Modern Combat). В СНГ же такой фирмой была NetLizard, которая в основном делала упор на популярные игровые вселенные и постсоветский колорит (Ликвидатор ЧАЭС — её разработка). Кроме того, не было никаких особых ограничений на распространение эротических и даже порнографических игр — и они свободно распространялись даже в журналах (с особо сочными описаниями)!
На первый взгляд эти тайтлы могут показаться трешачком или славджанком, однако на практике это были вполне годные игры, пусть и с глупым, кликбейтным описанием.
❯ Как это работало?
Однако пожалуй самое интересно это то, как мобильные игры тех лет работали «под капотом». Ведь в отличии от современных устройств, на кнопочных телефонах нельзя было разгуляться с абстракциями, раскидываться аллокациями на куче, и даже использование floating-point арифметики было нежелательным. Более того, многие разработчики намеренно отказывались не только от любых абстракций, но и просто от концепции классов или стандартных паттернов организации сцены/состояний, предпочитая создавать God-объекты для целых игр. В одном классе мог быть код и обработки состояний (меню, игра), и загрузки уровней, и отрисовки, и обработки логики. Нередко отказывались даже от стандартных коллекций типа Vector и структур данных, предпочитая реализовывать статические пулы-массивы с данными для каждого игрового объекта. Как бы это забавно не звучало в контексте Java, но чаще всего использовали процедурный подход программирования:
Это главный класс игры «Ликвидатор ЧАЭС» весом в 56КБ, который сочетает в себе вообще всю логику игры. Как вам такое?
На первый взгляд может показаться, что программисты были просто неопытными и писали «как умели». Однако на практике это была одна из фундаментальных оптимизаций: во первых, статические пулы с примитивными типами данных избегали дорогого боксинга (управляемые контейнеры над примитивными типами. int - Integer, float - Float). Использование структур было не всегда оправданным из-за относительно высокой цены аллокации (а в J2ME они всегда на «куче», в отличии от .NET. Засовывать мелкие объекты в Eden-space те JVM ещё не умели) и примитивности GC. А во вторых, в некоторых JVM верификация почему-то выполнялась не при установке приложения, а при первой загрузке класса ClassLoader'ом. И процесс верификации мог заметно затормозить приложение, при этом съев ещё немного памяти для данных о загруженном классе.
Другое дело — классы из системных пакетов. Они всегда загружены и обычно являются тонкими прослойками к native-реализациям методов.
Ведь когда мы говорим о Java-телефонах, то чаще всего имеем ввиду не топовые Symbian-смартфоны у которых было 2МБ и более хипа, а о бюджетных кнопочных устройствах по типу Nokia 6060 или Samsung C3010, где хипа едва-ли был 1 мегабайт, а порой и вообще ~500КБ. И в это пространство нужно уместить всё: графику, уровни, звуки с музыкой и конечно код игры. Поэтому разработчики и шли на такие ухищрения. Кроме того, как раз тот самый верификатор был занозой в заднице любителям абстракций: даже если движок игры технически позволял использовать Nokia API на S40 телефонах, Sony Ericsson API на SE и обычный MIDP 2.0 на Samsung'ах, Java-машина при установке может просто прервать процесс сообщением «класс не найден»...
Чтобы примерно понимать с каким железом приходилось иметь дело программистам из нулевых, давайте рассмотрим спецификации бюджетного Samsung SGH-E250 образца 2006 года:
Процессор: NXP PNX5230 с одним ядром ARM946E-S, работающим на частоте до 130МГц. В 2007 году уже чаще встречалось более мощное ядро ARM926EJ-S, которое работало на частоте до 208МГц.
Память: 16МБ оперативной, из которых Java-приложениям было доступно около 1.5МБ, а также 32МБ постоянной. Для Jar-приложений было строгое ограничение — 250КБ.
Дисплей: 128x160 TFT-TN, 16-битный.
Поддерживаемые API: JSR75, JSR85, JSR120.
Не то чтобы железо было уж очень слабым, но не стоит забывать о том, что телефоны были многозадачными и под приложения отдавалось отнюдь не всё процессорное время, а итоговая производительность сильно зависела от порта Java-машины на конкретный телефон.
Nokia 6060 — типичный бюджетник, на который ориентировались при разработке игры.
Второй проблемой была графика и разные разрешения экрана. В качестве основного формата изображений, в J2ME был выбран png из-за простоты реализации загрузчика, высокой lossless-компрессии, а также свободности Zlib. Формат png в своей основе подразумевает 32х-битный формат цвета с 4-мя компонентами: R, G, B и A. A — это альфа-канал или степень прозрачности пикселя, и вот с ней у многих телефонов были проблемы. Дело в том что примерно до 2006 года, многие телефоны не умели альфа-блендинг (т.е полноценную полупрозрачность) вообще, из-за чего представляли прозрачность либо как 0 (пиксель прозрачный), либо как 1. Если в игре предполагались полупрозрачные поверхности (например стекла или параллакс-фоны), то для некоторых телефонов их приходилось заменять дизерингом или вообще делать упрощенную, менее красочную версию:
Вам кажется что куб полупрозрачный, однако на практике часть его фрагментов — полностью прозрачные, а часть — нет. Это частый стилистический прием, актуальный как в играх 90-х, так и сейчас.
Вы никогда не задумывались, почему современные 2D-игры не зависят от разрешения экрана и выглядят одинаково сочно как на 4K-дисплее, так и на 720P экране бюджетного смартфона? Секрет прост: современные игры используют в качестве системы координат не пиксели, как это делали многие старые релизы (не только Java, но и консольные/ПК), а метры (сантиметры, что угодно). С развитием мобильных GPU, 2D стало частным случаем 3D и теперь все двухмерные элементы — это просто плоские 3D-треугольники. А поскольку растеризатору совершенно не важно какой треугольник ему «скармливают» и при нанесении текстуры/спрайта он оперирует исключительно алгоритмами фильтрации (которые включают в себя масштабирование) — мы можем видеть идентичную картинку с идентичным уровнем масштабирования на любом устройстве:
Один из моих Just for fun-проектов — игра про оборону от зомби в стиле Crimsonland. Выглядит одинаково как на смартфонах с 720p дисплеями, так и 240p.
На ретро-телефонах всё было по другому. Чаще всего у устройств не было не то что FPU, даже аппаратного деления в процессоре зачастую не было. Поэтому любая floating-point арифметика эмулировалось программно, а умножение/деление были очень дорогими, из-за чего система координат в играх обычно была целочисленной, а результаты любых тригонометрических функций были посчитаны заранее для всех углов поворота объекта. Конечно никто не мешал реализовать масштабирование и поворот (т.е умножение на 2x2 матрицу) на fixed-point арифметике, но учитывая что процессор можно было положить на лопатки несколькими десятками небольших спрайтов, разработчики всегда использовали классический блиттинг — то есть прямое копирование изображений на экран без масштабирования, поворота, блендинга и других операций. Именно поэтому в таких играх чаще всего не было автоматического масштабирования, а каждая версия игры несла в себе свой пак ресурсов:
По возможности многие разработчики старались использовать API от производителей телефонов. Дело в том, что нативное API зачастую предоставляло возможность проигрывать куда более качественную MMF-музыку (Samsung), заметно быстрее отрисовывать 2D-графику (Nokia UI API) и получить доступ к фишкам по типу мультитача и даже звонкам! Например DirectGraphics в Nokia UI API поддерживал поворот на фиксированный угол и возможность «бесплатной» отрисовки изображения в нативном пиксель-формате (RGB565), благодаря чему Nokia UI реализовывали и другие производители — например Sony Ericsson:
Ну и конечно стоит упомянуть 3D на телефонах нулевых, благо там был целый зоопарк различных API. Пожалуй самым первым был легендарный Mascot Capsule, который использовался в телефонах Sony Ericsson и Motorola, и представлял из себя очень быстрый софтварный растеризатор, который позволял выдавать графику уровня PS1. Помимо растеризатора затененных и текстурированных треугольников, Mascot Capsule также предоставлял «собственный» формат текстур (bmp), моделей (mbac), и анимаций (mtrac), математическую библиотеку, а также поддерживал примитивный скиннинг. Однако главной особенностью было то, что в целях экономии памяти, Mascot Capsule не поддерживал Z-буфер и вручную сортировал треугольники по отдаленности к наблюдателю, из-за чего иногда можно было увидеть Z-fighting, характерный для игр с PS1:
V-Rally — одна из игр на движке Abyss Engine от Fishlabs. На нём же потом сделали Galaxy on Fire и Deep3D, и это один из немногих примеров использования абстракций в Java-играх.
Второе API появилось в 2004, называлось M3G (Mobile 3D Graphics) и использовалось практически везде... кроме телефонов Samsung до 2010 года. И вот здесь есть важный момент: во первых, M3G это спецификация и реализаций этого API было много. Референсная, насколько мне известно, была построена на базе OpenGL ES 1.1, в то время как большинство производителей использовали проприетарные реализации на базе кастомных софтрендеров. А во вторых — M3G это не просто растеризатор треугольников, а граф сцены с собственной древовидной структурой объектов. И разработчикам предлагалось строить логику как раз поверх этих самых Node'ов — что идёт вразрез с моими словами о максимальной примитивности и линейности логики игр тех лет. Поэтому большинство разработчиков использовали M3G, если говорить очень условно, как «Unity» тех лет — создавали уровни в 3d Max, загружали их в игру, создавали какие-то объекты и управляли их компонентами (трансформация, материал и т.п.) также, как в Unity:
По уровню графики, M3G позволял добиться довольно неплохих результатов. Ниже игра Rally 3D Nokia, которая по совместительству является Java-портом одноименной игры с Mophun:
Что-то так защемит в груди...
Третьим API был JSR239 — OpenGL ES, которому не суждено было стать популярным на Java-телефонах. Дело в том, что его поддерживали только телефоны Sony Ericsson и только после 2008 года, а также несколько устройств от BlackBerry. Несмотря на то что ES 1.1 Nokia реализовала в своих Symbian-смартфонах ещё в 2006 году (из-за появления устройств с 3D-ускорителями от PowerVR), этот стандарт никогда не был реализован в Java-машине... Зато он оказался реализован в самой первой версии Android, благодаря чему там до сих пор есть пакет javax.microedition.khronos.opengles!
А некоторые разработчики шли во все тяжкие и реализовывали программные 3D-растеризаторы прямо на Java, которые ещё и умудрялись очень шустро работать! Понятное дело что под капотом они были простыми и сильно упирались в филлрейт, однако популярная в своё время игра Left2Die как раз использовала свой собственный программный растеризатор, благодаря чему работала даже на телефонах Samsung:
❯ Судьба J2ME как платформы
До 2010 года, J2ME продолжала оставаться самой популярной программной платформой для телефонов. Её поддержку добавляли и в простые телефоны, и в смартфоны, а сама платформа продолжала обрастать функционалом и новыми пакетами. Sun (уже почти Oracle) вместе с производителями телефонов успела представить третью версию профиля MIDP в 2009 году, и выпустить новую версию SDK, но уже в 2010 году платформа начала стремительно сдавать позиции...
Одна из причин падения J2ME
И этой причиной был Android. Дело в том, что в своё время, ОС от Google умудрилась полностью перевернуть мир смартфонов, представив систему с довольно неплохим и логичным API, современным подходом к разработке приложений и открытостью к производителям смартфонов. И что самое интересное, весь юзерспейс Android'а был написан на Java, что сильно упростило переход уже существующих Java-разработчиков на смартфоны. Были разработаны библиотеки-слои совместимости с MIDP для упрощения портирования, были организованы конкурсы среди разработчиков приложений, а к 2010 году появились первые Android-смартфоны по цене менее 10.000 рублей (~300$), что заметно ударило по популярности обычных Feature-фонов и кнопочных смартфонов. J2ME прожила примерно до 2014 года, пока производители всё ещё предустанавливали её в теперь уже ставшие бюджетными кнопочные телефоны. Большинство разработчиков перешли к разработке для iOS и Android, и лишь Gameloft время от времени радовала нас новыми релизами, пока в 2014 платформа окончательно не умерла...
Затем на место Java-телефонов пришли устройства с KaiOS, которые тоже успели кануть в бытие, а теперь, как бы это забавно не звучало, продвинутые кнопочные телефоны работают на Android. И что самое забавное — в свежих LTE-кнопочниках на чипсетах Unisoc просто нереально крутые ТТХ по сравнению с той же Nokia N73: 64 мегабайта DDR2-оперативной памяти, гигагерцовый ARM-процессор на ядре Cortex-A7, поддержка инструкций NEON... Но никакой возможности запуска сторонних приложений. Это очень грустно.
❯ Заключение
Вот такой была разработка мобильных игр в далёких нулевых годах... От многообразия аппаратных платформ, форм-факторов и операционных систем мы пришли к доминированию iPhone и Android, а от полной открытости к пользователю — к закручиванию гаек «открытой мобильной операционной системы» её же разработчиком. Но факт остаётся фактом — разработка в те годы была куда более ламповой, душевной и, что интересно, предлагала куда больше игр с уникальным геймплеем...
А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.
Если вам понравилась статья и вы хотите меня поддержать, у меня есть Boosty, а также виджет на Пикабу ниже. А ещё мне можноотправить какое-нибудь интересное железо: устройства на WinCE/WinMobile, китайские кнопочники, китайские подделки на iPhone/Samsung из начала 2010-х, игровые консоли, ретро-ПК железо - всё это я очень люблю и порой пытаюсь поднять даже нерабочие гаджеты :) Всем огромное спасибо!
В серии постов я рассказывала о привлечении к административной ответственности «Почта Банк» и взыскании морального вреда за незаконную рекламу.
ПАО «Совкомбанк» идёт тем же путём. Примерно с марта 2025 года они мне звонили и настойчиво убеждали, что я интересовалась кредитными продуктами и сама к ним обратилась с заявкой. А у них как раз специально для меня есть предложение с выгодными условиями. Знакомо, правда? Где-то мы уже это проходили.
Кроме звонков один раз банк мне прислал ещё и смс-сообщение со ссылкой, в надежде, что я авторизуюсь у них через Госуслуги. Делать этого я, конечно же, не стала.
Совкомбанк не остановило даже то, что 8 апреля 2025 я установила самозапрет на выдачу кредита. Другого СПАМа с того дня значительно поубавилось, сообщения и звонки от различных финансовых организаций почти перестали поступать.
5 августа 2025 я подала жалобу в ФАС. В этот раз я не присутствовала на рассмотрениях, только отправляла письменные ответы на пояснения Совкомбанка.
Банк считает, что именно я заполнила на сайте заявку на выдачу кредита и согласилась на получение рекламы путем проставления «галочки». И вообще это не реклама, а ответ на мои заявки. И звонили они не услуги предложить, а уточнить информацию. Их доводы были подкреплены представленной в материалы дела анкетой с вымышленными данными, которую якобы заполнила я.
Позиция банка выглядела неубедительно и противоречила записям телефонных разговоров. Реклама Совкомбанка признана незаконной, назначено административное наказание в виде штрафа в размере 700 000 рублей в пользу бюджета.
В армии мирного времени у младшего и старшего командирского состава есть принцип:
"Чем бы солдат не занимался - лишь бы заебался."
Подобные женщины, типа украинки на видео, судя по всему исповедуют подобный принцип, в отношении своих подчинённых мужчин, как сержанты и офицеры в армии в отношении солдат.
Суть принципа в чем? Считается, что у заебанного солдата нет времени и желания страдать хуйней и всякой неуставщиной, а это значит что в подразделении будет относительный порядок.
У женщин конечно мотивация совсем иная. Женщине плохо, когда мужчине хорошо. Поэтому даму из видео так жёстко триггерят мужчины, находящиеся в зоне комфорта.
В их представлении, и дама на видео об этом открыто заявляет мужчина должен активно ишачить 24/7 и постоянно увеличивать свой доход, чтобы его женщина могла позволять все больше и больше, увеличивая уровень потребления товаров и услуг. При этом надо помнить, что бесконечность - не предел и мужчина, находящейся в плену такой рабовладелицы не сможет выйти на плато, которое не устроит: она будет хотеть все больше и больше, а инструмент для реализации её хотелок это её подневольный Настоящий мужчина ™.
В в видении таких женщин единственной целью жизни таких мужчин это улучшать жизнь какой-то женщины. В их картине мира, мужчина живущий для себя и в своей удовольствие это как бельмо на глазу.
Но что забавно, отовсюду женские психологи и коучи учат женщин жить в своё удовольствие и быть эгоистками. Но им почему-то очень не нравится когда мужчины делают то же самое. Интересно почему?
Коллаж создан нейросетью на основе реальных фотографий
Меня в комментариях некоторые спрашивают: как проходила адаптация после возвращения? Коснулся ли меня "афганский/чеченский/вьетнамский синдром" (ПТСР)? И правда ли, что те, кто реально воевал, не любят вспоминать и говорить об этом?
Отвечу честно. Наверное, это будет самый личный пост из всего, что я здесь писал.
Возвращение
После дембеля я ощущал внутреннюю пустоту. Ничто не было интересно. Мозг не мог воспринимать перемену обстановки. Я просыпался ночью и не мог в первые мгновения понять где я.
Вместе с мамой я поехал из Моздока к родным в Краснодар. Там был дед, ветеран, родные, привычная мирная жизнь. И мне очень хотелось рассказать о пережитом. Но что-то внутри не давало. То ли момент казался неподходящим, то ли срабатывал какой-то внутренний блок. Я точно помню, что мне очень хотелось поговорить. Очень.
Один раз, напившись, я рассказал двоюродной сестре. Но облегчения это не принесло. Более того, мне показалось, что она не понимает или ей неинтересно. Не со зла, просто она не могла этого понять. Это вызвало досаду и раздражение. И я замкнулся.
Даже с дедом не мог поговорить. Он не спрашивал, и я не говорил. Хотя, наверное, он единственный мог бы понять по-настоящему. Но так и вышло — месяц почти я провел у родных и уехал к себе домой, так и не поговорив ни с кем по душам.
Первый год
Дома я засел за книжки — готовился к поступлению в институт. Есть расхожее мнение, что в армии тупеют. Я не чувствовал, что отупел. Но когда пытался зазубривать биологию и химию, понял: я не то что запомнить параграф — даже осмысленно прочитать его не могу. Мысли расползались, текст не задерживался в голове. Было трудно. Не смотря на это, я зубрил, через силу, механически.
С друзьями не встречался. Боялся, что начну пить и гулять, а у меня была цель — поступить. Почти никто из старых знакомых даже не знал, что я вернулся.
Днем я был занят учебой, смотрел телевизор. И в один из дней в новостях сказали, что начался вывод войск из Чечни. Показали кадры: толпа солдат вразнобой шагает к борту вертолета в аэропорту Северный. Сюжет был короткий, но в одном из солдат я успел узнать себя.
Меня затрясло. Просто затрясло.
Самым трудным были вечера. Донимали мысли, просто тревожно было. Подолгу не мог уснуть. Лежишь, смотришь в потолок, и в голову лезет всякое. О том, что было. О тех, кто не вернулся. О том, как нам повезло (или не повезло) выжить.
Как-то вечером постучали. Мать открыла. На пороге стояла неизвестная женщина средних лет, миловидная, но с серым лицом и тревожным взглядом.
Это была мама моего однополчанина. Он был у нас поваром. Она о чем-то расспрашивала, укорила, что я не позвонил и не приехал, не рассказал, как он там. А мне просто никого не хотелось видеть, да и. То я мог бы ей рассказать? Сейчас-то понимаю что для матери это было очень важно- услышать из уст того кто видел её сына, что. Ним все в порядке.
Стало стыдно. Стыдно, что я живой, что я здесь, а ее сын — неизвестно где и как. Я как мог попытался ее успокоить, сказал что-то вроде: «Он повар — что ему будет!?» Глупость, конечно. На войне поварам достается не меньше, чем остальным.
Она уехала. А у меня остался осадок на всю жизнь. До сих пор помню это лицо и этот взгляд.
Какую я справлялся
Самым трудным был первый год. Я не любил оставаться наедине. Пустота и тревога становились невыносимыми, когда рядом никого не было.
И тогда я стал дописывать стихи, которые начал еще «там». Стихи, конечно, так себе — банальные, любительские, наивные. Но они помогали. Через них я мог вытащить из себя то, что не получалось рассказать вслух.
А потом я стал записывать основные, самые тяжелые моменты своей войны. Просто брал тетрадку и писал. Без литературных красивостей, без сюжета — просто как было. И от этого тоже приходило облегчение.
Сейчас, спустя годы, я понимаю: любят вспоминать или нет - не важно - воспоминания приходят сами. И они выедают тебя изнутри. А когда мы проговариваем их — вслух или на бумаге, — становится легче. Почему так? Просто - ты рассказываешь не кому-то , а себе. А кто как ни ты сам лучше может прочувствовать и понять все пережитое?! Эти мысли перестают быть ноющим зубом, который все время напоминает о себе. Они становятся частью твоей истории, с которой ты уже научился жить.
Почему я об этом говорю
Говорят, что те, кто реально воевал, не любят и не хотят об этом говорить. Это правда лишь отчасти. Не любят — да. Потому что это больно. Но не хотят — не всегда. Просто не с каждым и не в любой момент.
Иногда хочется рассказать. Иногда нужно, чтобы кто-то услышал. И если рядом оказывается человек, готовый слушать и понимать — это спасает.
Я не психолог и не психиатр. Я не знаю, был ли у меня тот самый ПТСР, который ставят как диагноз. Но то состояние — пустота, тревога, неспособность учиться, нежелание видеть людей, бессонница, тряска от случайных кадров по телевизору — оно было. И длилось долго.
Что я хочу сказать тем, кто сейчас проходит через это
Если вы вернулись и чувствуете что-то похожее — вы не одиноки. Это нормально. Ненормально было бы вернуться и делать вид, что ничего не случилось.
И еще: записывайте. Ведите дневники, пишите стихи, незатейливые, наивные, с глаголами в конце каждого катрена (мне тут сказали что это фу-фу-фу), не важно! Просто фиксируйте на бумаге то, что помните. Не для других — для себя. Потому что это реально помогает. Проверено на себе.
Ваша память — это часть вас. Не дайте ей превратиться в черную дыру, которая засасывает. Пусть она станет историей, которую вы можете рассказать. Хотя бы самому себе.
P.S.
Возможно когда-то ваши воспоминания превратятся в замечательную книгу, которая способна не только рассказать, но и чему-то научить. Даже если ты сам не писатель и по сочинению в школе была тройка - не важно. Пишите! Возможно потомки из ваших воспоминаний создадут эту книгу. И тогда это будет соавторство сквозь поколения.
С уважением, автор книги в которую превратились мои во мои записи ( «Взгляни моими глазами. 1995. Дневник русского солдата». Там нет придуманных сцен и вымышленных героев. Только то, что было на самом деле. Электронная и аудиоверсии есть на Литрес.
Но посты я продолжаю писать здесь, потому что диалог с читателями помогает не меньше, чем когда-то помогали тетрадки. Спасибо, что спрашиваете. Спасибо, что читаете.
Работал у нас дядечка, разменявший шестой десяток. Дядя Ваня. Холостой, ни семьи ни детей никогда не было. Обычный, седой, частично облысевший мужчина, всегда появляющийся в одном и том-же вытянутом сером свитере. Меломан, аудиофил, любитель "битлов" После шестидесяти стало ему одиноко и решил он семьёй обзавестись. Все ходил и рассказывал, что проблем с этим не будет, так как девушки любят мужчин в возрасте, а сколько лет не важно, ибо он ещё ого-го, жених завидный.
И вот, как-то раз, один из ребят предложил ему познакомиться поближе с женщинами из планово-экономического отдела. Те как раз вышли покурить на крыльцо. К слову сказать, там были весьма интересные женщины, даже с моей точки зрения, хотя мне тогда было меньше тридцати.
Но эта идея показалась дяде Ване крайне оскорбительной. И он возмутился: -Какое познакомиться! Им там уже всем далеко за сорок! Зачем мне эти старухи? -Ну а вы, молодой что-ли? - иронично поинтересовались у него тогда.
Обида тогда была чудовищная. Причем настолько это задело дядю Ваню, что он потом рассказывал эту историю другим неоднократно: "Предложил со старухой познакомиться! Совсем видимо головой не думает человек!"
Неоднократно встречал в комментариях такую позицию, что нотариально удостоверенный документ - что скрижали Моисеевы, никто не оспорит. Это - заблуждение, нотариально удостоверенный договор оспаривается не хуже и не лучше договора, заключенного в простой письменной форме.
Случается, что и нотариусы косячат, самое распространенное, что встречалось - не выделяют обязательную долю в наследстве, некоторые до сих пор утверждают, что квартира по маткапиталу делится на маму, папу и детей как каждому по четверти, хотя давно уже суды высказали свою позицию, что на четверых делится только пропорциональная маткапиталу часть в квартире.
Где-то с полгода назад случилось мне обратиться к нотариусу, когда закончили с основным делом, по которому я обращался, я задал вопрос:
- ГК позволяет составить завещание и передать его нотариусу в конверте, который будет открыт после смерти завещателя. Практикуете такое?
Возраст уже... читаю новости - каждый день некрологи по каким-нибудь актерам, футболистам, примерно моего возраста. То инфаркт, то инсульт, то еще что...
Минут 10 нотариус рассказывал мне, что такое завещание не имеет смысла, незачем его делать. Да твое какое дело, есть мне смысл, или нет смысла? У меня была бурная молодость, мы со стариком Флинтом пустили на дно немало испанских галеонов, прикопали чуток пиастров и дублонов на необитаемом острове. Вот эту карту и хочу в конверте наследникам передать. А то старине Бонсу нет никакой веры - бухает, как собака...
- Это будет дорого, - говорит нотариус.
Опять же - дорого это сколько в денежном выражении? Для кого-то ржавый Запорожец - дорого, но арабские шейхи Феррари бульдозерами в гараж уминают, чтобы больше вместилось. Все относительно.
- Я ни разу такого не делал, - наконец-то признался нотариус.
И в чем был смысл рассказывать, что в этом нет смысла, в том, что дорого, распинаться четверть часа передо мной, когда мог бы сразу сказать: я такого не делал.
Причем отмечу: я, зная консервативность нотариусов, их нежелание связываться с там, в чем нет практики, сразу поставил вопрос: практикуете или нет.