Гласуване за лекции за OpenFest 2019

October 7th, 2019 by Vasil Kolev

TLDR – Гласуване за лекциите за OpenFest 2019.

Както всяка от последните години, имаме едно консултативно гласуване за лекциите за OpenFest 2019, резултатите от което ни помагат да подредим лекциите по зали и да избегнем колкото можем конфликтите.

2019-09-08 нов мрежов setup в 3dc

September 8th, 2019 by Vasil Kolev

Преди някакво време с Мариян си взехме половин rack в 3dc, за да си слиожим там разни машини (и подслоняваме други проекти, последно linux-bg.org). Свършихме малко интересни неща с мрежата и ми се ще да ги разкажа, заедно с разни бъдещи планове.

В началото бяхме на един гигабитов switch (Quanta LB4m, стои ми в момента в краката). От там тръгна setup-а с няколко vlan-а – един за публични цели (/27), едни за ipmi, и разни за външните връзки. От самото начало две машини бяха router-и и за всяка връзка навън или навътре се правят сесии и до двата.

Последва разширяване, първо с един, после с втори 10gbe switch – Arista DCS-7050S-64 и DCS-7050S-52 (имаше и някакъв междинен, който не мога да си спомня). Самите switch-ове имат много приятен начин за настройка, понеже на практика са откраднали Cisco CLI-то и са го направили приятно за ползване. В началото използвахме основно единия, после закачихме всичко на двата, взехме една кофа медни SFP-та и махнахме гигабитовата Quanta.

За redundancy (понеже веднъж се случи да crash-не единия switch), първоначално направихме setup-а с active-passive bond-ове с miimon (arp_monitor щеше да е трудно заради неяснотата какво точно да се пингва, вероятно трябваше да са самите switch-ове). Не сме мислили за идеята за MLAG и клъстериране на switch-овете, понеже поне моя опит показва, че няма никой производител, който да може да си направи правилно клъстерирането и отпадането на единия switch да не повлияе на другия (и вероятно мога да напиша един blog post по темата).

Текущата стъпка е active-passive bond-а да се замести от отделни BGP сесии през двата switch-а до двата router-а, т.е. общо 4 сесии. Създадох по един vlan на switch (за да не пипам съществуващия трафик), peer-нах там машините с двата router-а и те си анонсират на /32ки адресите, които имат. Така се постига по-добро redundancy, понеже всяка машина има 4 пътя и при отпадане на каквото и да е може да знае кои други пътища и работят.
(има пуснато и BFD в схемата, на което Мариян ме открехна, и сесия се усеща, че е умряла за около секунда, вместо стандартните BGP timeout-и)

С този setup също така може да се пусне ECMP (equal-cost multipath) и да се ползват и двата интерфейса едновременно (не че някой пълни и един 10gbps интерфейс, но принципът е интересен).

Обмислях да направя директно следващата стъпка вместо тази, която е вместо с двата router-а машините да говорят BGP директно със switch-овете, като така се намалява броя сесии. Това обаче изисква малко tooling, за да мога да синхронизирам конфигурацията на двата switch-а по темата и доста внимание да не изтърва пълна таблица натам, защото ще клекнат (така като гледам, на пръв поглед поддържат до 16к пътя). В този случай обаче все пак ще трябва да оставя L2 нещата по switch-овете за външните връзки, т.е. не мога да мина изцяло на route-нат setup (защото не мога и да терминирам сесиите директно в switch-овете, въпреки че обмислям хакове да прекарвам многото трафик директно през switch-овете, с VRF-и).

Също един от следващите планове е cloud-тип нещо – три железа (с най-вероятно StorPool за storage), около 1 TB памет, 100-ти на core-а и изцяло route-ната мрежа, до самите виртуалки. Също така обмислям и router-ите да са 2 и да са пак виртуалки, с PCI pass-through на мрежови интерфейси, но това трябва да си го досглобя в главата – има разни подробности за най-подходящия point-to-point интерфейс за вътре във виртуалките, и за начина на реализация на вътрешни мрежи.

(
Дълго време гледам как чисто layer2 мрежите имат купчина неудобни проблеми от гледна точка на redundancy и използване на целия си ресурс. Редовно виждам как в datacenter мрежи STP-то, клъстерирането и подобните неща убиват някакви услуги, и пробутвам на разни хора идеята да минат на layer3 мрежи – от много време няма някаква разлика в performance на двете. Явно е по-правилно да дам пример :) )

