Open Fest 2016 https://www.openfest.org/2016 OpenFest e единствената по рода си в България конференция, посветена на свободната култура, свободния софтуер и софтуера с отворен код, свободното споделяне на знания – фестивал на свободното творчество. Wed, 21 Dec 2016 17:36:15 +0000 bg-BG hourly 1 https://wordpress.org/?v=5.2.20 76589802 OpenFest 2016 в цифри https://www.openfest.org/2016/bg/2016/12/21/openfest-2016-in-numbers/ https://www.openfest.org/2016/bg/2016/12/21/openfest-2016-in-numbers/#respond Wed, 21 Dec 2016 12:54:53 +0000 http://www.openfest.org/2016/?p=8768 Макар и по време на избори, OpenFest 2016 беше едно от най-големите събития за годината. То не би било възможно без подкрепата на посетителите, които дариха почти 10 000 лв., както и без нашите спонсори от bgERPCatenate, Code Runners, E-CARD, Host.bg, Luxoft, Nebosystems, Ontotext, Progress, SAP България, SiteGround, Tradeo, Uber, Xoomworks.

Благодарим също на Amare Caffe, които осигуриха ободряващо ароматно кафе в двата дни на конференцията; на Pure Water, които за поредна година се погрижиха за питейната ни вода, без да е нужно да създаваме стотици килограми боклук; на Детска къща „Приказка без край“ и Детска къща МОМО, които и през двата дни организираха кът за най-малките ни посетители; на Whisky Experience Bulgaria, които направиха партито за нашите лектори и екип наистина полезно и интересно, запознавайки ги с приликите между шотландското и ирландско уиски и българските ракии и вина.

Екипът от доброволци зад събитието тази година беше около 70 човека 🙂

Според преброяването на сини гривнички, снимки от залите и статистика от част от спонсорите ни, посетителите за двата дни на конференцията са били между 2300 и 2700 човека.

Събитието е било гледано онлайн от 924 уникални потребители за двата дни (676 за първия ден, 416 за втория ден; 168 човека, припокриващи се и за двата дни).

В wireless мрежата за двата дни е имало закачени 600 уникални устройства – 485 през първия ден и 376 през втория.

]]>
https://www.openfest.org/2016/bg/2016/12/21/openfest-2016-in-numbers/feed/ 0 8768
Записи от OpenFest 2016 https://www.openfest.org/2016/bg/2016/11/30/videos-from-openfest-2016/ https://www.openfest.org/2016/bg/2016/11/30/videos-from-openfest-2016/#respond Wed, 30 Nov 2016 21:39:20 +0000 http://www.openfest.org/2016/?p=8756 Записите на всички лекции от OpenFest 2016 са качени в YouTube канала ни. Приятно гледане! 🙂

]]>
https://www.openfest.org/2016/bg/2016/11/30/videos-from-openfest-2016/feed/ 0 8756
Интерком и телефони на OpenFest 2016 https://www.openfest.org/2016/bg/2016/11/22/intercom-and-telephones/ https://www.openfest.org/2016/bg/2016/11/22/intercom-and-telephones/#respond Tue, 22 Nov 2016 07:53:45 +0000 http://www.openfest.org/2016/?p=8754 Интерком

Видео екипът има нужда от начин, по който да си комуникира между операторския пулт и камерите, в общи линии еднопосочно (т.е. режисьора да може да каже „камера 1, мръдни малко в ляво“). Предишни години за целта се употребяваха различни неща, най-често някаква част от комплектите безжични микрофони (един предавател и няколко приемника). Тази година микрофоните ни бяха кът, за това сглобих едно просто решение от ffmpeg и raspberry pi-та:

На контролния лаптоп закачахме какъвто-и-да-е-микрофон (в случая – едни jabra headset-и, които бяха под ръка) и с ffmpeg ги бълвахме по multicast по мрежата:

ffmpeg  \
    -fflags nobuffer \
    -f alsa -i hw:0,0 \
    -acodec aac -tune zerolatency -ac 1 -b:a 128k \
    -f mpegts 'udp://227.0.9.1:9000?pkt_size=128'

