Как вычислить мультиакк?
Разрабатываю сервис по типу Пикабу и хочу узнать как можно вычислять мультиакки? На программном и поверхностном уровнях.
Разрабатываю сервис по типу Пикабу и хочу узнать как можно вычислять мультиакки? На программном и поверхностном уровнях.
Всем привет! Хочу представить вам свою первую игру-головоломку на iOS и Android
Сразу скажу что я не профессиональный разработчик - и к IT-сфере не имею отношения.
Эту игру я написал не без помощи ИИ. Я осуществил свою давнешнюю мечту написать полноценное приложение для Android и iOS. Готов к критике и предложениям по улучшению игры - и был бы рад если кому нибудь вообще понравится моя игра. В целом на разработку потратил около 3 месяцев. Понятно что игра не претендует быть шедевром игровой индустрии - это всего лишь простейшая игра-головоломка чисто "убить время" когда скучно.
В свете санкционных ограничений в отношении России - сделал свою игру полностью бесплатным для всех Россиян в версии на iOS - вот ссылка на мою игру в app store:
(скажу сразу что монетизацию для остального мира я оставил)
И полностью бесплатная версия Android на RuStore
p.s. Очень волнуюсь - что меня начнут ругать критиковать что куда я лезу в разработку там где работают профессионалы со своей дешевой ИИ поделкой и все такое - я все понимаю что я в этой сфере никто и звать меня никак, но люди ведь делают как то первый шаг если начинают какое то дело в новой для себя сфере - всем добра!
Всем привет.
Мне 18 лет. Уже несколько лет я изучаю разработку игр и работаю с Unity. За это время делал разные небольшие проекты, учился программировать на C#, разбирался в игровой логике, мобильной оптимизации и создании интерфейсов.
Около года назад решил взяться за первый действительно большой для себя проект - мобильную игру, которую хотел довести до полноценного релиза.
Все делал самостоятельно в свободное время: писал код, собирал геймплей, продумывал уровни, делал интерфейс, тестировал и постепенно доводил игру до релиза.
За этот год было много моментов, когда хотелось все бросить: баги, проблемы на телефоне, постоянные переделки механик и десятки мелких исправлений.
Но несколько дней назад я наконец выпустил свою первую игру в Google Play.
Честно говоря, для меня это в первую очередь личное достижение, потому что я хотел доказать самому себе, что смогу довести такой проект до конца.
Прикрепляю немного геймплея. Буду рад любому мнению!
Делаю для MRead настраиваемые тап-зоны
Это настройка, где можно самому разметить экран чтения: какая область листает вперёд, какая назад, где открывается меню, где меняется яркость, а где вообще ничего не происходит.
Сначала думал, что это будет небольшая фича. Ну что там: прямоугольник, действие, сохранить.
Но дальше началось интересное.
Нужно было сделать так, чтобы зоны можно было двигать, растягивать, удалять, пересекать друг с другом и при этом не превратить настройку в панель управления космическим кораблём.
В текущем виде задумано так:
можно создать несколько зон;
перетащить зону куда удобно;
растянуть за угол;
выбрать действие;
поставить пресет;
очистить всё и вернуться к обычной схеме.
Из действий есть листание вперёд/назад, меню, закладки, оглавление, яркость плюс/минус, TTS, выход из приложения и “ничего”.
“Ничего” оказалось не шуткой. Иногда реально нужна область экрана, которая не делает ничего. Например, если туда часто случайно попадаешь при чтении.
Отдельно пришлось решать пересечения.
Например, можно сделать большую зону “вперёд” почти на весь правый край, а поверх неё маленькую зону “меню” в углу. Тогда возникает вопрос: если тап попал сразу в обе зоны, кто победил?
Я сделал правило простым: побеждает меньшая зона. Обычно маленькую область ставишь специально, а большая работает как фон.
Самая неприятная часть была не в математике прямоугольников, а в жестах.
В Compose зона могла начать перетаскиваться, потом интерфейс пересобирался, pointerInput перезапускался, и drag срывался прямо во время движения. Визуально это выглядело так, будто блок просто отлип от пальца.
Починилось через стабильные ключи для зон. Без key Compose начинал путать элементы при изменении порядка отрисовки, особенно когда выбранная зона поднималась поверх остальных.
В итоге фича получается больше, чем я ожидал. Не просто «тап слева/справа», а маленький редактор управления чтением. Выйдет в следующем обновлении.
Параллельно в последних версиях уже завезено: полка «Читаю», дробные проценты прогресса, PDF-фильтры, кроп, контраст, настройка карточек в библиотеке и фиксы для больших библиотек.
Но тап-зоны сейчас, наверное, самая заметная штука именно в интерфейсе чтения.
MRead бесплатный, без рекламы. GitHub использую как страницу релизов: APK, changelog и контрольные суммы.
Скачать, посмотреть changelog и закинуть баг/идею удобнее всего через канал - там же все ссылки на сторы в закрепе:
Отдельное спасибо всем, кто пишет баги, предлагает фичи и просто рассказывает, где неудобно. Большая часть правок появилась именно из такого фидбека.
Всех приветствую. Это третья заметка про мой небольшой Android-проект - интервальный таймер для тренировок.
Предыдущая статья тут.
Кратко напомню контекст: в качестве небольшой практики я пишу приложение для интервальных тренировок, с гибкими интервалами, поддержкой пульсометров, выбором звуков, настройкой ритма и историей тренировок. Приложение бесплатное, без подписок, навязчивой рекламы и ограничений по функционалу. Ссылка на приложение в русторе - в конце статьи.
На текущий момент уже вышла версия 0.4.0. В этой статье кроме изменений в самом приложении, хочу немного рассказать о самой разработке, а именно об автоматизации релизной рутины при помощи скриптов. Т.к. с развитием проекта появляется все больше обязательных действий, которые напрямую не связаны с написанием кода, но все равно нужны: тестовые данные, миграции, скриншоты для релиза, сборки, подпись APK и т.д., то появляются мысли эти процесс оптимизировать/автоматизировать.








