25 сент. 2024 г.

Константин Мелихан. Крепкий отец

 Мне кажется, что этот чудо-рассказик начал вымирать на просторах интернетов. Размещу его тут.

Крепкий отец. Пародия в стиле «ретро».

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

Именно об этом размышлял старый Сантис по кличке Крепкий отец, когда в него врезался лимузин.

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

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

Вместо ответа Петруччо вынул из кармана длинного плаща кулак величиной с пивную кружку и резко ударил.

Сантис медленно упал, но быстро поднялся.

– В чем дело, Петруччо? – спросил он, лихорадочно ища в кармане какой-нибудь пистолет.

Ни слова не говоря Петруччо размахнулся и что есть силы ударил Сантиса ногой в ухо.

– Что с тобой, Петруччо? – виновато улыбаясь, спросил Сантис.

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

– Мальчишка! – прошептал Сантис, выбираясь из витрины с дамскими принадлежностями.

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

И действительно – он зашел в телефонную будку и позвонил знаменитому метателю ножей Луиджи Безрукому, который в это время был без работы и резал лук в пиццерии напротив.

– Ну, раз такой разговор, я ухожу, – сказал Сантис и пошел домой, поблескивая ножом в спине.

Петруччо выхватил из-за пазухи чугунную болванку и незаметно ударил Сантиса по голове.

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

Он был ослаблен после гриппа и еле держался на своей деревяшке. Деревяшка была как новая, поскольку Сантис каждое утро подстругивал её топориком.

Петруччо достал из-под плаща составные части автомата, собрал его, приставил дуло к груди Сантиса и прицелился. Целился он хорошо, потому что был одноглазым. Как и Сантис.

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

Но промахнулся. И пули пробили старику лоб.

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

Петруччо смотал бикфордов шнур, который он собирался подкопать под Сантиса, и просто швырнул в него бомбу.

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

– Убегаешь, трусливая гиена?! – крикнул своёму товарищу Сантис и закурил.

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

На следующий день все газеты Нью-Йорка вышли с огромными заголовками: «Очередная вылазка мафии. Юбилейное покушение на Крепкого отца! Джузеппе Сантис доставлен в свою любимую больницу. Руки, ноги и туловище целы. Но пока не найдены. Как заявил сам пострадавший: „Я думаю, против меня что-то замышляется“!»

Зима ожидалась суровой. Петруччо начинал кровопролитную войну против Крепкого отца.

16 авг. 2023 г.

Orange Pi Zero3 (Allwinner H618) и w1-gpio device tree overlay

ВАРНУНГ!

Нижеописанное относится к модели Orange Pi Zero с 1 гигабайтом памяти и установленным Debian Bookworm arm64. YMMV significantly.

 

На момент написания этого поста в комплекте поставки Debian не было оверлея, разрешающего работу модуля w1-gpio с GPIO.

Методом проб и ошибок оверлей написан самостоятельно:

/dts-v1/;
/plugin/;

/ {
      fragment@0 {
          target-path = "/";
          __overlay__ {
              w1: onewire {
                  compatible = "w1-gpio";
                  gpios = <&pio 0 79 0>;
                  status = "okay";
                  pins = "PC15";
              };
           };
       };
   };

 

Минус — не позволяет менять используемую ногу и значение pullup через /boot/orangepiEnv.txt. Работаю над этим.

 

Установка:

  1. Скопировать этот кусок кода в /boot/dtb/allwinner/overlay/sun50i-h616-w1-gpio.dts
  2. Установить dtc: apt-get install device-tree-compiler
  3. Скомпилировать оверлей, будучи в /boot/dtb/allwinner/overlay/: dtc -O dtb -o sun50i-h616-w1-gpio.dtbo sun50i-h616-w1-gpio.dts
  4. Занести полученный оверлей в /boot/orangepiEnv.txt вручную или с помощью orangepi-config: overlays=w1-gpio
  5. Перезагрузиться, проверить, что модули ядра wire, w1-gpio и w1-therm загрузились: dmesg |grep -i wire
  6. Навесить на шину термометр 18B20, убедиться, что он работает.
  7. Строки "param_w1_pin" и "param_w1_pin_int_pullup" хотя и пытаются обрабатываться скриптом на загрузке, но безуспешно из-за кривизны оверлея. Поэтому ногу и внутреннюю подтяжку нельзя изменить путём конфигурации через /boot/orangepiEnv.txt. Нога меняется путём изменения оверлея и его перекомпиляции, а подтяжка — вообще не знаю как.

 

