git конспект

Вот отсюда https://ru.hexlet.io/courses/intro_to_git/lessons/intro/theory_unit

sudo apt install git
git config —global user.name «Sergei Makarov»
git config —global user.email «s.makarov@petrovich.ru»

mkdir example
cd example/
cat .git/config

touch README.md # Создаем файл
echo ‘# Hi’ > README.md # Меняем содержимое

# Первая git add подготавливает измененный или добавленный файл к коммиту. Без её выполнения сделать коммит не получится.
git add README.md # Так гит увидит новый файл

#А вот команда git commit непосредственно фиксирует изменения в репозитории
git commit -m ‘init project’ # Коммит с сообщением ‘init project’

#История коммитов
git log

# И просмотр изменений
git show 97d07816c757f3d548bddeb9acd5eddb824b3f3b

Если перед коммитов сделать git status

On branch master
Your branch is up-to-date with ‘origin/master’.
Changes to be committed: # Изменения попадающие в следующий коммит

new file: .editorconfig
modified: Dockerfile

Changes not staged for commit: # Изменения которые не попадут в коммит

modified: docker-compose.yml
deleted: rebar.lock

Untracked files: # Неотслеживаемые файлы

Procfile
Untracked – это новый файл, который не был добавлен для отслеживания командой git add. Все остальные файлы являются tracked.

С непривычки такое поведение может показаться странным. Почему бы сразу не давать возможность коммитить, без необходимости добавлять файл в отслеживаемые?
На самом деле такое поведение очень важно. Как вы убедитесь в своей практике, множество инструментов генерирует свои файлы (например, редакторы, операционная система, пакетные менеджеры), а запуск программ порождает файлы с логами и другие артефакты. И если бы git commit автоматически включал все новые файлы, в репозиторий после коммитов постоянно попадали бы ненужные данные.

Про tracked файлы

С unmodified все просто. Если файл в рабочей копии точно такой же как и в репозитории, то считается что его не модифицировали. Любой файл после коммита переходит в состояние unmodified.
Modified тоже интуитивно понятен. Как только мы изменили любой файл, он автоматически становится modified.
Но в коммит попадут только staged файлы, это те к кторым мы применили git add

git reset path/to/file переводит файл из состояния staged в modified
git checkout path/to/file переводит файл из состояния modified в unmodified, то есть по сути эта команда сбрасывает изменения.

Даже если вы удаляете данные, это приводит всего лишь к тому, что они пропадают в рабочей копии, но папка .git помнит все. Неизменяемые данные – ключевая стратегия, приводящая к таким возможностям как возврат в истории, откаты изменений и многое другое.
Кстати, по этой причине желательно не хранить в гите большие бинарные файлы (например архивы), так как это приводит к сильному распуханию папки .git.

git branch показывает в какой ветке работаю

Предположим, что вы реализовали фичу и теперь хотите, чтобы этот код оказался в мастере. Делается это командой git merge, которая сливает ветки между собой.
Как получить копию удаленного репрезитория

example$ git init
example$ cd /tmp
git clone ~/example

Давайте теперь посмотрим главное — то, как отправлять изменения:
example$ echo ‘# Hello’ > README.md
example$ git commit -am ‘replace readme’
example$ git push

Настройка удаленного сервера для работы

Вводная часть здесь: https://data36.com/data-coding-101-install-python-sql-r-bash/

R лучше устанавливать по этому туториалу: https://www.digitalocean.com/community/tutorials/how-to-install-r-on-ubuntu-16-04-2

Rstudio также отсюда https://data36.com/data-coding-101-install-python-sql-r-bash/ , только можно версию по свежее.

Mysql по этому туториалу:

https://www.fullstackpython.com/blog/install-mysql-ubuntu-1604.html

только без секьюр установки

Там же нужно будет создать юзера для mysql , можно сделать это вот так https://www.digitalocean.com/community/tutorials/mysql-ru

 

 

 

Рефлексия по задаче

Если использовать метрику users и date одновременно, то метрика users будет завышена. Это справедливо при нескольких вызовах API.

Как делать сводные aggregate(sessions ~ sourceMedium, data =ga_data, FUN = sum)

Команда .libPaths() покажет папки где хранятся пакеты. В первую из них можно зайти и удалить пакет.

Скачивая через devtools ты скачиваешь последнюю версию. Т.е. не стабильную.

Как запускать скрипты R со своего сервака

Чтобы перейти в RStudio нужно перейти по адресу http://46.101.128.25:8787 или что то типо того

Устанавливаем пакеты, как обычно, но некоторые из них установятся во временную папку
#The downloaded source packages are in
# ‘/tmp/RtmpSPFiKl/downloaded_packages’

