Истории с тегом: веб-разработка

Всего историй: 342

1636

Обезьянья CMS

Говорят, что если усадить миллион обезьян за печатные машинки, то с ненулевой вероятностью одна из них наберет «Войну и мир». У одной обезьяны, похоже, получился 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

ASCII-шот

Пару лет назад звонит заказчица и говорит, что на сайте, CMS к которому мы прикручивали, вываливается какая-то ошибка. На словах ничего не понять — просим прислать скриншот. Хоть дама и говорила, что дело срочное, почты от неё не было долго.

Через час приходит письмо с вордовским вложением. В нём буквами и спецсимволами с применением табуляции и пробелов был досконально воспроизведён снимок экрана. Похоже, в заказчице жив неплохой ASCII-художник!

1544

Всё своё ношу с собой

Как-то раз дорабатывал я чужой проект, написанный на РНР. Конечно, использовалось ООП — известно, что только ламеры пишут процедурный код, а реальные пацаны без объектов и «хеллоу ворлда» не напишут.

Центральным элементром нестройного ансамбля был класс main, содержавший в себе всё. Его экземпляр создавался в каждом скрипте, он содержал в себе весь набор сервисных функций в виде методов и так далее. Были и классы помельче — например, класс, необходимый для работы с потоком закачки файлов. Из экземпляров этого класса в классе main создавался массив закачек. Здорово, но как из любого экземпляра класса «поток» получить доступ к сервисным функциям, определённым в main? Всё гениальное просто! Надо в каждый класс «поток» воткнуть экземплярчик класса main, и дело в шляпе.

В итоге сервак, который на лету распаковывал гигабайтные архивы и с лёгостью ворочал ISO-образами, тупо висел по 30 секунд на примитивном фронт-энде для линуксовой консольной качалки. Всякого я повидал, но такое — первый раз в жизни.

1517

Пейдж-даун

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

Только под полночь я вспомнил, что phpMyAdmin по умолчанию выводит данные по тридцать строк и нужно просто перелистнуть на следующую страницу.

1502

Сладкая парочка

Дело было давно. Были мы тогда студентами, в армии не служили и делали сайт для интернет-магазина книг (теперь довольно известного в узких кругах). Работали вдвоём, точнее, втроём — я в роли художника, тестера и корректора, мой друг Макс в роли программера и «всего остального», а его невеста Светлана в роли «музы программиста». Работали из дома; связь — по диалапу, иного тогда не было. Поскольку сайт был довольно беден графикой (в противовес многим конкурентам), большую часть времени я занимался тестированием и корректурой того, что писал Макс, потому что творил он быстро, но с ошибками.

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

Ночь перед сдачей проекта заказчику, финальный прогон. Макс чинит очередной косяк, попутно вырезает не вполне цензурные подписи к кнопкам и снова даёт мне на проверку. Не знаю, что больше влияло на Макса в тот день, нервы или муза, но опечатался он по Фрейду. Помощник (убранный, кстати, из финальной версии сайта) и один из книжных разделов получили довольно звучные имена, хотя и видимые лишь с отключенными картинками — «Ибблиус» и «ебллетристика». Теперь Макса с супругой, замечательную пару, в узком дружеском кругу мы только так и называем.

1464

Моя музыкальная шкатулка

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

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

Взгляд падает под стол. Под столом зверь: два ядра по паре гигагерц, два гигабайта оперативы, около полукиловатта на питании, три винта, с десяток внешних устройств... Зверь этот шевелит четыремя десятками процессов, выполняя около полутысячи потоков, следит за состоянием сети, контролирует температуру и работу кулеров, приглядывает за целой охапкой служб... И зачем? Чтобы играть мне музыку.

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

1447

Принеси то — не знаю что

Звонит потенциальный клиент. Он уже получил от нас анализ сайта и коммерческое предложение, а теперь разносит в пух и прах всё ему высланное:

«Мне не нужен был анализ сайта, мне нужна была только стоимость по его продвижению. И мне не нужно коммерческое, а нужна стоимость переделки сайта! Я пришёл к вам потому, что мне понравился ваш сайт. Хотя ваше портфолио мне не понравилось, оно никуда не годится».

И добивает менеджера фразой:

«Я вообще ничего не хочу знать! Я пришёл в студию, как к доктору: сел и доверился. Вы профессионалы и знаете, что делаете».

Вот сидим мы и думаем: то ли похвалил, то ли обругал...

1421

Удаляй и распределяй

Я — программист. Пишу на «плюсах», фортране и питоне. Веб-программирование недолюбливаю, а флэш терпеть не мог никогда.

Как-то раз позвонила (!) мне приятельница, отличный веб-дизайнер из Москвы. Есть, говорит, проект, платят много. Срок — двое суток, Платформа — флэш. Подумал я и придавил своё самолюбие — раз столько платят, можно и взяться.

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

Так и сидели мы 36 часов подряд за компьютерами: я в Самаре, подругав Москве. Связь держали через джаббер. У меня открыты текстовый редактор и руководство по ActionScript в PDF; у неё — родная среда разработки (тогда еще, кажется, от Macromedia). Я вслепую писал код, опираясь только на описание языка, и отправлял его дизайнеру. Она вставляла код, привязывала его к фреймам и объектам, компилировала, сообщала мне ошибки компиляции, а полученный SWF выкладывала на сайт, где и я мог посмотреть результаты нашей совместной работы.

Проект мы сдали в срок. Такие вот чудеса удаленной компиляции и распределённой отладки.