Update: after asking Andre Przywara, a kernel maintainer of some ARM-based boards, I got a simplified but still working version of the overlay (sorry, Andre, your version didn't work without modifications on my board and kernel):

/dts-v1/;
/plugin/;
/ {
        fragment@0 {
          target-path = "/";
          __overlay__ {
            w1:onewire {
              compatible = "w1-gpio";
              gpios = <&pio 2 15 0>;
            };
          };
        };
};

8 нояб. 2022 г.

MacBook Pro (2015) Linux Debian SD card reader and Bluetooth fix after a suspend

To fix those I've created a script in /lib/systemd/system-sleep/ with the following contents:

 

#!/bin/sh

case "$1" in
        pre)
            echo -n "0000:00:14.0" | tee /sys/bus/pci/drivers/xhci_hcd/unbind
            echo -n "1-3:1.2" |tee /sys/bus/usb/drivers/btusb/unbind
            ;;
esac


case "$1" in
        post)
            echo -n "0000:00:14.0" | tee /sys/bus/pci/drivers/xhci_hcd/bind
            echo -n "1-3:1.2" |tee /sys/bus/usb/drivers/btusb/bind
            ;;
esac

Of course, the values are not random and should be checked first on your machine with lspci -v and by looking into /sys/bus/usb/drivers/btusb


28 дек. 2021 г.

AIS receiver из Raspberry/Orange/Banana Pi и RTL SDR для Marine Traffic и ему подобных

Marine Traffic со товарищи и FlightRadar24 получают данные для своих сервисов от энтузиастов.

Энтузиасты обычно получают данные с соответствующих приёмников. Для морских и речных судов это приёмники AIS, для самолётов — ADS-B. AIS работает на паре каналов, называемых A и B, которым соответствуют частоты 161.975 и 162.025 MHz соответственно. ADS-B использует частоту 1090 MHz. Эта статья вкратце рассматривает процедуру настройки приёмника и антенного тракта для получения сигналов AIS.

Итак, чтобы построить сенсор, передающий данные в MarineTraffic, нам потребуется:
  • Raspberry Pi или какой-нибудь его аналог. Я использую Orange Pi Zero (256 MB RAM, четырёхъядерный ARMv7 процессор с частотой 1.2 GHz), его вполне достаточно. Важно, чтобы на нём был какой-нибудь линукс. Цена — от 10 до не знаю скольки долларов. Продаются на амазоне, алиэкспрессе, ебее, сайтах производителей.
  • Собственно приёмник — RTL SDR. Лучше не прямо совсем любой, а вот тот, который продаётся на сайте или хотя бы его клоны на Алиэкспрессе. Дело в том, что прямо стоковый DVB-T адаптер продаётся (если ещё вообще продаётся) с разъёмом MCX и рассчитан на кабель с волновым сопротивлением 75 Ом, а мы же тут типа крутые радиолюбители и хотим всё делать под 50-омный кабель и антенны. Поэтому лучше искать по словам «RTL-SDR Blog V3 R820T2». У него и разъём SMA, и вроде как он почувствительнее и поменьше шумит. Цена — от 15 до 30 долларов.
  • 50-омный кабель (RG-58 или лучше, но всё равно 50-омный). У ВЧ-кабеля немаленькое затухание, и чем выше частота, тем сильнее затухание. Не рекомендуют использовать RG-58 длиной больше 10 метров, и общее правило — «чем короче, чем лучше». Цена RG58 — от меньше чем доллар до полутора долларов за метр.
  • Коннектор для антенны. Я сделал четвертьволновый ground plane (1/4λ GP) с четырьмя противовесами, это очень хорошо делается на N-коннекторе с фланцем.
  • Пара коннекторов на кабель, соответствующих коннектору на приёмнике и на антенне. В нашем случае потребуется SMA male (к приёмнику) и N male (к антенне).

