Xcode: создание пакета

Создаем пакет стандартными способами xcode

Далее можно сохранить его в любой git и применять метки (tag):

git tag -a 1.0.0 -m "version 1.0.0"
git tag
1.0.0
git push origin --tags

Особенности работы iisnode

В логах windows можно увидеть следующую ошибку:

Faulting application name: w3wp.exe, version: 10.0.14393.0, time stamp: 0x57899b8a
Faulting module name: ntdll.dll, version: 10.0.14393.2969, time stamp: 0x5ccd148a
Exception code: 0xc0000005
Fault offset: 0x0000000000065553
Faulting process id: 0x2694
Faulting application start time: 0x01d88ba20ec97214
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
Report Id: f0c1f728-42d5-446e-b599-6bc97223eb12
Faulting package full name: 
Faulting package-relative application ID: 

Проблема заключалась в том, что в один момент времени процесс node.exe потребляет оперативной памяти больше 2Gb.

Читать далее «Особенности работы iisnode»

Перенаправление логов в systemd

Создаем сервис:

[Unit]
Description=RPC сервис
After=network-online.target

[Service]
User=www-data
Restart=on-failure
# тут указываем путь к серверному приложению
WorkingDirectory=/var/www/rpc-release
ExecStart=/usr/bin/node /var/www/rpc-release/bin/www conf=./release.conf
StandardOutput=file:/var/log/rpc/rpc-dev.log
StandardError=file:/var/log/rpc/rpc-dev-error.log

[Install]
WantedBy=multi-user.target
Читать далее «Перенаправление логов в systemd»

Locust: нагрузочное тестирование

Подробнее на официальном сайте: https://docs.locust.io/en/latest/quickstart.html

Создание простого теста:

from locust import HttpUser, task, between

class Exists(HttpUser):
    wait_time = between(1, 5)

    @task(1)
    def auth(self):
        self.client.get("/exists")

Для проверки можно выполнить:

import requests as r
base_url = 'http://localhost:5007/release'
r.get(base_url + '/exists')

# <Response [200]>
Читать далее «Locust: нагрузочное тестирование»

Ошибки в taiga

ACCESS_REFUSED - Login was refused using authentication mechanism AMQPLAIN. For details see the broker logfile

Ошибка была в том, что был удален пользователь taiga. Чтобы исправить авторизоваться под taiga и выполнить:

sudo rabbitmqctl add_user taiga taiga
sudo rabbitmqctl add_vhost taiga
sudo rabbitmqctl set_permissions -p taiga taiga ".*" ".*" ".*"

Установить Jupiter notebook на Ubuntu 20.04

Создаем нового пользователя

sudo adduser jupiter
sudo usermod -a -G www-data jupiter

Далее авторизуемся под новым пользователем:

sudo apt install python3-pip python3-dev
sudo pip3 install virtualenv

mkdir ~/my_project_dir
cd ~/my_project_dir
virtualenv my_project_env

source my_project_env/bin/activate
Читать далее «Установить Jupiter notebook на Ubuntu 20.04»

Основы Python

Список — это структура данных. Чтобы создать список, его элементы перечисляют через запятую в квадратных скобках и присваивают переменной. Например, вот список из пяти первых значений столбца installs из таблицы с данными «Книжного грызуна»:

installs = [29486, 33968, 30830, 34361, 33968]

Да! Индексы могут быть отрицательными — это называется обратная индексация. Такая программа покажет на экране значение 36.8, то есть последний элемент списка.

temperature = [36.6, 37.2, 36.5, 36.8]
print(temperature[-1]) 

Обратная индексация

Индексы могут быть отрицательными. Чтобы получить последний элемент списка, в квадратных скобках указывают -1. Индекс предпоследнего элемента — -2, третьего с конца элемента — -3 и так далее. Обратиться к одному и тому же элементу можно как по обычному, так и по отрицательному индексу:

russian_cities = ['Москва', 'Санкт-Петербург', 'Томск', 'Екатеринбург', 'Владивосток', 'Смоленск', 'Барнаул', 'Сочи', 'Красноярск']

print(russian_cities[6])
print(russian_cities[-3])

Что такое срезы

Срезы — почти как индексы. Только они позволяют получить не один, а сразу несколько идущих подряд элементов списка. Чтобы сделать срез, в квадратных скобках через знак : указывают начало и конец желаемого диапазона. Например, data[1:5]some_list[7:9].

Срезы начала и конца списка

Срезы конца списка работают аналогично. Последний элемент среза совпадает с окончанием списка, поэтому достаточно указать индекс первого элемента. Удобнее делать это через отрицательный индекс. Так можно получить последние три элемента prime_numbers:

prime_numbers = [2, 3, 5, 7, 11, 13, 17]
print(prime_numbers[-3:]) 
Скопировать код[11, 13, 17] 

Как формулировать гипотезы?

  • Определите цель. Например, вы хотите, чтобы посетители сайта покупали больше. Вокруг этой точки и следует формировать гипотезы, именно на неё будут влиять результаты исследования;
  • Предполагайте. В свободной форме сделайте предположения о том, что влияет на выбранное для анализа явление. Например: «Число покупок зависит от внешнего вида карточек товаров». Избегайте суждений в духе «это и так понятно». В аналитике нет ничего очевидного — всё нужно сначала доказать;
  • Уточните гипотезу. Здесь два пути: можно постараться сделать гипотезу максимально точной с самого начала либо сразу приступить к проверке. В ходе работы вы обязательно сформируете новые, уточняющие предположения. Например, гипотеза «Число покупок зависит от внешнего вида карточек товаров» через некоторое время может превратиться в такую: «Возможность предварительного просмотра в карточке товара влияет на рост числа покупок».
  • Действуйте. В хорошей гипотезе всегда есть не только цель, но и действие: «Если добавить в карточки товаров возможность предварительного просмотра, это увеличит число покупок». При формулировании гипотез один из этих элементов часто теряют. Например, вы делаете редизайн сайта. Но зачем? Есть действие, но нет цели. Или хотите увеличить продажи, но не знаете как. Цель есть, действия нет.
image