Archive for the ‘General’ Category

OpenFest 2017 CfP

Monday, August 21st, 2017

Като новина за понеделник сутрин – може да подавате заявки за лекции и workshop-и за OpenFest 2017. Имаме огромно пространство за workshop-и, та ако искате да показвате нещо от типа на “запояване на челна стойка”, ще се радваме да го видим.

Sysadmin day 2017

Wednesday, July 26th, 2017

Петък (28.07), Кривото в мазето след 19:30.

2017-07-01 пренасяне

Saturday, July 1st, 2017

Мисля да направя лекция по темата на какви неща ни учи организирането на OpenFest…

Преди 3 седмици получих mail, с който ми прекратиха договора за наем където бях. За 2 седмици си намерихме ново място, за още една си организирахме нещата и вчера се пренесох (с помощта на професионалисти, дето с два камиона ми пренесоха всичките дивотии, които включваха около половин тон книги и един rack). Имаше разни уморени моменти, и се налагаше да паузираме, че да се занимаваме с малкия звяр (известен в тоя блог като Ба’ал), но като цяло си се справихме.
(това е и една от основните причини през юни да не съм писал нищо)

Спокойно мога да кажа, че преживяването на кофа OpenFest-и направи преживяването (да се пренесеш с малко предизвестие и малко бебе в най-голямата жега) да изглежда като нещо управляемо, и даже го направи такова. Мисля си от това да направя един малък lightning talk за привличане на доброволци:)

И като завършек, ето една снимка, която прави цялото семейство щастливи.

Update: Дневна снимка на библиотеката и уред за приспиване на Ба’ал.

2017-05-28 панаир на книгата

Sunday, May 28th, 2017

(Добре сме, всичко ни е наред, а аз съм огладил дрехи с площ колкото Република България)

Пролетен панаир на книгата. Очаквах нищо да не си харесам, но пак си напълних раницата:
– Два тома (предполагаем) дневник на Лаврентий Берия, с коментари от тоя, дето ги е намерил. В момента ги чете Велин, да видим дали стават.
– Двата тома “Чамкория” на Милен Русков, чакат за изчитане.
– “Двадесет и петият част” на К. Вирджил Георгиу – изчетох я за нула време, оказа се страхотен роман за времената около втората световна война и навлизането на тоталитаризмите. (Изобщо, не съм очаквал, че “Комунитас” – издателство основно за християнска литература – ще издава такива ценни неща, като тази книга, книгата на Стефан Бочев за Белене, новото издание на “Архипелага ГУЛАГ”…)
– “Граница” на Капка Касабова, която чета в момента.
– “Вицове за луди, садисти и канибали” на Анатол Анчев – изследовател от БАН – събрани всичките вицове по темата от разни места и източници. Изглежда доста забавно, вероятно е следващата за четене.
– “Махалото на Фуко” на Умберто Еко, понеже не знам да ми е моето копие.
– “Хайка за вълци” на Ивайло Петров – скоро я прочетох и реших, че си заслужава да се вземе на хартия.

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

2017-05-19

Friday, May 19th, 2017

Кратък status report.

Ба’ал^W^WИгнатчо е добре. Ние успяваме да поспим. Разни интересни факти:

– Бюрокрацията изглежда сравнително малко, поне за момента, или аз съм привикнал. Взех му вече акта за раждане (т.е. има си и ЕГН), официално си има личен лекар и можах да си подам молбата за отпуска по бащинство.
– Сравнително лесно се прави генератор за бял шум от преносима колонка, mp3 player и 5 часово mp3 с белия шум, взето от youtube. Някой ми спомена, че можело с някаква електроника, но аз поялнишките неща не ги разбирам. Bonus на mp3-то – мястото за повиване на малкия е точно до едната от колонките, вързани в desktop-а ми, съответно лесно се създава успокояващ фон :)
– Когато contraption-а не работи, може белия шум да се пуска и от таблета.
– Контролируема от таблет лампа помага да се пуска слаба светлина нощем за разни цели и изобщо за вършене на дейности без да се става от леглото.
– По подобен начин с едно приложение следим потребление на пелени, количество сън и такива неща. В началото се опитвах да ги записвам, ама определено не ми се получаваше.
– Видео-бебефонът също много помага – най-вече на мен, да знам кога да ходя да помагам в смяна на памперс.
– Много е сладък, като не реве.
– Има и други забавни моменти, например докато пълни звучно памперса да му викаш “Давай, сине!”
– Има и невероятно приспивно действие. Миналия ден, въпреки че се бяхме наспали, следобеда му ударихме и тримата една дрямка.

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

