Thursday, December 23, 2021

Начало. Space Fights: Alone

 Долго думал над тем, чтобы начать писать свою игру. Прорабатывал концепции, много раз брался за реализацию, но затем на полпути бросал всяческие попытки что-то реализовать. 

Позже, сокращая идеи, пришел к плану написания простой аркады с элементами выживания. Основное направление - это старая и хорошо всем известная игра Asteroids. О ней слышали все, общую концепцию представляют тоже все, кто хоть раз в нее играл или хотя бы видел. И тут я подумал, а что если взять данную игру и добавить в нее идеи из Factorio? Будет ли она интересней и привлекательней? При этом оставив аркадную составляющую?

 Итак, какие технологии будут в ней использоваться:

  • libgdx 1.10
  • java 16 (возможно удастся добиться работы 17 версии)
  • gimp (как редактор для pixel графики)
  • музыку буду искать в свободном доступе

 Что касается самой игры, то должно быть

  • несколько локаций
  • переход между локация осуществляется через гипер-прыжки
  • возможность менять и перестраивать свой корабль
  • необходимо продумать процесс сбора ресурсов
  • добавить функционал исследования технологий

Данная серия статей нужно для собственного контроля процесса разработки. Частые отчеты будут выходить на моем канале в Twitter. Тут будут исключительно выкладываться подведения итогов.

Sunday, January 5, 2020

Установка Kubernetes на Ubuntu

Всем привет! Сегодня я расскажу о своем опыте установки kubernetes на локальную машину с установленной ubuntu. Итак, поехали
  1. В самом начале нам необходимо в BIOS отключить безопасность загрузчика
    Boot Secure DISABLE
  2. Затем необходимо проделать несколько шагов для установки virtualbox
    sudo apt-get update
    sudo apt-get install -y apt-transport-https
    sudo apt-get install -y virtualbox virtualbox-ext-pack
  3. После этого начинаем ставить minikube
    curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.29.0/minikube-linux-amd64 && chmod +x minikube && sudo cp minikube /usr/local/bin/ && rm minikube
  4. Также необходимо установить командную оболочку kubectl
    curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
  5. Запускаем minikube
    minikube start
  6. Смотрим статус запущенного приложения
    kubectl cluster-info

Wednesday, October 16, 2019

Принятие политик iptable после перезагрузки сервера


Важное дополнение. Необходимо после перезагрузки сервера оставлять все свои политики, а не применять их снова. Для меня удобным способом является использование пакета iptables-persistent

Первым делом устанавливаем сам пакет
apt-get install iptables-persistent
Затем сохраняем все настройки в нужную директорию, откуда они будут подтягиваться
iptables-save > /etc/iptables/rules.v4ip6tables-save > /etc/iptables/rules.v6
Вот и все. Теперь после каждой перезагрузки у нас будут подгружаться наши настройки

Настройка iptables в Ubuntu

Сегодня встретился с новой проблемой - необходимо было закрыть все порты на своем сервере, и открыть только самые необходимые. Для этого, что удивительно, пришлось перерыть интернет в поисках необходимых инструкций к действиям. Собирал все по кусочкам, поэтому решил написать небольшую статью.

Для начала, нам необходимо понять, что у нас доступно, а что нет. Проверяется командой
sudo iptables -L
Мы удостоверились, что на только что установленой ОС открыто все возможное. Нам нужно все эти конфигурации удалить
sudo iptables -F
Теперь самое интересное - нам нужно открыть все порты на локальном интерфейсе, для того, чтобы внутри сервера все работало без сбоев
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
Также накопал важную строчку в процессе конфигурации. Необходимо разрешать уже открытым соединениям завершать работу (не блокировать)
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Как только предварительные действия совершили, нужно открыть необходимые порты (мы открываем 22, 80, 8080, 443)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Теперь, чтобы все это заработало, необходимо поменять политику по умолчанию на DROP
sudo iptables -P INPUT DROP

Saturday, October 12, 2019