Это минимум. Для настройки антенны под частоту неплохо бы иметь друга-радиолюбителя или какой-нибудь прибор для анализа параметров антенного тракта. Для приделывания разъёмов к кабелю так или иначе потребуется обжимка для коаксиального кабеля и паяльник. Но минимум таков.








Главная сложность для меня заключалась в изготовлении антенны. Хороший антенный тракт — главное условие чувствительности системы. Я сделал свою антенну как описано здесь, естественно, с поправкой на используемые коннекторы и рабочую частоту. Использовал медную проволоку толщиной около 1 мм длиной в соответствии с этим расчётом. Длина штыря получилась около 445 мм, длина противовесов — около 490 мм. Первоначально изготовил антенну с некоторым запасом по длине, настраивал с помощью NanoVNA, откусывая по нескольку миллиметров бокорезами, пока не добился нужных параметров.

Настройка софтовой части не представляет особых сложностей. Как я уже написал, вам необходим работающий на вашем Pi линукс. Всё, что требуется — это собрать на нём rtl_ais, который принимает и обрабатывает сигнал и посылает полученные NMEA sequences на указанный адрес по UDP. Установка rtl_ais подробно описана на его странице, я вкратце рассмотрю параметры его запуска:

rtl_ais -g 35 -n -S 60 -p 54 -P xxxx -h aaa.bbb.ccc.ddd
  • -g 35 — усиление тюнера, в децибелах. Значение зависит от ваших условий. Для RTL-SDR Blog V3 может быть до 49. Подбирается опытным путём, т.к. тюнер сам достаточно шумный.
  • -n — выводить принятые NMEA sequences на stderr
  • -S 60 — выводить на stdout статистику принятых пакетов каждые 60 секунд
  • -p 54 — поправка частоты в PPM. Зависит от приёмника, подбирается, например, с помощью калибратора kal или rtl_test из комплекта librtlsdr, запущенного с ключом «-p».
  • -h — адрес хоста, на который отправлять получаемые данные. В случае с Marine Traffic получается от них при регистрации станции.
  • -P — порт, на который отправлять получаемые данные. В случае с Marine Traffic получается от них при регистрации станции.

Это всё. При использовании четвертьволновой антенны с RTL-SDR Blog v3 реальная дальность приёма сигналов — около 20 км без антенных усилителей сигнала.

26 нояб. 2019 г.

Лента с файловой системой (LTO5+, HP Ultrium, LTFS)

Начиная с LTO-5, стандарт ленты предусматривает её партиционирование, то есть разделение на части, в одной из которых, грубо говоря, хранятся адреса файлов на ленте, а во второй — собственно содержимое файлов.

Эта вещь позволила создание на ленте файловой системы (LTFS — Linear Tape File System), которая в линуксе монтируется через FUSE. Естественно, природа носителя накладывает свои ограничения, например, удаление файла не приводит к увеличению свободного места. Зато, как ни удивительно, поддерживаются sparse files, если это кому-то нужно на архивных носителях.

Конечно, доступ к ленте в режиме файловой системы интересен, потому что даже LTO-5 — это уже 1.6 терабайта, а такое количество данных не всегда единовременно доступно к бэкапу, а многосессионная лента с tar-ами — это не так чтобы очень удобно.

Короче, всё было за внедрение: наличествует HP half-height internal LTO-5 драйв и некоторое количество LTO-5 картриджей. Увага: несмотря на то, что LTO5-привод способен писать LTO4-ленты, создавать LTFS на этих LTO4-лентах нельзя!

Путём чтения Википедии выяснилось, что для линукса как бы существует несколько реализаций от разных вендоров. Плюс нашёлся ещё относительно живой проект на Гитхабе, с которого и решил начать. Быстро выяснилось, что начал в какое-то неудачное время, потому что собираться на Debian Buster оно не очень хотело из-за поломанного в этом релизе дебиана pkgdata и отсутствующего icu-config в ICU. Собрал на stretch, перенёс на целевую машинку с buster-ом и приводом (тупо скопировал руками три недостающих библиотеки) — запустилось, но ругнулось на неподдерживаемый привод. Пошёл читать issues — да, действительно, оказалось, что этот проект поддерживает только привода IBM.