Чтобы установить их оттуда нужно ввести команду
install.packages(list.files(«/tmp/RtmpfbgkOs/downloaded_pack‌ages/»,full.names=TR‌UE),repos=NULL)

Подробнее тут https://stackoverflow.com/questions/26269673/r-install-packages-to-install-downloaded-packages

есть еще вот классный мануал https://www.digitalocean.com/community/tutorials/how-to-set-up-r-on-ubuntu-14-04

 

 

 

 

Регулярки и ругулярки в JS

Нам нужно отследить с помощью регулярки ссылку https://tver.petrovich.ru/catalog/18410/164371/

Как это сделать обычной регуляркой

/catalog/.+/\d+
/catalog/.+/[0-9]+
/catalog/[0-9]+/[0-9]+
/catalog/\d+/\d+

. точка означает любой символ

+ означает один или более

Т.е. запись .+ ищет любые символы до следующего элемента регулярки.

\d любая цифра

\d+ находит числа – последовательности из 1 или более цифр:

[0-9] последовательность цифр, вообще тоже самое что и \d Вообще так указываются последовательности, например [A-Za-z0-9] ищет все буквы в любом регистре и цифры, а вот так наоборот не ищет [^A-Za-z0-9]

Как это сделать регуляркой в JS

Слеши "/" говорят JavaScript о том, что это регулярное выражение. Они играют здесь ту же роль, что и кавычки для обозначения строк. Т.е. ругулярку нужно писать в /регулярка/ И из это возникает необходимость экранировать /, вот так \/

Вот так ищется нужный url:

if (window.location.href.search(/catalog\/[0-9]+\/[0-9]+/) > 1){…..}

Подробнее

https://learn.javascript.ru/regular-expressions-javascript

http://www.regextester.com/

 

 

 

Про события натив JS

Событие – это сигнал от браузера о том, что что-то произошло.

Важно:

Событию можно назначить обработчик, то есть функцию, которая сработает, как только событие произошло.

Именно благодаря обработчикам JavaScript-код может реагировать на действия посетителя.

Есть несколько способов назначить событию обработчик. Сейчас мы их рассмотрим, начиная от самого простого.

Есть три способа назначения обработчиков событий:

— Атрибут HTML: onclick=»…».
— Свойство: elem.onclick = function.
— Специальные методы:
1) Современные: elem.addEventListener( событие, handler[, phase]), удаление через removeEventListener.
2) Для старых IE8-: elem.attachEvent( on+событие, handler ), удаление через detachEvent.

Справка про обработчик addEventListner

Еще одна полезная статья

Про куки, Web Storage

Источник

Web Storage — это более новое изобретение, чем куки. У web storage два интерфейса: localStorage and sessionStorage.

Их отличия:

The main difference is that the latter persists for the duration of the browser session (i.e. is flushed when the browser instance is shut down), and the former persists indefinitely.

Куки и GTM

Доставать куки можно с помощью 1st Party Cookie Variable.

Установить куки можно с помощью Custom JavaScript Variable named {{JS – setCookie}}:

function() {
 return function(name, value, ms, path, domain) {
 if (!name || !value) {
 return;
 }
 var d;
 var cpath = path ? '; path=' + path : '';
 var cdomain = domain ? '; domain=' + domain : '';
 var expires = '';
 if (ms) {
 d = new Date();
 d.setTime(d.getTime() + ms);
 expires = '; expires=' + d.toUTCString();
 }
 document.cookie = name + "=" + value + expires + cpath + cdomain;
 }
}

Чтобы использовать переменную в скрипте:

{{JS - setCookie}}('session', 'true', 1800000, '/', 'simoahava.com');

Что такое WebHook и для чего он нужен

WebHook — нужен, чтобы общаться между приложениями и передавать данные.
Вебхук может быть исходящим (принимать данные) и входящим(отправлять данные).

Например, в AMO CRM есть поле в котором нужно указывать WebHook. Туда вписывается определенный url другого сервиса.

Подробнее:

https://dev.1c-bitrix.ru/community/blogs/marketplace_apps24/easy-integration-with-bitrix24-or-magic-vibhuti.php
http://macte.pro/b24toga-webhooks/
http://macte.pro/b24toga/
https://www.youtube.com/watch?v=BcobxHl5wdc

О dataLayer

Итак, начнем с главного – dataLayer это название переменной JavaScript, которая служит для передачи данных, которые Google Tag Manager не может получить сам, но они необходимы ему для работы, такая переменная называется уровнем данных.

С одной стороны, это массив (об этом говорят квадратные скобки и сам метод push()). С другой стороны – это объект (почему нет?). Ведь у него есть свойства и методы.

dataLayer.push(); Конструкция push() предназначена для добавления значения в массив, не более.