Posts Tagged ‘крокодилски’

2018-07-10 “Proofs and refutations” на Имре Лакатош

Tuesday, July 10th, 2018

Тия дни прочетох “Proofs and Refutations” на Имре Лакатош (Imre Lakatos), унгарски математик и математически философ.

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

Като погледна назад към коя математика ми е останала в главата и коя не, разделителят в общи линии изглежда като да съм си отговорил на въпроса “защо” (я има|се ползва), понякога и “защото е тривиална”. Голяма част от останалото е отказало да ми се лепне в главата, и понякога ми се е налагало по-късно да се ровя в него и да се опитвам да разбера, когато ми е трябвало (и когато много често съм се спирал на изцяло приложната му страна, без да задълбавам (полета на Галоа) , или просто да придобия бегла представа (решетки, които още не мога да докарам до някакво интуитивно ниво)).

Остават разни интересни въпроси:

– Грешно ли се преподава математика? Явно не съвсем, при условие, че една прилична част все пак съм я научил (и ако трябва, мога да си изведа формулата за решение на квадратно уравнение, например). Дали може да се подобри по смислен начин?
– Ако хората имат нужда от повествование (narrative, разказ), за да запомнят/схванат нещо, това дали не е бъг в главите ни, който трябва да оправим, или нещо, от което трябва да се възползваме?
– Някой да знае учебници, които обясняват по този начин различни математики? Не говоря за безумно глупавите от типа на “head first statistics”, а някакви, които могат да опишат процесът на извеждане на текущата теория, причините за това и по какво се работи в момента, може би комбинация от математика и история (без премълчаванията, за които Лакатос пише)?

Интересно също кои са наследниците на Лакатош. Карл Попът му е предшественик, но да речем, че неговите идеи достатъчно са се просмукали в каквото друго съм чел, и ми е интересно какво ново (и смислено) има в областта в последните 50-тина години…

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

2018-01-28 чукове

Sunday, January 28th, 2018

“Не го насилвай, вземи по-голям чук”

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

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

Като за пример, тия дни ми се налагаше да подменя едно парче софтуер в 50-тина клъстера, като всеки от тях имаше м/у 3 и 50 машини. Понеже инструментите, които имам са pssh и pscp, се оказа най-лесно на един пас да копирам нужните файлове по всички сървъри, и на втори пас да се логне pssh и ако трябва, да копира където трябва, иначе просто да изтрие това, което бях копирал. Някакъв по-подреден начин би било да извадя списък на всички машини, на които има нужда да се направи действието и да го направя само там, но щях да го напиша и направя по-бавно, отколкото по грубия и бърз начин.

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

Принципът изглежда да може да се приложи към любимите ми начини за дебъгване – това, което ползвай най-често е strace, което спокойно може да се опише като един от най-тежките чукове за дебъгване. Почти без значение какво дебъгвам – компилиран C код, php, python, perl, java – успявам да видя симптомите и да се ориентирам какво става, въпреки че като цяло за всеки от тия езици има специализиран и вероятно доста по-нежен вариант да се гледа какво става.
(искам да отбележа, че има и други тежки случаи – имам колега, който за да смята някакви математически изрази от време на време вместо да си пусне някакъв калкулатор като bc, пуска gdb и прави в него нещо като “p 1024*1024*231/1.1”)

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

(да не говорим, че хората искат да пишат умно, и колкото по-умно пишат, толкова по-трудно се дебъгва това, което са сътворили)

2018-01-20 Сървърни социални служби

Saturday, January 20th, 2018

Разни случки от последните година-две:

– седя си аз на един хакатон, и всичко ми се отваря бавно. Поглеждам защо – раздадени са ми ipv6 мрежа и gw, пингва се, но няма ipv6 свързаност, и всичко се опитва в началото да ползва v6, отказва се и минава на v4. Издирват някакси админа, той отговаря “ами аз не съм пускал такова нещо” и т.н., поглеждам – mac адреса на default gw по v4 и тоя, от който ми идват router advertisement-ите е същия.

– “Хора, гръмна ви диск.” “Хора, гръмна ви друг диск.” “Хора, гърмят ви дискове с гигантска скорост, скоро няма да има де да си държите данните.” “Няма де да си държите данните, къде са ви replacement дисковете”…

– Предават се някакви сървъри на нови админи. Логва се стария да покаже нещо, и на конзолата се вижда “Last login преди 8 години”, машините не са update-вани (Debian 4-5).

