Alhames

youtube-dl - скачивание видео с youtube и других сервисов

Для установки переходим на http://rg3.github.io/youtube-dl/download.html (либо сюда) и следуем инструкциям.

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

youtube-dl https://www.youtube.com/watch?v=dQw4w9WgXcQ

Список всех поддерживаемых сайтов можно найти здесь - http://rg3.github.io/youtube-dl/supportedsites.html
Документация - https://github.com/rg3/youtube-dl/blob/master/README.md

Создание ключа для доступа по ssh

Авторизация по ключу с Linux

Если вы хотите с локального компьютера (или любой другой машины) авторизироваться на удаленном сервере (или любой другой машине) без ввода пароля, то для этого необходимо сначала на локльном компьютере сгенерировать ключи:

ssh-keygen

Будет создано 2 ключа, по дефолту это ~/.ssh/id_rsa (приватный) и ~/.ssh/id_rsa.pub (публичный). Скопируйте содержимое публичного ключа и добавьте его в файл ~/.ssh/authorized_keys на удаленном сервере.

Получение SSL-сертификата от Let's Encrypt

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

Попытка получить сертификаты через плагин для nginx не увенчалась успехом, так что я воспользовался другим вариантом - webroot. Для него необходимо разрешить доступ к статическим файлам в директории .well-known. В nginx это можно сделать, к примеру, так:

location ^~ /.well-known {
    try_files $uri =404;
}

После чего запускаем команду на получение. К примеру, для доменов alhames.ru и www.alhames.ru, ссылающихся на директорию /var/www/alhames.ru/public, она будет выглядеть так:

certbot certonly --webroot -w /var/www/alhames.ru/public -d alhames.ru -d www.alhames.ru

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

Fear

Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path. Where the fear has gone there will be nothing. Only I will remain.

Страх убивает разум. Страх есть малая смерть, влекущая за собой уничтожение. Но я встречу свой страх и приму его. Я позволю ему пройти надо мной и сквозь меня. А когда он пройдет через меня, я обращу свой внутренний взор на его путь. И там, где был страх, не останется ничего. Лишь я, я сам.

Dune by Frank Herbert, 1965

Ссылки на файлы и папки в Linux

# Создаем директорию для тестов и переходим в нее
mkdir /tmp/tests && cd /tmp/tests
# Создаем файл `src` и записываем в него "abc"
echo "abc" > src
# Создаем абсолютную символическую ссылку `link1` на файл `src`
ln -s /tmp/tests/src /tmp/tests/link1
# Создаем относительную символическую ссылку `link2` на файл `src`
ln -s src link2
# Создаем жесткую ссылку `link3` на файл `src`
ln src link3
# Первый столбик - inode - у файла и жестких ссылок он будет одинаков
# Второй столбик у символических ссылок начинается с "l"
# Третий столбик - количество жестких ссылок на файл
# В последнем столбике выводится имя файла либо имя ссылки и путь куда она ссылается (для символических ссылок)
ls -li
> total 0
> 44754521297123792 lrwxrwxrwx 1 alhames alhames 14 Jan  2 18:11 link1 -> /tmp/tests/src
> 14355223812434266 lrwxrwxrwx 1 alhames alhames  3 Jan  2 18:11 link2 -> src
> 13229323905596938 -rw-rw-rw- 2 alhames alhames  4 Jan  2 18:09 link3
> 13229323905596938 -rw-rw-rw- 2 alhames alhames  4 Jan  2 18:09 src
# К ссылкам можно обращаться также как и к файлу
cat link1
> abc
cat link2
> abc
cat link3
> abc
# Изменения отражаются на всех
echo "1" >> src
echo "2" >> link1
echo "3" >> link2
echo "4" >> link3
cat src
> abc
> 1
> 2
> 3
> 4
# Переименуем директорию в `tests1`
mv ../tests ../tests1
# Абсолютная символическая ссылка стала битой (подсветится красным)
# Отсносительная символическая и жесткая по-прежнему работают
ls -li
> total 0
> 44754521297123792 lrwxrwxrwx 1 alhames alhames 14 Jan  2 18:11 link1 -> /tmp/tests/src
> 14355223812434266 lrwxrwxrwx 1 alhames alhames  3 Jan  2 18:11 link2 -> src
> 13229323905596938 -rw-rw-rw- 2 alhames alhames 12 Jan  2 18:26 link3
> 13229323905596938 -rw-rw-rw- 2 alhames alhames 12 Jan  2 18:26 src
# Удаляем символические ссылки
rm link1 link2
# Если мы удалим источник, то все относительные ссылки сломаются, но жесткие по-прежнему будут работать
rm src
ls -li
> total 0
> 13229323905596938 -rw-rw-rw- 1 alhames alhames 12 Jan  2 18:26 link3
cat link3
> abc
> 1
> 2
> 3
> 4

