<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. https://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="https://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:_adept_</id>
  <title>dump -0f - /dev/mind</title>
  <subtitle>Я знаю Haskell, OCaml, GSM, эндофункторы и много других страшных слов</subtitle>
  <author>
    <name>Dmitry Astapov</name>
  </author>
  <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/"/>
  <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom"/>
  <updated>2013-04-24T22:47:12Z</updated>
  <lj:journal userid="649412" username="_adept_" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="https://users.livejournal.com/-adept-/data/atom" title="dump -0f - /dev/mind"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:125000</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/125000.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=125000"/>
    <title>Умница Уилл Хантинг:)</title>
    <published>2013-04-24T22:47:12Z</published>
    <updated>2013-04-24T22:47:12Z</updated>
    <category term="баечки"/>
    <content type="html">Недавно один мой коллега Н принес на работу головоломку &lt;a href="http://en.wikipedia.org/wiki/Bedlam_cube" target="_blank" target="_blank" rel="nofollow"&gt;Bedlam cube&lt;/a&gt;. А другой мой коллега Д заинтересовался и стал его складывать.&lt;br /&gt;&lt;br /&gt;Головоломка, надо сказать, действительно непростая, и Д мучался с ней больше недели. В конце-концов у него получился аккуратный кубик с небольшой дыркой, и еще одна деталь, которую надо было когда-то раньше засунуть внутрь, а теперь уже даже и непонятно, что с ней делать.&lt;br /&gt;&lt;br /&gt;Д пытался и так и эдак засунуть лишнюю деталь внутрь, снова разобрал часть кубика, пристроил деталь на место, стал собирать все остальное ... и у него снова осталась лишняя деталь. Так, кажется, повторилось еще несколько раз, но Д все не сдавался.&lt;br /&gt;&lt;br /&gt;В довершение всех бед как-то раз вечером уборщица обметала пыль на столе у Д, толкнула собранную часть головоломки, и та распалась. Д расстроился, сгреб детали в кучку и ушел домой.&lt;br /&gt;&lt;br /&gt;На следующее утро получилось так, что Н пришел на работу раньше всех, и решил разыграть Д: он быстро собрал всю головоломку целиком, а сверху прицепил вот такую записку:&lt;br /&gt;&lt;a href="http://ic.pics.livejournal.com/_adept_/649412/7271/7271_original.jpg" target="_blank" target="_blank"&gt;&lt;img src="https://ic.pics.livejournal.com/_adept_/649412/7271/7271_900.jpg" alt="puzzle" title="puzzle" width="640" height="480" fetchpriority="high" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(перевод: "Я собрала все, как было. Сара (уборщица)")&lt;br /&gt;&lt;br /&gt;Кто смотрел "Good Will Hunting", тот сразу же узнает, откуда была взята идея :)&lt;br /&gt;&lt;br /&gt;Д пришел на работу, прочитал записку и ... поверил, и расстроился пуще прежнего. Он, понимаешь, мучался неделю, а уборщица не напрягаясь собрала сходу все. Все остальные коллеги мужественно давили из себя poker face, но к обеду кто-то все-так раскололся, и у Д появился еще один повод для растройства. Больше он к головломке не притрагивался :)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:121721</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/121721.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=121721"/>
    <title>-Подарим ему футболку? - А зачем, у него ж одна уже есть?</title>
    <published>2012-05-30T22:48:35Z</published>
    <updated>2012-05-30T22:48:35Z</updated>
    <category term="баечки"/>
    <content type="html">Я внезапно понял, что сегодня я обязательно должен рассказать вам про Одну Футболку.&lt;br /&gt;&lt;br /&gt;Когда-то - неважно, когда - я регулярно наведывался в компанию К. Атмосфера там была демократичная, в костюмах с галстуками мало кто ходил. Словом, типичная IT-шная лавочка.&lt;br /&gt;&lt;br /&gt;И вот я туда пришел первый раз, и попался мне там на глаза персонаж в запоминающейся футболке - яркого цвета и с какой-то рожей на пузе. Прихожу я туда второй раз - он опять в этой же футболке. В третий раз - ну, вы уже поняли ...&lt;br /&gt;&lt;br /&gt;Я с его коллегами пошутил на тему того, что вот ведь как мне везет - третий раз прихожу, и все время попадаю на одну и ту же футболку. И тут выяснилось следующее: он в этой футболке - каждый день(!).&lt;br /&gt;&lt;br /&gt;А все началось с того, что как-то раз этот персонаж вел со своими коллегами неспешную беседу про холостяцкий быт, и они принялись считать минимальный разумный размер гардероба. А персонаж возьми и скажи: "А футболка может быть вообще одна!". Тут его подняли на смех и сказали, что никак не возможно с одной футболкой - на работу же каждый день, а ее ж надо стирать, и два дня подряд не надевать, чтобы не иметь чмошный вид. Слово за слово, поспорили. Причем, при большом стечении народа.&lt;br /&gt;&lt;br /&gt;Спор был примерно такой: за каждый день, пока товарищ ходит в одной и той же футболке (стирать! два дня подряд не надевать!), он получает какую-то сумму (неплохую, другие бы и пообедали на эти деньги). Как только пришел в чем-то другом - все, лавочка закрывается.&lt;br /&gt;&lt;br /&gt;А товарищ оказался принципиальный и давай ходить в футболке каждый день. И проходил так уже год, и останавливаться не намерен. Футболка обветшала слегка, но пока держится. А кто с ним спорил, теперь ежемесячно в день зарплаты выдают ему оговоренную сумму. После первых двух-трех месяцев они было заартачились, но общественное мнение их убедило, что слово пацана надо держать. Потом они уже и сами привыкли.&lt;br /&gt;&lt;br /&gt;True story. Чем все в конце-концов закончилось, не знаю. Думаю, футболка разлезлась на тряпочки в конце-концов.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:118721</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/118721.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=118721"/>
    <title>Шышел-мышел-вышел!</title>
    <published>2012-01-20T22:45:49Z</published>
    <updated>2012-01-20T22:45:49Z</updated>
    <category term="баечки"/>
    <content type="html">Давным-давно в компании М жил да был сервер. И было у него &lt;s&gt;три сына&lt;/s&gt; два админа. Оба, что характерно, умных.&lt;br /&gt;&lt;br /&gt;А на сервере жили-были процессы. Их там было много - с десяток, а может даже два. Все они были однотипными, и представляли из себя что-то вроде workflow processor-ов. Что именно они делали - не суть важно, так как история совсем не про это.&lt;br /&gt;&lt;br /&gt;А история - про странную чертовщину, которая творилась с этими процессами. Время от времени, после смены конфигурации, какой-то из этих процессов надо было перезапускать. И админы всегда делали это очень неохотно. А все потому, что после перезапуска одного из процессов неприменно подыхало еще несколько. Иногда один, иногда два, иногда - все сразу, и админам, чертыхаясь, приходилось в спешке наводить порядок.&lt;br /&gt;&lt;br /&gt;Однако же, если вскоре после подобного происшествия процесс снова необходимо было перезапустить, никакой подобной фигни не происходило.&lt;br /&gt;&lt;br /&gt;Админы запаслись бубном побольше, и перед каждым перезапуском усердно стучали в него. Ну и, конечно, следили, чтобы все процессы были более-менее idle непосредственно перед перезапуском - если даже что и подохнет, то хоть без особых последствий.&lt;br /&gt;&lt;br /&gt;Впрочем, со временем бубен пообтрепался, а терпение админов - поистощилось. И они стали разбираться. А это был самый что ни на есть Ынтерпрайз Софт, и все у него было большое - и админ. скрипты, и исходники, и руководство пользователя.&lt;br /&gt;&lt;br /&gt;Ничего не найдя в руководстве (а вдруг есть "export DONT_KILL_OTHER=1"?), админы полезли в скрипты запуска и останова. Но и там не нашлось ни pkill, ни killall, ни прочего оружия массового уничтожения. Тогда админы полезли в исходники. Тридцать дней и три ночи лазили они по исходникам, и в конце концов нашли такое ...&lt;br /&gt;&lt;br /&gt;Чтобы не оставлять после себя зомбей и детей-сирот, каждый процесс вел строгий учет порожденных подпроцессов. После каждого fork-а PID порожденного процесса записывался в специальный массив, а после завершения "ребенка" - удалялся из массива. Если же было необходимо выполнить перезапуск, то процесс добросовестно пытался всех своих "деток" придушить, чтобы они не достались злому init-у.&lt;br /&gt;&lt;br /&gt;Да вот беда - в коде был баг, из-за которого PID-ы вычеркивались из списка только в случае завершения порожденного процесса с ошибкой.&lt;br /&gt;&lt;br /&gt;В результате у каждого "родительского" процесса за время работы накапливался немерянный "черный список" когда-то кому-то принадлежавших PID-ов, которые они при завершении пытались добросовестно прибить.&lt;br /&gt;&lt;br /&gt;Естественно, из-за переиспользования PID-ов на момент перезапуска вполне могли существовать какие-то другие, совершенно посторонние процессы, PID-ы которых были в "черном списке". И тут начиналась лотерея: как только перезапускаемый процесс пытался прибить что-то, что ему "не по зубам" (процесс root-а или какого-то другого пользователя), он получал EPERM и больше никого убивать не пытался. Но до прихода EPERM он вполне мог прибить пару-тройку процессов-родственников (так как все крутилось под одним пользователем).&lt;br /&gt;&lt;br /&gt;А у каждого из убиенных родственничков был свой "черный список" ...&lt;br /&gt;&lt;br /&gt;Мораль придумайте сами</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:95899</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/95899.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=95899"/>
    <title>Он сказал: "поехали!"</title>
    <published>2009-08-17T19:02:14Z</published>
    <updated>2009-08-18T08:45:41Z</updated>
    <category term="работа"/>
    <category term="баечки"/>
    <content type="html">Он - это &lt;a href="http://company.mts.com.ua/rus/press_releases.php?news_id=3532" target="_blank" rel="nofollow"&gt;пресс-релиз&lt;/a&gt;. На самом деле, там еще есть пару мелких углов, но вписывать прибавку к EXP и ЧСВ можно уже сейчас. Я там собирал требования, писал кучи документов, мигрировал данные и интегрировал все добро в одну кучу. &lt;s&gt;Вот какой я молодец&lt;/s&gt;&lt;br /&gt;&lt;br /&gt;Впрочем, не обошлось без казусов.  Некие бравые ребята написали на PL/SQL пакетик процедур, и, натурально, вставили его в Oracle. Другие бравые ребята взяли программу на C#.Net и давай оттуда эти процедуры использовать.&lt;br /&gt;&lt;br /&gt;В тестовом окружении (Oracle 8.1.7) - все шикарно. В промышленном (Oracle 9i) - не выходит каменный цветок. Лишь только пытаешься вызвать какую-то процедуру - Оракл тут же говорит ORA-03113, end-of-file on communication channel. И закрывает соединение со своей стороны.&lt;br /&gt;&lt;br /&gt;При этом с того же самого компьютера можно подключиться к базе при помощи sqlplus, вызвать искомую процедуру и получить результат. Без всяких ошибок. Хоть раз, хоть десять.&lt;br /&gt;&lt;br /&gt;Разработчики на PL/SQL, естественно, тут же воспряли духом - ага, баг не у нас, оказывается! Только толку от этого знания немного - надо же, чтобы в конце-концов все заработало и в приложении на C#.Net.&lt;br /&gt;&lt;br /&gt;Разработчики на C# говорят: это все потому, что мы ходим через ODBC. Однако фиг - утилита ODBC Test, написанная (судя по виду GUI) еще во времена Windows 3.1, замечательным образом вызывает процедуры через ODBC.&lt;br /&gt;&lt;br /&gt;Тогда разработчики на C# говорят: это все потому, что мы все переписали и теперь работаем через OleDb. Надо поставить ораклового клиента и использовать ODP.NET оттуда. Поставили. Однако фиг - как падало, так и падает. Причем, только с Oracle 9i - с 8.1.7 по-прежнему все хорошо.&lt;br /&gt;&lt;br /&gt;Тогда разработчики на C# говорят: это у вас фиговый Оракл. Но их посылают в сад, так как "у меня нет для вас другого Оракла, товарищ Жуков".&lt;br /&gt;&lt;br /&gt;Параллельно все участники процесса насилуют Google в поисках других товарищей по несчастью. Классик говорил: "если любишь заглядывать в бездну, помни, что бездна может заглянуть в тебя". Так и происходит: гугл приносит мешок рассказов о том, как по всему земному шару люди бьются лбом об стену с ORA-03113.&lt;br /&gt;&lt;br /&gt;Типичные истории звучат примерно так: "Мы тут написали софтину на C#.NET, которая ходит в оракл. С версией 9i и ODP 9.0.1.3.1 все было хоршо, но потом мы обновили ODP до 9.0.1.3.3 и началось - ORA-03113 через пол-часа работы. Мы два месяца плясали с отладчиками, и поняли: у нас на клиентской стороне connection pool, а Оракл со своей стороны временами закрывает соединения по тайм-ауту. В пуле они не инвалидируются, и когда такое соединение выбирается для выполнения запроса, возникает ORA-03113. Мы не можем убрать пул (все тормозит) и не можем убрать отключение по тайм-ауту (требование безопасности). Более того - мы откатили ODP, но проблема осталась! Помогите!". Читаешь, и понимаешь, что у нас еще не все так плохо :)&lt;br /&gt;&lt;br /&gt;Хоть у нас все и падает сразу и пул явно ни при чем - попробовали поиграться с его отключением или параметрами. А вот фиг.&lt;br /&gt;&lt;br /&gt;В конце-концов разработчики на C# говорят: "Мы сдаемся! К вам едет "мистер Вульф, который решает пробемы" (Криминальное чтиво).". Приезжает человек, который занимается исключительно troubleshooting-ом разной неведаной фигни.&lt;br /&gt;&lt;br /&gt;Человек целый день колдует с компилятором C# и кучей разных библиотек и в конце-концов говорит: "я не знаю, что бы это значило, но факт таков - если я до вызова процедуры сделаю хотя бы один select, то все работает хорошо". Проверяем - натурально, так оно и есть. Может, дело в каких-то миллисекундных паузах? Нет, расставленные по коду паузы не помогают.&lt;br /&gt;&lt;br /&gt;Пляски с бубном продолжаются еще день, но без особого результата. В конце-концов принимается волевое решение о том, что код на C# должен после открытия соединения сделать "select table_name from all_tables where owner=current_user" и вычитать первый элемент рекордсета.&lt;br /&gt;&lt;br /&gt;И все начинает работать без сучка и задоринки. &lt;a href="http://img1.liveinternet.ru/images/attach/b/3/21/431/21431138__x_1e3d35d4.jpg" target="_blank" rel="nofollow"&gt;Мораль&lt;/a&gt; придумайте сами.&lt;br /&gt;&lt;a name='cutid1-end'&gt;&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:89730</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/89730.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=89730"/>
    <title>Кто жалобы читал - тот в цирке не смеется</title>
    <published>2008-12-21T20:24:59Z</published>
    <updated>2008-12-21T20:24:59Z</updated>
    <category term="работа"/>
    <category term="баечки"/>
    <content type="html">Все знают, что воины и офицеры запаса ходят в цирк исключительно для того, чтобы сидеть в первом ряду и нервировать клоунов каменным выражением своего лица.&lt;br /&gt;&lt;br /&gt;Можно ли раскачать такой полезный skill, не посвящая два года своей жизни строевой и боевой подготовке? Отказывается можно - достаточно пойти поработать в отдел "По работе с обращениям абонентов" в любую более-менее крупную телекоммуникационную компанию. Например, в компанию Z.&lt;br /&gt;&lt;br /&gt;В нежные руки сотрудниц (сотрудников там не бывает - грубая мужская психика не выдерживает) этого отдела ежедневно попадает до десятка шедевров эпистолярного жанра, каждый из которых с гордостью возглавил бы top на bash.org.ru. Но работницам не до увеселения масс, и недрогнувшей рукой сокровища письменной культуры отправляются в шредер.&lt;br /&gt;&lt;br /&gt;Такая же судьба чуть была не постигла письмо гражданина Н. Сотрудница, в чьи руки оно попало - назовем ее Маша - прочла его, мысленно отнесла его к категории "спам" и привычной рукой отправила его в папку "В шредер", но тут из конверта выпала ксерокопия документа на официальном бланке Компании.&lt;br /&gt;&lt;br /&gt;В голове Маши начала мерцать тревожная красная лампочка - ксерокопии документов обозначают, что автор письма знает, как общаться с Бюрократическими Организмами, и представляет собой потенциальную опасность. Письмо следовало перечитать внимательнее:&lt;br /&gt;&lt;br /&gt;"&lt;i&gt;Уважаемая Компания!&lt;br /&gt;&lt;br /&gt;Я признаю, что за прошедший месяц на моем счету действительно образовалась задолженность в 500 грн, однако я отказываюсь признавать, что эта задолженность (пусть даже с учетом пени) составила спустя месяц сумму, значительно превышающую валовый национальный продукт Украины за прошлый год. Если вы, как указано в письменной претензии (см. копию) действительно собираетесь передавать дело в суд, я, со своей стороны &amp;lt;дальше уже не важно&amp;gt;...&lt;br /&gt;&lt;br /&gt;С уважением, Н.&lt;/i&gt;"&lt;br /&gt;&lt;br /&gt;Маша развернула ксерокопию. На стандартном бланке претензии, высылаемой неплательщикам, было написано: "&lt;em&gt;Просим вас в течении 15 дней погасить задолженность, которая, с учетом пени, составляет: триста восемьдесят миллиардов .... миллионов двести тридцать четыре тысячи пятьсот шестьдесят семь гривен&lt;/em&gt;"&lt;br /&gt;&lt;br /&gt;Маша пошла к своей начальнице, начальница пошла в отдел, рассылающий претензии. А там уже сидели представители бухгалтерии, которых заинтересовало, почему сумма невзысканной дебиторской задолженности за прошлый месяц составляет астрономическую сумму в несколько сот миллиардов гривен.&lt;br /&gt;&lt;br /&gt;Довольно быстро выяснилось, что процесс выставления претензий включает в себя этап, на котором сумма задолженности может быть вручную скорректирована отвественным сотрудником Компании на основании сложной экспертной оценки. А поле для ввода окончательной суммы задолженности было расположено рядом с полем поиска данных абонента по номеру телефона. И при обработке долгов абонента Н вместо окончательной суммы ему по ошибке вбили номер следующего должника. В международном формате (12 цифр).&lt;br /&gt;&lt;br /&gt;После этого ручную коррекцию долга отменили, и письма-претензии стали рассылать всем, чей долг составляет более X гривен, где X задавалось вручную. Естественно, и это "ружье на стене" тоже в свое время выстрелило, но это уже совсем другая баечка.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:85350</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/85350.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=85350"/>
    <title>Безопасность для всех и каждого, и пусть никто не уйдет</title>
    <published>2008-07-22T18:36:15Z</published>
    <updated>2008-07-22T18:36:15Z</updated>
    <category term="работа"/>
    <category term="баечки"/>
    <content type="html">"&lt;i&gt;- Вы останетесь в доме! - приказал робот.&lt;br /&gt;   С удивительной  быстротой  двигаясь  на  своих  гусеницах,  он  пересек комнату, загородил собой дверной проем и протянул руки к пульту у потолка, чтобы включить защитное поле вокруг дома. В  ужасе  Кармайкл  увидел,  как быстро перебирая пальцами, робот перенастроил установку.&lt;br /&gt;   - Я изменил полярность охранного поля, - объявил Бисмарк.  -  Поскольку выяснилось, что вам нельзя доверять соблюдение предписанной мной диеты,  я не вправе позволить вам  покинуть  дом.  Вы  останетесь  внутри  и  будете подчиняться моим благотворным советам.&lt;/i&gt;"&lt;br /&gt;&lt;br /&gt;Я участвовал в проекте, заказчик которого настаивал на строгом соблюдении ряда своих внутренних процедур и правил.  Одно из правил гласило, что все сотрудники компании, а также партнеры (партнеры партнеров и т.п.) должны заключить с компанией договор о неразглашении коммерческих и всяких прочих тайн. Второе правило гласило, что все работы на благо компании ведутся исключительно на оборудовании компании и инструментами, предоставленными компанией. Как вы уже поняли, к вопросам информационной безопасности компания относилась более чем серьезно.&lt;br /&gt;&lt;br /&gt;В результате я стал (на время) обладателем предоставленного компанией ноутбука, который был защищен на всех уровнях: диск его был зашифрован SafeDisk-ом, и для загрузки требовалось указать пароль. Учетная запись Windows была сильно урезана в правах, и ни о каком локальном администрировании и речи быть не могло. Все коммуникации с компанией поддерживались при помощи VPN в их штаб-квартиру - почта через их exchange-сервер, интернет через их прокси, и т.д. и т.п.&lt;br /&gt;&lt;br /&gt;Компьютер был далеко не самым современным, и тормозил, как только мог. SafeDisk тормозил, расшифровывая и зашифровывая секторы при доступе к диску. Windows XP тормозил, загружаясь с зашифрованного диска и робко пряча тело жирное в 512Мб памяти. Своп, как вы понимаете, тоже был на зашифрованном диске. Добавьте к этому антивирус, проверяющий все и вся, не шибко быстрый VPN, нестандартную раскладку клавиатуры, мою искреннюю "любовь" к работе в win-окружении - и в поймете, что работать на этом чуде враждебной техники было одно удовольствие.&lt;br /&gt;&lt;br /&gt;Загружался ноутбук минут 10, соответственно, я старался никогда его не shutdown-ить. а вместо этого опускать в hibernate. Тогда он просыпался быстрее, минуты за 3.&lt;br /&gt;&lt;br /&gt;И вот однажды мне потребовалось БЫСТРО написать заказчику очень важное письмо, и ехать на деловую встречу. Время поджимало, письмо было объемным, я спешил, как только возможно, и, казалось, едва-едва успевал до назначенного срока. Памятуя о том, что VPN тут - штука не быстрая, я загодя запустил VPN-клиента и сказал "connect!". Соединение было установлено, я отправился дописывать письмо. &lt;br /&gt;&lt;br /&gt;В это время на компьютере оживилась всякая нечисть и, учуяв VPN, стала качать себе всякие апдейты. Outlook обновлял реплику адресной книги, VPN-клиент - правила firewall-а, антивирус - антивирусные базы и какие-то свои модули (не забывая попутно проверять все, что качалось параллельно другими программами). Ноутбук весело затрещал свопом, слова в outlooke стали набираться не по буквам, а минимум по слогам. Я, чертыхаясь, пытался успеть дописать письмо за оставшиеся несколько минут.&lt;br /&gt;&lt;br /&gt;Тут антивирус закончил качать свои базы и обновления и вывесил в трее уведомление: "Я накачал критических апдейтов. Меня надо перезапустить. Перезапускаюсь". Уведомление скрылось, появилось окошко: "Для завершения обновления антивируса, компьютер надо перезапустить. Ok?". Поверх него открылось еще одно окно от VPN-клиента: "Ахтунг! Мы остались без антивируса! Защищенное VPN-соединение в trusted сеть не может быть использовано в таких условиях. VPN-соединение будет закрыто.". Поверх него открылось еще одно: "Outlook остался без связи с Exchange-сервером, вы не сможете получать и отправлять письма".&lt;br /&gt;&lt;br /&gt;Матерясь, на чем свет стоит, я понял, что проще отдаться, чем объяснить, что мне осталось писать пару предложений. Спустя 10 томительных минут ожидания я (уже опаздывающий сверх всяких пределов) запустил Outlook и ... увидел, что папка Outbox пуста. &lt;br /&gt;&lt;br /&gt;Последний раз подобное ощущение потери овладевало мной году эдак в 94-м, когда у меня враз накрылся винчестер на 80 мб, и все, что на нем было, потерялось безвозвратно. Желание кинуть ноутбук в стену преодолевалось с трудом. Я решил, что, по крайней мере, уведомлю клиента о том, что по техническим причинам отвечу ему позже. В поисках адреса какого-то начальника, которого надо было ставить в "CC:", я пошел рыться в папке Sent и ... увидел там свое недописанное письмо. Якобы уже отправленное.&lt;br /&gt;&lt;br /&gt;Вскрытие показало, что письмо реально никуда не уходило, никто его не получал, а Outlook не захотел сознаваться, по каким причинам оно было перенесено в Sent. С тех пор я дожидался завершения процесса обновления антивируса, и лишь потом начинал писать важные письма по этому проекту. На всякий случай - мало ли, может у него в запасе есть какие-то еще благие намерения.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:83868</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/83868.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=83868"/>
    <title>Пацан, есть кредитка? Дай поносить!</title>
    <published>2008-06-11T18:01:38Z</published>
    <updated>2008-06-11T18:05:24Z</updated>
    <category term="хохмочки"/>
    <category term="баечки"/>
    <content type="html">Представьте, что к вам приходят малознакомые люди и предлагают примерно следующее: "Давайте все ваши банковские карточки, мы их аккуратно сфотографируем для журнальной статьи, будет клёво".  Что отвечает на это здравомыслящий человек? Правильно, он посылает таких фотографов лесом. Скажете, это очевидно? &lt;br /&gt;&lt;br /&gt;Номер глянцевого журнала Story, вышедший на прошлой неделе, содержит в себе статью с интригующим заголовком "Что носит в сумке певец Alex Luna?". Статья украшена коллажем из вещей, взятых из этой самой сумки. Центральное место композиции занимает карточка "Укрсиббанка", принадлежащая, надо полагать, самому певцу.&lt;br /&gt;&lt;br /&gt;Качество съемки таково, что серийный номер, expiry date и имя-фамилия певца читаются без особых проблем. Карточка действующая, валидна до 04/09. А что CVV не видно - так это не проблема. В Штатах еще полно магазинов, которые позволяют сделать покупку без CVV.&lt;br /&gt;&lt;br /&gt;Ну, ладно певец - он человек искусства, витает в облаках, мог не знать. Ну, ладно фотограф - он мог видеть в карточке прикольный объект для съемки и больше ни о чем не думать. Но этот материал - он же прошел еще через добрый десяток людей. Неужели ни у кого в голове не шевельнулась мысль, что они делают фигню? Впрочем, это вопросы риторические.&lt;br /&gt;&lt;br /&gt;Мне гораздо интереснее было бы узнать вот что:&lt;br /&gt;1)Успел ли уже кто-то что-то купить по этой карточке?&lt;br /&gt;2)Заблокировал ли ее после этого певец?&lt;br /&gt;3)Получил ли кто-то за это по шапке?&lt;br /&gt;&lt;br /&gt;А теперь - пруфпик:&lt;br /&gt;&lt;img src="https://pics.livejournal.com/_adept_/pic/0000xr47" fetchpriority="high"&gt; &lt;img src="https://pics.livejournal.com/_adept_/pic/0000y7rc" loading="lazy"&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:83282</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/83282.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=83282"/>
    <title>Ха-ха</title>
    <published>2008-06-06T17:58:35Z</published>
    <updated>2008-06-08T11:08:29Z</updated>
    <category term="работа"/>
    <category term="баечки"/>
    <content type="html">Сегодня в разговоре всплыла одна старая история конца XX века, которой я решил поделиться. Благодаря капитану Врунгелю мы знаем, что как вы яхту назовете, так она и поплывет. А справедливо ли это по отношению к программам и скриптам?&lt;br /&gt;&lt;br /&gt;В некой компании Z жила-была биллинговая система. Функциональность биллинговой системы была велика, но все-таки имела свои границы. Кроме того, разрабатывали ее люди, далекие от украинских реалий в области финансового и бухгалтерского учета, и некоторые жизненно важные вещи не были реализованы в системе вообще.&lt;br /&gt;&lt;br /&gt;С течением времени система обросла множеством узкоспецифичных доделок - частично сделанных поставщиком, частично - силами сотрудников компании Z. Вместо сердца биллинговой системы был отнюдь не пламенный мотор, а БД Oracle, поэтому большинство доделок имели вид скриптов на SQL и PL/SQL или хранимых процедур. Поставщик был не в восторге от того, что в базе делаются какие-то изменения "по живому", но в конце-концов смирился, так как не всегда успевал выкатывать красивые решения в сроки, которые устраивали бы компанию Z.&lt;br /&gt;&lt;br /&gt;В один прекрасный момент встал ребром вопрос о том, а не пора ли обновить версию биллинговой системы? По всему получалось, что пора. Представители поставщика приехали оценить обстановку на месте и сказали: "Опа! А в новой версии в структуре базы многое будет по-другому. И похоже, что большая часть скриптиков от этого скуксится. Надо бы делать анализ ...". Ну, надо - значит надо. Представителям поставщика были выданы все скриптики и процедурки и они убрались восвояси делать анализ.&lt;br /&gt;&lt;br /&gt;Не прошло и пол-года, как производитель выдал на-гора анализ существующего положения. Все скриптики были поделены на группы: "не нужны в новой системе; нужны с такими-то модификациями; код понятен, но непонятно, что делает скрипт; вообще нифига не понятно". В последнюю группу попали буквально три скрипта, и один из них был снабжен отдельным комментарием: "Обычно мы могли догадаться о функциональности скрипта по его названию, но файл hh.sql поставил нас в тупик. Мы понимаем, что это аббревиатура, но - от каких слов? По коду видно, что вы что-то делаете с суммами счета, но что и зачем - непонятно. Просвятите нас."&lt;br /&gt;&lt;br /&gt;Человек, к которому попало это письмо с требованием "разобраться", был в компании Z новичком (назовем его "Н"). Он пошел к разработчикам спрашивать о том, что делает скрипт "ха-ха эс-кью-эл", но натолкнулся на стену непонимания. Разработчики утверждали, что скрипта с именем "ха-ха" никто не писал, что его кто-то разыграл, и - если что - скриптов "гы-гы", "бугага" и "lol" они тоже не писали ...&lt;br /&gt;&lt;br /&gt;На шум пришел старый и опытный сотрудник, который выслушал Н и назидательно сказал: "во-первых, в системе Unix имена файлов пишутся с учетом регистра. Во-вторых, определенные буквы латинского и русского алфавита имеют одинаковый вид. Именно поэтому какой-то шутник в незапамятные времена назвал скрипт, который считает корректировки Налоговых Накладных, вот так:"HH.sql". Иди, пиши ответ поставщику."</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:82708</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/82708.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=82708"/>
    <title>Принцип ПВО</title>
    <published>2008-06-04T14:47:08Z</published>
    <updated>2008-06-04T18:23:08Z</updated>
    <category term="работа"/>
    <category term="баечки"/>
    <content type="html">&lt;i&gt;Сегодняшний рассказ навеян разговором с &lt;span  class="ljuser  i-ljuser  i-ljuser-type-P     "  data-ljuser="dottedmag" lj:user="dottedmag" &gt;&lt;a href="https://dottedmag.livejournal.com/profile/"  target="_self"  class="i-ljuser-profile" &gt;&lt;img  class="i-ljuser-userhead"  src="https://l-stat.livejournal.net/img/userinfo_v8.png?v=17080&amp;v=916.1" /&gt;&lt;/a&gt;&lt;a href="https://dottedmag.livejournal.com/" class="i-ljuser-username"   target="_self"   &gt;&lt;b&gt;dottedmag&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Есть такая порода людей, которая обладает необъяснимым пиететом перед печатным словом и &lt;i&gt;официальным документом&lt;/i&gt;. Они уверены, что любые изменения -- даже глупые и непопулярные -- могут быть претворены в жизнь очень простым способом: "Мы напишем &lt;i&gt;процедуру&lt;/i&gt;, ознакомим людей - и люди будут исполнять, куда же они денутся". Если же изменения не настолько глобальные, чтобы требовать создания &lt;i&gt;процедуры&lt;/i&gt; - не беда, можно обойтись чем-то попроще. Например, написать e-mail. &lt;br /&gt;&lt;br /&gt;Чтобы получатель сразу понял, что это очень важный e-mail, надо написать соответствующий subject: "СРОЧНО!!!!!! БИЗНЕС КОМПАНИИ ПОД УГРОЗОЙ!!!!". Или: "ВНИМАНИЕ!!!!". Или: "ВЫПОЛНИТЬ КАК МОЖНО СКОРЕЕ!". Если ничего соответствующего моменту не придумывается, можно написать просто: "!!!!!!!!!!"&lt;br /&gt;&lt;br /&gt;Но это только начало. Чтобы e-mail не потерялся в потоке информации, надо в самом письме еще раз пять или пятнадцать подчеркнуть, что дело срочно и не терпит отлагательств. Не надо экономить слова "СРОЧНО", "КРИТИЧЕСКИ ВАЖНО", "ASAP" и "ВНИМАНИЕ". Количество восклицательных знаков должно превышать число предложений минимум в четыре раза. Иначе есть риск, что &lt;i&gt;месседж&lt;/i&gt; не будет донесён.&lt;br /&gt;&lt;br /&gt;После отправления e-mail можно несколько расслабиться и передохнуть перед написанием следующего e-mail-а. Наивный читатель может сказать: "а еще надо записать в TODO напоминание - через какое-то время проверить результаты работы". Это распространенное заблуждение, которое стоило многим начинающим менеджерам сотен нервных клеток. На самом деле, контролировать результат совершенно необязательно. Если работу сделали - зачем лишний раз изводить людей проверками? А если не сделали - так кто тут виноват? Уж точно не тот, кто вовремя написал &lt;i&gt;e-mail&lt;/i&gt; и обратил всеобщее внимание на проблему. Именно всеобщее - в поле "To:" должно быть минимум 10 человек. Сам получатель, его коллеги, начальники, начальники начальников, начальник автора и т.д. и т.п. Вот они пусть и контролируют - они ж начальники или кто?&lt;br /&gt;&lt;br /&gt;Это была преамбула. Переходим к амбуле :)&lt;br /&gt;&lt;br /&gt;Где-то в 2003-м году я установил у себя SpamAssassin - утилиту для фильтрации спама при помощи Байесовской классификации и кучи дополнительных эвристик. Установил, проверил на содержимом inbox-а, увидел, что ложных срабатываний вроде как нет, и успокоился.&lt;br /&gt;&lt;br /&gt;По прошествии пары месяцев я решил заглянуть в "карантинную папку" и проверить, не набежало ли там false positives, с которым надо что-то делать. Папка была не такой уже и толстой, но я с ужасом увидел, что она наполовину состоит из писем от моих коллег, в основном из бизнес-подразделений. Предполагая, что произошла какая-то ошибка в классификации, которую можно будет исправить настройками, я стал просматривать эти письма. На фоне крутилась мысль: "главное, чтобы я из-за спаморезки не пропустил что-то нужное и важное, а то стыда не оберешься".&lt;br /&gt;&lt;br /&gt;Проверка показала, что типичное письмо, попавшее "под нож", выходило из лап SpamAssassin с таким диагнозом: "Subject is all capitals; too many '!' in the subject; too many '!' in the body; body is more than 30% capitals; too many repetitions in the body; recepient list is too large".  То есть, по виду чистой воды спам, никак и не отличишь без вникания в смысл.&lt;br /&gt;&lt;br /&gt;Запоздало вписал рабочий домен в whitelist и удивился тому, что за два месяца никто не звонил и не интересовался судьбой просьб и указаний из "пропавших" писем, большинство из которых было адресовано непосредственно мне.&lt;br /&gt;&lt;br /&gt;Мораль придумайте сами.&lt;br /&gt;&lt;br /&gt;PS&lt;br /&gt;Мало ли, вдруг вы не в курсе. Принцип ПВО - это "погоди выполнять, отменят".</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:77283</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/77283.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=77283"/>
    <title>"Письма ненависти" в абон. отдел</title>
    <published>2008-01-13T16:00:19Z</published>
    <updated>2008-01-13T16:08:21Z</updated>
    <category term="работа"/>
    <category term="баечки"/>
    <content type="html">А вот посмотрите, что я у себя нашел в процессе раскопок старой рабочей почты. Это почти на уровне известного "письма запорожцев турецкому султану".&lt;br /&gt;&lt;br /&gt;В свое время было прислано знакомыми из дружественного оператора, публикуется с вырезанием всей персональной информации, но сохранением стиля и слога.&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="right"&gt;&lt;br /&gt;За нашу Советскую Родину!&lt;br /&gt;&lt;br /&gt;Иванову И.И.&lt;br /&gt;Руководителю департамента&lt;br /&gt;по расчетам с абонентами&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;«Пан» Иванов!&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Получил адресованное мне письмо №  9.99999999 / 88 (DD/MM/20YY) за Вашей подписью и очень обрадовался, потому что так давно не встречал столь ярких случаев административного идиотизма, представляющих интерес для моих друзей - журналистов.&lt;br /&gt;&lt;br /&gt;Столь яркую оценку Ваше послание заслужило по следующим соображениям (см. текст письма № 9.99999999):&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Во - первых, я не могу быть должником «FoobarTelecom», потому что с сентября 20YY года не получаю услуг мобильной связи от данного оператора.&lt;br /&gt;&lt;li&gt;Во - вторых, угрожать мне отключением номера не имеет смысла, потому что я по своей инициативе прекращаю действие контракта № 6666666 по причинам, изложенным ниже.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Что касается «примусового стягнення заборгованності» в 17.11 грн, то я с удовольствием дам объяснения в ходе судебного разбирательства, хотя считаю суд буржуазным предрассудком и привык разрешать конфликты “по понятиям”, как истинный сын криминального Донбасса.&lt;br /&gt;&lt;br /&gt;Для Вашего сведения сообщаю причины моего решения по отказу от услуг FoobarTelecom, хотя эту информацию Вы легко могли бы получить от Ваших подчиненных.&lt;br /&gt;&lt;br /&gt;Итак, я являлся контрактным абонентом FoobarTelecom с DD.MM.20(YY-2)г. и регулярно осуществлял платежи по счетам FoobarTelecom, хотя качество предоставляемых услуг было крайне неудовлетворительным. Так, постоянно уровень сигнала базовой станции в месте моего проживания (юго-восточный район г. Кукуево) составляет исчезающе малую величину (~1% от номинального значения), что вообще исключает возможность осуществления связи. Неоднократные обращения в техническую службу FoobarTelecom как мои, так и соседей успеха не имели. В результате большинство  жителей поселка отказались от услуг FoobarTelecom, как недобросовестного «предоставителя услуг» и перешли в лоно «ZapZapTelecom» - у них «покрытие» великолепное. Кроме того, в периоды, когда связь крайне необходима, например во время катастрофических снегопадов прошлого года, сеть FoobarTelecom оказывалась перегруженной, что исключало возможность связи, так что даже аварийные звонки в милицию и «скорую медицинскую помощь»  были невозможны - а это ставило под угрозу мою жизнь и здоровье, поскольку проводная связь в моем поселке отсутствует.&lt;br /&gt;&lt;br /&gt;Но, надеясь на лучшее и лелея мечту о доступе в INTERNET, я принял предложение FoobarTelecom и приобрел по дополнительному договору №7777777 новый телефон Motorola C380 IMEI №12345678901234. Случилось это DD.MM.20YYг., будь проклят этот день и час и поразит Аллах гонореей и неудержимым поносом весь персонал FoobarTelecom, а особенно сотрудников Луганского сервисного центра.&lt;br /&gt;&lt;br /&gt;Приобретенный мной телефон, это ублюдочное порождение фирмы Motorola, отказался работать (и даже включаться) к концу сентября 20YY года и был принят в гарантийный ремонт Луганским сервисным центром через продавца - дилера FoobarTelecom - ЧП Сидоров С.С. (визитка прилагается). Временной замены моему “телефону” никто не предложил и на просьбы об этом не откликнулся. Из гарантийного ремонта С380 вернулся с добрым заверением в совершенной исправности и опять сдох не отработав и одного часа. Повторный ремонт не ликвидировал дефект. И снова через час С380 отказался включаться и радовать меня «услугами» FoobarTelecom.&lt;br /&gt;&lt;br /&gt;В третий раз, уже с легким негодованием, дефектный аппарат был через ЧП Сидорова препровожден в Луганский сервисный центр. Совсем недолго, месяц с небольшим, с надеждой на замену аппарата я ожидал ответа из сервисного центра. Долгожданный ответ поразил даже видавшего виды ЧП Сидорова - «дефект не підтверджується...!» Возмущенный до полного ступора, я отказался принять, таким чудесным образом «выздоровевший» аппарат и посоветовав сотрудникам Луганского сервисного центра использовать его в качестве анального вибратора, удалился.&lt;br /&gt;&lt;br /&gt;С тех пор (середина декабря 20YYг.) я поклялся не иметь никаких мирных отношений с FoobarTelecom. Я не знаю как у Вас на Украине, пан Иванов, а у нас в Донбассе за такие штуки подвергают «легкому остракизму с тяжелыми телесными повреждениями».&lt;br /&gt;&lt;br /&gt;Учитывая вышеизложенное, предлагаю FoobarTelecom в Вашем лице следующее:&lt;br /&gt;&lt;br /&gt;Вариант А.&lt;br /&gt;1. FoobarTelecom приносит мне свои извинения и возвращает деньги (200грн.), уплаченные мною за злополучный телефон С380 и компенсирует причиненный мне моральный ущерб и транспортные расходы понесенные мною на поездки по делам гарантийного ремонта (еще 2000грн.).&lt;br /&gt;2. Я принимаю извинения и оговоренные выше суммы, а так же оплачиваю Ваш последний счет (17.11 грн.) - в качестве жеста доброй воли.&lt;br /&gt;3. FoobarTelecom и я взаимно забываем о существовании друг друга.&lt;br /&gt;&lt;br /&gt;Вариант В&lt;br /&gt;1. FoobarTelecom игнорирует мои предложения и полагая, что имеет дело с лохом, возбуждает судебное преследование в отношении меня.&lt;br /&gt;2. Я, в качестве адекватного ответа, организовываю и провожу антирекламную акцию против FoobarTelecom в печати и INTERNET, которая несомненно встретит понимание и сочувствие среди жителей Донбасса.&lt;br /&gt;3. Всеми доступными мне законными способами наношу FoobarTelecom финансовый ущерб, превышающий на три (3) порядка понесенные мной потери.&lt;br /&gt;&lt;br /&gt;Примечание: Случаи уничтожения антенно-фидерных систем базовых станций мощными электромагнитными импульсами СВЧ - диапазона (1,2-1.8ГГц), особенно в грозовые периоды прошу моими акциями не считать, хотя я и считаюсь признанным специалистом в области методов и систем радиоэлектронной борьбы (РЭБ) военного назначения.&lt;br /&gt;&lt;br /&gt;Вариант С&lt;br /&gt;1. FoobarTelecom вообще игнорирует мое существование далее см. п.2 и 3 варианта В.&lt;br /&gt;&lt;br /&gt;Заканчивая мое послание FoobarTelecom, остается пожелать всему коллективу FoobarTelecom и подчиненных ей структур скорейшего разорения, стихийных бедствий, эпидемий венерических заболеваний, хакерских атак на сети и т.п.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Лютый ВРАГ FoobarTelecom&lt;br /&gt;Бывший контрактный абонент Петров П.П.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S. В ходе дальнейшей переписки предлагаю Вам использовать русский литературный язык, а не «українську мову» (галицийско-канадское наречие) к которому у меня идиосинкразия.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:76719</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/76719.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=76719"/>
    <title>Сказ про то, как девушка Катя робота покупала</title>
    <published>2008-01-08T18:59:19Z</published>
    <updated>2008-01-09T08:40:47Z</updated>
    <category term="хохмочки"/>
    <category term="баечки"/>
    <category term="jabber"/>
    <content type="html">Вы думаете, лучшие друзья девушек - это бриллианты? Нееет, лучшие друзья девушек - это &lt;strong&gt;роботы&lt;/strong&gt;!&lt;br /&gt;&lt;br /&gt;Сначала предыстория. В моем &lt;a href="http://ru.wikipedia.org/wiki/Jabber" target="_blank" rel="nofollow"&gt;jabber&lt;/a&gt;-клиенте настроен auto join в несколько конференций. Сами конференции я в последнее время практически не просматриваю, но и auto join не отключаю. В двух конференциях я даже модератор :), и ко мне периодически обращаются "в приват" с самыми странными просьбами. &lt;br /&gt;&lt;br /&gt;Например, сегодня меня контачит "в привате" пользователь &lt;font color="red"&gt;Катя&lt;/font&gt; из конференции ... впрочем, неважно, из какой именно. Дальше следует такой диалог (стилистика, орфография и т.п. сохранены, особо злачные фразы выделены):&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Только тут стоит бот ?&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; нет&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Че нет ?&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; не только тут&lt;br /&gt;&lt;u&gt;&lt;strong&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Не поняла &lt;/strong&gt;&lt;/u&gt;&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; не только тут стоит бот&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Можеш написать комнаты где можно бота дешево купить ?&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; а зачем его покупать?&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; А че есть бесплатные ?&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Кокупать чтоб был &lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; А че есть бесплатные ?&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; есть&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; В этой комнате есть ?&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; есть&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Какой ник ?&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; вон, зайди в haskell@conference.jabber.ru, пообщайся с ботом :)&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; а тут - спроси "кто тут, бля, бот?". Тебе сразу и расскажут :) &lt;small&gt;(лирическое отступление номер 1: в этой конференции "сидит" бот, который выкидывает за употребление мата)&lt;/small&gt;&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; А там есть бот ? бесплатный&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;Тут &lt;font color="red"&gt;Катя&lt;/font&gt; подключается к haskell@c.j.r. Там ее встречает бот с вопросом "напиши код на Haskell, находящий минимальный нечетный элемент списка, и получи member-а". Катя, похоже, офигевает и даже не пытается с ним общаться. Проходит пару минут.&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;img src="https://imgprx.livejournal.net/2f77e9d63e0e745dc47e2889a5aae273591bb1ea6b691574a1c97bfb68cd2978/P2WlxyVijxKghGBt_s1eWEMdsf-ah7h0zEuBUr1KjsOd8BfZ2sOpB01pF1c6HUJ_okdbiHLLcw9KHFYf0kprrxFA2yKAPvyV-EhRqRBeKBfiF-aL-Mteji9N:yLAG7njpYRUPXnV0LLHF4Q" alt="Слава роботам!" align="right" hspace="10" fetchpriority="high" /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Мне нужен бот &lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; Да, бот - это хорошо&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Мне нужен бот &lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; Чтобы поговорить?&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Можно принесли мне в комнату ? Только бесплатных ?&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; да легко. &lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; А это платон будет ? &lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; Платон давно умер&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; См. &lt;a href="http://ru.wikipedia.org/wiki/%D0%9F%D0%BB%D0%B0%D1%82%D0%BE%D0%BD" target="_blank" rel="nofollow"&gt;http://ru.wikipedia.org/wiki/%D0%9F%D0%BB%D0%B0%D1%82%D0%BE%D0%BD&lt;/a&gt;&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; А это за деньги будет ? &lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; За деньги можно практически всё&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Короче ты можеш привести бота aleksey  чтоб не за деньги ?&lt;small&gt;(лирическое отсутпление номер 2: известного в около-jabber-ных кругах aleksey, человека многих талантов,почему-то периодически принимают за бота :)&lt;/small&gt;&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Короче ты можеш привести бота aleksey  чтоб не за деньги ?&lt;br /&gt;&lt;u&gt;&lt;b&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; а чего ты фразы повторяешь? Ты, часом, не бот?&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Нет я не бот я катя &lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Приведи мне пожалуйста не за деньги этого бота lambdabot  на дня 4 ладно ?&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; легко&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; куда?&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; В комнату Frends&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; получай&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;Тут надо сделать лирическое отступление номер 3. Lambdabot - это такой jabber bot, написанный на &lt;a href="http://www.haskell.org" target="_blank" rel="nofollow"&gt;Haskell&lt;/a&gt;, который может делать много интересных вещей, связанных с Haskell, но который совершенно бесполезен в контексте обычной "трепологической" комнаты. Зачем он девочке Кате - малопонятно.&lt;br /&gt;&lt;br /&gt;Я кидаю всю переписку &lt;span  class="ljuser  i-ljuser  i-ljuser-type-P     "  data-ljuser="dottedmag" lj:user="dottedmag" &gt;&lt;a href="https://dottedmag.livejournal.com/profile/"  target="_self"  class="i-ljuser-profile" &gt;&lt;img  class="i-ljuser-userhead"  src="https://l-stat.livejournal.net/img/userinfo_v8.png?v=17080&amp;v=916.1" /&gt;&lt;/a&gt;&lt;a href="https://dottedmag.livejournal.com/" class="i-ljuser-username"   target="_self"   &gt;&lt;b&gt;dottedmag&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;-у (на VPS которого крутится lambdabot). Мы заходим во Frends посмотреть, что будет. Там - человек 5 народу, и уже сидят два бота(!), &lt;strong&gt;в том числе и тот, который выкидывает за мат.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Я join-ю lambdabot-а в Frends@c.j.r. &lt;font color="red"&gt;Катя&lt;/font&gt; пытается с ним общатся (посылая сообщения "Привет!", "Ты бот?"). Lambdabot молчит. Диалог в привате продолжается:&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Ты тут ?&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; тут&lt;br /&gt;&lt;b&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Спосибо а кто это Mikhail Gusarov  ?&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; не знаю. Может быть, еще один бот?&lt;br /&gt;&lt;/b&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; А можеш мне бота милан привести не за деньги ?&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; Милан - это в Италии, это далеко. Не могу&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; А можеш бота выбухоль не за деньги ?&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; Я думаю, бота с таким именем сразу забанят&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; По чему ?&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; В этой комнате за бан ?&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Ну приведешь ?&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; Нет, я не пью&lt;br /&gt;&amp;lt;&lt;font color="green"&gt;ADEpt&lt;/font&gt;&amp;gt; Вон, у тебя уже есть lambdabot. Мало?&lt;br /&gt;&lt;b&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Ага :-*  мне бы еще одного выбухоль ладно пожалуйстн котик ? &lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Привиди ладно ? &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;В это время во Frends@c.j.r происходит следующее&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; SulciBot: бот?&lt;br /&gt;&amp;lt;SulciBot&amp;gt; &lt;font color="red"&gt;Катя&lt;/font&gt;: Да&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; ПыХтачоГ: бот ?&lt;br /&gt;&amp;lt;ПыХтачоГ&amp;gt; [&lt;font color="red"&gt;Катя&lt;/font&gt;]: матом что&lt;br /&gt;&amp;lt;&lt;font color="red"&gt;Катя&lt;/font&gt;&amp;gt; Иди на хуй &lt;br /&gt;--- &lt;font color="red"&gt;Катя&lt;/font&gt; has been kicked: фильтруем базар&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;strong&gt;GAME OVER&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="left"&gt;PS&lt;br /&gt;Знающие люди подсказали мне, что в наше время развелась мода на создание jabber-конференций и их "обустройство" по последнему писку моды. Последний писк моды подразумевает, что в конференции есть разные полезные боты - следящие за порядком, организующие викторины и т.п. Однак вот беда - создать конференцию можно двумя кликами даже в том случае, если у тебя в голове одна извилина, и та - прямая, а чтобы "завести бота", надо потрудиться - найти хостинг, скачать (о ужас!) исходники, что-то там куда установить или даже скомпилировать ... Таки сложные действия создавателям конференции не под силу. А бота - хочеццо(tm). Вот они и ходят по другим конференциям и клянчат помощь таким вот образом.&lt;br /&gt;&lt;br /&gt;Соответственно, сейчас модно продавать ботов по цене от 50$/час эксплуатации + 100$ за настройку :)&lt;br /&gt;Получается, проворонил я свое счастье.&lt;br /&gt;&lt;br /&gt;PPS&lt;br /&gt;Платят или нет - не знаю, но не говорите, что я вас не предупреждал про business opportunity&lt;br /&gt;&lt;br /&gt;PPPS&lt;br /&gt;get-a-bot.com еще свободен ;)&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:75349</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/75349.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=75349"/>
    <title>Про разную емкость и сексизм</title>
    <published>2007-10-16T17:58:59Z</published>
    <updated>2007-10-16T18:31:22Z</updated>
    <category term="работа"/>
    <category term="баечки"/>
    <content type="html">По долгу службы был в офисе интернет-провайдера X.&lt;br /&gt;&lt;br /&gt;А поскольку я находился там довольно-таки долго, и сидел у приоткрытой двери в коридор, то невольно стал свидетелем двух забавных сценок. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Сценка первая, про сексизм.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;По коридору ходит типичный "менеджер среднего звена" (М). Безупречная прическа, костюм-тройка, запонки, дорогой телефон, громкий командный голос. Он ведет Деловой Разговор по мобильнику, который слышно, наверное, по всему этажу.&lt;br /&gt;&lt;br /&gt;М (собеседнику): И вообще, этим занимался не я, а Наташа. Вот она придет - сам спросишь у нее, что да как. О! А вот и она! Момент.&lt;br /&gt;М (кричит через весь этаж): Наташа! НАТАША! Быстрее беги сюда, тут срочное дело, тебя Борис хочет!&lt;br /&gt;&lt;br /&gt;Из соседней двери выходит Типичный Айтишник (ТА) в футболке с надписью root и пустой кружкой в руке. &lt;br /&gt;&lt;br /&gt;ТА (себе под нос, но достаточно горомко, чтобы слышал М): Ха! Борис хочет! Да ее тут все хотят... Только бестолку это. &lt;br /&gt;&lt;br /&gt;ТА скрывается на кухне. Под цокот каблуков из-за угла коридора появляется Типичная Блондинка. Менеджер смотрит на нее оценивающим взгядом, как будто по-настоящему разглядел ее только сейчас ...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Сценка вторая, про ёмкость&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;По коридору идет Опытный Айтишник (А.) с кружкой в руке и выражением,  ему навстречу - Жизнерадостный Айтишник (Ж.) с блеском в глазах. Происходит следующий диалог:&lt;br /&gt;&lt;br /&gt;Ж(в нарочито вежливом тоне, сразу понятно, что с А. они на короткой ноге):  Желаю здравствовать,  А.! Как удачно, что я вас встретил! Мне позарез нужна ваша емкость.&lt;br /&gt;А недоуменно изгибает брови домиком и молча протягивает Ж. свою кружку.&lt;br /&gt;Ж берет кружку и так же недоуменно ее разглядывает. &lt;br /&gt;Ж(после паузы): Мне не нужна ваша кружка. Мне нужна ваша оптоволоконная емкость на Прагу!&lt;br /&gt;&lt;br /&gt;Оба смеются.&lt;br /&gt;&lt;br /&gt;&lt;small&gt;Тут и баечкам конец, а кто слушал - молодец&lt;/small&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:73439</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/73439.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=73439"/>
    <title>Одну поломал, вторую - потерял...</title>
    <published>2007-09-25T18:24:39Z</published>
    <updated>2007-09-25T18:24:39Z</updated>
    <category term="баечки"/>
    <content type="html">Листая логи ...&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"Добрый день&lt;br /&gt;&lt;br /&gt;Помогите, пожалуйста, нам получить свою папку с документами по проекту XYZ. Мы ее передавали Ивану Иванову два месяца назад для копирования. Папка толстая, подписанная. Цвет - не помню.&lt;br /&gt;&lt;br /&gt;дата, подпись"&lt;/i&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:73146</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/73146.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=73146"/>
    <title>Еще про фамилии: охота пуще неволи</title>
    <published>2007-09-20T17:25:30Z</published>
    <updated>2007-09-20T17:25:30Z</updated>
    <category term="баечки"/>
    <content type="html">В компании Z работала красивая и незамужняя девушка Ирина. Фамилия у Ирины была интересная и редкая - Охота. Произнесите: "Ирина Охота". Впечатляет, ага?&lt;br /&gt;&lt;br /&gt;А еще в компании Z работал некто К, красивый и женатый. Ирина как-то подшутила над ним на тему семейных отношений, или что-то в этом роде. Пошутила и забыла. А он - не забыл.&lt;br /&gt;&lt;br /&gt;И в один прекрасный день решил разыграть Ирину в ответ.  С этой целью он выбрал из базы данных компании Z всех абонентов мужеского полу, от 25 до 35 лет, с суммой ежемесячного счета больше X грн, и еще несколько хитрых критериев.&lt;br /&gt;&lt;br /&gt;Дальше К распечатал список и пошел к Ирине. Хлопнув стопкой бумаги об стол, он заявил, что:&lt;br /&gt;а)негоже засиживаться в девках&lt;br /&gt;б)системный подход - это наше всё&lt;br /&gt;в)он сделал для нее список подходящих кандидатов в мужья&lt;br /&gt;г)в порыве беспрецедентного бескорыстия он готов самостоятельно обзвонить всех потенциальных претендентов и опросить их на предмет соответствия требованиям Ирины. Список вопросов/требований она должна составить и подать К в письменной форме.&lt;br /&gt;д)взамен К просит только одного - если затея увенчается успехом, и Ирина найдет свою "половинку", то в браке она должна взять двойную фамилию.&lt;br /&gt;&lt;br /&gt;После чего К ушел, оставив список на столе "изнанкой" вверх. Естественно, любопытство победило и Ирина решила посмотреть, кто же попал в список. Перевернув первую страницу, она сразу же заметила определенную закономерность в данных.&lt;br /&gt;&lt;br /&gt;Все кандидаты были с фамилией Рыбалко.&lt;br /&gt;&lt;br /&gt;&lt;small&gt;Все имена изменены, совпадения преднамеренны&lt;/small&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:72781</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/72781.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=72781"/>
    <title>Убить генерального директора</title>
    <published>2007-09-19T18:42:29Z</published>
    <updated>2007-09-19T18:42:29Z</updated>
    <category term="баечки"/>
    <content type="html">Много лет тому назад, в далекой-далекой галактике, жила-была компания Z. Деньги в компании были в основном "оттуда", и гендиректор тоже был приезжий. Звали его, допустим, Филипп.&lt;br /&gt;&lt;br /&gt;А еще в компании Z был отдел абонентского обслуживания, в просторечии - Call Center. Как известно, работа в нем тяжелая и изнуряющая, зато при приеме не просят образцово-показательного резюме и опыта работы в течении N лет. Другими словами - охотно берут студентов. Особенно - на работу в ночную смену. &lt;br /&gt;&lt;br /&gt;Иван вторую неделю работает в Call Center компании Z. Он уже не волнуется, произнося в гарнитуру "Компания Z, оператор 9876, Иван. Чем могу вам помочь?". Он уже почти разобрался в тонне новых терминов и понятий. Он почти освоил все установленные на его рабочем месте интерфейсы к различным системам компании.&lt;br /&gt;&lt;br /&gt;Среди этих интерфейсов есть один, особенный. Это dashboard, автоматически открывающийся на полный экран при приеме звонка от абонента. Специальный софт получает от мини-АТС номер, с которого звонят, и перед глазами оператора оказывается информация, необходимая для ответов на самые часто задаваемые вопросы: текущий баланс, последние звонки и события, история счетов и платежей, активные сервисы и т.п. В верхней части dashboard-а, на самом видном месте, находится ФИО позвонившего. &lt;br /&gt;&lt;br /&gt;Все это Иван уже выучил назубок. Но вот чего он еще не знает, так это того, что dashboard специальным образом показывает информацию о так называемых VIP-абонентах. Впрочем, скоро этот пробел в его образовании будет заполнен.&lt;br /&gt;&lt;br /&gt;Как раз в этот момент VIP-абонент компании Z, гражданка одного из европейских государств, находящаяся в Украине по долгу дипломатической службы, набирает номер Call Center. Вообще-то звонки VIP-абонентов должны маршрутизироваться на специальную группу опытных операторов, но сегодня особый день - идет плановое обслуживание и настройка мини-АТС Call Center-а, и звонок идет по обычному маршруту. И попадает на обслуживание к Ивану.&lt;br /&gt;&lt;br /&gt;Иван слышит сигнал вызова в наушнике своей гарнитуры и поднимает глаза на экран, готовясь произнести заученное приветствие. Dashboard мигает, обновляя данные, и вдруг на месте ФИО появляется красная надпись "Убей Филиппа!". Слова приветствия застревают у Ивана в горле, мысли путаются, ладони взмокают. Он не слышит, что говорит ему голос его собеседницы. Он смотрит на призыв к убийству директора, и голове его чередой проносятся мысли, одна другой глупее: "Вирус? Дурацкий розыгрыш? Кто-то затаил зуб на директора и пакостит, заменяя ФИО на провокационные надписи? Сказать кому? А вдруг подумают, что это я же и поменял?". &lt;br /&gt;&lt;br /&gt;Раздосадованная собеседница кладет трубку и dashboard очищается. Иван еще некоторое время сидит, уставившись в монитор, но затем стряхивает с себя оцепенение и идет к начальнику смены. Выслушав Ивана, начальник поднимает историю звонков, открывает данные абонента и на экране снова появляется крамольное "Убей Филиппа!".&lt;br /&gt;&lt;br /&gt;Иван ожидает разноса, но вместо этого начальник начинает смеяться в голос. Насмеявшись до икоты, начальник объясняет Ивану, что при звонке VIP-абонента его ФИО будет написано красным цветом, с восклицательным знаком (чтобы было заметнее). &lt;br /&gt;&lt;br /&gt;А что касается самой надписи - то Ивану просто повезло, что Philippa Oubey дозвонилась именно ему.&lt;br /&gt;&lt;br /&gt;Занавес.&lt;br /&gt;&lt;br /&gt;&lt;small&gt;Все события реальны, имена изменены, совпадения случайны.&lt;/small&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:70868</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/70868.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=70868"/>
    <title>Правдивая (или нет) история про управление рисками</title>
    <published>2007-08-23T19:44:52Z</published>
    <updated>2007-08-28T07:53:18Z</updated>
    <category term="работа"/>
    <category term="баечки"/>
    <content type="html">Эту историю мне рассказали через &lt;a href="http://shmyg.livejournal.com/34299.html" target="_blank"&gt;третьи руки&lt;/a&gt;, но она слишком уж хороша, чтобы не изложить ее здесь. &lt;br /&gt;&lt;br /&gt;Однажды в некой компании Z решили бороться с рисками. А в компании Z слов на ветер не бросали. Сказано - значит "сделано". Были закуплены книжки, прочитаны курсы по управлению рисками и даже создан специальный отдел, в задачу которого входило "оценивать и уменьшать". Правда, после прочтения курсов отдел существенно пополнили новыми "зелеными" сотрудниками, но кто же сказал, что в новом начинании все обойдется без изъянов? &lt;br /&gt;&lt;br /&gt;Сотрудники этого отдела выступили с разумным рацпредложением - добавить к списку обязательно проектной документации документ под названием "Карта рисков", примерно такой:&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;
