Хакер
Я что-то пропал отсюда... Был занят очень сложными хакерскими штучками
Я что-то пропал отсюда... Был занят очень сложными хакерскими штучками
Меня мало кто помнит но старички надеюсь пустят ностальгическую слезу. 8 лет назад здесь я кинул абсолютно безумный клич: "Буду обучать бесплатно любого желающего программированию". Я думал соберу человек 10 и в качестве хобби помогу людям. :))
Шут там, собралось почти 2000 человек и я провёл месяц без сна так, как проверял всем домашки и постоянно вёл лекции. И самое весёлое что это правда было просто хобби и я не взял ни рубля с людей а также не продавал никаких курсов. Странно это слышать в эру прогревов и теневых продаж, не правда ли?
Через 2 года после этих занятий я сел писать книгу по программированию на языке C# и благодаря участникам тех занятий мы собрали 85 000 рублей на написание на краудфандинге. Спустя 6 лет с того момента я закончил.
Книга научит вас языку программирования C# с самых основ через практику. Мы начнём с вами с переменных и закончим инкапсуляций техник динамического программирования в объектно-ориентированном дизайне (чтобы это не значило).
В книге получилось почти 400 страниц и вы можете забрать бесплатно PDF здесь - https://t.me/sakutin_csharp/2274
Спасибо Пикабу за всё!
Когда речь о заходит об игре, в которую можно играть бесконечно, то первым делом вспоминается Sims 3 и Sims 4. Типичный симулятор жизни, который постоянно модернизируется как разработчиками, так и самими игроками в помощью модов.
Но что, если попробовать создать игру в жанре action-adventure с элементами survival horror и стелс-экшена, сюжет которой будет адаптироваться под каждого игрока? И, по сути, быть бесконечным? Возможно ли такое?
В теории, да, но создание такой игры потребует максимально слаженной работы между дизайнерами, разработчиками и специалистами по ML. Для начала, нужно определить основные компоненты, которые сделают игру адаптивной и бесконечной.
Технически, игра должна иметь систему, способную анализировать действия игрока и принимать решения о том, какие события и персонажи будут включены в сюжет. Для этого могут использоваться алгоритмы кластеризации для анализа стилей игры, алгоритмы рекомендаций для выбора событий и персонажей, и алгоритмы управления поведением для создания реалистичных реакций на действия игрока.
Кроме того, игра должна иметь динамическую систему генерации контента, которая может создавать новые задания, уровни и персонажей в реальном времени. И здесь среди первых выступают алгоритмы процедурной генерации контента, потому что они могут создавать разнообразные игровые элементы на основе определенных параметров и правил.
Вроде бы всё понятно, но…
Именно об этом и стоит думать в первую очередь. Проблемы могут быть разные, но вот, к чему точно нужно быть готовым:
Сложность в адаптивности. Нужно создать систему, чтобы каждый игрок чувствовал, что игра адаптирована под него. Например, чтобы события в игре менялись в зависимости от того, как он играет. Это сложно, потому что нужно придумать способ, как игра "понимает" игрока и реагирует на его действия.
Вообще такие подходы развиваются в геймдеве, но вряд ли это экономически выгодно для компаний…
Создание такой игры может быть дорогостоящим и затратным процессом. Компании могут оказаться не готовыми к финансовым рискам, связанным с разработкой инновационных игровых концепций, особенно если нет гарантии коммерческого успеха.
Управление контентом. Игра должна быть интересной и разнообразной для каждого игрока. Но создание большого количества уровней, персонажей и сюжетов требует много работы. Команда должна будет постоянно добавлять новый контент, чтобы игроки не скучали.
В этом плане на первый план выходит процедурная генерация контента. Вопрос в том, как это должно работать, чтобы сам контент получился интересным и логичным…
Процедурная генерация контента — это крутая штука, которая позволяет создавать игровой контент с помощью алгоритмов и компьютерных программ, а не вручную. Это означает, что уровни, миры, персонажи и другие элементы игры могут быть созданы динамически во время игры, а не заранее.
Когда вы играете в игру с процедурной генерацией контента, вы никогда не знаете, что вас ждет.
Разработчики должны создать сложные алгоритмы и системы, чтобы гарантировать, что сгенерированный контент будет интересным и логичным. Они должны учитывать различные аспекты игры, такие как структура уровней, характеристики персонажей и задачи игрока.
А это сложно и неоправданно дорого, потому что всегда найдутся те, кому не понравится ничего.
Да и тестирование такой игры будет сложнее. Потому что каждый игрок может испытать разный игровой опыт. Команда должна будет тестировать игру нереальное количество раз, чтобы убедиться, что все работает правильно для всех игроков.
Возможно ли это? Да, только если у вас в команде очень много людей.
Количество сотрудников, необходимых для тестирования игры за два месяца, зависит от масштаба проекта, его сложности и доступных ресурсов. В среднем, для тестирования игр такого уровня сложности требуется команда из нескольких десятков человек, включая тестировщиков, QA-инженеров, разработчиков и дизайнеров уровней. Кроме того, могут потребоваться менеджеры проекта, аналитики и другие специалисты для координации и анализа работы.
Важно также учитывать, что время, необходимое для тестирования, зависит от объема контента в игре, количества возможных путей прохождения и степени автоматизации тестирования. Чем больше игра и чем больше в ней вариативности, тем больше времени и ресурсов потребуется для тестирования.
Но что, если она бесконечная? Тогда это большая проблема.
Не будем забывать и о том, что игра должна работать на всех устройствах и не тормозить. Потянут ли её домашние компьютеры пользователей, у которых нет доступа к GPU серверам? Вряд ли.
И, наконец, чтобы игра могла адаптироваться к каждому игроку, нужно обучить модели понимать, как играют люди. А это потребует очень высокий порог знаний в области ML и примерно столько же времени, как и создание самой игры.
Но главный вопрос: оправдает ли такая игра всех усилий, что были вложены в её разработку?
Сложно сказать. В конечном итоге, оценка оправданности игры будет зависеть от конкретных результатов ее выхода на рынок, отзывов пользователей и финансовых показателей.
Хайлайт из двухчасового интервью с основателем стартапа, который был продан Яндексу.
Полный разговор – https://youtu.be/sAkqTG5fKRc
Однажды в киоске самообслуживания KFC появилось вот такое:
Самое смешное, что в интернете задавали вопрос с такой проблемой и получали ответ. Кажется у кого-то сильно горели дедлайны...
Их есть у нас! Красивая карта, целых три уровня и много жителей, которых надо осчастливить быстрым интернетом. Для этого придется немножко подумать, но оно того стоит: ведь тем, кто дойдет до конца, выдадим красивую награду в профиль!
Привет тебе, всякий читающий! Сегодня расскажу о том, как я проводил оптимизацию одного из своих сайтов с нуля, чего в результате добился, и для чего это вообще всё надо.
Результат оптимизации сайта
Есть сайт на PHP 8.1, Laravel. Под базу взят PostgreSQl. На фронте нативный JS. За основу взят шаблон от Metronic, дабы не делать всё с нуля.
Страниц на сайте больше 2 миллионов. Контент собирался в результате сбора информации с множества источников.
Первоначальная оценка по Google Page Speed была не очень - 36 на мобильных устройствах и 80 на компьютере.
Это мобилки
Это компьютер
Вроде бы на компьютерах выглядит всё адекватно, но не тут то было. Сейчас все поисковики смотрят скорость именно по мобильным устройствам и акцент делают именно на них.
Наша цель - довести показатели на мобилках до максимума.
Поехали проводить аналитику по шагам.
Идём на гитхаб и устанавливаем через композер расширение. Там всего пару кликов, каждый уважаемый программист сделает самостоятельно.
После успешной установки при заходе на страницу (не забудьте в настройках в файле .env поставить APP_DEBUG=true) внизу слева страницы появится иконочка, при клике на которую откроется панель с кучей вкладок.
Залазим во вкладку Queries и смотрим все запросы, которые есть на странице. Получается что-то такое.
Красным отмечена суммарная продолжительность выполнения.
Я использую PHPStorm для работы с базой. Вы же можете использовать что-то иное, это не принципиально.
На этой вкладке нужно проанализировать вызов запросов. Для начала я увидел, что при выводе списка статей в цикле вызывается ещё один дополнительный запрос. Сделал всё в 1 запросе. Это практически минус 12 запросов со страницы. Такие моменты нужно анализировать глазками и оптимизировать под каждый проект самостоятельно.
Далее я взял КАЖДЫЙ запрос и проанализировал план его выполнения. Вот пример:
Смотрим здесь Total Cost
Как видим здесь нет никаких индексов. Лечится это легко. Смотрим по каким полям у нас происходят условия и с какой сортировкой. Затем создаём индекс по этим полям и смотрим результат. Вот что получилось у меня:
А вот результат после создания индексов
Мы оптимизировали запрос с 17к до 207. И это только один пример.
Вот пример простейшего запроса без индекса
А вот результат после создания индекса
Так мы должны пройти по каждому запросу на каждой странице и проанализировать их работу. Вполне возможно, что можно отказаться от каких-то таблиц, лишних джоинов и т.д.
Ещё я советую проанализировать таблицы, которые можно было бы разбить на партиции.
Пример: у нас есть аналитика по годам в одной таблице с 1 миллионом записей. Вы постоянно забираете аналитику на текущий год и выводите пользователю. Здесь так и напрашивается деление таблицы по годам, а может даже и по месяцам. В результате запрос будет идти по ограниченному набору данных, а не по всем данным за всё время.
Результат после оптимизации запросов
Как видим уже есть сподвижки. Работаем дальше.
Сайт грузит очень большое количество различных картинок, css'ов и js'ов. Пришла мысль всё это дело закешировать, чтобы быстро отдавать из оперативной памяти, а не лезть на жёсткий диск.
Для своих проектов я использую VarnishCache, т.к. уже привык и у него очень гибкая настройка.
Если вы используете Laravel, то есть вот такое расширение, чтобы подружить варниш с ларкой:
А вот здесь есть классное руководство по настройке:
А вот ещё ссылочка с конфигом. Если у вас другая версия варниша - поменяйте в урле версию и будет вам счастье.
Я добавил в кеш все js, css и картинки. Будьте крайне внимательны с настройкой. Можно, например, закешировать POST-запросы с формами или какие-то JSON-Ответы. Советую прогонять тестами сайты после добавления таких модулей.
Здесь шаг очень простой. Нужно проанализировать утилизацию ресурсов на вашем сервере. Посмотрите сколько используется процессора, памяти, места. Я на этом этапе просто взял и купил сервер в 2 раза мощнее, дабы мне хватило ресурсов с лихвой.
У меня в проекте использовался дефолтно сборщик webpack и правила на нём были крайне простыми - берём все файлы и засовываем в единый файл bundle.
Представьте, что на КАЖДОЙ странице забираются все js-библиотеки и css. Это очень сильно усложняет вывод страницы, при этом делает работу программиста легче. Не надо думать что и когда подрубить. Просто подключаешь любую компоненту и она работает! Ну не прелесть ли. Но не для поисковиков.
Пришлось переписать сборку. В результате теперь вместо одного большого файла у меня будет парочка сотен небольших. При этом нужно следить за последовательностью их подключения, переписать все страницы и т.д. Да, переписывать готовый проект очень сложно, и очень велика вероятность ошибки. Но на то мы и специалисты, чтобы делать всё качественно, не правда ли?
Классным дополнением будет пул коннектов к базе. Для PostgreSQL я использую PgBouncer. Можете скачать по ссылке ниже.
Пул коннектов позволяет держать постоянные соединения с базой данных для уменьшения потерь при подключений к ней. Вот здесь можете почитать официальную документацию:
Я установил расширение на Laravel для отлова мобильных устройств. качал отсюда:
Далее в коде для мобилок сделал другую вёрстку, более простую, чем в версии для компьютеров. Вырезал половину анимации, блоки с картой, ненужные слайдеры. Такой вариант поможет уменьшить DOM страницы и ускорит её отображение.
Смотрим полученный результат
Можно ещё пытаться оптимизировать файлы и запросы. Я не использовал Reddis для кеширования запросов, но вы можете тоже использовать этот метод.
По капельке можно легко оптимизировать большинство страниц. Благодаря такому подходу ваши сайты смогут быстро улучшить свои позиции в выдаче и увеличить конверсию.
Буду благодарен за подписку на мой tg-канал, если материал был полезен.