Скриншоты версии 0.4.0
Что появилось в версии 0.4.0
Главное изменение с прошлой версии - история завершенных тренировок. Теперь завершенные тренировки можно посмотреть в отдельном разделе в формате календаря по дням.
Для каждой записи есть подробности:
итоговое время;
количество кругов;
отдых между кругами;
состав интервалов;
финишный пульс, если во время тренировки был подключен пульсометр.
Также в новой версии переработан "Ритм" - бывший "Темп". В 0.3.0 в приложении можно было задать темп в BPM. Теперь ритм можно задать либо напрямую в BPM, либо через количество повторов за интервал и приложение само посчитает нужный темп, исходя из количества повторов и длительности рабочего интервала. Для звука ритма можно выбрать стандартный тик или одну из сохраненных голосовых записей.
Почему скрипты, если ИИ "может делать все сам"?
В первых версиях многое из рутины делалось руками: ввод команд для сборки APK, перекидывание файла на телефон, установка, скриншоты и т.д. Но с развитием проекта эти процессы стали занимать все больше времени. Особенно когда надо протестировать на телефоне очередные небольшие изменения.
Следующий этап был через промпты для агента. Я уже не вводил все команды руками, а писал агенту: собери приложение, установи на телефон, сделай набор скриншотов и т.д. Это уже было удобнее, но все равно оставалось больше ручным процессом, чем автоматизацией. И при этом периодически случались косяки, особенно на сложных операциях вроде подготовки скриншотов для релиза.
Очевидным следующим шагом стали скрипты. Действия, которые можно полностью или почти полностью автоматизировать, лучше четко описать один раз в скрипте, а агента потом просить запускать уже готовые команды.
Какие скрипты сейчас используются
Сейчас скрипты помогают автоматизировать часть релизной рутины, а именно:
заливают тестовые данные в debug-версию приложения: тренировки, интервалы, настройки пульса, ритм и историю тренировок;
проверяют обновление с предыдущей версии на новую. Для 0.4.0 это был сценарий 0.3.0 -> 0.4.0: поставить старую версию, заполнить ее данными, обновить поверх и убедиться, что ничего не потерялось;
собирают список UI-элементов из Compose-кода и обновляют карту координат на реальном телефоне, чтобы сценарии скриншотов не зависели от ручных нажатий;
снимают скриншоты по заранее описанному плану: открывают нужные экраны, проверяют ожидаемый текст, делают исходный скриншот и готовят копию для RuStore;
собирают release APK, проверяют подпись, архивируют файл, считают SHA256 и сохраняют build-info.md и checksums.txt в релизный пакет.
Проверка обновления
Самый важный сценарий для 0.4.0 - проверка обновления с предыдущей публичной версии. Для этого скрипт устанавливает специальную debug-сборку 0.3.0, заливает в нее тестовые данные, а потом ставит 0.4.0 поверх старой версии без очистки данных.
Задача простая: убедиться, что после обновления у пользователя ничего не пропадет и не сломается.
После обновления скрипт проверяет, что приложение запускается, тренировки видны и открываются, а новые поля базы получили безопасные значения по умолчанию.
И только после этого добавляются данные, которые появились уже в 0.4.0: история завершенных тренировок за разные дни, подробности истории и т.д. То есть скрипт не просто заливает демо-данные, а прогоняет почти весь релизный сценарий обновления.
Скрипт для скриншотов
Один из самых муторных процессов перед релизом - скриншоты. Для стора нужны скриншоты конкретных экранов с нормальными данными: главный экран, редактор тренировок, активный таймер, история и т.д.
Раньше это делалось руками: открыл экран, сделал скриншот, перешел дальше, снова сделал скриншот, потом перекинул файлы на комп.
Потом процесс стал полуавтоматическим: я просил агента подготовить план и сделать скриншоты. Сначала в режиме подтверждения - я подтверждал, что нужный экран открыт, после чего он делал скриншот. А потом пытался сразу промптом попросить его сделать план и пройти по нему полностью автоматически. Но без скрипта это выглядело грустно: медленно и с косяками.
Третий этап (сейчас) это уже делается скриптами.
После того, как debug-версия получает тестовые данные через adb run-as, происходит следующий этап - собирается карта интерфейса. Один скрипт проходит по Compose-коду и формирует список UI-элементов, которые могут понадобиться для сценариев съемки. Затем другой скрипт через uiautomator dump читает текущий экран на реальном телефоне, находит нужные элементы, снимает их точные координаты и собирает итоговую карту интерфейса.
Упрощенно схема такая:
список возможных UI-элементов
выбранные элементы для съемки
реальные координаты на устройстве
сценарий скриншотов
Дальше используется сам план съемки. В нем указываются не координаты, куда нужно нажать, а более глобально: "на экране main нажать control history, дождаться заголовка История тренировок, сделать скриншот 04-workout-history-calendar.png". Координаты подставляются уже из карты.
Дальше скрипт проверяет, что на экране появился ожидаемый текст, делает screencap, сохраняет исходный PNG в screenshots/raw, а затем готовит копию для RuStore.
Если интерфейс поменялся, сначала нужно обновить карту элементов. Когда карта актуальна, сам процесс снятия скриншотов проходит автоматически: данные подготовлены, переходы описаны, проверки заданы, файлы складываются в нужные папки.
Что дала автоматизация
Во-первых, стало существенно меньше ручной рутины. Перед релизом есть понятная цепочка: подготовить данные, проверить миграцию, снять скриншоты, собрать release, проверить подпись, архивировать APK, сохранить checksum и build info.
Во-вторых, стало проще работать с ИИ-агентом. Когда действие описано словами вроде "подготовь релиз", агент может угадать не все шаги, сделать их в неудобном порядке или вообще накосячить. А когда есть конкретные скрипты, задача становится гораздо точнее: запусти такой-то сценарий, проверь такой-то файл, обнови такой-то пакет.
Что в планах
В ближайших планах по развитию приложения:
показывать во время тренировки не только пульс, но и пульсовую зону;
добавить в историю тренировок график пульса с зонами, наложенный на интервалы;
сделать полный бэкап и восстановление данных, потому что сейчас импорт/экспорт покрывает только тренировки, а голосовые напоминания и историю сохранить пока нельзя.
Ссылка на RuStore Интервальный Таймер.
Привет всем!
Ранее поделился видео, где была видна скорость загрузки истории переписки. Задержка загрузки составляла примерно пол секунды. Достаточно много 😒
Также проблемные моменты в видео были видны (передерги поля ввода при открытии чата). Можете посмотреть еще раз:
На выходных поработал над этим. Было немного интересно это исправить. У меня есть понимание как можно "ускорить" подгрузку данных, но как оно будет работать на самом деле - это нужно звать блогера-Конора или провести свой эксперимент.
В первую очередь добавил возможность отображения миниатюр медиа в истории переписки:
Да, не божественно, не круто, но как заглушка эта часть готова. Наличие медиа отображается в окне чатов 😀
А вот и улучшенный интерфейс:
Убрал артефакты в поле ввода: оно меняет размер, опускает текст вниз и расширяется при открытии чата
Немного доработал анимацию кнопок в правом нижнем углу окна переписки
Научил отображать историю переписки и подгружать черновики максимально быстро
Как работает быстрая подгрузка черновиков?
В первое время я полагал, что из SQLite данные будут прилетать моментально. По этой причине перенес логику получения готовых данных из базы данных. То есть SQLite возвращает все отсортировано и как надо, мне только нужно вывести на экран.
Как результат - заметные задержки. Как ни пытался ускорить, задержки есть. Похоже просто так брать и подгружать данные из БД - это неправильный путь.
Как реализовал у себя: при открытии списка чатов происходит подгрузка историй переписки. Делается это в фоне и в то время, когда пользователь видит окно чатов. По сути, при открытии чатов происходит визуализация предзагруженных данных. Для пользователя это выглядит как моментальное открытие чата. Все довольны :)
--
По вечерам разрабатываю сервис для общения. Кому интересено, можете подписаться куда-нибудь на меня, попробуете его в числе первых.
Постепенно буду продолжать делиться успехами разработки сервиса.
Всем привет. Хотелось бы предложить этому сообществу свою утилиту — ReAppzuku, приложение для диагностики и управления фоновыми процессами на Android.
Требования:
Android 6.0+ (для фоновых ограничений Android 11+)
Root или Shizuku
Фунционал:
- Показывает список активных фоновых приложений с потреблением ОЗУ и CPU в реальном времени, можно вручную "убивать" выбранные.
- Анализ триггеров. Это диагностика конкретного приложения: что реально использует приложение для удержания в фоне (foreground-сервис, wakelock, будильник, привязка от другого приложения и т.д.), плюс своя оценка "агрессивности" приложения.
- Auto-Kill. Автоматическая остановка фоновых приложений согласно заданному черному/белому списку. Есть дополнительные условия, например Kill по расписанию, по системному событию (зарядка, WiFi, наушники, Bluetooth, GPS) или при запуске других приложений (например, перед игрой на слабом телефоне).
- Фоновые ограничения AppOps (мягкое/среднее/жёсткое/ручное). Можно точечно настроить системные AppOps-разрешения для каждого приложения.
- Режим сна. Это полная заморозка выбранных приложений при выключении экрана с автоматической разморозкой. Удобно, если не хотите чтобы ночью какое-нибудь приложение крутило свои механизмы синхронизации.
- Планировщик ограничений. Можно временно снимать ограничения с приложения по расписанию. Например для синхронизации или если вы знаете что используете это приложение только в определенное время.
- Статистика и журналы. Диаграммы потребления основных ресурсов устройства (ОЗУ, CPU, Батарея), Журналы самого приложения (Auto-Kill, Фоновые ограничения, Режим сна, Планировщик). Отдельный "Топ Нарушителей", который показывает лидеров по упертости работы в фоне.
- Защита системных компонентов (Google Play Services, телефония, текущий лаунчер и клавиатура, System UI). Приложение не даст вам как-либо ограничить критические системные приложения, чтобы в дальнейшем не получить бутлуп вместо оптимизации.
Это не весь функционал приложения, иначе бы пришлось растягивать пост.
Приложение полностью бесплатное и с открытым исходным кодом (FOSS).
Тема обсуждения 4PDA: https://4pda.to/forum/index.php?showtopic=1120472