Скриптът взима звукът от alsa-та от микрофона (в случая hw:0,0) и ги пуска на 227.0.9.1 с малък размер на пакета, за по-ниска латентност. Ако трябва да се пусне под windows, ‘-f alsa -i hw:0,0’ се сменя с нещо като ‘-f dshow -i audio=“Microphone“‘ (като „Microphone“ трябва да се погледне как точно се казва, понеже windows-а странно кръщава нещата, Любо беше намерил как точно).

На няколкото raspberry pi-та до камерите се пускаше следния скрипт:

while /bin/true; do
ffmpeg  \
    -fflags nobuffer -probesize 32 -i \
'udp://227.0.9.1:9000?timeout=1000000&fifo_size=100&overrun_nonfatal=0' \
    -f alsa hw:0,0
done

Това слуша на multicast-а и play-ва каквото му дойде, като има timeout от 1 секунда без никакви данни, за да гръмне и да се рестартира. Така може да издържи на всякакви мрежови проблеми и в общи линии гарантира възстановяване до 1 секунда, след като се оправи мрежата.

Това като цяло е доста хакаво и сглобено в последния момент. При мрежата, която имахме, за догодина спокойно ffmpeg-а може да бъде заменен с един asterisk с конференция и телефони, които се закачат в нея, така включително ще можем да смъкнем още латентността (на този беше около 300-400ms) и да направим двупосочен интеркома (въпреки че хората не звучаха много въодушевени). Другото, което сравнително лесно трябва да може да се добави е noise reduction, понеже доколкото знам имаше някакъв, или от микрофона и усилването му, или от самите pi-та (като за второто няма да се оправим само софтуерно).

Телефони

Кодът е качен в github, и е съвсем съвсем тривиален:

  • С един php модул (phirehose) се дърпат tweet-ове по признак и се пишат във файлове;
  • Друг скрипт проверява на какъв език са, с espeak ги обръща в говор и ги дава на asterisk-а чрез call file да ги изговори на някого.

Цялото нещо отне чисто час-два да се напише и тества. Изглежда бая грозно (и може да седна да го оправя), но върши доста прилична работа и може да се използва като основа за всякакви подобни неща.

На самия OpenFest реализацията беше, че имаше наслагани 3 стари черни телефона на различни места, които бяха вързани през grandstream ATA устройства (понеже бяха единствените, които поддържаха импулсно набиране) и когато дойдеше tweet с #openfest2016telefon, asterisk-а звънеше на трите едновременно и който пръв вдигнеше го чуваше.

Архив на всичките неща, дето са казани по телефона може да се намери тук.

]]>
https://www.openfest.org/2016/bg/2016/11/22/intercom-and-telephones/feed/ 0 8754
VoctoMix на OpenFest 2016 https://www.openfest.org/2016/bg/2016/11/22/voctomix-at-openfest/ https://www.openfest.org/2016/bg/2016/11/22/voctomix-at-openfest/#respond Tue, 22 Nov 2016 07:53:14 +0000 http://www.openfest.org/2016/?p=8752 Ситуация

За OpenFest имахме две кутии от тези от FOSDEM, които в общи линии ни даваха възможност да включим почти произволен източник на видео в тях и да го изкараме от мрежата. Те вървят в комплект от две – едната се използва, за да се включи в нея лектора, другата – за камерата. С тези две кутии и малко софтуерно видео миксиране може да се направи много лесно добър setup за видео запис на една зала.

Схемата на setup-а може да се види в github, като лесно може да се види, че е доста по-прост от другите, които използваме. Негов вариант мислим да използваме за FOSDEM 2017 (което може да се наблюдава в repo-тата в github – issue-та, wiki и всякакви работи).

VoctoMix

Липсващият компонент в цялата работа беше софтуерен миксер, който да ползваме. Пробвахме различни – първо един ffmpeg с малко patch-ове (чупи се твърде лесно), после OBS (който leak-ва памет като гламав и не е особено стабилен), и накрая се спряхме на voctomix, който е разработка на CCC и в общи линии е прекрасен хакерски инструмент, който работи по следния начин:

  • Има входове на TCP портове за следните неща:
    • Видео потоци (камери, лекторски лаптоп)
    • Поддържащи потоци (фон, какво да се пуска докато не сме live и т.н.)
    • Команди за разни действия (смяна на картина и т.н.)
  • Изходи, пак по TCP, за
    • Видео поток
    • Аудио поток
    • Копие на всеки входящ stream
    • preview на потоците и изходящата картина