Docker. Шпаргался по командам


  • FROM — задаёт базовый (родительский) образ.
  • LABEL — описывает метаданные. Например — сведения о том, кто создал и поддерживает образ.
  • ENV — устанавливает постоянные переменные среды.
  • RUN — выполняет команду и создаёт слой образа. Используется для установки в контейнер пакетов.
  • COPY — копирует в контейнер файлы и папки.
  • ADD — копирует файлы и папки в контейнер, может распаковывать локальные .tar-файлы.
  • CMD — описывает команду с аргументами, которую нужно выполнить когда контейнер будет запущен. Аргументы могут быть переопределены при запуске контейнера. В файле может присутствовать лишь одна инструкция CMD.
  • WORKDIR — задаёт рабочую директорию для следующей инструкции.
  • ARG — задаёт переменные для передачи Docker во время сборки образа.
  • ENTRYPOINT — предоставляет команду с аргументами для вызова во время выполнения контейнера. Аргументы не переопределяются.
  • EXPOSE — указывает на необходимость открыть порт.
  • VOLUME — создаёт точку монтирования для работы с постоянным хранилищем.

Wednesday, October 9, 2019

Создание ветки, если много удаленных репозиториев в git

Всем привет! 

Давайте представим, что по определенным причинам нам необходимо держать несколько удаленных репозиторием.  А именно помимо классического origin, у нас еще есть portal и downgrade репозитории

Нам нужно создать бранч от репозитория downgrade. Для этого мы должны просто указать в каком месте находится данный репозиторий. Делается это простой командой

git checkout -b mybranch downgrade/mybranch

Tuesday, October 1, 2019

Как переименовать ветку в git

Сегодняшняя заметка о том, каким образом можно переименовать текущую ветку и продолжить работать в переименованной ветке. Выполняется это простыми командами. Для начала нужно
git branch -m new-name
Таким образом мы переименовываем текущий бранч или можно сделать иначе
git checkout master
git branch -m old-name new-name
После этого нужно удаленно тоже все подчистить
git push origin :old-name new-name
git push origin -u new-name  

Sunday, September 29, 2019

Сливаем ветки и удаляем историю в одной из веток в git

Всем привет!

Сегодня быстрая заметка для удаления всех комментариев из той ветки, которую в дальнейшем планируем удалять. Это реализуется с помощью команды --squash. Представим, что мы хотим заливаем все изменения в ветку develop из ветки feature/simple-test. И удалим в дальнейшем ветку feature/simple-test. Выглядеть такая работа будет таким образом
git checkout develop 
git merge --squash feature/simple-test
git commit -m "merge feature"

Saturday, September 21, 2019

Удаление пакетов с помощью npm

Доброго дня!

Вот небольшой набор команд, каким образом можно из package.json удалять пакеты
npm uninstall
npm uninstall --save
npm uninstall --save-dev
npm -g uninstall --save

Удаление веток в git

Без лишних слов, давайте приступим к удалению веток. Пусть у нас будет ветка feature/simple-fix, над которой и будем экспериментировать

Для начала, удалим ветку у себя локально
git branch -d feature/simple-fix
Для удаления ветки, которая находится удаленно, нам необходимо выполнить команду
git push origin --delete feature/simple-fix
Вот так быстро и легко можно подчистить ветки. Всем успехов! 
 

Очистить все коммиты в git

Всем привет!

Сегодня мы разберем проблему, когда необходимо стереть всю историю комментариев, но при этом оставить все изменения в текущей ветке. Итак, поехали.