Гугль упрямо продолжал говорить, что HP-шные устройства поддерживаются под линуксом. Увы, но сайт HP не позволяет скачать линуксовую софтину для LTFS «просто так», требуя логина и пароля, которых у меня нет. Получить их я не пытался, может быть, это просто, не знаю. Поэтому почитал ещё интернетов и попробовал поставить Quantum LTFS. Сразу скажу, до компиляции там даже не дошло, потому что стало очевидно, что у этого кода очень много общего с гитхабовским проектом, но в него добавлена пара квантумовских приводов. Попытки прописать в код идентификатор моего привода я оставил на чёрный день, а пока что поиски привели меня на сайт Оракла. Скачал 64-битный RPM версии 1.2.7 для Oracle server 7.2, сконвертировал его alien'ом, установил, попробовал запустить, нашёл в репозиториях седьмой центоси три библиотеки из ICU нужной (50-й) версии, опытным путём подредактировал ltfs.conf — ура! mkltfs покрутил ленту и сказал, что OK, а основной бинарник (он у Оракла не ltfs, а что-то там про singledrive) без проблем смонтировал ленту в каталог. А, нет, одна мелкая проблема была: им нельзя передать в качестве устройства /dev/st0 или /dev/nst0, потому что они не могут смапить его имя в /dev/sgX из-за отсуствия в дебиановском ядре поддержки SCSI_PROCFS и /proc/scsi как такового. Зато они замечательно принимают прямо generic device name, которое можно получить из вывода lsscsi -g.

Результат — примерно 55 мегабайт в секунду на запись через scp. Может, получалось бы и ещё быстрее, но процессор на машинке не ахти.

21 мая 2019 г.

Ограничение скорости отдачи файла nginx'ом

Иногда хочется ограничить скорость отдачи файла. Ну, например, если вы раздаёте видеоролики, то имеет смысл выставлять максимум скорости отдачи файла в зависимости от его битрейта. Оказывается, это можно сделать на стандартном nginx (не Plus) через Lua-модуль:

location / { # или какой нужен, например, по маске имени
    set $drate '';
    set_by_lua_file $sum /var/www/html/datarate.lua;

    set $limit_rate $drate;
}


# datarate.lua просто вызывает внешний скрипт и сохраняет его выдачу в переменную
function os.capture(cmd, raw)
  local f = assert(io.popen(cmd, 'r'))
  local s = assert(f:read('*a'))
  f:close()
  if raw then return s end
  s = string.gsub(s, '^%s+', '')
  s = string.gsub(s, '%s+$', '')
  s = string.gsub(s, '[\n\r]+', ' ')
  return s
end

local curPercent = os.capture ("/usr/local/bin/getnum", false)
print (curPercent)
ngx.var.drate = curPercent


getnum:
#!/bin/bash
echo -n 50k

Очевидно, что getnum в этом примере — просто заглушка, т.к. он даже не пытается анализировать, на какой файл устанавливать ограничения.

28 авг. 2017 г.

Интернет в Сербии (Бач, лето 2017)

rbc.ru:

                                       Packets               Pings
 Host                               Loss%   Snt   Last   Avg  Best  Wrst StDev   
 1. jetspeed.iad                     0.0%    64    0.6   1.8   0.6  27.3   4.6
 2. 212.200.177.200                  0.0%    63   24.8  26.4  19.7 110.1  18.2
 3. 212.200.177.201                  0.0%    63   19.8  23.0  19.1 132.4  14.9
 4. 212.200.7.78                     0.0%    63   47.6  54.0  47.5 135.5  17.4
 5. 212.200.7.75                     0.0%    63   53.1  54.6  51.2 136.2  10.6
 6. 212.200.5.109                    0.0%    63   63.0  43.6  32.7 131.7  23.0
 7. 212.200.5.53                     0.0%    63   44.3  48.3  43.8 110.9  11.6
 8. v4-de-cix-r1.cirex.ru            0.0%    63   91.0  95.5  89.6 168.3  13.2
 9. 74-231-9-185.host.cirex.ru       0.0%    63   89.9  93.8  87.3 181.0  16.1
