<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://syndication.thedailywtf.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
	<channel>
		<title>The Daily WTF: Русский Вариант </title> 
		<link>http://ru.thedailywtf.com/</link> 
		<description>Curious Perversions in Information Technology</description> 

		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://syndication.thedailywtf.com/WTF/RU" /><feedburner:info uri="wtf/ru" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
			<author>Evgeniy Vigovskiy</author> 
			<title>Эргономика - наше все</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/AFijPY3QEJg/Ergonomika-nashe-vse.aspx</link> 
			<category>Feature Articles</category>
			<pubDate>Mon, 30 Mar 2009 04:15:00 GMT</pubDate> 
			<guid isPermaLink="false">6516</guid> 
			<description>&lt;p&gt;Какие только чудовища не водятся в дебрях автоматизации бухгалтерского учета. Оцените красоту экземпляра с которым однажды столкнулся &lt;b&gt;Артур&lt;/b&gt;. Cвоими впечатлениями он поделился в письме:&lt;/p&gt;

&lt;p style="margin-left: 40px"&gt;Недавно мне поручили соорудить бухгалтерам из нашей компании какую-нибудь программу для подсчета затрат, которые использовали для этого Excel и справочники толщиной в три сантиметра, обновлявшиеся ежемесячно (кстати на самом деле им требовалось 20 копий этих справочников отксеренных вручную!). Попытавшись разобраться я выяснил, что компания уже прикупила для этих целей программу, но никто не смог ей пользоваться. Поэтому, я решил поставить ее и посмотреть, что с ней не так. Потратив пару часов на установку этого чудесного шедевра программирования, мне, наконец, удалось ее запустить. Как оказалось, это старинная программа на Visual FoxPro, которая была создана на базе еще более древней программы на FoxPro работавшей еще под DOS. Новости были так себе, но тем не менее, это не объясняло, почему никто не смог ей пользоваться. Потратив еще два часа, пытаясь понять, что вообще может делать эта чертова программа, я все понял. Только взгляните на этот образец разработки графических интерфейсов.&lt;br&gt;&lt;br&gt;
&lt;img src="http://img.worsethanfailure.com/images/RU/2009/wtf_guimasterpiece.png" width="640" height="429"&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uY5WWH4Nd4YUdkEJ-pq278wPjsw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uY5WWH4Nd4YUdkEJ-pq278wPjsw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uY5WWH4Nd4YUdkEJ-pq278wPjsw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uY5WWH4Nd4YUdkEJ-pq278wPjsw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/AFijPY3QEJg" height="1" width="1"/&gt;</description> 
			<slash:comments>5</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/Ergonomika-nashe-vse.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/Ergonomika-nashe-vse.aspx</feedburner:origLink></item>
	
		<item>
			<author>Evgeniy Vigovskiy</author> 
			<title>Error'd: Свобода, равенство</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/cCsZee6GOmQ/Svoboda,-ravenstvo.aspx</link> 
			<category>Error'd</category>
			<pubDate>Sun, 29 Mar 2009 00:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6515</guid> 
			<description>&lt;p&gt;Бьёрн Страуструп как в воду глядел, изрекая известную цитату про телефоны и компьютеры, так как первые окончательно уравнялись в правах с последними.&lt;/p&gt;
&lt;img src="http://img.worsethanfailure.com/images/RU/2009/wtf_deadlinuxphone.jpg" width="319" height="600"&gt;&lt;br&gt;
&lt;pre&gt;
end_request: I/O error, dev 03:00 (hda), sector 393744
end_request: I/O error, dev 03:00 (hda), sector 213510
EXT3-fs error (device ide0(3,8)): ext3_readdir: diretory #26729 contains a nole
 at offset 0
&lt;/pre&gt;
&lt;br&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uob50oDyOTLNCLU-9JUAYz0Grno/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uob50oDyOTLNCLU-9JUAYz0Grno/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uob50oDyOTLNCLU-9JUAYz0Grno/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uob50oDyOTLNCLU-9JUAYz0Grno/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/cCsZee6GOmQ" height="1" width="1"/&gt;</description> 
			<slash:comments>3</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/Svoboda,-ravenstvo.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/Svoboda,-ravenstvo.aspx</feedburner:origLink></item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>Саммит директоров</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/6INcv6q5jvA/Sammit-direktorov.aspx</link> 
			<category>Feature Articles</category>
			<pubDate>Sat, 28 Mar 2009 23:45:00 GMT</pubDate> 
			<guid isPermaLink="false">6514</guid> 
			<description>&lt;p&gt;&lt;img class="wtf_imgfloatright" style="float: right; margin: 5px" alt="photo credit: minxlabs @ flickr" src="http://img.thedailywtf.com/images/200903/lightBulb.jpg" /&gt;Вот уже двадцать лет он играл в корпоративные закулисные игры и карабкался вверх по служебной лестнице. И вот &lt;b&gt;Скотт&lt;/b&gt;, наконец, достиг вершины. Не самой-самой верхней, но где-то рядышком. Он был Директором по Управлению Приложениями в международной 40-миллиардной компании со штатом в десять тысяч человек и отвечал за управление подразделением из нескольких сотен сотрудников.&lt;/p&gt;

&lt;p&gt;Ушли в былое те дни, когда Скотт занимался какими-то техническими вещами или рецензировал что-нибудь. Вместо этого он был сконцентрирован на позиционировании, синергии, распределённом интеллекте, прогнозировании и прочей всячине, которую вы можете прочитать на игровых карточках &lt;a href="http://isd.usc.edu/~karl/Bingo/"&gt;Buzzword Bingo&lt;/a&gt;. Он также играл важную роль в "100-миллинной инициативе по упорядочиванию и централизации глобальных процессов c использованием ключевых, стратегических приложений". Иными словами, нужно было разработать или купить кучку  программ промышленного масштаба, чтобы помочь компании лучше функционировать.&lt;/p&gt;

&lt;p&gt;Одним из первых шагов в этой большой технологической инициативе был "Саммит исполнительных директоров". Это была трёхдневная встреча в Атланте, которая собирала ключевых лидеров многочисленных бизнес-подразделений компании со всего земного шара. Четырнадцать представителей выбирали не только исходя из их опыта и расширенных познаний в бизнесе, но также с учётом их технологической осведомлённости и опыта в реализации подобных инициатив в рамках собственных подразделений. Это были, наверное, самые лучшие из лучших-из-лучших.&lt;/p&gt;

&lt;h3 style="margin-bottom: 0px"&gt;День первый.&lt;/h3&gt;
&lt;p style="margin-top: 0px"&gt;"Саммит исполнительных директоров" был выдержан в рамках совещаний средней продолжительности, но с большими запасами кофе и печенюшек. Когда стрелка часов указала на 9 утра понедельника, встреча официально началась. Это означало только одно - настало время для слайдов PowerPoint.&lt;/p&gt;

&lt;p&gt;"Простите, господа", - сказал один из директоров, возясь с ноутбуком, - "у меня тут возникли небольшие технические проблемы с подключением к проектору". Он ходил вокруг стола, пробуя подключать один Ethernet-кабель за другим.&lt;/p&gt;

&lt;p&gt;"Может, попробуете подключиться сразу туда?" - заметил кто-то, указывая на прикрученный к потолку проектор.&lt;/p&gt;

&lt;p&gt;После того, как выяснилось, что у выступающего нет нужного кабеля, остальные директора принялись рыться в своих сумках в поисках чего-нибудь подходящего. Когда же нужный провод был найден, обнаружилась другая проблема: он был недостаточно длинным, чтобы дотянуться от стола к потолку.&lt;/p&gt;

&lt;p&gt;"Мы могли бы попробовать приподнять лэптоп на коробке или чём-то типа того", - предложил другой директор, однако тут же умолк, т.к. понял, что самым высоким из всех окружающих предметов был стул. "Слушайте, а давайте просто вызовем электрика?"&lt;/p&gt;

&lt;p&gt;Тридцать минут спустя прибыл электрик и оценил обстановку. Затем он взял лэптоп, вынес его вперёд комнаты и поместил на подиум рядом с экраном. После подключения проектор моментально ожил.&lt;/p&gt;

&lt;h3 style="margin-bottom: 0px"&gt;Позже в тот же день.&lt;/h3&gt;
&lt;p style="margin-top: 0px"&gt;После ленча снова пришло время для слайдов PowerPoint. Как раз перед уходом, докладчик установил свой лэптоп на подиум, чтобы затем незамедлительно начать выступление. Конечно же, задуманное не получилось.&lt;/p&gt;

&lt;p&gt;"Я думаю, проектор заснул" - сказал он - "Может ли кто-то из вас передёрнуть ему питание?"&lt;/p&gt;

&lt;p&gt;Проектор высветил на доске загрузочный экран, а затем всё снова почернело. Картинки с лэптопа не было видно.&lt;/p&gt;

&lt;p&gt;"Вам следует нажать Fn+F4" - предложил кто-то. Докладчик громко клацнул клавишами.&lt;/p&gt;

&lt;p&gt;"Вот ёлки", - вздохнул он. "Может надо было Fn+F5 или Ctrl+F5?" Он потыкался в клавиатуру с другими комбинациями клавиш и изрёк несколько цветастых словечек, однако "кина" по-прежнему не было. Пришло время снова позвать электрика.&lt;/p&gt;