P.S. Символическая ссылка указывает на путь к файлу или директории, а жесткая - на дескриптор inode. Как следствие, жесткие ссылки можно создавать только на файлы и только в пределах одной файловой системы.
Более подробно: Работа с жесткими и символическими ссылками

Цитата #2

サヨナラダケガ人生ダ。

Жизнь состоит из прощаний.

Цитата #1

Трудно все успевать когда ничего не делаешь.

Игромир 2017

Сегодня в первый раз побывал на Игромире / КомикКоне (искренне не понимаю почему нельзя было объединить название под единый слоган?) и по свежим следам хочу описать впечатления с разных точек зрения.

Организация

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

А сама станция метро - это отдельная история - ни одного указателя в каком направлении едет поезд и какие у него станции. Ни одного.

Сам павильон в двух шагах от метро. По пути предлагают купить билет со скидкой 25%. На входе я ожидал увидеть очередь - но нет, заходишь сразу и ничего не ждешь. Так как я не нашел в интернете никакой достоверной информации о наличии гардероба (на официальном сайте нет информации даже о часах работы выставки), то оделся так чтобы ничего не оставлять. Гардероб, все же, был, но вот в него-то, как раз, была гигантская очередь.

Косплей

Это первое что ты видишь, еще даже не дойдя до выставочного центра. В целом, это действительно круто для детей, которым представилась возможность пнуть увидеть любимого персонажа вживую. Но лично у меня фотографироваться с кем-либо желания не возникало.

Качество было самое разное - от хорошо подобранных под телосложение персонажей, качественно проработанной одежды и грима до бумажного пакета на голове.

Для косплееров - это отличная возможность показать себя. Хотя я не совсем понимаю почему разрешены откровенные наряды на мероприятии с возрастным рейтингом 0+. Также не совсем понятно предоставлялось ли им место для переодевания, т.к. некоторые переодевались в туалете.

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

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

Магазин

Что меня озадачило - это то что большое количество стендов просто торгует своими товарами. И это при том что выставка платная. Поэтому, с точки зрения посетителя, платить 2000 р. за вход, чтобы купить фигурку за 1000 р. - как-то не очень.

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

С точки зрения магазина - то за 6900-11000 р. за 10 м2 (именно столько стоила аренда) он получает огромное количество целевой аудитории. Но т.к. большинство посетителей - дети, то не уверен что продажи были действительно заоблачные. Цены - те же, что и в онлайн-магазине. Поэтому, по сути, ты покупаешь рекламу своего магазина.

Сцены

Их было несколько, на каждой что-то говорили и как-то развлекали гостей. В основном это были какие-то розыгрыши или что-то в этом духе - я не особо на них смотрел, поэтому добавить больше нечего. А еще в LoL играли - будь я фанат этой игры, я бы, наверное, у этой сцены задержался.

Игровые стенды

Наверное, основной целью похода на Игромир у меня была возможность опробовать VR до покупки шлема. Я, конечно, знал что будет очередь, но, блин, такая?! Был Skyrim (VR), который я очень люблю, но нервы свои я ценю больше - потому даже не стал стоять. Были еще и другие неизвестные мне игрушки с VR, но там и шлем был всего один, и очередь, хоть и маленькая, но почти не двигалась.

В остальном люди играли в самые разнообразные игры и подобное действо меня не очень впечатлило, т.к. поиграть я и дома могу. И пускай Far Cry 5 еще не вышел, а здесь его можно было пощупать - будто бы я не прошел предыдущие части и не понимаю что ждать от этой. Лучше б побольше VR-шлемов принесли бы.

Топ блогеры

Дабы не выражаться нецензурно, я пожалуй пропущу описание этого.

Специальные гости

В этот раз это были Рутгер Хауэр и Кристофер Ллойд. Также еще была масса наших известных личностей, о которых я ничего не знаю. Возможно, фанаты бы пошли только ради них, но это как-то не про меня.

