Posts Tagged ‘идеи’

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-а (за който много хора ми натякват), ще е с проблеми, с които и аз не съм запознат, да е наистина забавно …

2013-06-28 околопротестовско

Thursday, June 27th, 2013

Наваксвам с работата (чакам да се преналеят едни бази) и реших да блогна това, че ми се мотае тия дни в главата.

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

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

Да се изнесем. Не говоря само за себе си, говоря за осигуряване на възможност/service за всички, които желаят да могат ЛЕСНО да пренесат себе си, семействата си и работата си другаде, даже може би заедно.
Знам за поне една фирма, която така хората се събраха и се изнесоха заедно с бизнеса си в Испания – можем да създадем подобен вариант за големите и малки софтуерни и подобни фирми, които има тук. Ако съществува работеща схема, то ще може включително и да се издърпват по-свестните млади кадри натам, а те – семействата си и т.н.

Целта е най-вече “sending a message”. Чрез изнасянето на 100к хора има приличен шанс икономиката да се зачуди откъде и идва. Това би бил наистина усещащият се протест – просто нашите данъци няма да ходят в бюджета. Не знам дали всеки народ си заслужава управляващите, но си мисля, че и държавата поне донякъде трябва да си заслужи хората.

2013-04-07 PA

Sunday, April 7th, 2013

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

От някакво време ми се иска да имам скриптиране в реалния живот. Има количество скучни действия, които мога да опиша по някакъв начин, но или ме мързи да ги правя, или нямам как. Малко примери:
– тия дни помолих Данчо да ми напазарува храна, щото аз не можех да се покажа на светло от болки в главата;
– за записите от rogueconf мога да обясня какво трябва да се пипне по звука, но ми е болезнено да се занимавам (а като не ме болеше, ме мързеше);
– пак за rogue ми трябваха mini-dv касетки, а имах друга работа и успях да подредя нещата да ги взема по пътя към вкъщи;
– по същата причина – събиране на багаж за някъде;
– има от време на време да се отговаря на тривиални mail-ове, за което обаче скриптирането не върши особено добра работа;
– поддържане на TODO списъци и календари (с което аз се справям много зле).

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

Та вариантът, до който се стигна беше personal assistant. Даже може да бъде споделен(а) м/у двама/трима човека, и да поддържа базови неща като календари и todo листи и да върши някакви странични дейности. Може даже да има образователен момент (който трябва да измисля по-добре).

Идеята много напомня на “Gentleman’s gentlemen” от едно време от Англия, и се чудя дали има смисъл/приложение при нас, и дали не се опитвам да преборя някакъв симптом, вместо генералния проблем. Може би трябва да ми е ок да се занимавам с всичките странични дейности, знам ли…

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

Някакви мисли и мнения по въпроса?

2013-01-22 блоговден

Tuesday, January 22nd, 2013

За поредна година си пропускам рождения ден на блога (14.01). Голям да порастне и т.н., и много нови весели заглавия да му измислям.

(става на 8 години, ехеее…)
Update: става на 9, всъщност, аз забравих коя година сме.

И понеже не може толкова празен post, нека да споделя идея за филм (съвсем кратка), която дъвкахме тия дни в irc.

Ще се казва “Манастирът Ляо-лин”. Ще става въпрос за манастир в Люлин, в който се тренират бойни изкуства (може и да е мол), и ще бъде нападнат от зли перничани, размахващи винкели и яздещи голфове. От това ако не може да се направи два часа солиден екшън с много бой, кръв и т.н., не знам от какво може.
Може като сюжет да се каже, че Ляо-лин е последната преграда м/у нашествениците и София.
Сигурно може да се включи и любовна история, за някаква избягала девойка от Перник в Люлин, щото там я биели недостатъчно…
…. и накрая манастирът аха-аха да падне, и ще пристигне Бойко на черен джип и ще ги спаси.

2012-05-27 поредната курсова идея

Sunday, May 27th, 2012

(вече в трезво състояние) Ето я поредната идея за курс – този път мисля да го правя с Кънев (който до тук изглежда навит за идеята).

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

Екипите ще имат програмисти, админи, може някой друг дизайнер и т.н..

Системата представлява следното – имаме задачата да следим за глобалното затопляне (или глобалната климатична промяна и т.н.), като за целта имаме 150 места, на които имаме по два сензора, всеки от които е на различен отбор. Сензорите представляват малки PC-та (реално малки виртуални машини), на които отборът трябва да си подкара някаква OS и някакъв софтуер, който да чете данните и да ги праща веднъж на минута. Имаме по една агрегираща машина на отбор, която трябва да събира тия данни (някаква база).
Между агрегиращата машина и сензорите има мрежа, която трябва да се настрои и подкара, за да докара максимална отказоустойчивост. Отделни части от мрежата са на различни отбори.
Също така трите отбора имат по един front-end, който трябва да използват за визуализация и обработка на данните, например да намират корелация между данните от различни източници. Front-end-овете трябва да могат да работят по някакъв начин с всички агрегатори, ако основният им е отпаднал.
Има и различни весели неща, като например да се следи за загуба на данни и агрегаторите да си синхронизират базите по някакъв начин, така че да се добие пълна картина.

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

