Инструмент профессионального серфингиста

8 февраль, 2005 - 00:00Андрей Зубинский

По отношению к статуе камень по-своему первичен, но не менее первичны замысел и мастерство скульптора. Можно сказать больше: в замысле изваяние уже присутствует, между тем как камень без него остается всего-навсего камнем.
о. Александр Мень

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

Инструмент профессионального серфингиста
Net Snippets комбинации с оболочкой Maxthon в бесполезном на практике, но демонстрирующем возможности режиме автомасштабирования окна браузера при активации внешней панели коллектора и с одновременно открытым плагином браузера

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

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

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


Стили серфинга

Без этого отступления все дальнейшие рассуждения окажутся бесполезными. Итак, возможно, стилей Web-серфинга существует очень много -- примерно столько же, сколько серфингистов. Но все же в этом многообразии можно выделить две основные ролевые группы по принципу сходства в целях -- "праздношатающихся" и "работников". "Праздно-шатающиеся" -- это те серфингисты, которые не ставят перед собой никаких конкретных целей -- ну разве что кроме развлечения. Естественно, роль "праздношатающегося серфингиста" может играть кто угодно, в том числе и самый ярый "работник", например в минуты отдыха. Не менее естественным кажется и соображение о том, что аудитория сугубо "праздношатающихся серфингистов" весьма велика и со временем уменьшаться не будет (хотя бы потому, что все начинающие серфингисты непременно должны пройти период праздного бесцельного шатания по сайтам). "Серфингист-работник", напротив, пользуется Интернетом с более чем четко определенными требованиями, обусловленными его профессиональными (или иными) интересами.

Инструмент профессионального серфингиста
Несмотря на простоту, snippets-коллектор Scrapbook в комбинации с браузером Firefox дает неплохой и легально бесплатный комплект для профессионального постпоискового анализа информации

Разница в целях (точнее, в их наличии), объясняет различие в отношении к информации. Для "праздношатающегося серфингиста" это отношение проще всего описать на удивление подходящей аналогией с отношением праздношатающегося туриста к фотоснимкам: конечно, можно и снять что-то очень примечательное на память, но можно и обойтись. Для "серфингиста-работника" подобное пренебрежение к временно доступным публичным информационным ресурсам -- непозволительная роскошь. То, что сегодня было доступным, завтра может исчезнуть в никуда. Особенно неприятны такие утраты, когда речь идет даже не о пропаже целых сайтов (хотя и такое бывает), а о постоянной естественной "утечке" фрагментарной информации оперативного характера типа новостных сообщений, кратких аналитических или технических заметок. Конечно, можно сохранять заинтересовавшие страницы сайтов, можно пользоваться программами-менеджерами массовой загрузки, но все это далеко не так удобно, как хотелось бы -- мешают множественные неприятные мелочи. Сохраняя полную страницу, содержащую всего один интересный фрагмент, "серфингист-работник" на самом деле создает некие исходные данные для последующей немашинной обработки -- при потребности в некотором сохраненном некогда фрагменте ему не только придется вспомнить, к какой сохраненной странице обращаться, но и затем "отфильтровать" нужное из всего ее содержания (фактически -- удалить шум). Пока таких страниц несколько десятков, с обязательностью процедур поиска и фильтрации еще мириться можно, но с ростом числа нужных фрагментов эти "мелочи" превращаются в сущий ад. Суррогатные решения проблемы, например, организация с помощью сторонних (по отношению к основному инструменту Web-серфера -- браузеру) базовых программ различных "коллекций", существенно жизнь не облегчают. Впрочем, многие "серфингисты-работники" сами хорошо знают, насколько неудобно использовать для хранения фрагментов и текстовые редакторы, и "свалки" файлов в организованной с помощью файлового менеджера иерархии каталогов.

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


Hitech-коллекционирование "лоскутков"

