Заметки любителя экспериментов

Позднее Ctrl + ↑

Привет из прошлого

Работал я несколько лет назад в одной компании, которая занималась сборкой и продажей компьютеров и разной околокомпьютерной техникой. В одни прекрасный момент решили собрать сервер для 1С. Люди собрались знающие, скидали комп в один момент. Поставили все, что нужно, протестировали и запустили в работу. А какое первое правило хорошего системного администратора? Бэкап, бэкап и еще 100 раз бэкап. Вот и занялся я написанием скрипта, который все это проделывал.
Скрипт был простой, в формате bat-файла:

  1. Рассылал всем предупреждение, что базы 1С скоро будут недоступны и ждал две минуты, пока все не закроют подключение. Кто не успел, я не виноват.
  2. Отключал все сетевые карты, чтобы не было соблазна.
  3. Создавал архивы баз 1С.
  4. Заново включал сетевые подключения.
  5. Перезагружал компьютер.

На все-провсе уходило от 15 до 30 минут, точней было лень считать. Через некоторое время я получил более выгодное предложение о работе и ушел из фирмы.
Около недели назад я получил оттуда звонок с просьбой немного переделать скрипт так, чтобы он копировал все архивы на новенький NAS. Времени свободного почти не было, поэтому отложили на несколько дней. Во второй половине недели подключаюсь к серверу и смотрю что там и как.
Архивация перестала работать из-за того, что скрипт не видел исполняемого файла архиватора. Но резервная копия продолжала создаваться копированием папок с базами до последнего дня. Посмотрел на все это и порадовался — скрипт получился действительно хороший, отработал без сбоев много лет. А я тогда был все-таки догадливым мальчиком и все выполняемые команды очень хорошо прокомментировал.
Немного покопался в системе с командами — в разных версиях серверных систем от мелкомягких некоторые команды могут не выполняться. А потом мне стало лень все это тестировать и я установил xStarter. Программа достаточно известная, алгоритмы работы гибкие, позволяют выполнять множество нужных команд. Давно уже не обновляется, автор, видимо, забросил проект. Есть косяки с некоторыми операциями, но их знание, позволяет их обойти.
В общем, воспользовался этой программой, написал последовательность действий и оставил тестироваться. В первый день или два она по неизвестной причине не запустила создание резервной копии. Затем не смогла подключиться к NAS. Вчера, зайдя на сервер, я обнаружил, что задания нет как такового. Вот это уже удивило, ибо на нескольких других серверах никогда ничего такого не случалось. Написал все заново, установил пароль на редактирование и оставил на ночь.
Утром первым делом пошел смотреть на результат. Бэкап был создан и успешно перенесен на NAS. Добавил в программу отправку мне извещения на электронную почту и отправил номер своей карты для зачисления оплаты за работу.

Пойди туда, не знаю куда

Утро ознаменовалось любопытным событием — у одного сотрудника службы административного контроля пропал на компьютере интернет. У его начальника при этом все работает нормально. Но интернета также нет и на центральном посту, который просматривает камеры видеонаблюдения. Вот это уже нехорошо. И пусть стали недоступны только камеры с другого объекта, но все равно надо что-то делать. И вроде бы нет в этом ничего такого, если бы не один момент. Зашел с первого компьютера на роутер и увидел странную картину: вместо интерфейса DIR-615 я наблюдаю интерфейс TP-Link WR741. Звоню Павлу, который занимается видеонаблюдением — он порой менял основной роутер на другой, спрашиваю не делал ли чего. Он все отрицает, говорит, что на заводе даже не был. Хм...
Смотрю на настройки, вижу, что раздается WiFi с этого роутера. Из подключенных устройств: ноутбук Acer Aspire и iPhone. Включил программу у себя на телефоне и пошел искать сеть с таким именем. Обошел все вокруг — ничего, нет такой. Впрочем, в том «зоопарке», который снаружи творится с WiFi, запросто можно пропустить нужную. Возвращаюсь в кабинет, отключаю WiFi на роутере, меняю подсеть. Интернет на компьютере появляется. Снова прохожу по зданию в надежде услышать маты :-) Опять не угадал, никто не ругается. Ок. Предупреждаю, что скоро интернет снова пропадет, иду заниматься другими делами.
После обеда звонок: снова нет интернета. Кто бы сомневался?
Спустя примерно час находим виновника. На другом конце территории завода один «умный» охранник подключил роутер, чтобы выходить с ноутбука и телефона в интернет. Скучно ему, видите ли, на посту. Вот только путем он его не настроил и... получил конфликт IP-адресов — наш роутер имеет такой же адрес. Но, конечно, не знал об этом — роутеры не предупреждают о таких событиях. Зачем, спрашивается все это было? В общем, отключили его оборудование, предупредили о том, что в случае повторения доведем до сведения начальника охраны. Будем надеяться, что охранник внемлет предупреждению.

