Сказка про старую машину

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

Хотите легкого чтива под новый год? Вот крошечные истории про случаи из моей работы, или случаи, свидетелем которых я стал.

Свинья

Моя первая длительная работа была в фирме «Ниеншанц», царствие ей небесное. Она работала на самописной ERP, которую писали мы — группа из 3-4 человек. Это были 90е годы, мы варились в собственном соку и не слышали про QA. То есть, девелоперская версия кода у нас крутилась отдельно, а база была одна-единственная, она же PROD. В горячие времена мы могли испечь и выкатить несколько релизов в день, без всяких новомодных DevOps, CD, CI.

Вскоре после моего ухода одного из моих коллег нашли рыдающим на клавиатуре. Он повторял одно слово — свинья. К счастью, рыдал он от смеха. Отлаживаясь на PROD, я заводил документы и, чтобы не пересекаться с реальными документами, заводил фиктивных клиентов, товары и услуги.

Так возникла доверенность на некую Свинью, которая умудрилась получить доверенность на Хрюкание. Аудиторы тоже очень удивлялись. Но они чаще плакали.

О форматах данных

Немного повторюсь, эта история из моей работы в Америке, где я работал, в том числе, в стартапе под названием Softlock.

Как образовалась там вакансия DBA? Взлет Softlock совпал с продажей книги Стивена Кинга «Riding the bullet» в формате PDF за символический 1 доллар через Softlock. В час X должна пойти реклама. Разумеется, за несколько недель до часа X программисты днюют и ночуют на работе. За пять минут до рекламы DBA вносит самое последнее изменение. В команде DELETE он забывает WHERE и удаляет все данные в важной таблице. Бэкап! кричит он. Поздно, мы в эфире — говорят ему. Как идут продажи? спрашивают менеджеры.

Короче, кое что им удалось подправить, наделав кучу костылей. DBA все исправил, но, не выдержав позора, покинул фирму. Я же разгребал его костыли вместе с коллегами из страны, где очень любят петь и танцевать. Один коллега, например, хранил суммы в колонке varchar() примерно так: ‘$123.45’. Я спросил его — зачем? Он пояснил, что это очень удобно, когда сумму отображаешь для пользователя, то не надо делать никаких преобразований.

Шоу для французов

Во Франции вскоре после начала работы меня спросили, насколько я могу ускорить их систему. Я решил выглядеть профессионально, не говорить сразу — в 10 раз, а сказал — процентов на 30-40%. В итоге я ускорил систему более чем в 10 раз — у них для списков не было даже элементарного pagination, но это другая история.

Дело было в пятницу и французы что-то отмечали. Меня спросили, правда ли русские могут пить водку, как показывают в фильмах? Я налил водку в пластиковый стаканчик и продемонстрировал. О, сейчас других позовем — не уходи! И я показал еще и еще.

А потом на меня посмотрели и сказали — «он же сам домой не дойдет». Посадили в машину моего шефа, меня укачало, и я ее облевал. До сих пор стыдно. Зато меня зауважали как специалиста.

Динозавры

Время от времени мне доводилось консультировать разных клиентов. Среди них тогда, в 2000х, еще встречались «динозавры». Я их узнавал по двум характерным вещам:

  • Поставить базу в FULL RECOVERY, не делать бэкапов, дождаться, когда LDF файл станет 100Gb, спросить «почему база так быстро растет»

  • Жаловаться на «утечки памяти SQL», что он «занимает всю память» и перезапускать его все время

Сейчас таких уже почти не встречается, но тогда это были два самых частых вопроса

Рулетка

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

SELECT TOP 1 * FROM table ORDER BY newid()

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

Заветы Oracle

В одной конторе люди, которые танцуют и поют, очевидно, пришли из Oracle (да какая им разница на чем лабать код?). После вставки записи им надо было получить @@IDENTITY. Они пишут

SELECT @@IDENTITY

