Шиори

Oct. 7th, 2019 07:07 am
recoder: (Default)

Два года назад я засел писать себе веб-архиватор в виде сервиса - и ниасилил. Заткнулся на TDD с RSpec и на DevOps-перфекционизме.

Год назад я подумал, что компромиссным решением будет написание CLI-утилиты для архивации страниц, в надежде на то что GUI потом как-нибудь сам вырастет. Тут дело пошло быстрее. Проект, прозванный Веб-Плюшкиным, начал обретать формы и набираться данных. Внезапно выяснилось что вытягивать читабельные данные из страниц - дело отнюдь нетривиальное. Классический readability морально устарел. Альтернативные решения типа pismo или wombat тоже не блещут новизной. С Telegram'овским Instant View снаружи не заинтегрируешься. На внешние сервисы закладываться не хочется.

И тут я случайно натыкаюсь на проект Shiori, который делает примерно половину того чего бы мне хотелось и делает её очень неплохо. По сути - это такой персональный Pocket: многопользовательский архиватор страниц с поддержкой readability mode. До настоящего Pocket'a эта поделка конечно не дотягивает, но пилится активно и надежды есть.

Вот я теперь в раздумьях: допиливать своего Плюшкина или дописывать недостающие фичи в Шиори? Главное осложнение - что Шиори написан на богомерзком Говне, который у меня не вызывает ничего кроме омерзения. И шо ж делать?

recoder: (Default)

Придумал ещё одно паллиативное решение проблеме протухающих ссылок - на этот раз с помощью старого доброго Гугля. Когда я записываю URL мне же обычно на самом деле важен сам документ, а не его легкопортящийся адрес. Поэтому приходится делать content addressing на коленке. Помню, на заре интернетостроения сетяне развлекались Googlewhacking'ом - подбирали поисковые слова к Гуглю так, чтобы в результате поиска была всего одна ссылка. Я решил идти аналогичным способом - чтобы записать ссылку на текстовые документ, я выбираю из него набор ключевых слов и составляю поисковый запрос с ними. (Вот к примеру эта заметка должна быть доступна по ссылке на https://www.google.com/search?q="паллиативное решение проблеме протухающих ссылок"&btnI=.) В результате: пока в интернетах остаются копии этого документа, я легко смогу снова прочитать его.

Сразу появляется интересная задачка: как автоматизировать такой процесс? Мне-то довольно очевидно какие фразы являются ключевыми, и после одного-двух-трёх экспериментальных запросов в Google я могу выбрать оптимальный. Есть идея попробовать TF-IDF алгоритм для определения наиболее значимых слов (примерно так как это делает SMMRY.com) и пробовать искать их в разных комбинациях, пока нужный результат не окажется в топе. Главное - чтобы за эксперименты в Гугле не забанили.

Метод конечно не супер-надёжный, ибо подвержен Googlebombing'у, да и вообще говоря документ может просто пропасть из интернетов. Однако за примерно год что я этим методом пользуюсь, он чаще срабатывал чем нет.

recoder: (Default)

Оказывается, идея ненавидимых многими сокращаторов ссылок вроде TinyURL или Bit.ly уходит корнями в далёкие девяностые, когда OCLC справедливо озаботилась тем, что документы в интернетах могут переезжать и хорошо бы их как-то уникально идентифицировать. Для этого они ещё в 1995 году придумали концепцию Persistent uniform resource locator (PURL), которая по сути и есть абстрактный сокращатор, позволяющий регистрировать перманентные ID для ресурсов и служить резолвером-редиректором.

Первую реализацию они опубликовали на purl.org, потом лицензировали эту технологию другим PURL-провайдерам, а в конечном счёте всё переехало под крыло Internet Archive (что кмк очень хорошо) и сейчас живёт по адресу https://archive.org/services/purl/

Любопытно, что примерно в то же время в RFC были впервые зафиксированы концепции URN, которые делают примерно то же самое - идентифицируют сущности, которые могут быть транслированы в URLы. Типы сущностей правда жёстко стандартизированы в IANA в отличие от PURLов, но мне всё равно интересно почему эти концепции так и не слились воедино.

Забавно, что в перманентном мире IPFS разработчики решают обратную проблему: придумать какой-то механизм чтобы определённому имени соответствовало изменяющееся содержимое (да ещё и в распределённой среде). И оказывается что это тоже непросто.

recoder: (masked)

Похоже, не одного меня достали проблемы с архивацией интернетов. За прошедший год помимо уже установленного в Chrome Archiveror'a, обнаружились ещё парочка любопытных расширений.

Во-первых, Memex от WorldBrain.io: он индексирует и локально архивирует всю историю посещений и все закладки. Очень помогает в ситуациях "кажется месяц назад я где-то что-то подобное уже видал..." За деньги он умеет ещё все данные хранить в облаке и синхронизироваться, но мой внутренний мини-параноик мне запретил это делать.

Во-вторых, нашёлся Toby с одноимённым расширением. Он предлагает организовать все закладки по категориям и показывать всё это на стартовой странице. Это конечно не так полезно как Memex, но решает проблему "опять открыл три сотни закладок и всё тормозит".