Софтуерът в общи линии просто switch-ва между няколко неща (някоя картина на fullscreen, picture-in-picture в някакви варианти и т.н.) и вади поток, който може да се използва. Има отделно приложение (voctogui) което се закача към него и се използва като конзола – може да показва preview на потоците и да подава команди към основния процес (voctocore).

Как го използвахме

Излъчване от кутиите

Като за начало, изкарването на поток от кутиите става с ffmpeg/avconv, по UDP, по multicast. UDP, понеже е по-издръжливо на някакви random прекъсвания и няма да създаде десинхронизация, multicast, за да може да се гледа от повече от едно място (например за проверка какво точно излиза). Командата изглежда по следния начин:

# these are needed, because the default socket size is too small.
echo 81921024 > /proc/sys/net/core/wmem_max
echo 81921024 > /proc/sys/net/core/wmem_default

echo 81921024 > /proc/sys/net/core/rmem_max
echo 81921024 > /proc/sys/net/core/rmem_default

/usr/local/bin/bmd-streamer -f /usr/lib/firmware -k 1000 -S hdmi -F 0 | \
 ffmpeg -i - -c copy -f mpegts 'udp://227.0.0.1:9000&overrun_nonfatal=1&buffer_size=81921024&fifo_size=178481'

Интересното тук са параметрите на UDP stream-а – гигантски буфери (които и по-горе се казват на kernel-а), така че каквото и да се случва, да не се бави писането в буфера. Като цяло не е проблем да се губят пакети, но е доста лошо да се получава забавяне в целия stream, понеже води до десинхронизация. (да се губят пакети също е лошо, и за целта работя по нещо, което да вкарва forward error correction в тоя поток, един добър човек е написал patch за ffmpeg, реализиращ pro-mpeg, който има точно такава функционалност, надявам се да успеем да го ползваме на FOSDEM)

Приемане във voctomix

Самият voctocore приема потоците точно във видът, в който е конфигуриран (в нашия случай 1280×720, 30fps, audio в pcm_s16le на 44100hz), в MKV контейнер. За целта скриптовете, които го подават изглеждат ето така:

#/bin/sh
confdir="`dirname "$0"`/../"
. $confdir/default-config.sh
if [ -f $confdir/config.sh ]; then
    . $confdir/config.sh
fi


ffmpeg -y -nostdin \
    -i 'udp://227.0.0.1:9000&overrun_nonfatal=1&buffer_size=81921024&fifo_size=178481' \
    -ac 2 \
    -filter_complex "
        [0:v] scale=$WIDTH:$HEIGHT,fps=$FRAMERATE,setdar=16/9,setsar=1 [v] ;
        [0:a] aresample=$AUDIORATE [a]
    " \
    -map "[v]" -map "[a]" \
    -pix_fmt yuv420p \
    -c:v rawvideo \
    -c:a pcm_s16le \
    -f matroska \
    tcp://localhost:10000

Това в общи линии казва „вземи udp stream-а, scale-ни го до колкото искаме, сгъни пикселите и аспекта да са точно каквито ни трябват, и го прати като mkv на порт 10000“. Сгъването на пикселите и аспекта (setsar, setdar) се налага основно когато не може да се промени изхода на камерата и идва в нещо странно като 1920×1088, което води до малко по-различна форма на пикселите.

За да работи цялото нещо, имаме два такива скрипта (по един за box), както и един подобен, който просто loop-ва едно PNG, което играе ролята на фон. В оригиналните скриптове хората са използвали видео за фон на picture-in-picture, но това е по-объркващо за гледащите и не го ползваме.

Излъчване и запис при voctomix

Излъчването и записът са в общи линии много подобни скриптове, като ще покажа само този, който праща до restreamer-а:

#/bin/sh
ffmpeg -y -nostdin \
    -i tcp://localhost:15000 \
    -threads:0 0 \
    -aspect 16:9 \
    -c:v libx264 \
    -maxrate:v:0 2000k -bufsize:v:0 8192k \
    -pix_fmt:0 yuv420p -profile:v:0 main -b:v 512k \
    -preset:v:0 ultrafast \
    \
    -ac 1 -c:a libfdk_aac -b:a 96k -ar 44100 \
    -map 0:v \
    -map 0:a -filter:a:0 pan=mono:c0=FL \
    -ac:a:2 2 \
    \
    -y -f flv rtmp://10.23.0.1:1935/st/STREAM

(скриптът е примерен, понеже доработвах след това нещата)

Като цяло, просто се взимат raw данните от порт 15000, encode-ват се до H.264 и се пращат до сървъра. По същият начин може да се обръщат във WEBM и засилват, но той иска много повече процесорно време и не сме стигнали до там, че да го ползваме.

Екстри за voctomix

Нещо, което не включихме на OpenFest, но ще има на FOSDEM е една дребна доработка, която позволява с много малко ресурси хора отдалечено да контролират voctomix-а. По принцип voctogui не е лек процес и има много сериозни мрежови изисквания, ако не се стартира локално (от порядъка на 1Gbps само за него), но позволява всякакви ужасяващи неща с малко дописване. С един прост скрипт, който прави screenshot веднъж в секунда, и съвсем прост друг, който подава команди ще имаме начин определени хора да имат контрол върху излъчването.

Също така нещо, което ползвахме донякъде на OpenFest за monitoring на stream-а е един друг скрипт с mpv, който взима списък URL-та и някакви имена към тях и ги пуска в отделни подредени един до друг прозорци на екрана, като за всеки overlay-ва един bar с нивото на звука, така че да може да се вижда дали е ок (понеже не е практически възможно да се слушат няколко зали едновременно). Проблемът му е, че се иска бая процесорно време, за да се декодират повечето потоци и един T420 с i7 процесор се озорваше с 6те потока от феста. Как изглеждаше екрана може да видите тук.

Опериране

Работата с voctomix не е сложна, но за момента пълна с неща, които имат да се свършат. Ето как изглежда (засега, работим по автоматизация) процесът на стартиране:

  • voctocore
  • voctogui
  • скриптове за приемане от камери (cam1.sh, grab.sh)
  • скрипт за генериране на фон
  • скрипт за stream-ване
  • запис (record.sh)

След което от voctogui при нужда се сменят различните картини. Като цяло е доста по-просто за разбиране от по-големите setup-и с конвертори и т.н., но и с по-малко функционалности.

Доколко добре работи?

Работи прекрасно, въпреки че се опитваме да открием един бъг с забавяне на audio-то, който се появява в някакъв момент. Започвам да си мисля, че има някакъв проблем със самия лаптоп, с който правим миксирането.

Какво още можем да искаме?

Хрумнаха ни няколко екстри, които да добавим, така че да стигнем функционалността на хардуерния setup:

  • Начин да излъчваме екрана за проектора от при нас. Това ще иска някаква доработка, за да смъкнем латентността на цялото нещо под 100ms, понеже иначе ще е доста забележимо (представете си как лектора прави нещо и проекторът се променя след 5 секунди). Единият от вариантите, който ни хрумна е проекторът да е вързан на едно pi и то директно да може да избира кой multicast да гледа (някоя камера, лаптопа на лектора или нещо трето).
  • Overlay надписи по време на лекцията – трябва да видим какво има да се пипне още, мисля, че има някаква такава функционалност (или може да ги сложим във фона).
  • По-добра синхронизация на различните потоци – ако работим с няколко камери, може да се окаже проблем, че едната върви с няколко кадъра след другата и трябва да си поиграем със забавяне.