2019-08-04 единичен апокриф

August 4th, 2019 by Vasil Kolev

От серията апокрифи, с добавка.

Преди година-две се возех с един приятел, и той ми разказа следната история: българска фирма, която едно време продаваше много мрежов хардуер на isp-та, си поръчала много оптични конвертори от Китай.Пазарили се здраво с китайците за отстъпки, и накрая китайците казали – добре, за тия пари ще ви направим конвертори, и им ги пратили…

Пуснали те първите конвертори за разни потребители, и дошъл въпроса “защо през тая връзка мога да сваля zip файл, ама doc не мога?”… И тук човека ме пита – сещаш ли се какво е станало?

И аз си спомних как преди много години, около 1998, почти всичкия internet беше серийни връзки, и бяхме намерили начин да качваме серийния асинхронен сигнал в/у радио и да го носим на някакви сериозни разстояния, но имаше малък проблем – като пуснеш само нули или само единици, и те потрошаваха сигнала, понеже нямаше какво да му поддържа нормално нивото. Нещо като manchester encoding щеше да реши проблема (и да ни смъкне двойно bandwidth-а), но тогава такива неща не ни бяха във възможностите, за това написах малко демонче, наречено lfld (“line-fill daemon”), което в моментите, в които няма сигнал от серийния порт, да бълва “U” (01010101 в binary, 0x55), та да държи линията в нормално състояние, и на pppd-то беше обяснено да escape-ва 0x00, 0xff и 0x55. Тия дни дори си видях кода някъде, и е средно зле, ако има интерес към подобно нещо, мога да го кача някъде (може да се наложи допипване, че да работи на kernel > 2.0)
(синхронен сериен порт също би трябвало да ни реши проблема, ако си носеше clock-а със себе си, но тогава тия неща бяха ужасно скъпи)

Та, какво се оказало – китайците спестили от едни регулатори на волтажа, та нещо с голяма ентропия е ок (като zip-а), нещо с много повтарящи се битове – не толкова. Та фирмата организирала работилница, и половин София им помагала да patch-ват с поялниците всичките тия хиляди конвертори…

Учудващо как някакви проблеми не изчезват :)

НАП Leaks

July 20th, 2019 by Vasil Kolev

Та, leak-а от НАП.

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

Върви много спам по темата, няма да преповтарям неща от там. По-скоро ми се мотае въпроса, този набор от файлове от къде точно в НАП идва? Би било много интересно някой да анотира и напише какво има там като типове справки/данни, понеже поне по някакъв начален поглед и малко разпитване, онова там е тюрлю-гювеч (да използваме техническия термин). Изглежда като “staging” за раздаване на поискани справки по неофициална линия (особено файла QNEQNEV.CSV), и това изглежда като по-интересния момент – кой, какви справки и защо си е вадел от там.
(също така, някой да вземе да публикува какъв е тоя неофициален ред за искане на справки – от много време ми е интересно колко човека в България се водят на sysadmin-ска длъжност (даже не ме интересува кои са, просто числото))

А колкото до хлапето, което са събрали и са тормозили цяла нощ да си признае, няма да се повтарям, че тия освен, че не са хора, не са и особено грамотни.

Sysadminday 2019

July 15th, 2019 by Vasil Kolev

26-ти юли, петък, 19:30, “Кривото” на ъгъла на “Дондуков” и “Будапеща”, в мазето – събираме се за деня на системния администратор.
update: коригирано юни на юли…

2019-07-14 разни

July 13th, 2019 by Vasil Kolev

(днес имаше ден на отворените врати в initLab, но май никой не беше разбрал, основно обичайните заподозрени свършихме малко работа. По принцип е всяка втора събота на месеца, за заинтересуваните)

За рождения ден (някакво време след като излязох от болницата) група хора ми подариха квадратен монитор, да работя на него (след като си смених лаптопа с нещо много странно с 4:3 екран, щото 16:10 ми беше писнало). С няколко фалстарта (видеокартата ми на текущия не обичаше конвертори, прекъсващ кабел и т.н.) в момента съм на него на работа, и тотално не мога да си обясня как може да се работи по друг начин. Виждам си всичкия код, мога паралелно с него да гледам някакви логове, схемите ми се събират на екрана и не трябва да ги сплесквам по вертикала, изобщо радост за душата. Препоръчвам на всеки, дето върши някаква работа.

