LINUX.ORG.RU

newsboat 2.23

 , , , ,


1

1

Спустя более двух месяцев разработки вышла новая версия консольного просмотрщика новостных лент в форматах RSS и Atom – Newsboat, написанного на языках C++ и Rust.

Newsboat поддерживает множество сторонних новостных сервисов, группировку лент по тэгам, добавление закладок и пометок; предоставляет гибкий язык фильтрации лент в соответствии с их параметрами.

Среди нововведений в версии 2.23:

  • новая команда open-in-browser-noninteractively;

  • delete-all-articles теперь требует подтверждения;

  • новый спецификатор %U для feedlist-title-format показывающий общее число непрочитанных статей во всех лентах;

  • теперь при просмотре статей вместо изображений показывается их альтернативный текст (если есть атрибут alt);

  • ссылки на iframe будут показываться при просмотре статьи;

  • уменьшено мигание сообщений при обновлении лент;

  • обновлены голландский, немецкий, итальянский, польский, русский, украинский и турецкий переводы;

  • подкаст, имя которого уже присутствует в очереди, не будет запрашиваться;

  • возвращены способы переключения и сброса настроек: set x! (переключить) и set x& (сбросить);

  • после каждого <div> теперь будет добавляться символ переноса строки;

  • описания в справочном диалоге вновь локализированы;

  • успешный импорт OPML больше не воспринимается как ошибка;

  • просмотрщик файлов теперь не выдаст некорректный путь при навигации пользователя с помощью клавиш со стрелками;

  • при генерации имени файла подкаста слеши теперь заменяются подчёркиваниями;

  • delete-all-articles больше не удаляет элементы, которых не видно;

  • при простаивании newsboat не будет перерисовывать экран каждую минуту;

  • исправлены пропущенные пустые строки внутри пре-тегов;

  • open-all-unread-in-browser-and-mark-read теперь синхронизирует статус прочтения с API;

  • удалена команда dumpform, которая была необходима для отладки кода пользовательского интерфейса;

  • минимально поддерживаемая версия Rust поднята до 1.46.0;

  • библиотека Catch2 обновлена до 2.13.4;

Список изменений

Сайт проекта

>>> Подробности



Проверено: Shaman007 ()

Мне кажется, было бы неплохо добавить, что сабж – форк Newsbeuter.

По теме: есть ли какой-либо смысл пробовать Newboat, когда и с Newsbeuter всё устраивает? Допустим, если open-in-browser-noninteractively не передает фокус браузеру, это уже будет удобнее.

Вот это выглядит странно: «после каждого теперь будет добавляться символ переноса строки». Бывает, что по сайту разбросана куча ничего не значащих дивов, в том числе внутри строк. Я бы не хотел, чтобы такие строки разбивались.

Bagrov ★★★★★ ()
Ответ на: комментарий от Bagrov

Привет, я Minoru, майнтейнер Newsboat.

По теме: есть ли какой-либо смысл пробовать Newboat, когда и с Newsbeuter всё устраивает?

Если действительно всё-всё-всё устраивает, то нет. Newsboat — это просто поддерживаемая версия Newsbeuter с инкрементальными изменениями: починили старые баги, добавили новых, ну и пару опций впридачу.

Допустим, если open-in-browser-noninteractively не передает фокус браузеру, это уже будет удобнее.

Так и есть, не передаёт. Если у тебя firefox & в качестве браузера, то с open-in-browser-noninteractively у тебя не будет «миганий», когда Newsboat на долю секунды отдаёт терминал новому процессу.

Вот это выглядит странно: «после каждого теперь будет добавляться символ переноса строки».

Такие вот изменения — это бич моего существования, потому что приходится выбирать, какой группе пользователей сделать плохо.

С одной стороны, div это блочный элемент, то есть он всегда должен рендериться на отдельной строке. С другой стороны, сайты действительно используют его как span, переопределяя рендеринг с помощью CSS. HTML-рендерер в Newsbeuter/Newsboat хорош, но до браузера не дотягивает — у нас нет и, надеюсь, не будет ни поддержки CSS, ни JS. Нас спасает три вещи: 1) большинство авторов фидов адекватны и пихают в RSS простенький HTML; 2) в Newsbeuter/Newsboat есть настройка html-renderer, позволяющая рендерить с помощью w3m или чего-то ещё; 3) статьи с крайне упоротой разметкой можно прочесть в браузере.

