Posts Tagged ‘initLab’

2012-08-18

Saturday, August 18th, 2012

Докато вися на палачинките при Кънев, няклко кратки неща.

Продължават да се качват записите за курса по микроелектроника.

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

Тия дни release-наха MusOpen DVD-то със записи на изпълнения на класическа музика под отворен лиценз, съответно имам с какво да направя хубав фон на постоянно висящото излъчване на stream-а на лаба, та като събера желание ще пусна да върви нещо там.

2012-08-16 записи/streaming на курса по микроелектроника в initLab

Thursday, August 16th, 2012

За летния курс по микроелектроника в initLab – записите могат да се видя в wiki-то на va.ludost.net или направо в директорията там, за момента е качена уводната лекция от вторник. Stream-а ще е достъпен на http://stream.ludost.net/lab.ts (оправих в общи линии проблема и няма нужда да се дописва и порта).

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

2012-08-12 VarnaConf

Sunday, August 12th, 2012

Вчера беше VarnaConf.

Като увод, защо се случи цялото нещо – Радослав Станков (Радо) и още някой разбрали, че ще се засекат във Варна, мислили какви лекции да направят в локалния hackerspace, след което решили, че няма лошо да направят една конференция, Радо пуснал няколко mail-а до университетите някой дали има свободна зала и от Варненския свободен отговорили. В началото бяха 4 лектора, после в един момент 11, питаха ме и мен дали искам да правя записа и streaming-а, и така за две седмици се случи цялото нещо.
(Радо може да му хрумне да напише нещо по-подробно по въпроса, ако реши да върне блога си от мъртвите)

Аз пристигнах в четвъртък във Варна с Жоро Митев, като преди това бях пратил кашона с техниката по куриери. Видяхме локалния hackerspace (Varnalab), където вечерта Кънев изнесе 3 часа лекция за vim, видяхме се с локалните хора и изобщо си изкарахме весело.

В петък отидохме до Варненския Свободен Университет, за да разположим техниката и да видим залата (за която преди това Радо ми беше пратил малко снимки), което направихме за час-два (за какво можеше да стане по-добре – след малко). Последва мотаене, ядене, пиене и пак лекция във VarnaLab за увод в Ruby (пак от Кънев – после аз съм обичал да говоря много :) ).

Самата конференция беше много добра. Започнахме с 20тина минути закъснение (Радо закъсня, трудно ми е да му го простя, щото е спал повече от мен), но всичко си работеше и с много усилия успяхме горе-долу да спазим половината график. Имаше 80-100 човека (очакванията на всички бяха за 2-3 пъти по-малко), съответно има сериозен шанс това да стане редовно ежегодно събитие.

От лекциите си спомням следното:

Радо направи много хубава лекция за как добре да пишем и ремонтираме код;
Стефан (Кънев) изнесе стандартния си вид представление/лекция (имаме голям късмет, че не е религиозен лидер), която по броя slide-ове и информация в тях трябваше да е около час и половина, а той имаше по програма половин час;
Митьо (Димитър Димитров) говори за Ruby on Rails, като за разлика от Кънев имаше slide-ове и информация за 3 часа;
Андрей Радев показа “Как да превземем света с vim” и надмина показаното от Стефан в четвъртък. Накрая обясняваше как човек може да си направи с vim не само собствен lightsaber, но и lightsaber chainsaw, или дори lightsaber chainsaw nunchaku (с което съм напълно съгласен). Демонстрацията му в рамките на 10 минути на няколкото модула/скрипта, които той сам си е писал мисля, че напълно шашна публиката;
Калин Чернев говори за hackerspace-ове;
Аз мрънках от програмисти (презентацията ми в pdf или odp), вероятно ще разпиша цялата си лекция като blog post в идните дни;
И Христо Дешев разказа за полифазното спане, или как да спим по-малко, като спим да речем по половин час на всеки 4 или различни други варианти.
(имаше още две лекции, но бях доста отнесен/зает, за да ги слушам)

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