По темата се зарових да видя какви са опциите, и явно единственият монитор в тоя размер е този – човек може да си купи панел с тоя размер и LVDS (или по-нормален) интерфейс от китайците, но ще трябва да си направи и стойка (или монитор като за авиодиспечер, или медицински цели). Предполагам, че повечето хора се справят с много широки монитори, за да си докарат нужния вертикален момент, или правят както Кънев едно време в initlab (два 16:9 монитора на 90 градуса и още един в нормална позиция, за тестване).

Явно индустрията се е ориентирала към гледането на филми, дано не дойде момента, в който неща като Cinerama (2.59:1) станат модерни, тогава всички, дето трябва да вършим работа, ще трябва да си купуваме медицински монитори.

Хрумна ми също така, че перфектния ми лаптоп би имал подобен монитор, който да може да се сгъва на 4, т.е. да имам квадратен малък, и разгънат квадратен голям такъв (когато имам място), но това отива в научната фантастика (заедно с model M клавиатура в лаптопа, и вероятно екзоскелет, че да мога да го нося без да ми се строши гръбнака).

(in other news, ако някой му хрумва клавиатура с подобен размер и усещане като model M, но по-тиха, да каже, че ще вземат да ме изгонят от офиса)

OpenFest 2019 – CfV, CfP

June 20th, 2019 by Vasil Kolev

Та, ако някой се е съмнявал, да кажа – ще има OpenFest 2019. Тази година имаме някаква насоченост към бъдещето, и едната посока е човешкото бъдеще, т.е. ученици и други деца, та от там и голямото “Tomorrow” в страницата. Очаквайте по-ясно описание на самия сайт (аз малко недоспивам тия дни).

Както винаги си търсим доброволци и лектори.

Посещение от НПМГ в лаба

June 16th, 2019 by Vasil Kolev

(чак сега успявам да пиша)

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

Дойдоха в лаба, показахме им различните неща, които имаме и правим, обясних неформалния характер на мястото, и ги позабавлявахме с разните странни неща, които имаме – разказах им за системата за отваряне на вратата и контрол на лампите, показах им едно софтуерно радио, и един стар MFM-RLL харддиск (питаха ме колко е голям, казах – 10 или 20, и Теодор ми напомни да спомена, че това са мегабайти).

После отделихме едно прилично количество време да ни задават въпроси – в лаба бяха хората от camplight и те доста помогнаха. Имаше въпроси по темата работа, къде да учат след училище и всякакви такива неща (където обяснявах, че в България ФМИ на СУ е най-малко зле). Разказахме им за всякакви хакатони, за различни компании, които си търсят хора и всякакви такива неща, и се надявам че им бяхме полезни.

(и тия дни като обявим официално call for volunteers за openfest, ще им го пратим и на тях)

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

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

2019-04-26 две събития

April 20th, 2019 by Vasil Kolev

Изпратих семейството надалече и ми остана малко време за социални събития, та за един ден отидох на две (вместо да си отспя).

Първо сутринта отидох до ТУЕС, където имаше ТУЕСФест – интересната част беше, че навсякъде по стаите и коридорите ученици бяха изложили проекти, които бяха направили. Имаше толкова забавни неща, че ме хвана детска радост:
– машина за организиране на drinking game;
– група осмокласници бяха изкормили и mod-нали кафе машина, така че да могат да я командват гласово;
– имаше няколко security-ориентирани дипломни работи – IDS, reverse VPN, нещо, дето атакува wireless мрежи;
– излъчвател на DCF77;
– софтуерно радио – човекът с един RTL2832U си беше направил вузиализация на ефира и възможност за слушане на FM радио;
– минималистичен компютър от breadboard-ове и интегрални схеми, който наближаваше turing-complete машина;
… и някакви други, дето не съм запомнил, ТУЕС ще направят едно добро дело като публикуват списъка.