В данном случае я решил сделать плохо пользователям тех фидов, которые не соответствуют спецификации HTML.

pwsafe ()
Ответ на: комментарий от anonymous

Не через либу. Там документация в формате asciidoc; раньше она конвертировалась в HTML и troff с помощью Asciidoc (на Python), но разработка этой программы стагнировала, и де-факто стандартным инструментом стал Asciidoctor (на Ruby). Мне плевать на языковые срачи at large, мне документацию надо рендерить, так что я переехал на Asciidoctor и живу дальше.

Естественно, доки конвертируются на этапе сборки. В рантайме никакой Ruby не нужен.

Лучше бы полностью на хаскель переписали, чем весь этот винегрет.

Вот ты шутишь, а был такой вариант, был! Но, к счастью, хватило ума выбрать что-то более близкое к C++. На Хаскеле проще написать ридер «по мотивам Newsbeuter», но у меня цель другая, так что увы.

pwsafe ()
Ответ на: комментарий от crypt

а это не много языков для такой утилиты?

Много. В (не)далёком будущем будет на один меньше, а пока что инкрементально портируем, пытаясь ничего сильно не сломать.

или это, как на C плюс обертка на python?

Ну, вроде того, да. В целом проект на C++, но он вызывает некоторые функции из библиотеки, написанной на Rust. Код постепенно переезжает в эту библиотеку. Когда-нибудь наступит момент, когда обёртка на плюсах будет заниматься только интерфейсом, а весь heavy lifting будет на Rust. А в следующий момент весь плюсокод окажется заменён на новую реализацию целиком на Rust. Во всяком случае, таков план.

pwsafe ()
Ответ на: комментарий от Gonzo

Конечно же, с помощью абсолютно дырявого, то есть с помощью C!

[/trollmode]

На самом деле всё просто: Rust экспортирует C API, плюсы им пользуются. Сейчас уже есть крейт cxx, благодаря которому можно писать биндинги, не думая про unsafe.

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

pwsafe ()
Ответ на: комментарий от Avial

Дваждую Canto. Пользовался им до того, как переехал на Newsbeuter. Canto как-то попроще, что ли, и ещё у них настоящий клиент-сервер с возможностью запуска нескольких клиентов. В Newsbeuter/Newsboat вместо этого своя собственная система окон (!) и соответствующий охапок фееричных багов.

pwsafe ()
Ответ на: комментарий от braindancer

А как ты избегаешь запуска двух копий на двух разных компьютерах? Если они обе начнут что-то писать в кеш, получится каша; а если syncthing потом ещё это как-то творчески синхронизирует…

pwsafe ()
Ответ на: комментарий от pwsafe

Мне плевать на языковые срачи at large

Но, к счастью, хватило ума выбрать

заменён на новую реализацию целиком на Rust

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

anonymous ()
Ответ на: комментарий от pwsafe

Привет. В свете того что раст известен большими размерами бинарников, обсуждался-ли как-то вопрос утяжеления в планах перехода на него? В моей системе newsboat уже сейчас занимает 5.7 Мб. Разумеется место на диске сейчас очень дешёвое, разумеется все фичи в программе очень важны, да и что такое 5.7 Мб; но оптимизировать это дело как-то нужно всё равно… Из всех используемых мной консольных программ newsboat сильно выделяется своей фигурой)

Спасибо за проделанную работу! :)

cpio ()
Ответ на: комментарий от Turbid

мне под каждую клоаку свой васянин клон поднимать?

Если прямо очень сильно хочется всё читать из фидов, есть RSS-Bridge; его одного должно хватить - много чего поддерживает. Есть публичные инстансы, но лучше конечно завести свой.

А так, зачем вобще подписываться на «клоаку»? Нет фида - до свидания. В крайнем случае сообщи автору об отсутствии у него такой замечательной штуки как фид.

cpio ()