Утилиты, предоставляемые читателю, попадают в весьма обширные классы "программной мелочи", в англоязычных названиях которых непременно встречается слово snippet (лоскут, фрагмент). Так, многие профессиональные программисты хорошо знакомы с ПО, специально ориентированным на поддержку удобного доступа к коллекциям "программных лоскутков" -- характерных, "ярких" фрагментов кода, достойных повторного использования (и, естественно, пригодных к нему). Так как snippets-коллекторы ориентированы на достаточно профессиональных пользователей, их разработчики обычно предпочитают не мудрствовать и оставлять машине -- машинное, а человеку -- человеческое. Что означает -- никаких "умных излишеств" в этих программах не было, нет и, наверное, не будет (например, байесовских систем автоклассификации, экспертных систем или нейронных сетей). И никакой особо мудреной функциональности -- тоже.

Казалось бы, раз в пользовательской программе нет ни хитрой, ни емкой алгоритмики, в ней вообще ничего интересного быть не может. Над этой распространенной экстремистской точкой зрения просто лень смеяться -- в утилите даже с самой непритязательной функциональностью несомненно важным является то, что принято называть usability (слово это умышленно оставлено без перевода, потому как попытки заменить его "в лоб", например термином "удобство", приводят к тому, что характеризующиеся высоким для своего класса уровнем usability утилиты командной строки "вдруг" оказываются "неудобными"). Так что даже если вы никогда не установите ни одну из предлагаемых вашему вниманию программ, попробуйте воспользоваться забавной возможностью ознакомиться с usability, так сказать, в чистом виде.