10. redirector.rbc.ru                0.0%    63   90.5  94.2  87.4 171.4  15.1


amsix.eu:
                                      Packets               Pings
 Host                               Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. jetspeed.iad                     0.0%   111    0.6   2.8   0.6  69.6   9.6
 2. 212.200.177.200                  0.0%   110   20.6  33.6  19.4 503.0  62.8
 3. 212.200.177.201                  0.0%   110   20.2  31.8  18.8 505.4  61.2
 4. 212.200.7.78                     0.0%   110   21.4  33.7  20.8 510.6  59.1
 5. 212.200.7.77                     0.0%   110   20.6  42.3  19.8 502.7  63.9
 6. bpt-b4-link.telia.net            0.0%   110   51.7  60.3  48.4 496.7  50.5
 7. prag-bb1-link.telia.net          0.0%   110   46.6  54.8  46.0 452.0  46.9
 8. hbg-bb1-link.telia.net           0.0%   110   52.8  71.8  51.2 425.8  48.1
 9. adm-bb3-link.telia.net           0.0%   110   59.8  68.4  53.2 378.4  40.9
    adm-bb3-link.telia.net
    adm-bb3-link.telia.net
    adm-bb3-link.telia.net
    adm-bb3-link.telia.net
    adm-bb3-link.telia.net
    adm-bb3-link.telia.net
    adm-bb3-link.telia.net
10. adm-b3-link.telia.net            0.0%   110   61.2  69.8  59.7 328.4  37.9
11. leaseweb-ic-308104-adm-b3.c.tel  0.0%   110   59.5  69.0  58.8 462.0  47.0
12. te-4-1.ce22.ams-01.nl.leaseweb.  0.0%   110   60.1  69.9  58.6 430.6  44.1
13. te-5-1.ce26.ams-01.nl.leaseweb.  0.0%   110   54.6  69.4  53.7 595.9  65.2
14. ???


slashdot.org:
                                                      Packets               Pings
 Host                                               Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. jetspeed.iad                                     0.0%    86    0.8   3.4   0.7  65.0  10.6
 2. 212.200.177.200                                  0.0%    86   20.2  22.1  19.6  34.3   2.7
 3. 212.200.177.203                                  1.2%    86   19.8  24.1  18.9 148.1  19.0
 4. 212.200.7.68                                     0.0%    86   21.8  24.9  20.7  88.5  11.1
 5. 212.200.7.67                                     0.0%    86   20.4  25.8  20.1  87.9  13.7
 6. 212.73.203.129                                   0.0%    86   44.0  51.3  43.4 138.1  20.9
 7. ???
 8. CenturyLink-level3-150G.Washington12.Level3.net  0.0%    86  135.6 139.0 134.7 209.2  11.4
 9. 63-235-40-90.dia.static.qwest.net                0.0%    86  137.2 142.1 136.6 299.1  23.6
10. cr1-tengig0-7-2-0.washington.savvis.net          1.2%    86  157.9 162.7 154.8 263.6  18.5
11. 206.28.96.209                                    1.2%    85  155.6 155.6 150.1 237.6  12.1
12. 206.28.101.165                                   0.0%    85  157.4 156.9 153.2 287.6  15.2
13. das6-v3034.ch3.savvis.net                        0.0%    85  159.2 187.2 157.6 331.4  47.3
14. 64.27.160.198                                    0.0%    85  161.1 163.3 158.0 199.2   9.5
15. slashdot.org                                     0.0%    85  160.4 163.1 158.8 292.9  19.0


HKIX.net:
                                                      Packets               Pings
 Host                                               Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. jetspeed.iad                                     0.0%    13    0.9   1.0   0.7   2.6   0.4
 2. 212.200.177.200                                  0.0%    13   27.7  22.3  19.8  27.7   2.6
 3. 212.200.177.203                                  0.0%    13   22.3  23.3  19.2  40.1   7.2
 4. 212.200.7.68                                     0.0%    13   33.7  34.4  33.7  35.9   0.3
 5. 212.200.7.65                                     0.0%    13   22.0  22.9  20.5  31.4   2.7
 6. 212.200.5.105                                    0.0%    13   34.3  38.3  33.5  70.6  10.5
 7. 212.73.203.245                                   0.0%    13   46.6  48.8  44.7  83.3  10.4
 8. ???
 9. 212.162.4.54                                     0.0%    13   46.8  47.6  46.4  50.0   0.9