– “Някой ви е влязъл в сървъра през ipmi-то, направил си е root account и е пуснал minerd. Моля сменете си паролите на IPMI-тата и ги филтрирайте от internet-а, даже производителя им (supermicro) казва, че тия неща не са толкова сигурни.”. Повторение на това – още два пъти в следващите 7-8 месеца, при същите хора.

Има много други такива случаи, но мозъкът ми вече отказва да ги приеме. Ще ми се да направим сървърни социални служби, дето като някой не си се грижи за нещата, да им назначава със съд адмиини, дето да ги поддържат, и на които да плаща собственика на сървърите/мрежата. Безхаберието трябва да е наказуемо, особено в размерите, в които го виждам от време на време…

2017-12-25 равносметка

Monday, December 25th, 2017

Седя и си мисля за писането равносметка за годината…

В някакъв ред, какво се случи тая година:

– Роди се Ба’ал (официално известен като Игнат);
– Направихме OpenFest 2017, който въпреки новото място мина доста по-лесно;
(write-up-а за мрежата му се надявам да го изкарам тая година)
– Основа се “Да, България” (на която съм член);
– Избута се и FOSDEM 2017 (и следва 2018, където даже ще водя звяра);
Ожених се;
– Омъжихме и Яна, и разни други хора (май се събраха три сватби тая година);
– Почнах работа в StorPool (и сега интервюирам повече за админи, отколкото за developer-и, и всеки ден откривам как нещо от света около мен не работи);
– Свършихме някакви неща с лаба, като последното е да си имаме podcast студио (в което може да запишем тая година един лабов такъв);
– С Мариян си взехме половин rack в 3DC и си събрахме техниката на едно място, с наш ASN и връзки. Някой ден трябва да го разпиша по-подробно;
– Организирах/правих/помагах в stream-ването и видеото на поне 10 събития;
– Почина най-малката ми братовчедка.

Имам един файл, който е в git и в който си пиша какво имам да правя (нещо като календар, ама допотопен), и май не съм имал много време да си почивам тая година. Може да се опитам догодина…

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

Saturday, July 1st, 2017

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

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

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

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

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

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-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-13 сватба

Monday, February 13th, 2017

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

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

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

2016-12-31 равносметка

Saturday, December 31st, 2016

И време за стандартната годишна равносметка…

– Ще ставам баща. Това мисля, че за всички е доста изненадващо, даже малко и за Елена :)
– Избутахме OpenFest 2016 – много работа, много неща, като цяло изяде сериозна част от времето ми за годината;
– Имах количество занимания около initLab, който още оцелява;
– Направих няколко BGP workshop-а (и може би скоро трябва да направя още един, докато мога);
– Занимавах се с видеото на FOSDEM 2016, и догодина пак (направили сме бая интересен setup, който се интересува може да види в github);
– В общи линии за да тестваме нещата за FOSDEM ходихме да правим видео/аудио записване и streaming на State of the Map 2016;
– Направих една лекция (на PlovdivConf) и планирах и една на тема теоретична политика, която не можах да довърша (като цяло имам вече поне 5 висящи написани до средата лекции);
– Умря Pieter Hintjens;
– Да не повярва човек, не писах повече тая година…

И да стои и да се вижда, ето списъкът висящи ми лекции:
– “Теоретична политика” (системи за гласуване/взимане на решения, компромиси и т.н.);
– Debug workshop;
– VoIP/asterisk workshop (или цял курс);
– Приложение на принципи от системната администрация в реалния живот;
– Представяне на initLab с много картинки;
– Криптография за журналисти;
– Подкарване и поддръжка на собствен mail server;

Мисля, че имах идея и за още някакви. Един хубав ден мога да допиша поне една-две от тях и да ги кача в блога, че време за говорене не се намира :)
(а много ми се иска да систематизирам нещо по темата системи от хора и други неща, но това няма да стане в следващите една-две години)

2016-06-24 радио-link

Friday, June 24th, 2016

(blog post за разсейване)

Пешо (който организира uzana.io) си взе няколко ubiquiti airmax-а, с които да си пусне net (като разстоянието, което има да покрие е около 12км). За да им направим истински тест, решихме да ги вържем от у нас (Лозенец, близо до водната кула) до у тях (Костинброд), което е около 18км.