Скриншоты приложения



Очень положительные впечатления и море фидбека. Девушка для привлечения внимания
Там познакомился с командой GamePush, через которую удалось выложить игру на Пикабу. Хорошая техподдержка, но денег с моей игрой там не заработать, к сожалению (в этом плане лучше Яндекс.игры). На пикабу дали фичеринг, но я облажался и выкатил билд с ошибкой обучения. Соответственно, трафик не попёр, а отрицательных отзывов получил массу. В начале пути аналогичная ситуация была с яндекс.играми, поэтому там рейтинг 3.4, хотя последние оценки положительные. Ну что поделать, тестируешь-тестируешь, а всё равно выходит лажа.
Это самое важное, что произошло с игрой за год. Изначально планировалось три слоя - подземелье, земля и небесные острова, но осилить удалось пока что только первые два. Карта теперь многослойная. Много времени ушло на обучение ИИ пользоваться слоями.
Для обкатки подземелья сделал фракцию гномов. На ИИ для неё я жёстко поплыл, потому что основа фракции - поезд, который может ездить только по рельсам и у него могут быть вагоны (от 0 до 7). Поэтому нужно было делать и генерацию карты и планирование путей для ИИ с учётом того, чтобы паровоз мог доехать до нужной точки, развернуться и вернуться назад. А если гномы основывают второй город в другом конце подземелья, то ИИ нужно прорабатывать план бурения с последующей отстройкой рельс. Вот тут пришлось действительно попотеть.


