Сообщения

Siege Up! Editor (beta)

Изображение
Check out video with editor demonstration. New version of the game is currently in BETA TEST ! Download it here: https://abuksigun.itch.io/siegeup PLEASE, READ INSTRUCTIONS CAREFULLY! If you have any questions, ask here  https://discord.gg/zhszmspu New features: Available for PC Updated editor (Put walls, units, buildings, create campaign, make own game modes) Multiplayer (up to 8 players, play via Wi-Fi) Transport ships to move your soldiers across the ocean! New buildings and units  Build across the map, capture new lands and gather resources!

Как настроить iptables

Я новичок, так что не гарантирую что все что написано ниже - правильно. Разрешить порт можно вот так: iptable -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT На Линуксе порты до 1024 может открывать только рут, так что порт 80 нужно перенаправить на 8080, например sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-port 8080 Посмотреть настройки можно командами: iptable -L или iptable -S в чем разница я хз, гуглить! Для сохранения настроек нужно не забыть (для Убунты): sudo netfilter-persistent save Сохраняется, по сути последовательность команд для настройки. Посмотреть их для ip4 можно в файле /etc/iptables/rules.v4 Не знаю, можно ли менять этот файл на 

Unity3d Terrain shader template

Просто шаблон шейдера террайна

Header-only CMake библиотека

Оказалось в CMake очень легко сделать header-only либу cmake_minimum_required(VERSION 2.8.8) set(PROJECT_NAME MojitoReflection) project(${PROJECT_NAME})  # Ключевой момент. add_library без исходников и парметром INTERFACE add_library(${PROJECT_NAME} INTERFACE)  # Следующая строчка не обязательна, нужно только чтоб видеть исходники в проекте IDE file(GLOB PROJECT_SOURCES "${PROJECT_SOURCE_DIR}/src/*.hpp" "${PROJECT_SOURCE_DIR}/src/*.cpp")  # Следующая строчка не обязательна, нужно только чтоб видеть исходники в проекте IDE target_sources(${PROJECT_NAME} INTERFACE ${PROJECT_SOURCES})  # Указываем путь к заголовочникам target_include_directories(${PROJECT_NAME} INTERFACE ./src/) Подключаем: add_subdirectory("../reflection" "MojitoReflection/") target_link_libraries(${PROJECT_NAME} MojitoReflection)

QT отключает предупреждения в Visual Studio

Необычно, но Qt по дефолту вырубает целый список предупрждений в MSVC. Происходит это безобразие в qglobal.h QT_WARNING_DISABLE_MSVC(4251) /* class 'type' needs to have dll-interface to be used by clients of class 'type2' */ QT_WARNING_DISABLE_MSVC(4244) /* conversion from 'type1' to 'type2', possible loss of data */ QT_WARNING_DISABLE_MSVC(4275) /* non - DLL-interface classkey 'identifier' used as base for DLL-interface classkey 'identifier' */ QT_WARNING_DISABLE_MSVC(4514) /* unreferenced inline function has been removed */ QT_WARNING_DISABLE_MSVC(4800) /* 'type' : forcing value to bool 'true' or 'false' (performance warning) */ QT_WARNING_DISABLE_MSVC(4097) /* typedef-name 'identifier1' used as synonym for class-name 'identifier2' */ QT_WARNING_DISABLE_MSVC(4706) /* assignment within conditional expression */ #    if _MSC_VER <= 1310 // MSVC 2003 QT_WARNING_DISABLE_MSVC(4786) /* ...

Нюансы UWP (Windows Universal Platform)

Очередная заметка по платформе, с которой едва ли придется часто пересекаться, но пересекаться точно придется.

Структурные исключения Windows

Стал ближе знакомиться с компилятором MSVC и программированием для Windows и узнал о такой виндовой фиче как "Структурные исключения". Если вкратце, то вот: Структурные исключения (SEH) - Асинхронные исключения, использовались для изначально для языка Си, обрабатывают такие ситуации, как деление на ноль, обращение к недоступному учаcтку памяти. С флагом /EHa, структурные исключения начинают конвертиться в типизированные исключения и могут ловиться в обычных try-catch (в доках не рекомендуют это делать). Без флага, ловятся специальной конструкцией __try{}__except{}__finally{}. https://docs.microsoft.com/en-us/cpp/cpp/exception-handling-differences?view=vs-2017 https://docs.microsoft.com/en-us/cpp/build/reference/eh-exception-handling-model?view=vs-2017 Vector Exception Handling - это способ обработки SEH, вызываются функции обработчики одна за другой при срабатывании структурного исключения, перед разворачиванием стека. https://docs.microsoft.com/en-us/windows/deskto...

Visual Studio unhandled exception stack trace

At work I've got the task to get a stacktrace to a thower of unhandled std exception. The first think I've tried was to print stacktrace from a terminate handler set with std::set_terminate. But I had no lack with this way because the stack is unwinded before std::terminate was called. The solution is to use windows API to get the result. Three steps to get the stacktrace:

Заметки о Gradle

Так как в сферу моих рабочих обязанностей и увлечений входит разработка нативных приложений под андроид, мне приходится взаимодействовать с Gradle. Решил написать несколько заметок для себя.

Полезности