Во-первых, нам необходимо создать сиротскую ветку от текущей ветки (которую мы потом будем удалять). Пусть наша текущая ветка будет называться develop. Создадим сироту
git checkout --orphan develop_temp
В данной ветке нет ни одного комментария, но есть все файлы, которые были в ветке develop. Теперь нам нужно добавить все файлы в нашу новую ветку develop_temp
git add -A
git commit -am "first commit"
Идем дальше. Удаляем нашу ветку-родитель (у нас же есть сирота, а у сироты не бывает родителей ;) )
git branch -D develop
После этого переименовываем ветку-сироту по имени ветки-родителя
git branch -m develop
И наконец зальем все в нашу репу
git push -f origin develop
P.S. в данном подходе есть одна проблема, при мерджинге (или ребейзе). Проблема эта выглядит как сообщение об ошибке
fatal: refusing to merge unrelated histories
Происходит это потому, что два несвязанных проекта пытаются смерджиться. Решается эта проблема при первом мердже командой allow-unrelated-histories. Как вариант это работает вот так
1. git pull origin master --allow-unrelated-histories 
2. git merge develop --allow-unrelated-histories
Да вот собственно и все. Всем успехов! 

Friday, September 20, 2019

Слияние веток в git

Пусть у нас есть 2 ветки и мы не хотим пробегаться по всем изменениям и подтверждать, есть потребность залить слиться сразу, доверяя ветке, где находятся наши изменения

  • master (куда мы хотим залить наши изменения)
  • develop (где находятся наши изменения после коммитов)
Вначале разберемся с командой merge. Тут все просто. Заходим в master-ветку
git checkout master
После этого сливаемся, при этом говорим, что принимаем изменения ветки develop - указываем параметр theirs, если же хотим принять изменения ветки master, то указываем параметр ours
git merge -X theirs develop
Что касаемо rebase, то тут все аналогично. Т.е. мы находимся в той ветке, которую будем заливать
git checkout develop
После этого мы выполняем команду rebase и принимаем все изменения автоматически, а после нее заливаем изменения в master
git rebase -X theirs master 
git checkout master
git merge develop
Дальше, продолжайте работать. Всем успехов! 

Thursday, October 4, 2018

Angular pre-processor

If you wanna change pre-processor on existing project run
ng config schematics.@schematics/angular:component.styleext styl
If you wanna change pre-processor on new project run:
ng new my-app --style styl

Wednesday, September 26, 2018

Оптимизация Ubuntu (в частности для SSD)

Порывшись в интернете, нашел несколько действий, которые должны позволить продлить срок службы SSD, а также ускорить работу всей системы.

  1. В самом начале отключим работу лишних демонов приложений. Проще всего это сделать установив дополнительное приложение sysv-rc-conf. Делается это путем классической установки пакета
    sudo apt-get install sysv-rc-conf
    Затем запускаем приложение и убираем "крестики" с "лишних" приложений. А приложения у нас лишние следующие
    • brltty - служба помощи слепым людям посредством дисплея Брайля
    • pppd-dns - служба подключения к интернету через модем
    • saned - служба работы со сканерами
    • speech-di - служба синтеза речи

  2. Мое любимое приложение - Preload. Помогает ускорять запуск приложений благодаря тому, что кэширует часто используемые приложения и их библиотеки в оперативной памяти.
    sudo apt-get install preload
    Затем поменяем параметр sortstrategy в файле /etc/preload.conf на 0. Для SSD бессмысленно указывать очередь сортировки запросов.

  3. Уменьшим диапазон срабатывания swap, чтобы swap раздел начинал использоваться только при достижении 90% заполненности оперативной памяти. Для этого в файле /etc/sysctl.conf в самом конце добавим строчку
    vm.swappiness=10

  4. И на последок самое простое - очистим кэш apt и удалим неиспользуемые зависимости
    sudo apt-get autoremove
    sudo apt-get clean

Sunday, May 7, 2017

Teamfora. Определение со стратегией

Всем привет! Основная идея архитектуры данного проекта - проверить весь функционал, который необходим приложению. Я долго работал над многими проектами, стартапами, чтобы сконцентрироваться над максимально коротким сроком вывода приложения в публичный доступ.

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

Для бекенда будет использоваться PostgreSQL и Django 1.10.x, для фронтенда на первых парах скорее всего Angular2. Что из себя будет представлять проект, я буду рассказывать либо на своем канале Youtube, либо тут в блоге (пока не решил). Но в блоге обязательно буду дублировать результаты работы.