&lt;p&gt;Через пару минут тот пришёл и оценил обстановку. Затем он взял видеокабель и воткнул его обратно в ноутбук. Проектор снова вернулся к жизни.&lt;/p&gt;

&lt;h3 style="margin-bottom: 0px"&gt;Запертые.&lt;/h3&gt;
&lt;p style="margin-top: 0px"&gt;Покидая мероприятие в конце дня, один из директоров обнаружил проблемку. "Похоже, у нас загвоздка", - произнёс он. "Мой бейджик посетителя не включает лифт".&lt;/p&gt;

&lt;p&gt;Не горя желанием спускаться пешком по лестнице тридцать этажей, директора вернулись в конференц-зал и позвонили дежурному администратору здания.&lt;/p&gt;

&lt;p&gt;"Я думал, вы, ребята, уже ушли давно" - сказал администратор растерянно. "Я даже собирался отругать вас завтра за то, что вы не вернули ваши бейджики посетителей. Их, кстати, деактивировали из соображений безопасности, вы в курсе? А я обзванивал каждый зал для совещаний в поисках вас".&lt;/p&gt;

&lt;p&gt;"Да мы тут целый день сидели", - ответил один из директоров, - "наверное, телефон сломался".&lt;/p&gt;

&lt;p&gt;"Нуу,.." - призадумался администратор, - "вы же мне сейчас по нему звоните, верно?"&lt;/p&gt;

&lt;p&gt;Директор покорно признал этот факт, но затем предположил, что в телефоне не работает звонок. Он настоял, чтобы администратор перезвонил им, и, действительно, телефон не зазвонил. Никто не хотел заморачиваться этой проблемой сейчас, поэтому её решение было отложено на завтра.&lt;/p&gt;

&lt;p&gt;На утро телефон не был исправлен, поэтому из-за боязни снова оказаться запертыми, ещё и если не дай бог будет связи с администратором, директора позвонили электрику.&lt;/p&gt;

&lt;p&gt;Чуть позже тем же утром электрик прибыл и оценил обстановку. Он взглянул на телефон, переместил регулятор "Громкость звонка" и убедился, что звонок работает.&lt;/p&gt;

&lt;h3 style="margin-bottom: 0px"&gt;Темнота.&lt;/h3&gt;
&lt;p style="margin-top: 0px"&gt;На следующий день после окончания утренних презентаций кто-то сделал важное наблюдение: в комнате как-то необычно темно. Хуже того, когда он подошёл к выключателю и пощёлкал им туда-сюда, свет так и не зажёгся.&lt;/p&gt;

&lt;p&gt;"Позвольте-ка, я попробую" - сказал один из директоров. И он попробовал сам поклацать выключателем несколько раз. Затем директор покрутил выключатели кондиционеров и розеток. Безрезультатно.&lt;/p&gt;

&lt;p&gt;"Я думаю, не так надо", - произнёс другой директор. И попробовал клацать теми же выключателями, но в другом порядке. К его удивлению это не помогло.&lt;/p&gt;

&lt;p&gt;"Погодите, погодите", - прервал их коллега. Все стали наблюдать, как он вскарабкался на стол и принялся рассматривать светильники поближе. "Ага, вижу, тут нет ламп, которые сразу загораются. Стартеру нужно некоторое время, чтобы разогреться. Думаю, минут десять."&lt;/p&gt;

&lt;p&gt;После пятнадцати минут пребывания в темноте, директора обратились к методу, который, как они знали, сработает наверняка: позвонили электрику.&lt;/p&gt;

&lt;p&gt;Сразу после ленча тот пришёл и оценил обстановку. Электрик подошёл к выключателям, включил их, а затем выкрутил до отказа регулятор приглушённости света. Лампы моментально зажглись.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Невзирая на все технические преграды, "Саммит исполнительных директоров" прошёл на ура. Среди прочего, он дал ответ на очень Важный Вопрос: двенадцати директоров определённо мало для того, чтобы заменить лампочку.&lt;/p&gt;

&lt;p&gt;Оригинал: &lt;a href="http://thedailywtf.com/Articles/The-Executive-Summit.aspx"&gt;http://thedailywtf.com/Articles/The-Executive-Summit.aspx&lt;/a&gt;&lt;br&gt;
Перевод: &lt;a href="http://21csm.com"&gt;21csm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-nrW09ahr9oVX8wwQy3vZp8p8XU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-nrW09ahr9oVX8wwQy3vZp8p8XU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-nrW09ahr9oVX8wwQy3vZp8p8XU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-nrW09ahr9oVX8wwQy3vZp8p8XU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/6INcv6q5jvA" height="1" width="1"/&gt;</description> 
			<slash:comments>2</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/Sammit-direktorov.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/Sammit-direktorov.aspx</feedburner:origLink></item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>CodeSOD: Вопрос владения кодом или маразм?</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/DtZFmiAx4mc/Vopros-vladeniya-kodom-ili-marazm.aspx</link> 
			<category>CodeSOD</category>
			<pubDate>Sat, 28 Mar 2009 04:15:00 GMT</pubDate> 
			<guid isPermaLink="false">6513</guid> 
			<description>&lt;p&gt;"У нас в компании Х", - пишет &lt;b&gt;Jay Smith&lt;/b&gt;, - "есть старший программист, который на протяжении многих лет создавал ситуацию, когда весь контроль за кодом был завязан на него, и который заставлял клиентов находиться в зависимости от его авторитета, настаивая на том, что все его решения безапеляционно правильны (невзирая на реальные последствия)".&lt;/p&gt;

&lt;p&gt;"Это программист, который ненавидит пользоваться бесплатными библиотеками, наподобие STL, boost и какими бы то ни было сторонними API, которые могли бы упростить жизнь ему и команде. Он переписывает структуры данных для каждого проекта, избегает обычного XML-парсера, которого другим хватило бы с головой, этот парень уже столько раз заново изобрёл колесо, что со спокойной совестью мог бы получить на него патент. Проблемы его самоуважения и контроля над кодом были такими сильными, что если ему предлагали решение, при котором не было завязки на его код, в ответ звучало только недовольное сопение.&lt;/p&gt;

&lt;p&gt;Вразрез со своей компетенцией и опытом, он предпочитает придерживаться своих текущих принципов: если не я это написал, значит оно не вполне подходит. В купе с нынешней атмосферой срочности (у проекта как раз скоро демо) это означает, что релизация зачастую поспешная, без особых размышлений над последствиями своих действий".&lt;/p&gt;

&lt;p&gt;"Всё вышесказанное", - продолжает Jay, - "позволяет больше не удивляться следующим находкам в коде его проекта":&lt;/p&gt;

&lt;pre style="margin-left: 40px"&gt;
int    Utilities_CompareDouble(double P, double Q)
{
    _asm
    {
        fld P
        fld Q
        FCOMIP   ST, ST(1)   ;23
        fstp Q
        jc LESS
        and ah,20h
        Jnz EQUAL
        mov eax,0C00002h ;Greater
        jmp EXIT
EQUAL:
        mov eax,0C00001h
        jmp EXIT 
LESS:
        mov eax,0C00003h
EXIT:
    }
}&lt;/pre&gt;

&lt;p&gt;Jay продолжает: "Неужели же этот парень пытается переписать абсолютно всё? Ведь вот, что было изначально закоммичено в репозиторий":&lt;/p&gt;

&lt;pre style="margin-left: 40px"&gt;
int StringUtil_Compare(const char *left, const char *right)
{
    int result = 0;

    if(!strcmp(left,right))
        result = 1;

    return result;
}&lt;/pre&gt;

&lt;p&gt;"Нет нужды говорить," - добавляет Jay, - "что рецензирование его кода - это самый отличный способ быстро развеселить себя".&lt;/p&gt;

&lt;p&gt;Оригинал: &lt;a href="http://thedailywtf.com/Articles/Code-Ownership-Gone-Awry.aspx"&gt;http://thedailywtf.com/Articles/Code-Ownership-Gone-Awry.aspx&lt;/a&gt;&lt;br&gt;
Перевод: &lt;a href="http://21csm.com"&gt;21csm&lt;/a&gt;&lt;br&gt;
Автор перевода выражает особую благодарность Дмитрию Гриценко за помощь в адаптации труднопереводимых фрагментов публикации.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iDimt6xMcW2tC43b4aS0tHe1LFE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iDimt6xMcW2tC43b4aS0tHe1LFE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iDimt6xMcW2tC43b4aS0tHe1LFE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iDimt6xMcW2tC43b4aS0tHe1LFE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/DtZFmiAx4mc" height="1" width="1"/&gt;</description> 
			<slash:comments>1</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/Vopros-vladeniya-kodom-ili-marazm.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/Vopros-vladeniya-kodom-ili-marazm.aspx</feedburner:origLink></item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>Error'd: Опасная ошибка</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/YjF1zZm0qmo/Opasnaya-oshibka.aspx</link> 
			<category>Error'd</category>
			<pubDate>Fri, 27 Mar 2009 22:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6512</guid> 
			<description>&lt;p&gt;"Я увидел это сообщение на одном из терминалов Air Canada, расположенных сзади сидений," - пишет &lt;b&gt;Adrian Petrescu&lt;/b&gt;, - "как приятно прочитать такое пролетая в 11,000 футах над землёй."&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="http://img.thedailywtf.com/images/200903/errord/IMG_0215.jpg"&gt;&lt;br /&gt;