Последва after-party в някаква пицария – хапнахме, пийнахме, говорихме, говорихме, говорихме на хиляди теми, след което аз се прибрах да спя, и след няколко часа трябва да се метна на автобуса и да се прибера в София.

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

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

А догодина може да е два дни, или с два потока, да има повече хора (не се засякохме с летния ученически лагер на БАН, където ходят учениците, класирали се по олимпиадите по информатика и информационни технологии, и на тях щеше да им е интересно) и да не почваме в ранната сутрин (т.е. 9:20) :) (разбира се, като запазим колко лесна беше организацията :) )

(а в моя pipeline вече са два post-а – как се прави streaming/запис/encoding/рязане, и онова мрънкане за програмистите, някой ден ще ги напиша)

Threaded tee

Saturday, July 21st, 2012

Понеже не намерих нещо такова (след малко търсене) преправих един стар source да прави нещо като unix-кото tee, но thread-нато и без да пише на stdout. Трябваше ми, за да мога да записвам изхода на dvgrab и едновременно с това да го пращам към vlc, което да го stream-ва навън.

Може да се свали от /progs/ttee-0.1.tgz. Има някакви остатъци от старата задачка вътре (която беше нещо такова, само че с четене от unix domain datagram socket и само един output, в mysql), ако някой много много много държи, може да си го качи някъде в github, само да каже да сипя вътре в архива, че е public domain като лиценз.
(а по някое време мисля да напиша подробно за как stream-ваме и записваме в initLab)

Update: Оправена версия – /progs/ttee-0.2.tgz, с нормален ring buffer и с малко git history вътре.
Update 2: Работеща версия – /progs/ttee-0.3.tgz, оправени няколко бъга, които водеха до загуба на данни.
(решението ми хрумна в 4:30 сутринта и вместо да спя, patch-вах)

2012-07-18 лекция “Дребен пример от разпределеното програмиране”

Wednesday, July 18th, 2012

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

Отделно ето я и самата презентация.

Става въпрос за тип задача, която не намерих в design patterns, и за която има различни парчета софтуер, които правят нещо подобно (rabbitmq, gearman). Основната причина да се пише от нулата, вместо да се ползва нещо готово е, че се интегрира много по-добре в съществуващата система и така е доста по-просто, отколкото да се добавя още някакво парче код.
(и е интересна задача :) ).
Имам в практиката си три реализации, като това, което показвам прилича най-вече на една от тях, система за encode-ване в няколко формата на видео. Имаме много сървъри, които се занимават с encode-ването (cli.*) и които си взимат задачи от централен диспечер (srv.*), който има някакъв вариант да пази persistent state (в моя случай – база данни). Задачите са индемпотентни, т.е. могат да бъдат изпълнени повече от един път, ако се наложи.

Езикът, който съм ползвал в примерите е в общи линии псевдокод, който прилича на смесица от perl и php. Странните неща в него са, че има мнoжествено връщане (т.е. конструкция от типа $a, $b = f()) и че respond в srv.* връща отговор на клиента и излиза, т.е. прилича малко на return. man pages описват семантиката на fork и wait.

Начален вариант на решението би бил с този диспечер и този клиент.

Първият проблем, който се вижда е, че ако сървърът не успее да свърши задачата, няма как да го съобщи на диспечера. Това лесно се коригира с добавяне още на един тип заявка към диспечера:
Версия 1: диспечер и diff от предишната версия, клиент и diff от предишната версия.

Вторият проблем е какво става, ако заявим, че искаме задача, диспечера ни я задели, но не получим отговора? Ако нямаме обработка на този случай, в такива ситуации ще се натрупват задачи, които се водят, че се обработват и реално никой не ги е взел. Решението, до което аз стигнах е да добавя на всеки сървър transaction id и при заделяне на задача диспечерът да отбелязва сървъра и transaction id. Ако клиентската част подаде заявка за нова задача и не получи отговор, трябва специално да подаде обратно заявка за “cancel”, за да сме сигурни, че неполучената задача е върната в pool-а на свободните задачи.
Версия 2: диспечер и diff от предишната версия, клиент и diff от предишната версия.