Держим глухую оборону за гномов и пытаемся подкопаться к противнику сбоку, чтобы ворваться в тылы
Фракция получилась необычной. Они долго запрягают, но быстро едут. Сложный геймплей - вначале отстраиваем рельсы и направляем шахтёров в шахты. В городе строим склады, электростанцию и банки. Поезд должен раз в несколько ходов курсировать между заполняющимися шахтами и складами города, перевозя уголь и золото. Эти ресурсы в городе могут перерабатываться в доход и электричество. Электричество в свою очередь передаётся по рельсам и поезд может использовать его вместо дорогого угля. Как обычно - никакого обучения, кроме скромных текстовых описаний. Но есть и плюсы - у гномьего оппонента можно незаметно воровать электричество.
Главная особенность фракции - локомотив может двигаться сколько угодно раз, пока в его топке или вагонах есть уголь, или пока на рельсах есть электричество. К поезду можно пристроить вагоны-пушки, которые стреляют, пока есть порох в пороховницах или ягоды электричество в рельсах. После длительной подготовки, гномы рывком выходят на поверхность паровозом и выносят всех оппонентов своими пушками, или просто выгружает из вагонов армию под стены врага. В паровозе сидит машинист - это король гномов. Для расправы над гномами нужно уничтожить его отдельно (если он вышел чинить поезд), либо сам паровоз с машинистом внутри.