&lt;span style="font-size: 12px"&gt;"Предупреждение: Произошла опасная ошибка при отображении."&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;"Думаю, это полезно знать," - пишет &lt;b&gt;Ron&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="http://img.thedailywtf.com/images/200903/errord/safeguard.png"&gt;&lt;br /&gt;
&lt;span style="font-size: 12px"&gt;"SGE1188: Такой пароль уже используется другим пользователем. Всё равно хотите его использовать?"&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;"Терпеливо высидев 45 минут в ожидании врача," - пишет &lt;b&gt;Mike R.&lt;/b&gt;, "я сдался и купил мобильную версию Texas Hold'em покера. Для своих $7.49 это вполне приличный способ убить время, если закрыть глаза на некоторые ошибки в логике, выползающие время от времени."&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="http://img.thedailywtf.com/images/200903/errord/Picture%20004.jpg"&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;"KrisWorld, развлекательная система установленная на всех самолётах Сингапурских Авиалиний, - это хороший способ скрасить долгие часы перелётов,"  - подмечает &lt;b&gt;Jiahui&lt;/b&gt;, "но некоторые её фичи не вполне интуитивны."&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="http://img.thedailywtf.com/images/200903/errord/IMG_2868.jpg"&gt;
&lt;span style="font-size: 12px"&gt;"Пожалуйста, выберите предпочитаемый язык:&lt;br&gt;
- язык 1&lt;br&gt;
- язык 2&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;"Ммм," - пишет &lt;b&gt;Dave&lt;/b&gt; - "я, пожалуй, возьму.... ээээ... Athlon 64!"&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="http://img.thedailywtf.com/images/200903/errord/Processors%20AMD%20-%20lhdigital.co.uk.jpg"&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Оригинал: &lt;a href="http://thedailywtf.com/Articles/A-Nasty-Error.aspx"&gt;http://thedailywtf.com/Articles/A-Nasty-Error.aspx&lt;/a&gt;&lt;br&gt;
Перевод: &lt;a href="http://21csm.com/"&gt;21csm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ujY5QruJO4U4xs_LcDt2NZ3XzNw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ujY5QruJO4U4xs_LcDt2NZ3XzNw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ujY5QruJO4U4xs_LcDt2NZ3XzNw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ujY5QruJO4U4xs_LcDt2NZ3XzNw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/YjF1zZm0qmo" height="1" width="1"/&gt;</description> 
			<slash:comments>0</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/Opasnaya-oshibka.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/Opasnaya-oshibka.aspx</feedburner:origLink></item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>Сын ITAPPMONROBOT-a</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/RZFwKPHA0MY/Sbn-ITAPPMONROBOTa.aspx</link> 
			<category>Feature Articles</category>
			<pubDate>Wed, 18 Mar 2009 15:30:00 GMT</pubDate> 
			<guid isPermaLink="false">6504</guid> 
			<description>&lt;p&gt;Я всегда старался, чтобы истории, которыми делятся здесь, на The Daily WTF воодушевляли людей в определенном направлении. Воодушевили, скажем, на написание более приличного кода, вместо тех чудовищ, которые тут демонстрируются. Или, может, подтолкнули какого-нибудь особо отличившегося программиста переквалифицироваться в бухгалтера. Ну, или воодушевить в общепринятом смысле, напоминая, что наша работа хоть &lt;a href="http://ru.thedailywtf.com/Articles/Programmirovanie--otstoj!-Ili-chtoto-vrode-togo.aspx"&gt;порой и скучна&lt;/a&gt;, но, во всяком случае, не совсем &lt;a href="http://ru.thedailywtf.com/Articles/Bessmbslennostb.aspx"&gt;бессмысленна&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Поэтому мне особенно приятно видеть, что одна статья – &lt;a href="http://ru.thedailywtf.com/Articles/RU_ITAPPMONROBOT.aspx"&gt;ITAPPMONROBOT&lt;/a&gt; - воодушевила других ИТ профессионалов на создание своего собственного «робота». И не один раз (смотрим: &lt;a href="http://ru.thedailywtf.com/Articles/Sezam-otkrojsya.aspx"&gt;Сезам откройся&lt;/a&gt;), а теперь уже дважды. Феликс объясняет...&lt;/p&gt;

&lt;p&gt;У нас в офисе имеется фирменный беспроводной канал, который соединяет нашу сеть со специализированным оборудованием. Сам этот канал, представляет собой обычный компьютер, в который воткнута до идиотизма дорогая PCI-карта с не менее идиотскими драйверами. Примерно раз в пару дней (а иногда и по несколько раз в день), беспроводная карта сходит с ума, и в соответствии с рекомендациями производителя чтобы привести ее в чувство мы «должны просто обесточить компьютер, а потом включить его снова». Фича такая я полагаю.&lt;/p&gt;

&lt;p&gt;Месяцами мы беседовали на тему приобретения дистанционно управляемого выключателя электропитания и написания специально скрипта, который передергивает питание в случае падения канала. Но так как на это не было ни денег, ни времени, приходилось пользоваться классической техникой «мануального кнопочного ресета». Пока однажды я не увидел ITAPPMONROBOT-а.&lt;/p&gt;

&lt;p&gt;Я решил сделать нечто чуть более сложное и, как мне кажется, чуть более элегантное. Я открыл корпус сервера держащего канал, и прикрутил длинный провод к проводам, подключенным к кнопке сброса. Затем я отыскал старый десктоп, воткнул его на полку под сервером, и с помощью &lt;a href="http://thedailywtf.com/Articles/Duct_tape_to_the_rescue_.aspx"&gt;секретного оружия&lt;/a&gt; слесаря присоединил провода к CD-приводу.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="http://img.thedailywtf.com/images/200902/wires.jpg" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Как видно в приближении, провода размещены так, чтобы контакты аккуратно замыкались, когда открывается лоток.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="http://img.thedailywtf.com/images/200902/closeup.jpg" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Удивительно, но лоточно\ресетная система проработала без сбоев уже девять месяцев. Уверен, сейчас мы смогли бы протолкнуть приобретение управляемого электрического переключателя. Но никто этого не хочет. Трудно объяснить, но есть какое-то приятное ощущение от того, что увидев письмо «канал упал», с нетерпением ждешь пару минут, пока наш маленький робот перезагрузит сервер, чтобы затем получить от него «канал поднялся».&lt;/p&gt;

&lt;p&gt;Оригинал: &lt;a href="http://thedailywtf.com/Articles/The-Son-of-ITAPPMONROBOT.aspx"&gt;http://thedailywtf.com/Articles/The-Son-of-ITAPPMONROBOT.aspx&lt;/a&gt;&lt;br /&gt;
Перевод: Евгений Виговский&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/h6Q9OpVrI7yrE4hllhZTfmF0hDM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/h6Q9OpVrI7yrE4hllhZTfmF0hDM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/h6Q9OpVrI7yrE4hllhZTfmF0hDM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/h6Q9OpVrI7yrE4hllhZTfmF0hDM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/RZFwKPHA0MY" height="1" width="1"/&gt;</description> 
			<slash:comments>0</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/Sbn-ITAPPMONROBOTa.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/Sbn-ITAPPMONROBOTa.aspx</feedburner:origLink></item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>Сезам откройся</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/oWyw34zloc8/Sezam-otkrojsya.aspx</link> 
			<category>Feature Articles</category>
			<pubDate>Tue, 17 Mar 2009 10:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6502</guid> 
			<description>&lt;p&gt;У &lt;b&gt;Эммануэля Флорака&lt;/b&gt; и остальных обитателей офиса появилась  проблема: они могли выходить за пределы офиса, когда им заблагорассудится, но никто не мог вернуться обратно. Всему виной, без сомнения, была свежеустановленная металлическая дверь с электронным замком. Вопреки всем стараниям, никто так и не смог открыть дверь при помощи своей карточки.&lt;/p&gt;

&lt;p&gt;Офис менеджер весь день пытался дозвониться до слесаря, но каждый звонок заканчивался лаконичным, «Просим прощения, но этот ящик голосовой почты переполнен. Пожалуйста, попробуйте перезвонить позже». Чем ближе день клонился к вечеру, тем ближе к реальности становилось чье-то шуточное предложение, что «кому-то придется ночевать в офисе».&lt;/p&gt;

&lt;p&gt;К счастью у Эммануэля была идея получше. Чтобы открыть дверь изнутри, достаточно было слегка прикоснуться к кнопке управляющей замком, поэтому все, что требовалось сделать, это отыскать нечто, способное слегка прикасаться к этой кнопке. Так как деталей для сборки робота под рукой не оказалось, пришлось найти &lt;a href="http://ru.thedailywtf.com/Articles/RU_ITAPPMONROBOT.aspx"&gt;альтернативу&lt;/a&gt;: несколько картонных коробок и бесхозный офисный компьютер. Вот что у него получилось:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="http://img.thedailywtf.com/images/200812/sesam_open.jpg" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;На следующее утро, в восемь часов, один из сослуживцев Эммануэля позвонил ему и попросил открыть дверь. Эммануэль отставил свою чашку с кофе, поднялся к своему компьютеру и затем:&lt;br /&gt;
1) За-VPN-ился в офис&lt;br /&gt;
2) Зашел через SSH на машину в прихожей&lt;br /&gt;
3) Запустил ~# eject /dev/scd0&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;И, &lt;em&gt;щелк&lt;/em&gt;, дверь открыта.&lt;/p&gt;