Третият проблем е рестартирането на някой от сървърите, които обработват задачи – например поради спрял ток. Когато той се стартира отново, според диспечера ще има няколко задачи, които той обработва и за които той не знае. Решението е просто – добавя се тип заявка, която се подава при рестарт и почиства работещите задачи за даден сървър.
Версия 3: диспечер и diff от предишната версия, клиент и diff от предишната версия.

Четвъртият проблем (който би трябвало да е един от първите) е колко често и кога да се опитваме да повторим заявка към сървъра. Всяка заявка, която може да подадем може да стигне, но може и да не стигне до сървъра, или ако стигне, нямаме гаранция, че ще получим отговор. Съответно трябва да добавим към srv_request() в клиентската част логика колко пъти и как да опитва – само веднъж, много пъти или безкрайно. Заявяването на задача трябва да се изпълнява точно един път, останалите неща – докато се получи отговор.
(от “много пъти” смисъл в повечето случаи няма и би трябвало да го махна от кода)
Друг проблем, който се вижда доста бързо е, че ни трябва нещо от типа на exponential backoff, за да разредим честотата на опити от страна на сървърите към диспечера. Това се прави, за да се избегне ситуация от която след restart изведнъж се изсипват твърде много заявки в/у диспечера и има шанс да го претоварят. Същото нещо може да се види и в доста мрежови протоколи, например TCP.
Версия 4: клиент и diff от предишната версия.

Петият проблем е да ограничим колко товарим себе си (и донякъде сървъра), като ограничим броя задачи, които изпълняваме. Прави се сравнително просто, с брояч на вървящите в момента child процеси.
Версия 5: клиент и diff от предишната версия.

Шестата версия е основно дописване и доподреждане на кода, с оправяне на няколко проблема, които само ми хрумнаха и не съм виждал на живо. Едното нещо е валидация на state на определена задача, другото е един race condition м/у fetch и cancel (който по принцип не трябва да може да се случи).
Версия 6: диспечер и diff от предишната версия.

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

– да връщаме на всеки сървър колко да изчака, преди пак да пита за задача, като метод за flow control.
– job timeout/job restart – да решаваме по някакъв начин кога да рестартираме определена задача (понеже е възможно сървърът и да е умрял и да не се е върнал повече). Това не пасва добре в текущия код, т.е. трябва да се напише отделен компонент, който се вика периодично или работи като демон при диспечера, който да изпълнява тази функционалност, а самата логика за това зависи твърде много от контекста.
– Log на всички събития – животоспасяващ при всякакво дебъгване.
– Monitoring и аларми при различни състояния, дефинирани като проблемни (твърде много чакащи задачи, твърде много обработвани и т.н.) – пак трябва да е в отделен от тези два компонента.

2012-07-12 пак лекция

Thursday, July 12th, 2012

Ще водя още една лекция в initLab във вторник (17.06) от 19:30. Пак ще се stream-ва на http://tyler.ludost.net:8787/lab.ts и пак през irc ще могат да се задават въпроси.

2012-07-07 книжната лекция в initLab

Saturday, July 7th, 2012

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

Първоначалният списък:
(link-овете са към goodreads, от там може да се ориентирате лесно)

За писането: Мемоари на занаята на Стивън Кинг, заедно с Правопис и пунктуация на българския език (издателство на БАН).

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

Shooting an Elephant на Джордж Оруел.

Събрани есета. Показват колко добре умее да пише Оруел, съдържат класическото му (и цитирано от всички) есе за как се пише, както и много неща за истинския журнализъм, езика и истината. Няколко цитата:
“Political language is designed to make lies sound truthful and murder respectable, and to give an appearance of solidity to pure wind. ”
“The greatest enemy of clear language is insincerity.”
“Journalism is printing what someone else does not want printed: everything else is public relations.”