10. tenge0-1-0-19.br02.hkg12.pccwbtn.net             0.0%    13  370.0 369.6 368.6 370.1   0.3
11. ???

26 окт. 2016 г.

Изменения в конфигурации системы стриминга видео

Около года назад я описывал самопальную систему стриминга live video с птичьей кормушки из говна и палок вебкамеры, ffmpeg и nginx.

Прошёл год, наука шагнула далеко вперёд, надо описать, что с тех пор изменилось-усовершенствовалось.

Во-первых, от использования ffserver получилось отказаться почти сразу же после написания прошлогодней статьи. «Получилось» — потому что связка ffmpeg+ffserver в настройке и работе, мягко говоря, хрупковата. Поэтому сразу после реализации механизмы были перепилены в сторону упрощения. В качестве сервера дистрибуции потока вместо ffserver стал использоваться nginx. Для этого nginx пришлось пропатчить волшебным патчем, добавляющим поддержку RTMP, HLS и MPEG-DASH. После этого nginx обретает умение принимать видеопоток по RTMP и раскидывать его в файлы, которые потом сам же nginx отдаёт браузерам, понимающим MPEG-DASH либо HLS. Точнее, в случае десктоп-устройств в качестве веб-клиента выступил flash-плеер Bitdash, который в то время (в версии 3.2.0) был доступен бесплатно с некоторыми ограничениями по трафику, которые меня вполне устроили.

Настройки Nginx в части обслуживания потока у меня имеют следующий вид:
nginx.conf:
rtmp {
    server {
        listen [::]:1935;
        application live {
            allow publish <my-source-IP>;
            allow publish <my-backup-source-IP>;
            deny publish all;
            allow play all;
            live on;
            publish_notify on;
            play_restart on;
            hls on;
            hls_path /tmp/hls;
            hls_fragment 10s;
            dash on;
            dash_path /tmp/dash;
        }
    }
}


sites-enabled/myserver.conf:

location /hls {
    root /tmp;
    types {
        application/vnd.apple.mpegurl m3u8;
    }
    add_header Cache-Control no-cache;
}

location /dash {
    root /tmp;
    types {
        application/vnd.apple.mpegurl m3u8;
        application/dash+xml mpd;
    }
    add_header Cache-Control no-cache;
}
Сам поток по-прежнему формируется с использованием ffmpeg, берущего с вебкамеры raw YUV и преобразующего его в, прошу простить меня за это слово, FLV-контейнер с 10-bit H.264 потоком внутри и отдающего его nginx'у с помощью примерно следующей командной строки:

ffmpeg -s 640x360 -f video4linux2 -i /dev/video1 -c:v libx264 \
 -crf 27 -preset slow -bf 8 -g 100 -pix_fmt yuv420p10le -qmin 10 -qmax 43 -aq 1 \
  -b:v 450k -bufsize 1200 -r 20 -an -f flv \
  -vf "drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSans.ttf:text='%{localtime} $(cat /tmp/temperature)':fontcolor=white@0.9:fontsize=10:x=510:y=348" "rtmp://birdfeeder.online/live/test.flv live=1"

Upd: как выяснилось, десятибитный поток не понимает никто, кроме хрома. Поэтому вернулись к стандарту:
ffmpeg -s 640x360 -f video4linux2 -i /dev/video1 -c:v libx264 \
 -crf 27 -preset slow -bf 8 -g 100 -pix_fmt yuv420p -qmin 10 -qmax 43 -aq 1 \
  -b:v 450k -bufsize 1200 -r 20 -an -f flv \
  -vf "drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeSans.ttf:text='%{localtime} $(cat /tmp/temperature)':fontcolor=white@0.9:fontsize=10:x=510:y=348" "rtmp://birdfeeder.online/live/test.flv live=1"