&lt;p&gt;В тот же день явился слесарь и починил дверь, списав на пенсию робота едва заступившего на службу.&lt;/p&gt;

&lt;p&gt;Оригинал: &lt;a href="http://thedailywtf.com/Articles/Open-Sesame.aspx"&gt;http://thedailywtf.com/Articles/Open-Sesame.aspx&lt;/a&gt;&lt;br /&gt;
Перевод: Евгений Виговский&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0UXV9v1V_zcNMDU-2NN-oawuWSo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0UXV9v1V_zcNMDU-2NN-oawuWSo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0UXV9v1V_zcNMDU-2NN-oawuWSo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0UXV9v1V_zcNMDU-2NN-oawuWSo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/oWyw34zloc8" height="1" width="1"/&gt;</description> 
			<slash:comments>0</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/Sezam-otkrojsya.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/Sezam-otkrojsya.aspx</feedburner:origLink></item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>CodeSOD: Наступил Апокалипсис?!</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/F-u1n5SaPOo/Nastupil-Apokalipsis!.aspx</link> 
			<category>CodeSOD</category>
			<pubDate>Fri, 06 Mar 2009 11:15:00 GMT</pubDate> 
			<guid isPermaLink="false">6487</guid> 
			<description>&lt;p&gt;На днях &lt;b&gt;J&amp;ouml;rg S&lt;/b&gt; наткнулся на довольно интересное сообщение о проблеме:&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
___ Наступил Апокалипсис?! ___
 Ticket ID   : 76831
 Создано : Cary L----------
 Назначено на : J&amp;ouml;rg S-----
 Приоритет    : Низкий

   Юридический отдел хочет убедиться, что в нашем релизе 2010 Q1 будет 
   представлен определённый язык, но когда я пытаюсь добавить это в ComplianceTraq,
   то всё время получаю вот что:
   
       &lt;em&gt;ОШИБКА: Пожалуйста, убедитесь, что системные часы настроены верно. И если
       это так... тогда Боже, помоги нам всем, потому что скорее всего из-за багов в
       "Соответствии требованиям" наступил апокалипсис, а мы всё ещё пытаемся их 
       исправить. Будь проклято "Соответствие требованиям"!&lt;/em&gt;

   Понимаю, что сейчас у всех нелёгкие времена, но неужели ComplianceTraq знает
   что-то, что не известно мне? Я же не пропустила апокалипсис, верно?!?!
&lt;/pre&gt;
&lt;/blockquote&gt;
   
&lt;p&gt;Оглянувшись вокруг и удостоверившись, что на улице не проливается дождём с небес огонь и сера, J&amp;ouml;rg S почувствовал уверенность - никакого апокалипсиса и в самом деле не случилось. Тем не менее, он задумался: не эти ли "трагические последствия" подразумевал юридический отдел, расписывая, что будет, если не добиться соответствия требованиям.&lt;/p&gt;

&lt;p&gt;Это сообщение исходило от ComplianceTraq - одного из старейших внутрикорпоративных веб-приложений. Его использовали для улаживания всех проблем, которые касались соответствия требованиям к их программным продуктам. J&amp;ouml;rg S'у не составило особого труда отыскать сообщение в системе, так как всего один файл содержал в себе слово "апокалипсис".&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
Else If implementationDate &gt; DateSerial( 2010, 01, 01) Then
    ' Этого не может произойти, т.к. implementationDate не может
    ' быть больше чем следующий год после системной даты... и потому что
    ' очевидно, десятилетия вполне достаточно, чтобы устранить 
    ' даже самые затянувшиеся проблемы с соответствием требованиям

    Response.Write _
        "&amp;lt;B&amp;gt;ОШИБКА&amp;lt;/B&amp;gt;: Пожалуйста, убедитесь, что системные часы настроены верно. И " &amp; _
	"если это так... тогда Боже, помоги нам всем, потому что скорее всего из-за багов " &amp; _
	"в ``Соответствии требованиям`` наступил апокалипсис, а мы всё ещё пытаемся " &amp; _
	"их исправить. Будь проклято ``Соответствие требованиям``!"
    Response.End
&lt;/pre&gt;
&lt;/blockquote&gt;
	
&lt;p&gt;Очевидно, решение проблемы было делом пяти секунд, но J&amp;ouml;rg S не мог не поразиться, почему же девелопер выбрал 01.01.2010 в качестве дня страшного суда. Код казался древним, но ведь любой разработчик должен был осознавать, что неурядицы с соответствием требованиям будут постоянно всплывать то тут, то там. После коммита своих изменений в репозиторий, он бегло просмотрел историю версий файла.&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
#    User       Checked-in         Comments
----------------------------------------------------------------
1    jorgs      1997-01-10         новый файл
2    jorgs      1997-01-23         исправлены баги
3    jorgs      1998-02-09         добавлены поля для категорий
4    alany      1998-11-26         увеличена длина для названия
 --- snip ---
11   cyrusm     2000-03-13         заменить "Y2K" на "Compliance"
 --- snip ---
33   jorgs      2009-02-09         апокалипсис остановлен
&lt;/pre&gt;
&lt;/blockquote&gt;
	
&lt;p&gt;И тут его осенило. В прошлом, когда J&amp;ouml;rg S был ещё практикантом, он написал простое веб-приложеньице для слежения за проблемой 2000 года. Спустя годы эта система, должно быть, трансформировалась в ComplianceTraq. И, очевидно, тогда ещё он не познал того, что "невероятный" код запускается слишком часто.&lt;/p&gt;

&lt;p&gt;
Оригинал: &lt;a href="http://thedailywtf.com/Articles/The-Apocalypse-Must-Have-Occured!.aspx"&gt;http://thedailywtf.com/Articles/The-Apocalypse-Must-Have-Occured!.aspx&lt;/a&gt;&lt;br&gt;
Перевод: &lt;a href="http://21csm.com"&gt;21csm&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8itPlY2BGn4Cp_0WQtHNE_dT7Zs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8itPlY2BGn4Cp_0WQtHNE_dT7Zs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8itPlY2BGn4Cp_0WQtHNE_dT7Zs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8itPlY2BGn4Cp_0WQtHNE_dT7Zs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/F-u1n5SaPOo" height="1" width="1"/&gt;</description> 
			<slash:comments>1</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/Nastupil-Apokalipsis!.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/Nastupil-Apokalipsis!.aspx</feedburner:origLink></item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>Alex's Soapbox: Программирование - отстой! Или что-то вроде того.</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/LRaXL_-GkoM/Programmirovanie--otstoj!-Ili-chtoto-vrode-togo.aspx</link> 
			<category>Alex's Soapbox</category>
			<pubDate>Thu, 05 Mar 2009 21:15:00 GMT</pubDate> 
			<guid isPermaLink="false">6482</guid> 
			<description>&lt;p&gt;Программирование — это не забава. Это нудное и скучное занятие, и, уж конечно, никакой не подвиг. Чего бы вы там с ним не делали, программирование совершенно точно не будет «секси».&lt;/p&gt;

&lt;p&gt;Я знаю, что вы думаете. Всех, кто так говорит — и уж тем более пишет такое в блогах — нужно немедленно лишить их программерской лицензии, отобрать у них клавиатуры и навечно посадить за микроЭВМ с CP/M, 8"-ми дискетами и модемом на 1200 бод.&lt;/p&gt;

&lt;p&gt;Безусловно, многим из нас, включая меня, нравится писать код. Но должно ли нам это нравиться?&lt;/p&gt;

&lt;h3 style="margin-bottom: 0px"&gt;Почему мы пишем код?&lt;/h3&gt;

&lt;p style="margin-top: 0px"&gt;Разработчик ПО — это уникальная профессия, в которой мы можем использовать свои умения, как для работы, так и для хобби. В отличие от бухгалтеров, которые вряд ли спешат домой, чтобы подбить баланс семейного бюджета, многие из нас частенько возятся с кодом забавы ради и удовольствия для.&lt;/p&gt;

&lt;p&gt;Но давайте в этой статье попробуем сосредоточиться на неком неувлечённом программисте и той работе, которую он выполняет. Фактически, давайте сузим наши рамки ещё сильнее и поговорим только о разработчиках «скучного» программного обеспечения. Под «скучным» я подразумеваю обработку погрузочно-разгрузочных накладных, учёт использования корпоративного автопарка, создание отчётов о расходах и т.п., и всё это только для внутреннего использования и с огромной кучей требований, специфичных для конкретной компании. Итак, повторюсь, если вы не зарабатываете себе на жизнь «скучным» ПО, тогда эта статья к вам не вполне применима.&lt;/p&gt;