Дзен и изкуството да се поддържа мотоциклет на Робърт М. Пърсиг.

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

The Invisible Gorilla and Other Ways Our Intuition Deceives Us на Christopher Chabris и Daniel Simons

Книгата, която ме накара най-накрая да направя подобна лекция. Описва колко много грешим и се лъжем сами. Понеже ме мързи, подробности има в ревюто ми (или може някой път да напиша цял post).

The Psychopath Test на Jon Ronson

От нея се запалих да чета неща по тема психиатрия.

Liars and Outliers на Bruce Schneier

“Приложение на теория на игрите за обществото”

Промиване на мозъци – психологията на тоталитаризма на Робърт Лифтън

Вече съм писал за нея

Masters of Doom на David Kushner

Историята на хората, направили id Software. Който не знае кой е John Carmack определено трябва да я прочете.

Kingpin: How One Hacker Took Over the Billion-Dollar Cybercrime Undergroundна Kevin Poulsen

Историята на Iceman (една от големите фигури в credit card fraud средите).

Better: A Surgeon’s Notes on Performance на Atul Gawande

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

Две книги, които не бяха в списъка:

Sex at dawn: The Prehistoric Origins of Modern Sexuality на Christopher Ryan, Cacilda Jethá

Основно еволюционна биология. Да цитирам Voland, “не е задължително да сте съгласни, но трябва да я прочетете”.

Blindsight на Peter Watts

Заради тази книга прочетох “The invisible gorilla” и още няколко книги. Едно от най-най-добрите неща в твърдата фантастика в последните години, вече и съм писал за нея. Книгата е под creative commons лиценз и всеки лесно може да намери откъде да я свали за каквото устройство иска.

Самата лекция мина средно добре. Дрънках два часа, като можеше вероятно да се събера в един, но се получи доста интересна дискусия. Също така се получи хората да гледат отдалечено streaming-а и да задават въпроси през irc. Записът се encode-ва и ще пусна link като е готов.

Има още много книги, за които бих говорил (някои от тях споменах). Може и да се направи дискусия върху връзките между тях, например цялостна дискусия за social engineering-а и защитата от него в светлината на “The Invisible Gorilla”, “Ghost in the Wires” (автобиографията на Кевин Митник), “Liars and Outliers”, “Kingpin” и още каквото се сетим…

Какво мислите за лекция за книги по следната тематика:
“компютърно-историческа” (като “Kingpin” и “Masters of Doom”)
“твърда фантастика” (“Blindsight”)
“Neal Stephenson”
или просто пак такава мешаница от теми?

Update: на streaming-а е имало в пиковия момент 15 човека. Изглежда има достатъчно интерес да се прави пак :)

Update 2: Запис.

Update 3: Списък с всички книги, за които бих говорил по темата, по идея на Ники Бачийски.

2012-07-03 книжна лекция

Tuesday, July 3rd, 2012

От 14:30 в събота (7 юли) в initLab ще направя лекция по темата “10 не-техническо-компютърджийски книги, интересни за компютърджии” (още работя по заглавието).
(часът е избран така че всички да са станали, които го правят – обядвали и да е преди концертите)

Спрямо четенето има различни групи хора.

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

Лекцията ще се излъчва на http://tyler.ludost.net:8787/lab.ts , ще има запис на va.ludost.net. Вероятно ще блогна казаното на лекцията след това.
Ако някой иска да задава въпроси, но няма да присъства на място – в irc на marla.ludost.net ще има канал #initlab и се надявам да намеря кой да стои там и да ми предава въпросите.

2012-06-06 Лекция за hackerspace-овете в initLab

Wednesday, June 6th, 2012