Результирующий поток имеет битрейт в пределах от 200 до 350 килобит в секунду. Файл /tmp/temperature формируется независимо по крону и, увы, для отображения изменений в нём весь ffmpeg приходится периодически перезапускать.


Во-вторых, перед началом нового сезона было решено вновь проверить возможность отказа от использования Adobe Flash. Это, как кажется, вполне удалось. Теперь для показа используется VideoJS-contrib-HLS, а соответствующий код в HTML-файле выглядит так:

<HEAD>
 <link href="https://vjs.zencdn.net/5.8.8/video-js.css" rel="stylesheet">
 <script src="https://vjs.zencdn.net/ie8/1.1.2/videojs-ie8.min.js"></script>
</HEAD>
<BODY>

  <video id=example-video width=640 height=360 class="video-js vjs-default-skin" poster="/images/poster.jpg" controls>
    <source
       src="https://birdfeeder.online/hls/test.m3u8"
       type="application/x-mpegURL">
  </video>
  </center>
  <script src="https://vjs.zencdn.net/5.8.8/video.js"></script>
  <script src="videojs-contrib-hls.min.js"></script>
  <script>
  var player = videojs('example-video');
  player.play();
  </script>
</BODY>



Что не решено:

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

10 сент. 2016 г.

Про Burning Man как я его понял

В общем, Burning Man.

Спасибо, во-первых и в-главных,  +Konstantin Gratchev за серию его фотографий с Зе Мэна. Они может и получше тех профессиональных будут. Собственно, я из этих фоточек и узнал про существование этой штуки, пошёл почитать поподробнее и проникся масштабами. Рекомендую зайти к нему и посмотреть.

Насколько я улавливаю, в Штатах вообще больше нажимают на праздники осени и урожая, чем у нас. У нас как-то больше весенние прижились — Масленица, Первомай. Может, климат другой, поэтому больше поводов радоваться пережитой зиме (здесь как лыко в строку и Новый год — отмечание ещё одного пережитого года) и не отмечать урожай, а убрать его изо всех сил и свалиться. Как бы то ни было, День Труда и День Благодарения — большие осенние праздники, из которых День Благодарения явным образом является праздником Урожая, а День Труда — не знаю :)

Дальше, похоже, добрая традиция знатно запалить что-нибудь на праздник урожая имеет место быть и не уступит нашей масленице. Здесь дядька Кинг опять же со своим «Колдуном и кристаллом» встревает и подсказывает, что зажигали как надо. Чучелы дык чучелы, живую ведьму дык живую — привычка жечь имеется, а там уж что буйное воображение подскажет, да что под руку попадётся, то и спалим.

И вот все эти, возможно, существующие только в моей голове, факторы собрались в кучу и получился Burning Man. (Отступление: большое видится на расстоянии; но тут было бы уместно спросить какого-нибудь носителя культуры, в идеале со Среднего Запада, насчёт того, далеко ли я уехал от реального положения дел во вступлении. Но т.к. для этого явно надо было писать не на русском, то вся надежда на комментарии тех, кто.)

Дык ага! Burning Man — фестиваль искусства. И прямо отсюда надо и уточнять, и обобщать. С одной стороны, фестиваль, с другой стороны, движение, потому что хоть и проводится раз в году, но у него немалая постоянная аудитория. «Аудитория» тоже слово само по себе не совсем правильное, потому что утверждается, что там нет зрителей и посетителей, только участники. «Искусства» — тоже не уверен, что точное слово. Съезжаются люди into the middle of nowhere, в Неваду, на кусок пустыни в окружении гор, в индейскую резервацию в центре чуть ли не заповедных земель, и за несколько дней разворачивают там город. Вот именно так оно на сегодняшний день себя и видит: «Город в пустыне. Культура возможностей. Сеть мечтателей и тех, кто делает». Разворачивают рядом аэропорт (!), радиостанцию и строят всякие красоты (см. опять же у +Konstantin Gratchev с конца августа до конца первой декады сентября).