Лъчът се оказа достатъчно широк, че да не трябва ултра-точно насочване, и резултатът може да се види в един smokeping, който пуснах да дебне. Има едно прекъсване при донастройване първия ден на вертикалата от Костинбродската страна. Като цяло нощно време загубите са малко, през деня обаче има бая зашумяване по пътя – например НДК е точно по правата линия и техния wifi се чува бая добре с тия антени…
(тия антени чуват наистина много добре, май мога да слушам wifi-та на няколко километра с тях)

Може да се види снимка на гледката от моя покрив. Да, знаем, че сме го закачили на гръмоотвода.

След упражнението се оказа, че аз имам root на router-а на Пешо, та първо най-накрая си подкарах bgp за моя ipv6 вкъщи, после подкарах при него, и накрая ги interconnect-нах през радиовръзката. Сега ако ми спре net-a вкъщи, ще имам поне ipv6 през Костинброд. Наливам пълна таблица и на двете места, сложил съм local preference на пътищата от него да е по-малък (и по същия начин на двата router-а от другата страна моя prefix през неговия link е с по-малък localpref), като цяло съвсем стандартен setup :)

Мога спокойно да кажа, че вкъщи свързаността ми вече е географски подсигурена.

2016-05-15

Saturday, May 14th, 2016

Една от лъжите, които казвам е “от утре почвам да пиша редовно”.

В последните две седмици се случиха куп неща, които в общи линии май трябва да си припомням по логове:
– Довършихме редакцията на видеата от OpenFest 2015, всички са качени в архива и youtube. Най-накрая може да се каже, че имаме събран екип да се занимава с редакцията (което не успя да стане около самия фест);
– Видеата от ТърновоConf 2016 са в pipeline, просто около празниците и наваксването с работа след тях никой няма време;
– В лаба вече има първата co-locate-ната машина (кръстена по някакви извратени причини “pinkiepie”);
– Към автоматизациите в лаба беше добавена поредната тривиална такава, ако някой остави външната врата отворена над 5 минути, Стивън Хокинг звъни на всички телефони да каже да бъде затворена (наложи се поради някои лоши навици на пушачите);
– Пак около това, има приличен шанс да опънем хубава оптика до лаба в следващия месец и да намерим приложение на част от оптичната техника;
– Мина лекцията/workshop за ICS security в лаба, очаквайте записи;
– Силно си изоставам с четенето на книги;
– Взех си rack за вкъщи, за да успея да набутам в него малко техника и да си освободя бюрата. Обмислям да взема и за лаба още един-два с подобна цел (понеже имаме много техника, натрупана на купища);
– Успях да си сменя (почти) навсякъде сертификатите с такива от letsencrypt. Имаше доста гафове, и си мисля, че можех просто да издавам по един сертификат на сървър с всичките имена в него, вместо за всеки vhost неговите си, ще видим дали ще променя метода за в бъдеще. За заинтересуваните – ползвам acme-tiny;
– Човек и добре да живее, debug-ва erlang. Продължавам да не го понасям тоя език.

В плановете за петилетката има да напиша нещо за всичките дребни интересни хакове и неща около лаба и като цяло проектите, с които си играем (какво може да се прави със SDR, странностите с релета и телефонни централи, routing и тунели), да намеря време да си почина, да ида на концерта на Tuber (21.05, в mixtape), да подаря още някакво количество книги (дарих малко на една библиотека, та сега сравнително малко книги стоят по бюрото и масите наоколо). Мисля, че ми трябва и план да не си правя много планове, ама там ще видим:)

2016-04-26 смърт

Tuesday, April 26th, 2016

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

Около един post на Meredith Patterson (който също си заслужава да се прочете) попаднах на “A Protocol for Dying на Pieter Hintjens (за чието име съм сигурен, че не мога да произнеса правилно). Това ми припомни малко моите преживявания около невралгията и болницата и най-вече завещанието, и учудването на разни хора, че изобщо съм обмислял ситуацията и всичките варианти.

Смъртта е донякъде интересна тема, най-вече понеже е едно от нещата, за които се говори най-трудно – по най-различни причини хората сме направени така, че темата да ни блокира по най-различни начини, от простото споменаване, през държанието около болни и умиращи, до трудностите при убиването на хора. Това от своя страна води до това да ни свари тотално неподготвени. Протоколът, описан от Hintjens и идеите на Meredith са в общи линии една стъпка в правилната посока, още един факт от живота, с който трябва да свикнем. Интересно ми е дали следващата голяма кампания из медиите ще бъде на подобна тема (както сега се забелязва с най-накрая сериозното включване на хомосексуалността в повечето сериали/филми/книги, което не може да се забележи в тези от преди 30-40 години).

