Рождение и смерть программерских групп

August 27, 2009 by peter631

Все, что рождается – должно умереть. Таков закон жизни. Как и живые существа, группы программистов рождаются, достигают зрелости. Со временем противоречия внутри группы обостряются,  у людей появляются разные интересы, и группа умирает как организм. В среднем время жизни группы – 5 лет.

Необратимость – вот главная черта нашего мира. Все вещи случаются лишь однажды. Если ваша группа один раз написала выдающийся софт, будьте уверены – больше это не повториться.

Не следует цепляться за прошлое  и жить в остывающем трупе, иначе ваша душа изотрется и умрет. Следует освободить других от себя и себя от других. Уходите не сожалея. Наступит новый день, и молодая, полная сил группа займет место ушедшей. Возможно, и Вы будете в ней, но это будет уже другая история.

I dream to be anonymous

August 26, 2009 by peter631

My deepest dream is to become the anonymous person – the person without ID, passports (especially biometric), without social security number. I want to be a person not easily controlled by government, I do not want pay taxes, I want have my private data really private and I want keep my name in secret. Im a human, not an ID. Let me be anonymous, its my the primary right.

Право на анонимность

August 26, 2009 by peter631

Моя мечта – стать неустановленным лицом.  Как в милицейской сводке -  “Неустановленным лицом совершено неизвестное действие”. Желаю чтобы все от меня отвязались : паспортные столы, налоговая, военкомат, соседи, друзья и враги. Я не желаю иметь ничего общего с государством,  я считаю унизительным наличие паспорта, ИНН, военного билета. Я не человек,  а не буренка на ферме с RFID’ом в ухе… Я не желаю, чтобы кто-то знал мое имя, не хочу нигде регистрироваться, я против того, чтобы телефонная компания за 100 рублей продавала диски с моими данными… Я желаю быть и оставаться человеком, а не ID № 1234556456.  Я не желаю, чтобы мои данные перехватывались и кем-то читались. Я желаю реализовать мое право на анонимность.

В книге Откровения Иоанна написано “…и будут они иметь клеймо на лице и на руке, и нельзя будет без него ничего продать и не купить”. Очень напоминает татуированный штрих-код PDF 417 или еще какой. Очевидно, пророк говорит о близких к нам временах.  Биометрические паспорта, системы тотального контроля – это шаг в пропасть, к фашистскому государству. Хватит с нас СССР.  Зря церкви  решили не заострять внимание на этом вопросе. Зря.

Ближе к 40…

August 26, 2009 by peter631

Будучи еще молодым человеком, я как-то читал Д. Карнеги, “Как перестать беспокоиться и начать жить”, ну и другие его книжки. Там была замечательная фраза о том, что к 40 годам человек, как правило, уже сильно потрепан жизнью. Тогда я сильно удивлялся по этому поводу. Не может быть, думал я.

Вот теперь мне поближе к 40, и я понимаю, что он был прав. Шишек я получил – не сосчитаешь. И болячки, и шантаж, и грабеж, болезнь и смерть родственников, и бомжевал, да всего и не упомнишь…

Не знаю, может другим как-нибудь полегче живется, а мне вот что-то несладко пришлось…

Энтропия (пока не структурировано)

July 6, 2009 by peter631

 Будем проще

Погубит нас наш вульгарный материализм. Вот предки – всякие там Декарты и Ньютоны – они соображали получше нашего. Есть вот всемирный эфир, законы у него такие-то. Электромагнитное поле похоже на систему зубчатых шестереной, а электичество – на жидкость. Уравнения вот. Объяснять суть вещей не пытались. Мы вот пытаемся, но без особого успеха. Тупые мы и некультурные. Раса паршивых торгашей…

Энтропия больших систем

Так уж получилось, что работаю я с большими системами. В больших системах обязательно что-то идет не так. Хоть что делай. Можешь писать инструкции, правила, назначать штрафы, устанавливать бюрократические процедуры – все без пользы. Всегда определенный процент системы работает криво. А почему?

Энтропийная жидкость

Потому что энтропия – несжимаемая жидкость. Бардак в системе нельзя уменьшить. (а вот увеличить – пожалуйста).  После того как система собрана и вступила в эксплуатацию, уровень ее энтропии составляет определенную величину. Это технический параметр, такой же как производительность. Относительную энтропию системы можно определить как отношение числа нелигимных состояний к общему числу.

Следствие: как бы парадоксально это не звучало, нельзя наладить систему, отлаживая ее по кускам.

Наладишь одно – развалиться другое, будь оно трижды надежным.

Вот простецкий пример: радиоприемник. Если уровень собственных шумов высокий, то как не разгоняй усиление, слабый сигнал не примешь.

