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

Единственная твоя задача - дрочить лор. В этом ты крут. В остальном - дно.

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

Именно так и вычислял тот же «МК 61».

Только вот у него был стек, потому твоя программа также вычислять не может.

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

Вы не разобрались как её юзать.

> echo " 22+ 3-=" | ./ecalc
3.000000,19.000000
>
' ' - команда на чтение в регистр X. '+' - команда прибавления к регистру Y регистра X (значение регистра X переносится в регистр Y). Дальше читаем новое значение в регистр X. Команда '-' отнимает от регистра Y значение регистра X. А команда '=' показывает значения обоих регистров.

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

От чего она не перестаёт быть RPN-калькулятором.

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

Не верно считает. Ответ «не всем нужен правильно считающий калькулятор» или «у меня своя нотация» не принимается.

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

Это каким образом там должно было получиться 9? Как это должно было выглядеть обычной записью? Разве не (3 + 2 + 1) * Z, где вместо Z одно из чисел? Просто в том регистре программы остаётся последнее число.

> echo " 1+ 2+ 3+*=" | ./ecalc
3.000000,18.000000
> echo " 1+ 3+ 2+*=" | ./ecalc
2.000000,12.000000
>

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

Это проблемы glibc'а, а исторически весь код был именно таким. Впрочем, использование int делает код более кроссплатформенным, да, поскольку на ARM'ах char по дефолту unsigned. И проверка на EOF не проходит. Поскольку в переменную вместо -1 приходит 255.

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

однозадачная OS

Не всем нужна многозадачность.

использующая максимум 1 Mb

Не всем нужно больше 1 МБ ОЗУ.

разработанная в 80-x годах

Не всем нужно жить в реальном мире.

[/sahru]

Thetan ★★★
()
Ответ на: я понял... от sqq

ты из тех, кто на асме писал музыку с визуализацией в размере 64кB в 80-х

Зачем ты так о демомейкерах.

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

Это проблемы glibc'а

Открой man getchar на фряхе и удивись. А потом прокрути ман до конца и обнаружь там такие строки:

СООТВЕТСТВИЕ СТАНДАРТАМ
       POSIX.1-2001, POSIX.1-2008, C89, C99

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

Ты в курсе, что на странице 16 Кернигана-Ричи (второй редакции) написано, что не надо так делать, у них в примере написано только для демонстрации материала и ведет к ненадежному коду?

Книга:

https://github.com/germanoa/compiladores/blob/master/doc/ebook/The C Programm...

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

ну откуда у человека может взяться такая тяга жить в 80-х годах?

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

Во-первых, это не значит, что конкретный тип возвращаемого значения взят именно из стандарта. На практике может возвращаться хоть double, главное здесь чтобы вписывался весь диапазон значений из стандарта. Во-вторых, указанные годы намекают на то, что это более поздние версии стандартов. А в 70-х и 80-х все юзали char.

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

В-третьих, не всем нужно следовать стандартам.

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

Лол, ты написал «RPN-калькулятор», но не знаешь, что такое RPN.

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

Как это «не обратная польская запись»? У МК 61 обратная польская запись. И клавиши '+' и '*' там оперируют регистрами X и Y. Как и у этой программы. У моей программы просто нет отдельного аналога клавиши 'В^' (В<стрелка вверх>), которая перекидывала значение из регистра X в регистр Y. Вместо неё, по сути, операция '+'.

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

Да пусть пишет свой код как хочет и лицензирует. Пишет он в первую очередь для себя и «open-source сообщество» скорее всего для него «прикрытие». К хакерам данный персонаж не имеет абсолютно никакого отношения. Видать у человека тяжелая судьба и обида на кого-то или на весь мир и он решил мстить таким образом.

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

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

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

Во-первых, это не значит, что конкретный тип возвращаемого значения взят именно из стандарта

То есть как это не значит? Если в стандарте приведена сигнатура (пункт 7.21.7.6) и реализация ей соответствует — то именно это и значит. Если бы не соответствовала, тогда это было бы багом. Но оно соответствует.


Во-вторых, указанные годы намекают на то, что это более поздние версии стандартов

Ты живёшь сейчас или у тебя машина времени?

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

АХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХАХА!

Извините, я не могу больше.

Это просто жопа.

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

Там обращается внимание на то, о чём я говорил выше. Если char именно unsigned, то нельзя сравнить его с EOF. Но, если char типа signed, и при этом используется только ASCII, то никакой разницы нет.

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

Если ты пишешь говнокод, то нет никакой разницы, что он не падает, когда ты им пользуешься. Он остается говнокодом.

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

Если бы не соответствовала, тогда это было бы багом

Почему тогда wchar_t в glibc'е отличается от wchar_t в винде? Это баг в винде?

Ты живёшь сейчас или у тебя машина времени?

Код был написан более десяти лет назад в соответствии с примерами из ещё более дальнего прошлого.

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

Нет, Вы ссылаетесь на конкретные объяснения, но там нет ни одной буквы про «говнокод». Там написано про сравнение с EOF.

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

твой убогий helloworld ещё и использует какой то странный синтаксис, наверное что бы непосвящённые лузеры сидящие в презренных юникодных консолях точно ничего не поняли. а не проще ли:

python -c "print(2**3.7)"
iluha16
()
Ответ на: комментарий от Shaman007

Это пример использования while и case из учебника, а не «утилита для линуксоидов», блин!

по моему пример калькулятора из 3 или 4 что ли главы K&R пофункциональней будет

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

да всем насрать и хер кто докажет что у кого то в бинарнике код из gpl

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

Нет никакого смысла вводить такие символы.

если char типа signed, и при этом используется только ASCII, то никакой разницы нет

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

мне кажется что даже учитель информатики в школе тебе скажет что надо бы что нибудь пофункциональней написать для зачёта

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