bash.im ithappens.me zadolba.li

Веб-разработка

2836

Образцово-показательная

Девушка, общающаяся с клиентами, задает вопрос техдиру:

— Там некоторые идиоты не могут на сайте зарегистрироваться. Что им ответить?

Надо сказать, что процесс регистрации у нас достаточно хитрожопый, только если «залезть под капот»; для конечного же юзера всё дебильно-интуитивно-понятно. Интерфейс обсуждали-переделывали не раз, и юзабилити всегда было приоритетным понятием. Вполне логичный ответ техдира:

— Попробуй, что ли, зарегистрироваться сама. Запомнишь, будешь им объяснять, куда клацать мышью.
— Э... А как там зарегистрироваться?

2812

Не злись, малыш

Я — junior PHP-программер в одной из украинских веб-студий, и часть моих поступков и решений основана на том веровании, что все Машины и Серверы — существа с живой душой, которая иногда не в тему решает напакостить. Думаю, не стоит знающим людям рассказывать о том, что абсолютно одинаковый по логике код может артачиться из-за неполиткорректного обзывания переменной, вечером может работать, а утром «ложиться». Правда, происходит это всё без эмоций, и понять, что в это время крутится в кремниевых мозгах машины, невозможно... По крайней мере, я так думал и был уверен.

Работаю с FTP. Сливаю на свою машину бэкап одного чата, который неделю назад не работал, а сейчас тикает как часы (и это при том же коде). Вдруг загрузка прерывается на файле tired.png. Про себя думаю — вот ведь бедняга, устал ворочать файлы. Переподключаюсь, продолжаю загрузку — буквально через пару файлов загрузка снова становится на файле tongue.png. На этом месте вырвалось уже вслух: «Вот ведь паршивец, ещё и язык мне показывает». Опять переподключаюсь, продолжаю... Правильно — пара файлов, и мы виснем на glare.png, название которого, согласно переводчику, означает «с ненавистью смотреть». Произношу: «Малыш, прости меня, пожалуйста, но надо доделать. Выручи, а?» После этой мантры спокойно сливаю в пять раз больше данных, чем до первого дисконнекта.

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

2672

Скриншот не подведёт

Случился со мной недавно прикол. Сижу на конкурсе по веб-дизайну, рисую «шапку» в фотошопе. Мучился над ней два часа. Нажимаю «Сохранить для Web».

Угадали: «Программа будет аварийно завершена, все несохранённые данные буду утеряны. Нажмите „ОК“ или „Отмена“ для отладки». Делать нечего — отодвигаю окошечко, жму PrintScreen, вставляю в Paint, сохраняю. Подобную операцию пришлось проделывать с каждой картинкой для сайта.

2650

Островок стабильности в море прогресса

Довелось ставить хорошо доработанную под заказчика известную свободную CRM. Дорабатывали наши братья-индусы. Первое, что я встретил в документации — рекомендацию установить параметр ведения логов в Error only. Иначе, обещали разработчики, если поставить его в Warnings, а тем более в All, логи начнут слишком быстро забивать свободное пространство на диске.

Вдобавок ко всему install.php подключал и выполнял любой файл, переданный через POST. Время идёт, индусы не меняются.

2557

Экспресс-редизайн

В отсутствии работы взялась я написать простенький сайт на HTML. Как фанат табличной вёрстки, извратилась так, чтобы при просмотре даже в донельзя кривом браузере всё было на своих местах. Заказчик посмотрел, одобрил, денег выдал. Залили на хост.

Через три дня заходит с претензией: «А почему у нас не так красиво расползается, как у конкурентов таких-то?» Смотрю сайт конкурентов, а он разваливается в Опере и Мозилле, да так, что важная информация пропадает.

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

2492

Есть макет, а сайта нет

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

Приходит ко мне это чудо и спрашивает: «Товарищ дипломный руководитель! Чего делать-то будем?!» Что делать, что делать... После получасового брейнсторма я решил использовать его сильные стороны: раз ты художник, нарисуй сайт на экономическую тему!

Через несколько дней приносит мне «рисунки» — PSD'шки неземной красоты, что-то про авторынок. Естественно, для того, чтобы нарезать всё это на элементы и закодить хотя бы в HTML, ни времени, ни знаний у студента не было.

В итоге комиссии был продемонстрирован красивый комикс в PowerPoint, а на предложение показать движок и вообще продемонстрировать работу сайта вживую парень ответил: «К сожалению, хост на реконструкции». Получил «хор.»!

2487

С первого выстрела

Ковырял сегодня модуль на PHP. Уже было собрался заканчивать, но вспомнил, что не дописал одну необходимую функцию. Полез снова в код, и так его крутил, и эдак — не работает, и всё тут!

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

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

2466

Лето красное пропела

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

Попросили меня оценить написанные одиннадцатым классом в качестве итоговой работы сайты. Работа заключалась в поиске «внешкольных» фрагментов кода и вопросов типа «какой тег отвечает за ***». Убогие сайты принимались на пять, с красивыми я был поосторожнее.

Кто-то писал на Фронтпейдже, что было заметно по коду; кто-то переделывал скачанные шаблоны — в общем, кто во что горазд. Спрашиваю одного такого «умника», как он сделал, чтобы меню открывалось, он мне в код тычет. Спрашиваю его по РНР, молчит — «неуд». Некоторые были разумнее и удаляли слишком «умные» куски. Смотрю один сайт — убогий дизайн. Ну, думаю, сам писал, ладно, но в последний момент нашёл кнопку «В избранное». Как и что тут работает — не знает. «Неуд».

Но последний кадр меня убил. Сайт ровный, в основе — таблица, но видно, что через прогу писано. Да вот незадача, всё парнишка знает. Про какой параметр тега не спрошу — отвечает. Спрашиваю, как кнопки сделал — рассказывает про объекты. Уже опустил руки, говорю учителю, что парень писал сам. Закрываю браузер и вижу диалоговое окошко:

Сайт написал %studentName%. Серёга, ты мне 200 рублей должен!

Маленький скрипт, написанный в коде со смещением в сто символов. Серёга не понимает, откуда это — говорит, дома такого не было. Этот %studentName%, зная, что в школе только IE, а у неудачливого программиста дома Опера, накидал скрипт, который выдавал окошко только в «ослике». Глаза Серёги я не забуду никогда...

2457

Идите-ка вы в одно место

Как-то раз писали небольшую штуку на PHP+HTML — надо было выводить юзеру в браузер список доступных его группе файлов. Создали базу, написали, отладили, начали прикручивать дизайн.

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

Как вы поняли, всё оказалось гораздо прозаичнее. Мы забыли закрыть тег <a>.