&lt;p&gt;Хотя порой грань между «скучным» и «секси» софтом может размываться, «секси-программы» представляют собой то, чем мы с вами пользуемся регулярно, каждый божий день: SVN, Google Maps, Visual Studio, Firefox и т.п. По сути, нам как программерам редко приходится пользоваться каким-то нудным ПО.&lt;/p&gt;

&lt;p&gt;Однако с точки зрения процесса разработки картина диаметрально противоположна. Лишь избранным платят за разработку «секси-программ», в то время как большинство из нас погрязло в программировании скучной рутины.&lt;/p&gt;

&lt;h3 style="margin-bottom: 0px"&gt;Основы унылого ПО&lt;/h3&gt;

&lt;p style="margin-top: 0px"&gt;Для определения скучного ПО есть специальный термин — «информационные системы». И хотя назначение информационных систем варьируется от компании к компании, равно как и конкретные требования, по большому счёту все они одинаковые. В них есть база данных, которая моделирует реальный мир, правила, определяющие то, как данные могут изменяться, интерфейс для работы с базой и уйма различных отчётов.&lt;/p&gt;

&lt;p&gt;Формальный процесс создания этих информационных систем впервые появился ещё в 60-х годах, а с 70-х вообще практически не поменялся (&lt;a href="http://www.amazon.com/gp/product/0135986249?ie=UTF8&amp;tag=tdw-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0135986249"&gt;Современный Структурный Анализ&lt;/a&gt; на диво всё ещё современен). В сущности, вы анализируете проблему, составляете карту потоков данных, структурируете эти потоки, создаёте базу и пишете программы, которые являются интерфейсом для работы с БД.&lt;/p&gt;

&lt;p&gt;Мы перешли от «тонких клиентов» в «зеленоглазых» терминалах к «толстым клиентам» в виде приложений для ПК. Затем мы переметнулись к «тонким клиентам» на вебе, а с платформами наподобие Windows Presentation Foundation и глазом моргнуть не успеем, как снова окажемся рядом с «толстыми клиентами». Как бы там ни было, наши системы продолжают делать одно и то же: запись/чтение данных.&lt;/p&gt;

&lt;p&gt;Разработка информационных систем особо не поменялась. Не важно, используете ли вы Visual Basic 3.0 или xHTML, принципы остались практически теми же: база данных должна быть представлена взору пользователя в максимально приятном и дружественном свете. Код, который для этого необходим (и всегда был необходимым), довольно уныл:&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;txtFirstName.DisplayWidth = 30;
txtFirstName.MaxCharLength = 50;
SetTextBoxValidator(txtFirstName, Validations.LettersOnly);
txtFirstName.Enabled = securityContext.CanEdit;
txtFirstName.Value = customerRecord.FirstName;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Эти пять строчек кода, просто устанавливают некоторые свойства UI. Повторите это для каждого поля, каждой сущности, а затем умножьте ещё на 1,5, просто потому, что некоторые поля должны быть доступны из двух разных мест. А теперь добавьте весь код, необходимый для валидации и сохранения данных, полученных из UI. Если математика меня не подводит, в результате мы получаем туеву хучу унылого, скучного кода.&lt;/p&gt;

&lt;h3 style="margin-bottom: 0px"&gt;Дилемма разработчика&lt;/h3&gt;

&lt;p style="margin-top: 0px"&gt;«Уныние» и «скука» — два слова, которые не очень-то вяжутся с девелоперами. Мы — сборище аналитиков, имеющих зачастую образование специалиста компьютерных наук (информационных технологий). И мы способны на гораздо большее, нежели строчка за строчкой сводить фронт-энды с бэк-эндами. Возможно, мы могли бы облегчить нашу работу, используя свои навыки и способности.&lt;/p&gt;

&lt;p&gt;Здесь-то и кроется загвоздка. Как выразился Майкл А. Джексон в своих «Принципах проектирования программ» 1975 года, «Программисты… часто находят спасение в их, в общем-то, понятном, но на деле губительном стремлении к усложнениям и ухищрениям в своей работе. Отстранённые от создания чего-либо большего, чем просто программа, они отвечают тем, что делают эту программу до такой степени замысловатой, чтобы она была достойным вызовом для их профессиональных навыков».&lt;/p&gt;

&lt;p&gt;Это наблюдение 35-летней давности изо дня в день находит свои подтверждения здесь, на «The Daily WTF». Самый изощрённый код и истории, опубликованные тут, порождены тягой разработчика к &lt;a href="http://thedailywtf.com/Articles/Now_That_0x27_s_A_Neat_Trick.aspx"&gt;достижению мастерства&lt;/a&gt;. Эти стремления никоим образом не являются неким заблуждением или результатом злого умысла, они инстинктивны.&lt;/p&gt;

&lt;p&gt;Когда я писал о &lt;a href="http://ru.thedailywtf.com/Articles/Myagkoe-kodirovanie.aspx"&gt;soft-кодировании&lt;/a&gt;, я привёл фрагмент, на который должно быть похоже большинство написанного кода, то есть самого специфичного кода, реализующего самые особенные бизнес-требования. Он довольно скучный:&lt;/p&gt;

&lt;blockquote dir="ltr" style="margin-right: 0px"&gt;
&lt;pre&gt;
private void attachSupplementalDocuments()
{
  if (stateCode == "AZ" || stateCode == "TX") {
    //SR008-04X/I are always required in these states
    attachDocument("SR008-04X");
    attachDocument("SR008-04XI");
  }

  if (ledgerAmnt &gt;= 500000) {
    //Ledger of 500K or more requires AUTHLDG-1A
    attachDocument("AUTHLDG-1A");
  }

  if (coInsuredCount &gt;= 5  &amp;&amp; orgStatusCode != "CORP") {
    //Non-CORP orgs with 5 or more co-ins require AUTHCNS-1A
    attachDocument("AUTHCNS-1A");
  }
}
&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Среди многочисленных отзывов к этой статье некоторые предлагали довольно &lt;a href="http://thedailywtf.com/Comments/Soft_Coding.aspx#131288"&gt;забавные фидбэки&lt;/a&gt;, демонстрируя способы «усложнения» кода. И, к сожалению, эти примеры отлично иллюстрируют ту реализацию простых бизнес-требований, с которой мне приходится сталкиваться.&lt;/p&gt;

&lt;p&gt;Другие читатели озвучили несколько &lt;a href="http://ayende.com/Blog/archive/2007/04/11/Refactoring-the-DailyWTF.aspx"&gt;серьёзных предложений по рефакторингу&lt;/a&gt;, включавших в себя все мыслимые паттерны проектирования, интерфейсы, расширения и прочую кучу классов. Естественно, всё это без единого взгляда на модуль, к которому этот гипотетический код относился, не говоря уже об общем понимании системы и требований к ней.&lt;/p&gt;

&lt;p&gt;Нашёлся даже один парень, Джеймс Тейлор, который по сути &lt;a href="http://www.ebizq.net/blogs/decision_management/2007/04/dont_soft-code_use_business_ru.php"&gt;обозвал меня идиотом&lt;/a&gt; за предположение о том, будто разработчики станут марать руки о какие-то там бизнес-правила. По-видимому, все мы должны строить выдающиеся &lt;a href="http://thedailywtf.com/Articles/The-Expert-System.aspx"&gt;экспертные системы&lt;/a&gt; с затейливыми UI-интерфейсами, которые позволят конечному пользователю делать всю грязную работу.&lt;/p&gt;

&lt;p&gt;Конечно, те из нас, кто живёт в реальном мире, отдают себе отчёт в том, что подобные «экспертные системы» существуют только в стране фей, единорогов и &lt;a href="http://www.faqs.org/faqs/compression-faq/part1/section-8.html"&gt;безпотерьного сжатия случайных данных&lt;/a&gt;. Но есть другая реальность, которую многим из нас следует принять: разработка прикладных программ — отстой, и никакое количество XML-я или паттернов проектирования этого не изменит.&lt;/p&gt;

&lt;h3 style="margin-bottom: 0px"&gt;Просто примите это&lt;/h3&gt;

&lt;p style="margin-top: 0px"&gt;Нелегко принять тот факт, что программное обеспечение, которое мы пишем каждый божий день, независимо от его назначения и целей, — это скукотища смертная. Управление подпиской на журналы. Отчёты о медицинских счетах. Управление реестром недвижимости. Это не те программы, которые изменяют мир. На самом деле они даже вряд ли вызовут улыбку на чьём-нибудь лице. На практике их истинное назначение сводится к повышению производительности неких работников.&lt;/p&gt;

&lt;p&gt;Каким бы унылым это не казалось, наша работа состоит исключительно в том, чтобы принести прибыль работодателю, а не удовлетворение нам. Вот, что означает быть профессионалом.&lt;/p&gt;

&lt;p&gt;Я уверен, что многие адвокаты с горящими глазами уцепятся за первый же захватывающий судебный процесс, но также быстро отступят, если такое решение будет лучшим выходом для клиента. Архитекторы мечтают заполучить возможность а-ля &lt;a href="http://www.fallingwater.org/2"&gt;Fallingwater&lt;/a&gt;, но если проект требует постройки большого склада с разгрузочными доками — это будет единственным, что они нанесут на чертежи. И если нашему работодателю требуется софт для управления платёжными ваучерами, то он должен получить именно его, а не «систему, основанную на плагинах с масштабируемыми и распознаваемыми в реал-тайме шаблонами UI» или в необходимости чего там ещё мы сами себя убедим.&lt;/p&gt;