Управление плеером VLC с пульта

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

Пульт Vieta
Вот такой вот симпатичный пульт

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

Переходим к настройке.
Lirc у меня на компьютере уже был установлен, дело было только за настройкой пульта. В процессе выяснилось множество деталей, пульт тоже оказался немного «капризным», поэтому пришлось немного отойти от стандартного пути настройки. В итоге все выглядело следующим образом.
Для начала записываем коды клавиш пульта. Мне пришлось форсировать raw-режим записи:

# irrecord -f --device=/dev/lirc0

Далее жмем Enter и немного ждем как просит программа. Вводим название пульта без пробелов, у меня это Vieta. Потом начинаем нажимать разные кнопки пульта с такой скоростью, чтобы появилась хотя бы одна точка и их было бы не больше 10. В результате irrecord определяет его параметры и затем начинается процесс ввода кнопок. Вводим название кнопки, затем, когда программа попросит, нажимаем саму кнопку. Названия лучше брать стандартные, узнать их можно выполнив следующую команду:

# irrecord -l

После того как введена последняя кнопка, при запросе имени очередной кнопки нужно просто нажать Enter. Процесс записи завершен, о чем irrecord и проинформирует, указав имя файла, в который были записаны данные. Конечно, можно использовать и получившийся в результате файл (наверное), но выглядит он не очень эстетично, поэтому лучше привести его в более читабельный вид:

# irrecord -a Vieta.lircd.conf

В конце выполнения этой команды будет предложено ввести имя файла, в который будет сохранен результат. Вводим имя и продолжаем.
Получившийся в результате файл копируем в папку /etc/lirc/lircd.conf.d. «Плюсом» в этой папке является то, что туда можно скопировать множество файлов от разных пультов и все они будут использоваться lirc. Перезапускаем службу:

# service lircd restart

Половина работы сделана, осталось настроить VLC. Для этого нужно будет создать еще один файл, в который будут записаны действия, выполняемые в ответ на нажатие соответствующей кнопки. Этот файл один для множества программ, но меня пока что интересует только плеер. Формат у файла следующий:

begin
    button = KEY_PLAYPAUSE
    prog = vlc
    config = key-play-pause
end

Здесь KEY_PLAYPAUSE — это название кнопки из ранее созданного файла vieta.lircd.conf, vlc — название программы, а key-play-pause — действие в плеере. Список действий VLC можно посмотреть на вики проекта, но лучше использовать следующую команду:

vlc -H --advanced 2>&1 |sed -n '/--key/ {s/^\ *--//; s/^\(.*\) <[^>]*>\ *\(.*\)$/\2 -> \1/; h}; /^.*[^ ].*-> key/ p; /^ -> key/ { n; s/^[ \t\n]*//M; G; s/\n//; p}'

Далее, по документации к lirc нам нужно запустить программу irexec, которая и будет «нажимать» кнопки в системе в ответ на нажатие на пульте. Но, как оказалось в случае с VLC, нам она не нужна. Осталось только настроить сам плеер на удаленное управление. Запускаем его и идеи в настройки программы и в левом нижнем углу выбираем пункт «Все». Для начала включаем управление пультом

Подключение lirc в VLC
Подключение lirc в VLC