и дальше их клинит. Потому что в Oracle надо обязательно писать FROM, для этого есть даже специальная табличка DUAL. Первое что им приходит в голову — указать имя самой таблицы, допустим, это была таблица FACTS:

SELECT @@IDENTITY FROM FACTS

В этом случае значение IDENTITY копируется столько раз, сколько записей в таблице. Люди, которые танцуют и поют «элегантно» заметают это под ковер:

SELECT DISTINCT @@IDENTITY FROM FACTS

И все замечательно работает… Некоторое время. Пока записей не становится много, и все встает колом. SQL генерит огромный dataset каждый раз, сортирует его и делает distinct.

Параноя

С этим столкнулся мой коллега. Фирма — в России. Некая самописка плохо поддерживаемая. Тормоза. Быстрый анализ показывает, что очень помогут несколько индексов. Индексы создаются и… система отказывается стартовать!

Анализ SQL profiler показывает код, который при старте системы считывает все из sysobjects, sysindexes, syscolumns, и параноидально вычисляет checksums всего, чтобы не дай бог не изменили колонку или таблицу. Ну и индексы в том числе.

Представляю как, наверное, девелопер расчесал свое ЧСВ этим кодом!

Suicide jobs

Нет, это не о камикадзе. Очень интересная система, опять написаная друзьями с юга, имела функциональность асинхронных расчетов на SQL. Тут без сарказма — ребята молодцы, создавали SQL agent jobs, которые выполняли расчеты и потом выпиливались (не ребята, а SQL jobs) — да, в SQL job может удалить саму себя!

Все это работало, но когда количество порождений jobs превысило 3-5 в секунду, пошли deadlocks со стороны SQL agent — он просто не расчитан на такой стиль использования. Я все это переписал на статические асинхронные «worker threads»

Безумная сортировка

Очередная тормозящая система. Порядковые номера документов хранятся почему-то в char(9) центрированными — да, центрированными! То есть ‘127’ будет выглядеть как <три пробела>127<еще три пробела подразумеваются>. А значит, на лету:

ORDER BY convert(int,ltrim(Docnum))

со всеми сопутствующими тормозами. Попутно дата-время хранилось не в datetime, а в двух колонках — одна дата в datetime с уcеченным временем, а время по моему в виде текста. Чтобы найти документ после какого-то точного времени надо писать:

(DATE>'дата' OR (DATE='дата' AND TIME>'время')

со всем радостным, что приносит для поиска OR. Тот, кто ко мне обратился, говорил, что систему писали голландцы (видимо, под веществами)

И еще абсолютно убойный случай

Один раз сотрудник нашей компании (назовем этого парня <NDA>), где я сейчас работаю, умудрился <NDA>, да так, что <NDA>, а потом еще <NDA>, в итоге его самого <NDA>, а потом догнали, и еще <NDA> по самые <NDA>. Кто работает у нас, разумеется, знает эту историю (совсем как «анекдот номер 187… ну нельзя же при женщинах»), а я ее рассказать сейчас не могу.

Может лет через 10 расскажу… А пока почитайте предыдущую статью.

Жили-были старуха и старик. Домик их небольшой был расположен на самом берегу моря,
а в домике том старенькая мебель. Жили бедно, без шика и богатства. Дед занимался рыбной ловлей, а старуха в доме
хозяйкой была. Дети их жили в далекой загранице и лишь изредка писали письма. И вот в один прекрасный день, когда на
улице уже рассвело, постучался в дом курьер:

Здравствуйте, вам посылочка!

Дед, иди скорее сюда! Тут какой-то паренек нам принес посылку. Брать ее или не брать?

Переживала старуха.

А от кого, посылочка-то?

Удивился старик.

А посылочка вам из далеких стран, шла через море и через города.

Отвечал курьер.

Неужели детки наши нам заморских деликатесов прислали? Конечно, возьмем, оставляйте посылку нашу!

Воскликнул старик.

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

Ой, мамочки, а что это такое за ящик? И шнурочки в нем какие-то, и дырочки.

Удивилась старуха.

Ну, ты даешь! Это же настоящий компьютер. На нем можно в игры играть, кино смотреть и даже книгу напечатать!

Обрадовался старик и принялся доставать ноутбук из ящика.

И откуда ты знаешь, что это за вещичка такая модная?

Удивленно прикрикнула старуха.

А мужики на рыбалке рассказывали, как они по таким компьютерам смотрят фильмы интересные да в «танки» играют.

Какие еще такие танки? Что это за игра такая? Что, огромные, железные, настоящие, которые стреляют и ездят?

От удивления старуха чуть не упала.

Ну ты старуха и отстала от жизни современной! «Танки» — это игра такая, вот пойду на рыбалку, у мужиков и
поспрашиваю, как в нее играть. Вот весело мы с тобой заживем. Вместо того, чтоб по вечерам в окошко глядеть да
скучать, будем в «танки» играть, на желание!

Дед почесал затылок и принялся ноутбук подключать.

Долго читал он инструкцию, и так ноутбук покрутит, и сяк. А в комплекте все что нужно: и модем, и wi-fi роутер, и
даже колонки, чтобы музыку погромче слушать.

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

Наступила ночь, старик со старухой спать укладываются. И вдруг слышат, из комнаты, где ноутбук поставили, странные
звуки: «пилик-пилик». Перепугались дед и бабка, вскочили и бегом в комнату. А там, экран загорелся, музыка играет, а
на мониторе изображение — дети родные, которые далеко за границей живут.

Как же эту штуку включить? может кнопку нажать вот ту, синюю?

Старик решил испытать судьбу и со всей силы надавил пальцем на кнопку.

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

Радость-то какая!

Вскрикнула старуха.

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

Взял старик снасти и отправился на рыбалку. Сидит на берегу, час прошел, второй, а клева совсем нет. И вдруг
чувствует, леска на удочке натянулась, колокольчик зазвенел. Начал старик со всей силы тянуть, и вытянул он рыбину.

Только хотел ее в ведро кинуть, как слышит, человеческим голосом рыбка говорит:

Не ешь меня, старик. Что я тебе, маленькая, не вкусная. Давай-ка мы с тобой так поступим — ты меня отпускаешь, а я
твое желание исполняю. Загадывай что хочешь!

Дед недолго думал и решил воспользоваться таким шансом.

А полный холодильник еды сможешь организовать? Дети из далека приезжают, а угощать их нечем.

Да это совсем не сложно. Будет тебе полный холодильник еды, да самой вкусной и самой полезной.

Ответила рыбка.

Так и поступили. Дед отправился домой, а рыбка поплыла в свои просторы морские. Приходит домой старик, а там полный
холодильник еды: икра красная, икра черная, форели да семги. Фрукты разные, тропические, ароматные, а посреди стола
омары, лангусты и маленький кабанчик запеченный.

Это откуда такое взялось?

Спрашивает старуха в недоумении.

А это, бабка, наше спасение. Поймал я на рыбалке золотую рыбку, да не простую, а самую что ни на есть волшебную. И заключили
мы с ней договор — я ее в море отпускаю, а она любое мое желание исполняет.

С горящими глазами рассказывает старик.

Старуха схватилась за голову и как закричит:

Так что же в твою старую башку ничего другого кроме еды не пришло? Давай сразу проси у нее завод по производству
колбасы. Загадывать нужно так, чтобы и нам польза была. Разбогатеем мы с тобой, купим шубы, машину, будем бизнесом
заниматься. Давай иди к этой рыбке и проси у нее завод.

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

Ну что, доволен ты продуктами? Самые лучшие теперь у тебя в холодильнике лежат.

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

Да не вопрос! Будет твоей старухе завод.

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

Вот это да! И правда самый что ни на есть настоящий завод! Еще и ферма рядом!

От удивления старик чуть в забор не врезался.

Ну что, старуха, как тебе? Теперь-то ты довольна?

Подумала старуха и говорит:

А давай-ка мы с тобой вместе отправимся к этой золотой рыбке. Пусть она на меня посмотрит повнимательнее, лицо мое запомнит,
и теперь каждый раз, когда я буду к ней обращаться, желание мое исполнять будет.

Старуха быстренько засобиралась и отправилась на берег.

Эй рыбка, выплывай! Я тебе старуху привел, чтоб ты ее желания исполняла.

Закричал старик.

Подплыла рыбка к самому берегу и говорит:

Что ты хочешь? Какое твое желание исполнить?

А я хочу, чтобы ты всегда мне прислуживала, и все мои желания вмиг исполняла. Вот сейчас я, например, хочу
собственный остров посреди океана, шикарный самолет, чтоб мы с дедом на этот остров летали, и все твое море, где
куча рыб плавает, буду город на воде строить, чтоб все жители морские мне подчинялись.

Но как же? Ведь если ты город на воде построишь, всем остальным морским жителям жить негде будет?

А я их в специальные аквариумы поселю.

Хохотала старуха.

И вдруг, рыбка хвостом махнула, в море волны поднялись, ветер закружил все вокруг. Старик со старухой кинулись
домой, и решили, что придут, когда буря стихнет. Да только вместо завода возле дома вдруг появился лес густой, да с
дикими животными, что деду с бабкой теперь и из дому выходить нельзя. В холодильнике снова пусто, только одна
корочка хлеба на полочке. Так и остались старик со старухой ни с чем, а детей встречали с кусочком хлеба, без масла
и даже без соли.

Читайте сказки и вы всегда будете знать, что загадать, а чего
не стоит делать!

Сколько я видел таких историй: дома есть нечего, ремонт в квартире не делался миллион лет, одежда новая не покупается — зато машина есть, на которой глава семейства ездит даже в магазин за хлебом! При этом машина не новая и постоянно ломается. На ремонт деньги быстро находятся, а если не находятся, то берется кредит.

Звучит, как фильм ужасов, но это реальность. И дело даже не в том, что у нас бензин дорого стоит или автопроизводители делают ненадежные машины, которые постоянно ломаются. Дело в неразумном подходе к выбору. Не мне учить вас финансовой грамотности, это не тот раздел сайта, но предостеречь от тех машин, которые могут привести к разводу из-за того, что постоянно тянут на себя деньги, я могу.

Дешевый премиум

Начнем с моего любимого дешевого премиума. Если посмотреть объявления, то вы без труда можете найти Range Rover за 600 тысяч рублей или Mercedes S-класса по цене новой Гранты. Или какой-нибудь Бумер или Ауди начала нулевых или конца девяностых. Кажется, что это обалдеть, какая выгодная покупка. Премиум долго сохраняет лоск и блеск, салон долго держится бодрячком и не протирается, но вот всё остальное оставляет желать лучшего.

Электрика. В премиум её очень много. И в возрасте постоянно что-то где-то глючит. Причем современные электронные блоки устроены так, что одна ошибка может тянуть за собой другую. Например, неработающий датчик ABS, отрубает корректор фар и цифровую приборку. Электронные блоки стоят баснословных денег — это раз. Найти хорошего электрика очень сложно. Отловить плавающие баги крайне сложно. К тому же можете себе представить, во что превращаются контакты и провода в условиях сырости, перепадов температур и колхозинга ремонтников.

И это только вершина айсберга. Запчасти ходовой, какие-то шланги, хомуты и мелочевка может стоить примерно столько же, сколько и на бюджетники, если покупать неоригинал. Но двигатель, трансмиссия, система полного привода, всевозможные датчики, радары и прочее стоят очень дорого как при замене, так и при ремонте. К тому же работы по ремонту на премиуме почти всегда обходятся дороже. Не потому, что это премиум, как можно было подумать, а потому что сделано все с подвывертом, и работы объективно больше. Порой думаешь, да на фига я купил машину с такой кучей электроники, которой почти не пользуюсь, но которую постоянно чиню?

Цилиндров не 4, а 6 или 8, под капотом теснее, турбина не одна, а две или три. Впрыск хитроумный. Цепей не одна, а три. В коробке не 6 передач, а 7, 8 или 9. И это не обычная гидромеханика, а умная, которая требует к себе частого и дорого обслуживания. Или вообще робот или вариатор, которые даже будучи новыми в то время не отличались надежность. Можно приводить ещё очень много примеров, но я остановлюсь, а то пост сильно растянется.

Внедорожники с пробегом

Отдельная категория — это внедорожники. Совсем жесть, если это премиум, но про это я только что говорил. Купил человек Infiniti QX56 за 600 тысяч рублей. И за полгода вложил в него уже 270 тысяч на ремонты, не считая топлива, которое он жрет, как не в себя.

На самом деле даже УАЗик по сравнению с Грантой будет дороже. Потому что он сам по себе больше, у него больше двигатель, у него есть полный привод, элементы подвески физически больше и мощнее, а следовательно дороже.

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

У внедорожника всегда больше расход топлива. Иногда в два раза больше, чем у обычной легковушки нормальных размеров. Полный привод, если кто не знал, требует к себе внимания и обслуживания так же, как двигатель и коробка передач. Причем, чем старше машина, тем больше внимания надо уделять системе полного привода вне зависимости от её типа: постоянный, подключаемый или on-demand. Это дорого.

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

Очень уставшая «нашемарка»

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

А вот старая «десятка» или какой-нибудь «Ланос» — это сомнительная покупка во всех смыслах. Эти машины могут стоить буквально 50−70 тысяч рублей. И запчасти на них недорогие, и страховка дешевая, и не такие уж они прожорливые (хотя порой гораздо более прожорливые, чем современные). Но если машина в запущенном состоянии — а старую дешевую машину редко найдешь в идеале, — она будет тянуть деньги из бюджета огромными суммами по меркам собственной стоимости. Один только термостат можно поменять трижды за год, пока не попадется нормальный. Да и вообще ресурс ремней, насосов, подшипников, резинок у нашемарок в разы меньше, чем у иномарок.

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

Что делать

Вы уж меня простите, если кого-то обижу или покажусь грубым, но иногда лучше купить себе дешевый велосипед и гонять на нем по делам, а если с семьей, то на такси, чем постоянно латать и чинить дырявое старое ведро. Да и прогулки — это хорошо. В современном мире и так слишком мало движения.

А если говорить о покупке, то покупайте бюджетные популярные машины. Логаны, Гранты — это ремонтопригодные надежные авто с недорогими запчастями и простым ремонтом. В сети по ним много мануалов. Да, комфорта в них мало, опций и того меньше, они небыстрые и беспонтовые. Но и мы не в США живем, зарплаты-то у нас какие? Это даже смешно и попахивает глупостью, когда молодая семья, живя в съемной однушке ездит на машине, которая вытягивает половину семейного бюджета.

Если речь идет о бюджетах в миллион или около того, то не гонитесь за премиумом и внедорожниками. Не говорю, что надо покупать новую машину (особенно в кредит), лучше взять трех- пятилетку из бюджетного сегмента и бед не знать. Рав4, Камри, Hyundai Santa Fe и так далее. Причем такой выбор стоит делать, даже если премиум стоит тех же денег. Премиум разоряет не при покупке, а при эксплуатации.

Поймите простую вещь — премиум живет по другим законам. На премиум ставят все самое передовое, дорогое и непроверенное. И все это за ваш счет.

И ещё момент. Если мы говорим о подержанных иномарках, то я бы отдал предпочтение не европейцам, а японцам и корейцам. Они будут бюджетнее и проще в обслуживании.

А вот еще несколько наших интересных статей:

  • Сказка про спор полезных ископаемых
  • Сказка про спящую красавицу читать пушкин
  • Сказка про спящую красавицу смотреть
  • Сказка про спор овощей
  • Сказка про сороку ворону
  • Поделиться этой статьей с друзьями:


    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии