LINUX.ORG.RU
ФорумTalks

Вышел True hackers' reader 0.23

 , , , ,


4

4

Состоялся релиз нового просмотрщика текстов (минималистичного аналога less'а) в однобайтных кодировках True hackers' reader 0.23.

Особенности реализации:

  • Читает содержимое файла в оперативную память и разблокирует текстовый файл, который больше программе не нужен. В отличие от less'а, который читает файл маленькими порциями, а потому требует чтобы файл продолжал присутствовать в системе. Это отличие позволяет True hackers' reader'у, например, читать кучу разных текстовых файлов с разных дискет в системе с одним дисководом. В то время как less заблокировал бы первую же дискету.
  • Несмотря на минималистичные исходники оперативную память расходует сильнее less'а, поскольку текст из файла хранится в буфере в оперативной памяти. Что, впрочем, значительно уменьшает время доступа к любой строке текста (тот же less при прокручивании N строк начинает обращаться к файлу, читать и прокручивать по одной строке с выводом промежуточных результатов, что очень медленно и в последних версиях при вводе цифры полученной при помощи '=' результат не всегда совпадает с ожиданием (что, собственно, и способствовало появлению True hackers' reader'а)).
  • True hackers' reader использует меньше чем less таких функций как, например, doupdate(). Как следствие, True hackers' reader на ARM'ах значительно шустрее чем less.
  • Локаль UTF-8 не поддерживается совсем. Если программа обнаружит локаль UTF-8, то её выполнение завершится ошибкой «Error: invalid locale (UTF-8) found».
  • В первых версиях присутствовали значительные ограничения на размеры текстовых файлов, которые были связаны с внутренними ограничениями библиотеки ncurses (внутренние размеры ncurses (а текст сразу выводился в окно ncurses, которое затем просто сколлилось) ограничены максимальным значением short int, что для x86_64 составляет 32767). Это приводило к тому, что программа могла отказаться читать текстовые файлы, размер которых превышал 2,5 Мб. О чтении текстовых файлов на десятки мегабайт не могло идти и речи. Начиная с версии 0.10 введён промежуточный буфер для текста (который, вопреки ожиданиям, не так уж и снизил скорость программы, но очень значительно сократил расход оперативной памяти) и программа начала открывать текстовые файлы на сотни мегабайт.
  • У программы есть 4 опции:
    -r - удалить файл после прочтения в оперативную память;
    -f - прокрутка по целой странице
            (по дефолту программа оставляет последнюю строку предыдущей страницы в самом начале новой);
    -t - заменить табы пробелами;
    -s - переформатировать текст по ширине экрана;
    
    Переключатель режима прокрутки доступен и во время работы программы по клавише 'f'. Опции должны указываться после пути к файлу, который всегда указывается первым аргументом. Если в первом аргументе программа обнаружит вместо пути к файлу одну из опций, то её выполнение завершится с ошибкой «Error: wrong options and path to file order».
  • Если программа обнаружит локаль KOI8-R, то в окне справки (вызывается по F1) появится надпись «Привет KOI8-R'щикам!». При другой однобайтной локали эта надпись будет отсутствовать.
  • В комплект входят два скрипта на bash'е: lzthreader, который разархивирует пожатый gzip/bzip2/lzma/xz/lzip текстовый файл во временный, а затем открывает его в True hackers' reader'е с опцией удаления файла, а также hexthreader, который при помощи утилиты Brutal squirrel ( http://saahriktu.org/downloads/brtlsqrrl-0.4.tar.xz ) преобразует файл в шестнадцатеричное представление, а затем открывает его в True hackers' reader'е с переформатированием по ширине экрана.

Скачать True hackers' reader и Brutal squirrel также можно по протоколу gopher при помощи команд

curl gopher://sdf.org/9/users/saahriktu/saahriktu.org/truehackersreader-0.23.tar.lzma > truehackersreader-0.23.tar.lzma
curl gopher://sdf.org/9/users/saahriktu/saahriktu.org/brtlsqrrl-0.4.tar.xz > brtlsqrrl-0.4.tar.xz

Скачать (3177 байт)

Перемещено Shaman007 из opensource

★★★★★

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

на Ruby

Соболезную.

2saahriktu: ты бы man setlocale до конца прочел бы. Впрочем ладно, хрен с ним, с utf'ом, но файлы-то с именами -f, -r, -t чем твоей программе насолили, что она их читать не хочет?

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

Не все пишут код командами. При коллективной разработке, да, git'ы и прочие svn'ы могут быть полезными, никто не спорит.

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

А это не твое дело. Правильно написанная программа должна уметь работать с тем, что ей предоставляет операционная система, а не то, что в твоем личном понимании «нужно».

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

Вы так говорите только потому, что у Вас другая школа программирования. А у меня старая школа, с точки зрения которой код во времена BSD 3 был гораздо лучше. Потом в мейнстрим пришёл другой подход к коду и код испортился. А я всё равно стараюсь чтобы мой код был красивее, т.е. ближе к коду времён BSD 3.

Например, мне очень нравится код basename из BSD 3. В оригинале он таков:

#include        "stdio.h"

main(argc, argv)
char **argv;
{
        register char *p1, *p2, *p3;

        if (argc < 2) {
                putchar('\n');
                exit(1);
        }
        p1 = argv[1];
        p2 = p1;
        while (*p1) {
                if (*p1++ == '/')
                        p2 = p1;
        }
        if (argc>2) {
                for(p3=argv[2]; *p3; p3++) 
                        ;
                while(p1>p2 && p3>argv[2])
                        if(*--p3 != *--p1)
                                goto output;
                *p1 = '\0';
        }
output:
        puts(p2, stdout);
        exit(0);
}

saahriktu ★★★★★
() автор топика

минималистичного аналога less'а

Следующим будет минималистический аналог true…

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

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

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

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

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

Потому, что её реализация, очевидно, не универсальна. Я привёл два возможных способа создания универсальных программ. Но, совсем не обязательно делать программу универсальной.

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

Не все пишут код командами

VCS нужны не для работы в команде.

git'ы и прочие svn'ы

Почитай уже, чем dvcs отличаются от остальных vcs.

могут быть полезными

Что значит «могут»? VCS — базовое требование для разработки, базовее только компилятор.

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

VCS нужны

Не нужны в данном случае.

Почитай уже

И?

Что значит «могут»?

То и значит.

VCS — базовое требование для разработки

Нет.

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

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

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

Не нужны в данном случае

Идёт разработка — тспользуется vcs. No exceptions.

Нет

Да.

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

Если программа неправильно работает с файлами или с их именами, которые ей предоставила операционная система, то вне зависимости от мнения ее автора или его школы - это говнокод.

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

Программа правильно работает со своими опциями чтобы их не пихали на место пути к файлу.

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

Неудобными инструментами работать неудобно. Поэтому выбор удобных инструментов, внезапно, вопрос удобства.

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

В tty нужно работать.

Оукей, попытаем тебя, раз saahriktu не колется — зачем работать в tty? Что за работа такая, что для нее необходим tty?

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

Времена BSD v3 - это конец 90х. То есть, ты не пенсионер. Ну ОК.

Второй вопрос: прогресс. Задачи, которые решают сейчас и задачи, которые решались в 1995м разительно отличаются. Почему тогда писали так, а сейчас иначе - результат вполне вразумительного процесса, у которого есть авторитетные авторы. И это результат работы многих людей.

Что не отменяет запосченного write-only кода без комментариев, с ошибками. Что тоже допустимо, если бы не ПАФОС.

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

Потому, что так удобно.

Этот ответ перестал быть оригинальным и остроумным черт знает сколько флеймов назад (а правдивым он не был никогда даже с поправкой на «всем удобно разное»).

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

Разные люди работают над разным и по-разному. Ошибками тоже можно считать разное. Можно, например, считать ошибкой, что парсеры юникода не умеют воспринимать как валидные строки любые последовательности байт. Другой вопрос, что это by design. Но, «by design» могут быть любые фичи. В т.ч. и, например, отказ читать файлы с именами опций.

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

Но, «by design» могут быть любые фичи. В т.ч. и, например, отказ читать файлы с именами опций.

Тогда и реализовывать эту «фичу» следует полностью: threader ./-r должно делать то же, что и threader -r.

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

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

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

write-only кода без комментариев

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

bread
()
Ответ на: комментарий от dexpl
./-r

Это не имя опции.

-r
А вот это имя опции.

saahriktu ★★★★★
() автор топика

скачал, посмотрел исходники ещё раз

я так понимаю, ответ на мой незаданный вопрос будет «не всем нужны функции getopt() и getopt_long() для парсинга аргументов командной строки»?

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

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

WitcherGeralt ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.