Анекдот про мента

Боян, наверное, но я только вчера услышал:

Идет мент по городу и видит, чувак стоит перед зоомагазином, а там в витрине рыбы плавают, чувак в одну сторону глазами поведет, рыбы туда плывут, обратно глазами поведет, рыбы в другую сторону плывут.
Мент спрашивает:

— Че делаешь?
— Да я гипнотизер, смотрите, мое сознание выше, чем сознание рыб. Я туда глазами поведу — рыбы плывут туда, обратно — плывут обратно.
— А можно я попробую?
— Да, конечно.

Через полчаса гипнотизер прошел мимо зоомагазина.

Все отделение полиции стояло перед зоомагазином. И все беззвучно хлопали ртом.

Самоубийство надо делать качественно.

Меня тут завалили буквально письмами и просьбами прокомментировать смерть (самосожжение) журналистки. Ну я вам че, Невзоров что-ли, чтоб новости комментировать?

Но раз уж так хотите. Новгородские менты не первого человека довели, там по-моему был самый жесткий «Центр-Э» и «Центр-К» пока это еще даже не было мейнстримом. Вообще из Новгорода пошли самые адекватные анархисты, avtonom.org, а это должно о чем-то говорить.

Но это была бредистория, а история будет в том, что если уж захотел убить себя по политическим мотивам — делай это правильно. Не так сложно сделать яд или простую бомбу, чтобы унести с собой как минимум одного мента, его жену и детей. Особенно детей. Тогда ты уйдешь не просто так, если просто так — похихикают и забудут. А если заберешь с собой сатрапа, ублюдка, или его выродков — войдешь в историю.

Самоубийство надо совершать правильно!

Но, если у мента живет котик — выбери другого мента. За убийство котика тебя покарают Коты Ультхара, Ктулху и Азатот с Ньярлатхотепом.

Удачи!

Генерация самоподписанных ключей для Dovecot

Пригодится для локального сервера почты или для тестирования проекта, где нужен свой почтовый сервер. Буду эту тему дальше развивать, следите по тегу postserver.

Алгоритм решения.

1. Создаем приватный ключ для корневого сертификата.
2. Создаем самоподписанный корневой сертификат.
3. Создаем приватный ключ для простого (не корневого) сертификата.
4. Создаем запрос на подпись простого сертификата.
5. Создаем простой сертификат, подписанный с помощью корневого.
6. Копируем приватный ключ для простого сертификата и сам сертификат в /etc/dovecot/private/
7. Устанавливаем файлам права в 400. Т.е. разрешаем чтение только для владельца, остальное запрещаем.
8. Если dovecot будет запускаться под отдельным пользователем, а так и надо, не забываем сменить файлам владельца.

Автоматизация

Поскольку, с первого раза настройка почтового сервера может не получиться [ВОРЧАНИЕ ON] куча инструкций, противоречащих друг другу или неполных, но одной хорошей и конкретной нет [/ВОРЧАНИЕ OFF]

Вот скрипт:

#!/bin/bash

TMPPATH="/tmp/mailkeys"
OUTPATH="/etc/dovecot/private"

echo "Making temp path $TMPPATH..."
mkdir -p "$TMPPATH"
echo "Making output path $OUTPATH..."
mkdir -p "$OUTPATH"

echo "Generate a root private key (rootCA.key)..."
openssl genrsa -out "$TMPPATH/rootCA.key" 2048

echo "Generate a self-signed root sertificate (rootCA.pem):"
openssl req -x509 -new -nodes -key "$TMPPATH/rootCA.key" -days 2048 -out "$TMPPATH/rootCA.pem"

echo "Create private key for the final certificate (dovecot.key)..."
openssl genrsa -out "$TMPPATH/dovecot.key" 2048

echo "Create a certificate sign request (dovecot.csr):"
openssl req -new -key "$TMPPATH/dovecot.key" -out "$TMPPATH/dovecot.csr"

echo "Create final certificate..."
openssl x509 -req -in "$TMPPATH/dovecot.csr" -CA "$TMPPATH/rootCA.pem" -CAkey "$TMPPATH/rootCA.key" -CAcreateserial -out "$TMPPATH/dovecot.crt" -days 2048

echo "Copy key and certificate to $OUTPATH..."
cp "$TMPPATH/dovecot.key" "$OUTPATH/dovecot.key"
cp "$TMPPATH/dovecot.crt" "$OUTPATH/dovecot.crt"