Ничего не понимаю. Стандарт RSS предполагает, что в передаваемом тексте возможно форматирование и размещение картинок. Зачем тогда для просмотра RSS делать консольный клиент, в котором по определению невозможно отобразить ни того ни другого?

Xintrea ★★★★★ ()
Ответ на: комментарий от robby

Так же, как смотреть картины в Эрмитаже с помощью меню в ресторане. Никак.

Можно, конечно, и в интернетах серфить с помощью программы для прожига компакт-дисков. Но то такое.

Есть способ передачи данных RSS, есть способ передачи Jabber, есть способ http, и т. д. Вообще-то можно через http просматривать rss, и можно сделать парсинг постов из телеги… но это будет нерационально.

С другой стороны, есть например Emacs, который может и почту читать, и RSS и Jabber и даже Telegram.

Dreamdrawer ()
Ответ на: комментарий от Dreamdrawer

Я не чаты собираюсь читать по rss, а новостные каналы, где один только текст. Сейчас использую какой-то онлайн генератор rss. Вот, хотел узнать, есть ли какие-нибудь решения, желательно в докере, для таких вещей.

robby ()
Ответ на: комментарий от robby

Если вкратце, то делается это так Habr-пост.

Можно поискать ботов, которые формируют rss-рассылки из телеграм-каналов. Но проще будет получать rss-рассылки в телеграме.

Сам не пробовал, но часто встречал написанных под эти задачи ботов на github. Пробей через поиск.

Dreamdrawer ()
Ответ на: комментарий от cpio

В свете того что раст известен большими размерами бинарников, обсуждался-ли как-то вопрос утяжеления в планах перехода на него?

Нет. Из всех кандидатов юзабельная динамическая линковка была только в C++ и D, но первый IMHO слишком отстал от жизни, а второй недостаточно амбициозен :) Все остальные кандидаты — Go, Haskell, Rust — используют статическую линковку. Заранее угадать, насколько жирными будут бинарники, было бы проблематично, так что этим никто не занимался.

но оптимизировать это дело как-то нужно всё равно

Я не спорю, но с моей точки зрения это низкоприоритетная задача. Меня гораздо больше волнует прожорливость в рантайме: Newsboat при запуске читает всю свою БД (а это могут быть гигабайты), а при каждом обновлении лент фрагментирует память.

Если кто-нибудь хочет посмотреть вывод cargo bloat и что-то улучшить, или готов добавить в CI и README инструкции по link-time optimization — я с радостью приму патчи. Но у меня самого вряд ли дойдут руки этим заняться.

