3620

Цветы жизни и плоды прогресса

Мой муж — программист. Соответственно, наша доча — дитя программиста, впитавшая все заморочки ещё внутриутробно (спасибо нашему папочке за сказки животику про дядю Билли, дядю Стива и дядю Линуса).

Конечно же, ребёнок любит потыкать кнопочки на абсолютно любой технике. Ещё бы — полтора года вот-вот исполнится, самое время везде бегать, лазить и терроризировать абсолютно всех и вся. Итого на счету ребенка из железа:

— два мобильных телефона насмерть, один удалось починить;

— одна десктопная клава (вылит сок, ведь интересно, что же будет);

— полклавы ноутбучной (кнопки больше не крепятся);

— две мышки;

— ноутбучная зарядка (а если наехать колёсиками кресла раз тридцать?)

Из софта:

— уронено три Убунту и снесено пол-ядра четвёртой;

— грохнуто две винды;

— трижды деинсталлирована Visual Studio;

— дважды угроблены мамины документы (спасибо резервному копированию).

В каждой программе у мужа появляются новые элементы кода (не знаю, как дочь умудряется запустить тот, а не этот проект, натыркать, сохранить, откомпилить и запустить). В консоли регулярно что-то исполняется. И каждый раз такое невинное выражение лица: «Это не я!»

3619

Сбиты прицелы

Писали с однокурсниками в качестве дипломной работы «игры для программистов». Основная идея была заимствована из Robocode.

Вкратце: игроку необходимо написать класс на языке C++, унаследованный от предоставленного ему класса. Методами этого класса реализовывается логика поведения танка, который ездит по полю брани, подбирает различные бонусы, стреляет в противников, умирает и т. п. У кого больше очков в конце боя, тот и победил. Далее исходники компилируются на стороне сервера, и игрок может сразиться с танками противников. Для удобства клиентская часть позволяла сохранять проведённые бои для последующих повторов.

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

Комиссия была в восторге — всем поставили по пятёрке. Только недавно товарищ скинул мне сохранённый бой, где все трое ездят «честно».

— Разобрался с физикой? — спрашиваю.

— Нет.

— Понял, как по существующей физике ездить?

— Нет.

— А что тогда случилось? Почему они вдруг так хорошо работать стали?

— Да у нас угол до цели неправильно считался. Исправил — и сами поехали...

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

3617

Палата интернетозависимых

Лежал в больнице, принёс с собой нетбук фильмы смотреть. Для интереса решил поискать вайфай-точки. Нашёл одну с WEP-шифрованием. Где наша не пропадала? Грузимся с live-флешки BackTrack — пароль наш. Вся палата радуется. Пододвинули кровать к стене, где наилучший сигнал был, сидим впятером, как зомби, на внешние раздражители не реагируем. Медсестра зашла — испугалась. Позвала врача. Пришёл врач, спросил пароль.

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

3615

Вред-дизайн

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

Кнопку отправки формы никогда нельзя делать типа submit, а во всех полях нужно глушить событие onKeyPress, если keyCode==13. Табулятор тоже лучше заглушить. (Любители этого подхода делали, к примеру, сайт Почты России.)

Лучше всего, если пользователю после ввода данных нужно будет навести мышку на кнопочку, посмотреть циклическую анимацию и в нужный момент щёлкнуть мышкой. Верх мастерства — если в остальные моменты анимашка делает не form.submit(), а form.reset(). Это отсеет ботов. («Хомяки».)

События нажатия стрелок на клавиатуре нужно перехватывать на уровне страницы и полностью менять её содержимое. Проверять в этом случае, не нажат ли Shift (в Опере, к примеру, так осуществляется хождение по ссылкам без мыши), ни в коем случае нельзя. (Яндекс.Почта, Гугл-Картинки.)

Нельзя делать отдельную форму для каждого функционального блока на странице. Будет куда лучше сделать одну большую форму с тонной скрытых полей, охватывающую всю страницу, а поля заполнять Яваскриптом по щелчку на ссылке или, что менее приоритетно, кнопке. (Опять Почта России.)

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

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

Системные требования сайта должны выглядеть очень круто: пусть пользователь сначала выбьет из бюджета своего НИИ деньги на последний топовый компьютер вместо печатной машинки с 256 мегабайтами памяти (мы одних скриптов вдвое больше подключим, не говоря уже о картинках), а уж потом зайдёт на три секунды на наш сайт, чтобы получить-таки ссылку на Рапидшару и скачать справочник по радиоэлектронике за 1974 год.

Пользовательское соглашение лучше всего поместить в