И ещё - простенький веб-сервис saved.io: чтобы сохранить страничку с его помощью, надо просто дописать saved.io/ в адресной строке перед полным URL. Ничего особенного, но простота процесса подкупает.

Остальные найденные инструменты сложил на Diigo по тегу "archiving". И продолжил поиски...

recoder: (masked)

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

Взял, написал себе небольшой скриптец ljlinks.py для выкусывания внешних ссылок из последних 20 постов. Потом начал запускать его с опенсорсным скриптом archivenow, который сохраняет выбранные ссылки в публичные архивы типа Web Archive или Archive.is. И теперь достаточно раз в недельку запускать единственную команду:

for u in `./ljlinks.py --username $LJUSER --password $LJPASS`; \
    do archivenow --is --ia $u; done

Было бы замечательно иметь где-нибудь ещё скрипт-редиректор который бы проверял жив ли ещё адресуемый ресурс и в зависимости от этого перенаправлял на живой ресурс или на его архивную копию. Только вот боюсь что такого сервиса быть не может, потому что его спаммеры тут же съедят. Эх...

Далее - поставил себе в Chrome плагинчик Archiveror который обещает автоматически архивировать всё что я складываю в закладки. Тоже какое-никакое подспорье в борьбе с энтропией.

И ещё надо будет на досуге поисследовать WebRecorder, который webrecorder.io. По крайней мере идеи там любопытные.

recoder: (masked)

Цифровая тётка с косой нанесла очередной удар в спину: внезапно обнаружилось, что моя коллекция инфографики на vi.sualize.us накрылась медным тазом. Вместо графиков и котиков по моим URLам почему-то теперь открываются какие-то дизайнерские интерьеры. Покопавшись в мементовом WebArchive удалось выяснить, что последний раз мой аккаунт архивировался в декабре прошлого года, после чего сайт верломно похерился, словно в издёвку оставив мне в аккаунте пару картинок и грустного котика. Сволочи!

Старый del.icio.us был недавно опять перекуплен, на этот раз Pinboard'ом за полсотни штук грина, замигрирована на мемориальный сервер, и обещается оставаться в read-only статусе, но всё равно до сих пор лежит в дауне. Балбесы!

Неожиданно Facebook начал допиливать свои Saved Links - организовали там коллекции и сделали кое-какой поиск, но для промышленной организации ссылок всё равно не подходит. Максимум что я могу доверить Фейсбуку - это быть моим inbox'ом для ссылок с мобильных устройств.

Но есть и хорошие новости! Я нашёл своих единомышленников объединившихся в Archive Team. Они также как и я верят в ценность архивации всего, также ненавидят сокращаторы. Сейчас вот спасают ЖЖшечку и SoundCloud.

Могу пожелать коллегам из Archive Team успехов в борьбе с мировой интернет-энтропией, но всё равно считаю что спасение утопающих - дело рук самих утопающих. И пойду дальше пилить свой сохранятор...

recoder: (masked)

Ален нови, ностра алис! Что означает — ежели один человек построил, другой завсегда разобрать может.
© к/ф Формула Любви
По мере того как веб-дизайнеры, науськиваемые SEOшниками, всё больше изгалялись в своей креативности, на нашей стороне всё больше крепло желание как-то пресечь всё это на корню, чтобы просто побыстрее добраться до искомого текста, запрятанного за баннерами, всплывающими подписками и прочей мишурой.

Сначала пробовали бороться AdBlock'ами, и они конечно помогали, но хотелось большей унификации. Появились читалки вроде покойной Readability (от которой впрочем ещё остаётся Mercury API). Тут же подтянулись монстры: Google с его неоднозначным AMP и Facebook с Instant Article начали тянуть одеяло на себя, предлагая упрощённые версии страниц со своей рекламой под эгидой заботы о мобильных пользователях.

А вот в нашу сторону одеяло пока никто не тянул. Пока красавчик Дуров не запилил Telegram с его Instant View. Они сделали именно то, что я думал реализовать в своей читалке: сделали возможность к каждому сайту написать свой собственный фильтр, который грамотно вытянет нужную информацию и оформатирует в хорошо читаемом виде. И объявили конкурс с призовым фондом в $200000 на самые хорошие темплейты для сайтов.

Такое обязательно надо будет заинтегрировать в свою веб-читалку. А ещё мне всё больше нравится идея использовать сам Телеграм (с ботом) как клиент для многих задач. Дуров наверное именно этого и добивается...

recoder: (masked)

В процессе дизайна персонального архиватора обнаружил что существует достаточно официальный (RFC 7089) протокол для архивации веб-ресурсов под названием Memento. Авторы протокола пошли оригинальным путём и просто расширили стандартную процедуру "content negotiation" ещё одним измерением - временем!

В схеме Memento клиент может сделать HEAD-запрос к ресурсу (на сервере, поддерживающем эту схему) с указанием заголовка "Accept-Datetime: {date}" и сервер отвечает на такой запрос стандартным 200 OK с указанием места где живёт "TimeGate" - сервер архивации, и выглядит это как "Link: {uri}, rel=timegate". После этого можно обратиться к таймгейт-серверу и он выдаст 302 Found туда где уже и выдадут запрошенную архивную копию.