Следобеда отидох на Uber Open Source Summit в CityStage, където ме бяха поканили да участвам в панел на тема “Contributing to Open Source”. Дискусията се надявам да е била полезна на присъстващите, ще видя като излезе записът какви глупости съм говорил. Самото събитие беше приятно и се намериха доста хора, с които да си поговорим, та с удоволствие бих отишъл пак на нещо подобно. Като цяло имах очакването, че като събитие, организирано от голяма компания няма да ми е особено интересно/приятно, но тук се бяха справили и нямаше разните дразнещи спамерски моменти, които съм виждал на други места.

Update: Списък с проектите от ТуесФест.

2019-04-19 FizzBuzz 3

April 19th, 2019 by Vasil Kolev

(предхождащи post-ове по темата: FizzBuzz, FizzBuzz 2)
Задачката продължава да води до интересни идеи, та ще публикувам някои от тях.

В последно време търсим java програмист, та в едно от решенията имаше следното:

try {
	errorNumber=  1/(tmpNum%15);
} catch (ArithmeticException ae) {
	return "AB";
} 

Това за мен беше съвсем неизвестен начин да се напише if() :) Ползването на exception-и е страшно неефективно (поне под Linux генерира SIGFPE, т.е. ще мине за малко и през kernel-а), но е още един начин да се промени пътя на кода.

Също така, в езиците, в които няма goto цикълът може да се реализире с рекурсия, като функцията, в която се влиза се избира от масив (идеята дойде на Slackware, който написа реализация на php), и изглежда горе-долу по следния начин:

function printto99($i) {
	global $funcs;
	....
	$funcs[$i % 100]($i+1);
}
function print100($i) {
	global $funcs;
	....
	return;
}

$funcs = array(0 => printto99(), 1 => print100());

$funcs[0](1);

В …. частта се слага логиката какво да се печата, което ме мързи да разписвам пак.

В Java тази конкретна идиотщина може да се реализира, като вместо масив от функции се направи масив от обекти с общ родител, който има два наследника – printto99 и print100 и така да се направи цикъла.

2019-04-04 раждане

April 4th, 2019 by Vasil Kolev

Ясен Василев Колев, 51cm, 3800g, роден в 01:17 тая нощ.

Елена приспиваше звяра, в един момент чух рев, и я видях я да излиза от стаята с думите “доприспи го, изтекоха ми водите”. Всичко е минало лесно и сравнително бързо, сега като ходих да ги видя и на двамата много им се спеше. Прибирам си ги вероятно във вторник.

Обещавам да си чета от време на време mail-а, ако трябвам на някого.

2019-03-09

March 9th, 2019 by Vasil Kolev

Продължавам да се връщам в цивилизацията.

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

Като страничен ефект, това не доведе до никакви болки, т.е. явно операцията има ефект. От снощи съм почнал внимателно да намалявам дрогата, да видим.

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

Бавно почвам да хващам пак и останалите на заден фон проекти, само това, че свикнах да проспивам следобеда малко пречи. Предполагам, че с дозите кафе отпреди ще неутрализирам ефекта.

2019-03-02 следболнични

March 2nd, 2019 by Vasil Kolev

И следболнично (трябваше да е вчера).

В петък ме изписаха (и ми извадиха абоката, който ме подлудяваше). Вкъщи съм си и основно дремя.

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

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

Дадоха ми и болничен. Той е 5 дни за в болницата и 30 (ТРИДЕСЕТ) дни вкъщи. Предния път на 10тия ден аз обикалях като идиот, не знам защо това е стандарта, особено за човек на моята възраст.

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

Нямам бъдещи планове за следващите няколко дни, освен да дремя и да ми се намества главата, после ще видим. Искрено ми се иска да мога да се върна малко на работа, преди Елена да роди и пак да съм неадекватен :)

2019-02-27 (втора) болница 3

February 27th, 2019 by Elena Dyavolova

Васил е в реанимация. Докторите са успели да пробият и да ремонтират главата му успешно. Сега чакаме да спре да халюцинира.

2019-02-26 (втора) болница 2

February 26th, 2019 by Vasil Kolev

Кратки новини: операцията преди мен се проточи, та съм за утре, първа операция. Излежавам се с пълна сила.

2019-02-25 (втора) болница 1

February 25th, 2019 by Vasil Kolev

Първи ден в болницата.

Станах в 6:10, че да стигна в 7:45 пред кабинета за приемане. Вкъщи само малкия звяр беше толкова ранобуден, та можах даже да го нахраня, преди да изляза. Явно не съм се объркал кога е час пик, стигнах доста бързо.

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

