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 ★★★★★
()
Ответ на: комментарий от Shaman007

Можно подумать, что кроме логов других текстовых файлов не бывает. Документация, книги, собственные тексты,... А логи можно или продолжать less'ом читать, или можно научиться выкусывать из них конкретные куски небольшого размера.

И, да, на Raspberry Pi эта читалка шустрее less'а. Не говоря уже о том, что и на x86_64 можно быстро переключиться на любую строку и при этом, если известен её номер, не промахнуться мимо (см. выше).

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

Как тебе не жалко тратить время на настолько бессмысленные велосипеды? На распберри пи быстрее, серьезно? Это же одноплатник для прототипирования роботов и обучения, зачем там логи читать.

Кстати, не знаю ни одного хакера в обоих смыслах, которые бы так наяривали на кодировки, типа символику, экономию на спичках, гофер. Знаю их статистически значимое количество.

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

Да при чём здесь вообще логи? Я писал программу для чтения документации, книг и прочего подобного. Для Raspberry Pi я собираю Pisaahriktux и 1.5OSaahriktux на основе PiLFS'а по подобию своего десктопа на основе LFS'а с текстовой фреймбуферной консолью без иксов. Другим юзерам фреймбуферной консоли без иксов, вероятно, тоже понравится.

Ну, а основную причину, которая меня побудила написать эту программу, я уже несколько раз подчеркнул выше. less не просто тормозит. Просто с тормозами ещё можно мириться. Но, если раньше можно было делать закладки записывая номер строки получаемый через '=', а затем при повторном открытии сразу идти на эту строку и всё работало, то в последних версиях less'а что-то стало не так. Переход происходит на другую строку. А своя реализация даёт гарантию, что произойдёт переход на нужную строку.

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

Я специально почитал исходники less и твой «исходник»: у тебя весь(!) полезный функционал (комментарии? Не, не слышал):

    // prepare for actual reading
    rewind(fptr);
    rslt = NULL;
    gsize = mxcol * lcnt;
    if (cflag) {
	mxcol = COLS;
	lcnt = 1 + (int) (bcnt / COLS);
	gsize = mxcol * lcnt;
    }
    mgsize = gsize - 1;
    ltline = lcnt - LINES;
    vltline = lcnt - 1;
    mhlines = LINES / 2 - 1;
    hcols = COLS / 2;
    mlines = LINES - 1;
    mmxcolt = mxcol - 2;
    txtbuf = (unsigned char *) malloc(gsize);
    for (ii = 0; ii < gsize; ii++)
	txtbuf[ii] = ' ';
    thrwin = newwin(LINES, COLS, 0, 0);
    keypad(thrwin, TRUE);
    // actual reading
    while ((fsym = fgetc(fptr)) != EOF) {
	if (fsym == '\n') {
	    if (cflag) continue;
	    cline++;
	    csym = 0;
	    continue;
	}
	cpos = mxcol * cline + csym;
	if (tflag && fsym == '\t') {
	    if (cpos + 7 > mgsize)
		break;
	    for (ii = 0; ii < 8; ii++)
		txtbuf[cpos + ii] = ' ';
	    csym += 8;
	    continue;
	}
	if (csym < mxcol)
	    if (cpos > mgsize)
		break;
	txtbuf[cpos] = fsym;
	csym++;
	if (cflag && csym == mxcol) {
		cline++;
		csym = 0;
	}
    }

Тебе в названии надо сменить hacker на bitard.

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

Этот код только читает файл. А прочитанное нужно ещё отображать и при этом интерактивно. Так что, там 100% кода полезно, а не только этот кусок.

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

Сегодня же не 1 апреля.

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

Зачем это на главной?

Это современное искусство.

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

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

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

Вы так говорите просто потому, что у Вас другие задачи. А вот если бы Вы жили в текстовой консоли с однобайтной локалью и читали в ней документацию и книги...

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

Недавно задумывался о подобном, а тут вот так.

Годно. Спасибо.

telikan
()

Это уже перестает быть забавным.

madcore ★★★★★
()

Скриншот - кайф. Название, к сожалению, слишком произносимое.

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

А вот если бы Вы жили в текстовой консоли с однобайтной локалью и читали в ней документацию и книги...

Я бы снес это и обмазался бы холодным транзисторным UTF-8.

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

Не я понимаю застой в новостях и тащут всякую ... но всему же есть предел :(((

mx__ ★★★★★
()

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

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

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

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

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

anonymous
()

Локаль UTF-8 не поддерживается совсем. Если программа обнаружит локаль UTF-8, то её выполнение завершится ошибкой «Error: invalid locale (UTF-8) found».


найс. Значит весь полезный функционал этой программы это определялка, сконфигурировались ли локали правильно: если UTF-16 или еще говно какое типа cp1251, так работаем, а если няшный utf8 то все гут и завершаемся с ошибкой.

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

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

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

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

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

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

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

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

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

Аудитория проекта - юзеры однобайтных локалей, которые не ограничиваются KOI8-R. Тот же Antonio Diaz Diaz из проекта GNU, например, юзает ISO-8859-15.

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

комментарии? Не, не слышал

Как будто этот код будет кто-нибудь читать, кроме автора (да и в случае автора не всё так однозначно).

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

А вот если бы Вы жили в текстовой консоли с однобайтной локалью и читали в ней документацию и книги...

Что за злобный хакер заточил тебя в этой однобайтной консоли?

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

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

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

А зачем мне жить в однобайтовой текстовой консоли? Ради чего? Чтобы что? Более-менее производительные компьютеры сейчас буквально бесплатно можно добыть, сколько раз их тут раздавали.

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

Shaman007 ★★★★★
()

Это отличие позволяет True hackers' reader'у, например, читать кучу разных текстовых файлов с разных дискет в системе с одним дисководом. В то время как less заблокировал бы первую же дискету.

Какая незаменимая ф-ция особенно 2018 году когда дискеты можно увидеть исключительно в музее.

iluha16
()
Ответ на: комментарий от 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__ ★★★★★
()

True hackers' reader

начинающие хакеры скрипт-кидди не смогут использовать ее?

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

это всё не нужно только в системах работающих без монитора автоматически выполняющих какую то задачу, там некому юзать less что бы что то читать

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

Поправка: аудитории для этой поделки нет.

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