Като цяло, аз съм много щастлив от voctomix и ако успея да убедя екипа, догодина можем много повече да ползваме него, отколкото чисто хардуерния setup (просто ще ни трябват мощни машини, за да се справят с encode-ването, че засега успяваме да работим само на 720p, без да подпалим лаптопа).

]]>
https://www.openfest.org/2016/bg/2016/11/22/voctomix-at-openfest/feed/ 0 8752
Мрежата на OpenFest 2016 https://www.openfest.org/2016/bg/2016/11/22/the-network-at-openfest-2016/ https://www.openfest.org/2016/bg/2016/11/22/the-network-at-openfest-2016/#respond Tue, 22 Nov 2016 07:52:39 +0000 http://www.openfest.org/2016/?p=8750 Нямахме голяма промяна от миналата година. Разликите бяха следните:

  • Тази година повечето switch-ове в опорната мрежа бяха tplink SG3210, имахме само 2 cisco-та. tplink-овете са по-тихи, по-малки, (буквално) железни и стават за странни deployment-и. Ако имаха и PoE, щяха да са направо невероятни.
  • Имахме още един switch, за NOC-а в мазето (който беше и единствения leaf в мрежата). Тази година стаичката за VOC беше оставена само на видео екипа, а мрежовия се ширеше в едно мазе.
  • Понеже имахме две зали за workshop-и, имахме малко повече user-ски switch-ове, в общи линии от кол и въже;

Ето тазгодишната схема.

С техника ни услужиха пак Светла от netissat (нейния switch вече 3-4 години е в опорната ни мрежа), Стефан Леков (noc switch-а и резервния сървър) и digger (два microtik-а за workshop switch-ове). Останалото беше от мен и initLab.

Голяма част от мрежовия setup беше организирана през github-ски issue-та, та лесно може да видите какво ни се е случвало по време на подготовката.

Тази година имаше повече наши „клиенти“ на мрежата – интеркомът на залите беше по IP и имаше пръснати разни странни телефони, които бяха из мрежата. Като цяло wired мрежата не изглежда да се ползва от посетителите, но все повече се оказва полезна за нас.

Пак използвахме за сървърно подстълбищното пространство от другата страна на залата, и съответно имаме снимки преди и след. Не е от най-подходящите – всичко наоколо е дървено, тясно е и отдолу минава тръбата за парното (т.е. сме може би едно от малкото сървърни, които вместо климатик имат парно), но е точно до ел. таблото, далеч е от потоците хора и на достатъчно централна позиция, че да можем да пускаме от него независими трасета.

Тази година преизползвахме кабелите от миналата година и взехме един резервен кашон кабел, та нямахме никакви проблеми с изграждането на мрежата.

За uplink тази година ползвахме същата оптика на NetX, но с гигабитови конвертори и 300mbps, та не усетихме никакъв проблем със свързаността.

Използвахме и същия DL380G5 за сървър/router, като тази година Леков пусна още един такъв като backup. Пак го използвахме да encode-ва 1080p stream-а от зала България, въпреки че май тая година нормалния ни encoder щеше да се справи (за една година софтуерът е понапреднал).

Тази година се наложи да променим номерата на VLAN-ите, понеже една част от AP-тата (едни големи linksys-и) не поддържаха VLAN tag-ове над 64. Съответно адресният ни план изглеждаше по следния начин:

IPv4

id  range           name
10  185.108.141.104/30  external
20  10.20.0.0/24        mgmt
21  10.21.0.0/22        wired
22  10.22.0.0/22        wireless
23  10.23.0.0/24        video
24  10.24.0.0/24        overflow

IPv6

10  2a01:b760:1:2::/120
21  2a01:b760:2:4::/62
22  2a01:b760:2:5::/62

По firewall-а и forced forwarding-а нямахме разлика – пак пуснахме proxy_arp_pvlan за потребителските VLAN-и, филтрирахме 25ти порт и не се допускаше трафик до management/video/overflow VLAN-ите от нормални потребители.

Имахме пълна IPv6 поддръжка в потребителските VLAN-и (wired и wireless), като тази година нямахме проблемът с изчезващият IPv6 за random хора – явно най-накрая странният bug е бил ремонтиран.