Иначе, тук си е тихо и спокойно, има гледка към “Гешов”, и най-вероятно ще си изкарам времето в ровене в кода на haproxy, да можем да пуснем trafstat-а на едно интересно място.
(кодът му не е от най-радващите, и най-вече не изглежда да има на лесно място нещата, дето ми трябват…)

2019-02-19 предболнично

February 19th, 2019 by Vasil Kolev

Та, невралгията ми се върна. След като проверих с един куп доктори дали не може да е нещо друго и взех едно второ мнение от едно светило, което оперира в момента в Пирогов, изводът е, че ще се отваря и ремонтира (и ще се види дали нещо ново не се е появило там, понеже и болката е от време на време различна). В понеделник (25.02) ме приемат в болницата, и по някое време след като ме изследват за стандартните неща, ще ме оперират. Ще намеря начин да има някакви update-и тук за заинтересуваните.

Като цяло не горя от радост, че ще бъда опериран, от друга страна, освен че ще се наспя, пак ще се реши проблемът с болката. Спокойно мога да кажа, че предната операция ми даде 5 години живот (успях да се оженя и да направя две деца, освен всичко останало), та ще съм щастлив и на още 5 :)

А може даже и да блогвам повече от болницата, въпреки идеята ми да посвърша малко работа, че да не ми е скучно.

2019-02-09 FOSDEM 2019

February 9th, 2019 by Vasil Kolev

Та, FOSDEM 2019. В bullet point-и, че не мога да събера нещо по-кохерентно:

– Занесохме си пак прилично количество хора от тук за видео екипа;
– Тази година бяхме с повече зали – 26 (+ една смяна в последния момент);
– … горното репи да яде в сравнение с идеята догодина да са над 30. Очаквам 2050-та FOSDEM да се случва в цял Брюксел;
– Понякога е притеснителен тонажа техника, който разнасяме напред-назад, с всичките стативи, камери, кутии и какво ли не;
– Сменяхме зала м/у събота и неделя, защото в първоначалната потече вода. ОТ СТЕНАТА (местната поддръжка на сградите дойте, видя, каза “това не е нормално” и си тръгна);
– Смяната към TCP реши старите проблеми (и добави нови);
– Audio monitoring-а се оказа много удобен;
– Имаме огромно количество бележки за post-mortem, догодина може да има някои много интересни промени във видеото;
– До сряда след конференцията бяха публикувани над 600 лекции.

Едно от интересните неща беше, че Емануил беше организирал нещо като пилотна младежка програма – едно девойче, 4-5 клас, от Англия (заедно с майка си), да дойде и да види FOSDEM. Много се зарадва на целия video setup и да разбере как работят нещата, и ми припомни, че можем/трябва да направим нещо такова и при нас, най-малкото на OpenFest, на принципа на програмите за социална отговорност (няма само Rails Girls да са такива, в крайна сметка).

2019-01-28 разни

January 28th, 2019 by Vasil Kolev

Отдавна не съм писал, та накратко новини:

– чакаме втори звяр (знае се, че е мъжки, мислим име);
– върна ми се невралгията преди една седмица, следващата седмица съм на ЯМР и после ще видим;
– ще ходя пак на FOSDEM да се занимавам с видеото (въпреки невралгията, хаповете вършат някаква работа);

Около страничните всякакви проекти:
– работя по въпроса да имаме сървър с 10gbe порт за OpenFest (вече взех модули за switch-а, остана да харесам карта и да видя дали ще сменяме желязото), така ще си улесним малко свързаността, че с тоя LACP bond ме препсуваха три пъти;
– самият OpenFest мина доста добре. Аз се правех, че не съм в организацията;
– появяват се нови ipv6 тунели, който случайно не знае, че давам, да види в wiki-то по темата – има там едни гигабити да се напълнят, та обаждайте се, ако ви трябват;
initLab би се радвал на още членове;

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

2018-11-27 StorPool-ската игра на OpenFest 2018

November 27th, 2018 by Vasil Kolev

(английската версия е в блога на StorPool)

В последните няколко години StorPool се появяват на OpenFest. За да направим щанда по-забавен, измисляме някоя игра. Миналата година задачата изглеждаше измамно проста, но доста затрудни хората, та тази година реших да опитам с нещо по-лесно.

