14 Apr 12:09 avatar

Создание C++ плагина для Unity3D

C++ in Unity3D tutorial (C# Marshaling)
www.youtube.com/watch?v=w3jGgTHJoCY

ericeastwood.com/blog/17/unity-and-dlls-c-managed-and-c-unmanaged

www.gamedev.net/articles/programming/general-and-gameplay-programming/c-plugin-debug-log-with-unity-r3349/?tab=comments

www.snowbolt.com/index.php/blog/28-tech/91-pinvoke

www.alanzucconi.com/2015/10/11/how-to-write-native-plugins-for-unity/#step1

  • При создании проекта в VS2017 надо выбирать тип проекта C++ -> библиотека DLL
  • Следить за тем, чтобы была установлена правильная разрядность и Build type — Release
  • Возможно играет роль то, какие параметры установлены для dll в редакторе Unity (зайти в редакторе в папку плагинс кликнуть на длл и проверить в инспекторе параметры)
  • Проекты CallCppFromUnity и CallUnityFromCpp загружены на гугл диск в папку работы с террасой и имеют минимальную функциональность
26 Mar 13:44 avatar

Docker CLI

ivan.bessarabov.ru/blog/docker-commands

# Запустить контейнер в интерактивном режиме
# (ключи -i -t можно объединить в -it)
$ docker run -i -t ubuntu:14.04 /bin/bash

# Получить список контейнеров
# (если не указать ключ -a, то будет показаны только работающие контейнеры)
$ docker ps -a

# Удалить контейнер (можно удалить только остановленный контейнер).
# Команде можно передать как CONTAINER ID, так и NAME
docker rm 7aacffdfb531

# Запустить контейнер и автоматически удалить его после того как он остановится
docker run --rm -it ubuntu:14.04 /bin/bash

# Запустить контейнер и указать ему имя 'sample'. Если явно не указывать
# имя, то оно будет создано автоматически, типа 'silly_hopper'
docker run -it --name sample ubuntu:14.04 /bin/bash

# Для того, чтобы остановить контейнер
docker stop sample

# Запустить контейнер в виде демона, сделать чтобы порт 8000 на хост
# машине соответствовал 80 порту в контейнере
docker run --detach --publish 8000:80 --name sample bessarabov/sample_nginx

/////////////////////////////////////////////////////////////////////////////////////
sudo docker run -it --name=alpine -d -v /opt/project_1:/project_1 alpine /bin/sh

sudo docker exec -it alpine /bin/sh

//удалить образ сохраненный локально
sudo docker image rm -f alpine

//выводит список сохраненных на машине образов
sudo docker images
26 Mar 13:33 avatar

VIM & Bash

losst.ru/kak-vyjti-iz-vim

Нажмите клавишу Esc, это важно, потому что вам необходимо выйти из режима вставки, прежде чем вводить команды выхода. Далее можете вести одну из следующих команд:

:q — двоеточие — это тоже часть команды, она просто закроет редактор;
:q — если файл не был сохранен, то с помощью этой команды вы можете выйти без сохранения;
:wq — позволяет сохранить и выйти Vim.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
linhunt.ru/os/linux/smena-prav-dostupa-na-katalog-papku-ili-fajl/
25 Mar 23:53 avatar

Vagrant

//////////////////////////////////////////////////////////////////////////
Если использовать локальную виртуализацию (VirtualBox, LXC, что-нибудь подобное для других систем), текущий каталог, содержащий Vagrantfile мапится через NFS внутрь контейнера.

Т.е. просто держим Vagrantfile в каталоге с проектом и работаем с ним при помощи своей любимой IDE. Внутри контейнера всегда будет текущая версия. Всякий hot reload и т.п., конечно, нужно будет запустить если нужно (типа какого-нибудь shotgun для Ruby), но это и без вагранта надо делать.
В случае вагранта можно эту операцию вписать в Vagrantfile и оно будет запускаться автоматом.
//////////////////////////////////////////////////////////////////////////
Как уже отметил tokenvolt папка /vagrant в ВМ по умолчанию синхронизирована с папкой host'а, в которой находится vagrant-файл. Это основной паттерн использования Vagrant при разработке:
— IDE на host файлы редактирует,
— они прозрачно синкаются с ВМ
— PROFIT

//////////////////////////////////////////////////////////////////////////
devhub.io/repos/samtstern-android-vagrant

www.londonappdeveloper.com/how-to-build-an-app-part-1-of-3-setting-up-the-development-server-with-vagrant-ubuntu-and-salt/

help.ubuntu.ru/wiki/vagrant

habrahabr.ru/post/251529/

habrahabr.ru/post/262395/

habrahabr.ru/company/maxifier/blog/225305/

habrahabr.ru/post/113354/

habrahabr.ru/post/344514/

xakep.ru/2013/10/19/vagrant/

eax.me/vagrant/
25 Mar 01:04 avatar

Переустановка ubuntu, создание контрольных точек

Сюда надо поместить По для создания контрольных точек, и скрипт для загрузки созданных снэпшотов системы в облако
23 Mar 02:14 avatar

DOCKER

docker run run -t --rm //--rm для того чтобы контейнер удалился после того как закончит работу
-v «pwd»:/opt/project //монтируем текущую папку в /opt/project
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
stage.dev-ops-notes.ru/wp-content/uploads/sites/3/2017/08/Docker-Cheat-Sheet.pdf
dev-ops-notes.ru/docker/docker-%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2%D0%B0%D1%88%D0%B8%D0%BC%D0%B8-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8/
ivan.bessarabov.ru/blog/docker-volumes-experiments
blog.amartynov.ru/docker-named-volumes/
dotsandbrackets.com/persistent-data-docker-volumes-ru/
medium.com/@hudsonmendes/docker-have-a-ubuntu-development-machine-within-seconds-from-windows-or-mac-fd2f30a338e4

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

If you mount a bind mount or non-empty volume into a directory in the container in which some files or directories exist, these files or directories are obscured by the mount, just as if you saved files into /mnt on a Linux host and then mounted a USB drive into /mnt. The contents of /mnt would be obscured by the contents of the USB drive until the USB drive were unmounted. The obscured files are not removed or altered, but are not accessible while the bind mount or volume is mounted.

////////////////////////////////////////////////////////////////////////////////////////////////////////////

docs.docker.com/storage/volumes/#differences-between--v-and---mount-behavior

////////////////////////////////////////////////////////////////////////////////////////////////////////////

xakep.ru/2014/10/07/virtualisation-soft-review/

////////////////////////////////////////////////////////////////////////////////////////////////////////////
ПОХОЖЕ, ЧТО volumes хранятся в папке docker/volumes
Start a container with a volume

If you start a container with a volume that does not yet exist, Docker creates the volume for you. The following example mounts the volume myvol2 into /app/ in the container.

The -v and --mount examples below produce the same result. You can’t run them both unless you remove the devtest container and the myvol2 volume after running the first one.

«Mounts»: [
{
«Type»: «volume»,
«Name»: «myvol2»,
«Source»: "/var/lib/docker/volumes/myvol2/_data",
«Destination»: "/app",
«Driver»: «local»,
«Mode»: "",
«RW»: true,
«Propagation»: ""
}
],

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
We can now edit files in our IDE and run them in our Docker

There’s nothing stopping us from it now.

Say that you use your favourite editor (mine is Visual Studio Code, at the moment), and you want to run your app (rails server, your gradle boot, your sails lift), but you don’t have the dependencies installed in your machine? It’s now possible from your Docker container.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

Образы Docker, из которых запускаются контейнеры, представляют собой последовательность неизменяемых (только чтение) слоев.

При запуске из образа нового контейнера к этому набору неизменяемых слоев присоединяется слой, который можно изменять. С этого момента, если в контейнере попытаться изменить какой-нибудь существующий файл, то этот файл будет скопирован из одного из нижележащих неизменяемых слоев, в котором он был создан, в изменяемый слой, куда и запишутся все его изменения. Версия изменяемого слоя скрывает нижележащий файл, но не удаляет его. Когда вы удаляете запущенный контейнер и перезапускаете его из того же образа, все ваши изменения будут потеряны. Так работает UnionFS, которую использует Docker, для организации своей работы с данными.

Для того, чтобы иметь возможность сохранять ваши данные, а также использовать эти данные несколькими контейнерами, Docker предоставляем вам возможность использовать так называемые тома (Docker volumes). Если совсем просто, то тома – это обычные директории (или файлы) хостовой файловой системы сервера, на котором работает Docker, монтируемые в любую директорию контейнера
////////////////////////////////////////////////////////////////////////////////////////////////
создается ли поверх хост-ОС гостевая ОС? Нормально ли рассматривать каждый контейнер как виртуальное окружение? — Похоже, что да:

Your new development environment

In the past, if you were to start writing a Python app, your first order of business was to install a Python runtime onto your machine. But, that creates a situation where the environment on your machine needs to be perfect for your app to run as expected, and also needs to match your production environment.

With Docker, you can just grab a portable Python runtime as an image, no installation necessary. Then, your build can include the base Python image right alongside your app code, ensuring that your app, its dependencies, and the runtime, all travel together.

These portable images are defined by something called a Dockerfile

/////////////////////////////////////////////////////////////////////////
Would you run your IDE inside a container?
Naaaaa….That’s not the way containers work. It’s still too tricky and not portable to run graphical applications inside containers.

/////////////////////////////////////////////////////////////////////////
//здесь описан пока что самый лучший подход
www.youtube.com/watch?v=FiaLKwdv9TI

////////////////////////////////////////////////////////////////////////

www.youtube.com/watch?v=NEdDa3Zqu7s

www.youtube.com/watch?v=cBqjc3-w3y0

www.youtube.com/redirect?redir_token=WvtJhJAKEjusP_eG26nwvVsId7B8MTUyMTg0Njk1NUAxNTIxNzYwNTU1&event=video_description&v=cBqjc3-w3y0&q=https%3A%2F%2Fmedium.com%2F%40caabdalla%2Fusing-docker-as-develop-environment-3374363532c7

////////////////////////////////////////////////////////////////////////

Написание кода внутри контейнера habrahabr.ru/post/346890/

Когда сервис запускается внутри контейнера — он использует те скрипты/бинарные файлы, которые уже находятся внутри. Как нам их редактировать?

Элементарно. Нужно редактировать их извне, в любимом редакторе, в своей домашней папке, а потом просто скопировать в контейнер и запустить.

Даём доступ контейнеру к своей домашней папке используя опцию -v
После копирования обновленного скрипта или бинарного файла — запускаем сервис (способом, описанным в разделе инициализации) и получаем сервис с нашими правками, работающий в исходном окружении.


/////////////////////////////////////////////////////////////////////////

//про работу с GUI

jnaapti.com/blog/tag/android-studio/

training.play-with-docker.com/beginner-linux/

www.youtube.com/watch?v=PKyj8sbZNYw

www.youtube.com/watch?v=ZrEllmXDiwo

ncona.com/2016/07/android-development-with-docker/

www.youtube.com/watch?v=j2n0d7AZNug

medium.com/@elye.project/intro-to-docker-building-android-app-cb7fb1b97602

brightinventions.pl/blog/dockerizing-android-builds/
github.com/samtstern/android-vagrant

docs.docker.com/develop/dev-best-practices/#differences-in-development-and-production-environments

Можно использовать команду docker images, чтобы посмотреть список образов в системе.

Теперь давайте взглянем на команду docker ps. Она выводит на экран список всех запущенных контейнеров.

If you have multiple images with a lot in common, consider creating your own base image with the shared components, and basing your unique images on that. Docker only needs to load the common layers once, and they are cached. This means that your derivative images use memory on the Docker host more efficiently and load more quickly.

habrahabr.ru/post/337306/

Image (образ) – собранная подсистема, необходимая для работы процесса, сохраненная в образе.
Container (контейнер) – процесс, инициализированный на базе образа. То есть контейнер существует только когда запущен. Это как экземпляр класса, а образ это типа класс. Ну я думаю идея понятна.
Host (хост) – среда, в которой запускается докер. Проще говоря – ваша локальная машина.
Volume – это дисковое пространство между хостом и контейнером. Проще – это папка на вашей локальной машине примонтированная внутрь контейнера. Меняете тут меняется там, и наоборот, миракл.
Dockerfile – файл с набором инструкций для создания образа будущего контейнера
Service (сервис) – по сути это запущенный образ (один или несколько контейнеров), дополнительно сконфигурированный такими опциями как открытие портов, маппинг папок (volume) и прочее. Обычно это делается при помощи docker-compose.yml файла.
Docker-compose (докер-композ, чаще композер, но не путать с php composer) – тулза, облегчающая сборку и запуск системы состоящей из нескольких контейнеров, связанных между собой.
Build (билд, билдить) – процесс создания образа из набора инструкций в докерфайле, или нескольких докерфайлов, если билд делается с помощью композера

Согласен с автором во всем, сам въезжал в docker примерно 3 дня с параллельными попытками написания Dockerfile для сборки нужного мне image. Однако советую сразу пристальное внимание обратить на инструкцию CMD, без правильного написания которой запущенный контейнер будет сразу останавливаться, а вместо deprecated MAINTAINER использовать все разнообразие инструкции LABEL.

habrahabr.ru/company/flant/blog/336654/

docs.docker.com/get-started/#recap-and-cheat-sheet
18 Mar 12:41 avatar

Разбираемся с градиентом

www.pyimagesearch.com/2016/10/10/gradient-descent-with-python/

www.mathprofi.ru/proizvodnaja_po_napravleniju_i_gradient.html

www.mathprofi.ru/skaljarnoe_proizvedenie_vektorov.html

function-x.ru/derivative_directional.html

habrahabr.ru/post/307312/

www.youtube.com/watch?v=GkB4vW16QHI

www.youtube.com/watch?v=U7HQ_G_N6vo

Нашли частную производную по икс = 3
Нашли частную производную по игрек = 2

Значит, нужно построить на плоскости XoY двумерный вектор (3,2), он будет указывать направление наискорейшего подъема
17 Mar 16:00 avatar

Освоение работы с UniRx

Есть проект для Unity2017 (UniRx), в корне проекта есть README.

GitHub проекта (и главный источник туториала) — github.com/neuecc/UniRx
+ habrahabr.ru/post/342660/

infalliblecode.com/tag/unirx/
17 Mar 13:50 avatar

Конспектирвоание foundation_classes

//это начальная точка конспектирования — начало раздела foundation_classes
www.opencascade.com/doc/occt-7.2.0/overview/html/occt_user_guides__foundation_classes.html#occt_fcug_1

//заголовочный файл содержащий описание класса и другую инфу по указателю Handle() — это тип указателя используемый в OCCT
www.opencascade.com/doc/occt-7.2.0/refman/html/_standard___handle_8hxx.html#a464f2f86d5d805f03f4e3c9beb007e40
www.opencascade.com/doc/occt-7.2.0/refman/html/classopencascade_1_1handle.html#a203befbdce71112e7c1799ffdb9c7ade

//описание Standard_Transient Class — самый абстрактный класс, от которого наследуется большинство (если не все) что есть в OCCT
www.opencascade.com/doc/occt-7.2.0/refman/html/class_standard___transient.html#details
www.opencascade.com/doc/occt-7.2.0/refman/html/_standard___transient_8hxx.html

Законспектировать их описание и методы (их не так много)
15 Feb 09:03 avatar

VIM --- SublimeText

habrahabr.ru/post/193176/

forum.sublimetext.com/t/actualvim-perfect-vim-input-for-sublime-text-3/26301

www.sublimetext.com/docs/3/vintage.html

stackoverflow.com/questions/14667778/how-to-enter-vintage-command-mode-in-sublime-text

www.sublimetext.com/docs/2/vintage.html

Активация:
Preferences — settings — изменить «ignored_packages»:[«Vintage»] на «ignored_packages»:[]

Настройка клавиш:
if you'd like to bind «jj» to exit insert mode, you can add this key binding:

{ «keys»: [«j», «j»], «command»: «exit_insert_mode»,
«context»:
[
{ «key»: «setting.command_mode», «operand»: false },
{ «key»: «setting.is_widget», «operand»: false }
]
}

КЛАВИША С = enter_insert_mode
КЛАВИШИ D+F = exit_insert_mode

Vintage supports these ctrl key bindings:

Ctrl+[: Escape
Ctrl+R: Redo
Ctrl+Y: Scroll down one line
Ctrl+E: Scroll up one line
Ctrl+F: Page Down
Ctrl+B: Page Up
13 Feb 01:43 avatar

Сервисы для paper-trading

4 Feb 13:33 avatar

Нормализация данных

ML
Нормализация — приведение признаков к диапазону [0:1], чтобы они вносили одинаковый вклад

Пример векторизация небинарных признаков (категориальных признаков, которые принимают больше двух значений)
mlbootcamp.ru/article/tutorial/

Приведение к нулевому среднему и единичной дисперсии. (прояснить)

Типы целевых переменных

Целевые переменные определяют класс задачи и могут быть представлены одним из следующих вариантов:

Один столбец с двоичными значениями: задача двухклассовой классификации (binary classification), каждый объект принадлежит только одному классу.
Один столбец с действительными значениями: задача регрессии, прогнозируется одна величина.
Несколько столбцов с двоичными значениями: задача многоклассовой классификации (multi-class classification), каждый объект принадлежит только одному классу.
Несколько столбцов с действительными значениями: задача регрессии, прогнозируется несколько величин.
Несколько столбцов с двоичными значениями: задача классификации с пересекающимися классами (multi-label classification), один объект может принадлежать нескольким классам.

***ИНТУИТ***
Данные низкого качества, или грязные данные — это отсутствующие, неточные или бесполезные данные с точки зрения практического применения (например, представленные в неверном формате, не соответствующем стандарту). Грязные данные появились не сегодня, они возникли одновременно с системами ввода данных.

Рассмотрим традиционный процесс Data Mining. Он включает следующие этапы:

анализ предметной области;
постановка задачи;
подготовка данных;
построение моделей;
проверка и оценка моделей;
выбор модели;
применение модели;
коррекция и обновление модели.

Рассмотрим наиболее распространенные виды грязных данных:

пропущенные значения;
дубликаты данных;
шумы и выбросы.
Как мы можем поступить с пропущенными данными?

Исключить объекты с пропущенными значениями из обработки.
Рассчитать новые значения для пропущенных данных.
Игнорировать пропущенные значения в процессе анализа.
Заменить пропущенные значения на возможные значения.
Этапы очистки данных

В целом, очистка данных включает следующие этапы [93] (ниже изложено краткое описание содержание этих этапов, в этом же источнике можно найти подробное их описание).

Анализ данных.
Определение порядка и правил преобразования данных.
Подтверждение.
Преобразования.
Противоток очищенных данных.

Лекция 19: Процесс Data Mining. Очистка данных

Масштабирование (шкалирование) данных(http://helpiks.org/6-10662.html)

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

mlbootcamp.ru/article/tutorial/
Узнаем размеры таблицы:
data.shape

посмотреть на несколько первых и несколько последних строк таблицы
data.head()
data.tail()

Задать полям имена А1 по А16 и псоледнее поле назвать class:
data.columns = ['A' + str(i) for i in range(1, 16)] + ['class']

К элементам таблицы можно обращаться, например, так:
data['A5'][687] // первое — столбец второе — строка
или так:
data.at[687, 'A5']

С помощью метода describe() получим некоторую сводную информацию по всей таблице. По умолчанию будет выдана информация только для количественных признаков. Это общее их количество (count), среднее значение (mean), стандартное отклонение (std), минимальное (min), макcимальное (max) значения, медиана (50%) и значения нижнего (25%) и верхнего (75%) квартилей:

data.describe()

Основные методы классов, реализующих алгоритмы машинного обучения
Метод класса Описание
fit(X, y) обучение (тренировка) модели на обучающей выборке X, y
predict(X) предсказание на данных X
set_params(**params) установка параметров алгоритма
get_params() чтение параметров алгоритма