ASCII-Nova 🇺🇦
92 subscribers
1K photos
42 videos
9 files
440 links
предложка: @ascii_nova_suggest_bot

Гиковство && занудство, инди-музыка, геймдев и непрошенные советы

Чат, где мы обсуждаем код и всё около него: @ascii_nova_chat
Download Telegram
Йоу-йоу! Меня зовут Дима и я программист из Киева

Не умею начинать и заканчивать общение, поэтому сразу к делу — завёл этот канал, чтобы делиться и обсуждать с вами:

- разные глубокие и не очень аспекты программирования
- интересную инди-музыку, которую буду находить
- оставившие отпечаток авторские фильмы
- затянувшие игры
- улыбнувшие мемы

Постепенно в канале появятся теги к постам, и (я надеюсь!) более явная тематика, чем просто "все мои интересы"
🔥21🫡1
Последнее время, чтобы немного разогнать мозги и отвлечься, размышляю над инди игровым проектом, который хочу попробовать сделать. Вкратце я бы его описал следующим образом:

Процедурно-генерируемая MMORTS, с постоянно живущим миром, в которой вместо мышки мы управляем игрой при помощи написания кода.

Немного деталей:
1) Игровой код будет писаться на JavaScript (позже на Lua, Python, WASM)
2) Загруженный код, управляющий игрой, не будет останавливаться, даже если игрок оффлайн
3) Поскольку я не художник, графика будет максимально простой

Какие могут цели в игре?
1) Программирование в игровой живой форме, с сразу видимым на экране результатом
2) Сражения с периодически возникающими волнами врагов
3) В дальнейшем взаимодействие между игроками, для объединений или атак друг на друга



Проект очень объёмный, поэтому быстрого очень прогресса ожидать не стоит — попробую сосредоточится на прототипе и постараюсь писать заметки по ходу дела
🔥3👍1🫡1
Обычно, Rogue-like игры имеют поле квадратное, но я решил ради интереса попробовать сделать из шестиграников (хексагонов)

В поисках описаний алгоритмов для поиска пути (A*) для сеток из хексов, наткнулся на статью https://www.redblobgames.com/grids/hexagons/ от Amit Patel.

Просто потрясающая статья да и сам блог с прекраснейшими объяснениями разных алгоритмов, нужных для геймдева, и их интерактивной визуализацией
🔥3🫡1
ASCII-Nova 🇺🇦 pinned «Йоу-йоу! Меня зовут Дима и я программист из Киева Не умею начинать и заканчивать общение, поэтому сразу к делу — завёл этот канал, чтобы делиться и обсуждать с вами: - разные глубокие и не очень аспекты программирования - интересную инди-музыку, которую…»
2023-06-08 15-28-46.webm
79.4 MB
Записал небольшое видел на тему git, по просьбе

Скину еще и сюда, кому-то может оказаться полезным + будет как архив

Что в видео:
- Как изменить существующий коммит в ветке
- Почему это бывает нужно
- Какие есть способы это сделать
- Как сделать через GUI (на примере Jetbrains IDE)
- Как сделать через терминал

Для миддлов+ рассказы про interactive git rebase это известные вещи, а тем кто знакомиться и учиться может быть оч полезно

PS. Я не часто пишу скринкасты, поэтому советую смотреть на х1.5-2, т.к. кажется что медленно говорю
👍2🫡211
Небольшие весточки с полей

Закончил более-менее начальный вариант обёртки над js-движком (v8). Теперь можно создавать много разных сред параллельно существующих сред выполнения, которые не влияют друг на друга. Примерно также работают вкладки в браузере, только менее изолировано, исходя из v8 API (на удивление!).