На основе этого протокола придумали решение моей проблемы протухающих ссылок - Robust Links. Тэг ссылки просто расширяется дополнительными атрибутами data-versiondate и data-versionurl, так что ссылки выглядят примерно так:

<a href="http://thekeepers.org/" data-versionurl="http://archive.today/DTt8f" data-versiondate="2014-11-01">http://thekeepers.org/</a>
// rendered as http://thekeepers.org/

Такие декорированные ссылки небольшим скриптом можно превратить в мини-менюшки выбора конкретной сохранённой версии документа по ссылке. К сожалению, обычному бложеку на LJ/DW такая техника не подходит потому что сторонний скрипт так легко не подцепить. Поэтому Memento-сервисы обычно поддерживают запросы вида GET /{date}/{resource uri}, однако стандартизация сюда ещё не добралась и каждый сервис лепит что-то своё.

Увы, серьёзных сервисов поддерживающих Memento, не так уж и много: Wayback Machine, Archive Today, Perma.cc. Wayback Machine примечательна своим возрастом - она архивирует интернет с 2001 года (я там даже нашёл свой старый хомяк из прошлого тысячелетия!). Archive Today поражает качеством архивирования - видимо они загружают страницы в headless browser и сохраняют получившееся состояние. Однако совершенно непонятно кому принадлежит этот сервис и соответственно неясно сколько он ещё протянет. Perma.cc пилится Гарвардским университетом, так что стоит предположить что он переживёт все подобные сервисы, что и является его главным преимуществом.

Чувствую, в своём хабе-архивариусе надо будет запилить поддержку Memento. Незачем велосипеды изобретать. Было бы совсем круто сделать этот протокол распределённым, чтобы каждый такой сервачок мог спросить у соседних сервачков "а у вас такого URLя не найдётся?", но как только начинаешь думать о децентрализации - сразу всплывает такое количество проблем, что всё желание думать дальше и пропадает. Поэтому наш девиз - каждый сам за себя!

recoder: (masked)

Выкроил на неделе чутка свободного времени, пошерстил интернеты на предмет персональной системы архивации ссылок. Результаты неутешительные: понаписано много чего, а того чего надо мне - нету. Толи никому такого не надо, толи я странного хочу, толи и то и другое...

В списке self-hosted архиваторов есть ровно две позиции:

  1. Wallabag. Хоть внутри и на богомерзком PHP, но снаружи выглядит неплохо. Много хороших фич: работающая readability, теги, поиск, RSS-фиды, импорт, экспорт в mobi/epub. Есть мобильные приложения.
  2. Nunux. Более молодёжный: на NodeJS, с модными external identities, приличным REST API. Но

Букмаркеров оказалось больше, но все страшные как атомная война: Shaarli, SemanticScuttle, Pinry, UnMark.

Сокращаторов тоже есть несколько: lstu, polr, YOURLS. Но только последний делает что-то сложнее тупого управления одной таблицей в БД, да и тот на PHP. Но мне кажется, свой сокращатор и так пишется за пару вечеров на любимом языке.

В общем, кое-что уже написано, но не очень хорошо и непонятно как это всё интегрировать.

От отчаяния пошёл посмотреть на готовые сервисы: pinboard, raindrop, diigo, stash.ai, contentle, historious. Нашёл даже такой оверкилл как BookmarkOS. И приличным из них всех мне кажется только Diigo. И я бы даже раскошелился на $50/год чтобы включить архивацию страниц, однако где гарантии что лет через пять от не уйдёт в царство Аида, унеся с собой тысячи заботливо разложенных закладок?

Чем дальше - тем больше мне хочется сесть и написать себе свой собственный аналог того же Diigo с самыми важными фичами:

  • каталогизатор ссылок (теги, коллекции)
  • сокращатор ссылок
  • архивация содержимого ссылок
  • поиск по сохранённым ссылкам
  • оптимизатор содержимого a-la readability/newspaper
  • ведение очереди/очередей для чтения

А чтобы самому не писать мобильные клиенты - написать прокси-сервер для клиента от Wallabag.

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

recoder: (masked)

Отправился я недавно перечитать кой-чего из старого ЖЖ примерно десятилетней давности (да-да, я тот самый человек который перечитывает старые записи и даже иногда возвращается к старым дискуссиям). И после недолгого щёлканья по ссылкам остался в лёгком шоке от того что добрая половина гиперссылок протухла и более никуда не ведёт. Пошёл пошарить по своим коллекциям ссылок и пришёл в полнейшее расстройство. Увы, связность гипертекста не выдерживает испытание временем.

Плач Интернет-Ярославны )

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

И захостить всё это на своём собственном сервере, чтобы ни от кого не зависеть!

Должно быть несложно...

December 2024

S M T W T F S
1234567
891011121314
15161718192021
22232425 262728
293031    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 24th, 2025 12:02 pm
Powered by Dreamwidth Studios