События нажатия стрелок на клавиатуре нужно перехватывать на уровне страницы и полностью менять её содержимое. Проверять в этом случае, не нажат ли Shift (в Опере, к примеру, так осуществляется хождение по ссылкам без мыши), ни в коем случае нельзя. (Яндекс.Почта, Гугл-Картинки.)
Нельзя делать отдельную форму для каждого функционального блока на странице. Будет куда лучше сделать одну большую форму с тонной скрытых полей, охватывающую всю страницу, а поля заполнять Яваскриптом по щелчку на ссылке или, что менее приоритетно, кнопке. (Опять Почта России.)
При наведении мыши на элемент навигации все остальные элементы должны изменяться, на худой конец меняться местами. Пусть пользователь вспомнит игру «Лабиринт», придумывая безопасный путь мышки до нужной ссылки. (Сайты многих гигантов электроники.)
Размещать кнопки управления текстом рядом с полями ввода неинтересно — лучше расположить их поверх, так, чтобы часть вводимого текста была закрыта. (Последний редизайн Гугла.)
Системные требования сайта должны выглядеть очень круто: пусть пользователь сначала выбьет из бюджета своего НИИ деньги на последний топовый компьютер вместо печатной машинки с 256 мегабайтами памяти (мы одних скриптов вдвое больше подключим, не говоря уже о картинках), а уж потом зайдёт на три секунды на наш сайт, чтобы получить-таки ссылку на Рапидшару и скачать справочник по радиоэлектронике за 1974 год.
Пользовательское соглашение лучше всего поместить в <textarea> — а вдруг пользователь захочет переписать несколько абзацев? (Рамблер несколько лет тому назад.)
Вершина мастерства верстальщика — повесить ссылочку на валидатор. Ну а лёгким флиртом может показаться одна-единственная ошибка на странице: XHTML-тег <img> на HTML-странице, соответствующий баннеру «Valid HTML».
#3616: Ланч-контроллеры
16:45 13.07.2010, IT happens
Прихожу в столовую — стоят две микроволновки рядом. На одной время 10:11, на другой 10:12. Думаю: «Непорядок! Надо синхронизировать, а то работать не будут!» Пора, пора в отпуск.
#3617: Палата интернетозависимых
16:45 13.07.2010, IT happens
Лежал в больнице, принёс с собой нетбук фильмы смотреть. Для интереса решил поискать вайфай-точки. Нашёл одну с WEP-шифрованием. Где наша не пропадала? Грузимся с live-флешки BackTrack — пароль наш. Вся палата радуется. Пододвинули кровать к стене, где наилучший сигнал был, сидим впятером, как зомби, на внешние раздражители не реагируем. Медсестра зашла — испугалась. Позвала врача. Пришёл врач, спросил пароль.
На следующий день пришли уже два врача с ноутами — и вот мы уже всемером сидим у стены, качаем торренты и радуемся жизни. Хорошо лежать в больнице...
#3618: Хеш моего хеша
16:45 13.07.2010, IT happens
Админю небольшой сайтик. Сегодня мне пришло мыло от хакера — мол, проблемки у вас там, дырочки залатать нужно. Хакер спрашивал, что за систему хеширования я юзаю: пытаясь вскрыть хеш моего пароля, он напарывался снова на какой-то хеш. Понятное дело, я не ответил.
Только после того, как оказалось, что неизвестный хакер — админ из соседней фирмы, я раскололся, что пароль «1D62C8A1A0B00CAAAD1BB9DE3148C23F71CFC689» — это и есть SHA-1-хеш очень известного виндового файлика, а использовать хеш в качестве пароля — мой способ всегда хранить подсказку под рукой.
#3619: Сбиты прицелы
16:45 13.07.2010, IT happens
Писали с однокурсниками в качестве дипломной работы «игры для программистов». Основная идея была заимствована из Robocode.
Вкратце: игроку необходимо написать класс на языке C++, унаследованный от предоставленного ему класса. Методами этого класса реализовывается логика поведения танка, который ездит по полю брани, подбирает различные бонусы, стреляет в противников, умирает и т. п. У кого больше очков в конце боя, тот и победил. Далее исходники компилируются на стороне сервера, и игрок может сразиться с танками противников. Для удобства клиентская часть позволяла сохранять проведённые бои для последующих повторов.
Итак, ночь перед дипломом. Нужно сделать презентацию. Чтобы не быть голословными, решили написать пару ботов и сделать видео с их участием. Один бот должен был просто ездить и собирать бонусы, другой — только стрелять по другим танкам, игнорируя бонусы, третий — ездить полностью рандомно. Написали, запустили. Выяснилось, что правильно ездит только рандомный бот (и то лишь потому, что его трудно проверить). На часах уже пять утра, а ошибку найти не получается. Решили, что глюк у нас где-то в расчётах движения, и оставить следует только «рандомщика», а остальных просто не показывать.