Целта на целия курс е да се научат хората на няколко неща:
1) работа в екип
2) работа с други екипи
3) работа над чужд код
4) дизайн на система с всичките протоколи и компоненти
5) да видят накрая нещо наистина работещо (т.е. да подобрим заданието до толкова, че да е използваемо от други хора)

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

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

Остава въпросът дали ще се намерят желаещи да участват.

2011-06-23 филтър

Thursday, June 23rd, 2011

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

Имаше едно старо интервю с Умберто Еко, който обясняваше защо не ползва Internet и колко разсейващо било. Много хора (освен мен) са се оплаквали от огромното количество шум и че като цяло средата не предразполага към задълбочен research. Също така, стилът на писане из мрежата не е тръгнал да се подобрява…
(например снощи Кънев разказваше как някой започнал да вмъква в release notes на ruby (или rails) неща от типа на “kthxbye”, “lol omg” и т.н.)

Та си мисля, че ми трябва генерален филтър за съдържание, по възможност умен такъв, който може да бъде учен и настройван. Като отправна точка мога да покажа twitter-ския ми филтър, който реже по hashtag-ове, които ме дразнят и върши още няколко други дейности (като например resolve-ване на съкратени URL-та). Ето един кратък списък от feature-и, които ми се иска да имам, докато чета нещо из web-а:
1) почистване и нормализиране на текста. Никакъв l33tsp34k, изрази като “zomg” и подобни, само кратко отбелязване по не-натрапващ се начин, че нещо е поправено
2) маркиране на текст с голямо съдържание на buzzwords, т.е. нещо като стандартния bullshit detector, който всеки от нас носи в главата си – да намалява/отбелязва тия парчета от текста.
3) adblock (то вече си има хубав такъв, но не пречи да се вкара в тоя филтър)
4) лесно търсене на информация за някакъв факт, през някаква семантична търсачка – т.е. да мога да хвана едно изречение и да кажа “от покажи ми това кой твърди, че е вярно и кой – че не е”. Възможност да отбележа моето мнение и да ми отбелязва след това.
(например – “Хората са интроверти” и филтъра след това да добави “[25% от тях]”, или пък “(.*) е най-великата операционна система” [глупост])
4.1) възможност лесно да могат да се преглеждат тия факти и да се променят при нужда
4.2) история кои факти къде се срещат
4.3) способност да различава кога едно и също нещо е казано по два различни начина (може и с малко моя помощ), за да може разпознава фактите
5) транскрибиране на видео към текст. Това знам, че е малко вероятно да се случи в следващите 10на години, но все пак би било прекрасно, ако имаше начин да не гледам всичките talk-ове, към които ми пращат link-ове, а да мога да си ги чета спокойно.

(Цялото е в общи линии част от идеята ми за “генералния adblock” – очила, с които мога да ходя и да не ми показват например афишите с партийни агитации, рекламите на д-р Енчев и рекламите като цяло)

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

2008-12-19 update протокол

Friday, December 19th, 2008

На рождения ден на Венски с Бачийски почнахме интересен разговор за масов update на вече deploy-нат софтуер (писан на скриптов език, но май няма чак такова значение). Той искаше да смъкне времето за deployment под текущите 45 секунди, и мисля да опиша една от идеите, които ми хрумна, а после Пенчев (който участваше в дискусията) да и намира кусури.

Основният принцип е следният – един сървър пуска по multicast пакети с update (във вид на diff например), а машините го поемат и слагат. Ето и принципно как би трябвало да работи протокола:

1. Главният сървър пуска към multicast групата един пакет, че следва update.
2. Изчаква timeout T1 и ако някой не отговори (той има списък с машините) праща пак.
3. Стъпка 2 се повтаря 3 пъти, ако има не-отговорила машина, се вади от списъка и се праща notification.
4. Изпраща се update, разделен на пакети, като всеки пакет:
4.1. Съдържа ID на update (пореден), като всеки клиент има списък с updates които е получил
4.2. Номер на пакета в update (за да се следи за загуби)
4.3. Подпис на пакета (md5sum на съдържанието + shared secret)
4.4. Diff в някакъв вид.
5. Всеки клиент, получил update:
5.1. Проверява дали вече не го е apply-нал, и ако да, не му обръща внимание, само праща обратно потвърждение
5.2. Ако има дупки в него, не праща потвърждение.
5.3. Ако update не е пореден на предишния приложен, не праща потвърждение и известява администраторите.
5.4. Ако е получил целия update, проверява дали може да бъде приложен. Ако не – праща известяване и не потвърждава.
5.5. Ако е получил целия update без проблеми и може да се приложи – прилага го, отбелязва, че е приложен и праща потвърждение.
6. Ако централният сървър за timeout T2 не получи потвърждение от всички, повтаря т.4 три пъти. За тези, от които не е получил потвърждение, известява администраторите.

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

малко бележки

Tuesday, March 11th, 2008

Малко бележки, да не ги забравя за утре.

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

Две кафета се неутрализират добре от три бири.
(Не бях се наспал сутринта. Не съжалявам за причината да не се наспя де …)

Корелатор за log-овете от няколко nagios-а може да се напише доста лесно – трябваше ми да повървя малко на въздух само, да измисля някакъв приличен вариант. В общи линии описване в база с начало и край на състояние на услуга от определено място заедно с отделно описание на състояние на мястото спрямо останалите и така смятане на неговата тежест – не би трябвало да е особено сложно да се напише с малко скриптиране и SQL.

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

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