Наиболее удивительно то, что проявления энтропии различны. Устранив ее из одного физического процесса, мы получим ее в другом.

Я назвал это явление “спектром энтропии“.  Примеры я наблюдал самые поразительные. Наладили софт  – упал фирменный высоконадежный хард. Наладили хард – половина админов слегла с гриппом (фантастика,а). Ну что сказать? Я бился головой об стену три года. Потом меня озарило.

Состояния

Все дело в числе состояний. Часть легитимные. Остальные нет. Вообразим систему из двух элементов. Каждый элемент имеет два равновероятных состояния. Легитимное – 0 и нелегитимное -1.  Легитимное состояние системы -00. Остальные комбинации нелегитимны. Итого. Всего состояний 4 из которых три паразитных. Энтропия 75%. Еще по-божески..

Методы борьбы

Сократить число паразитных состояний, конечно, нельзя.( В основном из-за феномена, который я называю “прогностический горизонт”.  Проектировщики системы предвидят ее поведение только до определенного уровня. Слоны вылезают потом.)

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

Можно понизить до невероятно малой величины вероятность отказа малого элемента (юнит -тесты) Можно сократить время пребывания системы в нелигитимном состоянии (перезапуски, резервирование элементов). Можно делать слабосвязанные системы, которые могут находиться во фрагментарно нелигитимном состоянии. Это избыточность по времени.

Формальное определение

 Формально мы можем выразить энтропию через вероятность правильной работы системы, выражаемую как доля времени системы в нелегитимном состоянии по отношению в общему времени работы.  Может быть равна,  в самом хорошем случае, произведению вероятностей правильной работы отдельных элементов. (ну не так тривиально все, но в целом верно).  Короче говоря, вероятность правильной работы системы никогда не достигает единицы.

Феномен  заключается в том, что энтропия проявляется в различных физических обличьях. Энтропия управляет физическими процессами,  и переходит из одной формы в другую. Как энергия.

Помимо забот об уменьшении энтропии на этапе проектирования системы надо приложить усилия но недопущению роста энтропии в системе. В противном случае система разрушится, рано или поздно. Аппаратура сгорит. Память, вне зависимости от физической реализации, переполнится и\ или зафрагментируется. Сеть зарастет червями и вирусами.

Борьба

Уменьшить общее число состояний. Kiss.

  • Уменьшить вероятность сбоя отдельного элемента. Юнит тесты, готовые элементы.
  • Сократить время пребывания в нелигитимном состоянии. Перезапуски, резервирование
  • Ввести избыточность. По элементам – резервирование. По времени – слабо связанные системы, по состояниям – пороговые схемы, машины состояний. Корректирующие коды
  • Увеличить вероятность полезных состояний – повышение соотношения сигнал\ шум( сопротивление неверным данным на ранних этапах).

Вихревые (не эргодические) случайные процессы

Отдельная специфическая  беда, свойсвенная слабосвязанным системам – основанным на таймаутах, сообщениях, событиях, процессах, потоках…

Наблюдал в программах на Эрланге и одной большой системе, не будем говорить где. Вначале все работает как надо. Потом один процесс упал. Второй слал в это время первому сообщение и тоже упал. Супервизор запланировал перезапуск первого процесса, но его пришлось отложить из-за отсутствия ресурсов. Грохнулся по таймуту третий процесс на удаленном узле. В четвертом процессе переполнилась очередь. И понеслось… В общем и целом неприятности могут так и ходить по кругу. Это очень опасные для системы состояния, поскольку нормальное состояние может и не возвратиться и наступит тепловая смерть системы. В Эрланге OTP придумали именно по этому – чтобы все бегало по рельсе и в дебри не убегало. Как лечить переходные и вихревые процессы: жестко прописывать состояния и переходы. Хотя бы подумать о них. Как на уровне элементов, так и на уровне системы.

Тепловая смерть системы

Рано или поздно наступает момент, когда система все дольше и дольше остается в сбойном состоянии. Наконец, вероятность возврата в норму становиться равной нулю. Наступает смерть системы – распад функций.

Gedanken experiment. Идеальная система

В идеальной системе отсутствуют материальные компоненты. Может ли это означать, что ей не грозит тепловая смерть? Отнюдь! В нашей вселенной существуют необратимые процессы. Так сказать, не все транзакции можно откатить…Необратимость и есть источник повышения энтропии.

Второй момент – наличие нелегитимных состояний, которые система может войти и не выйти.

Иными словами, любую систему, даже идеальную, ждет распад.