“Fix the problems” задачата е базирана на много някакви стандартни случки от админския живот, т.е. на нещо, което би трябвало да ви се е случвало. Представете си обаждане от приятел (което може да е в 8 сутринта), в което ви казват “live сме с тая система, ама даже не тръгва, ПОМОЩ”. Та, логвате се и откривате ужасяваща кочина, сглобена от неща, правени от различни хора на различни езици, не-тествана и пълна с малки и големи проблеми, и трябва да проработи.

(или може би само на мен се случва, знам ли…)

Може да се пробвате, като свалите задачката с примерни данни от quiz.storpool.com/of2018.tgz и се пробвате. Отговорът започва с “8”.

За приключилите и нетърпеливите, ето описание:
Задачата се състои от следните файлове: a.c, a.php, a.pl, a.py, run.sh (който си мислех да кръстя “a.sh”) и един Makefile. “run.sh” свързва всички останали заедно, да сметне някакъв резултат от данните в “data/” директорията.

Цялото нещо си има история – имало 4 различни програмиста – C файлът бил написан от човек, който говори английски, PHP-то от финландец, Perl-а от унгарец, Python-а от арабин, и shell script-а от българин. Всички са имали лошо мнение за останалите и са оставили коментари в кода по адрес на останалите.

Счупванията са сравнително тривиални, понеже time limit-а за цялата задача беше 30 минути и имаше разни заблуждаващи моменти. Започвам от свързващия файл и после по pipe-а:

run.sh навързва всичките останали. Основната грешка е, че липсва -0 параметъра на xargs (което се забелязва доста лесно, понеже find използва -print0). Друга гадост е, че файлът е с DOS-овски нови редове и не може да бъде стартиран нормално, или трябва да се подменят, или да си копирате отвътре pipe и да го пуснете на ръка.

В коментарите може да се види как авторът нарича останалите “идиоти” (което съм сигурен, че всички са виждали в някакъв вид), и списъкът му за пазаруване. Последното може да се вижда странно и невероятно, но е нещо, което съм виждал в production код – случва се, като трябва веднага да се запише нещо и човекът го мързи да отвори нов прозорец в редактора или да намери малко хартия.
(някакъв спомен ми се мотае, че случая, който бях виждал беше поръчка за KFC…)

a.php добавя 1 към всички числа, и за да дразни останалите разработчици, добавя и допълнителни интервал. Очевидната грешка е че вместо STDIN е написано STDON, което бързо се оправя.

В коментарите се вижда как програмистът не е щастлив с останалите от екипа и водката му е почти свършила. Не съм виждал лично подобен коментар, но съм чувал от достоверни източници за подобни случаи. Колкото до смисъла от подобен код, има ужасно много такива дребни неща в много проекти, които никога не е трябвало да съществуват, но все пак са там.

a.pl просто премахва всички интервали, т.е. създава едно голямо число от всичките числа на реда. Грешката е, че се използва $__ вместо $_ – лесна за забелязване правописна грешка.

В последния коментар на файла има оплакване, че авторът не е разбрал нищо от това, което останалите са говорили и че финландецът е бил пиян. В някакъв момент бях се замислил дали не искам да разпиша някъде целият разговор на тия хора, щеше или да е много забавно, или много болезнено.

a.py взима всички числа и връща остатъкът им при деление на 2^63 (което е hard-code-нато като 9223372036854775808). Грешката тук е, че цикълът започва с while False:, което няма никакъв смисъл, и смяната му на while True: решава проблема. Самият код е малко по-гаден от останалите, понеже има променливи с имена на арабски, които се изписват от дясно на ляво и могат да объркат терминала, но в крайна сметка тези части не трябва да се пипат.

Оплакването на края е, че ако не си бил взел трета жена, нямало да му се налага да работи с тези хора…

И накрая, a.c прави странни изчисления и вади остатъка от деление на 2^10 на резултата в шестнайсетичен вид (за да е достатъчно кратко, че да върши работа за отговор). Грешката в кода е, че целочисленият тип в началото е грешен и трябва да се работи с long long (което се вижда в останалия код). Това е и причината в Makefile да има -Werror -Wall, за да се забележи лесно проблема.

А коментарите във файла са премахнати заради “PARA-22”, което не би трябвало да има нужда от дообясняване.

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