вторник, 24 января 2012 г.

Чёрный ход

Отхватил себе интересный проект: требуется сделать примочку для сайта, которая позволит легко и быстро просмотривать некоторые скрытые или труднодоступные свойства общедоступных веб-страниц. Например, наводишь мышкой на ссылку и видишь список параметров query string; наводишь на логотип - видишь значения некоторых meta tags страницы. Правда, это пока не так уж круто: ту же самую информацию пользователь может получить, просмотрев HTML-код. Более интересно сделать запрос к нашим внутренним веб-серверам и узнать, например, сколько человек вчера посетило эту страницу, или сколько мы заработаем, если человек нажмет определенную ссылку и купит продукт.

Зачем это нужно? Казалось бы, и так строятся многочисленные отчеты в SQL Server Reporting Services и в сторонних системах, есть OLAP, есть различные админки, анализаторы IIS-логов. Fiddler, наконец. Вся информация в принципе и так доступна. Да, всё есть, но, как часто бывает, хочется всё делать ещё быстрее и проще. Наш сайт с виду достаточно простой, но за простотой скрываются тонны логики, связанной с биллингом и SEO. Часто невозможно открыть какую-то страницу и на глаз определить, правильно ли она работает, нужно ещё сопоставить данные из нескольких источников. А хочется всё иметь в одном месте. Это что-то вроде Google In-Page Analytics: не замена, но удачное дополнение для традиционных отчетов.

Как это реализовать технически? Можно встроить необходимую логику непосредственно в сайт и включать эти дополнительные возможности после авторизации. Но, во-первых, появляется потенциальная возможность для взлома; во-вторых, это усложняет проект, который и так очень сложный.

Можно использовать iframe или плагин для Chrome. Но, оказывается, есть и более элегантный подход, о котором я, честно говоря, раньше никогда не слышал: bookmarklet (он же - favlet). В Favourites ("Избранное") добавляется небольшая ссылка, содержащая JavaScript. Единственное, что это JavaScript делает - загружает внешний JavaScript и внедряет его в DOM. В моем случае этот внешний JavaScript находится в интранете, т.е. доступ к нему есть только у сотрудников компании. Он, в свою очередь, загружает jQuery и CSS, цепляется на события mouseover, а при необходимости использует Ajax, чтобы вызывать некие внутренние веб-сервисы. Эдакий "добрый вирус".

С точки зрения пользователя это работает так: зашел на нужную страницу, выбрал в "Избранном" нужную закладку; после наводишь мышкой на интересующие тебя места страницы. Даже если какой-то хакер узнает про эту функцию, воспользоваться ей он не сможет, ведь главный JavaScript и веб-сервисы недоступны снаружи. Единственная проблемка: когда переходишь на другую страницу, то закладку из "Избранного" нужно выбирать заново.

Но как же назвать этот проект? Рабочее название было Mouseover, но это какое-то слишком общее понятие. Мало ли, на что можно наводить мышкой? Я предложил название "Backdoor" ("чёрный ход", "недокументрированный способ доступа к компьютерной системе"). Всем очень понравилось. И по смыслу отлично подходит, и коротко... и немного смешно. Дело в том, что "backdoor" иногда используется и в смысле "задний проход":

- Мне нужен новый поддомен для сайта "Задний проход".
- Хм, ты хочешь, чтобы я открыл тебе свой задний проход... А где мы его выложим?
- Ну, вы же администратор, вам виднее.
- Видишь ли, я ведь никогда не занимался вплотную задними проходами, поэтому пока не уверен...

А через несколько дней один из коллег вдруг уперся и потребовал, чтобы я переименовал проект: "А вдруг кто-то из посетителей нашего офиса случайно увидит, что есть такой проект... а потом пойдут слухи, что в нашем сайте есть уязвимости или шпионские функции... давай лучше назовем как-то нейтрально. Например, Page Info". Аргумент, мне кажется, высосан из пальца, тем более, что посторонние у нас в офисе бывают очень редко. Но пришлось подчиниться.

Название "Page Info" мне очень не понравилось. Не люблю такие бесполые название, вроде "Engine", "Search" или "Data Analyzer". Какой "движок"? "Поиск" чего? Что за "данные", и как они "анализируются"? Может, в маленьком проекте это ещё нормально, но в большом почти так же плохо, как назвать программу The Programme :) Или как назвать TFS-проект веб-сайта NewDesign. Проходят годы, а он так и называется "новый дизайн". А переименовать уже нельзя... Давно уволился тот человек, и про него забыли, а название так каждый день и мозолит глаза.

После долгих размышлений я предложил назвать этот проект "Insider". По смыслу похоже на "Backdoor", но не так агрессивно, и без гомосятины. На всякий случай предложил ещё десяток других вариантов. "Insider" всем понравился, но один коллега удивился, как много усилий я приложил для выбора имени. Пришлось специально для него сделать вольный перевод песни капитана Врунгеля "как вы яхту назовете - так она и поплывет":

Like a man, a vessel desperately needs a name.
Yacht's name defines how it floats.
If you dare to call your yacht a Sieve,
Then be ready for disaster:
Even in a swamp your yacht shall sink!

6 комментариев:

Байдарочник комментирует...

Я бы назвал проект GreyDoor

Байдарочник комментирует...

Webhole, Lookout - тоже должны понравиться

Valik комментирует...

Да, интересные идеи.

KEHT комментирует...

Яхты они не "float", они "sail" ;)

Valik комментирует...

Да, пожалуй.
Хотя с другой стороны, в песне ведь речь именно о плавучести (способности не тонуть). Когда моряки говорят о плавании как о путешествии, они используют слово "идти", а не "плыть".

KEHT комментирует...

Это же детский мультик. :) В мультиках нас учили правильно использовать русский язык без всяких сленгов. ;)

Ratings by outbrain