p.s. утре в initLab има BGP workshop, за който се интересува (аз нямам как да ида)

2017-05-09 bias-и и дебъгване

Tuesday, May 9th, 2017

Нещо странично.

Тия дни в офиса около някакви занимания обсъждахме следната задача:

“Имаме банда пирати (N на брой, капитан и N-1 останали членове), които искат да си разделят съкровище от 100 пари. Пиратите имат строга линейна йерархия (знае се кой след кой е). Разделянето става по следния начин – текущият капитан предлага разпределение, гласува се и ако събере половината или повече от гласовете се приема, ако не – убиват го и следващия по веригата предлага разпределение. Въпросът е какво трябва да предложи капитанът, така че всички да се съгласят, ако приемем, че всички в екипажа са перфектни логици. Също така пиратите са кръвожадни и ако при гласуване против има шанс да спечели и същите пари, пак ще предпочете да убие капитана. Също така всички са алчни и целта е капитанът да запази най-много за себе си.”
(задачата не идва от икономиката, въпреки че и там всички са перфектни логици и за това толкова много им се дънят теориите)

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

Първият ми отговор беше – ами другия член на екипажа ще иска винаги да убие капитана, щото така ще вземе всичко. Обаче се оказа, че и капитана има глас, т.е. ако останат само двама, капитанът взима всичко и разпределението е 100 за него и нищо за другия.

Какво следва, ако са трима? Казах – добре, тогава даваш на единия 1, на другия 2, и останалото за капитана, понеже ако останат само двама, последния няма да вземе нищо, капитанът гласува за себе си и втория и да е за и против, няма значение. Само че няма нужда да даваме нищо на средния, щото не ни пука за мнението му, така всъщност правилното разпределение идва 1, 0, 99. Тук пак си пролича bias-а, пак очаквах да има някаква пропорция.

Long story short, следващата итерация е 0, 1, 0, 99, понеже така ако не се съгласят, на следващия ход предпоследния ако не се съгласи няма да вземе нищо, и на другите двама мнението няма значение. Pattern-а мисля, че си личи :)

Лошото е колко много влияеше bias-а, който съм натрупал от четене за разпределения в реалния живот – какво са пиратите, как няма перфектни логици (и реално никой няма да смята по тоя начин, а ще се стремят към нещо, което им се вижда честно), как това тотално изключва политическата възможност N/2+1 от долната част да гласуват винаги против, докато не дойде всичкото до тях и после да си го разделят по равно и всякакви подобни варианти от реалния живот. Ако примерът беше с каквото и да е друго (например не включваше хора), вероятно щеше да е доста по-лесно да гледам абстрактно.

Което е още един довод в подкрепа на идеята ми, че много по-лесно се дебъгва нещо чуждо (често и което никога не си виждал), отколкото нещо, с което почти постоянно се занимаваш. Над 90% от проблемите (това не се базира на никаква статистика, а на усещане) са достатъчно прости, че да могат да се решат със стандартни методи и да не изискват много задълбочено познаване на системата (половината ми живот е минал в дебъгване на неща, които не разбирам, доста по-често успешно, отколкото не) и вероятно като/ако правя debug workshop-а (за който много хора ми натякват), ще е с проблеми, с които и аз не съм запознат, да е наистина забавно …

2017-05-08 раждане 3

Monday, May 8th, 2017

И толкова с post-овете за днес, май досега не бях пускал 3 в един ден.

