Полезный скрипт от моего товарища, который нас не раз выручал. Позволяет восстанавливать удаленные ветки в git. 🔓
#programming #git #scripts
#programming #git #scripts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Forwarded from Nikolay Bulatov
# покажет вам все коммиты на кончиках вашего графика фиксации, которые больше
# не ссылаются ни на одну ветку, ни на тег
git fsck --no-reflog | awk '/dangling commit/ { print $3}'| xargs -I %m git show -s --format="%h - %ci %s" %m
# Вернуть как ветку
git branch recover-branch ab1afef
# Преобразовать ветку в stash
git stash apply recover-branch
git stash
🔥2👍1
Проблема абстрактного метавёрса
Основная жалоба со стороны пользователей, как и у большинства метавселенных, — "а что тут делать?".🤷♀️
Поэтому я решил добавить в игру конкретные занятия: от простых, но эффективных (с точки зрения конверсии и удержания), до сложных и захватывающих. Подробности пока разглашать не буду. Разработка построена так, чтобы с минимальными усилиями (учитывая, что команда разработки сейчас - это я один) создать базовую версию игры. Она должна поддерживать онлайн-активность, и постепенно дополняться новыми фичами. Главная идея - создать замкнутую экономику с продуманной циркуляцией ресурсов и игровой валюты, параллельно предложив увлекательный и социально-ориентированный геймплей.
Приоритеты
Система матчмейкинга, отвечающая за запуск и остановку серверов в рамках Kubernetes кластера у меня уже есть и работает. Также сам кластер позволяет гибко масштабировать проект: при развёртывании в облаке
добавляются ноды по мере роста нагрузки, поддерживая требуемые мощности и количество игроков. Поэтому важнейшая задача на данный момент - имплементация игрового сервера с ключевыми системами, отражаемыми в клиенте.
Решение
Для серверной части я выбрал язык C. До этого на нём я писал только небольшие эксперименты, но мне давно хотелось попробовать что-то серьёзное (аж руки чесались ) 🧑💻 . Ведь именно на C созданы многие фундаментальные библиотеки, на которых построено практически всё, что мы знаем (zlib, openssl, libpng, и прочие). Я решил что это будет отличным опытом, особенно учитывая что на C также создавались культовые игры Doom, Quake, Half-Life, Counter-Strike, WarCraft и многие другие. Кроме того, C всё-таки очень простой в сравнении с другими языками, и количество абстракций сведено к минимуму, что мне тоже нравится. Что из этого выйдет - посмотрим, но пока всё получается, всё очень интересно и приносит ощутимый опыт. 🌡
Большой рефакторинг
Так начался перенос логики игры с JS на C.👉
Чтобы освоить C, я сделал несколько тестов с ключевыми системами игры в виде отдельных систем. Первым делом - генерация подземелий. У меня уже был JS-код, генерирующий детерминированные подземелья по заданному сиду.
Если коротко, то переносить код с JS на C было не так сложно, как я предполагал изначально.Систему генерации подземелий на JS я писал около 2-3 недель, мучаясь с отладкой. На C я всё переписал в течение недели.
Перенос генерации подземелий
Код Mersenne Twister мне помог Copilot буквально за несколько минут⬆️ , этот алгоритм я использую для генерации детерминированных (с указанным сидом) целых чисел, чисел с плавающей точкой, цветов и других данных.
Далее потребовалась загрузка конфигурации для особых миров (таких как центральный мир, где появляются новые игроки при логине). С этим отлично справилась библиотека cJSON. Работать с ней оказалось проще, чем, например, с JSON в Unreal Engine, и конфигурации миров стали быстро загружаться в соответствующие структуры.
Потом я реализовал динамические массивы для хранения данных генерации (изначально - отдельный под каждую структуру ). Когда их стало несколько, я объединил их в одну универсальную структуру с использованием
Для визуализации подземелий использовал libpng, которая позволила наконец-то увидеть подземелья в виде картинок вместо анализа JSON матриц на десятки тысяч элементов 👀 в NodeJS. Это значительно упростило отладку.
На C были переписаны и оптимизированы функции для создания подземелий:
- Генерация шума - изначальная генерация детерминированной карты с заданными параметрами;
- Сглаживание шума - создание стен и пустот, которые образую комнаты и коридоры;
- Определение изолированных областей - выделение и отсеивание слишком мелких регионов;
- Соединение комнат - нахождение и соединение ближайших комнат в единую сеть;
- Расположение игровых объектов - добавление руды, монстров, и четырёх порталов в каждом подземелье (по 4 сторонам квадрата ).
#minercaravan
Основная жалоба со стороны пользователей, как и у большинства метавселенных, — "а что тут делать?".
Поэтому я решил добавить в игру конкретные занятия: от простых, но эффективных (с точки зрения конверсии и удержания), до сложных и захватывающих. Подробности пока разглашать не буду. Разработка построена так, чтобы с минимальными усилиями (учитывая, что команда разработки сейчас - это я один) создать базовую версию игры. Она должна поддерживать онлайн-активность, и постепенно дополняться новыми фичами. Главная идея - создать замкнутую экономику с продуманной циркуляцией ресурсов и игровой валюты, параллельно предложив увлекательный и социально-ориентированный геймплей.
Приоритеты
Система матчмейкинга, отвечающая за запуск и остановку серверов в рамках Kubernetes кластера у меня уже есть и работает. Также сам кластер позволяет гибко масштабировать проект: при развёртывании в облаке
добавляются ноды по мере роста нагрузки, поддерживая требуемые мощности и количество игроков. Поэтому важнейшая задача на данный момент - имплементация игрового сервера с ключевыми системами, отражаемыми в клиенте.
Решение
Для серверной части я выбрал язык C. До этого на нём я писал только небольшие эксперименты, но мне давно хотелось попробовать что-то серьёзное (
Большой рефакторинг
Так начался перенос логики игры с JS на C.
Чтобы освоить C, я сделал несколько тестов с ключевыми системами игры в виде отдельных систем. Первым делом - генерация подземелий. У меня уже был JS-код, генерирующий детерминированные подземелья по заданному сиду.
Если коротко, то переносить код с JS на C было не так сложно, как я предполагал изначально.
Перенос генерации подземелий
Код Mersenne Twister мне помог Copilot буквально за несколько минут
Далее потребовалась загрузка конфигурации для особых миров (таких как центральный мир, где появляются новые игроки при логине). С этим отлично справилась библиотека cJSON. Работать с ней оказалось проще, чем, например, с JSON в Unreal Engine, и конфигурации миров стали быстро загружаться в соответствующие структуры.
Потом я реализовал динамические массивы для хранения данных генерации (
void* и вспомогательных функций. Это было хорошим упражнением в работе с указателями.Для визуализации подземелий использовал libpng, которая позволила наконец-то увидеть подземелья в виде картинок вместо анализа JSON матриц на десятки тысяч элементов 👀 в NodeJS. Это значительно упростило отладку.
На C были переписаны и оптимизированы функции для создания подземелий:
- Генерация шума - изначальная генерация детерминированной карты с заданными параметрами;
- Сглаживание шума - создание стен и пустот, которые образую комнаты и коридоры;
- Определение изолированных областей - выделение и отсеивание слишком мелких регионов;
- Соединение комнат - нахождение и соединение ближайших комнат в единую сеть;
- Расположение игровых объектов - добавление руды, монстров, и четырёх порталов в каждом подземелье (
#minercaravan
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2🔥1
Немного про CMake
Переход на C потребовал также повозиться с системой сборки. Мне нужно было не просто собрать проект, но и иметь возможность отлаживать не только собственный код, но и код используемых библиотек (а также я хотел их собирать с нужными мне оптимизациями под целевое железо ). Системные библиотеки мне для этого не подходили, поэтому я изучил возможности CMake, а именно — модуль ExternalProject. Этот модуль позволяет добавлять дополнительные проекты как зависимости (напрямую из репозиториев, оно само их клониует при сборке), и CLion (который я использую) распознаёт их как отдельные сборочные конфигурации, что заметно облегчает отладку и сборку.
ExternalProject оказался удачным выбором для построения дерева зависимостей: легко добавить как стандартные библиотеки, так и header-only библиотеки. Приходится писать конфигурацию вручную для каждой библиотеки, но это буквально copy-paste с небольшими правками.
Так как целевая платформа у меня одна — Linux/Unix, поддержку кроссплатформенности (Windows) я оставил за кадром. Из-за установки зависимостей в(в частности, OpenSSL), т.к. система также использует этот путь для поиска .so . Но на данный момент это не критично, так как проект работает в WSL (а деплоиться будет в поды в кластере). Версию OpenSSL можно было бы согласовать с системной, но мы ведь не ищем легких путей, верно?
Пример
Листинг файла CMakeLists.txt:
Листинг файла cmake/zlib.cmake:
Путь установки библиотеки можно изменить с
#cmake #minercaravan
Переход на C потребовал также повозиться с системой сборки. Мне нужно было не просто собрать проект, но и иметь возможность отлаживать не только собственный код, но и код используемых библиотек (
ExternalProject оказался удачным выбором для построения дерева зависимостей: легко добавить как стандартные библиотеки, так и header-only библиотеки. Приходится писать конфигурацию вручную для каждой библиотеки, но это буквально copy-paste с небольшими правками.
Так как целевая платформа у меня одна — Linux/Unix, поддержку кроссплатформенности (Windows) я оставил за кадром. Из-за установки зависимостей в
/usr/local у меня возникают некоторые конфликты с системными библиотеками Пример
Листинг файла CMakeLists.txt:
cmake_minimum_required(VERSION 3.22)
project(mc_game_server C)
include(ExternalProject)
# Включаем файл, в котором у нас настроена сборка zlib.
include(${CMAKE_SOURCE_DIR}/cmake/zlib.cmake)
# ... (omitted)
target_include_directories(myapp PRIVATE
/usr/local/include
${CMAKE_SOURCE_DIR}/src)
target_link_libraries(myapp PRIVATE
m
-Wl,--start-group # Разрешение зависимостей
${ZLIB_LIBRARY}
# ... (omitted)
-Wl,--end-group
)
Листинг файла cmake/zlib.cmake:
include(ExternalProject)
#region Zlib
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
message(STATUS "zlib: Building in Debug mode")
set(ZLIB_C_FLAGS "-O0 -g -mavx -mavx2 -ftree-vectorize -march=native")
else ()
message(STATUS "zlib: Building in Release mode")
set(ZLIB_C_FLAGS "-O3 -mavx -mavx2 -ftree-vectorize -march=native")
endif ()
ExternalProject_Add(
zlib
PREFIX /usr/local/src/zlib # Install source code to this directory
GIT_REPOSITORY git@github.com:madler/zlib.git
GIT_TAG v1.3.1
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=/usr/local # Install to this directory
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} # Build type
-DCMAKE_C_FLAGS=${ZLIB_C_FLAGS} # C flags
-DZLIB_BUILD_EXAMPLES=0 # Don't build examples
BUILD_COMMAND ${ZLIB_BUILD_COMMAND}
INSTALL_COMMAND cmake --install . --config ${CMAKE_BUILD_TYPE}
)
ExternalProject_Get_Property(zlib install_dir)
set(ZLIB_ROOT_DIR ${install_dir})
set(ZLIB_INCLUDE_DIR /usr/local/include)
set(ZLIB_LIBRARY /usr/local/lib/libz.a)
#endregion
Путь установки библиотеки можно изменить с
/usr/local на любой другой.#cmake #minercaravan
🔥3❤1
Forwarded from эйай ньюз
Убийца Mac Mini от Nvidia – Digits
Вы только гляньте, шустрая коробочка помещается на ладошке Хуанга!
128 GB оперативки, 1 петафлоп в fp4, 20 Arm ядер. На такой машинке можно инференсить модели вплоть до 200 млрд параметров. Можно соединить две такие малышки и запускать уже 405B модель.
Обещают выпустить в мае, цена вопроса - $3000.
Хочу себе такую домой!🥺
@ai_newz
Вы только гляньте, шустрая коробочка помещается на ладошке Хуанга!
128 GB оперативки, 1 петафлоп в fp4, 20 Arm ядер. На такой машинке можно инференсить модели вплоть до 200 млрд параметров. Можно соединить две такие малышки и запускать уже 405B модель.
Обещают выпустить в мае, цена вопроса - $3000.
Хочу себе такую домой!
@ai_newz
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6🤯3👍1🤔1
🔥3👍2
Forwarded from Shpota Productions
Остросюжетный фильм об капитане милиции с установленным в тело искусственным интеллектом в сеттинге будущего СССР.
В главной роли Роман Курцын.
📱 YOUTUBE
📱 ВК ВИДЕО
Фильм снят при финансовой поддержке краудфандинга на planeta.ru
Приятного просмотра!
В главной роли Роман Курцын.
Фильм снят при финансовой поддержке краудфандинга на planeta.ru
Приятного просмотра!
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
АДЕЛЬ. Фильм, советский киберпанк, реж. Илья Шпота (2025)
Это короткометражный фильм снятый при финансовой поддержке как моих подписчиков, так и других людей, которых заинтересовала наша идея. Мы хотели снять короткометражное кино, чтобы в дальнейшем получить возможность реализовать полный метр и раскрыть все тонкости…
👍1🔥1
Forwarded from Нейродвиж
ИИ впервые написал операционку: представлен VibeOS — проект, созданный Claude Code практически с нуля😮
Разработчик выложил систему, которую он навайбокодил в паре с нейросетью всего за 64 сессии. Получилась полноценная ОС с графическим интерфейсом в духе macOS, которая заводится на Raspberry Pi.
Комплект поставки богатый: своё ядро с поддержкой многозадачности, драйверами USB и сетью, есть браузер, текстовый редактор, IDE и даже интерпретатор MicroPython.
Золотой стандарт соблюдён: DOOM запускается😂
Попробовать и изучить историю разработки можно — на GitHub.
Разработчик выложил систему, которую он навайбокодил в паре с нейросетью всего за 64 сессии. Получилась полноценная ОС с графическим интерфейсом в духе macOS, которая заводится на Raspberry Pi.
Комплект поставки богатый: своё ядро с поддержкой многозадачности, драйверами USB и сетью, есть браузер, текстовый редактор, IDE и даже интерпретатор MicroPython.
Золотой стандарт соблюдён: DOOM запускается
Попробовать и изучить историю разработки можно — на GitHub.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
https://people.freebsd.org/~lstewart/articles/cpumemory.pdf
Очень полезная штука для всех, кто себя считает программистом.
Очень полезная штука для всех, кто себя считает программистом.
👍2
Forwarded from Denis Sexy IT 🤖
This media is not supported in your browser
VIEW IN TELEGRAM
И снова криповая история про симуляцию, фанаты аниме Пантеон оценят:
Челы загрузили мозг мухи-дрозофилы - нейрон за нейроном - и запустили его в симуляции физического тела (это не нейросеть имитирующая биологию мухи, тут нет весов или тренировки, это именно копия реальных нейронов мухи)
Ее мозг это ~125 000 нейронов и ~50 миллионов синапсов
Сигналы виртуального мира входят в копию, активность бежит по всей системе мухи и вирутальное тело двигается☕️
Дальше такое же хотят сделать с мышами
Тут больше деталей:
https://eon.systems
Матрицу для мух мы сделали, поздравляю – хоть для кого-то
Челы загрузили мозг мухи-дрозофилы - нейрон за нейроном - и запустили его в симуляции физического тела (это не нейросеть имитирующая биологию мухи, тут нет весов или тренировки, это именно копия реальных нейронов мухи)
Ее мозг это ~125 000 нейронов и ~50 миллионов синапсов
Сигналы виртуального мира входят в копию, активность бежит по всей системе мухи и вирутальное тело двигается
Дальше такое же хотят сделать с мышами
Тут больше деталей:
https://eon.systems
Матрицу для мух мы сделали, поздравляю – хоть для кого-то
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👎1
Forwarded from SOLANO Arch
Вы когда-нибудь задумывались о том, что усталый гнев и нестабильность человека это следствие чувства страха? Нет? и не надо...Лучше задуматься о целеполагании в архитектуре. Цель архитектора: Научиться видеть
Вопреки ожиданиям, цель в архитектуре каждый определяет сам. Я говорю не о целях проекта, а о цели архитектуры как способа мышления и пути.
Кто-то скажет: архитекторы – ремесленники, и без погружения в домен ничего толкового не получится. И будет прав лишь отчасти. Старый образ "архитектора в башне из слоновой кости" уходит в прошлое. Мы уже понимаем: спущенные сверху спецификации и навязанные технологии часто приводят к раздорам.
Так в чем же цель? Для меня она звучит просто: научиться видеть.
Архитектура – это не только про код или схемы. Это способ мышления, окружающий нас повсюду: от структуры книги до устройства торгового центра, от мотоцикла до человеческого тела. Это умение видеть целое в разрозненном, утраченном, необнаруженном.
Ключ к этому видению – понимание множества view (точек зрения). В консервативной архитектуре (знакомой с Waterfall и TOGAF) этот термин означает видение системы с разных ракурсов: бизнеса, безопасности, разработчика, владельца, вендора. Все эти view вместе и дают ту самую "способность видеть".
Опасность – в грубой группировке заинтересованных лиц (например, просто "бизнес" или "заказчик"). За ней теряется суть: требование топ-менеджера "срочно перевести интеграцию на онлайн" и жалоба рядового сотрудника на "некорректный расчет бонусов" – это разные миры с разными первопричинами. То же и "на нашей стороне": у каждого в команде – аналитика, разработчика, тестировщика – свой ценный view.
Архитектору важно быть близко к команде, а не над ней. Его роль – предостеречь от ошибок, помочь сгладить углы и срезать путь до проблем, а не болезненно указывать на них постфактум. Сокращайте дистанцию. Ваше мнение должно быть важно команде потому, что вы помогаете идти верным курсом.
Резюмируя: Моя цель – Видеть. Видеть целое через множество view, видеть суть за требованиями, видеть путь для команды.
А какая ваша цель в архитектуре? Запишите ее сейчас, а потом – через год, два. Уверена, она будет меняться. Это увлекательный путь.
P.S. Классическая цель архитектуры предприятия лишь подтверждает это: с наименьшими потерями выявить и сопоставить view всех сторон для построения цельного решения и создать общее информационное поле. И помните: ваш собственный view, синтезирующий все услышанное, – невероятно ценен. Стремитесь к тому, чтобы ваше решение открывало то, о чем стороны даже не знали, что этого искренне хотят.
Вопреки ожиданиям, цель в архитектуре каждый определяет сам. Я говорю не о целях проекта, а о цели архитектуры как способа мышления и пути.
Кто-то скажет: архитекторы – ремесленники, и без погружения в домен ничего толкового не получится. И будет прав лишь отчасти. Старый образ "архитектора в башне из слоновой кости" уходит в прошлое. Мы уже понимаем: спущенные сверху спецификации и навязанные технологии часто приводят к раздорам.
Так в чем же цель? Для меня она звучит просто: научиться видеть.
Архитектура – это не только про код или схемы. Это способ мышления, окружающий нас повсюду: от структуры книги до устройства торгового центра, от мотоцикла до человеческого тела. Это умение видеть целое в разрозненном, утраченном, необнаруженном.
Ключ к этому видению – понимание множества view (точек зрения). В консервативной архитектуре (знакомой с Waterfall и TOGAF) этот термин означает видение системы с разных ракурсов: бизнеса, безопасности, разработчика, владельца, вендора. Все эти view вместе и дают ту самую "способность видеть".
Опасность – в грубой группировке заинтересованных лиц (например, просто "бизнес" или "заказчик"). За ней теряется суть: требование топ-менеджера "срочно перевести интеграцию на онлайн" и жалоба рядового сотрудника на "некорректный расчет бонусов" – это разные миры с разными первопричинами. То же и "на нашей стороне": у каждого в команде – аналитика, разработчика, тестировщика – свой ценный view.
Архитектору важно быть близко к команде, а не над ней. Его роль – предостеречь от ошибок, помочь сгладить углы и срезать путь до проблем, а не болезненно указывать на них постфактум. Сокращайте дистанцию. Ваше мнение должно быть важно команде потому, что вы помогаете идти верным курсом.
Резюмируя: Моя цель – Видеть. Видеть целое через множество view, видеть суть за требованиями, видеть путь для команды.
А какая ваша цель в архитектуре? Запишите ее сейчас, а потом – через год, два. Уверена, она будет меняться. Это увлекательный путь.
P.S. Классическая цель архитектуры предприятия лишь подтверждает это: с наименьшими потерями выявить и сопоставить view всех сторон для построения цельного решения и создать общее информационное поле. И помните: ваш собственный view, синтезирующий все услышанное, – невероятно ценен. Стремитесь к тому, чтобы ваше решение открывало то, о чем стороны даже не знали, что этого искренне хотят.
🔥3😢2❤1🌚1
Forwarded from Рестарт
Media is too big
VIEW IN TELEGRAM
«Гагарин. За пределами звезд» — вышел первый трейлер несуществующего фантастического сериала.
Чувак с помощью нейронки смешал в один коктейль «Звёздные Войны», «Стражей Галактики», «Чужого», «Космическую Одиссею», «Дюну» и эстетику боевых роботов, завернув всё это в визуальные стили от 70-х до современного кино.
«Снято» лучше фильмов от Фонда Кино😂 😂 😂
Чувак с помощью нейронки смешал в один коктейль «Звёздные Войны», «Стражей Галактики», «Чужого», «Космическую Одиссею», «Дюну» и эстетику боевых роботов, завернув всё это в визуальные стили от 70-х до современного кино.
Вылетев за пределы Земли, Гагарин обнаружил голограмму — искусственный экран, скрывающий правду о нашей солнечной системе.
За ней — огромная межпланетная империя, населённая сотнями видов существ. И один закон: цивилизации, не достигшие мира и гармонии, не покидают свой аквариум. Гагарин нарушил закон. Его поймали. Приговорили. Он сбежал. И пока Земля думала, что он погиб — он путешествовал по вселенной 65 лет.
«Снято» лучше фильмов от Фонда Кино
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2💯2🔥1