Скорее всего, размер будет уменьшаться от попыток ускорить сборку, потому что время компиляции реально парит. Сейчас уже есть понимание, какие крейты стали для нас важными зависимостями, а какие можно заменить на что-нибудь попроще. Но даже тут выигрыш будет исчисляться сотнями килобайт. К тем двум мегабайтам, которые были в Newsboat 2.13, мы вряд ли вернёмся :(

Спасибо, что написал новость ^_^

pwsafe ()
Ответ на: комментарий от Xintrea

Стандарт стандартом, а по факту в RSS обычно используют подмножество HTML: p, i, b, img/embed, code, pre, иногда таблицы. Богатство разметки примерно такое же, как и в Markdown. Поэтому консольные клиенты вполне юзабельны.

Есть, конечно, и исключения: комиксы, ютуб, подкасты. Но у меня из сотен подписок всего пара-тройка таких «медийных», так что для меня консольный ридер — самое то.

pwsafe ()
Ответ на: комментарий от Gonzo

Есть rss2email. Можно с его помощью по крону скачивать фиды в почтовый ящик (можно в несколько разных ящиков, по тематике, например), а потом читать через любой почтовый просмотрщик, хоть консольный, хоть гуёвый.

aeralahthu ()
Ответ на: комментарий от pwsafe

Код постепенно переезжает в эту библиотеку. Когда-нибудь наступит момент, когда обёртка на плюсах будет заниматься только интерфейсом, а весь heavy lifting будет на Rust. А в следующий момент весь плюсокод окажется заменён на новую реализацию целиком на Rust.

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

Простите, не удержался. Ничего не имею против раста, если что.

aeralahthu ()
Ответ на: комментарий от Gonzo

Просто интересовался консольными rss читалками.

Возможно, я недостаточно понятно выразился. На всякий случай уточню. rss2email + mutt = «консольная rss читалка». mutt можно заменить на mblaze, alpine, ещё что-нибудь консольное, в любом случае получится «консольная rss читалка».

С другой стороны, если кому-то удобно читать почту в Thunderbird, то почему бы и rss-фиды не читать там же?

aeralahthu ()
Ответ на: комментарий от aeralahthu

Теперь понял. Интересовался для минималистичной системы на другой своей машине. Я в курсе, что можно нагородить что угодно для чего угодно, и оно будет работать, но зачем такой велосипед, если есть одно решение (как сабж из топика). В любом случае спасибо за предложенную идею.

Gonzo ★★★★★ ()
Ответ на: комментарий от Gonzo

но зачем такой велосипед, если есть одно решение

Unix-way потому что.

Dumb user way — искать под каждую задачу специальную отдельную программу-комбайн. Алиасы: windows-way, android-way, corporate slave way, etc.

Unix-way — воспользоваться уже имеющимися хорошо изученными и работающими простыми программами, добавить к ним, если необходимо, один новый простой компонент, скомбинировать всё в нужном порядке, получить нужный результат.

Ну а если без философии и идеологии, то можно проще: зачем мне изучать интерфейс ещё одной программы, когда я могу удобно читать фиды в уже изученном и привычном почтовом клиенте.

(На самом деле у меня даже почтового клиента в привычном понимании нет. Есть набор простых программ, каждая из которых делает одно простое действие. Одна скачивает почту, другая сортирует по ящикам, третья отправляет, четвёртая позволяет мне искать нужные письма, пятая — выводить их на экран, шестая — открывает в редакторе процитированное письмо для написания ответа, ну и так далее. Естественно, юниксовые пайпы позволяют всё это комбинировать в широких пределах.)

aeralahthu ()
Последнее исправление: aeralahthu (всего исправлений: 2)
Ответ на: комментарий от aeralahthu

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

Понятно то, что в монолитной программе все эти функции представлены в виде отдельных кусков кода, которые тоже могут содержать ошибки; но все неровности, исключения и неожиданное поведение в результате работы на какой-то из ступеней учитываются хорошими программистами… А кем учитываются ошибки работы offlineimap или msmtp? Да, да, программистами; но ошибками именно взаимодействия этих программ занимается тот, кто решил заняться воплощением «Unix-way» в жизнь.

Ничего плохого в «Unix-way» нет, но занимаясь обустройством своей почтовой системы ты так или иначе пишешь логику согласования этих программ в shell-скриптах, cron-джобах, systemd-юнитах и так далее. Так почему сразу не написать единую программу, скажем на языке C, которая и работать будет быстрее, и места занимать меньше (чем скрипты)? К определённым задачам как-раз подход монолитности наиболее эффективен (ну не «Dumb» же это «way»).

Всё же «Unix-way» незаменим в тех случаях, когда задача по-настоящему широка и/или масштабна (например операционная система (не только ядро для неё)): в этих ситуациях разделение обязанностей крайне важно. Но в случае небольшого редактора текста, просмотрщика rss-каналов или почтового клиента монолитность сыграет в несколько преимуществ: стабильность (в каждой новой версии программы все её компоненты нужным образом к друг-другу приурочены), целостность (все ошибки компонент на каждом из уровней тщательно обрабатываются и учитываются программой «из коробки»), простота настройки (конфигурация программы с унифицированными параметрами; возможность у пользователя очень сложные вещи описать одной настройкой) и, самое главное, лёгкость использования (без необходимости построения маленькой экосистемы).

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

cpio ()
Ответ на: комментарий от pwsafe

А у вас поменялась схема базы данных? Тот вариант, что был в newsbeuter(абсолютно все данные - записи, тем, текст статей и т.п. в одной таблице из двух полей)? На моих объёмах данных и поиске оно всё тормозило.

shell-script ★★★★★ ()