В последнее воскресенье августа заезжает основной народ. Тысяч пятьдесят-семьдесят. Тут есть два интересных обстоятельства-условия: 1) за деньги можно купить только кофе (который, утверждают, на кофе мало похож) и лёд, причём всего в паре точек. Всё остальное — либо с собой, либо меняться, либо получать в подарок. 2) После сворачивания города следов остаться не должно. Совсем. Вообще. Поэтому в руководствах не раз и не два обозначается: маслом и бензином из машины на землю не капать, воду после мытья посуды, рук, душа и т.д. на землю не сливать, пепел от сигарет не стряхивать, на земле ничего не жечь и т.п. правила, сотни ихъ.

Приезжают и начинается тусовище (см. «Слайды»)
Тусовище своеобразное в том плане, что это пустыня и лето и высокогорье (я так понял, около двух километров над уровнем моря). Поэтому до плюс сорока пяти днём, может упасть ближе к нулю ночью (упоминают в температурах в районе 40°F, что около пяти по Цельсию). Пыльные бури/шквалы, похоже, совсем не редкость. Пейте воду! — предупреждают в BM survival guide и говорят, что полтора галлона (5.67 литра) питьевой воды на человека на день с собой привозить просто необходимо.

Ага, собственно принципы, на которых это всё стоит. Их десять, я переводить целиком не буду, только самую суть (оригинал http://burningman.org/culture/philosophical-center/10-principles/)
  1. Radical inclusion. Каждый может быть частью BM.
  2. Gifting. BM — это про подарки (!)
  3. Decommodification. Я не знаю этого слова, но этот принцип подразумевает отсутствие коммерциализации (спонсоров, продаж, рекламы, культуры потребления)
  4. Radical Self-reliance. Всё своё приношу с собой.
  5. Radical Self-expression. Каждый самовыражается как он хочет. Здесь ещё говорится про уникальность талантов каждого.
  6. Communal Effort. BM - это про comunity. Отличное опеределение community видел там же рядом: You know you're in a community when you hear a laughter and singing around. Запало в душу.
  7. Civic Responsibility. Ну, это понятно при такой куче народа.
  8. Leaving no trace - не оставлять следов. На этом деле там мощный упор.
  9. Participation. Все участвуют. Зрителей нет.
  10. Immediacy. Вот тут дам полную цитату, чтобы не потерять в переводе: Immediate experience is, in many ways, the most important touchstone of value in our culture. We seek to overcome barriers that stand between us and a recognition of our inner selves, the reality of those around us, participation in society, and contact with a natural world exceeding human powers. No idea can substitute for this experience.

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

Всё это «безобразие» продолжается неделю. А в конце всю (или не всю?) красоту сжигают!!11 прямо огнищщем! ночью!!11 и в следующие воскресенье-понедельник народ, постояв в десятичасовой пробке, разъезжается.


P.S. Сто́ит эта радость от пятисот до двух тыщ долларов за входной билет. Плюс восемьдесят долларов за въезд машины. Плюс что там выйдет за бензин, манатки и еду. Ну плюс немного за трансатлантический перелёт, если уж про большинство говорить :)

P.P.S В этом тексте вообще ничего не оказалось про сам фестиваль :)  Да и не могло. Смотрите «слайды», читайте сайт, съездите сами и расскажите нам, если это вообще возможно :)

Слайды.

А вот теперь — слайды!©®™
http://journal.burningman.org/category/burning-man-arts/brc-art/

FAQ

Глагне

Сайт: http://burningman.org/

 Видосики

1.  https://www.youtube.com/watch?v=kbIaqkeRIGw (оказывается, можно было ничего и не рассказывать, просто дать эту ссылку :)

27 февр. 2016 г.

Как я купил наушники Sven SEB-26BK. История одного разочарования.

Я вообще-то не из этих. Не из аудиофилов.
Но люблю, когда среди музыки слышны отдельные составляющие.
А ещё люблю, чтобы на халяву. Или хотя бы недорого.

Поэтому когда после некоторых поисков купил себе года три-четыре назад тогда за 310 рублей наушники Sven SEB-26 BK и обнаружил, что они реально качают (а за свои деньги качают нереально) звук, то радовался здо́рово. И многим их рекомендовал. И покупал с тех пор пару раз, потому что они, увы, недолговечны.