echo "Set permissions..."
chmod 400 "$OUTPATH/dovecot.key"
chmod 400 "$OUTPATH/dovecot.crt"

echo "Complete!"

Скрипт на GitHub

Історії про котів

Воротник

Любимым местом в больнице был морг, потому что в морге никто не беспокоит. Звонит тебе, например, начальство, а тебя в кабинете нет. Начальство спрашивает напарника:

— А где Толя?
— Толя в морге, компьютер чинить ушел.

Начальство вешает трубку, и принимает ответ на веру, потому что неизвестно, то ли Толя ушел туда компьютер чинить, то ли Толя ушел туда тортик с кремом жрать. А с морга выдачи нет, своих не сдают. А начальству в морг идти впадлу, ибо это ж отдельный халат (строго по инструкции) перчатки и респиратор надевать надо, а кто ж в респираторе и перчатках начальство начальством считать будет, да последняя медсестра в минздрав пошлет.

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

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

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

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

И тут заходит заместитель главного бухгалтера, которую в морг отправили инвентаризацию закончить:

— Ой, Толик, а какой красивый у тебя воротник!

И тут к ней «воротник» поворачивается и говорит так вопросительно: «мрмя?!»

Слава Ктулху, не обосралась, не родила, и даже не убежала, но резко села костлявой дупой на бетонный пол. Аж зазвенело. Потом покурить вышла. Морг инвентаризацию прошел.

«Как мне хуево…»

Иду я с работы, и тут подруливает ко мне Саня-охранник, прям без руля, одно что стены собой не сносит:

— Толь, подмени на полночи, ща к жене схожу, вернусь, есличо пузырь поставлю!
— Нахуй, Саша, мне твой пузырь, я тя так заменю, по дружбе (уж очень хотелось мне по кабинетам пошароебиться и посмотреть, может чего на сервере нет). Ничего нового не нашел.
Ну вот я сижу и думаю, медленно читая как раз вышедший роман «МЕТРО 2033», и тут слышу:

— Ой, ой, ой!!!
— Как мне хуево!

— Ой, ой, ой!!!
— Как мне хуево!

— Ой, ой, ой!!!
— Как мне хуево!

Звоню в приемный покой:

— У вас там человек умирает, или алкаша привезли, вы внутрь его занесите!
— Да нет тут никого! Мы сходили проверили!
— Пойдемте вместе!

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

— Ой, ой, ой!!!
— Как мне хуево!

ФАНФАРЫ!

Анон любит истории про жопу и говно.

Есть у нас вам.

Жопная история.

Работал в больнице на странной должности по «Гражданской обороне», иду мимо приемного покоя, выходит эксперт и хихикает. Ну спрашиваю, ще там? Не поверишь, отвечает эксперт — там бомж с толкушкой в жопе. Ну прохожу в больницу через приемник (там второй вход был, но интересно же). Действительно, лежит на каталочке дед под простыночкой, этим всем кверху. Рядом дежурный хирург суетится.

И тут я начинаю напевать «Колотушка тук-тук-тук, спит животное паук…». Еле успел выскочить — что-то в меня пульнули.

Про вписки.

Нажрались с другом, довольно богатым, в г. и девочек вызвали, точнее — вызвал он, я к тому времени давно уже накурился в обсолютные сопли. Утром просыпаемся с товарищем голые в одной постели.
— Дэн, у тебя дупа не болит?
— Нет. У меня тоже.
— Ну значит бл*ди были 🙂

Про админскую попойку.

В начале двухтысячных были популярны домовые и междомовые локалки, доступ в ФИДО, и соответственно, админо- и ФИДОпойки.

На даче сортиры называли телефонными будками (похоже же).

После организованной на даче фидо- и ЛВС- админопойки: «Какая сука облевала телефонную будку, испачкала телефонную трубку, разбросала веб-страницы, так еще и файл скачанный посреди будки валяется».

Неудачная сдача.

Препод по инженерной графике имел проблемы с дикцией. Студент сдает чертеж.
Препод: Пиздато!
Студент (офигевая): нуу.. нихуево.
Препод: «Без даты! Дата не проставлена на чертеже!».

Добавление дополнительных network namespaces к уже настроенным.

Преамбула

Когда-то давно поднимал тему network namespaces (копия), механизма Linux, позволяющего на машине с одним физическим сетевым интерфейсом организовать несколько независимых сетевых стеков, т.е. виртуальных сетевых интерфейсов с разными настройками (IP-адресом, маршрутизацией, правилами IPTABLES и т.д.). Возник вопрос, как к уже настроенным сетевым неймспейсам добавить еще один.