На 1-3 скринах видно, как выполняется код, запоминает прошлое выполнение и не падает от внутренних ошибок (что особенно важно, т.к. что живёт в песочнице, ни в коем образе не должно влиять на сам сервер/приложение).
🏆3🔥1
ASCII-Nova 🇺🇦
Небольшие весточки с полей Закончил более-менее начальный вариант обёртки над js-движком (v8). Теперь можно создавать много разных сред параллельно существующих сред выполнения, которые не влияют друг на друга. Примерно также работают вкладки в браузере,…
Конечно знатно местами взрывался мозг от v8 API (4 скрин), где всё нужно оборачивать в разные scope: HandleScope, TryCatchScope, ContextScope, etc. Оно вроде бы логично, т.к. в JS есть сборщик мусора, который всё чистит внутри себя и у себя, но вообще беспомощен, когда его просят убрать за его пределами.

Это правильно и очевидно, т.к. на то среда JS и называется управляемой (managed), а нативный код неуправляемым (unmanaged). Благо всё же управлять им получается после чтения документации и пережитой боли от 100ни неудачных компиляций и 1000 запросов в гугл, чтобы понять, что нужно просто читать документацию внимательно. Ладно, это всё шутки. Нужно было читать еще исходники deno и прочих проектов, чтобы понять, как это использовать :)

Если пару слов про v8 API и почему так всё обстоит: к каждому scope привязываются JS объекты. Как только мы "отдаляемся" от нашего конкретного scope'а (выходим за пределы области видимости, например выходим из функции где он располагается), то происходит маркировка созданных JS объектов как готовых к очистке при помощи сборщика мусора.

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

В этом кстати, плюс Rust — если бы я писал на С++, то вместо ошибок компиляции, ловил бы креши и вспоминал, почему я не люблю и перестал на них писать после долгой работы
🤯1😱1🥴1
ASCII-Nova 🇺🇦
Небольшие весточки с полей Закончил более-менее начальный вариант обёртки над js-движком (v8). Теперь можно создавать много разных сред параллельно существующих сред выполнения, которые не влияют друг на друга. Примерно также работают вкладки в браузере,…
Кстати, вопрос пишущим на JS:

Мне необходимо ограничить всячески любое асинхронное взаимодействие. Я выпилил setInterval, setTimeout, частично Promise*. Но на этом моя фантазия сегодня закончилась

Как еще можно порождать асинхронный/отложенный код в JS? Напишите в комментариях идеи/мысли пж

* Частично, т.к. асинхронные функции в результате вызова дают Promise. Пока не придумал что с этим делать :(

UPD: перепроверил, спасибо за советы!
🤔2👍1
Очередная подтверждение для меня, почему я с уважением отношусь к сони (да, я сонибой, если вы забыли).

Каждый месяц, они оплачивают мне подписку на сетевые сервисы (причём не самую дешевую, а с огромным каталогом игр)

Сони ван лав
🕊6
ASCII-Nova 🇺🇦
Кстати, вопрос пишущим на JS: Мне необходимо ограничить всячески любое асинхронное взаимодействие. Я выпилил setInterval, setTimeout, частично Promise*. Но на этом моя фантазия сегодня закончилась Как еще можно порождать асинхронный/отложенный код в JS?…
Пишу сейчас асинхронный рантайм сервера (+ пуллпотоков для тяжёлых задач) и подумал, а сколько времени все "тесты" выполняются

Ожидал конечно, миллисекунды, но когда увидел (!) микросекунды (а это напомню 0.000_001 секунды!) вообще удивился

Вау *-*

UPD: это еще дебаг билд, в релизе на 150-300µs быстрее — ~400-500µs
👏3😱1
Сегодня планировал написать небольшой пост про асинхронные рантаймы в Rust, но пока что не срослось

Поэтому, чтобы отвлечься хочу поделиться находкой в инструментальной музыке:

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

Трек Early Summer из альбома Scenery (シーナリィ) просто невероятный!
2❤‍🔥1👍1
Начиная с этой пятницы, будет новая рубрика: веб-комикс, который меня тронул. может даже, дважды в неделю
👍1🤗1
(с) PBFcomics
👍2🤔1