&lt;h3 style="margin-bottom: 0px"&gt;Переосмысление разработки ПО&lt;/h3&gt;

&lt;p style="margin-top: 0px"&gt;Бесполезна работа с невдохновленным, посредственным разработчиком, но другая крайность — неверно направленный энтузиазм — во много раз хуже. Пара багов и код, который трудно сопровождать без слёз, меркнут в сравнении с разрушительными результатами, к которым может привести разработчик, мотивированный не в ту сторону.&lt;/p&gt;

&lt;p&gt;Всё, начиная от платформы ("А давайте попробуем Руби!"), включая архитектуру ("да тут не может быть только два уровня") и заканчивая техниками, которые непосредственно используются в коде ("нам нужен аспектно-ориентированный фреймворк!") могут быть — а часто так и есть — продиктованы больше желанием изучить новую технологию, нежели реальными нуждами бизнеса. Выберите неверную платформу или изобретите ошибочную технику, и проект неизбежно обречён.&lt;/p&gt;

&lt;p&gt;Подписав смертный приговор не одному проекту, как следствие моего желания «посоревноваться» с самим собой, мне пришлось освоить несколько важных правил, которым должно следовать при разработке информационных бизнес-систем.&lt;/p&gt;

&lt;p style="margin-left: 40px"&gt;&lt;b&gt;1. Изучайте бизнес.&lt;/b&gt;
Нелепо считать, что совершенно не нужно понимать суть бизнеса при разработке софта для этого бизнеса. Без понимания истинных нужд заказчика невозможно предоставить ему то, что ему на самом деле необходимо. Верно, когда они говорят «новая база данных на каждый день», они на самом деле не имеют в виду &lt;a href="http://thedailywtf.com/Articles/A_Database_0x27_s_Database.aspx"&gt;новую базу каждый день&lt;/a&gt;.&lt;/p&gt;

&lt;p style="margin-left: 40px"&gt;&lt;b&gt;2. Служите интересам бизнеса.&lt;/b&gt;
Каждый ремесленник хочет использовать самые последние, великолепные и мощные инструменты, но они редко необходимы для работы. Подобно этому практически никогда невозможно мгновенно обновить платформы/библиотеки/языки. Тот код 10-летней давности, написанный на «классическом ASP», не устарел — его просто не так прикольно сопровождать.&lt;/p&gt;

&lt;p style="margin-left: 40px"&gt;&lt;b&gt;3. Учитесь вне работы.&lt;/b&gt;
Саморазвитие — это главный принцип любой профессии, но заниматься этим следует «вне работы», то есть не во время разработки информационных систем. Вместо этого учитесь, создавая приложения для себя, вашей команды, или даже для каких-то open source проектов. &lt;i&gt;&lt;b&gt;Пояснение:&lt;/b&gt; «Вне работы» не означает, что вы вообще не должны учиться в процессе работы. Обучение важно, но не занимайтесь им в процессе разработки информационных систем для заказчика. Приберегите это для ваших собственных или внутрикомандных проектов.&lt;/i&gt;&lt;/p&gt;

&lt;p style="margin-left: 40px"&gt;&lt;b&gt;4. Кодируйте главным образом бизнес-логику.&lt;/b&gt;
Если в основной своей массе код, написанный вашими руками, не является специфичным для предметной области и не связан с целями приложения, значит, вы используете неправильные инструменты. Если вы свято верите в то, что система нуждается во фреймворке для логгирования, значит, озвучьте это и получите одобрение заказчика.&lt;/p&gt;

&lt;p style="margin-left: 40px"&gt;&lt;b&gt;5. От скуки не уйти.&lt;/b&gt;
Никакие O/R-мапперы или генераторы кода не смогут избавить вас от факта, что записи, поля, валидаторы и т.п. должны быть прописаны вручную, по крайней мере, в двух местах (фронт-энд и бэк-энд). И UI, генерируемая из базы — это также плохо, как база, генерируемая из UI.&lt;/p&gt;

&lt;p style="margin-left: 40px"&gt;&lt;b&gt;6. Ищите удовлетворение повсюду.&lt;/b&gt;
Если ваш единственный источник получения удовольствия — это написание сложного кода, тогда вам никогда не стать хорошим и довольным разработчиком приложений. Лично я счастлив от мысли, что помог конечному пользователю увеличить его продуктивность и/или открыл новые возможности для какой-то организации.&lt;/p&gt;

&lt;p style="margin-left: 40px"&gt;... и, если ничто не помогает, ...&lt;/p&gt;

&lt;p style="margin-left: 40px"&gt;&lt;b&gt;7. Найдите себе другую работу.&lt;/b&gt;
Возможно, вы достигли своего &lt;a href="http://thedailywtf.com/Articles/Up-or-Out-Solving-the-IT-Turnover-Crisis.aspx"&gt;максимума&lt;/a&gt; на этой работе. Или может вас просто тошнит от такого типа программирования. Как бы там ни было, существует целая масса программерских возможностей, которые не включают в себя скуку и информационные системы. Конечно, конкуренция будет намного выше, поскольку шедевры наподобие &lt;a href="http://thedailywtf.com/Articles/The_Brillant_Paula_Bean.aspx"&gt;«The Brilliant Paula's bean»&lt;/a&gt; рождаются только в недрах IT-корпораций.&lt;/p&gt;

&lt;p&gt;В конце дня лучшими программистами оказываются не те, кто написал самый потрясающе-элегантный, умопомрачительно-инновационный код. Настоящие рок-звёзды сдают проекты &lt;b&gt;до&lt;/b&gt; намеченного срока и &lt;b&gt;дешевле&lt;/b&gt; отведённого бюджета, и это именно то, в чём нуждается бизнес. И это именно те, кем все мы должны стремиться стать.&lt;/p&gt;