Установка и настройка https

Внимание!
Начиная с октября 2016 г. Mozilla Firefox и с марта 2017 г. Google Chrome не поддерживают сертификаты от StartCom.
Вместо них можно воспользоваться бесплатным сертификатом Let’s Encrypt.

Как получить бесплатный сертификат для сайта

Чтобы получить бесплатный сертификат для https идем на startssl.com и регистрируемся там. После регистрации вы получите файл сертификата для авторизации на сайте (*.p12), который необходимо импортировать. В Windows 10 для этого достаточно два раза кликнуть по файлу, после чего запуститься Certificate Import Wizard и сделает почти всю работу за вас. Раньше выдавали сертификат всего на один год, но последний раз (октябрь 2016 г.) сразу выдали на 4 года. В любом случае по истечении срока действия сертификата или его потери достаточно вновь ввести email, ввести код подтверждения (который придет на email) и создать новый сертификат.

После прохождения валидации вам предоставят возможность создавать сертификаты. Бесплатный тарифный план включает в себя неограниченное (наверное) число сертификатов Class 1 - это сертификаты Domain Validation (DV), которые требуют лишь подтверждения владения доменом. Самый простой способ подтвердить - запросить код подтверждения на почту webmaster@, после чего в один сертификат вы можете включить до 10 разных доменов. Wildcard не поддерживается, поэтому как минимум нужно будет указать домен с www и без, ну и остальные по вашему желанию. Эти сертификаты выдаются на год, но через год вы можете бесплатно сгенерировать новый и заменить старые файлы.

Как установить сертификат на сервер

Для установки сертификата вам потребуется файлик с приватным ключем *.key и файлик с сертификатом *.pem. Первый вы получаете в процессе генерации сертификата, второй можно скачать со страницы списка сертификатов. Далее вам понадобится рутовый сертификат, его скачиваем с этой страницы - startssl.com/root - Root 1 - StartCom Certification Authority - ca.crt(pem). После чего объединяем рутовый сертификат с нашим в один файлик:

cat alhames.ru.pem ca.crt > cert.pem

Далее устаналиваем приватный ключ:

openssl rsa -in alhames.ru.key -out priv.key
chmod 600 priv.key

Все готово, теперь остается лишь вписать необходимые настройки в nginx. Просто копипастим все оттуда, вкачестве ssl_certificate используем файлик cert.pem, а в качетсве ssl_certificate_key используем priv.key.

Настройка cron

Для запуска скриптов по расписанию необходимо отредактировать файл /etc/crontab. Параметры задачи разделяются пробелом и имеют следующую последовательность:

  • Минута (0 - 59)
  • Час (0 - 23)
  • День месяца (1 - 31)
  • Месяц (1 - 12 или jan,feb,mar,apr...)
  • День недели (0 - 6, где воскрксенье = 0, или sun,mon,tue,wed,thu,fri,sat)
  • Имя пользователя
  • Команда

Задачи из крона запускаются не чаще раза в минуту. Указание времени по сути имеет вид фильтра - как только текущее время под него попадает, то задача запускается.

  • Если указать *, то это будет соответствовать любому значению.
  • Если указать конкретное число/название - то задача будет запускаться когда это число будет совпадать с текущим. Например 10 20 * * * будет запускаться раз в день в 20:10.
  • Также можно указать диапазон через дефис. Например, 0-10 * * * * будет запускаться каждую минуту в началае часа 10 раз.
  • Также можно перечислить время, разделив его запятой: 0,1,2,3,4,5 * * * *.
  • Также можно указать интервал, разделив * на число. Если текущее время будет делиться без остатка, то задача запустится. Например */10 * * * * будет запускаться каждые 10 минут (в 00, 10, 20, 30...).

Для записи логов выполнения в файл дописываем в конце команды следующее: > /tmp/cron.log 2>&1, что значит что поток ошибок (stderr) будет перенаправлен в поток вывода (stdout), который в свою очередь запишется в файл /tmp/cron.log. Для дозаписи ">" заменяем на ">>".

Итак, чтобы запускать команду Symfony раз в сутки в 23:00 и логировать ее выполнение, пишем следующее:

0 23 * * * nginx /var/www/project/bin/console cache:clear >> /var/www/project/var/logs/cron.log 2>&1