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)

Если программа обнаружит локаль KOI8-R, то в окне справки...

Уже и автор этой локали умер, а ее все никак похоронить не могут

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

Уже и автор этой локали умер, а ее все никак похоронить не могут

Древнее зло... непобедимо.

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

Кстати в моем предстваление хакерс-ридер это hex виев и ему должно быть пофигу на кодировку. И желательно с правкой по байтно ;)

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

Авторы многих (почти всех) технологий уже умерли. Предлагаешь закопать все эти технологии вместе с их смертью?

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

Да, отказываемся от огня, а то это неуважение к унгобунго, который огонь изобрёл.

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

Т.е. нужно все еще поддерживать паровозы на дровах ? :)

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

Разумеется. Именно поэтому исходники и не надо конвертировать в KOI8-R, что KOI8-R и UTF-8 совместимы через ASCII. А вот дальше начинаются большие различия.

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

Где логика?

В ее отсутствии. Не, если серьезно, то как по мне KOI8-* не актуально. Куда не тыкни, то везде UTF-8, иногда еще win-1251

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

Однако:

┌[andreybondarenko@slackware13]─[/home/andreybondarenko/Downloads/truehackersreader-0.23]
└─13/08 09:33:14-> ./threader threader.c 
Error: invalid locale (UTF-8) found


┌[andreybondarenko@slackware13]─[/home/andreybondarenko/Downloads/truehackersreader-0.23]
└─13/08 09:33:23-> LANG=C ./threader threader.c 
Segmentation fault (core dumped)


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

Разумеется.

...

Стоп. Что то я запутался. Я беру англ UTF-8 текст и пытаюсь открыть ВАШЕЙ программой что будет ?

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

на самом деле нет:

┌[andreybondarenko@slackware13]─[/home/andreybondarenko/Downloads/truehackersreader-0.23]
└─13/08 10:11:13-> LC_ALL=C ./threader threader.c
Error: invalid locale (UTF-8) found

┌[andreybondarenko@slackware13]─[/home/andreybondarenko/Downloads/truehackersreader-0.23]
└─13/08 10:11:45-> env|grep LC_ALL

┌[andreybondarenko@slackware13]─[/home/andreybondarenko/Downloads/truehackersreader-0.23]
└─13/08 10:12:10-> env|grep LANG
LANG=en_US.UTF-8
GDM_LANG=en_US.UTF-8

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

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

Нет, с ними все в порядке. Там сегофолт, а это такой намек на чью-то косорукость.

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

Там в “brtlsqrrl” ещё прикольней: настоящие хакеры не пользуются символьными константами:

int
decdigit (int x)
{
  if ((x < 48 || x > 102) || (x > 57 && x < 97))
    return 0;
  if (x < 97)
    return x - 48;
  else
    return x - 87;
}

Здесь “10” не имеет никакого отношения к десятичной системе счисления, это код символа '\n':

	      if (c[0] == 10 && !flag10)
shdown
()
Ответ на: комментарий от shdown

Здесь «10» не имеет никакого отношения к десятичной системе счисления

А кто говорил что имеет? Здесь как раз и происходит проверка на пробел.

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

Здесь “10” не имеет никакого отношения к десятичной системе счисления, это код символа '\n':

а разве не нужно тогда все прописывать в хексе? как-то не по-хакерски... 0x08 - так должно быть.

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

Так по нему и видно. Видно, что в эту переменную читаются символы. Соответственно, в условии идёт проверка кода символа.

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

Да нихрена там не видно. Признайся, что не знал, что символьные константы можно сравнивать с int (они в Си и имеют тип int, лол).

Почему бы переменные c, p, mode, mode2, flag10 не назвать по-человечески? (Подозреваю, что потому, что не можешь в английский.)

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

Floating point

Топ кек [2], «Не всем нужна ...»

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

Всё там видно. Всё там и так по-человечески.

Предлагаю ознакомиться с кодом ядра. Вот там видно и по-человечески. У тебя говнокод в стиле первокурсника на паскале.

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

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

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

Настоящий хакер - сам редактор, ему не нужны костыли.

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

вот сделал бы utf-8=true

и не было бы столько «постов»

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

Нда, вот на этом месте шютка про «перестал пить таблеточки» перестала быть шюткой. Лол што, ради одного только просмотра текста надо ВСЕ настройки локали делать в СИ??? Да ты больной на всю голову.

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

Вы неправильно читаете тему. Товарищ стал выставлять глобальную переменную $LANG. Я же показал, что программа читает не её, а $LC_ALL. В версии 0.24 я добавил проверку переменной $LC_ALL, и при её отсутствии она теперь выставляется в значение $LANG.

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

setlocale() традиционно юзает LC_ALL

Читал ли ты man setlocale?

If locale is an empty string, "", each part of the locale that should be modified is set according to the environment variables. The details are implementation-depen‐ dent. For glibc, first (regardless of category), the environment variable LC_ALL is inspected, next the environment variable with the same name as the category (see the table above), and finally the environment variable LANG. The first existing environment variable is used. If its value is not a valid locale specification, the locale is unchanged, and setlocale() returns NULL.

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

Более того, программа и использует приведённый пример из man setlocale:

A program may be made  portable to all locales by calling:

           setlocale(LC_ALL, "");

after  program  initialization
И тут читается именно $LC_ALL. А выше в треде был пример, когда вместо $LC_ALL была выставлена $LANG. И вот тогда вызов
setlocale(LC_ALL, "");
и сегфолтился.

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