Это не просто, а очень просто.

Итак, имеется система такой вот конфигурации:

А требуется нечто такое:

Добавление дополнительного network namespace’а

1. Создаем новый netspace с именем, например, linkns:

ip netns add linkns

2. Создаем два связанных между собой виртуальных сетевых интерфейса veth2 и veth3:

ip link add veth2 type veth peer name veth3

3. Поднимаем интерфейс veth2, который останется в основном неймспейсе:

ifconfig veth2 0.0.0.0 up

4. Подождали, интерфейс поднялся (для проверки вызываем ifconfig без параметров):

veth2: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 3a:8d:6a:40:b8:38  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

5. Ассоциируем veth3 с новым неймспейсом linkns:

ip link set veth3 netns linkns

6. Добавляем новый интерфейс (veth2) к интерфейсам ранее созданного моста br0

brctl addif <имя_моста> <имя_интерфейса>

brctl addif br0 veth2

Можно проверить список интерфейсов командой:

brctl show br0

Вывод команды:

bridge name     bridge id               STP enabled     interfaces
br0             8000.3a8d6a40b838       no              eth0
                                                        veth0
                                                        veth2

Теперь изначальная схема моста

Превращается в такую:

Включать/отключать физические сетевые интерфейсы или мост не нужно, все было сконфигурированно ранее. Осталось произвести настройки внутри namespace linkns:

1. Поднимаем сетевой интерфейс veth3 внутри неймспейса linkns и присваиваем ему IP.

ip netns exec linkns ifconfig veth3 192.168.0.21 netmask 255.255.255.0

2. Прописываем внутри нетспейса маршрут по умолчанию:

ip netns exec linkns ip route add default via 192.168.0.1 dev veth3 src 192.168.0.21

3. Поднимаем внутри namespace’а loopback-интерфейс:

ip netns exec linkns ifconfig lo 127.0.0.1

4. Если нужно, добавляем файлы конфигурации для namespace’а, например resolv.conf (копия)

5. Проверяем работоспособность неймспейса.

Проверяем сетевые устройства:

ip netns exec linkns ifconfig

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.21  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::8c12:30ff:feda:fe06  prefixlen 64  scopeid 0x20<link>
        ether 8e:12:30:da:fe:06  txqueuelen 1000  (Ethernet)
        RX packets 55  bytes 4391 (4.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17  bytes 1458 (1.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ping:

ip netns exec linkns ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=111 time=13.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=111 time=11.6 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=111 time=12.0 ms
...

и интернет:

ip netns exec linkns lynx google.com

ФАНФАРЫ!

Network namespeces, resolv.conf и прочие файлы конфигурации.

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

Все созданные виртуальные сетевые стеки, а эмулируется не только сетевая карта, но и весь стек вместе с маршрутизацией, правилами IPTABLES и т.д., можно и нужно по разному конфигурировать. И, естественно, есть возможность создать разные файлы конфигурации для разных namespaces.

Файлы конфигурации хранятся в каталоге /etc/netns/<имя_namespace>

Различный resolv.conf для разных namespace’ов.

Например, в основном неймспейсе есть файл /etc/resolv.conf в котором прописаны адреса DNS для основной системы:

nameserver 10.10.0.1
nameserver 10.10.0.200

И пусть в системе существует второй namespace с именем linkns и для него надо прописать DNS от Google (8.8.8.8 и 8.8.4.4):

1. Создаем каталог /etc/netns/linkns.
2. В каталоге создаем (или копируем готовый из /etc) файл resolv.conf.
3. Записываем в файл новые адреса DNS:

nameserver 8.8.8.8
nameserver 8.8.4.4

Аналогично можно поступить и с другими файлами конфигурации, например правилами IPTABLES (если ваша система поддерживает конфигурацию фаервола через конфигурационные файлы).

Депутатка

Ты писала ведь рассказы,
И стихи ты сочиняла.
Но от этого финансов
Много ты не получала.

А ведь надо много денег,
Очень клево быть богатой.
И ты стала, и ты стала,
И ты стала депутатом!

Пр:	Депутаты, депутаты,
	Президенты, президенты,
	Каждый месяц с беззаконья
	Получают дивиденты!
	
	(2 раза)

За тебя голосовали, 
Потому что твое слово
Било ядовитым жалом
По политикам и гадам

Ты была душой красива,
И читателей любила.
А сейчас на джипе ездишь -
На народ ты свой забила.

Пр.

Раз домой ты возвращалась,
Темной ночью из Госдупы
За закон голосовала,
Что продаст все наши души.

Из окна блеснуло дуло,
Следом выстрелы раздались,
На песок упали гильзы,
Ну а ты не поднималась...

Исполнение, live, группа «Позитив». Текст — Толик Панков.
https://youtu.be/jkEP_aan6q4?t=878

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

Сортировка многомерного массива в PHP.

Пояснение к задачке «Список стран».

Преамбула

Итак, имеется довольно простая учебная задача, отобразить на странице список стран с флагами, кодами ISO и наименованиями на английском и русском, необходимо обеспечить сортировку по столбцам базы данных (таблицы). В качестве хранилища данных выбираем текстовый файл формата CSV с разделителями «точка с запятой» (;). Готовый файл можно взятьздесь или здесь. Для отображения флагов, понадобятся соответствующие картинки. Можно взять здесь или здесь

Форма ввода

Для выбора поля, по которому сортировать данные, а также, как их сортировать (по возрастанию или убыванию), необходима форма. Добавляем код, генерирующий форму в функцию print_sortform(), которая будет вызываться после функции print_top(), которая, в свою очередь, печатает заголовок HTML и заголовок таблицы.

Код функции

Ранее в скрипте объявляем две глобальных переменных

$field = "ISOA2"; //поле, по которому будем сортировать
$direction = 0; //направление сортировки: 0 - по возрастанию, 
			//иначе - по убыванию

и два массива в самой функции — $fields и $sortmess, содержащие идентификаторы полей и информацию для отображения их в форме. Далее в цикле foreach формируем набор из переключателей (radiobutton) для выбора нужного поля.

Остальное в функции достаточно тривиально.

Загрузка данных

Данные будем хранить в многомерном массиве вот такой структуры:

Функция загрузки:

Загрузка данных

Заводим глобальную переменную $errmsg для того, чтоб туда писать сообщение об ошибке, и глобальный массив $data для нашей таблицы (БД), да, очевидный минус — я не стал париться с количеством элементов разбитой в массив строки. Но для PHP это не так, чтобы и критично. Если что просто вывалится с ошибкой. Некоторые вообще не заморачиваются обработкой ошибок в PHP, а отдают все на волю интерпретатора.

Далее, читаем построчно, разбиваем строку на составляющие и дописываем в массив ассоциативный массив с указанными полями, соответственно, в каждом элементе массива $data будет ассоциативный массив с данными, по одному на строку. В итоге получится многомерный (вложенный) массив (в терминах PHP, в других языках «многомерный» может означать несколько другое, по мне бы так термин «вложенный» был бы лучше).

Передача параметров для сортировки массива

Передаем их в GET-параметрах. Значения параметров пишем в глобальные переменные.

if (isset($_GET['sort']))
{
	$field=$_GET['sort'];
}
if (isset($_GET['direction']))
{
	$direction=$_GET['direction'];
}

Проверять корректность переданных значений будем в функции сортировки.

Сортировка многомерного массива по указанному полю

В PHP имеется функция сортировки usort(); которая принимает массив данных, в качестве первого параметра, и функцию сортировки в качестве второго. Функцию сортировки описывает пользователь. В нее передается два элемента массива, а пользователь описывает алгоритм сравнения, таким образом, чтобы пользовательская функция выдавала 3 значения: -1: 1-й элемент < 2-го элемента, 0: 1-й элемент == 2-му элементу, 1: 1-й элемент > 2-го элемента. Пишем соответствующую пользовательскую функцию:

function compare ($a, $b)
{	
	global $field;
	global $direction;
	global $errmsg;
	
	if (!array_key_exists($field, $a))
	{
		$errmsg = "Field $field not found";
		return 0;
	}
	
	if ($direction == 0)
	{
		return strnatcmp($a[$field],$b[$field]);
	}
	else
	{
		return (strnatcmp($a[$field],$b[$field])*-1);
	}
}

1. В переменные $a и $b передаются два элемента массива, который надо отсортировать.

2. Далее, подключаемся к ранее заданным глобальным переменным:

$field
— поле таблицы (БД), по которому будем сортировать.
$direction — направление сортировки — 0 по возрастанию, другое значение — по убыванию.

3. Проверяем, есть ли соответствующий ключ в массиве, а это надо проверить, т.к. ключ передается в запросе, а в запросе может придти не то, что ожидает скрипт.

if (!array_key_exists($field, $a))
...

4. Проверяем, как сортировать и сортируем с помощью функции strnatcmp(). От стандартной strcmp() она отличается тем, что если ей попадается набор чисел в виде строк, то она их будет сортировать в формате, обычном для человека:

strnatcmp():

4
8
10
12
16
20
24
28

strcmp():

10
100
104
108
112
116
12
120
124

strnatcpm()strcpm()), как раз возвразащают 0, если аргументы равны, -1 если 1-й > 2-го, и 1, если 2-й > 1-го.

Чтобы поменять порядок сортировки на обратный, достаточно поменять результат работы функции на обратный, что можно сделать, умножив результат функции strnatcmp()/strcmp() на -1:

(strnatcmp($a[$field],$b[$field])*-1)

Результат

Скриншот:

Исходник
Посмотреть, как работает

Известные баги

— Нет флагов некоторых редких стран (может быть потом сам нарисую).
— Почему-то страны на русскую букву Р криво сортируются, если сортировать по русским наименованиям стран.

Источники

usort()

Технопульс

А оказывается, наши тексты таки исполнялись, значит, и текст выкладывать можно, и видео на канале.

Сердце бьется в ритме хардкора, 
И тебя съедает грусть,
Приложи ухо к полу -
Ты услышишь Технопульс
Тяжелые ритмы 
	огромных машин
Идут из-под земли
И в этом звуке нам слышится, 
		нам слышится
УМРИ!

Пр:
	Умри! Умри, человек!
	Умри! Недолог твой век,
	Умри! Ты остался один
	В мире жестоких и мощных машин!

Техника влечет молодые умы
Она разжижает кровь,
И ты никогда не покинешь,
Сытость своих городов.

От голубого экрана и водки,
Твой мозг давно не у дел,
Но жирные падлы - политики, суки
Уже готовят удел.

Пр.

Ясное солнце упало с небес,
Средь ночи настал рассвет,
Всю округу залил
	радиоактивный свет
Ты испарился в момент,
Ты убежать не успел
А он над пеплом твоим
	     реквием пропел

Пр.

Исполнение здесь: https://www.youtube.com/watch?v=kyrfRcp7TcE

Grep и awk для Windows

Понадобилось тут на винде работать с некоторыми логами. И Линукса под рукой не было, нашел, в общем grep и awk под винды, вроде, из официального SourceForge GNU.

Правда, официальные версии сделаны кривовато, в том смысле, что когда хочешь скачать только бинарники, в архиве оказываются только EXE (плюс куча ненужного мусора), но не оказалось DLL, которые нужны экзешникам. Скачиваешь инсталлер — он ставит и EXE и DLL, но в PATH надо каталог вручную добавлять.

В общем, я все это дело перепаковал, в обычный RAR SFX архив, который распаковывается в %WINDIR% (обычно C:\Windows), никакого инсталлятора/анинсталлера не приделывал, и вообще это для себя и стаи товарищей. Хотите качайте, хотите нет.

Содержимое архива:

awk.exe
egrep.exe
fgrep.exe
gawk-3.1.6.exe
gawk.exe
grep.exe
libiconv2.dll
libintl3.dll
pcre3.dll
pgawk-3.1.6.exe
pgawk.exe
regex2.dll

Работает в Windows 7 x86, Windows 7 x64 и в Windows XP. В десятке, наверное, работает, но я не проверял.

Скачать grep+awk для Windows

GNU grep 2.5.4
GNU Awk 3.1.6

C mega.nz

В любом случае, прикольно, что эти утилиты под винду есть. Иногда в винде их не хватает.

Коды стран (ISO 3166-1), CSV, XLS

Искал готовые справочники в удобоваримых форматах, не нашел. А на сайте самой ISO за скачивание в CSV или XLS надо платить деньги (тут должна быть реплика известного сумасшедшего Вениамина, в стиле, » ну каковы же сволочи») В общем, хочешь сделать хорошо — сделай это сам.

Скачать справочники кодов стран ISO

Состав архива:

iso.csv — только двухбуквенные (Alpha-2) коды и наименования стран на английском, разделитель — точка с запятой (;). Отсортировано по коду.

Пример:

Andorra;AD
United Arab Emirates;AE
Afghanistan;AF
Antigua and Barbuda;AG
Anguilla;AI
Albania;AL

isofull.csv — Код Alpha-2 (двухбуквенный), Alpha-3 (трехбуквенный), числовой, название на английском, название на русском. Отсортировано по коду. Формат — UTF-8, разделитель — точка с запятой.

Пример:

AD;AND;20;Andorra;Андорра
AE;ARE;784;United Arab Emirates;Объединенные Арабские Эмираты
AF;AFG;4;Afghanistan;Афганистан
AG;ATG;28;Antigua and Barbuda;Антигуа и Барбуда
AI;AIA;660;Anguilla;Ангилья

isofull.xls — то же самое, только в формате Microsoft Excel 2003.

Скачать с mega.nz, RAR, 20 Кб

ЗЫ. Отдельный геморрой вышел с русскими названиями стран. На сайте ISO их бесплатно нету, только на французском (тьфу, буэ), ладно, полез в конторе в «Гарант» (это типа юридическая БД, конкурент «Консультанта+»). Оказалось, что у них, сцуко, коды не обновлялись с прошлого века — Югославия есть, а вот всяких Сербий и Черногорий нет. Пришлось сверять два списка по кодам и гуглить недостающие страны, штук семь.

Sony Vegas, два видео в одном кадре, два видео воспроизводящихся одновременно.

Преамбула

На Ютубе куча мануалов разной степени полезности, как можно показывать на одном экране (в одном кадре) в Vegas 3, 10, 100500 видео одновременно, как сделать «видеостену». Но хрен кто нормально объяснил, как можно разделить экран только на две части, и добиться того, чтоб исходные видео не превратились в кашу, не были слишком мелкими и т.д. А оказывается, есть нюансы, которые многими «профессионалами» и «видеоблогерами» по Vegas не замечены.

Чего требуется добиться?

Добиться надо (если абстрагироваться от содержания), показа зрителю двух процессов одновременно. В одной половине кадра происходит один процесс, во второй — параллельно ему следующий. Например, это может быть гость в студии (и видимый одновременно ведущий), прямая трансляция с одновременным комментированием ведущего, или просто запись двух мониторов. Вот пример с ютуб-канала:

Подготовка

1. Подбираем видео примерно одинакового разрешения, нет одинакового, ориентируемся на большее разрешение.
2. ОК, видео есть, в примере будет два с одинаковым разрешением. Смотрим в MediaInfo:

Width                       : 640 pixels
Height                      : 360 pixels
Display aspect ratio        : 16:9
Frame rate                  : 29.970 (30000/1001) FPS

Нас интересует разрешение и частота кадров.

Умножаем значение высоты и ширины на 2, чтоб показать исходные видео в полном размере 640x2=1280 360x2=720, это параметры для будущего проекта Vegas

3. Запускаем Vegas и создаем новый проект, взяв за основу вычисленные ранее параметры. У нас даже готовый пресет нашелся.
4. Обязательно снимаем галочку Настроить источник мультимедиа для лучшего соответствия проекту или настройкам визуализации. Т.к. нам не надо, чтоб Vegas подтягивал наши видео под размер проекта (1280x720), а обрабатывал их в оригинальном разрешении.

5. Создаем в проекте пустую видеодорожку, вставляем туда пустое событие:

6. Растягиваем его, можно побольше, потом подгоним.

7. Настраиваем сетку, для удобства размещения видео. Идем в Настройки —> Параметры, переключаемся на вкладку Видео, устанавливаем количество клеток сетки по вертикали и по горизонтали. У нас 2 видео, потому оставляем 2 ячейки. В переводе, похоже, перепутаны горизонталь и вертикаль.

8. Включаем сетку в разметке. Нажимаем треугольник (меню) рядом с кнопкой , выбираем Сетка:

Сетка появляется:

9. Добавляем еще две видеодорожки и размещаем на них видео. На вопрос, подгонять ли проект к видео, отвечаем Нет!


10. Удаляем аудиодорожки, когда будем совмещать видео, они будут только мешать, т.к. при наложении образуется какофония, так что если нужен звук — отдельно совмещаем его в аудиоредакторе, а потом аудиодорожкой добавляем в проект Vegas.

Далее под катом

Проект котов готов — можно рендерить.

Прямая ссылка: https://youtu.be/WsqU-xaYAu0

Пузыри — Её нет

Че-т пора разбавить карельский панк карельским же хардкором. Леша подпездывает, что сие произведение стоит отнести к жанру карельского гоп-хардкора, но чья бы корова мычала, на 2004 год он был малолетним нацистом. И хоть ща он целый редактор, но в детстве таки побыл имперцем и нацистом 🙂

Прямая ссылка: https://youtu.be/yEXivW8jhMc