Forwarded from Подгорица News 💙
Подгорица стала самым дешевым городом Европы
Британское издание Mirror заявило, что провести два дня в Подгорице в пять раз дешевле, чем в Швейцарии.
Так, двухдневный отдых в Подгорице может обойтись всего в 222 фунта стерлингов (примерно 250 евро): перелет на двоих туда-обратно, такси, питание, просмотр достопримечательностей, две ночи в отеле. В Швейцарии то же самое обойдется в 1022 фунта стерлингов.
По оценке Mirror, Подгорица может похвастаться сочетанием старой и новой архитектуры богатой историей и культурой. А ещё: парки, потрясающие виды на реку и одни из лучших ночных клубов на Балканах.
А вот рейтинг самых дешевых городов Европы, если сравнивать цены на двухдневный отдых.
1. Подгорица, Черногория: 222,03 фунта стерлингов.
2. Скопье, Северная Македония: 273,87 фунтов стерлингов.
3.Дебрецен, Венгрия: 303,80 фунтов стерлингов.
4. Сегед, Венгрия: 322,85 фунтов стерлингов.
5. Варшава, Польша: 326,96 фунтов стерлингов.
Подгорица News
Британское издание Mirror заявило, что провести два дня в Подгорице в пять раз дешевле, чем в Швейцарии.
Так, двухдневный отдых в Подгорице может обойтись всего в 222 фунта стерлингов (примерно 250 евро): перелет на двоих туда-обратно, такси, питание, просмотр достопримечательностей, две ночи в отеле. В Швейцарии то же самое обойдется в 1022 фунта стерлингов.
По оценке Mirror, Подгорица может похвастаться сочетанием старой и новой архитектуры богатой историей и культурой. А ещё: парки, потрясающие виды на реку и одни из лучших ночных клубов на Балканах.
А вот рейтинг самых дешевых городов Европы, если сравнивать цены на двухдневный отдых.
1. Подгорица, Черногория: 222,03 фунта стерлингов.
2. Скопье, Северная Македония: 273,87 фунтов стерлингов.
3.Дебрецен, Венгрия: 303,80 фунтов стерлингов.
4. Сегед, Венгрия: 322,85 фунтов стерлингов.
5. Варшава, Польша: 326,96 фунтов стерлингов.
Подгорица News
❤1👍1
#проекты #common_lisp
Вот уже третью неделю по утрам занимаюсь тем, что выпиливаю из своего проекта d2clone-kit код, реализующий паттерн Entity-Component-System в отдельную библиотеку с пермиссивной лицензией, которую можно будет использовать в других проектах, и стримлю процесс на Twitch (записи не выкладываю, но вот-вот найду время на монтаж недлинного видео-нарезки).
Рабочее название библиотеки, или, скорее, мини-фреймворка —
По ходу реализации понял, что для наибольшего быстродействия придётся изменить схему хранения, со sparse array в терминологии г-на Мишеля Каини, автора аналогичной библиотеки EnTT для C++, на big matrix в его же терминологии. Первая позволяет экономить память, при этом продолжая почти также эффективно утилизировать кэш процессора, но возникают проблемы, если нужно перебрать несколько разных аспектов данных (компонентов в терминологии ECS) у объектов одновременно — при этом паттерн доступа к памяти оказывается таким же хаотичным, как и без всяких этих наших ECS. Более того, аналогичные проблемы возникнут и тогда, когда понадобится обратный индекс, т.е. возмножность по конкретному значению поля компонента получить один или несколько объектов, которым оно принадлежит, — такое может быть полезно для реализации имён объектов, или взаимоотношений между объектами (например, родитель ⇿ дочерний объект).
Помимо sparse array, есть вариант реализации под названием archetype, он используется в сишной библиотеке Flecs, но этот вариант довольно сложен в реализации, мне не кажется, что я бы его потянул в какое-то разумное время. Остаётся третий, самый простой вариант, именуемый big array или big matrix, в котором данные объектов просто сваливаются в огромные массивы соответствующих типов, по длине равные количеству объектов в игре, и насрать, если не у каждого объекта есть все аспекты данных (компоненты). Понятное дело, что память при этом расходуется чудовищно неэффективно, по моим примерным прикидкам, в типичной среднего размера игре с двумя сотнями разных компонентов, каждый из которых содержит в среднем по пять полей данных, на каждый объект будет расходоваться где-то по 8 килобайт памяти, т.е. миллион объектов — и вот игра уже выжрала 8 гигабайт 😅 Зато быстродействие у этого метода самое непревзойдённое, никаких лишних хопов по памяти, всё оседает в L1/L2/L3 кэшах, красота кругом. Можно даже решить проблему с излишней памятью, добавив механизм разбиения массивов с данными компонентов на "страницы", но это я решил отложить на будущее.
Решив поменять внутреннее устройство, понял, что и без тестового фреймворка не обойтись, несмотря на то, что я обычно свято следую принципу "I don't always test my code, but when I do, I do it in production". В качестве такового взял rove г-на Фукамачи, благо он довольно симпатично выглядит и входит в состав шаблона проекта, сгенерированного для меня его же утитилой cl-project. Как всегда у г-на Фукамачи, не обошлось без косяков — из командной строки тесты почему-то не запускаются, приходится запускать лисповый файл с одной-единственной формой
К чему я затеял этот суб-проект — надеюсь, в этом году будет проводиться ежегодный Lisp Game Jam, на котором удастся повыделываться этой своей библиотекой 😊 Собственно, задача-максимум — повторить вот эту дёмку, сделанную на Flecs, и сравнить быстродействие, — очень уж хочется показать, что Common Lisp по производительности может дышать в спину чистому C и потому вполне себе пригоден для геймдева 🔥
Вот уже третью неделю по утрам занимаюсь тем, что выпиливаю из своего проекта d2clone-kit код, реализующий паттерн Entity-Component-System в отдельную библиотеку с пермиссивной лицензией, которую можно будет использовать в других проектах, и стримлю процесс на Twitch (записи не выкладываю, но вот-вот найду время на монтаж недлинного видео-нарезки).
Рабочее название библиотеки, или, скорее, мини-фреймворка —
cl-fast-ecs. Паттерн ECS, в свою очередь, необходим для того, чтобы хранить и обрабатывать игровые объекты таким образом, чтобы обеспечивать максимальное быстродействие, собственно, главная его идея состоит в хранении логически взаимосвязанных данных игровых объектов последовательно в памяти, чтобы расчёсывать кэш процессора вдоль шёрстки 😽По ходу реализации понял, что для наибольшего быстродействия придётся изменить схему хранения, со sparse array в терминологии г-на Мишеля Каини, автора аналогичной библиотеки EnTT для C++, на big matrix в его же терминологии. Первая позволяет экономить память, при этом продолжая почти также эффективно утилизировать кэш процессора, но возникают проблемы, если нужно перебрать несколько разных аспектов данных (компонентов в терминологии ECS) у объектов одновременно — при этом паттерн доступа к памяти оказывается таким же хаотичным, как и без всяких этих наших ECS. Более того, аналогичные проблемы возникнут и тогда, когда понадобится обратный индекс, т.е. возмножность по конкретному значению поля компонента получить один или несколько объектов, которым оно принадлежит, — такое может быть полезно для реализации имён объектов, или взаимоотношений между объектами (например, родитель ⇿ дочерний объект).
Помимо sparse array, есть вариант реализации под названием archetype, он используется в сишной библиотеке Flecs, но этот вариант довольно сложен в реализации, мне не кажется, что я бы его потянул в какое-то разумное время. Остаётся третий, самый простой вариант, именуемый big array или big matrix, в котором данные объектов просто сваливаются в огромные массивы соответствующих типов, по длине равные количеству объектов в игре, и насрать, если не у каждого объекта есть все аспекты данных (компоненты). Понятное дело, что память при этом расходуется чудовищно неэффективно, по моим примерным прикидкам, в типичной среднего размера игре с двумя сотнями разных компонентов, каждый из которых содержит в среднем по пять полей данных, на каждый объект будет расходоваться где-то по 8 килобайт памяти, т.е. миллион объектов — и вот игра уже выжрала 8 гигабайт 😅 Зато быстродействие у этого метода самое непревзойдённое, никаких лишних хопов по памяти, всё оседает в L1/L2/L3 кэшах, красота кругом. Можно даже решить проблему с излишней памятью, добавив механизм разбиения массивов с данными компонентов на "страницы", но это я решил отложить на будущее.
Решив поменять внутреннее устройство, понял, что и без тестового фреймворка не обойтись, несмотря на то, что я обычно свято следую принципу "I don't always test my code, but when I do, I do it in production". В качестве такового взял rove г-на Фукамачи, благо он довольно симпатично выглядит и входит в состав шаблона проекта, сгенерированного для меня его же утитилой cl-project. Как всегда у г-на Фукамачи, не обошлось без косяков — из командной строки тесты почему-то не запускаются, приходится запускать лисповый файл с одной-единственной формой
(asdf:test-system :cl-fast-ecs).К чему я затеял этот суб-проект — надеюсь, в этом году будет проводиться ежегодный Lisp Game Jam, на котором удастся повыделываться этой своей библиотекой 😊 Собственно, задача-максимум — повторить вот эту дёмку, сделанную на Flecs, и сравнить быстродействие, — очень уж хочется показать, что Common Lisp по производительности может дышать в спину чистому C и потому вполне себе пригоден для геймдева 🔥
🔥3👍1🤔1
Forwarded from RUGAMES.ME Черногория, Подгорица
Сегодня в нашем клубе прошло интересное мероприятие с Warhammer Montenegro. Всем, кто пришел и поддерживает направление настольных игр, огромное спасибо. Будем рады вас видеть на дальнейших встречах =)
🔥2
#лытдыбр
Вчера впервые сыграл в настольный вархаммер, пусть и не "большой" 40k, а Underworlds, но все равно очень понравилось 😊 Спасибо организаторам ❤️
Вчера впервые сыграл в настольный вархаммер, пусть и не "большой" 40k, а Underworlds, но все равно очень понравилось 😊 Спасибо организаторам ❤️
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
#лытдыбр #common_lisp #видео
На своём утреннем стриме, потихоньку проникаясь Test-Driven Development (моего внутреннего перфекциониста-аутиста очень радует превращать свеженаписанные проваливающиеся тесты в вереницу зелёненьких), наткнулся на уморное сообщение от компилятора SBCL, см. видос.ЛЕКСИЧЕСКОЕ ОКРУЖЕНИЕ СЛИШКОМ ВОЛОСАТОЕ, КАРЛ!
На своём утреннем стриме, потихоньку проникаясь Test-Driven Development (моего внутреннего перфекциониста-аутиста очень радует превращать свеженаписанные проваливающиеся тесты в вереницу зелёненьких), наткнулся на уморное сообщение от компилятора SBCL, см. видос.
❤1
#лытдыбр
Спам категории «фэнтези»: г-н Кадзухиро Токимаса из ЯНДЕКСа пишет с домена outlook.com и предлагает присоединиться к его команде за щедрое вознаграждение в размере 2000 рублей в день. В принципе, уровень зарплаты как раз яндексовский, но в остальном, конечно, эклектика
Спам категории «фэнтези»: г-н Кадзухиро Токимаса из ЯНДЕКСа пишет с домена outlook.com и предлагает присоединиться к его команде за щедрое вознаграждение в размере 2000 рублей в день. В принципе, уровень зарплаты как раз яндексовский, но в остальном, конечно, эклектика
❤1🔥1
#лытдыбр #common_lisp
Джоба успешно закончилась, а таймер всё тикает. Я смотрю, Gitlab меня решил на счётчик поставить 😂
Джоба успешно закончилась, а таймер всё тикает. Я смотрю, Gitlab меня решил на счётчик поставить 😂
😁1
#лытдыбр #common_lisp #проекты
На протяжении уже пары недель маниакально работал, чтобы вчера выпустить версию
Пока там только базовая функциональность, но я продолжаю маньячить над кодом на утренних стримах 😅
На протяжении уже пары недель маниакально работал, чтобы вчера выпустить версию
0.1.1 своего мини-фреймворка для паттерна Entity-Component-System на Common Lisp: https://gitlab.com/lockie/cl-fast-ecsПока там только базовая функциональность, но я продолжаю маньячить над кодом на утренних стримах 😅
GitLab
Andrew Kravchuk / cl-fast-ecs · GitLab
Blazingly fast Entity-Component-System microframework ⚡📦 https://awkravchuk.itch.io/cl-fast-ecs
❤4
#лытдыбр
Дожили, использую ЧятЖПТ, чтобы придумывать имена переменным 😅 Как известно, именование — одна из двух самых сложных проблем в программировании, наряду с инвалидацией кэшей и off-by-one-error, так что не грех для этого использовать математическую модель с миллиардами параметров)
Довольно интересный экспириенс, оно не даёт каких-то внятных, готовых к использованию ответов, но по мере того, как пытаешься сформулировать правильный промпт, сам начинаешь понимать, что же тебе нужно, и вот уже оно становится не нужно 😁
Дожили, использую ЧятЖПТ, чтобы придумывать имена переменным 😅 Как известно, именование — одна из двух самых сложных проблем в программировании, наряду с инвалидацией кэшей и off-by-one-error, так что не грех для этого использовать математическую модель с миллиардами параметров)
Довольно интересный экспириенс, оно не даёт каких-то внятных, готовых к использованию ответов, но по мере того, как пытаешься сформулировать правильный промпт, сам начинаешь понимать, что же тебе нужно, и вот уже оно становится не нужно 😁
👍1