Прежде чем мы перейдем к скучной конкретике, осталось сказать буквально несколько слов о скромной функциональности, которую реализуют snippets-коллекторы. По сути, такие программы являются подвидом иерархических баз данных свободной формы (или аутлайнеров -- о них мы некогда беседовали в статье "Технология инакомыслия", "Компьютерное обозрение", # 10, 2003). Главное отличие, выделяющее snippets-коллекторы в отдельный подвид аутлайнеров, заключается в специфике ввода данных -- если аутлайнер в этом смысле универсален (данные могут вводиться пользователем или копироваться из других программ), то snippets-коллектор практически не предусматривает "ручного" ввода данных. Соответственно, техника "поставок" информационного сырья для таких коллекторов должна быть одновременно максимально простой и эффективной, скрывающей от пользователя все мешающие процессу "коллекционирования" детали. Кроме обеспечения механизмов ввода, snippets-коллектор предназначен для облегчения решения задачи поиска во множестве накопленных фрагментов информации. Обычно снижения ресурсоемкости поиска добиваются увеличением затрат на добавления фрагментов в коллекцию -- за счет создания иерархий. Скажем, вас интересуют новости в области мобильной связи, и для их коллекционирования вы создаете раздел snippets-коллектора с названием "Мобильная связь". Впоследствии внутри этого раздела можно создать подразделы, например GSM и CDMA. И так далее -- степень детализации персональной информационной коллекции растет по мере увеличения продолжительности ее формирования пользователем. При этом, естественно, она представляется деревом со всеми вытекающими последствиями. В частности, с логарифмической сложностью поиска в нем. К слову, если бы эта зависимость была линейной, ни о каком usability речь не велась бы. Вообще, -"копошение" в свалке фрагментов различного содержания даже с помощью изощренных поисковых утилит -- занятие весьма нетривиальное (хотя бы по причине того, что надо вспоминать и подбирать ключевые слова для поиска, уточнять запросы и т. д.).

Итак, все готово для того, чтобы можно было непосредственно переходить к описанию двух героев нашего повествования. Первая утилита, распространяемая в зависимости от функциональности (от базового до профессионального уровня) на разных условиях и по разной цене (от freeware до shareware), -- Net Snippets. Мы остановимся не столько на описании всего перечня способностей профессиональной версии программы (хоть он и впечатляет), сколько на яркой демонстрации ею того, что ранее назвали usability. Сделано это ни в коем случае не в целях рекламы -- следующей за Net Snippets будет рассмотрена разработка с открытыми исходными текстами, проекту которой необходима "свежая кровь" -- умелые программисты, красивые идеи и, наконец, качество реализации. Так что, господа программисты -- приверженцы Open Source, вам стоит внимательно ознакомиться с возможностями Net Snippets. Тем более что эта утилита того заслуживает.

Net Snippets может работать практически с любыми браузерами платформы Windows. Но наивысшая степень интеграции и usability достигается при использовании Net Snippets "в комплекте" с мощной надстройкой над Internet Explorer -- браузером Maxthon (распространяется на условиях добровольных пожертвований donationware, www.maxthon.com). Впрочем, создатели Net Snippets, похоже, реализовали все возможные "вкусности" для комбинаций со всеми браузерами. Так, утилита может функционировать и как плагин браузера, и как внешнее приложение, и одновременно -- как плагин и приложение. При этом для сторонников работы с программами в полноэкранном режиме предусмотрено автоматическое изменение размера окна браузера при обращении к отдельному приложению Net Snippets -- без единого лишнего действия браузер уменьшается так, чтобы для узкой полоски окна коллектора появилось место на экране, и также без единого лишнего действия пользователя автоматически разворачивается на весь экран. Мелочь, но единожды попробовав ее, очень трудно от нее отказаться (пользователи экзотических оконных менеджеров Unix-совместимых ОС хорошо знают преимущества такого режима работы). Для тех, кто привык к многооконному режиму (одновременно с несколькими окнами на экране), предусмотрен традиционный в Windows для "фоновых приложений" режим активации Net Snippets иконкой из панели задач. Соотвественно, плагин Net Snippets в браузерах Internet Explorer и Maxthon может располагаться в автоматически активируемой "наездом" курсора мыши панели. Все, что требуется от пользователя для работы с Net Snippets, -- выделить понравившийся фрагмент страницы в браузере и "перетянуть" его в панель Net Snippets. После этого программа откроет временное окно, в котором можно анонсировать фрагмент (кстати, сохраняющий разметку оригинала, а также изображения), изменить его название и выполнить необходимое минимальное редактирование. Расположен ли выделенный фрагмент во фрейме или же сразу в нескольких ячейках таблицы, применяемой для разметки, -- это пользователя Net Snippets не заботит. Для каждого фрагмента автоматически сохраняются полные "библиографические сведения", например о его происхождении (адрес страницы) и времени занесения в коллекцию. Впоследствии Net Snippets позволяет одной командой как генерировать "отчеты" -- html-страницу, содержащую все фрагменты выбранной иерархии, так и создавать "библиографические списки" -- html-страницы с информацией о происхождении всех фрагментов коллекции в иерархии. Не забыты и "линейные методы поиска" -- потратив несколько лишних минут на указание ключевых слов при занесении фрагмента в персональное хранилище, вы со временем можете создавать так называемые индексные списки, позволяющие не только искать информацию в разросшейся коллекции, и даже не только эффективно ее реструктуризировать. Главное же достоинство ключевых слов и индексных списков проявляется не сразу, а после некоторого периода интенсивного использования snippets-коллектора: на основании соотношения ключевых слов из индексных списков и созданных иерархий можно совершать небольшие "персональные открытия". Это свойство snippets-коллекторов считается настолько важным, что в западной прессе столь простые утилиты принято относить к исследовательским инструментам (так называемые средства постпоискового анализа информации).

О Net Snippets можно говорить долго, но все же повседневная работа с этой утилитой убеждает лучше всего. Тем же, кто является приверженцем программ с открытыми исходными текстами, порекомендуем более скромный в возможностях, но все же принципиально работоспособный snippets-коллектор ScrapBook. Эта утилита -- расширение популярного браузера Firefox и, кстати, наглядно демонстрирует его возможности как платформы для разработки приложений -- функционально ScrapBook во многом близка к Net Snippets и даже схожа с ней.


Вместо заключения

Автор не собирался агитировать "за snippets-коллекторы". Тем более -- "за коллекторы для всех и каждого". Но все-таки интересно, что есть такой вот класс очень полезных программ, функциональность которых фактически ограничивается реализациями скрытых примитивных механизмов управления каталогами (для построения иерархий) и техники "выделения-перетягивания" данных. И при такой простоте (даже элементарности) программного изделия, оказывается, разработчик всегда может найти решения, крайне привлекательные для потребителя.