В петък, 8ми юни от 19:00 в initLab ще има лекция на Larry Maloney, представител на HackerDojo по темата за hackerspace-овете, тяхното развитие и те какво са научили, докато са правили HackerDojo.

Лекцията ще е на английски, има някакъв шанс да я запишем и качим.

Update: Може да се гледа на http://tyler.ludost.net:8787/lab.ts
Update 2: Има и запис на лекцията. Би трябвало да има и още един, от един фотоапарат, ще кача и него като го обработя.

2012-05-13 post-mortem на не-курса, в initLab

Sunday, May 13th, 2012

Стана време да направя една лекция в initLab за не-курса по системна администрация и дискусия, за какво би трябвало да има в следващия такъв. Ще се проведе от 16:00 в неделя (20 май).

2012-05-05 почистване в initLab

Saturday, May 5th, 2012

Пак съм забравил да пиша.

Поне днешния ден става за описване – почиствахме и оправяхме новата част на initLab, един апартамент в същата сграда, който ще се ползва за тих co-working space. Мястото е малко по-широко от самия lab, с три стаи и изглежда съвсем прилично след чистенето.

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

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

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

2011-12-23 прожектиране на 28c3

Friday, December 23rd, 2011

Организираме прожектиране на лекциите от 28c3 в initLab, от 27ми до 30ти декември. Имаме предварителен списък какво мислим да гледаме и поне две стаи, в които да прожектираме (може да ползваме и третата).

(почти са ни одобрили регистрацията за гарантиран bandwidth, така че не трябва да има проблеми)

2011-11-20 разни + курс

Sunday, November 20th, 2011

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

От последните неща, които съм чел май най-добре ми дойде “11/22/66” на Стивън Кинг. Дядката определено си е припомнил как да пише. Имаше и други приятни неща, който иска може да ги погледне в goodreads.
(специално трябва да обърна внимание на “Hackers – heroes of the computer revolution”, че не струва и че мижавите опити на журналиста да разбере хората са чак жалки)
(също така “Snuff” на Пратчет беше супер и надеждата е това да не е последната му книга)

