Настройка сертификата для nginx

Защищать соединение будем с помощью сертификатов от Let's Encrypt. Проект был создан для широкого распространения https среди веб-сайтов. В отличии от коммерческих центров сертификации, Let's Encrypt не требует оплаты, но существует ряд ограничений:

  • сертификат выдаётся на 90 дней
  • нет wildcard (сертификат дают строга на один домер)
  • ограничение 5-7 сертификатов в неделю

Огромный плюс Let's Encrypt в том, что процедура выдачи и обновления сертификатов полностью автоматизирована.

Оглавление:

  1. Установка Let's Encrypt
  2. Настройка Nginx
  3. Настройка Let's Encrypt
  4. Донастройка Nginx
  5. Настройка автообновления

Далее...

Установка и настройка postgresql под ubuntu 16.04

Добавление репозитория

Необязательно, но зато будет последняя версия
Подробнее: https://www.postgresql.org/download/linux/ubuntu

sudo bash -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' >> /etc/apt/sources.list.d/pgdg.list"
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
  sudo apt-key add -
sudo apt-get update 

Установка

sudo apt-get install -y postgresql postgresql-client libpq-dev pgadmin3

Далее...

Ethernet over USB

Протокол для работы сети через usb -- rndis

Для работы с маками есть вот такая штука: https://github.com/jwise/HoRNDIS

Генератор случайных чисел

Линейный конгруэнтный генератор

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

$$X_{n+1} = (a X_n + c)~~\%~~m,$$
где $m$ — количество значений из которых формируется последовательность $(2 \leqslant m)$, $\%$ — остаток от деления, $a$ — множитель $(0 \leqslant a < m)$, $c$ — приращение $(0 \leqslant c < m)$, $X_{0}$ — начальное значение $(0 \leqslant X_{0} < m)$.

Пример использования

long seed = 1L;
long a = 25214903917L;
long c = 11L;
long m = (long) Math.pow(2, 48);
Stream<Long> stream = Stream.iterate(seed, x -> (a*x + c) % m);
stream.limit(11).skip(1).forEach(System.out::println);

Первые 10 чисел:

25214903928
206026503483683
245470556921330
105707381795861
-57898044054788
102497929776471
-194212777388010
266094224901481
-237412980546624
-133636318119733

Комбинаторика

Основые формулы и обозначения

$K$-сочетания без повторений

$ C^k_n = \frac{A^k_n}{k!} = \frac{n!}{k!(n-k)!} $

Произносится как "$C$ из $ n $ по $k$", иностранное обозначение как $\begin{pmatrix} n \\ k \end{pmatrix}$ "n choose k"


$K$-размещения без повторений

$ A^k_n=n(n-1)\cdots(n-k+1)=\frac{n!}{(n-k)!} $

"$A$ из $ n $ по $k$"


$K$-сочетания с повторениями

$ \overline{C^k_n} = C^k_{n+k-1} $

"$C$ из $ n $ по $k$ с чертой"


$K$-размещения с повторениями

$ \overline{A^k_n}=n^k $

"$A$ из $ n $ по $k$ с чертой"


Бином Ньютона

$(x+y)^n = C^0_n x^n y^0 + C^1_{n-1} x^{n-1} y^1 + \dots + C^n_n x^0 y^n $

Тождества с участием биномиальных коэффициентов

  1. $ C^k_n = C^{n-k}_n $
  2. $ C^k_n = C^k_{n-1} + C^{k+1}_{n-1} $
  3. $ C^0_n + C^1_n + \dots + C^n_n = 2^n $
  4. $ (C^0_n)^2 + (C^1_n)^2 + \dots + (C^n_n)^2 = C^n_{2n} $
  5. $ C^{n-1}_{n+m-1} + C^{n-1}_{n+m-2} + \dots + C^{n-1}_{n-1} = C^{n-1}_{n+m} $
  6. $ C^0_n - C^1_n + C^2_n + \dots + (-1)^n(C^n_n) = \begin{cases} 1, & если & n=0 \\ 0, & если & n \ge 0 \end{cases} $


Перестановки

$ P(n_1, ..., n_k) = \frac{n!}{n_1! \cdot ... \cdot n_k!} $

Например, может применятся для подсчета перестановок букв в слове.


Полиномиальная формула в общем виде

$$ (x_1 + x_2 + ... + x_k)^n = \sum_{(n_1,...,n_k): n_i \ge 0, n_1+...n_k=n} P(n_1, ... , n_k) x_1^{n_1} , ... , x_k^{n_k} $$


Формула включений и исключений