&lt;p&gt;Оригинал: &lt;a href="http://thedailywtf.com/Articles/Programming-Sucks!-Or-At-Least,-It-Ought-To-.aspx"&gt;http://thedailywtf.com/Articles/Programming-Sucks!-Or-At-Least,-It-Ought-To-.aspx&lt;/a&gt;&lt;br&gt;
Перевод: &lt;b&gt;&lt;a href="http://21csm.com/"&gt;21csm (http://21csm.com)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/usnLa5wkzscAPmLqV4eJLahbSiE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/usnLa5wkzscAPmLqV4eJLahbSiE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/usnLa5wkzscAPmLqV4eJLahbSiE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/usnLa5wkzscAPmLqV4eJLahbSiE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/LRaXL_-GkoM" height="1" width="1"/&gt;</description> 
			<slash:comments>8</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/Programmirovanie--otstoj!-Ili-chtoto-vrode-togo.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/Programmirovanie--otstoj!-Ili-chtoto-vrode-togo.aspx</feedburner:origLink></item>
	
		<item>
			<author>Evgeniy Vigovskiy</author> 
			<title>Error'd: Кина не будет, видеоспама тоже</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/jibeQx16Q8o/Kina-ne-budet,-videospama-tozhe.aspx</link> 
			<category>Error'd</category>
			<pubDate>Mon, 05 May 2008 18:30:00 GMT</pubDate> 
			<guid isPermaLink="false">6054</guid> 
			<description>&lt;p&gt;Проходя мимо кинотеатра, наш читатель &lt;strong&gt;Руслан понял&lt;/strong&gt;, что кина не будет. И кинщик тут был ни при чем.&lt;/p&gt;
&lt;img src="http://img.worsethanfailure.com/images/RU/2008/kinopalace_wtf.jpg" width="640" height="374"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;И хотя "пленки" в камере уже не осталось, ему удалось уговорить ее сделать еще один снимок.&lt;/p&gt;
&lt;img src="http://img.worsethanfailure.com/images/RU/2008/camera_wtf.jpg" width="640" height="550"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4ZRRXeF09Du6aSGkotZswV697T0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4ZRRXeF09Du6aSGkotZswV697T0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4ZRRXeF09Du6aSGkotZswV697T0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4ZRRXeF09Du6aSGkotZswV697T0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/jibeQx16Q8o" height="1" width="1"/&gt;</description> 
			<slash:comments>6</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/Kina-ne-budet,-videospama-tozhe.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/Kina-ne-budet,-videospama-tozhe.aspx</feedburner:origLink></item>
	
		<item>
			<author>Jake Vinson</author> 
			<title>Без чувства меры</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/0l0AF-d6OYQ/Bez-chuvstva-merb.aspx</link> 
			<category>Feature Articles</category>
			<pubDate>Mon, 14 Apr 2008 17:45:00 GMT</pubDate> 
			<guid isPermaLink="false">6014</guid> 
			<description>&lt;p&gt;&lt;img class="wtf_imgfloatright" style="FLOAT: right; MARGIN: 5px" alt="" src="http://img.thedailywtf.com/images/200803/benjamins.jpg" /&gt;Воздух был пропитан возбуждением. Смену веков бум интернет-компаний встретил в полной силе. Пузырь все надувался и надувался, казалось, он непобедим! Консалтинговая компания, на которую работал &lt;strong&gt;Крис Дж.&lt;/strong&gt; заполучила самый большой контракт, который у нее когда-либо был. Впервые за ее существование контракт выражался семизначным числом. Цель? Создать дочерний сайт для крупного инвестиционного банка, который будет поставлять свежайшие новости и аналитику инвестиционного мира.&lt;/p&gt;

&lt;p&gt;Клиент сразу же дал понять: он хочет, чтобы все было сделано, как следует, поэтому деньги не имеют значения. В конце концов, на дворе пик пузыря. Вместе с компанией Криса были наняты и вовлечены практически в каждую деталь проекта лучшие консультанты из IBM и Sun. После того, как большая часть анализа была закончена, пришло время обсудить требующееся железо.&lt;/p&gt;

&lt;p&gt;В двух словах, анализ Sun гласил: проекту нужно большое железо – никаких серверных стоек для хлюпиков, никаких слабых четырехпроцессорных серверов. Нет, нужен монстр - E10K.&lt;/p&gt;

&lt;p&gt;E10K был огромным, во всех смыслах этого слова: минимум четыре процессора (с возможностью установить 64), живущих в гигантском корпусе 1.7x0.9x1.2 метра, весом 800 кг. Из-за ожидаемого наплыва пользователей сервер должен работать в полную силу - на все шестьдесят четыре процессора. Возможно, это более мощное решение, чем требуется, но, по крайней мере, оно на некоторое время избавит от забот об апгрейде. Хотя, после того, как сайт откроется, взрыв популярности наверняка приведет столько пользователей, что подобная мощь окажется востребованной.&lt;/p&gt;

&lt;p&gt;Но это еще не все. В системе существовало три класса пользователей - зарегистрированные, незарегистрированные и персонал. Sun рекомендовала выделить по одному E10K для каждого класса пользователей.&lt;/p&gt;

&lt;p&gt;Один E10K в предлагаемой конфигурации стоит около $2,000,000. Так что в сумме выходит шесть миллионов долларов. Разумеется, требуется резервное оборудование, так что удвойте сумму. Шесть серверов, двенадцать миллионов долларов, больше пяти тонн железа.&lt;/p&gt;

&lt;p&gt;Кроме того, разработчикам и отделу тестирования нужно сходное рабочее окружение, поэтому накиньте еще по шесть E10K каждому.&lt;/p&gt;

&lt;p&gt;Если вы следили внимательно, мы насчитали до 18 серверов. Железо стоимостью тридцать шесть миллионов долларов. Когда Sun огласил общую стоимость серверов, некоторого дополнительного железа и собственный гонорар, сумма увеличилась до $40,000,000.&lt;/p&gt;

&lt;p&gt;Как бы то ни было, сумма была не настолько серьезной, чтобы банк отказался. Началась агрессивная маркетинговая кампания завлекающая заинтересованных в новом сайте, и не было сомнений в том, что слухи распространяются. Существующим клиентам предоставили замечательную возможность  предварительно зарегистрироваться на сайте, чтобы сразу оценить все его возможности в день запуска. После кампании обошедшейся в несколько миллионов долларов пришло время подвести итог предварительной регистрации.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Сто шесть человек.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Это не было концом света, все еще могло бы сработать, если бы удалось каким-то образом вытянуть сотни тысяч долларов с каждого зарегистрированного пользователя. Ну, хорошо, может быть, это действительно было концом света. Осознав, что им ни за что не вернуть деньги, вложенные в железо, софт, консультантов и обслуживание системы, менеджмент закрыл весь проект, выставив целый этаж разработчиков на улицу и обратив компанию Криса в руины.&lt;/p&gt;

&lt;p&gt;Однако, хорошая новость в том, что индустрия извлекла урок и впредь избегает трат со стороны клиента в стиле "деньги не имеют значения", чтобы не потерять престиж и впечатление успешной отрасли, и тем самым поддерживает свою дутую репутацию по сей день.&lt;/p&gt;

&lt;p&gt;Перевод: &lt;a href="http://miroff.blogspot.com"&gt;miroff&lt;/a&gt; в соавторстве c Валерием Скурихиным &lt;br&gt;
Оригинал:&lt;a href="http://thedailywtf.com/Articles/Out-of-Balance.aspx"&gt;http://thedailywtf.com/Articles/Out-of-Balance.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uDaHuqrq7bpW96kPwewDqeoaKE0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uDaHuqrq7bpW96kPwewDqeoaKE0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uDaHuqrq7bpW96kPwewDqeoaKE0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uDaHuqrq7bpW96kPwewDqeoaKE0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/0l0AF-d6OYQ" height="1" width="1"/&gt;</description> 
			<slash:comments>1</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/Bez-chuvstva-merb.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/Bez-chuvstva-merb.aspx</feedburner:origLink></item>
	
		<item>
			<author>Jake Vinson</author> 
			<title>Проклятая дверь</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/ZKW6AOgyuHk/Proklyataya-dverb.aspx</link> 
			<category>Feature Articles</category>
			<pubDate>Mon, 24 Mar 2008 21:30:00 GMT</pubDate> 
			<guid isPermaLink="false">5966</guid> 
			<description>&lt;p&gt;&lt;em&gt;Сегодняшняя статья переведна товарищем из Новосибирска по имени &lt;a href="http://miroff.blogspot.com"&gt;miroff&lt;/a&gt;, который уже 6 лет специализируется на управлении сложностью, интеграции гетерогенных систем и реанимации проектов с технологическими проблемами.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img class="wtf_imgfloatright" style="FLOAT: right; MARGIN: 5px" alt="" src="http://img.thedailywtf.com/images/200803/cardreader.jpg" /&gt;Жизнь &lt;strong&gt;Джерми&lt;/strong&gt; была хороша. Он только что осел на хорошей работе с интересными коллегами в приятном, только что перестроенном офисе. Его кубикл располагался на идеальном расстоянии между лифтами, туалетом и торговыми автоматами. Босс признавал его, коллеги не стеснялись помогать, так что это была работа, которой он был искренне доволен.&lt;/p&gt;

&lt;p&gt;В действительности, лишь несколько вещей омрачали его радость – кофе был хреновый, поскольку в кофейном автомате не было любимого сорта, да двери с электронными замками открывались медленно. Джерми практически не замечал этого, пока однажды опаздывая на совещание, не обратил внимания на то, что ждет 10, 20, 30 секунд после того как провел своей карточкой прежде чем дверь откроется. Волнение улетучилось, после того как другой коллега опоздал еще больше, жалуясь, что «проклятая дверь открывалась, чуть ли не минуту!».&lt;/p&gt;

&lt;p&gt;Чего он действительно не мог понять, так это почему задержки такие разные. Иногда щелчок замка был слышен меньше чем через пять секунд после того как проводишь карточкой. Чаще, приходилось ждать гораздо дольше, по 30 секунд и больше. Начали ходить слухи о том, как заставить дверь поскорее открыться. Одни сотрудники проводили карточкой быстрее, другие медленнее. Некоторые проводили карточкой один раз и ждали, другие бешено дергали карточкой  снова и снова, пока дверь не открывалась. Иногда, кому-то из них везло, и дверь открывалась сразу же, так что успешное поведение закреплялось.&lt;/p&gt;

&lt;p&gt;Однажды Джерми задержался на работе и услышал вдалеке щелчок. Может, кто-то тоже задержался допоздна или пришла уборщица. Через несколько секунд, другой щелчок. Возможно, уборщица вышла за новой туалетной бумагой или чем-то еще. Джерми был слишком поглощен работой, чтобы обращать внимание, пока щелчки не начали его доставать.  Спустя несколько часов они стали для Джерми личным Сердцем-обличителем, сводящим его с ума. Джерми *щелк* стало сложно *щелк* сконцентрироваться *щелк* с этими отвлекающими *щелк* щелчками.&lt;/p&gt;

&lt;p&gt;Все, хватит. Джерми заблокировал компьютер и пошел купить перекусить. Как только он отвернулся от стола, дверь щелкнула. Отлично. Я скажу тому, кто это делает все, что я о нем думаю, думал он про себя. В офисе было практически темно, только вокруг нескольких светильников и настольных ламп были освещенные области – лифты, комната отдыха и стол Джерми. Он открыл дверь, которая только что отперлась, выглянул в коридор и не увидел ничего.&lt;/p&gt;

&lt;p&gt;Как только Джерми повернулся, чтобы вернуться к столу, дверь снова щелкнула. Он быстро вернулся, чтобы посмотреть. Никого не было. Это что, произошло само по себе? Он осмотрел считыватель карточек и провел своей карточкой. Как обычно, через 15 секунд дверь открылась. Он проследил провод от считывателя карточек до стойки секретарши, сразу за дверью. Дальнейшие исследования показали, что провод уходит в стоящий на полу шкаф, скрытый за мусорной корзиной и стопками бумаги и папок.&lt;/p&gt;

&lt;p&gt;Расчистив путь от хлама, он открыл шкаф и обнаружил компьютер с монитором. Джерми включил монитор и увидел что-то похожее на журнал – каждая строка содержала восьмизначный номер и отметку времени. Строка внизу списка была датирована всего несколькими секундами ранее. Сравнив свою карточку со списком, он обнаружил, что это был он. Предыдущее считывание было почти три часа назад. Самая ранняя запись была датирована около 8:00 часов прошлым утром.&lt;/p&gt;

&lt;p&gt;Спустя несколько секунд он догадался, в чем дело. Технически, дверь была исправна – карточки считывались, проверялись и записывались правильно. Каждое открытие соответствовало одному считыванию. Проблема была в том, что карточки считывались быстрее, чем система успевала их обработать, поэтому новые считывания вставали в очередь. Их было столько, что система все еще обрабатывала считывания, сделанные в 8:00 часов прошлым утром. Ситуацию ухудшали нетерпеливые сотрудники, проводившие карточкой по несколько раз. Двери должны были открываться и закрываться всю ночь.&lt;/p&gt;

&lt;p&gt;Джерми уже собирался пожать плечами и развернуться – в конце концов, это не его дело разбираться с дверями, но щелканье мешало ему сосредоточиться, так что он решил посмотреть, что можно сделать. Интерфейс программы был почти бесполезен, и Джерми не смог выяснить, в чем дело. Лог файл показался ключевой частью загадки, так что Джерми неожиданно решил попробовать переименовать файл и посмотреть насколько это прояснит дело.&lt;/p&gt;

&lt;p&gt;Джерми глубоко вздохнул и переименовал accesslog.txt в accesslog2.txt. Сразу же  щелканье дверных замков слилось в непрерывный гул и донеслось эхом со всего этажа. Джерми прикусил губу и подошел к ближайшему считывателю. Он провел карточкой, и дверь сразу же открылась. Его решение работало!
На следующее утро возле кулера шумели те, кто заметил улучшение, и обсуждали, кто мог быть тем неизвестным героем, починившим двери. Другие не были уверены, в том, что знают, что произошло, он одно они знали наверняка: что-то в мире исправилось этим утром.&lt;/p&gt;

&lt;p&gt;Оригинал:&lt;a href="http://thedailywtf.com/Articles/The-Haunted-Door.aspx"&gt;http://thedailywtf.com/Articles/The-Haunted-Door.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ub10ow6am-lxoJmNA-DHl0dVcR4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ub10ow6am-lxoJmNA-DHl0dVcR4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ub10ow6am-lxoJmNA-DHl0dVcR4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ub10ow6am-lxoJmNA-DHl0dVcR4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/ZKW6AOgyuHk" height="1" width="1"/&gt;</description> 
			<slash:comments>5</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/Proklyataya-dverb.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/Proklyataya-dverb.aspx</feedburner:origLink></item>
	
		<item>
			<author>George E McDougall</author> 
			<title>Mandatory Fun Day: 1.12: Предатель!</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/qa4MIQRvkDw/112-Predatelb!.aspx</link> 
			<category>Mandatory Fun Day</category>
			<pubDate>Mon, 03 Mar 2008 09:00:00 GMT</pubDate> 
			<guid isPermaLink="false">5861</guid> 
			<description>&lt;p&gt;&lt;img width="760" height="358" alt="" src="http://img.worsethanfailure.com/images/RU/gilroy/mfd012_traitors.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CdeccQe6JfghSLBF9k6cgOxWui0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CdeccQe6JfghSLBF9k6cgOxWui0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CdeccQe6JfghSLBF9k6cgOxWui0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CdeccQe6JfghSLBF9k6cgOxWui0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/qa4MIQRvkDw" height="1" width="1"/&gt;</description> 
			<slash:comments>6</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/112-Predatelb!.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/112-Predatelb!.aspx</feedburner:origLink></item>
	
		<item>
			<author>George E McDougall</author> 
			<title>Mandatory Fun Day: 1.11: Попалился</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/xdKmBGztsFM/Popalilsya.aspx</link> 
			<category>Mandatory Fun Day</category>
			<pubDate>Sun, 02 Mar 2008 21:00:00 GMT</pubDate> 
			<guid isPermaLink="false">5860</guid> 
			<description>&lt;p&gt;&lt;img width="760" height="355" alt="" src="http://img.worsethanfailure.com/images/RU/gilroy/mfd011_riskybrowsing.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XSJfKVgDXpppxij8IylhQHUDJ_k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XSJfKVgDXpppxij8IylhQHUDJ_k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XSJfKVgDXpppxij8IylhQHUDJ_k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XSJfKVgDXpppxij8IylhQHUDJ_k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/xdKmBGztsFM" height="1" width="1"/&gt;</description> 
			<slash:comments>0</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/Popalilsya.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/Popalilsya.aspx</feedburner:origLink></item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>CodeSOD: SQL Предложения</title> 
			<link>http://syndication.thedailywtf.com/~r/WTF/RU/~3/fhXSgsB87M4/SQL-Predlozheniya.aspx</link> 
			<category>CodeSOD</category>
			<pubDate>Sun, 02 Mar 2008 17:30:00 GMT</pubDate> 
			<guid isPermaLink="false">5856</guid> 
			<description>&lt;p&gt;Руководство компании &lt;strong&gt;Дэвида&lt;/strong&gt; не очень доверяло традиционной производственной последовательности отправить/пересобрать/развернуть. По их ощущениям, для этого требовалось слишком много шагов, и прорва времени. Организации требовалось внедрять изменения — в частности исправления ошибок — гораздо быстрее. Поэтому для решения проблемы они внимательно изучили процесс разработки, и аккуратно внесли в него необходимые изменения. Шучу. На самом деле они решили внедрить инновационную методику - «SQL Предложения».&lt;/p&gt;

&lt;p&gt;Начальники пришли к выводу, что, так как большая часть их приложения манипулировала данными в базе данных, то большинство багов возникает в результате неправильных SQL запросов. Скорее всего, там было что-то вроде использования LEFT JOIN вместо INNER JOIN, или &gt; вместо &gt;=. Они решили, что раз уж в их приложении уже была база данных, — вы уже поняли к чему все идет — почему бы тогда не хранить все SQL запросы в этой базе данных?&lt;/p&gt;

&lt;p&gt;Реализовать задумку поручили ведущему разработчику, который работал денно и нощно, чтобы в результате преобразовать ее в нечто чудовищное: библиотеку «SQL Предложения».&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;все SQL запросы до единого должны были храниться в таблице sql_sentences&lt;/li&gt;

    &lt;li&gt;чтобы не хардкодить назначение SQL запроса в его идентификаторе, каждому SQL предложению назначался четырехзначный шестнадцатиричный идентификатор - 0x00F9, 0xA004, и т.д. - вместо  GET_ALL_CUSTOMERS&lt;/li&gt;

    &lt;li&gt;каждому предложению назначались привилегии, метод GetSQLSentence() выполнял несколько других запросов, чтобы убедиться в том, что пользователь имеет право выполнять запрос&lt;/li&gt;

    &lt;li&gt;дабы ублажить тех разработчиков, которые выступали против хранения SQL запросов в базе, была добавлена конфигурационная переменная “UseHardcodedSQL”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Чтобы, выполнить все эти требования разработчикам потребовалось изменить свой код примерно следующим образом...&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
string sql;
// @SQLSentence=0x02f0
if ((bool)(Configuration.GetValue("UseHardcodedSQL")))
{
    sql = "SELECT cust_name, cust_phone, cust_addr " +
          "  FROM customers WHERE cust_type='Active'";
}
else
{
    sql = DataConnector.GetSQLSentence(0x02f0);
}
&lt;/blockquote&gt;
&lt;/pre&gt;

&lt;p&gt;... ну и, разумеется, дополнительно требовалось добавить этот же запрос в таблицу sql_sentences. А если в запрос надо внести изменения, то вносить их надо и в код и в гигантский скрипт, который создавал таблицу sql_sentences и в рабочую базу данных.&lt;/p&gt;

&lt;p&gt;Так как Дэвид еще не работал в компании, когда внедрялись эти изменения, то, как только он разобрался, что к чему, он спросил у ведущего разработчика, не доводилось ли ему когда-нибудь слышать о хранимых процедурах?&lt;/p&gt;

&lt;p&gt;«Ага», ответил он, «но я еще слышал, что их чертовски трудно сопровождать».&lt;/p&gt;

&lt;p&gt;Оригинал:&lt;a href="http://thedailywtf.com/Articles/SQL-Sentences.aspx"&gt;http://thedailywtf.com/Articles/SQL-Sentences.aspx&lt;/a&gt;&lt;br&gt;
Перевод:&lt;a href="http://ru.thedailywtf.com/Authors/Evgeniy_Vigovskiy.aspx"&gt;Евгений Виговский&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tqZMEOxn3zfdX8G4LPwB453rXA0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tqZMEOxn3zfdX8G4LPwB453rXA0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tqZMEOxn3zfdX8G4LPwB453rXA0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tqZMEOxn3zfdX8G4LPwB453rXA0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/WTF/RU/~4/fhXSgsB87M4" height="1" width="1"/&gt;</description> 
			<slash:comments>1</slash:comments> 
			<comments>http://ru.thedailywtf.com/Comments/SQL-Predlozheniya.aspx</comments>
		<feedburner:origLink>http://ru.thedailywtf.com/Articles/SQL-Predlozheniya.aspx</feedburner:origLink></item>
		
	</channel>
</rss>