Информационная система как субъект термодинамики

 Модель. Совместное воздействие на вход обрабатывающего элемента шумовых и полезных данных.  Полезные данные – набор комбинаций битов, трактуемых как правильные данные. Шумовые данные – все остальные комбинации битов. Отношение числа полезных к числу произвольных и есть отношение сигнал – шум.  Как его поднять? Поставить на входе малошумящий усилитель – каскад, минимально(в идеале-ничего не) добавляющий к битам, а просто фильтрующий нелегитимные комбинации. Если таКой каскад поставить в глубине обработки, то там он пользы не принесет – полезный сигнал смешается с вредным.

 Полезный и вредный

 Фиксированные значения

  • Разрешенные диапазоны
  • Наложенные внутренние зависимости – хеши, контРольные суммы, цифровые подписи
  • Фиксированные длины
  • Корреляция?

Мои комментарии к Торе

July 6, 2009 by peter631

Читал сабж.  Интересуюсь историей. Занимательная наука… Тора, или Пятикнижие, состоит, как легко догадаться, из пяти книг.

Первые книги достаточно интересны.  А вот в книге Шмот, начиная с главы Трума исключительно интересные моменты начинаются. Там приводится описание Мишкан – переносного Храма древних евреев. Читаю описание храма и меня медленно глаза на лоб лезут – описано коммуникационное устройство!!! Девайс! Девайс для связи с Богом. Приведены точные геометрические размеры. Все покрыто золотом.  Инструкции по изготовлению даны тщательно и буквально.Расписаны инструкции по использованию, когда заходить, что говорить… А самое главное – описано действие. Когда Всевышний обращается к Моше, Его голос звучит между крыльями ангелов, распростертых над крышкой.

Каков принцип  этого девайса  и где он теперь – неизвестно.

Вот и читай древние книги…

 P.S.

Надеюсь, я никого не обидел, в мыслях у меня такого не было. Тора чИтана в русском переводе, с комментариями доктора Герца, главного раввина Британии.

Город, которого нет – ночная река

June 22, 2009 by peter631

Ночная река

 

Река широкая. Река покрыта льдом. Она уводит прочь от огней города в темный и тихий залив, скованный зимой.   Стоит восхитительная зимняя ночь – легкий мороз скорее бодрит, чем угнетает.

 

Военный праздник

 

Город расположен в высоких широтах и ночь тут долгая. Сегодня- военный праздник. Над рекой то И дело раздаются залпы салюта. В ночном небе гудят моторы – летчики демонстрируют искусство. Изящные черные  гидропланы взлетают и садяться в промоины на реке – чертовски рискованно! Граждане в восторге.

 

Атмосфера

 

Сегодня все радуются.  Жители бродят вдоль набережных, употребляют напитки и всякую снедь. Горят костры. Повсюду царит атмосфера радостного оживления. 

Кто тО тараторит без умолку, кто то замер с бокалом в руке, мечтательно улыбаясь. Дети носятся как угорелые.

Я сам бреду в рассегнутом пальто, сжимая в руке бокал с коктейлем, бреду без определенной цели. Жар праздника, величие полярной ночи, и крепкий коктейль сливаются в одно феерическое ощущение, которое я не в силах описать.

Город, которого нет. Наводнение.

June 22, 2009 by peter631

Волна

 В Городе нередки зимние шторма. Вот и сейчас город заливает огромная волна, смешанная со снегом и ледяной крошкой. Она покроет  город двух-пятиметровым слоем воды. Удовольствие на неделю, не меньше.

 Убежище

 Народ в панике разбегается с поверхности. Я прячусь в какой-то недостроенной высотке. 23 этаж – тут-то вода меня не достанет,а? Следующая лестница упирается в небо. Ниже все уже занято…

 На этаже – голый бетон, слава богу хоть окна есть. Изо всех щелей дует ветер.

Из несчастных вроде меня на этаже имеется женщина лет 30 с ребенком, старик и какие-то бомжи.

Старик разводит маленький костерок в ведре. Народ потихоньку сползается греться.

 Природа

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

 Питание

 Учитывая специфику местного климата, в период зимних штормов каждый гражданин обязан каждый день носить с собой НЗ на пять суток. Кроме того, на высоких  этажах всех зданий есть хранилища- “заначки”. Еда, вода, таблетки…  Мои невольные компаньоны тихонечко раскупоривают припасы. Старик ушел искать спрятанную стационарную заначку. Я лежу на оставленном строителями матрасе. Меня серьезно мутит -из за высотной фобии и резкого падения атмосферного давления. Паршиво выглядят все. женщина вон совсем бледная.