Точни данни: роден в 07:11, 3450 г., 50 cm. Игнат(-Ба’ал) Василев Колев(-Дяволов). Родил се е с бая коса (като мен и Елена). Обича да спи – докато бях там за малко отвори очи, погледна ме, прозя се три пъти и пак заспа.
(ще излъжа, ако кажа, че не му завидях)

Сега следват няколко дни възстановяване за Елена и после прибиране вкъщи.

2017-05-08 раждане 2

Monday, May 8th, 2017

(смених и заглавието)

В 7:10 се е родил Игнат Василев Колев, 3.200 кг.
(въпреки голямото желание на Велин, не е Ба’ал Василев Колев, и въпреки моето не е Игнат Василев Колев-Дяволов (т.е. да звучи да коли дяволи), ама няма значение)

Освестявам се (пия кафе и т.н.) и отивам да го видя и занеса шоколад и други.

2017-05-08 раждане 1

Monday, May 8th, 2017

Днес сглобихме и снимхме разни неща, докато чакаме, после играхме Carcasone и Елена ме би ужасяващо, после тръгнахме да си лягаме и на нея и изтекоха водите.

След известно време попиване на потоците, един телефонен разговор да пита майка си кога трябва да спре да тече и бързо вдигане на събрания багаж, с едно такси се добрахме до Майчин дом (хубавото на тия среднощни работи е, че няма движение). Нея директно я вкараха вътре, а аз почаках около половин час в чакалнята на спешното (където нямаше никой друг, явно хората са отишли да раждат извън София около празниците). След това Елена се появи с една докторка да ми кажат, че я приемат, че вероятно ще роди днес (8ми май), но няма да е особено скоро и да си ходя да спя.

Което смятам и да направя :)

2017-04-10 splitpatch

Monday, April 10th, 2017

Нов ценен tool – splitpatch (има го в debian, нищо, че е на ruby).

Трябваше да вкараме едно парче код (на perl) в главното ни repo, и след code review имаше забележки като за 11 промени. Вкарахме ги, тествах го и открих, че не работи – output-а беше много много различен от този в началото (който си се знаеше, че е верен).

Един вариант беше някой да гледа промените ред по ред и да се разбере какво е объркано. Вместо да се стига до такива крайни мерки, намерих tool, който може да сцепи patch-а на hunk-ове, и след това направих следното:

for i in ptch/* ; do patch -o test TOOL $i ; ./test debug > $i.output ; done

и след това с един прост for и diff видях кои съвпадат и кои се различават, и проблемния commit лъсна…

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

Изводът е, че човек може да дебъгва код на нещо в много случаи и без да знае езика…

2017-04-05 интервюта за админи

Wednesday, April 5th, 2017

Смених работата, но се оказва, че от интервютата бягане няма. Тоя път са за системни администратори.

За всеки нов вид интервюта си трябва доста време, за да се свикне и измисли хубав метод. Например, нямам fizzbuzz, доста по-трудно е да кажеш “покажи какво си писал”, а срещането на NDA, заради което не може да се говори какво е вършено не е чак толкова рядък случай. Да разбереш дали някой разбира в дълбочина някоя технология не винаги може да стане с 2-3 въпроса. Да не говорим, че докато не видиш как работи човека, няма как да го прецениш дали става…
(най-добрия вариант го правят в automattic, просто един месец ти плащат да работиш с екипа и ти дават задачи и гледат как се справяш. За съжаление не е лесно да се направи на друго място.)

Като за начало съм си сглобил малък админски тест, който да пращам на хората. Има даже дребен състезателен елемент и се чудя дали не мога да го разпъна до нещо escape-room-о-подобно :)

(in other news, бях седнал да си си разписвам escape room за админи, ако се намери достатъчно интерес може да я сглобя в лаба, има всякакви странни неща вътре)

(p.s. ако някой тия задачи са му лесни и си търси работа, лесно се разбира де да си прати CV-то…)

2017-03-30 Alexandra Zerner

Thursday, March 30th, 2017

Тия дни Виткур спомена, че се занимава с нов музикален проект – Alexandra Zerner, и един техен запис ми прозвуча добре, та се замъкнах с жената в Joy station да ги чуя на живо.

Като за начало, оказа се, че Joy station е широко, има място де да седят бременни жени, има въздух, звукът им е много добър, като цяло неочаквано хубаво място, особено за в студентски град.

А музиката си беше великолепна. Инструментален метъл, но на коренно различно ниво, интересна, с много техника и много идеи. Някаква представа може да се придобие в youtube, но определено е друго да се чуят на живо. Взех си cd-тата ѝ и ще си ги въртя известно време :)

А как точно свири Александра Зернер е трудно да се обясни. Единствения ми паралел беше Чък Шулдинър…

2017-03-12 апокрифи

Sunday, March 12th, 2017

От време на време докато пием се случва да си разказваме разни истории от едно време, кои апокрифни, кои истински, но всички заслужаващи да бъдат записани. Събрал съм няколко от спомени и участия, без имена (да предпазим виновните).

Една от най-любимите ми е за ISP-то (във времената на dial-up-а), на което един от админите по погрешка направил UPDATE на passwd таблицата без WHERE клауза и потрил всички пароли. Нямало backup (разбира се) или начин да се възстановят, за това си patch-нали radius-а ако един потребител три пъти напише същата парола, да я приеме и да я запише в базата. Така успели да възстановят почти всичко.

Един млад хакер една вечер в средно пияно състояние решил, че всичките internet доставчици в града му не струват и за да им отмъсти, написал един троянски кон, който правел безогледен flood по всичките им IP range-ове. В един момент се усетил как сам си е отрязял^Wзапушил клона, ама нямало какво да направи. След около седмица по различни начини (смяна на IP range-ове, филтри, черна магия) flood-ът бил спрян, но поне според някои хора още 10на години след това имало останал такъв трафик.

Администратор на ISP и известен irc сървър към него бил много приличен и мирен човек, който локалните хакери много тормозели. Накрая го пропили, и една вечер така след много пиене го питали “Абе, я си кажи root-ската парола”. Той просто се усмихнал и заспал на масата.

В един hosting имало shell скриптове, викани през sudo-подобна система за добавяне и триене на потребители. Скриптовете не били помислени достатъчно добре и когато един потребител си написал интервал в края на username-а, системата chown-нала ВСИЧКО на неговия потребител. Много неща спрели да работят, хората по навик рестартирали сървъра, и той повече не изгрял…
(тук не съм сигурен дали нямаше подобна случка и с rm при премахване на потребител, отнесло целия сървър)

В една фирма хората от нямане какво да правят си направили etherkiller (от едната страна RJ45, от другата щепсел). Забавлявали се, показвали го на хората, снимали го и го забравили. След няколко месеца се оказало, че щепселът бил останал включен в един контакт и само по чудо не била станала по-голяма беля.

В едно ISP младши админа написал rm /home/somewhere/something/ * (забележете интервала), докато се намирал в /usr/sbin. Понеже това било във времената преди не-ужасяващо-бавния интернет и пакетните системи в linux, отнело някакво време да се намери какво точно се е потрило и да се възстанови, поне една част от него.

В друго ISP на основния Cisco router изгоряло захранването (във времената на бавния интернет, малкото пари и никаквата резервираност). Въпреки знанията на хората по електротехника, не успели да се ориентират къде точно е проблема на захранването, та техни колеги от конкурентно ISP им дали под наем такъв router (НА ЧАС). Седнали с работещото и неработещото захранване отворени едно до друго и проследявали, докато намерят проблема (мотае ми се нещо като 10 часа).

Като си спомня още, ще ги опиша и тях :)

2017-02-22 FizzBuzz 2

Wednesday, February 22nd, 2017

Понеже идеята ми се мотае в главата от месец-два и тая нощ ми хрумна финалната оптимизация, ето продължението на post-а за fizzbuzz:

int i=0,p;
static void *pos[4]= {&&digit, &&fizz, &&buzz, &&fizzbuzz};
static void *loop[2] = { &&loopst, &&loopend};
int s3[3]={1,0,0},s5[5]={2,0,0,0,0};
char buff[2048];
char dgts[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
int buffpos=0;

loopst:
	i++;
	p= s3[i%3] | s5[i%5]; 
	goto *pos[p];

fizz:
	memcpy(&buff[buffpos],"Fizz", 4);
	buffpos+=4;
	goto end;
buzz:
	memcpy(&buff[buffpos],"Buzz", 4);
	buffpos+=4;
	goto end;
fizzbuzz:
	memcpy(&buff[buffpos],"FizzBuzz", 8);
	buffpos+=8;
	goto end;
digit:
	buff[buffpos++]=dgts[i/16];
	buff[buffpos++]=dgts[i%16];
end:
	buff[buffpos++]='\n';
	goto *loop[i/100];
loopend:
write(1, buff, buffpos);

Известно време се чудех как може цялото нещо да стане без никакъв branch, т.е. и без проверката за край на цикъла. Първоначалната ми идея беше да я карам на асемблер и да използвам като в exploit-ите NOP sled, нещо от типа (извинете ме за калпавия асемблер):

	JMP loopst
	JMP loopend
loopst:
	NOP
	NOP
...
	NOP
	; fizzbuzz implementation
	; i is in RAX
...
	MOV RBX, 0
	SUB RBX, RAX
	SUB RBX, $LENGTH
	SUB EIP, RBX
loopend:

Или, накратко, колкото повече се увеличава i, толкова повече скачам назад с релативния JMP (който съм написал като вадене на нещо от EIP, което най-вероятно изобщо не е валидно), докато не ударя JMP, който ме изхвърля. Като оптимизация бях решил, че мога да shift-вам стойността с 4, така че sled-а да е само 25 броя.

В един момент ми хрумна, че мога да мина и без sled-а, като правя деление (което е отвратителна операция, но спестява кофа nop-ове). Така се получи по-горния вариант на C, който не е съвсем C, а просто някаква странна асемблероподобна гняс.

Иначе, важно е да се отбележи, че на какъвто и да е модерен процесор по-горния код е далеч по-неефективен от простото решение с if-ове, най-вече защото branch prediction и всички други екстри се справят много добре с всякаквите if-ове, но доста по-трудно могат да се сетят тия jmp-ове към таблици базирани на някакви стойности къде точно ще идат, за да се прави спекулативното изпълнение. Не съм си играл да benchmark-вам (въпреки, че имам желание), но като цяло горния код има шанс да се справя по-добре само на неща като 8086 и компания.

И като идея за следващата подобна мизерия, може би може да се оптимизира истински чрез ползване на някое от разширенията за работа с вектори/големи стойности и се unroll-не цикъла, например да се прави на стъпки от по 4 с някаква инструкция, която смята делители (кой-знае какви странни неща има вкарани вече в x86 instruction set-а).

2017-02-21 сънища

Tuesday, February 21st, 2017

От irc, или какво ни се случва след достатъчно правене на всякакви събития:

(11:07:44) neter: какъв сън… на някаква конференция сме в огромна зала на няколко етажа, аз съм на последния с няколко колеги от работата и сядам да гледам, на сцената излиза Яна с някакви хора и говори нещо, в този момент някаква
(11:07:45) neter: дървена кутия в дъното на етажа, на който съм, започва да дрънчи като стар будилник (явно алармата на телефона ми е звъняла), отивам да я оправям, ама не е ясно каква е тая кутия и какво да я правя, търся бутони, докато не
(11:07:47) neter: виждам, че е свързана към някаква газова бутилка и има вероятност всеки момент да гръмне, Яна се обажда отдолу, че нещо в залата дрънчи, отивам до другата зала да взема нещо, а навсякъде бъкано с народ, едвам се
(11:07:49) neter: разминавам и сякаш не им пука, че онова дрънчи, та мозъкът ти кънти, връщам се при кутията, разглобявам я, откачам газовата бутилка, за да не гръмне и откачам всичко друго, което виждам, но онова не спира да дрънчи, докато
(11:07:51) neter: не идва Мариян, вика дай да пробваме да откачим ей тези жици (които в този момент се чудя как не съм видял), откачам ги, онова най-сетне млъква и седим и се хилим как замалко да си умрем
(11:09:31) lz1irq: :D
(11:09:42) lz1irq: neter: май ти идва повече стреса по конференции :D
(11:10:57) neter: интересно ми е как въобще се стигна до спиране на звъненето в съня – явно е, че е било от алармата на телефона ми, а нея съм я настроил да не спира да звъни, докато аз не я спра, което ше рече, че явно пресягането към онези
(11:10:58) neter: жици в съня, за да ги откача, реално е било пресягане към телефона, за да му спра алармата
(11:11:27) neter: това ми мяза на сомнанбулизъм – едно е да изключа алармата в просъница, друго е докато сънувам да правя такива неща

2017-02-13 сватба

Monday, February 13th, 2017

Ожених се.
(сега погледнете датата в title, че не е първи април, и продължете нататъка)

В петък (10.02, отбелязвам да не забравя в бъдеще) в 13:00 се ожених за (вече госпожа) Елена Дяволова. Понеже ни мързи да си сменяме личните карти, не сме си сменяли имената (иначе се чудех как малкия можем да го кръстим Колев-Дяволов, щото звучи точно като да коли дяволи…). Решихме да не правим голямо тържество, понеже {работа, мързел, бременна Елена, умора}, най-много да избягаме от всички за едно пътешествие.

Снимка с кумовете (и някаква растителност).

2017-02-07 FOSDEM 2017

Tuesday, February 7th, 2017

И преживяхме FOSDEM 2017.

Бяхме там с Марио, Любо, Маги, neter и zeridon (а Мариян беше там да присъства на конференцията, но се включи към нас) да правим видео/аудио записите и streaming-а. Три дни се ставаше рано и цял ден се дебъгваше (и за доста от хората – тичаше напред-назад, Любо каза, че единия ден е направил 27000 крачки), имаше всякакви странни проблеми и като цяло беше голямо забавление, приключено със ставане в 6:30 в понеделник да си хванем самолета. Като се прибрах спах 12 часа. Справихме се със събитие от 24 зали, два дни, около 600 лекции и 8-9 хиляди посетители (и не знам колко точно дъжд).

Малко снимки има на /pics/201702fosdem/, като на една от тях може да се види колко съм щастлив (това е в петък още, после имах основно уморен вид).
(снимките са от Мариян и Любо, като ще се опитам да намеря и още)

Като статистики не съм събирал кой-знае колко, мога да кажа само че пиковият трафик на restreamer-ите беше 630mbps, далеч под очакванията (това, което бяхме подготвили можеше да издържи спокойно 4gbps и се разширяваше лесно). Някакъв status на видео записите може да се види в review системата, като мога да се похваля, че имахме готови видеа още в събота вечер, а като гледам днес вече са release-нати половината.

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

Явно съм забравил какво значи best effort в IP/Ethernet мрежите. При 72та multicast stream-а и при 300pps на всеки в един момент се оказа, че по switch-овете има microburst-ове, които ни ядат пакетите от време на време. Това водеше до примигване на някои stream-ове, до ошашкване на ingest-ващия ffmpeg и вадене на картина с 1fps (като па аудиото си беше добре), артефакти и други гадости.

– Първият опит за решение беше включване на flow control-а. Това доведе до спиране на всичко за 5-10 минути (и липса на stream и видеа в review системата от тоя период, добре, че има записи по кутиите) и желание за по-внимателни fix-ове.
– Последва ровене по switch-овете, забелязване на едни броячи за твърде големи пакети и след това форсиране на 1000 байта горна граница на пакетите във ffmpeg. Не помогна;
– Вдигнахме за всеки случай и MTU-то на switch-овете, пак не помогна;
– Като вариант за pacing на портовете преместихме някакви неща на 100mbps да вкараме изкуствено забавяне, тотално омаза ситуацията;
– В един момент единия от мрежарите откри, че няма контрол в/у буферите на повечето switch-ове и реално ползваме 1/4 от буферите (щото всичкия ни трафик се набива в една опашка от 4те) и че няма свестен начин да използваме и 4те. Само на единия switch бяха пипнати и помогна, но малко;
– Смъкнах и bandwidth-а на входящите stream-ове от 4mbps на 2mbps, не помогна особено.

Решението за догодина е или Reliable Datagram Socket (Мариян обеща да напише support-а за ffmpeg и го държа отговорен), някакъв forward error correction (някакви хора са написали pro-mpeg поддръжка за ffmpeg, но не е merge-ната), или lossless мрежа и по-добри буфери (което казаха, че може и да може да се осигури за догодина). Шегувахме се, че мога да мина на infiniband за видеото.

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

Другите проблеми бяха по-малко интересни – утрепахме тока на сървърното (докато включвахме неща в съвсем друго място), хората не знаеха как да ползват микрофони, гърмя хардуер, валя дъжд (но не в залите), хората тичаха, врати се заключваха (автоматично), за малко neter и Мариян заседнаха в един асансьор и куп други неща, дето вече не помня.

(и за разлика от openfest, тук сървърите не бяха в/у тръбите на парното, а в стаята до него…)

Update: Току-що открих, че push-ването на видео извън мрежата е генерирало ~600GB, а системата, която генерира картинките за преглеждане на контролния интерфейс – ~7.1TB (постоянни 300mbps). Май съм бил най-големия генератор на изходящ трафик на FOSDEM 2017. Чудя се да се радвам ли или да се ужасявам.

2017-01-17 The Baby Owner’s Manual

Tuesday, January 17th, 2017

Чел съм много неща на Стивън Кинг.

Чел съм за геноцида в Руанда.

Чел съм за психопати: 1, 2, 3.

Чел съм Колимските разкази и Архипелага ГУЛАГ.

Както и по много други теми, заради които съм се депресирал за по седмица-две.

Всичките обаче не са толкова ужасяващи, колкото The Baby Owner’s Manual, след което си извадих една бутилка и си наливах известно време. Ако Стивън Кинг пропише такива книги (или по темата), вероятно ще има много припаднали читатели.

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

2017-01-09 Учредително събрание на ДА България

Monday, January 9th, 2017

Учредителното събрание на ДА България беше по-интересно, отколкото очаквах, и горе-долу толкова тежко, колкото очаквах.

Не е тривиална задача да се съберат на едно място 1500 човека (мисля, че на други места писаха за огромната опашка и препълнената зала, аз ако не бях от техническия екип не е ясно кога щях да успея да вляза). Още по-малко тривиална е с такова количество хора да се учреди политическа партия (законовият минимум за учредителното събрание е 500 човека, но въпреки това в оня ужасяващ студ хората се бяха вдигнали, явно от притеснение, че може да не съберем кворум).
А да се реализира гласуване с вдигане на ръка на целия устав точка по точка, разни хора и управителни органи и това да се събере в един ден си е постижение. Имам някакви спомени как едно време партии са се учредявали по цяла седмица с конгреси и изказвания, определено е имало причина (особено ако едно гласуване отнема половин час да се преброи). Щях да мрънкам на някой защо нямаме електронно гласуване, ама после се усетих, че ще е перфектното нещо да се заядат в съда и да не приемат регистрацията …

Официален запис ще има по-нататък (хората, които снимаха имат отделно материал от всички камери, а и вероятно ще искат да стабилизират някои моменти), но аз преди това съм изрязал от dump-а интересната за мен час – представянето на членовете на националния съвет, около 100 човека с 30 секунди за всеки (които никой не пресрочи). Правих една разбивка по професии (която не е съвсем точна, явно съм пропуснал няколко човека и трябва да намеря време да го гледам пак), изглежда по следния начин:
18 адвокат
10 ИТ
9 предприемач
7 преподавател
5 юрист
4 икономист
3 студент
3 музикант
3 мениджър
3 маркетинг
3 инженер
3 бизнесмен
2 психолог
2 политолог
2 писател
2 оператор
2 неясен
2 лекар
2 журналист
2 дизайнер
1 фотограф
1 фармацевт
1 социолог
1 реклама
1 математик
1 лесовъд
1 издател
1 еколог
1 директор планинска спасителна служба
1 блогър
1 бивш спортист
1 актьор

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

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

p.s. търсят се още хора, които имат желание да се включат, подробности има на сайта, който иска може и да ме пита директно.

2017-01-07 streaming

Saturday, January 7th, 2017

Малко наблюдения по stream-ването и платформите.
(днес stream-вах учредителното събрание на Да България (в която вече съм и член). По темата за Да България ще пиша някой друг път)

Facebook имат една от най-малоумните streaming платформи, на които съм попадал. Освен разните изисквания и горна граница на качеството (максимумът е 720p), event-ите им expire-ват доста бързо (т.е. не можеш да си го създадеш от предната вечер, като в youtube), на едно-две прекъсвания приключват и event-а (ако се налага човек да си пипне настройките няколко пъти, трябва да го създава наново) и имат и лимит за продължителността (което е особено дразнещо). Като за капак, човек ако няма flash не може да си пусне stream-а да е live каквото и да прави, та докато си правех тестовете се наложи да си ползвам виртуалката с windows (и тестовия facebook account на жената).

Youtube пък имат едно малко неразбирателство с ffmpeg, че пращат някакъв keepalive по RTMP сесията, който ffmpeg-а го няма за нищо, не го чете и в един момент едни tcp буфери се напълват (говорим за 16-тина байта на минута-две, та отнема няколко часа, че да се прояви) и се троши връзката. Слава богу, не махат event-а толкова бързо, колкото facebook и може да се рестартира.

Моя си streaming server си работеше най-добре (един nginx с mod_nginx_rtmp). Понеже имаше малко проблеми да reencode-вам всичко локално, бълвах на 10mbps директно изхода от хардуерния encoder до marla, от там дърпах с 3 ffmpeg-а и качвах смачкания на 1mbps stream до facebook, youtube и до същия nginx, за да мога да си го гледам.

И да си имам редът за бълване до facebook (понеже ми отне един следобед да го докарам както трябва, най-вече заради борбата с оня flash) – двете важни неща за -g 45 (може и 60), имат изискване за keyframe поне на всеки 2 секунди, и -r 30, понеже изискват 30-кадрово видео. Другото е стандартно – H.264, AAC, 44100hz (и моно звук, понеже такъв ми подаваха). Добавката с -af volume=60d трябва да се махне за всички, на които не им подават звук на ужасяващо ниски нива.

(за всички, които имаха забележки за звука, няма хубав automatic gain control, който бих могъл да сложа, за да изравнява добре нивата на това, което влиза. В залата микрофоните се чуваха с различна сила, много хора знаеха къде да говорят и нямаше и как да се направи нещо повече. Аз лично щях да търся начин да окича колкото мога повече от участниците с headset-ове, което па екипът ни много много го мрази)

ffmpeg -i rtmp://strm.ludost.net/st/XXXXX -r 30 -c:v libx264  -b:v 1000k -s 1280x720 -preset:v veryfast -threads 6 -minrate 1000k -r 30 -g 45 -maxrate 1000k \
	-c:a libfaac -ar 44100 -ac 1 -b:a 128k -af 'volume=60d' -f flv 'rtmp://rtmp-api.facebook.com:80/rtmp/XXXXXX'

Иначе е неприятно, че трябва да живеем на proprietary кодеци. При някакви скорошни тестове около FOSDEM пак се оказа, че VP9 още няма как да се encode-ва в близо до реално време без поне два пъти процесорната мощ, нужна за H.264, има малко поддръжка и никакъв хардуер, който може да го дава.

p.s. Важен факт – за всичко, което се ползва по време на streaming-а трябва да има хубав работещ КАБЕЛЕН internet, и като резерва, 3G, през което да се работи като се чупи локалния wifi (щото той със сигурност ще умре по някое време).