Реинкарнация кнопки «Читать все хабы» с возможностью вернуться к чтению избранных хабов (блогов); работает при авторизации; настройки выбора переносимы через JSON.
Эту кнопку «сломали» и пообещали, что «насовсем», разработчики сайта 14 марта 2012 года. Но свято место пусто не бывает, и появился её ослабленный клиентский «дух».
Скрипт сохраняет все ваши настройки блогов в одной большой JSON-строке, которая запоминается в хранилище браузера (не потеряется при сбое питания) и которая может быть вытащена для экспорта (кнопка «Импорт-экспорт») в другие браузеры и компьютеры (ею же можно воспользоваться, чтобы «посмотреть глазами других»). По кнопке-переключателю «Все/Свои» делается лёгкий выбор между всеми блогами или своими избранными. Фактически, это замена прежнему режиму «Читать все», убранному с сайта. Другие имеющиеся решения требуют чем-то пожертвовать: выбрать «всё» вручную (это означает — потерять свои избранные блоги), читать habrahabr.ru/posts/collective/ и habrahabr.ru/posts/collective/new/ (будут пропускаться блоги компаний) — обсуждение в QA.
Перейти на страницу скрипта. Сразу скачать скрипт habrAllHub.
Ограничение ответственности
Скрипт написан для выполнения полезных для пользователя функций:
1) сохранение пользовательского выбора блогов вне зависимости от функций сайта в хранилище браузера и в текстовом формате JSON;
2) возможность просмотреть все блоги (кнопка «Все») через временную перезапись серверных настроек чтения блогов;
3) возможность восстановить настройки (кнопка «Свои») из хранилища или из текстового формата, взятого из другого браузера или от другого пользователя (кнопка «Экспорт/Импорт»).
За счёт «временной перезаписи» с использованием недокументированного и несогласованного с производителем протокола возможен случай, когда скрипт неожиданно перестанет работать, настройки пользователя, сохранённые локально, перестанут читаться сервером. Кроме того, идентификаторы и имена блогов постоянно (и несогласованно) изменяются производителем, поэтому нет гарантии, что настройки, сохранённые на длительное время, будут корректно работать в будущем. Поэтому пользоваться скриптом нужно осторожно, сохраняя (желательно, перед каждым периодом просмотра сайта в режиме «Все блоги») настройки в текстовом формате (кнопка «Экспорт/Импорт»). Но, так или иначе, пользователь никогда не будет застрахован от потери введённых данных — «Настройки ленты». Главное — что скрипт даёт много шансов не набирать настройки вручную после просмотра в режиме «Все блоги».
Длительность процесса смены настроек
При чтении и записи настроек происходит длительный (10-30 секунд; данных — около 20-30 КБ) обмен данными с сервером. Поэтому работа с настройками вообще — не лёгкая для серверного канала функция. Это нужно понимать и не злоупотреблять процессами переключения настроек на сайте. Это также даёт понимание того, почему процесс переключения на «Все» и обратно такой длительный и зачем имеется кнопка «Прочитать». Она — для того, чтобы при переключении настроек не всегда предварительно считывать настройки с сервера. Первое нажатие «Все» — затратная операция, и каждое новое нажатие «Прочитать» — тоже затратная операция, более затратная, чем «Показать настройки» в разделе «Настройка ленты». Поэтому скрипт читает настройки только при первом чтении (далее берёт их из хранилища) или при нажатии «Прочитать».
Но периодически «Прочитать» бывает необходимо. Браузер вынужден доверять пользователю в синхронизации хранилища и сервера. Если пользователь изменил настройки через другой браузер, то нажатием «Все» в текущем браузере он сотрёт серверные настройки. Поэтому находится только под ответственностью пользователя, что ему нажать — «Все» или «Прочитать», а затем «Все». (Тут на сервере не помешал бы признак даты сохранения или контрольной суммы настроек, что ещё лучше, чтобы при каждом несовпадении начать разбираться через «Прочитать», но этого нет.)
Если вы открываете сайт на другом компьютере, не перейдя заранее в режим «Свои», на сервере не будет ваших настроек. Их нужно перенести отдельно и импортировать. Наконец, если вы вошли на Хабр после работы под другим логином, новый логин воспримет сохранённые настройки как свои, т.е. скрипт не различает, чьи это настройки. Впрочем, это — самое простое, чему его можно научить, добавить имя пользователя к настройкам.
Такие неудобства остаются после пропадания кнопки «Все», поддержанной сайтом. Возможно, в будущем интерфейс сервера получит контрольную сумму и открытый протокол для удаления кнопки «Прочитать» из интерфейса пользователя.
Следовательно, TODO для администрации — иметь команду сравнения контрольной суммы локальных настроек блогов и серверных. Это сделает контроль за изменениями серверной части предельно лёгкими. И ещё легче — было бы иметь на сервере этот чекбокс «Все» :).
Рассуждения, почему удалили чекбокс «Все» и что надо бы сделать
В описании весеннего обновления авторы ясно объяснили причины удаления кнопки «Все» из настроек ленты. Повторю её здесь.
Пользователь, выбрав ленту «Все», начинает считать блоги, в содержимом которых он плохо разбирается, своими подконтрольными блогами. Следовательно, ставит метки оценок, исходя из своего, субъективного понимания ценности статей из незнакомых ему тематик. Чтобы избежать «негатива» от таких пользователей, решили удалить кнопку «Все» и заодно, другие лазейки просмотра всех статей подряд. Оставив, тем не менее, возможность просто, «тупо» выбрать все категории.
Решение, IMHO, требуется более гибкое: менять ответственность выставления оценки для тех, кто выбрал все блоги, вручную или автоматически. Например, понижать вес оценки до нуля, если выбрано «Все». Впрочем, это тоже не решение — тогда неоткуда будет взяться начальным «плюсам», потому что главные стартовые оценщики — как раз те люди, которые смотрят «Вcе».
А, может быть, надо ввести «оценочный профиль» — чтобы пользователь, выбравший «Все» или очень много, был должен ещё выбрать подмножество того, что он вправе оценивать, а это будет совпадать с его тематикой комментариев, статей и «нравящегося» (а это — как раз выбранные блоги). В противном случае, его оценки не будут учитываться (или учитываться с малым весом). Такая гибкая формульная механика даст именно тот требуемый механизм. Пока пользователь не зарекомендовал себя автором или уважаемым в определённых темах комментатором, у него будет мало базового веса, который, если распылить по всем блогам, станет ещё меньше. А авторы с весом будут или расширять способности оценивания, или иметь высокий вес оценки в узком выбранном кругу тем.
Почему она была сделана, кнопка «Все»
Я, как и все, не хотел терять настройки блогов и затирать их ручным выбором всех категорий. Думаю, они когда-то пригодятся. Ведь это — мой ответ на вопрос: «Какие блоги вы предпочитаете?».
Как теперь переносить настройки между компьютерами?
Да, за счёт затирания своего выбора настроек есть вероятность, что на другом компьютере в другом месте вы откроете сайт, а там — выбрано всё. И это — ваших рук дело :) (если не считать политики). Чтобы не попадать в неудобное положение — носите с собой или храните в Сети (например, в почте) свои настройки — текстовый файл размером 10-30 КБайт. С ним вы сможете импортировать свои прежние настройки блогов. Правда, нет гарантии, что формат не устареет и не перестанет читаться. Но это лучше, чем вручную восстанавливать настройки сотен блогов. А, впрочем, всё это неважно… кроме пчёл.
Интересные и бесполезные фишки
1. Следить за общим числом категорий, блогов и числом выбранных блогов можно по результату чтения категорий в консоли — выдаётся строка:
'==allBlog' Object { cat=15, blog=133, allBlog=326}…
(При съёме данных не работала категория блогов компаний — ошибка MySQL, иначе блогов было бы больше.)
2. Просмотреть объект allBlog со всем принятым с сервера содержимым можно в Firebug, набрав в консоли «allBlog»+Enter.
3. Чтобы получить список всех блогов в JSON, поставьте FAST =0; в скрипте.
5. Совместимость с HabrAjax — с версии 0.816+. (Другими словами, обновите версию HabrAjax, иначе не будут видны кнопки переключения блогов.)
6. Фотогалерея. Одиночный скрипт. С HabrAjax. C HabrAjax + ZenComment (всегда на экране).
7. Чтобы увидеть результаты, нужно перезагрузить страницу.
8. Страница сайта следит за хранилищем на случай смены настроек на другой странице и вовремя отображает несоответствие страницы и сервера — пишет «перезагрузить».
9. Скрипт старается не затереть полезные данные бессмысленными. Если дать команду «Читать» все выбранные блоги, скрипт откажется запоминать такие данные, распознав их по признакам. Но на всякий случай, полезно иметь текстовую копию настроек.
10. На всякий случай, скрипт показывает, сколько байт отправил на сервер, чтобы догадаться, установил он «Всё» или детализацию. Если покажет что-то типа «установлено на сервере 452» — это «Всё». Если сильно больше, например, «установлено на сервере 5876» — это свои настройки.
И ещё раз о сыроватости
Повторюсь, потому что это важно. Используемое ПО сыро, как на сервере, так и в пользовательском скрипте. Сервер запросто может дать ошибку, как сейчас, например, выдаёт ошибку по корпоративным блогам. Поэтому и скрипт сделан гибче, чем мог бы быть. Добавлена не нужная в обычных условиях кнопка «Прочитать» и оставлены клики по активным кнопкам. Потому что нештатные ситуации запросто возможны. Поэтому в первую очередь сохраните строку своих настроек экспортом.
Впечатления
Получилось то, что было нужно — одним кликом восстанавливаются сотни своих настроек за приблизительно 5 секунд. Сохранив настройки вне браузера, можно смело нырять в режим «Читать всё» и вы удивитесь, насколько мир шире рамок, поставленных вами же.
Автор: spmbt