Мне бы в туалет, но это нужно идти этажей шесть вниз по лестнице без перил.

 Электичество

 Ясное дело вырубилось. Сотовая связь не работает, лифты встали, водопровод тоже. Уличные телепорты укрыты двухметровым слоем воды.  При всем нашем дутом техногенном могуществе против сил природы мы слабоваты.

 Спасатели

 Какие спасатели? Чай не Америка! (да и вообще не Земля.) Это вам не фильм, мои милые, а суровая реальность.  Будет здорово,  если в нашу высотку забрел хотя один врач, а также если с водой нижние подсобят.

 Что потом

 Спросите Вы. Потом вода спадет, выжившие разбредутся по домам, а умерших свезут в морг. Городские службы еще долго будут отчищать поверхность от грязи, снега, дохлой рыбы, трупов неудачников и прочего мусора.  А мы им будем помогать. Затем тучи уйдут, и проглянет оранжевое Солнце. Наше Солнце.

Эранг : постусловия и инварианты

May 22, 2009 by peter631

Что есть что

Инвариант процесса – это некоторая функция, вычисленная над состоянием процесса, которая остается постоянной все время жизни процесса.  Если инвариант разрушился, процесс, очевидно, работает неверно.

Постусловие метода (обработчика сообщения) – условие, которое истинно на выходе функции. Касается каких-либо обязательных завершающих действий или выходных параметров. Если постусловие не достигнуто или не выполнено, очевидно, что-то идет не так.

Типовые применения

Инвариант касается состояния процесса.  Мы, программируя на Эрланге, постоянно меняем состояние – особенно явно в шаблонах gen_server. Важно проверить, что мы его не утратили:

handle_call(Msg, From, State)->

 check_invariant(State),

 {reply, Reply, NewState} =  safe_handle_call(Msg, From, State),

    check_invariant(NewState),

{reply, Reply, NewState}.

safe_handle_call(Msg, From, State)->…. // Ваши методы

Что то вроде того. Штука очень полезная, особенно если состояние сложное – есть риск напутать и поставить не то.

Зачем нужны постусловия. Одно из применений – проверка состояния данных перед отсылкой по сети. Важно быть уверенным, что данные уходят правильные (это, правда, не значит, что они правильными придут:)

Продолжение следует…

Особенности программирования на Эрланге

May 19, 2009 by peter631

Документация

По теме статьи следует прочесть еще один документ, лежит на сайте эриков:  http://www.erlang.se/doc/programming_rules.shtml

Принципы и шаблоны OTP

Следует использовать везде, где возможно. Почему ? Потому что это уже отлаженный код с заточками. И вообще, в этом языке, как в никаком другом поведенческие паттерны следует обобщать, выделять и помещать в библиотеку. Обобенно  если паттерн так сказать “OTP compliant”. Конкретное местное поведение – в call-back module с собственным behaviour. Последний делается нетрудно.

Доверенные и недоверенные арбайтеры

В общем и целом процессы могут быть разделены на два типа.  Супервизоры и арбайтеры. Арбайтеры (в оригинальной документации – workers) – это тот процесс, который выполняет полезную функциональность. Арбайтеры, в свою очередь, могут быть доверенными и не доверенными. Доверенный арбайтер не может упасть (внезапно завершиться). Скажем так, вероятность такого события крайне мала. Совокупность доверенных арбайтеров образует бессбойное ядро. Доверенные арбайтеры должны использоваться, например, для хранения данных протокола. Недоверенные -  обычные арбайтеры – могут валиться сколько им нравиться, поскольку супервизор их все равно перезапустит.

 Хранение состояния

После того, как процесс был перезапущен супервизором, его состояние исчезает. Чтобы оно восстановилось, надо хранить состояние где-то в другом месте – в вышестоящем процессе, который не затронет перезапуск, на клиенте, в файле или в бессбойном ядре системы.  Для хранения различных переменных неплохо подойдет Словарь Процесса, или таблица в памяти, в простом случае – переменная состояния процесса.  Важно также, чтобы хранитель состояний не был, например, перегружен входными сообщениями и отвечал оперативно.

Проектирование сверху вниз

Пожалуй, ни в каком другом языке вопрос так остро не ставиться.  Программируя на Эрланге, проектируйте сверху вниз, иначе ничего толгового  не выйдет. В детали углубиться можно потом, вначале – архитектура процесса, сбои и перезапуски, потом – детали.  Вначале идея, потом реализация. Как следствие – вначале испытываем под нагрузкой некоторую правдоподобную модель, потом уже детализируем.

 Управление внешними ресурсами

Управление внешними ресурсами – файлами, сокетами, и другими вещами реализуется обычно через прилинкованные процессы (linked processes). Если основной арбайтер упал, то все процессы, прилинкованные к нему, тоже упадут. Таким образом, все зависимые ресурсы будут освобождены.