Около initlab има разни дребни забавления, например централизиран начин всеки да може да пуска музика от cassie (с малко patch-нат MOC), както и възможност вече да се stream-ват/записват лекциите – днес подредихме микрофона и звуковата карта, може да се ползват директно за конференция (правихме си тест с VarnaLab), или да се stream-ва (преди малко инсталирах icecast на sandbox.initlab.org, url-то ще е http://sandbox.initlab.org:8000/lab.ogg ). Тестовете ги правихме и с Бацов и Цветомила, докато водеха днес началната лекция на курса по Java.
(окабеляването беше забавно)
(пак около lab-а, Мартин след един тежък запой най-накрая реши да блогва)

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

2011-08-22

Monday, August 22nd, 2011

Днес беше ден за първи проблем около подкарването на ipv6 в лаба. Проявяваше се в забавяне на зареждането на сайтове за първи път. Оказа се комбинация от странни локални конфигурации и dns…

По принцип при http request към сайт, за който не се знае какво му е IP-то, стандартно се прави AAAA request, ако той върне грешка, се прави А request. Така забавянето е горе-долу едно RTT (м/у клиента и dns сървъра), което не се забелязва. Обаче, ако имате конфигуриран локален domain (който се казва само ‘local’) и в /etc/resolv.conf имате ‘search’ за него, или (като в нашия случай) hostname, което е ‘hostname.local’, то между предните две стъпки има и още една, да се опита да намери AAAA запис за www.site.com.local. Това пак не би трябвало да е такъв проблем, ако имаше някакъв nameserver, който бързо да отговори, че няма такова нещо, но в случая такъв няма и за всяко такова нещо се ходи до root server-ите, което от своя страна води до няколко-секундни забавяния.

Решението беше просто – махане на ‘search local’ от resolv.conf и оправяне на hostname (което по принцип не би трябвало да съдържа ‘.’, на теория има domainname с тая цел).

Подкарах още нещо забавно, да се tweet-ва, когато някой отвори вратата и да пише кой, ако човекът е казал, че може (т.е. ако има mapping м/у номера му и twitter username. Дразнещо лесно се оказа – подаване на номера, нормализация (s/^0*//;s/^1359//;s/^359//), един grep в текстов файл и едно викане на twidge.

(днес имаше проблем с jabber-а на ludost.net с invalid dialback key, който се оправи при рестартиране на ejabberd-тата на двете машини. Обмислям инструментариум за debug-ване на тия проблеми за в бъдеще…)

2011-08-21

Sunday, August 21st, 2011

И малко технически неща.

Вчера подкарахме ipv6 в initlab с тунел през Hurricane electric. Имат приятна функционалност, например делегиране на reverse DNS за адресите. Вече може да се стига до cassie по v6, има AAAA запис.
Целта на упражнението беше в общи линии да се пробва как работи. Следва да се види колко security и други проблема ще бъдат открити. Доколкото разбрах, преди е имало такова нещо, но след като са сменили малко хардуер, не е било пуснато пак. На нас ни се наложи за малко да ритнем router-а там (един неприятен airport extreme), защото никой не му помнеше паролата, но иначе подкарването се оказа сравнително лесно. Един ден ще го сменим…
(reverse DNS зоните на v6 са творение на сатаната – 8.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.7.a.c.1.5.1.f.1.0.7.4.0.1.0.0.2.ip6.arpa. )

Вкарах и втората си машина в pool.ntp.org и пуснах малко статистика за ползването им (marla и tyler). Гледам, че evolink announce-ват някакви v6 адреси, може да добавя marla с такъв адрес в pool-а по някое време (предпочитам да не го правя с тунел, ntp-то е доста чувствително към латентност).

Един приятел днес ми прати следния линк с DoS в apache2 – накратко, ако се направи един request към вас с range request, който да е достатъчно голям (в случая – списък от парчета 5-9,5-13,5-17 и т.н.) и имате mod_deflate, то apache ще се опита да го сглоби и компресира, съответно ще изяде невероятно количество памет и може да срине машината. Оказа се, че на 64bit-ов debian дори махането на модула не помогна особено и в момента ползвам един крив workaround, LimitRequestFieldSize с ниска стойност, за да не могат да минават подобни заявки. При другите две неща, при които тествах (32bit debian и 64bit gentoo) проблемът си заминава с махването на модула.
(понякога се налага да се пипне заявката в примерния exploit да сочи към статичен файл, с динамични не става)
Писах на разни хора, които би трябвало да имат интерес от тия проблеми, те би трябвало да открият аз какво съм пропуснал и защо точно тоя debian-ски apache2 продължава да се чупи.
Update: Получих следното като друго временно решение (което основно бори конкретния PoC exploit, не решава генерално проблема. Може обаче па да се ban-нат генерално range request-ите…):

iptables -N KILLAPACHE
iptables -F KILLAPACHE
iptables -A KILLAPACHE -m limit --limit 1/min -j LOG --log-prefix "killapache: " --log-level 7
iptables -A KILLAPACHE -j DROP
iptables -I INPUT -p tcp --dport 80 -m string --algo kmp --from 58 --string "Range:bytes=0-" -j KILLAPACHE

Update:Официална информация по въпроса.

(и за тези, на които гадостите от по-горе не стигат – 20110819, 20110820 и 20110821)

2011-08-08 гледане на лекциите от CCC Camp – 2011

Monday, August 8th, 2011

От сряда до неделя (10-14ти август) организирам гледане на живите предавания от CCC Camp 2011 в initLab. Програмата е доста интересна, в страницата на самия lab има страничка с какво ще гледаме първия ден, за следващите ще се публикува на сайта какво ще гледаме (и се приемат предложения).

2011-06-28 два проекта от лаба

Tuesday, June 28th, 2011

Преборвайки някаква част от мързела си, ето малко проекти, свършени в initlab:

1) Отваряне на врата

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

Проблемите бяха два – трябваше да се звъни на някой на телефона и да бъде разкарван да отваря. Да мацнем още един звънец долу по някакъв хардуерен начин щеше да е крив естетически, за това мислите тръгнаха в посока да го направим пак с позвъняване. Най-лесният начин (който го каза Велин) беше да се намери една предплатена карта и стар gsm, който да има лампичка, която известява за позвъняване, и с нея да се задейства реле, което да “натиска” копчето за отваряне. Нямахме такъв телефон и не беше толкова интересно, за това решението в момента е следното:

Едни добри хора взимат телефония от spnet, и там са ми заделили един телефонен номер, +35924624356, който влиза на един asterisk. Към него е закачен asterisk, който работи на cassie.ludost.net (която се намира в initlab), която поема директно обажданията към тоя номер, затваря веднага, и пуска локално една програмка, която прави в общи линии следното:

sfd=open("/dev/ttyS1",O_RDWR | O_NOCTTY | O_NONBLOCK);
tcgetattr(sfd, &t);
t.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
t.c_cflag |= CLOCAL | CREAD;
tcsetattr(sfd, TCSANOW, &t);
ioctl(sfd,TIOCMGET,&flags);
flags= flags | TIOCM_RTS;
ioctl(sfd,TIOCMSET,&flags);
ioctl(sfd,TIOCMGET,&flags);
sleep(6);
close(sfd);

(или накратко, вдига RTS флага на втория сериен порт за 6 секунди и после го затваря)

На тоя сериен порт е закачена една проста схемичка на хората от НеоМонтана (която ми даде Мишо от Elwix), която като види, че и е вдигнат сигнал на тоя pin, закъсява едно реле, което от своя страна е вързано към бутона за отваряне на вратата. Самата схема се храни по 12 волта директно от сървърчето (и май е завързана за него със свинска опашка, не си спомням).
(и да, понеже ще ми го напомнят в коментарите, първоначалната идея беше да го правя с usb-to-serial, щото не бях сигурен, че машинката има изобщо (нямаше изведени), но го опуках, понеже обърках + и – на входа на захранването на платката)

2) Кой е в лаба
Това по принцип трябваше да го пише Стефан, ама го домързя. Идеята беше да може да се види кой в момента е в лаба, за да може (например) да му се обади да му отвори вратата (или просто да се види с него), като идеята е opt-in – който иска си казва кой му е mac адреса, и го дописваме в една база.

Адресите се вадят от локалния (гаден) router, един airport extreme, по snmp, със следната магическа команда:

snmpwalk -v 2c -c XXXXXXXX A.B.C.D iso.3.6.1.2.1.4.22.1.2|cut -d ' ' -f 4-|sed 's/ //g'|sort|uniq

от които данни един скрипт проверява дали в дадена директория има файлче, което се казва като mac адреса и ако да, го показва. Резултатът може да се види на http://vk.initlab.ludost.net/people.php, а от днес има и графика на броя чути адреси в лаба.
(целият source го има тук с малко данни, ама в него няма нищо особено интересно)

2011-05-30

Monday, May 30th, 2011

Имаше един въпрос в блога какво е initLab, та да взема да кажа две думи по въпроса.

Initlab е hackerspace по дефиниция, т.е. място, в което хората се събират да вършат разни странни неща. Намира се на ул. “Лозенец” 4, на последния етаж (мисля, че има надпис на вратата), а понеже долу няма звънец (по ред странни причини), ако човек звънне на +35924624356, вратата долу автоматично ще се отвори.

Има различни забавни проекти, които в момента се случват – докато пиша това, Владо води курс за wordpress за не-програмисти, до мен седи един RepRap принтер (с чиито софтуер/firmware си играя), някъде в съседната стая е оставен моя proxmark3, с който разни хора се занимават, тия дни написах нещо кратко да показва кой е в lab-а в момента (ако са се съгласили да им се отбележи MAC адреса в системата, та да се знае дали все пак има някой), и както споменах – един телефонен номер, който да отваря вратата долу.
(има някаква вероятност да представя няколко от тия неща на някоя идваща конференция, например на linux-bg)

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

2011-05-07 3d printer

Saturday, May 7th, 2011

Днес беше весел ден в initLab.

Отидох там около заниманията с RFID и едно нещо, дето довършваме с Кънев (за което, заедно с проекта за отваряне на вратата с позвъняване (който вечер работи, със съвсем малко жертви) вероятно ще направим една кратичка лекция). Там се оказаха и няколко човека, който се занимават да сглобят 3D принтер (такъв, дето прави формички от пластмаса) и с които в крайна сметка се занимавахме до около 23:00…

В началото имаха няколко проблема със софтуера (писан от всякакви странни хора, я на java, я на C/C++), който забиваше или успяваше да забие контролера на принтера (който па беше в процес на сглобяване). След малко дебъгване, strace-ване и четене на код се оказа, че протоколът за комуникация е прост, текстово базиран, работи на 19200 (без flow control, което води до един проблем), и може за тестове да се ползва от терминал.
(има нещо много забавно в това да напишеш команда и да гледаш как някакъв реален хардуер мърда или се опитва да се подпали)

Съответно няколко часа досглобявахме машината, пускахме тестове, намерихме един доста неприятен failure mode, който изискваше почти пълно разглобяване на главата (затъкнато парче от изходния материал), а аз даже написах едно просто програмче да насипва файловете с команди (т.нар. gcode) в устройството, понеже всичкия друг софтуер имаше разни проблеми с комуникацията – или объркваха протокола (неясно как), или просто препълваха устройството (т.е. не чакаха на всяка команда отговор, а просто пращаха с пълна сила).
(и май се търси някой да го допипне да работи за windows, че аз не съм наясно как се отваря там серийния порт)

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

Update: Забравих да напиша най-важния момент – цялото нещо е open-source (питайте google за reprap), съответно може да се намери не само source на комуникиращото приложение, но и на firmware от страна на контролера на принтера.
(по-късно ще измъкна от Тони Стоев link към неговите писания по темата, понеже той се занимава с организирането на проекта)

2011-04-22 rfid research в initLab

Friday, April 22nd, 2011

Най-накрая реших да направя нещо в initLab. Ще се почне от нещо малко – RFID research.

RFID (radio-frequency identification) е механизмът за комуникация на повечето от т.нар. безконтактни карти или token-и. В общи линии идеята е, че картата се приближава до някакъв четец, който излъчва поле, от което картата се захранва и съответно комуникира с четеца.
(някои варианти имат собствена батерия и се активират ръчно, например тези за отваряне на бариери, или например ключовете за някои коли)
Примерни такива са картите за достъп, картите за безконтактно плащане (които се появиха отскоро), или електронните карти за градския транспорт.

Имам под ръка един proxmark3 (документация и информация за него), с който може да се комуникира с RFID карти/чипове. Аз самият нямам времето и желанието сам да се занимавам да разглеждам различни карти и търся хора, на които областта им е интересна – да разглеждат как се осъществява комуникацията, къде може да има проблеми в такива системи, доколко са сигурни и т.н. – на които да съдействам, за да се занимаят и по някакъв начин да представят какво са открили. Вече има къде, а аз съм си играл известно време и мога да помагам поне в началото.
Изискванията към хората са 1) да им е интересно, 2) да не са тотални идиоти, 3) да прочетат правилника на initlab, 4) да си намерят поне един лаптоп, да има къде да се закача устройството (религията не ми позволява да си давам лаптопа на ближния си) и 5) да ми пишат, за да си харесаме кога ще се събираме да си играем.

Първата крайна цел е лекция в initlab по темата.