&lt;tr&gt;&lt;td&gt;Риск&lt;/td&gt;&lt;td&gt;Ушерб&lt;/td&gt;&lt;td&gt;Вероятность возникновения&lt;/td&gt;&lt;td&gt;Взвешенный ущерб&lt;/td&gt;&lt;tr&gt;
&lt;tr&gt;&lt;td&gt;Увольнение всех сотрудников в один день&lt;/td&gt;&lt;td&gt;1.000.000$&lt;/td&gt;&lt;td&gt;0.001%&lt;/td&gt;&lt;td&gt;10$&lt;/td&gt;&lt;tr&gt;
&lt;tr&gt;&lt;td&gt;Баги в 3rd-party библиотеках&lt;/td&gt;&lt;td&gt;10.000$&lt;/td&gt;&lt;td&gt;50%&lt;/td&gt;&lt;td&gt;5000$&lt;/td&gt;&lt;tr&gt;
&lt;tr&gt;&lt;td&gt;Не получиться изжить традицию пить пиво в офисе в пт вечером, а потом сообща править баги&lt;/td&gt;&lt;td&gt;1000$&lt;/td&gt;&lt;td&gt;100%&lt;/td&gt;&lt;td&gt;1000$&lt;/td&gt;&lt;tr&gt;
&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Ну, и так далее. Как видно, подход был выбран простой, но действенный. Бросив один взгляд на таблицу, можно было увидеть, что баги в сторонних библиотеках могут ударить по карману больнее, чем увольнение всех сотрудников (конечно, если нет ошибки в оценке ушерба и вероятности).&lt;br /&gt;&lt;br /&gt;А так как проекты в компании Z были более-менее похожие, то, понятное дело, и риски у них были почти одинаковые. Соответственно, в кратчайшие сроки была создана "Карта стандартных проектных рисков". В ней был не только перечень (названия) стандартных рисков, но и стандартная (ожидаемая) вероятность их реализации и стандартная оценка ущерба.&lt;br /&gt;&lt;br /&gt;Понятное дело, что добавление новых рисков в этот документ доводилось до сведений всех менеджеров, чтобы не было недопониманий и разночтений. &lt;br /&gt;&lt;br /&gt;И вот однажды, &lt;s&gt;когда ничто, казалось, не предвещало беды&lt;/s&gt; менеджеры компании Z получили приглашение на короткое, но чрезвычайно нужное собрание, посвященное Очередному Обновлению Карты Стандартных Рисков. &lt;br /&gt;&lt;br /&gt;В комнате, которой чудом удалось избежать превращения в очередной десяток "кубиков", сидели, стояли, ходили и ели дармовое печенье практически все менеджеры проектов компании Z. В комнате было так тесно, что сторонний наблюдатель очень удивился бы, не найдя в "Стандартной карте рисков" строчку "риск лишиться всех менеджеров вследствие теракта или банальной духоты в комнате для совещаний". Наконец, дверь открылась и в комнату впорхнуло воздушное создание, которое уместнее было бы встретить &lt;s&gt;на страницах гламурных журналов&lt;/s&gt; где-нибудь в коридоре Института культуры. &lt;br /&gt;&lt;br /&gt;"Добрый день, меня зовут ...., и сегодня я буду представлять вам последние изменения в Карте стандартных рисков". Разговоры прекратились, кто-то подавился печеньем, и в комнате воцарилась тишина. Ничуть не смутясь, девушка положила на стол стопку распечаток и продолжила: "Полный перечень вы найдете в распечатке, а самое главное изменение - это новый риск "в протестированном продукте тут же будут найдены ошибки". Денежная оценка - четверть бюджета проекта, а вероятность возникновения - 50%". Кто-то сдавлено закашлялся, ему предложили воды.  "Погодите, почему 50%? Откуда вы взяли эту цифру?", - спросил какой-то менеджер с галерки. Девушка посмотрела на него взглядом, в котором ясно читалось &lt;em&gt;не люблю идиотов и идиотских вопросов&lt;/em&gt;: "Это же очевидно! Вероятность 50%, т.к. ошибки или будут найдены, или нет".&lt;br /&gt;&lt;br /&gt;В этот момент одновременно произошло сразу несколько событий. Два менеджера точно решили, что с понедельника они идут в отпуск, т.к. больше нету сил. Один менеджер понял, что вопрос "увольняться или подождать следующего квартала" даже не стоит. Еще трое попробовали вспомнить, не первое ли сегодня апреля.&lt;br /&gt;&lt;br /&gt;"Простите, это что - глупая шутка?", - не унимался все тот же вопрошающий, - "Вы это серьезно? Вы что, не понимаете, что так считать нельзя?". В этот раз во взгляде девушки явственно читалось &lt;em&gt;убью гада!&lt;/em&gt;: "Мужчина! Если бы вы учили в школе математику, а не прогуливали уроки, то знали бы, что вероятность &lt;b&gt;именно так&lt;/b&gt; и считается. Впрочем, если вы все знаете лучше всех, то пожалуйста - выходите сюда и заканчивайте презентацию вместо меня".&lt;br /&gt;&lt;br /&gt;После чего раскрасневшаяся от возмущения девушка пулей вылетела в коридор, громко хлопнув дверью. Где ее тут же съел проходивший мимо &lt;a href="http://en.wikipedia.org/wiki/Tyrannosaurus" target="_blank" rel="nofollow"&gt;Tyrannosaurus Rex&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Мораль придумайте сами :)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:70149</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/70149.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=70149"/>
    <title>Что в номере тебе моем?</title>
    <published>2007-08-17T19:45:22Z</published>
    <updated>2007-08-17T19:45:22Z</updated>
    <category term="работа"/>
    <category term="баечки"/>
    <content type="html">Однажды, в &lt;s&gt;студеную зимнюю&lt;/s&gt;горячую летнюю пору в компании Z назрела необходимость провести "маркетинговую акцию". Если термин вам незнаком, то вы &lt;s&gt;- счастливый человек&lt;/s&gt; можете составить какое-то впечатление о процессе, представив себе ловлю рыбы браконьерским способом.&lt;br /&gt;&lt;br /&gt;На выбранную "целевую группу пользователей" (рыбу в пруду) воздействуют разнообразными "маркетинговыми механизмами" (динамитом). В результате часть рыбы всплывает брюхом кверху. Посчитав снулую рыбу, можно определить, была ли акция успешной, достигнут ли запланированный процент отклика. Хороший маркетолог отличается от плохого тем, что плохого в принципе не волнует, переживет ли пользователь участие в акции. Если не переживет - то это уже дело тех, кто борется с оттоком абонентов, только и всего.&lt;br /&gt;&lt;br /&gt;Впрочем, ближе к теме. Итак, возникла необходимость провести маркетинговую акция, суть которой заключалась в том, что отдельных денежных клиентов необходимо было поставить перед неприятным фактом: в результате некоторых изменений в государственном законодательстве они должны были лишиться определенных  льготам и бонусов. Ответственные сотрудники написали листовку, в которой в максимально обтекаемой форме была обрисована сложившаяся ситуация, абонентов просили войти в положение и т.д. и т.п. В случае возникновения вопросов абонентам предлагалось позвонить в центр обслуживания абонентов по специальному выделенному номеру и получить ответ на все интересующие их вопросы.&lt;br /&gt;&lt;br /&gt;Текст листовки согласовывался и пересогласовывался, прошел через десяток правок и в конце-концов был утвержден. Листовка была распечатана, вложена в фирменные конверты и отправлена адресатам. Все участники процесса вздохнули с облегчением.&lt;br /&gt;&lt;br /&gt;На следующий день в отдел по работе с абонентами (по общему номеру) позвонил один из "попавших под акцию" абонентов и сказал примерно следующее: "Я, конечно, может чего-то не понимаю, но ... Короче, вам будет интересно узнать, что по номеру, указанному в листовке, какой-то мужчина посылает всех матом".  Конфуз! Скандал! Такого не может быть! Абоненту обещают во всем разобраться.&lt;br /&gt;&lt;br /&gt;И тут обнаруживается интересная деталь: номер телефона "для справок" указан с кодом сети. Сам номер - городской, и код, соответственно, должен быть (044). К сожалению, авторы текста "на автомате" вместо городского кода написали код мобильной сети компании Z. &lt;br /&gt;&lt;br /&gt;В результате все звонки с вопросами "кто посмел забрать мои льготы и бонусы?" попадают ... дедушке одного из сотрудников компании Z. Дедушка, судя по всему, оказался человеком с отнюдь не ангельским терпением и доступно объяснял всем звонящим, куда и как именно им следует пройти.&lt;br /&gt;&lt;br /&gt;История умалчивает о том, какой урон был нанесен имиджу компании Z, как именно был исправлен номер телефона, и ящик коньяка какой марки был выставлен дедушке сотрудниками компании Z ;)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:65489</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/65489.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=65489"/>
    <title>Кого имеет Microsoft?</title>
    <published>2007-06-20T20:51:08Z</published>
    <updated>2007-06-21T17:15:23Z</updated>
    <category term="универ"/>
    <category term="баечки"/>
    <content type="html">Когда я учился в КГУ, в здании нашего факультета находился один из "офисов" издательства "Диалектика". &lt;br /&gt;&lt;br /&gt;Издательство охотно и постоянно набирало студентов со знанием английского для перевода технической литературы. Резюме и опыт работы не требовался - достаточно было нормально сделать тестовый перевод. Платили ниже среднего, но для студента второго-третьего курса это была реальная возможность зарабатывать в месяц $300-500 - деньги по тем временам совсем немаленькие.  &lt;br /&gt;&lt;br /&gt;С самого начала было понятно, что издательство на мне наживается, но я не был в обиде - получаемый взамен опыт с лихвой все компенсировал. Во-первых, я наконец-то начал набирать вслепую на русском со скоростью около 200 знаков в минуту. Потребность набирать по 20-30К текста в день сделала то, чего не смогли сделать разнообразные "тренажеры клавиатуры" - уже через неделю я переключился с "четырехпальцевого  полузрячего" на десятипальцевый слепой метод, которым уверенно пользуюсь до сих пор. В процессе обучения слепому набору указательные пальцы так и норовили "залезть" в зону противоположной руки, и тут мне пригодился вычитанный где-то совет - вставить в клавиатуру согнутую бумажку высотой 2 см так, чтобы она прошла между парами клавиш 5 и 6, Е и Н, и т.п. Нынешнее поколение покрутит пальцем у виска и покажет на клавиатуру "MS Natural", но в то время такие предметы IT-шной роскоши были простому студенту недоступны, и приходилось обходиться сложенной бумажкой :)&lt;br /&gt;&lt;br /&gt;Впрочем, я отвлекаюсь. Второй интересный опыт, имеющий отношение к этой работе, был связан с тем, что в ту пору я увлекался ФИДО, "держал ноду" (2:463/218) и всячески чувствовал себя на переднем крае модного движения. Каково же было мое удивление, когда выяснилось,  что назначенный мне технический редактор (солидный дядя с бородой вдвое меня старше) - тоже фидошник, и мы пересылали друг другу версии переводов direct attach-ем. После этого я окончательно убедился в том, что Киев - большая деревня, и для любого встреченного в около-IT-шных кругах человека обязательно существует какой-то ваш общий знакомый.&lt;br /&gt;&lt;br /&gt;Поностальгировали - и хватит. Пора уже переходить к интимной жизни софтверного гиганта, на которую я намекал в заголовке.&lt;br /&gt;&lt;br /&gt;Всего я успел поучаствовать в переводах около шести книжек, и книги попадались всякие - от "Borland C++ 4.5" и "OS/2 для чайников" до &lt;a href="http://www.dcp.kiev.ua/books/other/yp_www.html" target="_blank" rel="nofollow"&gt;"Желтых страниц World Wide Web"&lt;/a&gt;. Эти самые "желтые страницы" были квинтэссенцией серии "для чайников" - 90% книги состояло из screenshot-ов разнообразных internet-сайтов с короткими аннотациями на два-три абзаца. Примерно половина сайтов не могла представлять никакого интереса для людей, живущих за пределами США. но - из песни ж слова не выкинешь. Все, что было в оригинальной книге, тщательно перевели и издали.&lt;br /&gt;&lt;br /&gt;Справедливости ради стоит заметить, что оставшиеся 10% книги честно старались дать читателю какое-то поверхностное представление о том, что такое Интернет с технической, социальной и бизнесовой точек зрения. Читателю рассказывали о том, что такое модем, как его выбрать и настроить, чем отличаются браузеры Mosaic и Netscape 2.0, давали краткую историю развития интернет и описывали основных "игроков" в новой рыночной нише.&lt;br /&gt;&lt;br /&gt;Естественно, в этом разделе не могли не упомянуть Microsoft. Где-то в середине двухстраничного описания была фраза "The Internet market is fairly new, but Microsoft already has a lot of customers and tries to keep them all satisfied". Ничтоже сумяшеся я перевел это как ".... фирма Microsoft имеет множество пользователей, и старается их всех удовлетворять.", посмеялся, предвкушая реакцию технического редактора, попади ему в руки попал такой перевод, и лег спать. На следующий день это эпизод забылся, я закончил главу и переслал ее на редактуру вместе с этой фразой. &lt;br /&gt;&lt;br /&gt;Оказалось, что технический редактор тоже посмеялся, и решил ничего не менять. Литературный редактор тоже оценил шутку - все переводы, в том числе достаточно массивные, делались в Word 6.0, так что повод для веселья долго искать было не нужно. В результате, фраза ушла в печать без изменений.&lt;br /&gt;&lt;br /&gt;Понятное дело, что крупица истины затерялась среди 500 с гаком страниц совершенно бесполезной информации, но я до сих пор храню на книжной полке авторский экземпляр этой книги с первым сосбственноручно сделаным массовым easter egg-ом.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPD&lt;/b&gt;: уже после написания поста вспомнилось одна интересная деталь (под влиянием комментария &lt;span  class="ljuser  i-ljuser  i-ljuser-type-P     "  data-ljuser="dreamiurg" lj:user="dreamiurg" &gt;&lt;a href="https://dreamiurg.livejournal.com/profile/"  target="_self"  class="i-ljuser-profile" &gt;&lt;img  class="i-ljuser-userhead"  src="https://l-stat.livejournal.net/img/userinfo_v8.png?v=17080&amp;v=916.1" /&gt;&lt;/a&gt;&lt;a href="https://dreamiurg.livejournal.com/" class="i-ljuser-username"   target="_self"   &gt;&lt;b&gt;dreamiurg&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;. В процессе перевода долго мучились вопросом, как переводить слово "browser". Делать кальку - вроде как неудобно, но многие так делают, переводить по смыслу - неуклюже ... Плюнули, и оставили "браузер". Набирал, и каждый раз как &lt;s&gt;серпом по я...&lt;/s&gt; коробило. А сейчас вон все говорят - и ничего :)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:62484</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/62484.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=62484"/>
    <title>Как понять, что в коде много багов? - Это когда фиксишь их нечаянно ...</title>
    <published>2007-04-25T20:42:57Z</published>
    <updated>2007-04-25T20:42:57Z</updated>
    <category term="баечки"/>
    <content type="html">Много лет тому назад, &lt;s&gt;в одной далекой галактике войска Императора собирали в космосе очередную Звезду Смерти&lt;/s&gt;. Нет, это из другой баечки. Начнем еще раз ...&lt;br /&gt;Много лет тому назад, в одно софтверной компании группа разработчиков работала над очередным Скучным Индустриальным Проектом, который к ним за-outsource-или из Индии(!).&lt;br /&gt;&lt;br /&gt;Основной задачей проекта было взять Большую Индустриальную Систему и заменить в ней "толстого клиента" на web GUI. Чтобы, так сказать, в духе времени обновить порядком устаревший интерфейс. С серверной стороны планировался код на яве, который при помощи самопального протокола общался с основными модулями системы, написанными на С++ под Solaris. Не смущайтесь, зевайте-зевайте. Я тоже всегда зеваю, когда мне интересно. &lt;br /&gt;&lt;br /&gt;Чтобы можно было нормально тестироваться, на какой-то мелкий 1U сервер был подставлен Solaris под Intel, и на нем развернута основная часть системы. После чего началась работа над web GUI. Долго ли, коротко ли, дошло дело до того, что GUI можно было пытаться использовать и даже получать через него реальные данные от основных модулей системы. Всю новую функциональность разработчики, понятное дело, тут же проверяли в деле.&lt;br /&gt;&lt;br /&gt;Через какое-то время GUI вырос и начал ощутимо тормозить. Разработчики почесали репу и сказали: "Ага! Это у нас неэффективное внутренне представление данных на сервере!". И переписали его. Ура, GUI стал просто летать!&lt;br /&gt;&lt;br /&gt;Правда, добавили еще пять-десять фич, и GUI опять начал тормозить. Разработчики опять почесали репу и сказали: "Ага! Это у нас тормознутый persistent layer на сервере!". И оптимизировали его. Выжали процентов 20% производительности.&lt;br /&gt;&lt;br /&gt;Правда, дописали еще пару фич, и GUI опять начал тормозить. Разработчики почесали репу, почесали репу еще раз, скурили все сигареты и сказали: "Ага! Это у нас хреновая архитектура! Ну, ща мы ее за-refactor-им!". И сделали refactoring. Выжалось еще процентов 10%. А должно было сильно больше.&lt;br /&gt;&lt;br /&gt;Тут разработчики взяли в руки профайлер, и увидели, что самые большие тормоза - в тот момент, когда мы по самопальному протоколу поверх TCP/IP получаем данные из одного из основных модулей системы. Ага. Дальше разработчики взяли в руки telnet, соединились с этим модулем и убедились - действительно тормозит. Хотя по идее тормозить там было особенно нечему - в данном конкретном случае основной модуль должен был передать что-то очень простое, вроде локального времени на том сервере, где он работает.&lt;br /&gt;&lt;br /&gt;Тут разработчики взяли в руки &lt;a href="http://www.idevelopment.info/data/Unix/Solaris/SOLARIS_UsingthetrussCommandinSolaris.shtml" target="_blank" rel="nofollow"&gt;truss&lt;/a&gt;, и стали трассировать основной модуль системы (так как его исходников им не дали). И увидели, что тормоза происходят в момент вызова "&lt;a href="http://www.opengroup.org/onlinepubs/000095399/functions/fopen.html" target="_blank" rel="nofollow"&gt;fopen&lt;/a&gt;(tmpfile, "r")", где tmpfile - что-то вроде "/tmp/xyz.6787876"&lt;br /&gt;&lt;br /&gt;Разработчики удивились, и пошли в "/tmp". Там они сделали "touch somefile". Елки, натурально тормозит на создании пустого файла. И "rm somefile" (удаление, стало быть) тоже тормозит. В логах никаких ошибок нет, по S.M.A.R.T. выходит, что винт жив-здоров, файловая система тоже без ошибок. Мистика какая-то ...&lt;br /&gt;&lt;br /&gt;И тут кто-то случайно запустил "ls". И очень удивился, не увидев результата. То есть, вообще никакого результата. Даже более того - не увидев командного промпта. То есть, набираем ls, нажимаем ввод и тишина. Пять секунд тишина, десять - тишина, минута - тишина, 3 минуты - тишина ...&lt;br /&gt;&lt;br /&gt;По прошествии 5-10 минут ls стал выдавать результат... Оказалось, что индусские авторы основного модуля системы не имел привычки удалять за собой временные файлы. И их накопилось в /tmp совершенно неприличное количество. Настолько неприличное, что обновление директории при создании нового файла занимало от нескольких до десятка секунд.&lt;br /&gt;&lt;br /&gt;Разработчики запустили "xargs -i * | rm {}" и ушли с горя напиваться. С другой стороны - если бы не этот баг в чужом коде, фиг бы они нашли время для всех оптимизаций и рефакторинга.&lt;br /&gt;&lt;br /&gt;Остается только догадываться, как это умудрялось работать в Серьезных Индустриальных Инсталляциях.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:59533</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/59533.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=59533"/>
    <title>Фигуреческие челобуры, которые доят Стром</title>
    <published>2007-03-20T20:44:59Z</published>
    <updated>2007-03-20T22:08:48Z</updated>
    <category term="работа"/>
    <category term="баечки"/>
    <content type="html">Как вы думаете, могли ли советские мультипликаторы семидесятых-восьмидесятых годов не только предвидеть тяжелую судьбу одного современного проекта по внедрению OSS-системы, но и показать его на всю страну в виде мультфильма? "Бредовые фантазии воспаленного мозга", скажете вы? Попробую вас переубедить...&lt;br /&gt;&lt;br /&gt;Жила-была одна телекоммуникационная компания, которой волею судеб пришлось иметь дело с некой софтверной компанией ... Впрочем, зачем длинные вступления?&lt;br /&gt;&lt;br /&gt;Сначала читаем &lt;a href="http://www.cboss.ru/press/article158793.html" target="_blank" rel="nofollow"&gt;вот это&lt;/a&gt;, а потом &lt;b&gt;внимательно&lt;/b&gt; смотрим и слушаем второй мультик из  &lt;a href="http://youtube.com/watch?v=UOtnr-8kdSA" target="_blank" rel="nofollow"&gt;сборника "Веселая Карусель #20"&lt;/a&gt;, обращая внимание на текст и надписи на транспарантах (там три мультика одним куском, наберитесь терпения или промотайте).&lt;br /&gt;&lt;br /&gt;Мультик в обязательном порядке показывался всем новым участникам проектной команды "Strom OSS" со стороны STROM. Не спрашивайте, где и как мы на него вышли :)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:57408</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/57408.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=57408"/>
    <title>Уходя, гаси всех!</title>
    <published>2007-03-05T08:38:07Z</published>
    <updated>2007-03-05T08:38:07Z</updated>
    <category term="универ"/>
    <category term="баечки"/>
    <content type="html">На факультете кибернетики было несколько компьютерных классов. Один из них выделялся на общем фоне - вместо персоналок (уровня ЕС-1841) там стояли терминалы VT-420, подключенные к серверу MicroVAX, на котором работала настоящая всамделишная MicroVMS. Терминалы были круты и наворочены - умели Tektronix-овскую графику, несколько разных видеорежимов и т.п. (правда, мало кто этим пользовался). &lt;br /&gt;&lt;br /&gt;Сам же MicroVAX жил, если мне не изменяет склероз, в углу комнаты преподавателей. В этой комнате стояло еще несколько компьютеров, все - с доступом в интернет. Формально, компьютерами пользовались только преподаватели (читали/писали email-ы), фактически же доступ к ним имели и "особо доверенные" личности со старших курсов.  &lt;br /&gt;&lt;br /&gt;На двери этой комнаты изнутри висела бумажка А4, распечатанная на матричном принтере в чем-то типа `banner': "&lt;i&gt;Уходя - выключите свет. Ю.В. Коваль&lt;/i&gt;".&lt;br /&gt;&lt;br /&gt;Говорят, что однажды некто злонамеренный подобрал нужный шрифт, и заменил объявление другим: "&lt;i&gt;Уходя - выключите VAX. Ю. В. Коваль&lt;/i&gt;". Уходящие вечером студенты пожали плечами и выключили... &lt;br /&gt;&lt;br /&gt;Говорят, что грузился это VAX как-то нетривиально, чуть ли не с ленточек и при помощи двух бубнов (увы, сам не видел). Ю.В. Коваль шибко сильно ругался, доступ в заветную комнату был ужесточен, но со временем все вернулось в свою колею.&lt;br /&gt;&lt;br /&gt;PS&lt;br /&gt;Спелл-чекер предлагал заменить "бубнов" на "бабуинов"&lt;br /&gt;Думаю, надо было соглашаться :)</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:56405</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/56405.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=56405"/>
    <title>Где находится any key?</title>
    <published>2007-03-01T21:49:37Z</published>
    <updated>2007-03-04T09:31:49Z</updated>
    <category term="универ"/>
    <category term="баечки"/>
    <content type="html">А вот еще одну телегу задвину вам про универ.&lt;br /&gt;&lt;br /&gt;Когда мы там учились, был у нас на кафедре доцентом (или ассистентом?) некий Юрий Коваль (smith@l.n) (&lt;span  class="ljuser  i-ljuser  i-ljuser-type-P     "  data-ljuser="netch" lj:user="netch" &gt;&lt;a href="https://netch.livejournal.com/profile/"  target="_self"  class="i-ljuser-profile" &gt;&lt;img  class="i-ljuser-userhead"  src="https://l-stat.livejournal.net/img/userinfo_v8.png?v=17080&amp;v=916.1" /&gt;&lt;/a&gt;&lt;a href="https://netch.livejournal.com/" class="i-ljuser-username"   target="_self"   &gt;&lt;b&gt;netch&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;, только не говори мне, что и у него тоже есть ЖЖ :). Он вел у нас практикум по программированию на втором курсе и спецкурс по операционным системам на четвертом. &lt;br /&gt;&lt;br /&gt;Представьте себе студентов второго курса. Это уже не лопоухие абитуриенты "только из школы", нет - все уже умудренные опытом (целого одного курса!), втайне считающие себя способными сделать любую "лабу" по программированию за 15 минут. Все смотрят на задание и на препода несколько свысока.&lt;br /&gt;&lt;br /&gt;Уже на сдаче первой лабораторки ("калькулятор со скобочками") стало понятно, что шары не будет. Первому же сдающемуся в программу было вбито выражение "4+-+-+-5", и он ушел искать причину runtime error. Второму досталось "4---3", и он ушел следом за первым. Все остальные заторопились к свободным компьютерам (ЕС-1841) проверять, как себя поведет их код при попытке пережевать подобное полу-легальное выражение. Сдались, как я помню, буквально два человека.&lt;br /&gt;&lt;br /&gt;К следующей лабораторке (хоть убей, не помню, что это было) народ подошел со всем тщанием. Программы проверялись и перепроверялись, в качестве входных данных можно было сунуть любой мусор, на что программа с достоинством отвечала "error parsing data" и т.п.&lt;br /&gt;&lt;br /&gt;И вот приходит время сдавать. Первой сдается наша одногруппница. Ее программа с честью проходит все проверки, отплевывается от кривого ввода, и в конце концов на контрольных данных выдает правильный результат. Все замирают - что же будет дальше? Неужто - сдала? &lt;br /&gt;&lt;br /&gt;Под выведенными результатами программа написала "Press any key to continue". С каменным лицом Ю. Коваль нажимает на левый Shift. Естественно, программа не реагирует. Он нажимает на правый Shift. На Ctrl. На Alt. На NumLock. На ScrollLock. "Как же так?", - говорит он - "столько клавиш на клавиатуре, и буквально ни на одну никакой реакции ...". Немая сцена.&lt;br /&gt;&lt;br /&gt;Следующая версия программы была с надписью "Press space to continue".</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:56064</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/56064.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=56064"/>
    <title>Виртуально-виртуально-виртуальная машина, да еще и Тьюринга</title>
    <published>2007-03-01T11:44:27Z</published>
    <updated>2007-03-01T13:45:08Z</updated>
    <category term="баечки"/>
    <content type="html">Сегодняшняя байка - про конкретное использование абстрактной машины Тьюринга.&lt;br /&gt;&lt;br /&gt;Сегодня случайно попалась на глаза &lt;a href="http://bash.org.ru/quote.php?num=59325" target="_blank" rel="nofollow"&gt;старая шутка&lt;/a&gt; с bash.org.ru:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;i&gt;mordaha&lt;/i&gt;: Картинка: &lt;a target='_blank' href='http://mordaha.com/sc2l.jpg' rel='nofollow'&gt;http://mordaha.com/sc2l.jpg&lt;/a&gt;&lt;br /&gt;Это старкон2, запущенный в DosBox, под иксами в Дебиане, который запущен в VMWare, которая в WinXP&lt;br /&gt;Куда мне вопрос о неработающем звуке задавать? :)))))&lt;br /&gt;&lt;br /&gt;&lt;i&gt;gregory_777&lt;/i&gt;: Санитарам.&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;На этой почве у меня &lt;s&gt;развилась&lt;/s&gt; возникло несколько ассоциаций, которыми я хочу поделиться.&lt;br /&gt;&lt;br /&gt;В &lt;a href="http://dragonbase.narod.ru/" target="_blank" rel="nofollow"&gt;цикле книг "Про Дракона"&lt;/a&gt; Павла Шумила в одной из побочных сюжетных линий был описан некий космический артефакт - гигантский компьютер размером с небольшую солнечную систему. Возраст компьютера насчитывал несколько миллионов лет, физические масштабы поражали воображение, его долго исследовали, но несмотря на все усилия, никому так и не удавалось понять, что же именно он считает и для чего/кого.&lt;br /&gt;&lt;br /&gt;По ходу пьесы выяснилось, что этот компьютер - творение рук ... одного из исследователей, который пытался взломать перебором пароль на компьютере своего коллеги, чтобы сунуть нос в результаты его исследований. Проблема была в том, что коллега был параноик, и вел свою работу внутри виртуальной машины, запущенной на своем компьютере, что сильно усложняло атаку перебором. В результате, когда первый исследователь случайно получил доступ к технологии перемещения во времени, он забросил в прошлое компьютер, который мог модифицировать и развивать самого себя. и занимался исключительно творческим взломом и подбором паролей к виртуальной машине второго исследователя. Правда, второй исследователь к этому времени уже что-то начал подозревать, и подсунул первому бэкап-копию якобы своего компьютера, которая на самом деле содержала в себе "матрешку" из десятка запущенных друг в друге виртуальных машин, последняя из которых содержала те самые ценные сведения ...&lt;br /&gt;&lt;br /&gt;Заброшенный в прошлое компьютер за пару миллионов лет "замодернизировал" себя до неузнаваемости, но "матрешку" из виртуальных машин так и не разобрал и пароль так и не подобрал ... Зато стал объектом исследования незадачливой парочки :)&lt;br /&gt;&lt;br /&gt;Да, к чему это я?&lt;br /&gt;&lt;br /&gt;Когда я был курсе на втором-третьем, нам читали курс лекций по теории вычислений, на котором, помимо прочего, познакомили нас с разнообразными &lt;a href="http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0" target="_blank" rel="nofollow"&gt;машинами Тьюринга&lt;/a&gt;. Если кто не знает, машина Тьюринга - это такая асбтрактная модель компьютера (состоящая из ленты в клеточку, карандаша, резинки и набора правил), на которой удобно исследовать вычисления и строить доказательства о свойствах процесса вычисления.&lt;br /&gt;&lt;br /&gt;Так вот, уже на этом достаточно абстрактном уровне можно заниматься виртуализацией: можно построить &lt;a href="http://ru.wikipedia.org/wiki/%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D0%B0" target="_blank" rel="nofollow"&gt;универсальную машину Тьюринга&lt;/a&gt;, которой на вход будет подаваться программа для обычной машины Тьюринга и исходные данные, после чего универсальная М.Т. проэмулирует работу обычной М.Т. с не более чем квадратичным замедлением и выдаст результат.&lt;br /&gt;&lt;br /&gt;Поскольку универсальная машина Тьюринга на базовом уровне является разновидностью обычной машины Тьюринга, для нее в свою очередь можно построить соотвествующую универсальную машину Тьюринга, и так далее, и тому подобное. &lt;br /&gt;&lt;br /&gt;А тут как раз в FIDO-шной эхоконференции RU.PERL зашел разговор о том, что на Perl-е, конечно, можно написать код любой степени нечитаемости, но за счет отладчика и отладочной печати любой такой можно распутать и в конце-концов понять.&lt;br /&gt;&lt;br /&gt;Прикола ради я написал на perl-е реализацию универсальной машины Тьюринга, которой на вход давалась программа для другой универсальной машины Тьюринга, которой на вход давалась программа для обычной машины Тьюринга, которой на вход давалось побитовое представление ASCII-строки, и эта последняя машина проверяла какое-то свойство этого бинарного представления - типа, что кол-во единиц в бинарном представлении больше кол-ва нулей в два раза, или что-то в этом роде. За счет двух (трех?) уровней эмуляции подобная проверка делалась примерно секунд 10.&lt;br /&gt;&lt;br /&gt;Написал, и закинул в RU.PERL. Без описания того, что делает программа, но с примером строки, которая проходит подобную проверку. И предложил найти еще одну подобную строку. Если мне не изменяет мой склероз, то желающие были, но положительного результата они так и не достигли :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Мораль&lt;/b&gt;: никогда не знаешь, когда тебе придется применить на практике знания, которые в институте кажутся оторванными от реальности и никому не нужными.&lt;br /&gt;&lt;br /&gt;PS&lt;br /&gt;Just for fun, та самая программа на perl-е (найденная внутри devel.zip, который был внутри old_computer.zip, который был внутри backup_to_sort_later.tgz, который бы в old_notebook.tar.bz2 :)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
#!/usr/bin/perl -w

#
# Correct passwd: '3is&amp;gt;}.gK' (without '')
#

$data="Z043ZZZZZ111110ZZ0Z0ZZ0Z1102Z11110ZZ0ZZZZZ1110ZZ0Z102ZZZZ11111110Z110Z111111".
"111111110ZZ0Z1102ZZZZZ1111111110Z0ZZZZZ1111111110Z0Z1102ZZZZ111111110ZZ0ZZZZ".
"111111110Z0Z102Z111110ZZ0ZZZZZ1110ZZ0Z102ZZZZ11110Z10ZZZZ11110Z10Z102Z110ZZ0".
"ZZZZZ1110ZZ0Z102Z111110Z0Z1111110Z0Z1102ZZZZZ11111111110ZZ0ZZZZZ11110ZZ0Z102".
"ZZZZZ1111111110Z10ZZZZZ1111111110Z10Z1102ZZZZ11111110ZZ0ZZZZ11111110Z10Z102Z".
"ZZZ111111110Z110Z111111111111110ZZ0Z1102Z11111110Z10Z111111110Z10Z1102Z10Z10".
"Z110Z10Z1102Z111111110Z0Z1111111110Z0Z1102ZZZZZ1110Z10ZZZZZ1110Z10Z102ZZZZZ1".
"1110ZZ0Z0ZZ0Z1102ZZZZZ1110ZZ0ZZZZZ111111110ZZ0Z1102Z10Z0Z110Z0Z1102ZZZZ11111".
"0ZZZZ10ZZZZ1111110Z10Z102Z1110Z10Z11110Z10Z1102ZZZZ10Z0ZZZZ10Z0Z102ZZZZ1110Z".
"Z0ZZZZ1110Z10Z102ZZZZ1110Z10ZZZZ1110Z10Z102Z11111110ZZ0ZZZZZ1110ZZ0Z102Z1111".
"1110Z0Z111111110Z0Z1102ZZZZ11110Z110Z111111111111110ZZ0Z1102Z110Z0Z1110Z0Z11".
"02ZZZZ111111110ZZZZ10ZZZZ1111111110Z10Z102ZZZZZ1110ZZZZ10ZZZZZ111111110ZZZZ1".
"0Z1102Z1110Z0Z11110Z0Z1102Z1111111110ZZ0Z1111111110ZZ0Z102Z110Z10Z1110Z10Z11".
"02Z10ZZ0ZZZZZ1110ZZ0Z102ZZZZ11110ZZZZ10ZZZZ111110Z0Z102ZZZZZ11111111110Z10ZZ".
"ZZZ11111111110Z10Z1102ZZZZ111110Z110Z111111111111110ZZ0Z1102ZZZZ111110Z0ZZZZ".
"111110Z0Z102Z0ZZ0Z0ZZ0Z1102ZZZZ111110ZZ0ZZZZ111110Z10Z102ZZZZ10Z110Z11111111".
"1111110ZZ0Z1102ZZZZ11111110ZZZZ10ZZZZ111111110Z0Z102ZZZZZ111110Z0ZZZZZ1110ZZ".
"0Z102ZZZZZ11110Z10ZZZZZ1110ZZ0Z102ZZZZ110ZZ0ZZZZ110Z0Z102ZZZZZ11110Z0Z111111".
"111111110Z10Z1102ZZZZZ1110Z0ZZZZZ1110Z0Z102Z111111110Z10Z1111111110Z10Z1102Z".
"ZZZ1111111110ZZ0ZZZZ1111111110Z0Z102ZZZZZ111111110Z10ZZZZZ11111111110ZZ0Z110".
"2ZZZZ1111111110ZZZZ10ZZZZ10Z10Z102Z1111111110Z10ZZZZZ1110ZZZZ10Z102ZZZZZ1111".
"1111110Z0ZZZZZ11111111110Z0Z1102ZZZZ1111110ZZZZ10ZZZZ11111110Z0Z102ZZZZZ1111".
"111110ZZZZ10ZZZZZ111110ZZZZ10Z102Z111111110ZZ0ZZZZZ1110ZZ0Z102Z0Z110Z0Z110Z1".
"102Z0ZZZZ10Z10ZZZZ10Z1102Z1111111110Z0ZZZZZ1110ZZZZ10Z102Z0Z1110ZZZZ10Z1110Z".
"102ZZZZZ11111111110ZZZZ10ZZZZZ11110ZZZZ10Z102ZZZZ1111110Z110Z111111111111110".
"ZZ0Z1102ZZZZ1110Z110Z111111111111110ZZ0Z1102ZZZZ10ZZ0ZZZZ10Z10Z102ZZZZ110Z10".
"ZZZZ110Z10Z102Z11110Z10Z111110Z10Z1102ZZZZ110ZZZZ10ZZZZ1110Z10Z102ZZZZZ11111".
"1110ZZ0Z0ZZ0Z1102ZZZZ1111111110Z11011111111110ZZ0Z1102Z0Z0Z10ZZZZ10Z1102Z111".
"1110Z10Z11111110Z10Z1102ZZZZZ111111110Z0ZZZZZ1111111110ZZ0Z1102ZZZZZ11111111".
"10ZZ0ZZZZZ111110ZZ0Z102Z11110Z0Z111110Z0Z1102ZZZZ11110ZZ0ZZZZ11110Z0Z102Z111".
"110Z10Z1111110Z10Z1102ZZZZ110Z110Z111111111111110ZZ0Z1102Z1110ZZ0ZZZZZ1110ZZ".
"0Z102Z1111110Z0Z11111110Z0Z1102ZZZZ1110ZZZZ10ZZZZ11110Z0Z102ZZZZZ111110Z10Z1".
"11111111111110Z0Z1102Z1111110ZZ0ZZZZZ1110ZZ0Z102ZZZZ1111110ZZ0ZZZZ1111110Z0Z".
"102Z0Z10Z10ZZZZ10Z1102ZZZZ10ZZZZ10ZZZZ110Z0Z102";

sub crackme($) {
  my ($s,$c,$m,$r);
  $r="";
  foreach (split(//,"2\@".$_[0]."\@3")) {
    $s=("1" x (ord($_)))."0";
    $r.=$s;
  }
  $r=~s/1{32}0/0/g;
  $data=~s/Z/1111111111111111/g;
  $data=~s/4/4$r/;
  $data=~s/41/4\#/;

  $s="1111111111111110";
  while (not(341 % length($s) == 0)) {
    if ($data=~/^(1+0)4.*?\#(1+0).*?(?:3.+?[^1]|3)(\1)([1]\2)(1+0)(1+0)(1+0)2/) {
      $s=$5;$c=$6;$m=$7;
      if (length($m)&amp;gt;18) {
        $data=~s/\#1+01/$c\#/;
      } else {
        $data=~s/1(1+0)\#1+0/\#$1$c/;
      }
      $data=~s/^.*4/4/;
      $data=$s.$data;
    }
  }
  print "Password ";
  if ($s=~/1{15}/) {
    print "in";
  }
  print "correct\n";
}


crackme(unpack("B*",$ARGV[0]));
&lt;/pre&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:55781</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/55781.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=55781"/>
    <title>Почему я не хожу к психологам.</title>
    <published>2007-02-25T20:41:28Z</published>
    <updated>2007-02-25T21:01:20Z</updated>
    <category term="хохмочки"/>
    <category term="баечки"/>
    <content type="html">Теперь у меня есть что показать людям, которые спросят, не хочу ли я пойти к психологу.&lt;br /&gt;&lt;br /&gt;Ниже - лог реального диалога по ICQ, который только что состоялся у меня с неизвестной собеседницей (ее UIN забит 'x'-ами). Что называется, "срочно в номер". Орфография и стилистика в точности сохранена :)&lt;br /&gt;&lt;br /&gt;&lt;verb&gt;&lt;br /&gt;[22:07]&amp;lt;34xxxxx06&amp;gt; АААА!&lt;br /&gt;3дравствуй!&lt;br /&gt;[22:07]&amp;lt;34xxxxx06&amp;gt; Дима&lt;br /&gt;[22:08]&amp;lt;34xxxxx06&amp;gt; :'(&lt;br /&gt;&lt;br /&gt;[22:17]&amp;lt;adept&amp;gt; да?&lt;br /&gt;&lt;br /&gt;[22:17]&amp;lt;34xxxxx06&amp;gt; ДАААААААААААА_ААААААААААААА!:'(&lt;br /&gt;&lt;br /&gt;[22:17]&amp;lt;adept&amp;gt; ?&lt;br /&gt;&lt;br /&gt;[22:20]&amp;lt;34xxxxx06&amp;gt; ХХныыыыыыыыыыыыыыыыыыыыккккккк!!!!!!!!аааааааааааа! нет.! нет сил!!!!!!!!!!!ааа!:'(&lt;br /&gt;Дерьмов же мир!!!!!!!!!!! хныыыкк!! (3ахлеб в соплях)&lt;br /&gt;&lt;br /&gt;а вообще, Друг, оветь, на каком факультете у4ился ТЫ??&lt;br /&gt;&lt;br /&gt;[22:20]&amp;lt;adept&amp;gt; начнем издалека&lt;br /&gt;[22:20]&amp;lt;adept&amp;gt; мы знакомы?&lt;br /&gt;&lt;br /&gt;[22:21]&amp;lt;34xxxxx06&amp;gt; ВОТ МЫ И РА3БЕРЁМСЯ!))&lt;br /&gt;ФАКУЛЬТЕТ???&lt;br /&gt;&lt;br /&gt;[22:21]&amp;lt;adept&amp;gt; значит, незнакомы.&lt;br /&gt;[22:22]&amp;lt;adept&amp;gt; допустим (для поддержания разговора), мы учились на одном факультете&lt;br /&gt;[22:22]&amp;lt;adept&amp;gt; что тогда?&lt;br /&gt;&lt;br /&gt;[22:22]&amp;lt;34xxxxx06&amp;gt; ВСЁ НЕ с факультета психологии...как я понимаю)))&lt;br /&gt;[22:22]&amp;lt;34xxxxx06&amp;gt; Я ПРАВА??&lt;br /&gt;&lt;br /&gt;[22:23]&amp;lt;adept&amp;gt; да. кибернетика&lt;br /&gt;[22:23]&amp;lt;adept&amp;gt; (неужели меня выдало то, что я не употребляю CapsLock?)&lt;br /&gt;&lt;br /&gt;[22:24]&amp;lt;34xxxxx06&amp;gt; НУУ...ПОНЯТНО, КИБЕРНЕТИК!...ВСЁ ТЕПЕРЬ , ПОНЯТНО!!:'(:'(:'(&lt;br /&gt;[22:24]&amp;lt;34xxxxx06&amp;gt; АА&lt;br /&gt;&lt;br /&gt;[22:25]&amp;lt;adept&amp;gt; АА?&lt;br /&gt;&lt;br /&gt;[22:27]&amp;lt;34xxxxx06&amp;gt; я просто не могла быть 3накома с Тобой, даже просто потому 4то, никогда не была на (в)  Украине!)))..и вообще, в столь восто4но расположеных странаХ))&lt;br /&gt;&lt;br /&gt;[22:28]&amp;lt;adept&amp;gt; к чему тогда вопрос про факультет?&lt;br /&gt;&lt;br /&gt;[22:29]&amp;lt;34xxxxx06&amp;gt; ищу отца своего ребенка!))&lt;br /&gt;&lt;br /&gt;[22:30]&amp;lt;adept&amp;gt; знак ГТО на груди у него, больше не знают о нем ничего?&lt;br /&gt;[22:31]&amp;lt;adept&amp;gt; ты, что-ли, всех Дим перебираешь по очереди?&lt;br /&gt;&lt;br /&gt;[22:33]&amp;lt;34xxxxx06&amp;gt; нет!нет!всё!))не переживай!шу4у!балуюсь!кланяюсь! 3доровья вам!)))&lt;br /&gt;&lt;br /&gt;[22:35]&amp;lt;adept&amp;gt; хм. спасибо&lt;br /&gt;&lt;/verb&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:_adept_:53263</id>
    <link rel="alternate" type="text/html" href="https://users.livejournal.com/-adept-/53263.html"/>
    <link rel="self" type="text/xml" href="https://users.livejournal.com/-adept-/data/atom/?itemid=53263"/>
    <title>Что лучше: два кило по кило, и кило по пол-кило или просто три кило?</title>
    <published>2007-01-09T18:47:50Z</published>
    <updated>2007-01-09T19:53:04Z</updated>
    <category term="баечки"/>
    <content type="html">Новый Год, вагон работы и подкравшийся от сотрудников простудифилис привели к тому, что я еще даже на прошлогодние комментарии не поотвечал. Как говориться "сколько всего не сделано, а ведь сколько еще предстоит не сделать!".&lt;br /&gt;&lt;br /&gt;Непорядок. Надо постепенно исправляются. Начну с баечки, которая давным-давно overdue. Итак, страшная история про "&amp;lt;&amp;lt;8&amp;lt;&amp;lt;8".&lt;br /&gt;&lt;br /&gt;Было это в далеком 19xx году, когда я учился не то в 11-ом классе, не то на первом курсе. Как-то совершенно неожиданно нам с &lt;span  class="ljuser  i-ljuser  i-ljuser-deleted  i-ljuser-type-P     "  data-ljuser="yvl" lj:user="yvl" &gt;&lt;a href="https://yvl.livejournal.com/profile/"  target="_self"  class="i-ljuser-profile" &gt;&lt;img  class="i-ljuser-userhead"  src="https://l-stat.livejournal.net/img/userinfo_v8.png?v=17080&amp;v=916.1" /&gt;&lt;/a&gt;&lt;a href="https://yvl.livejournal.com/" class="i-ljuser-username"   target="_self"   &gt;&lt;b&gt;yvl&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; подвернулась халтура, в рамках которой надо было написать некий софт, способствующий написанию книжек и сценариев, в частности - позволяющий править базы данных, хранимые в каком-то безумном текстовом формате.&lt;br /&gt;&lt;br /&gt;Это сейчас можно провести пол-часа в обнимку с Гуглом и найти/честно стянуть готовое. А в то благословенное время компьютеры были большими, модемы - на 2400, интернета не было, а софт был на дискетках 5.25 (прочие душещипательные детали можно почерпнуть из &lt;a href="http://yvl.livejournal.com/4840.html" target="_blank"&gt;вот этого поста&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Я не буду рассказывать ужасы о том, как были сформулированы требования к софту и каким образом был были зафиксированы договорные отношения между Заказчиком и Исполнителями, т.к. это пошло и не ново. Просто представьте себе обычный project from hell, без требований, без обязательств, с непонятными сроками и с неопытными исполнителями, жизнерадостно лабающими в четыре руки на одном компьютере код на, кажется, Visual C++ 5.0. Представьте и попробуйте поставить себя на место студентов-исполнителей.&lt;br /&gt;&lt;br /&gt;Код пишется вечерами, почти без проектирования. Coding sessions прерываются распитием пива, игрой в "UFO: Enemy unknown" и выполнением лабораторных работ. Код или пишется со скоростью 20К в сутки, или не пишется вообще никак. И в один из таких "медленных" дней мы сталкиваемся с тем, что нам надо узнать, в каком конкретно месте в пределах List Control-а пользователь сдела щелчок мышкой. Зачем - я уже и не припомню. Но точно помню, что нужно было позарез. &lt;br /&gt;&lt;br /&gt;А вот фигушки! Стандартный MFC-ный ListCtrl обрабатывал событие "button click" и "button double click" внутри себя, не отдавая его дальше и не инкапсулируя мышиное событие в порождаемый event "list item selected". Битый час мы крутили ListCtrl и так и эдак - нет, не выходит каменный цветок. Постепенно приходит понимание того, что надо делать Костыль.&lt;br /&gt;&lt;br /&gt;Сказано - сделано. На свет появляется  widget с названием, стыдно сказать, FuckingListCtrl. Он отнаследован от стандартного ListCtrl и отличается от предка только методом "OnLButtonDown". Наша реализация уведомляет контейнер, в котором находится список, о нажатии на кнопку, причем делает это вот так:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;void CFuckingListCtrl::OnLButtonDown(UINT nFlags, CPoint point)&lt;br /&gt;{&lt;br /&gt;        GetParent()-&amp;gt;SendMessage(WM_LBUTTONDOWN, nFlags, (point.y&amp;lt;&amp;lt;16)+point.x);&lt;br /&gt;        CListCtrl::OnLButtonDown(nFlags, point);                                                                                                   &lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Т.е. берем координаты мышиного клика, "упаковываем" в один WORD, засовываем в событие WM_LBUTTONDOWN и вуаля! Казалось бы, костыль себе и костыль. Собираем, запускаем - не работает. Точнее, работает, но как-то странно - отладочная печать в контейнере показывает, что в событии WM_LBUTTONDOWN приезжают ... &lt;b&gt;отрицательные координаты&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;Запускаем несколько раз, стараясь не двигать мышку. Координаты отрицательные и &lt;b&gt;каждый раз разные&lt;/b&gt;. Хм. Запускаем под отладчиком, ставим breakpoint-ы. В CFuckingListCtrl координаты нормальные, адекватные, положительные. На следующем breakpoint-е (в контейнере) они неадекватные и отрицательные.&lt;br /&gt;&lt;br /&gt;Чешем репу, суем отладочный вывод куда угодно. Проходит два часа. Аномалия никуда не уходит.&lt;br /&gt;&lt;br /&gt;В какой-то момент запускаем код под отладчиком, проходим пошагово, вбив в watchlist значения "point.x" и "point.y". Аномалия по-прежнему имеет место. Добавляем в watchlist "(point.y&amp;lt;&amp;lt;16)+point.x" . Очень странно. Получается, что именно тут и вылазит фигня, так как значение этого выражения получается странным и отрицательным. Тут же вбиваем в "Debug-&amp;gt;Evaluate" это же выражение, в которое подставлены реальные значения координат. Все вычисляется правильно. &lt;br /&gt;&lt;br /&gt;Забавно. Получается, с константами "сдвиг влево" считается правильно, а с переменными - абы как. Да ну, фигня какая! Не может такого быть. Начинаем вбивать в evaluate выражения "point.x&amp;lt;&amp;lt;2", "point.x&amp;lt;&amp;lt;3" и т.п. Выясняется, что сдвиг на 2,3,4,5,6,7,8 - работает нормально, а дальше - фиг.&lt;br /&gt;&lt;br /&gt;Переписываем код вот так: "((point.y&amp;lt;&amp;lt;8)&amp;lt;&amp;lt;8)+point.x".&lt;br /&gt;&lt;br /&gt;Все работает. Немая сцена.&lt;br /&gt;&lt;br /&gt;Чтобы проверить, что проблема действительно была в этом, меняем обратно на "&amp;lt;&amp;lt;16" и пересобираем. Глючит. Меняем на "&amp;lt;&amp;lt;8&amp;lt;&amp;lt;8". Работает. &lt;br /&gt;&lt;br /&gt;Бл#! @#$%$#! @#$#@#%#! Все равно не верится. Еще раз меняем на "&amp;lt;&amp;lt;16" и случайно вместо "rebuild" давим на "clean rebuild". Все долго-долго пересобирается с нуля и ... работает.&lt;br /&gt;&lt;br /&gt;Причем работает под отладчиком, без отладчика, в сборке "Debug", в сборке "Release" - как угодно.&lt;br /&gt;&lt;br /&gt;Следующие пол-часа мы могли только материться, менять "&amp;lt;&amp;lt;16" на "&amp;lt;&amp;lt;8&amp;lt;&amp;lt;8" и обратно, пересобирать код в разных позах и пытаться сделать так, чтобы баг проявился еще раз. Ни-фи-га.&lt;br /&gt;&lt;br /&gt;В конце-концов мы оставили в коде "&amp;lt;&amp;lt;8&amp;lt;&amp;lt;8". Просто так, на всякий случай.&lt;br /&gt;&lt;br /&gt;С тех пор я стал с большим доверием относиться к любым, самым безумным историям про глюки софта.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Disclaimer&lt;/em&gt;: данный пост - не о том, как (не надо) писать программы с использованием MFC. Не судите строго :)&lt;br /&gt;&lt;br /&gt;&lt;small&gt;а теперь попробую ответить на 87 накопившихся комментариев&lt;/small&gt;</content>
  </entry>
</feed>