Это просто список ссылок и полезных команд. Кроссплатформенная разработка требует использования разных инструментов и понимания принципов их работы. Однако, вспомнить, что тебе нужно для конкретной платформы у меня сходу не получается, потому я решил собрать редкоиспользуемые утилиты полезные лично для меня.

Заметки делетанта Objective C

В ходе разработки кроссплатформенного движка приходится сталкиваться с Objective C. Создание подобных заметок помогает разложить информацию по полочкам и освежает память.

Модули С++

Исследовал состояние модулей на 17.11.18. Пишу эту заметку прежде всего для закрепления понимания концепции и формирования мнения. Настоящий программист C++ ведь должен иметь мнение на любую тему 😀 Статья за модули -  https://build2.org/article/cxx-modules-misconceptions.xhtml Статья против модулей -  https://izzys.casa/posts/millennials-are-killing-the-modules-ts.html

Check if class has method C++17

Hi, I've tried few options, but seems, this is the most compact code for checking if class has some method: template < typename T > static constexpr bool   hasFunction (...) { return false ; } template < typename T > static constexpr bool   hasFunction ( int , decltype (( std :: declval <T>().myFunc( float () )))* = 0 ) { return true ; } Check method availability with next constexpr condition: if constexpr ( hasFunction < MyClass >( 0 )) {       // Your code here } SFINAE above work on VS17, latest Clang and Gcc 6. I tested it only with C++17. But it should also work with C++14. Hope this help.

С++ получить имя класса без RTTI

Собственно, предисторию не помню, но помню что в голову пришла идея получать имя класса из предефайненной константы(!) __PRETTY_FUNCTION__. И еще я знаю что во многих командах разработки RTTI не приветствуется. Вот код: template < typename Type > std :: string typeName () { std :: regex regex ( "Type = ([0-9A-Za-z:<>, ]*)" ); std :: smatch match ; std :: string str ( __PRETTY_FUNCTION__ ); std :: regex_search ( str , match , regex ); return match [ 1 ]. str (); } Общая идея в том, что бы передать тип в шаблонную функцию, а потом получить имя этого типа из названии функции через регулярку. Код работает в clang и gcc. Результат я кэширую, а потому, скорость работы функции не очень важна. Возможно, я расскажу про то, как кэширую в другой статье, так как происходит это интересным способом. Вот ссылка на лучшее решение и обсуждение работы в MSVC: https://stackoverflow.com/questions/35941045/can-i-obtain-c-type-names-in...

Git и Yandex.Disk

Изображение
Распределенность и гибкость Git'а позволили нам с братом реализовать очень интересный workflow. Я называю его "бомж-репозиторий". Смысл в том, что удаленный репозиторий хранится не на сервере, а в синхронизируемой папке Яндекс Диске. Достаточно что бы там лежала только папка ".git". Компьютеры разработчиков так же держат у себя локальные копии репозитория. 

Yandex-Disk на Ubuntu

Примерно 2 недели назад ext4 раздел примонтированный в /home перестал читаться, видимо после очередного аварийного выключения. Раньше такого со мной еще не было. Хорошо, что я делаю бекапы и Legacy данные утеряны не были, однако, это стало поводом задуматься над облачным хранением данных. Много памяти для хранения мне не надо, так как все свежие проекты хранятся на bitbucket, github и рабочем репозитории. Видео я на жестком не храню, фоточек у меня тоже не много.

Заметка про FreeBSD

Это просто заметка. Проблема в том, что я не ушел дальше настройки wi-fi из-за недостатка времени (неосилятор). В конечном итоге, я поставил Ubuntu 16.4.2, где исправили проблемы с которыми я столкнулся в прошлой версии. Хоть Ubuntu это не так круто как FreeBSD, она позволяет начать работать сразу окончания установки. Заметку эту я публикую что-бы избавиться от чувства бесполезно проведенных двух вечеров.

Unity3d Ubuntu серый экран

Причин серого экрана: 1. Нет node.js или npm 2. Права доступа 3. Кривые конфиги 4. Что-то еще Во первых, стоит посмотреть логи. Логи Unity сохраняет в ~/.config/unity3d/Editor.log В моем случае, редактор по какой-то причине пытался найти папку node_modules в каталоге /opt/Unity/Editor/Data/Tools/nodejs/bin Я же по счастливой случайности нашел ее в соседнем каталоге /opt/Unity/Editor/Data/Tools/nodejs/libs и скопировал в bin. После этого все заработало. Еще вот тут много полезной инфы https://forum.unity3d.com/threads/starting-unity-and-its-black.378326/

WebGL туториал 3 (Текстурированный куб)

Изображение
В двух предыдущих статьях мы разобрались со многими вещами. И вот на очереди текстуры. Статья должна быть простой, по сравнению с предыдущей. Мы добавим пару строчек в шейдер и одну функцию для загрузки текстуры, так же увеличим количество вершин объекта, что бы получился куб.

WebGL туториал 2 (Цветная плоскость в 3d)

Изображение
В предыдущей части туториала я описывал простейший случай рисования в WebGL. Теперь мы немного усложним имеющийся код. Изменения коснутся шейдеров, мы научимся передавать в них произвольные данные. Наконец появится пару строчек на тему алгебры. Нам придется задействовать матричные преобразования, чтобы говорить о 3D в привычном понимании. Вкратце, в конце туториала мы получим квадрат раскрашенный градиентным кружочком, который будет поворачиваться вслед за курсором. Полный код примера тут .