$$ N(\alpha_{1}^{'},...,\alpha_{n}^{'}) = N - N(\alpha_{1}) - ... - N(\alpha_{n}) + N(\alpha_{1},\alpha_{2}) + ... + N(\alpha_{n-1},\alpha_{n}) + ... + (-1)^n N(\alpha_{1},...,\alpha_{n}) $$

$ \alpha $ свойство
$ \alpha^{'} $ исключающее свойство
$ N(\alpha_{n-1},\alpha_{n}) = C_n^2 $

$$ \sum_{k=0}^{n} (-1)^k C_n^k (n-k)^m = 0 $$

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

sudo /usr/lib/virtualbox/vboxdrv.sh setup

Установка rails приложения с нуля на ubuntu

В этой заметке я рассмотрю полный цикл развертывания rails приложения на ubuntu-server.
Использованный стэк технологий:

  • Ubuntu server
  • Postgresql
  • Nginx
  • RVM
  • Puma
  • Ruby
  • Git
  • Sidekiq
  • Redis
  • Rails
  • Capistrano

Далее...

Переход с Posgresql 9.4 на 9.5

Правим конфиги в соответствии с предыдущей версией:

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

sudo nano --syntax=sh /etc/postgresql/9.5/main/pg_hba.conf
sudo nano --syntax=sh /etc/postgresql/9.5/main/postgresql.conf

 

Останавливаем сервисы:

sudo service postgresql stop

 

Дропаем новый кластер:

sudo pg_dropcluster 9.5 main

 

Обновляем предыдущий:

sudo pg_upgradecluster 9.4 main

 

Дропаем предыдущий:

sudo pg_dropcluster 9.4 main

 

Проверяем:

pg_lsclusters

 

Теперь удалим ненужные пакеты:

dpkg --get-selections | grep postgres

 

Удаляем пакеты с предыдущей версией:

sudo aptitude purge postgresql-9.4 postgresql-client-9.4 postgresql-contrib-9.4 postgresql-server-dev-9.4

Unknown-property JavaFX css в Eclipse

При редактировании css в Eclipse для JavaFX проекта у меня возникали предупреждения такого типа:

Unknown-property "-fx-background-color"
...

Для исправления нужно подключить JavaFX SDK: Идём в своство проекта, затем Java Build Path -> Libraries -> Add Library... -> JavaFX SDK. После пересборки проекта все предупреждания должны пропасть.

Обновление postgesql и ошибка в рельсах

При обновление postgresql с 9.3 до 9.5 получил вот такую ошибку при старте рельс-приложений:

PG::ConnectionBad (could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
):

Как оказалось, при установки gem'a pg, происходит запоминание сокета, по которому идёт коннект. Поэтому что поправить, можно либо переустановить gem:

$ gem uninstall pg
$ cd my-rails-app/
$ bundle install

Либо, поправить номер порта на требуемый в /etc/postgresql/9.5/main/postgresql.conf.

Проблема с сохранением новой модели в rails

Столкнулся на ровном месте с очередной магией рельсов, модель упорно отказывалась сохраняться с ошибкой ActiveModel::ForbiddenAttributesError.

Далее...

Разделение выполнения Javascript по контроллерам

По идеалогии rails грузит весь код javascript один раз при первом обращении к сайту и потом лишь обновляет содержимое <body>. Вот один из самых удачных способов на мой взляд разделить выполнение javascript по котроллерам и даже экшенам.

Далее...

Горячие клавиши Ubuntu

Комбинация Описание
Ctrl + Alt + T Открытие терминала

Горячие клавиши Firefox

Комбинация Описание
Ctrl + Left mouse Открытие вкладки в новом окне
Shift + Del Удаление адреса из истории
Ctrl + PageUp Предыдущая вкладка
Ctrl + PageDown Следующая вкладка

Установка gradle под ubuntu

Загрузка

mkdir -p ~/opt/packages/gradle && cd $_
wget https://services.gradle.org/distributions/gradle-2.3-bin.zip
unzip gradle-2.3-bin.zip

Установка

Создаём ссылку для возможности безболезненного обновления в будущем.

ln -s ~/opt/packages/gradle/gradle-2.3/ ~/opt/gradle

Открываем профайл для редактирования

gedit ~/.profile

И записываем переменную окружения

# Gradle
if [ -d "$HOME/opt/gradle" ]; then
    export GRADLE_HOME="$HOME/opt/gradle"
    PATH="$PATH:$GRADLE_HOME/bin"
fi

Проверяем

source ~/.profile
which gradle
gradle -version

Полезные команды для работы с Git

Переход в другую ветку

git checkout branch

Переход в новую ветку

git checkout -b new_branch

Удаление существующей ветки

git branch -d the_local_branch
git push origin :the_remote_branch