Найдите дикий транспорт гоблинов
Добавил стены с воротами. Усилил башни. Для пролома обороны добавил артиллерийские юниты. У гоблинов появился юнит-сдуватель, он сдувает всех на большое расстояние (своих или чужих и даже на море). У людей на море появился гарпун, который атакует или притягивает корабли, а также рыболовный траулер, способный разводить рыбу. Гоблины могут делать колбасу из своих зародышей. Королю людей добавил апгрейд со стелсом (как у Кибран в Supreme Commander). В ИИ добавил режим охоты на короля.
Что ещё? Появился редактор карт и возможность играть в союзе. Для королей появился водный транспорт. Всем юнитам добавили режим авто перемещения (поставил точку и юнит туда идёт), при долгом нажатии на действие появляется окно со справкой, а также появилось окошко "следующий юнит или здание", чтобы никого не забыть. Добавил настройки игры (например, без нейтралов или без королей), рейтинг игроков в сетевых играх, обновил сетевое лобби.
Новые биомы под подземелье - два вида самого подземелья плюс сокровищница и вулкан. Также для подземелья сделал другой вижен, чтобы нельзя было стрелять или видеть сквозь стены.
Для контры гномов у людей и гоблинов появился юнит-медик, способный дать живым юнитам второй ход, также инженер людей может делать платформу, дающую ещё одно передвижение всем юнитам (и аналогичное здание на побережье для кораблей - маяк).
На карте, помимо сундуков, появился ящик пандоры, который либо даёт два уровня королю, либо 100 монет, либо целую кучу врагов, нацеленных на короля.
Интегрировал под кордову VK.ads (myTarget), чтобы не умереть с голоду
О том, какие там были танцы с бубном может быть расскажу в отдельном посте. Это целый детектив, учитывая, что официальной поддержки кордовы нет и я не знаю, что под капотом у кордовы, а также не знаю джаву от слова совсем. Есть один плагин под старую версию API, который не работает и вот с ним я бился головой об стенку несколько недель. В итоге считаю, что мне просто космически повезло.
Эффект Пикабу
Из своего предыдущего поста про игру познакомился с автором игры Гриди #comment_341174774 и нам даже удалось сделать в короткий срок веб игру с хорошим ИИ, но до публикации дело пока не дошло, может в этом году выкатим.
Также пробовал по совету из комментариев выкатить игру на Itchi - не пошло, даже в каталог не попал, в итоге решил убрать, т.к. и без этого мороки с публикацией обновлений полно.
Ещё была идея сделать фракцию Пикабу, с замком в виде кекса, королём Печенькой или Бровастиком. Может сделаю на эту тему отдельный пост, если есть интерес - накидайте идей. Ну Zatas, кастующий жаб каждую среду и проход в подземелье в виде ноздрей Olz это само собой. В общем, если интерес у Пикабу будет, могу сделать не просто рескин людей, а свою фракцию со своей логикой и фишками. Только пока я буду делать (это месяц минимум) может уже персонажи станут изгоями (что с чистоменом?) И какая фишка должна быть у Апреса?
Балансировка гномов, понятная инфографика и информация в окне дохода;
Кампания для сингла с подробным обучением;
Музыка и звуковые эффекты;
Размещение в Steam и VK.play;
Возможность воспроизводить реплей всей игры (для трансляции сетевых партий);
Здания и юниты для late game (дальнобойная артиллерия, титаны на 4х клетках);
Боссы с фазами боя;
Режим с волнами врагов;
Новые циклы для нейтралов (например, поселение хоббитов, которые должны отнести кольцо в вулкан);
Магия для героя.
Сообщество ВК: https://vk.com/pointboiling
На Яндексе: https://yandex.ru/games/app/345174?lang=ru
Ахтунг! Реклама каждые 20 ходов (это обычно половина или треть партии), на которой я правда ничего не зарабатываю, но надежда не умирает.