1668
Было это год назад. Мой знакомый айтишник отказался покупать телефон Samsung, выбрав Nokia, который был дороже, но внешне и по функциям почти ничем не отличался. Аргументировал так: «В „самсунгах“ стандартный шрифт меню дурацкий. Таким же шрифтом была напечатана моя повестка в военкомат, когда меня на два года забрали». Но это присказка.
Я работаю веб-программером. Недавно вызывает меня к себе шеф, чтобы я оценил работы моего возможного помощника. Начинаю разведывательную деятельность с просмотра в браузере визуальной части приложения. Открываю сайт, хожу по страницам — всё мило и приятно. И тут в голове возникает вопрос: откуда этот до боли знакомый шрифт на ноутбуке, в котором я все шрифты, не являющиеся стандартными, удалил для тестирования сайтов? Открываю код, вижу огромную базу вполне логичных функций и очень много тегов <img>, хотя страница абсолютно лишена графических элементов. Кликаю правой кнопкой по странице и всё понимаю.
Оказалось, парень абсолютно не знает тегов HTML (кроме вышеупомянутых <img>), но зато хорошо владеет PHP, Perl и... «пейнтом». Как он до этого делал сайты, ума не приложу, но он божится, что никто из его прошлых заказчиков никогда никаких претензий ему не выдвигал.
Программера мы всё же решили оставить и обучить азам HTML-кодинга, чтобы не создавал больше головную боль хостерам, через чьи сервера проходил весь трафик «нарисованных» сайтов.
1642
В комнату после тяжёлых переговоров с заказчиком влетает наш тимлидер. Сталкиваясь со мной и верстальщиком, жалуется:
— Как за$#@ли эти еврейские клиенты!
Заказчик и правда был из Израиля. Я посоветовала вспомнить табличку, висевшую на двери нашей команды в старом офисе. Верстальщик, не заставший те времена, поинтересовался, что за табличка такая. Объяснили ему, что это имевший широкое хождение в русских кругах словарик айтишника, содержавший цивильные эквиваленты матерных выражений. Например, «пи#@расы — джентльмены».
Верстальщик — тимлидеру, задумчиво:
— Если ты им таким тоном скажешь «джентльмены», они явно поймут, что ты хотел назвать их пи#@расами. Они пи#@расы, конечно, но не идиоты же!
1637
Работаю уже некоторое время в одной из самых раскрученных в нашем небольшом городе дизайн-студии. В основном мы делаем сайты для крупных предприятий — ценник, соответственно, рассчитан на обширный корпоративный бюджет.
Не так давно находит нас один клиент — хочет срочно себе сайт. Какие проблемы? На встречу устремляемся сокращённым составом «ударной команды»: рекламщик и техдиректор.
Приезжаем на какую-то торговую базу. Стоит небольшое гаражеподобное строение, над входом безвкусная жёлто-синяя надпись «Ковролин». Заходим и видим этакого качка в спортивной одежде, читающего газету. Представляемся, начинаем по стандарной схеме:
— Как ваша фирма называется?
— «Ковролин».
— А официальное название?
— ИП %name%.
— А как на сайте нам писать-то?
— «Ковролин».
— Логотип у вас есть?
— А это чё?
— Фирменные цвета?
— А это чё?
— Ну вот вывеска у вас почему жёлто-синяя?
— Ну нам такую сделали.
Молчание. Тупим, думаем, как быть.
— На сайте что писать будем-то?
— Вы специалисты, вы и думайте.
— Давайте хоть с чем-то определимся. О компании писать будем?
— Не, не надо.
— Товары будем описывать?
— Не, не надо.
— Прайс-лист будем выкладывать?
— Не, не надо.
— (хором) А что надо?!
Клиент долго, напряжённо думает.
— Ну-у-у... Посередине надпись «Ковролин» и два сотовых телефона.
1636
Говорят, что если усадить миллион обезьян за печатные машинки, то с ненулевой вероятностью одна из них наберет «Войну и мир». У одной обезьяны, похоже, получился CMS.
Отдел поддержки клиентских серверов датацентра. Приходит клиентское письмо с жалобой: «После обновлений базы товаров нашего интернет-магазина сайт перестаёт работать и вообще». Сайт вольготно размещён в одиночку на сервере с двухъядерным процессором и 2 ГБ памяти — проблем с производительностью быть не должно. Прошу пнуть нас именно в момент обновлений.
Дожидаюсь ответа «вот сейчас не работает!» Смотрю — на машине оба ядра под завязку нагрузил MySQL. Логинюсь в «мускуль», даю запрос show full processlist. Изумляюсь — терминал виснет наглухо. Передёрнув терминал и залогинившись обратно на машину, запускаю тот же запрос с выводом в файл. Смотрю в результаты: сервер отрабатывает два запроса общей длиной в 1,2 с копейками мегабайта.
Как выяснилось, чудо-фронтэнд магазина выгребал какие-то данные запросом вида «Select * from Таблица where productID='такой-то' and enabled=1 or productID='еще_какойто' and enabled=1 or...», и так до упора. Несчастный MySQL вдумчиво проверял каждую строку немаленькой таблицы на соответствие десяткам тысяч логических условий.
Клиенту отписал, приложив результаты show full processlist. Молчит уже сутки. Видимо, проникается идеей...
1589
Один из сценариев использования веб-портала — таблица оценок персонала. Напротив имени-фамилии сотрудника в табличке значится оценка в промежутке от одного до четырёх. Каждой цифре я для лучшего восприятия приписал свой бэкграунд: 1 — красный, 2 — розовый, 3 — жёлтый, 4 — бледно-зелёный. В общем, всё хорошо и удобно, цвета чётко различимы и при этом не режут глаз. У клиента, впрочем, взыграло чувство прекрасного: «Эти цвета не подходят». Я пожимаю плечами. Ну ладно, невелика проблема — поставлю их цвета.
И вот присылают мне четыре RGB-значения. Я смотрю на них с большим сомнением, прописываю в CSS, делаю скриншот, возвращаю прежнюю расцветку и звоню клиенту:
— Здравствуйте, ваши цвета не подходят.
— Почему?!
— Для оценок от одного до четырёх вы прислали мне четыре цвета: красный, красный, красный и красный. Возможно, в животном мире и есть существа, с лёгкостью различающие такие оттенки, но человек к ним явно не относится. Посмотрите на скриншот.
Последовало быстрое согласие, и претензии к цветам были сняты.
1583
У нас небольшая веб-студия, выпускаем несколько сайтов в месяц. Клиенты бывают очень разные. Звонок, менеджер берёт трубку, здоровается.
— Оксана! Я потеряла сайт!
Менеджер тут же даёт сигнал программисту; в голову лезут мысли о вирусах и о бэкапе на хостинге трёхдневной давности. Пока программист быстро проверяет доступность сайта, Оксана продолжает разговор:
— Что именно случилось с вашим сайтом?
— Я забыла его имя!
Уффф. Клиенту по буквам («s» как доллар) диктуется домен, сайт открывается, счастливый клиент прощается с нами. Имя этой барышни стало у нас нарицательным.
1567
Пару лет назад звонит заказчица и говорит, что на сайте, CMS к которому мы прикручивали, вываливается какая-то ошибка. На словах ничего не понять — просим прислать скриншот. Хоть дама и говорила, что дело срочное, почты от неё не было долго.
Через час приходит письмо с вордовским вложением. В нём буквами и спецсимволами с применением табуляции и пробелов был досконально воспроизведён снимок экрана. Похоже, в заказчице жив неплохой ASCII-художник!
1544
Как-то раз дорабатывал я чужой проект, написанный на РНР. Конечно, использовалось ООП — известно, что только ламеры пишут процедурный код, а реальные пацаны без объектов и «хеллоу ворлда» не напишут.
Центральным элементром нестройного ансамбля был класс main, содержавший в себе всё. Его экземпляр создавался в каждом скрипте, он содержал в себе весь набор сервисных функций в виде методов и так далее. Были и классы помельче — например, класс, необходимый для работы с потоком закачки файлов. Из экземпляров этого класса в классе main создавался массив закачек. Здорово, но как из любого экземпляра класса «поток» получить доступ к сервисным функциям, определённым в main? Всё гениальное просто! Надо в каждый класс «поток» воткнуть экземплярчик класса main, и дело в шляпе.
В итоге сервак, который на лету распаковывал гигабайтные архивы и с лёгостью ворочал ISO-образами, тупо висел по 30 секунд на примитивном фронт-энде для линуксовой консольной качалки. Всякого я повидал, но такое — первый раз в жизни.
1517
Десять часов я потратил на отладку скрипта, который по непонятным мне причинам обрывал обработку данных и добавление их в MySQL после тридцати первых записей.
Только под полночь я вспомнил, что phpMyAdmin по умолчанию выводит данные по тридцать строк и нужно просто перелистнуть на следующую страницу.