4042
Будучи веб-дизайнером, однажды я переводил сайт одной организации на новый движок. В процессе работы наткнулся на интересный скрипт: у каждого десятого посетителя должен был выплывать баннер с призывом отправить SMS на номер #### (за приличную плату, естественно) и получить приз. Там же нашёлся и скрипт, который проверял правильность введённого кода подтверждения и... cохранял в базу email пользователя. Странно: в анкете предлагается ввести кучу данных о себе («каким способом вам удобнее получить денежное вознаграждение в случае выигрыша?»), а в базу записывается только адрес почты...
Уже сообразив, что к чему, мы с другом со смехом начали искать скрипт, рассылающий по базе оповещение о проигрыше с соболезнованиями. Не поверите — нашли прямо в каталоге с сайтом!
4041
Мы сегодня лёгким движением рук по клавиатуре приобрели через инет 12 банок красной икры. Всё вроде в рамках приличия, да? Как сказать...
Нашли, где русскоязычные американцы икру покупают. Выбор огромный, банки самого разного объёма. Прежде чем заказывать, посчитали, что получается самым выгодным из всего ассортимента с учётом местного налога и транспортных расходов. Лучшей оказалась тара по 907 граммов, но вот незадача: продавец не отпускал товар партиями меньше 12 единиц.
Посмеялись, сколько мы 11 килограммов икры будем есть, открыли новый таб в браузере и оформили заказ на 12 баночек по 120 граммов — полежит, не пропадёт. Откинулись на спинку кресла в ожидании подтверждения списания денег. Через пару минут нас радостно известили, что приняли заказ и заблокировали деньги на сумму... стоп, что это? 12 банок по 907 граммов!
Я не знаю, как разрабатывался этот сайт, но девелопер явно получает процент от проведённых сделок. А заказ решили не отменять — оттянемся икоркой от души.
3994
Уважаемые программисты, которые считают себя способными писать CMS! Вот краткое руководство, как задолбать того, кто будет пилить ваш код.
Никогда не пишите комментариев. Если вам код понятен, значит, он self-documenting.
Наплодите кучу файлов с именами: template1.php, template12.php, template7.php и т. д. Очевидно, что последняя рабочая версия — template21.php.
В дебрях своего кода напишите что-нибудь в духе: mysql_query($query) or die("Ошибка"). Забудьте о mysql_error(). Программисту доставит огромное удовольствие искать, в каком именно месте вылетел запрос, опираясь только на одно слово в окне браузера. Будет ещё лучше, если данная строка встречается в двадцати файлах.
Храните пароли в базе данных в незашифрованном виде. Во-первых, это очень круто. Во-вторых, не существует способов спереть дамп базы с мегазащищённого хостинга.
Не используйте стандартных шаблонизаторов вроде Smarty — пишите свой. Ну и что с того, что кривой? Зато свой, понятный.
Допустите 200+ ошибок в HTML-разметке. Валидаторы — для чайников.
3945
Вот и дошла очередь до индусов на IT happens. Коли холиворы «Linux vs. Windows» и «программисты vs. бухгалтеры» себя исчерпали, подкину свою вязанку хвороста в огонёк нового тренда.
Вот уже пару лет я по долгу службы занимаюсь работой с удалёнными командами. Попалась и команда из славной и могущественной страны Индии. Итак, задача: написать веб-страничку для айфона, которая будет выглядеть, как родное приложение. Казалось бы, есть jQTouch — садись и пиши код. Но наши ребята не робкого десятка!
После пары дней курения благовоний индусы выдают страничку логина. На айфоновский интерфейс совсем не похоже. Первое, что бросается в глаза: часть экрана занимают огромные надписи «login» и «password», которые должны выводиться прямо в полях ввода и исчезать, как только пользователь начинает что-нибудь вводить. Просим убрать и сделать «как там». Ещё день курения благовоний. Теперь текст внутри поля, но нужно его сначала удалить буква за буквой, чтобы ввести свой логин. Просим «как-то поправить». Ещё через день появляется апдейт, где надпись правильно исчезает, но как только пользователь убирает фокус, любой текст заменяется на слово «login». Теперь войти в систему не просто сложно, а вообще невозможно. А ведь задача решалась дополнительным параметом HTML-тега...
Может, они «великие и могучие», но на качестве кода 2000-летние родословные не сказались. Пускай уж лучше концентрируются на чём-нибудь другом, как, к примеру, Египет: история ничуть не хуже, но опыт строительства пирамид на ПО местные программеры не переносят.
3931
Дело было несколько лет назад, когда я учился в институте. На одной из лекций по ООП преподаватель, прожжённый пользователь С++, по какой-то причине переключился на разговор о вебе. Он очень увлечённо рассказал о том, что после того, как его 12-летний сын за два дня разобрался с PHP и сделал простенькую страничку, он вообще не считает веб-программистов за программистов. Тут поднимает руку мой приятель, который учился плоховато, зато к тому времени уже несколько лет работал программером.
— %professorName%, скажите, пожалуйста, а ваш сын может сделать интернет-магазин?
— Ну, если маленько подучится...
— А онлайн-кинотеатр?
— Нет.
— А систему моделирования «%systemName%» с веб-интерфейсом?
— Нет.
— Тогда, пожалуйста, запомните раз и навсегда: сложность задачи и простота средства реализации — разные вещи.
3875
Провинциальный институт, факультет информатики, четвёртый курс, предмет — JavaScript. Первый раз я появился на занятии в зачётную неделю. Преподавателем оказалась милая девушка, по виду которой сразу было всё понятно.
Зачёт проходил в форме контрольной. Я получил задание организовать поиск подстроки в тексте. Сделал. Преподаватель предлагает «три». Прошу дать задачу на «пять». В ответ слышу о задаче, которую никому и никогда не удавалось решить. Оказывается, в провинциальном вузе на факультете информатики студентам трудно даётся обработка событий drag-n-drop, поэтому задачку из этой области обычно на зачёте не дают, но мне, в порядке исключения, можно.
Читаю текст задания: «Создать два поля для ввода текста таким образом, чтобы была возможность выделять текст в одном поле и перетаскивать мышью в другое». Э-э-э, окей. Два поля <textarea> я сделал, но почувствовал, что этого недостаточно, и набросал ничего не делающий код в стиле:
function onDrag() { blah(blah, blah) }
function onDrop() { blah(blah, blah) }
Пришло время сдачи задания. Функционал винды я продемонстрировал девочке с должным видом, будто только что сам изобрёл велосипед и очень этим горжусь. Судя по реакции, велосипедов она до этого не видела, но сомнение всё же читалось в глазах. Попросила показать код. Минуту на него смотрела, потом сказала: «Похоже, всё правильно». Очередная пятёрка на халяву!
3813
«Если заказчик хочет говно и платит за это деньги, я с радостью его продам, а когда вернётся это говно переделывать — выставлю ему ещё один счёт». Такая у вас позиция?
Спасибо, что вы есть. Следующий клиент придёт переделывать не к вам, а к нормальным людям, которые подскажут, как проиндексировать сайт на флеше, объяснят, что можно сделать вместо навороченных скриптов, и внятно проконсультируют по поводу дизайна. Заказчик, понимающий исполнителя — залог успешного проекта. Ведь работа исполнителя заключается в том, чтобы сделать успешный продукт, а не говно за деньги. И заказчики это понимают, особенно после таких горе-сайтостроителей.
И не жалуйтесь потом на обилие отстойных сайтов в рунете — вы же их и делаете! А мы переделываем, относясь по-человечески к людям, получаем за это деньги и спим с чистой совестью.
3663
Подрабатываю в свободное время PHP-программистом. «Студией» эта шарашкина контора называется весьма условно: состоит она из директора, админа и нескольких PHP-программистов, которые меняются в среднем раз в год. В обязанности программистов входит поддержка и небольшая модификация движков сайтов, разработанных предшественниками. Один из таких сайтов на доработку дали мне.
Все знают, что хорошим стилем написанием сайта является отделение кода от дизайна. Но то, что я увидел в самописной CMS, детище прошлого PHP-кодера, повергло меня в тихий ужас:
$karkas=tr(bgcolor("D9EDFB"), td(w("1%").style("").valign("top"),br()).td(valign("top"), hr(noshade().size(1).color("D9EDFB")).table(cs(0).cp(10).border(0), tr(no(), td(no(), 'текст'...
Каждый HTML-тег со всеми атрибутами был переопределён в отдельную функцию со своими параметрами. Нашлось место даже для замечательной функции br().
На десерт я увидел структуру БД. Попавшаяся мне CMS (если этот шедевр быдлокодирования можно назвать столь гордой аббревиатурой) работала всего от одной таблицы, в которой наблюдалось штук тридцать колонок с названиями: «tp0», «tp1», «bd0».
Оторвите руки этому кодеру или скажите, где его найти, — справлюсь и сам.
3642
Как-то понадобилось нам с товарищем написать простой сайтик для одной маленькой фирмы. Решили не изобретать велосипед: взяли одну из известных готовых CMS, сделали красивый шаблон, порезали, начали натягивать на движок. И вот всё как-то не получалось толком докрутить CSS — сайдбар и некоторые элементы перехлёстывались друг с другом.
После шестичасового ковыряния в кодах, чтения мануалов и форумов решили позвать третьего товарища. Он, надо сказать, немного чудаковатый, но мозговитый до невозможности в этих делах. Приходит, садится, бубнит что-то про себя, листая код. Через какое-то время так характерно возносит руки и, смотря на потолок, громко произносит: «Мне нужен знак!» И тут же у стоящего рядом десктопа красиво, с искрами, вылетает блок питания.
Код мы, конечно, в тот день поправили, сайт сдали вовремя. Но после этого случая я стал относиться к этому чудику с ещё большим трепетом и опаской.