Затем указываем имя файла конфигурации. Он у меня называется .lircrc и лежит в домашнем каталоге. Чтобы он мне не мешался, я сделал его скрытым.

Путь к файлу lircrc
Указываем полный путь к файлу lircrc

Всё, сохраняем настройки и перезапускаем плеер. Теперь можно пробовать управлять VLC с пульта.
Сразу он у меня не заработал, пришлось проверять, что компьютер вообще принимает команды с пульта:

# irw

Если после нажатия кнопки на пульте на экране появляются коды кнопок и их названия, которые были введены в файл vieta.lircd.conf, то пульт и приемник работают нормально. У меня реакции не было никакой, но после выполнения команды

# mode2

все странным образом заработало.
Особо меня порадовала кнопка Language на пульте. На нее я повесил переключение звуковой дорожки. Например, в том же «Доктор Хауз» звуковых дорожек с русским переводом несколько, но нравится мне только один. С этой кнопкой не нужно заморачиваться каждый раз при переключении.
Да, весь процесс настройки немного муторный, нужно вводить много текста, но делается это один раз, поэтому придется потерпеть.
Еще одним «минусом» , с которым мне пришлось столкнутся — ИК-излучатель в моем пульте совсем чуть-чуть торчит из корпуса, вследствие чего угол, под которым можно управлять плеером, очень мал. Надо достаточно точно направлять пульт на приемник. Впрочем, это устранимо :-)
Кстати, счастливые обладатели телефона с ИК-передатчиком, могут использовать его для управления плеером или вообще компьютером. Да, я знаю, что есть множество других программ для управления компьютером, но почему бы не использовать и такой вариант?

P.S. Пока искал как lirc различает короткое и длинное нажатие на клавишу пульта, наткнулся на недокументированный (по крайней мере, на официальном сайте его описание я не нашел) параметр ignore_first_events, который позволяет реализовать реакцию на долгое нажатие кнопки. В ходе тестирования оказалось, что сначала идет реакция на короткое нажатие, затем, если кнопка не была отпущена, то выполняется действие, запрограммированное на долгое. Чтобы было понятней, покажу на примере. Например, в файле lircrc заданы следующие секции:

begin
    button = KEY_FORWARD
    prog = vlc
    config = key-jump+short
end

begin
    button = KEY_FORWARD
    prog = vlc
    config = key-jump+medium
    ignore_first_events = 10
end

Если зажать кнопку примерно на три секунды, то сначала выполнится первая секция — плеер переместится на 10 секунд вперед, затем, спустя 10 повторов от пульта, выполнится вторая секция — плеер перейдет на 60 секунд вперед. То есть, в сумме, плеер перейдет на 70 секунд вперед.

Разница между udpxy и igmproxy в OpenWrt

Случайно обнаружил разницу при использовании udpxy или igmpproxy. Я бы сказал, что для меня она была весьма существенной. По какой-то причине я не находил в интернете подобного сравнения этих двух пакетов.
Для начала хочу отметить, что мой тарифный план у провайдера включает в себя 70 бесплатных каналов IPTV. Все остальные — за отдельную плату. Всего же их чуть менее 200 штук.

  1. При использовании igmpproxy нет необходимости переделывать плейлист, адреса в нем остаются в исходном виде, то есть udp://@239.255.1.1:1234. В случае с udpxy этот же адрес в плейлисте нужно привести к виду http://192.168.1.1:4022/udp/239.255.1.1:1234, где 192.168.1.1 — адрес роутера, а 4022 — порт, на котором случает udpxy. Все остальные параметры, думаю, понятны.
  2. А вот здесь начинается самое интересное. Igmpproxy позволяет мне просматривать только 70 каналов, которые входят в мой тарифный план, в то время как udpxy позволяет просматривать весь список — почти 200 каналов.

Последний пункт пересиливает мою лень по редактированию плейлиста — во второй половине списка есть каналы, которые мне хотелось бы смотреть.
Остается только дополнить список логотипами каналов, чтобы можно было визуально их идентифицировать, а не вчитываться в каждое название, и загрузить его в телевизор. Если бы еще придумать как просматривать эти каналы как обычные, антенные, без запуска каких-то дополнительных приложений на телевизоре — было бы просто замечательно.

Неожиданное решение

Вчера утром передо мной была поставлена задача разобраться с интернетом в профилактории: убрать ненужные точки подключения, понять сколько мы платим сейчас за интернет и т. п. И сделать общедоступную сеть для проживающих. Ну как бы не вопрос!
Позвонил провайдеру, где меня обругали за то, что я не могу назвать номера счетов. Хм, действительно, что это я? По названным IP-адресам назвали текущие тарифы и сумму оплаты в месяц. Звоню главному бухгалтеру профилактория, прошу у нее номера счетов. В ходе разговора выясняется, что их не два, а три. А я почему-то знаю только про две точки подключения. С какой целью заключался третий договор она назвать не смогла, посоветовала спросить у инженера. Звоню директору, надеясь, что он-то должен быть в курсе зачем там третий договор. Наивный... Директор тоже не в курсе и тоже ссылается на инженера. Прошу соединить меня с ним. Через минут 5 он сам перезванивает, задаю ему тот же вопрос — зачем заключали третий договор с провайдером. Он тоже не в курсе. «Зашибись!» — думаю, — «договор есть, но никто не в курсе зачем он там.» Минут через 5 он все-таки вспомнил и выдает примерно такую фразу: «Мы же лифт к интернету подключили, вспомнил.» Моя реакция была примерно такой

Что, блядь?

Далее выясняются причины такого «нестандартного» подхода. Одной из проверяющих организаций не понравилось, что люди, застряв в лифте, нажимают кнопку вызова диспетчера и попадают к администратору на первом этаже. Тот, в свою очередь, звонит в лифтерную и сообщает о поломке. Интернет был подключен для того, чтобы после нажатия кнопки вызова в лифте, люди напрямую. соединялись с лифтерной. Любопытно, но понятно.
В общем, собрал всю информацию по интернету в профилактории, иду «сдаваться» начальству. Рассказываю:

  1. Видеонаблюдение. В эту сеть, в целях безопасности, я бы никого не пускал.
  2. Бухгалтерия. Их роутер сейчас раздает интернет без пароля по зданию. Иными словами, предоставляет общедоступную сеть для всех желающих.
  3. Лифт. Опять же по причинам безопасности туда доступ должен быть ограничен.

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

Особенности DVD-проигрывателя Mystery

Записываю диски для ребенка одному из сотрудников. Поначалу пришлось подбирать нужные форматы видео, но потом, вроде все пошло нормально. Не проигрывались редкие диски, списывал на обычный брак. Потом купил диски другого производителя и начались проблемы — стали чаще появляться не воспроизводимые. Попросил инструкцию от проигрывателя, сегодня принесли. Меня там еще раньше заинтересовал один момент, хотелось посмотреть на него. Итак, представляю: Mystery MDV-728U

Руководство пользователя
Руководство пользователя

С начальной страницы можно почерпнуть полезную информацию. Чаще бы так делали, чтобы не искать в дебрях инструкции нужные моменты.

Очистка диска
Очистка диска

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

Поддерживаемые форматы
Поддерживаемые форматы

Ну то, что проигрыватель не поддерживает формат mkv мы выяснили на первом же диске. С остальными тоже не все так гладко, несмотря на то, что результат конвертации видео целиком и полностью укладывается в требования производителя. Получается что-то вроде:
«Я могу воспроизводить фильмы в DivX и Xvid, но не факт, что мне не будет лень».
Что он не проигрывает не завершенные диски, я тоже подозревал. Но опять же — 50/50. Какие-то читает, какие-то нет.
Могу сделать вывод, чисто для себя: не буду покупать DVD-проигрыватель, хотя раньше хотел. Лучше уж я их скачаю и по домашней сети посмотрю.

22 марта   dvd   mdv-728u   mystery   проигрыватель

Попытка освоить OpenCV

Мысль сделать распознавание лиц мелькала давно, с тех самых пор, как установил в коридоре камеру. Но как-то все руки не доходили. Параллельно с работой искал материалы по этой теме с упором на русский язык. Их оказалось немного и большая часть мне не подходила. И в один «прекрасный» момент я все-таки решил попробовать написать скрипт на python.
Начинать всегда надо с простого, поэтому для начала пробуем подключиться к камере. Этот этап прошел успешно. Далее пробуем сохранять кадры в файлы — тоже все хорошо. Для начала ограничился 10-ю кадрами. Все хорошо, качество устраивает. Но как же без ложки дегтя? Считывание кадров и их сохранение обернул в бесконечный цикл и вот тут начались проблемы — за редким исключением картинка «плыла». Поиск привел меня к выводу, что проблема кроется в ffmpeg, который установлен в системе. Мол, это его глюки. Пробовал самые разные варианты: менял параметры строки подключения, настройки видеорегистратора, вставлял задержку в цикл. Ничего не помогало. Руки почти опустились, осталась только мысль, что стоит дождаться обновления ffmpeg, которое уже давно обещают разработчики.
Из всей истории вынес только один «плюс»: я умудрился заметно улучшить качество картинки, которую можно получить с видерегистратора. Ну и в архив, конечно, тоже уйдет более качественная.

Когда становится скучно

Когда мне становится скучно, в голову лезут всякие интересные мысли, а руки чешутся что-нибудь поделать. На этой неделе пришлось перебрать больше принтеров на работе, чем я делал за весь прошлый год. Где-то заменил ролик захвата бумаги, где-то просто почистил внутренности. Один из принтеров был достаточно интересным — печатал только с одним определенным картриджем. Со всеми остальными выдавал чистый лист бумаги. После чистки заработал нормально, чем несказанно обрадовал клиента. Стоит отметить, что на всех предыдущих работах принтерами я никогда не занимался. А на текущей бывает, что неделями сидишь без особой нагрузки.
Появилась мысль что-то сделать с веревками для сушки белья на лоджии. Они у меня расположены высоко, не каждый может нормально повесить на них белье. Пока на улице совсем не потеплело, заниматься не буду, но будет время продумать как сделать схему при которой эти веревки можно будет опускать/поднимать. Вариант просто переделать их ниже не рассматриваю по той простой причине, что белье будет располагаться совсем уж низко.
Саму лоджию тоже надо будет попытаться хоть немного утеплить. Загвоздка в моем случае состоит в том, что окна, установленные на ней, являются однокамерными. И как этот момент повлияет на температуру на лоджии зимой я пока не знаю. С самим окнами тоже надо что-то сделать, чтобы при проветривании квартиры зимой они не запотевали. Почему-то вспоминаются уроки ОБЖ, где мы надевали противогазы, на внутренней стороне глазниц которых была не запотевающая пленка. Интересно было опробовать что-то подобное на окнах.

Кодирование видео

Продолжение поста

Увы, но все оказалось не настолько радужно. В какой-то момент Qeven «споткнулся» на аудиокодеке в очередном сериале и, в итоге, выдал полный бред. Видеоряд идет с намного большей скоростью, чем звуковой. Придется переделывать...
Долго искать не пришлось — в памяти всплыла программа ffmpeg. Да, знаю, что с нее и надо было начинать, но на тот момент хотелось какой-го GUI. После нескольких экспериментов с параметрами, родились несколько строк для обработки сериалов.

for i in *; do r=$(echo $i | sed 's/\[M-KV2501\] Spider-Man TAS /s/; s/x/e/'); mv "$i" "$r"; done;
for i in *; do avconv -i "$i" -vcodec mpeg4 -b 2400k -acodec mp3 -ab 128k "./convert/$i.avi"; done;

В первой строчке я переименовываю названия серий и привожу их к виду: s1e01 — название серии.mkv. Во второй запускаем конвертирование всех файлов с указанием нужных битрейтов (подобраны экспериментально) и кодеков (они взяты из спецификации DVD-проигрывателя). Битрейты снижал сознательно, чтобы уменьшить размер конечного файла.

Ранее Ctrl + ↓