Може би ни трябва годишен Think/talk about death day?:)

2016-04-22

Friday, April 22nd, 2016

Трябва да пиша по-редовно, да не се получава миш-маш като тоя по-долу.

Както обикновено, ми върви на дебъгване. В последната седмица от по-странните неща се сещам за:
– build на android image (за нещо, правено и писано от (некадърни) китайци);
– Java/groovy;
– Python;
– И нормалното количество VoIP бози.
За да завърша картинката, обмислям да седна да подкарам VAX-а, който виси в initLab.

Тая вечер ходих на концерт на “band H.”, хора, които свирят Tool. Прилично се справиха, въпреки че им куцаше ритъма на моменти (което не е учудващо, Tool са учудващо гадни за свирене).
(по някаква причина в същия ден имаше 3 концерта – band H., Smallman и Irfan, не беше лесен избора)
(random човек ме разпозна на концерта и каза колко се радва на разните проекти като initLab, дето правим)

Седнах да подкарвам най-накрая сертификати от letsencrypt за нещата по marla, и успях да наслагам на половината, преди да ме удари resource limit-а при тях. Следващата седмица ще ги довърша. Разписах нещата с acme-tiny, базирано на нещо, което Петко беше драснал за лаба, оказва се сравнително просто (ако config-а е подреден както трябва) да се parse-ва apache config-а и да се смята какви точно сертификати да се генерират за кого.
(открих кофа неща, които вече не се host-ват при мен и ги почистих)

Събрал съм резултатите от теста на FOSDEM-ската техника (сравнение на запис на stream-а и encode-нат резултат, от нашия и от FOSDEM-ския setup), и като цяло с още малко пипване това може да се окаже достатъчно лесно за по-малки конференции (на които не си влачим 6-7-8 човека от екипа).

На opendata.government.bg тия дни пак качиха нещо интересно (тоя път – целия търговски регистър от 2008ма досега) и пак претовариха нещастната виртуалка (която е един debian в/у microsoft hyper-v). Обмислям някаква магия да може да преживява такива неща по-лесно, щото не се очаква да намалеят интересните данни.

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

И не си спомням нещо друго да ми се е случвало.

2016-01-12 търсене на проби от големия китайски firewall

Tuesday, January 12th, 2016

Добрите хора, дето анализират активните проби на големия китайски firewall са пуснали инструменти за преглеждане на логове – bz2 или директно git clone https://www.bamsoftware.com/git/active-probing.git . Няма лошо да свалите и да тествате дали се намира нещо по вашите логове, ако е много, може да питате researcher-ите дали ще им е полезно :)

За някои типове логове се налага малко пипване, например в grep-garbage-http.py да се пипне regex-а да е

combined_log_re = re.compile(r'^([\w:._-]+) ([\w._-]+) ([\w._-]+|"[\w._-]*") \[(.*) ([+-])(\d\d)(\d\d)\] "(.*)" (\d+) (\d+|-) "(.*)" "(.*)"')

(маха се $ накрая, понеже в моите логове накрая се сипва vhost-а)
За един друг тип логове направих

sed 's/^[a-z0-9:.]* //' 

за да почистя от началото vhost:port (понеже се оказа, че имам и такива)

Равносметка 2015

Thursday, December 31st, 2015

И кратка равносметка на 2015:

– Приключих с първия пас на редактирането на Reverse engineering for beginners, и може да помисля за втори в/у новите неща, които са се появили.
– Правихме пак курс по сигурно програмиране, след който заедно с още няколко неща там вече нищо общо не искам да имам с ФМИ.
– Направих нов не-курс, този път си сглобихме малко ISP, като някаква част от setup-а му остана за net-а на initlab.
– Пуснах ipv6 тунелен брокер за разни хора, дето си нямат ipv6 у тях (и вече някои от тях правят странни топологии :) ).
– Направихме доста събития от турнето;
– Случи се openfest 2015, където с Яна бяхме главните координатори. Не беше леко преживяване, и още не съм си подредил мислите по въпроса. (Видео-записите – скоро).
– Почнах пак работа в securax, като още ме е срам да казвам, че се водя мениджмънт (и за да компенсирам, админствам малко неща).
– Направих една лекция, и написах една друга до средата. Мисля, че трябва да отделя малко повече време в писане.
– Пак не блогвах достатъчно.

(мислех да кача малко снимки, дето съм правил на 32c3, но повечето са на бутилки от whisky workshop-а)

2015-11-14 trade-offs / компромиси

