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)

Ответ на: комментарий от KivApple

Ну так я делал программу для серьёзного практического применения, а не для баловства с пустыми файлами. Но, теперь добавил и это: http://saahriktu.org/downloads/truehackersreader-0.24.tar.lzma

curl gopher://sdf.org/9/users/saahriktu/saahriktu.org/truehackersreader-0.24.tar.lzma > truehackersreader-0.24.tar.lzma

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

Когда исправите поддержку UTF-8? На большей части современных десктопов эта программа не запускается.

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

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

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

sqq
()

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

Не внушаить. Хотя бы винт еретика форматировала штоле.

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

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

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

Это не баг, а фича. Тут одно из 2-х. Либо для программы одно знакоместо типа unsigned char (а этого недостаточно для юникода), либо wchar_t (а это уже приведёт к лишнему расходу оперативки при однобайтных локалях). При этом со строками разных типов нужно работать разными функциями.

Конечно, можно добавить кучу конструкций

if (юникод){
}
else {
}
или даже сделать модульную программу с разными подсистемами. Но, можно и не делать так.

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

У меня на похожей железке (только 2Gb ram и 32gb emmc и с гигабитом, но в ту же цену) *elec крутится, андроид я не смог терпеть на приставке.

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

ТС — это то самое, из за чего ни в чём неповинных честных пользователей линакса обзывают ************.

Если «ни в чём неповинные честные пользователи линакса» начинают прислушиваться к мнению гопников, таких «честных пользователей» уже становится не очень жалко.

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

Это теперь зашквар, да? Впрочем, выше по треду уже объяснили, что у ТС своя сборка на базе LFS.

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

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

Ну это по школо-какерски. Надо в фоне все файлы в koi8r перегонять.

Deleted
()

Кто-то живёт в квартире, а кто-то в однобайтном манямирке.

Если программа обнаружит локаль KOI8-R, то в окне справки (вызывается по F1) появится надпись «Привет KOI8-R'щикам!». При другой однобайтной локали эта надпись будет отсутствовать.

А вот и основная цель написания приложения - передавать приветы в Нижние Калачи, как в той передаче с барабаном и огурцами.

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

А как по мне так пофиг, на чём запускать kodi. Зато безвентиляторный.

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

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

Я вот тоже не вижу ничего плохого в этом. Я вижу плохое в том, чтобы тащить это на всеобщее обозрение.

Обсуждайте такое в толксах.

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

походу ты любишь минимализм.

Сделал бы реально полезное дело. Портанул бы Minix3 на risc-v архитектуру.

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

Ждём новой новости на глагне?

Тряхнул башем:

#!/bin/bash
if [ -z $1 ]
then
        echo "Returns non-error if FILENAME is empty"
        echo "USAGE:"
        echo `basename "$0"` 'FILENAME'
        exit 2
fi      
if [ -s $1 ]
then
        echo "File is NOT empty"
        exit 1
fi
echo "File is empty"
exit 0
Не благодари.

UPD: написано с любовью, в текстовой консоли и однобайтной кодировке, при помощи vim.

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

Нет, это обычные сокращения. bcnt - «byte count», mxcol - «maximum column», mmxcolt - «maximum column minus two», ltline - «last line (для перехода)»,... и т.д. Всё просто и очевидно.

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

Это жесть. У тебя, поди, и автокомплита нет? Я думал, в таком стиле с начала 90-х не пишут, как вменяемые IDE появились.

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

mmxcolt - «maximum column minus two»

Скорее, minus maximum column two. Хакер, оказывается, лиспер.

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

Может он на пособие по инвалидности живёт, кто знает

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

Пусть каждый решит для себя сам! Это ж ёпен сорс!

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

Скорее всего, будет. Функции-то стандартные.

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

У нас на работе на нем работает камин (в камине стоит экран, где крутится видео с огнем).

это следующая стадия, после резиновых женщин?

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

Наверное не все, а склонные к копрофилии

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

Плохо не то что написал, а то что выложил. В прошлый раз я его уже поймал на том он предлагал узнавать размер C-«массива» с помощь malloc_usable_size — но оказалось что объяснять ему что-то бесполезно ввиду крайней степени упоротости. Тем не менее, бить его можно и нужно, т.к. форум читают и ещё совсем юные телезрители, которые у таких как ТС могут всякого нехорошего нахвататься.

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

Так размер массива либо хранят, если для алгоритма это важно, либо, в случае рандомного буфера/хранилища, пытаются узнать сколько туда вообще влезет, и malloc_usable_size() как раз и возвращает корректное для последнего случая значение.

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

а чем отличается ru_RU.UTF-8 от en_US.UTF-8. вот у меня echo $LANG пичатает en_US.UTF-8 но русские буквы нормально отображаются без проблем.

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

«ни в чём неповинные честные пользователи линакса» начинают прислушиваться к мнению гопников

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

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

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

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

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