diff options
| author | Andrew Guschin <guschin.drew@gmail.com> | 2022-04-03 12:01:38 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin.drew@gmail.com> | 2022-04-03 12:01:38 +0400 |
| commit | a3e3a41f47a80ed53cddf36a0f2a59a399b9176f (patch) | |
| tree | 5156fb69e65d4b704cb3d5e9b6fdca834a95b0b4 | |
Initial commit
| -rw-r--r-- | .gitmodules | 3 | ||||
| -rw-r--r-- | archetypes/default.md | 6 | ||||
| -rw-r--r-- | config.toml | 14 | ||||
| -rw-r--r-- | content/posts/cpp.md | 48 | ||||
| -rw-r--r-- | content/posts/git.md | 115 | ||||
| -rw-r--r-- | content/posts/vpn.md | 138 | ||||
| -rw-r--r-- | content/posts/yuydev.md | 206 | ||||
| -rw-r--r-- | layouts/robots.txt | 4 | ||||
| -rwxr-xr-x | publish.sh | 7 | ||||
| -rw-r--r-- | static/images/vpn/mac-tunnel-configured.png | bin | 0 -> 696636 bytes | |||
| -rw-r--r-- | static/images/vpn/mac-tunnel-empty.png | bin | 0 -> 537646 bytes | |||
| -rw-r--r-- | static/images/vpn/mac-wg-empty.png | bin | 0 -> 357788 bytes | |||
| -rw-r--r-- | static/images/vpn/win-tunnel-configured.png | bin | 0 -> 20911 bytes | |||
| -rw-r--r-- | static/images/vpn/win-tunnel-empty.png | bin | 0 -> 11303 bytes | |||
| -rw-r--r-- | static/images/vpn/win-wg-empty.png | bin | 0 -> 12547 bytes | |||
| m--------- | themes/smol | 0 |
16 files changed, 541 insertions, 0 deletions
diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..9f02473 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "themes/smol"] + path = themes/smol + url = git@vasthecat.ru:repos/smol.git diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..00e77bd --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..dfaa22d --- /dev/null +++ b/config.toml @@ -0,0 +1,14 @@ +baseURL = 'http://vasthecat.ru/' +enableRobotsTXT = true +languageCode = 'ru-ru' +title = 'vasthecat.ru' +theme = 'smol' + +# Header +[menu] + [[menu.main]] + identifier = "posts" + name = "Posts" + url = "/posts/" + weight = 1 + diff --git a/content/posts/cpp.md b/content/posts/cpp.md new file mode 100644 index 0000000..2b73814 --- /dev/null +++ b/content/posts/cpp.md @@ -0,0 +1,48 @@ +--- +title: "Чё по си плюс плюс" +date: 2019-03-26T08:47:11+01:00 +draft: true +--- + +## Непосредственно плюсы + +- [Лекции С++ (Мещерин 2018)](https://youtu.be/2PM4TgCZIQs) --- первый лекции + можно скипнуть (но не желательно, т.к есть тонкие моменты и в самой базовой + части), важна часть про итераторы, возможно аллокаторы, умные указатели и + compile-time вычисления (последнее маловероятно, но может пригодиться) +- [Лекции С++ (Мещерин 2020)](https://youtu.be/9WO24IJQP_Q) --- базовые темы + уточнены, где-то добавлен более сложный материал, но всё это на дистанте, что + лично мне меньше нравится: +- [Лекции ТП (2020)](https://youtu.be/XjGbg-N4sQc) - очень веселые, крутые и + ненапряжные лекции о базовых принципах разработки ПО.: +- [Перечисление важных фич С++11](https://habr.com/ru/post/182920/) +- [Шаблоны C++](https://habr.com/ru/post/436880/) +- [Примерная реализация системы компонентов](https://austinmorlan.com/posts/entity_component_system/) +- [Quick Start in CLion](https://www.jetbrains.com/help/clion/clion-quick-start-guide.html#customize-the-environment) + (можно пролистать все разделы слева) + +## Git + +- [Местный туториал](git.html) (обязательно к прочтению) +- <https://git-scm.com/docs/gittutorial> +- <https://www.vogella.com/tutorials/Git/article.html> (отличный источник на английском) +- <https://proglib.io/p/git-for-half-an-hour> (на русском) + +## Сборка: + +- [Системы сборки](https://habr.com/ru/post/478124/) +- [GCC make](https://habr.com/ru/post/211751/) +- [Header guards](https://ravesli.com/urok-23-header-guards/) +- [Частые беды с инклудами](https://samwho.dev/blog/duplicate-symbol-what/) (о тонкостях линковки) + +## Misc + +- [Побаловаться с алгоритмами](https://docs.google.com/spreadsheets/d/1eQ7WS1U7HxhytsDYRsNsgXRi7w3DUoBTonXvUq1Fbt4/edit?usp=sharing) + (если какие-то уже известны - скип. Снизу есть ссылка на док с наиболее важной + теорией, если там что-то известно - тоже скип. Задачи разделены по цветам - от + простого к сложному.): +- [JSON формат](https://habr.com/ru/post/554274/) +- [Спецификация TOML](https://toml.io/en/v1.0.0) +- [Референс по маркдауну](https://support.typora.io/Markdown-Reference) +- [Finite State Machine](https://neerc.ifmo.ru/wiki/index.php?title=Детерминированные_конечные_автоматы) + diff --git a/content/posts/git.md b/content/posts/git.md new file mode 100644 index 0000000..737dfe6 --- /dev/null +++ b/content/posts/git.md @@ -0,0 +1,115 @@ +--- +title: "Гайд по работе с Git" +date: 2019-03-26T08:47:11+01:00 +draft: true +--- + +## Основные команды + +### Клонирование репозитория + +`git clone git@github.com:<твой-никнейм>/<репозиторий>.git` + +После выполнения clone будет автоматически создан remote с названием origin с +указанным url Для обновления форка необходимо добавить remote с апстримом. + +### Добавление главного репозитория для обновления master ветки + +`git remote add upstream https://github.com/<имя>/<репозиторий>.git` + +### Коммит последних изменений + +``` +git status # Посмотреть все текущие staged и unstaged изменения +git add . # Сделать все unstaged изменения staged +git commit # Сделать коммит с развёрнутым сообщением. При вызове из терминала + # откроется какой-нибудь текстовый редактор, в котором можно + # написать полное сообщение. При выходе из редактора коммит + # делается с последним сохранённым сообщением. +git commit -m "<сообщение>" # Добавить коммит с кратким сообщением +``` + +### Сохранение текущих изменений + +Это необходимо для избежания лишних конфликтов во время merge/pull + +``` +git stash # Сохранить изменения в stash +git stash list # Вывести все сохранённые изменения +git stash pop # Достать последние изменения +git stash pop 0 # Применить изменения под номером 0 +git stash drop # Удалить изменения из стека +``` + +### Обновление ветки из апстрима + +``` +git pull upstream master +git pull upstream develop +``` + +### Создание ветки под новое изменение + +`git checkout -b <тип фичи>/<краткое описание изменения>` + +### Переключение на существующую ветку + +`git checkout <название ветки>` + +### Объединение веток + +Внесение изменений из `<название ветки>` в текущую: +`git merge <название ветки>` + +Если при создании пулл-реквеста появились конфликты, то следует +сначала обновить master из апстрима, после чего внести полученные изменения +в текущую ветку. + +``` +git stash # Сохранить текущие незакоммиченные изменения на этой ветке +git checkout master +git pull upstream master +git checkout <branch> +git merge master +git stash pop # Заново применить изменения, сохранённые с помощью + # команды git stash +``` + +### Загрузка своих изменений на сервер + +``` +git push -u origin <название ветки> # При первой загрузке этой ветки +git push # Во все последующие разы +``` + +### Что нужно выяснить самому + +- Как выглядят конфликты и как их решать. +- Как создать пулл реквест. + +## Процесс работы с репозиторием + +Для разработки своей фичи следует сделать форк главного репозитория и +после этого работать только со своей версией. После этого клонируешь свой +форк и работаешь с ним. Также в склонированный репозиторий нужно добавить +дополнительный remote под названием upstream (на самом деле название может +быть любым), чтобы синхронизироваться с... апстримом. + +При начале работы над новой фичей создаётся новая ветка (именованная по +указанным в основном документе правилам). **Новая ветка создаётся на основе +develop, а не master**. В неё делаются какие-то коммиты. Когда работа над фичей +завершена, необходимо перейти на develop ветку **форка** и синхронизировать её +с апстримом: `git pull upstream develop`. После этого нужно выполнить слияние +ветки с фичей и master и решить все возникшие конфликты. + +Только после этого делается Pull Request в главный репозиторий. Ветка источник +--- ветка с фичей, ветка приёмник --- develop ветка в главном репозитории. +В случае, если снова возникли конфликты --- переходим к предыдущему параграфу. + +Если же всё хорошо и есть возможность автоматического слияния, то нужно указать +Reviewers чтобы кто-то мог разобрать по частям тобою написанное. + +Когда пулл реквест принят и слит в develop, переходишь к своему локальному +репозиторию и снова синхронизируешься с апстримом. После этого можно приступать +к разработке новой фичи. + diff --git a/content/posts/vpn.md b/content/posts/vpn.md new file mode 100644 index 0000000..67e9b44 --- /dev/null +++ b/content/posts/vpn.md @@ -0,0 +1,138 @@ +--- +title: "Как настроить VPN" +date: 2022-04-03 +draft: false +--- + +В качестве софта для создания сети будет использоваться Wireguard. Хостинг +предоставляется компанией <https://1984.is/>. Сервер находится в Исландии, поэтому +пинг может быть заметным. Ютуб смотреть можно, но не нужно. Количество трафика +ограничено (1 терабайт в месяц на данный момент). + +## Установка + +Все нужные способы установки перечислены на этой странице: + +- <https://www.wireguard.com/install/> + +Основные системы: + +- На Windows следует скачать установщик и запустить его. +- На macOS следует установить приложение Wireguard через + App Store +- На Linux зависит от дистрибутива. Основные пациенты: + - Manjaro/Arch: `sudo pacman -S wireguard-tools` + - Ubuntu/Debian: `sudo apt install wireguard` + +## Настройка на Linux + +Сначала необходимо сгенерировать пару ключей для доступа к VPN: +``` +wg genkey > private_key.pem +wg pubkey < private_key.pem > public_key.pub +``` + +Содержимое файла нужно передать мне, чтобы я мог тебя добавить в сеть. +После этого я выдам тебе твой IP-адрес внутри сети. Обозначим его как +`<ADDRESS>`. Вместе с этим адресом я выдам адрес VPN, который обозначим как +`<VPN_ADDRESS>`. + + +В файле `/etc/wireguard/wg0.conf` следует прописать следующие настройки: +``` +[Interface] +PrivateKey = <Содержимое файла private_key.pem> +Address = <ADDRESS>/32 +DNS = 1.1.1.1 + +[Peer] +PublicKey = yAGhH8hkukwjbw3R4MBUGoVEltgd7Wn3uGk6m0eD5SI= +AllowedIPs = 1.0.0.0/8, 2.0.0.0/8, 3.0.0.0/8, 4.0.0.0/6, 8.0.0.0/7, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/6, 172.0.0.0/12, 172.32.0.0/11, 172.64.0.0/10, 172.128.0.0/9, 173.0.0.0/8, 174.0.0.0/7, 176.0.0.0/4, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4, 10.13.37.0/24, 1.1.1.1/32 +Endpoint = <VPN_ADDRESS>:51820 +PersistentKeepalive = 20 +``` + +В поле `AllowedIPs` так много записей, чтобы исключить из них все локальные +IP-адреса (типа `192.168.*.*`). + +Пока что я не нашёл как можно на линуксе управлять Wireguard из GUI, поэтому +используем консоль. + +Чтобы запустить VPN следует запустить команду +``` +wg-quick up wg0 +``` + +Для отключения VPN используется команда +``` +wg-quick down wg0 +``` + +## Настройка на macOS + +После установки приложения Wireguard из App Store нас встречает такое окно: + + +Нажимаем на плюсик в нижнем левом углу и на кнопку `Add Empty Tunnel...`. + + + +Даём туннелю какое-нибудь название и копируем строчку после надписи `Public +key:`. Её нужно передать мне. В ответ на эту строчку я передам тебе твой +IP-адрес в сети. Обозначим его как `<ADDRESS>`. Вместе с этим адресом я +выдам адрес VPN, который обозначим как `<VPN_ADDRESS>`. + +После уже присутствующей строчки в конфиге нужно добавить следующие строки: +``` +... +Address = <ADDRESS>/32 +DNS = 1.1.1.1 + +[Peer] +PublicKey = yAGhH8hkukwjbw3R4MBUGoVEltgd7Wn3uGk6m0eD5SI= +AllowedIPs = 1.0.0.0/8, 2.0.0.0/8, 3.0.0.0/8, 4.0.0.0/6, 8.0.0.0/7, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/6, 172.0.0.0/12, 172.32.0.0/11, 172.64.0.0/10, 172.128.0.0/9, 173.0.0.0/8, 174.0.0.0/7, 176.0.0.0/4, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4, 10.13.37.0/24, 1.1.1.1/32 +Endpoint = <VPN_ADDRESS>:51820 +PersistentKeepalive = 20 +``` + +В поле `AllowedIPs` так много записей, чтобы исключить из них все локальные +IP-адреса (типа `192.168.*.*`). + +В результате окошко выглядит примерно так (Address тот, который я выдам): + + +## Настройка на Windows + +Настройка на Windows такая же, как на macOS. + +После установки приложения Wireguard нас встречает такое окно: + + +Нажимаем на треугольник в нижнем левом углу и выбираем кнопку +`Добавить пустой туннель...`. + + + +Даём туннелю какое-нибудь название и копируем строчку после надписи `Публичный +ключ:`. Её нужно передать мне. В ответ на эту строчку я передам тебе твой +IP-адрес в сети. Обозначим его как `<ADDRESS>`. Вместе с этим адресом я +выдам адрес VPN, который обозначим как `<VPN_ADDRESS>`. + +После уже присутствующей строчки в конфиге нужно добавить следующие строки: +``` +... +Address = <ADDRESS>/32 +DNS = 1.1.1.1 + +[Peer] +PublicKey = yAGhH8hkukwjbw3R4MBUGoVEltgd7Wn3uGk6m0eD5SI= +AllowedIPs = 1.0.0.0/8, 2.0.0.0/8, 3.0.0.0/8, 4.0.0.0/6, 8.0.0.0/7, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/6, 172.0.0.0/12, 172.32.0.0/11, 172.64.0.0/10, 172.128.0.0/9, 173.0.0.0/8, 174.0.0.0/7, 176.0.0.0/4, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4, 10.13.37.0/24, 1.1.1.1/32 +Endpoint = <VPN_ADDRESS>:51820 +PersistentKeepalive = 20 +``` + +В поле `AllowedIPs` так много записей, чтобы исключить из них все локальные +IP-адреса (типа `192.168.*.*`). + +В результате окошко выглядит примерно так (Address тот, который я выдам): + diff --git a/content/posts/yuydev.md b/content/posts/yuydev.md new file mode 100644 index 0000000..69f70bd --- /dev/null +++ b/content/posts/yuydev.md @@ -0,0 +1,206 @@ +--- +title: "Вступительное слово" +date: 2019-03-26T08:47:11+01:00 +draft: true +--- + +## Что делать + +Найти в глобальном поиске <https://groups.google.com> нашу группу +yuydev@googlegroups.com и подать в неё заявку на вступление. После этого в гугл +диске появится директория Yuydev в которой можно создавать и сохранять основные +документы/ассеты связанные с игрой. + +Также в планах было попробовать +[парное программирование](https://ru.wikipedia.org/wiki/Парное_программирование), +так что почитайте что это вообще такое и как происходит. + +## Про архитектуру движка + +Очень настоятельно рекомендую почитать что-то про +[ECS](https://en.wikipedia.org/wiki/Entity_component_system). +Если вкратце --- основные термины: + +- Entity (Объект): по факту является уникальным идентификатором объекта, а + именно --- целым числом, которое является индексом в списке всех объектов; +- Component (Компонент): структура с некоторыми данными в которых содержится + состояние объекта. Например, в компоненте `Transform` могут содержаться + координаты объекта, а в компоненте `Collider` --- размеры коллайдера; +- System (Система): какая-то функция, которая изменяет состояние объекта с + определёнными компонентами. Например, система `movePlayer` может обновлять + состояние объектов, у которых есть компоненты `Transform` и `Player`, а + система `moveEnemy` --- `Transform` и `Enemy`. + +Идейные вдохновители: + +- Unity 3D +- <https://github.com/saintruler/brandNewEngine> + +## Стек технологий + +Игра и движок будут писаться на C++, а проект собираться с помощью make +(**не cmake!!!**). В качестве IDE для разработки стоит выбрать Jetbrains CLion, +а про Visual Studio забыть. Студенческую лицензию для CLion можно получить на +сайте [Jetbrains](https://www.jetbrains.com/shop/eform/students). Если +активирована почта на домене sgu.ru, то можно использовать её и получить +лицензию за несколько минут. Иначе, можно использовать студак во вкладке +Official Document, но тогда придётся подождать несколько дней. + +Почитать инфу по C++ можно [тут](cpp.html). + +Для работы с графикой, со звуком и остальными мультимедийными вещами будет +использоваться библиотека [SFML](https://www.sfml-dev.org/). Для её изучения +можно почитать [туториалы](https://www.sfml-dev.org/tutorials/2.5/) на +официальном сайте. Они на английском языке, но к этому придётся привыкать. + +В целом, в данном проекте я рассчитываю на то, что мы будем использовать +минимальное количество внешних библиотек. В идеале --- ограничиться только +SFML. Другие библиотеки стоит добавлять только в самом-самом крайнем случае, +если проблема требует действительно очень большого количества кода и каких-то +продвинутых знаний. На данный момент, единственный кандидат в качестве +дополнительной внешней библиотеки --- это парсер какого-нибудь языка разметки +(например, json). + +Для сборки проекта на винде нужно будет установить +[mingw-w64](http://mingw-w64.org/doku.php) и +[GNU make](https://www.gnu.org/software/make/). И после этого каким-то образом +это настроить так, чтобы проект действительно собирался. Пока что этим никто +не занимался, поэтому именно ты --- читатель --- можешь стать первым! + +## Оформление в различных частях проекта + +### Оформление кода (будет дополняться) +``` +void +someFunctionName(int param1, int param2) +{ + int someArray = { 1, 2, 3 }; + const std::type_index anotherArray = + { TYPE(EnemyController) + , TYPE(Transform) + , TYPE(PlayerController + }; + + if (true || false) + { + callOtherFunction(12345); + } + for (int i = 0; i < 20; ++i) + { + // TODO(andrew): Добавить большее количество обработчиков. + switch (param1) + { + case 1: + { + std::string name = "World" + std::cout << "Hello, " << name << std::endl; + } break; + case 2: + { + // NOTE(andrew): Приветствую только себя потому что могу! + std::string name = "Andrew" + std::cout << "Hi, " << name << std::endl; + } break; + default: + { + std::cout << "Greeting is undefined" << std::endl; + } break; + } + } +} +``` + +Моменты, на которые необходимо обратить внимание: + +- В названиях используется [CamelCase](https://ru.wikipedia.org/wiki/CamelCase); +- Все фигурные скобки находятся на отдельной строке; +- Тип возвращаемого значения функции находится на отдельной строке; +- Блоки кода обозначаются **везде**, даже в ифе с одной командой; +- Немного необычное оформление кейсов в свитче; +- **Забудьте про using namespace std**; +- Длина строки не превышает 80 символов (в некоторых случаях можно позволить + 120 символов, но эти случаи рассматриваются отдельно в каждом случае); +- Оформление литералов массивов в случае, если элементы умещаются в одну + строку и в случае, когда не умещаются (аналогичное оформление применяется к + параметрам функций); +- Комментарии на русском языке. + +Также можно заметить, что в комментариях есть конструкции `TODO(имя)` и +`NOTE(имя)`. Имя указывает только на автора комментария, а не на того, кто +это будет чинить. Нужно это для того, чтобы можно было найти автора и спросить +его, если не совсем понятна проблема или что-то ещё. Комментарии такого +вида обычно распознаются в IDE и, например, по TODO-комментариям можно искать +части проекта, в которых следовало бы добавить какие-то вещи, которые могут быть +не обязательны для сборки и работы проекта в данный момент, но могут привести +к неожиданным ошибкам. Например, обработку ошибок/исключений можно отложить +на потом, но чтобы не забыть о том, что такая необходимость существует, надо +добавить комментарий `TODO(имя)` и через двоеточие указать чего именно не +хватает. + +### Особенности работы с C++ в этом проекте + +Очень желательно везде использовать [Plain Old +Data](https://ru.wikipedia.org/wiki/Простая_структура_данных), то есть обычные +`struct`. Использование наследования и рефлексии запрещено (до тех пор, пока не +найдётся место, где это **действительно** понадобится). Макросы не запрещены, +но их количество следует минимизировать. Если какой-то сложный тип данных +встречается достаточно часто есть возможность рассмотреть вынесение его в +отдельный `typedef`. Глобальных переменных следует избегать, а нужные данные +хранить непосредственно в компонентах. + +### Работа с git + +При начале работы над новой фичей следует создать новую ветку. У названия +ветки будет какой-то префикс, соответствующий типу того, что в этой ветке +разрабатывается, а после него указывается *очень короткое* описание самой +фичи (два -- три слова). Название ветки полностью нижним регистром, а слова +разделяются тире (!!!). Примеры: + +- feature/new-interface; +- feature/player-controller-update; +- fix/physics-system-bug. + +Во время разработки фичи можете создавать сколько угодно коммитов, так как +при слиянии с основной веткой будет использоваться squash. Не нужно создавать +огромное количество коммитов на каждый чих, но и не нужно делать один огромный +коммит в котором находятся абсолютно все изменения. Git --- это ваш друг, +который поможет откатиться до предыдущего рабочего коммита, если что-то +непоправимо сломалось (или просто получилось какое-то говно, которое лучше +выкинуть, забыть и начать с начала). + +Не рекомендуется работа в одной ветке сразу двух людей, так как это +**неизбежно** приведёт к бесконечным конфликтам при автоматическом слиянии. + +В тексте squash-коммита следует указывать что именно было изменено. Первая +строка коммита является чем-то вроде заголовка, а весь остальной текст +следует оформлять в виде Markdown с подробным описанием новых фич. + +Текст коммита пишется на русском языке. + +Основные команды и процесс работы с нашим репозиторием можно прочитать +[тут](git.html). + +## Какие есть задачи + +- Сборка проекта под разные архитектуры + - Debug и Release сборки +- Система логгирования +- Чтение конфигов в каком-то языке разметки + - Выбрать этот язык (кандидаты: toml, yaml, json, ini) +- Движок + - Система компонентов + - Подсистема рендеринга + - Подсистема ввода + - Подсистема сцен + - Подсистема сохранений + - Сериализация/десериализация объектов + - Работа с незапакованными ассетами (Debug build) + - Звуковая подсистема + - Подсистема событий + - Фреймворк для разработки графического интерфейса (а также работа со шрифтами) + - Запаковка ассетов и загрузка этих архивов в собранном проекте (Release build) +- Графический интерфейс для создания сцен +- Игровые механики (придумывание идей и реализация) +- Сюжет +- Графика +- Музыка diff --git a/layouts/robots.txt b/layouts/robots.txt new file mode 100644 index 0000000..634c39a --- /dev/null +++ b/layouts/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +{{ range .Pages }} +Disallow: {{ .RelPermalink }} +{{ end }} diff --git a/publish.sh b/publish.sh new file mode 100755 index 0000000..031545d --- /dev/null +++ b/publish.sh @@ -0,0 +1,7 @@ +#!/bin/sh +mkdir -p ./public +rm -r ./public/* +hugo +ssh root@vasthecat.ru 'rm -r /var/www/vasthecat.ru/*' +scp -r ./public/* root@vasthecat.ru:/var/www/vasthecat.ru/ +ssh root@vasthecat.ru 'chown -R www-data:www-data /var/www/vasthecat.ru/' diff --git a/static/images/vpn/mac-tunnel-configured.png b/static/images/vpn/mac-tunnel-configured.png Binary files differnew file mode 100644 index 0000000..881a6b4 --- /dev/null +++ b/static/images/vpn/mac-tunnel-configured.png diff --git a/static/images/vpn/mac-tunnel-empty.png b/static/images/vpn/mac-tunnel-empty.png Binary files differnew file mode 100644 index 0000000..a8f68f3 --- /dev/null +++ b/static/images/vpn/mac-tunnel-empty.png diff --git a/static/images/vpn/mac-wg-empty.png b/static/images/vpn/mac-wg-empty.png Binary files differnew file mode 100644 index 0000000..501ddb6 --- /dev/null +++ b/static/images/vpn/mac-wg-empty.png diff --git a/static/images/vpn/win-tunnel-configured.png b/static/images/vpn/win-tunnel-configured.png Binary files differnew file mode 100644 index 0000000..6971eb6 --- /dev/null +++ b/static/images/vpn/win-tunnel-configured.png diff --git a/static/images/vpn/win-tunnel-empty.png b/static/images/vpn/win-tunnel-empty.png Binary files differnew file mode 100644 index 0000000..d2a7ea2 --- /dev/null +++ b/static/images/vpn/win-tunnel-empty.png diff --git a/static/images/vpn/win-wg-empty.png b/static/images/vpn/win-wg-empty.png Binary files differnew file mode 100644 index 0000000..8f22ec8 --- /dev/null +++ b/static/images/vpn/win-wg-empty.png diff --git a/themes/smol b/themes/smol new file mode 160000 +Subproject 4129f82cd766921c9a5a46e55f46ec1081bde16 |