Saturday, November 14th, 2015

(и преди да съм разписал хилядите неща от openfest, нещо, което ми се мотае в главата поне от година, и което Public Choice III ми доизясни)

Нещо много фундаментално в живота (и информатиката) е trade-off-а, или компромисът. Оказва се твърде често срещан, и реално погледнато незаменим като метод за решаване на проблеми. За съжаление ще трябва да дам някаква формална дефиниция, понеже ще ми трябва надолу …

Прост пример за компромис е да имаме някакви пари N и двама човека, A и B. Нека да имаме функция U(P, X), която за P ∈ {A, B} и 0 < X < N може да ни даде някаква “полезност” на свършеното от човека, като целта ни е да максимизираме U(A, X) + U(B, N-X). Безкомпромисните решения са X=N или X=0 (т.е. да дадем всичко само на единия), всичко останало е някакъв компромис м/у тях, за да се получи по-добър резултат.
(моля също така да се консултирате с вица за сферичния кон във вакуум, преди да продължите)

Повечето технически проблеми включват някакъв вид trade-off, за да се решат, дори има стандартен такъв термин, time-memory trade-off за всякакви алгоритми и решения, т.е. принципът, че с повече памет (поне до едно време) може да се спести време. Един сравнително прост пример, който ми хрумва е lookup дали даден IP адрес е блокиран или не – това може да се реализира с:
– прост масив – яде малко памет, търси се линейно и като цяло е бавен;
– хеш – яде повече памет, търси се константно (worst-case – линейно) и е по-бърз;
– дърво – яде още повече памет, търси се логаритмично, и
– bitmap – един масив от 2^26 байта, в който всеки бит отговаря на отделен адрес, който яде много памет и в който lookup-а е константен.

Когато за някой проблем може да се максимизира всичко и да се постигне ситуация “и вълкът сит, и агнето цяло”, техническият термин за решението е “hack” и е любим на всички ни.

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

А хората не харесват компромиси. Явно някъде ни е заложено, че трябва да стане нашето и хората по принцип дърпат в собствената си посока, като отпускането в чуждата рядко се приема като нещо хубаво, като загуба и отстъпление от собствените принципи. Поради това много компромиси не издържат с времето и се налага или да се преразглеждат, или да се разпаднат.
Никак не помага и това, че няма как да се оцени един компромис, като с функцията по-горе. Тия дни във връзка с openfest ми беше зададен (съвсем хипотетичния) въпрос – дали не е по-добре да се направи една лекция, която е много полезна и информативна, за 50 човека, отколкото една по-малко информативна (с базови неща и т.н.) за 1000 човека. На такъв въпрос смислен отговор няма, начинът да се разбере е да се проведат, да се направи изследване след това м/у хората по някакъв начин (например колко пари биха дали за една такава лекция), да се сумират нещата, да се сравнят, и после да осъзнаем, че принципът на икономистите не води до особено смислени неща и да зарежем упражнението.

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

Та, накратко, life sucks, and then you die. Единственото смислено нещо, което виждам да може да се направи е да се мисли метод, който без да обижда хората да може да оценява компромисите и да може да се смята как точно да се направи един компромис. От друга страна, не мисля, че е особено възможно и се надявам някой да покаже, че не съм прав :)

2015-10-18

Sunday, October 18th, 2015

Опрях до там да имам един текстов файл с какво имам да върша всеки ден, че да мога да си следя всичките задачи. Явно ще трябва в него да слагам и “блогни” от време на време.
(знам, че някакви хора ползват модерни работи като календари, обаче за мен един файл в git, комбиниран с vim, който commit-ва на всеки save се оказва перфектното решение)

Занимавам се с всякакви скучни работи:
– Оправям хартии по фондацията, например писмо до ДАНС, че няма да перем пари и финансираме тероризма (вече не се учудвам какви глупости изисква държавата;
– Разни хора правят мрежата на OpenFest, а аз рисувам картинките;
– Случва ми се да спя;
– Пиша правила за очаквания co-location на initLab (който ще се случва, има само дребни подробности за дооправяне).

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

От по-интересните неща:
– направих банички (за Снежи), след като не ми се беше случвало едно 12-13 години. Станаха прилично :)
– подредихме и направихме по-прилично мрежата на лаба, с Пешо и Марио, та сме на малко от заветната цел да навържем и лампите отвън да се контролират автоматично и да не трябва да се притесняват хората от тъмната уличка;

И за да пропусна групата “ужасни неща”, няма да говоря по работа :)