Изобщо мрежата беше максимално стабилна и при събрания опит може да планираме догодина повече вътрешно-екипна комуникация върху нея, и всякакви странни екстри (например стационарни телефони, повече монитори с информация, някакви сигнализации, работни станции на рецепции и всякакви весели неща). За сега най-големите потребители са wireless-а и видео екипа.

]]>
https://www.openfest.org/2016/bg/2016/11/22/the-network-at-openfest-2016/feed/ 0 8750
Награди от томболата на И-КАРД ООД – OpenFest 2016 https://www.openfest.org/2016/bg/2016/11/09/e-card-game-winners-openfest-2016/ https://www.openfest.org/2016/bg/2016/11/09/e-card-game-winners-openfest-2016/#respond Wed, 09 Nov 2016 13:23:05 +0000 http://www.openfest.org/2016/?p=8747 OpenFest 2016 завърши и с голяма радост ви съобщаваме, за тези, които все още не са получили наградите си, как могат да го направят:

Печелившите емайли в томболата на И-КАРД ООД бяха изтеглени по време на закриването на събитието на 06.11.2016 г. За проверите дали печелите избраната от Вас книга, посетете страницата посветена на кампанията:
https://openfest.e-card.bg

Всеки щастливо изтеглен участник ще получи имайл с инструкция как да получи наградата си.

]]>
https://www.openfest.org/2016/bg/2016/11/09/e-card-game-winners-openfest-2016/feed/ 0 8747
OpenFest 2016 – споделете мнението си https://www.openfest.org/2016/bg/2016/11/09/feedback-time/ https://www.openfest.org/2016/bg/2016/11/09/feedback-time/#respond Wed, 09 Nov 2016 07:44:28 +0000 http://www.openfest.org/2016/?p=8743 Поредният OpenFest се търкулна и сега е време да споделите какво ви хареса, какво не и как можем да подобрим събитието.

Ще се радваме да попълните формата ни за обратна връзка и благодарим предварително!

]]>
https://www.openfest.org/2016/bg/2016/11/09/feedback-time/feed/ 0 8743
Parachute-ka на OpenFest 2016 https://www.openfest.org/2016/bg/2016/11/06/parachute-ka-at-openfest-2016/ https://www.openfest.org/2016/bg/2016/11/06/parachute-ka-at-openfest-2016/#respond Sun, 06 Nov 2016 10:04:55 +0000 http://www.openfest.org/2016/?p=8735 Благодарим на нашите партньори от Parachute-ka / Парашутка, които изградиха специална релакс зона, на която ще можете да се насладите през двата дни на OpenFest 2016. Намира се на втория етаж точно до детския кът или срещу гардероба. Освен това всички посетители ще могат да се възползват от специалната отстъпка от закупуването на един от двата модела Парашутки през сайта www.parachute-ka.com с код „OPENFEST“!

]]>
https://www.openfest.org/2016/bg/2016/11/06/parachute-ka-at-openfest-2016/feed/ 0 8735
XOOMWORKS търси своят Супер Марио герой! https://www.openfest.org/2016/bg/2016/11/06/xoomworks-super-mario/ https://www.openfest.org/2016/bg/2016/11/06/xoomworks-super-mario/#respond Sun, 06 Nov 2016 09:54:25 +0000 http://www.openfest.org/2016/?p=8733 Страхотният тим на Xoomworks Technology организира Супер Марио игра със Супер яка награда: куадрокоптер!
Най-големият майстор, гост на конференцията, който успее да мине цялото ниво за минимално време, ще бъде коронован и награден. Заповядайте на щанда им и опитайте своя късмет в събота и неделя до 16 часа. Не се отчайвайте дори и да не сте най-добър, ще има и утешителни награди.
]]>
https://www.openfest.org/2016/bg/2016/11/06/xoomworks-super-mario/feed/ 0 8733
Amare Caffe на OpenFest 2016 https://www.openfest.org/2016/bg/2016/11/06/amare-caffe/ https://www.openfest.org/2016/bg/2016/11/06/amare-caffe/#respond Sun, 06 Nov 2016 09:40:11 +0000 http://www.openfest.org/2016/?p=8728 За нас е удоволствие да ви представим Amare Caffe. Те се грижат в дните на конференцията да можем да се насладим на ароматно и вкусно кафе!
Повече за това как можете да се радвате на истинско, прясно изпечено кафе, доставено до дома, можете да видите в техния сайт.
]]>
https://www.openfest.org/2016/bg/2016/11/06/amare-caffe/feed/ 0 8728