LINUX.ORG.RU

Сообщения unDEFER

 

Рисуем хорька в гексагональной графике

Прошло 3 недели с тех пор как я писал о создании конвертора гексагональной графики:

Гексогональные пиксели и детальная документация

И вот теперь уже готов примитивный редактор. В нём реализовано клавиатурное управление, единственный инструмент — перо, палитра, выбор цвета, редактор масок субпиксельной информации и синхронизации курсора с референсным изображением.

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

Про главного героя фото. Хорёк у нас появился в сентябре. Снимок, собственно, тогда же и сделан. Сейчас он значительно подрос. Научился выбираться из клетки и теперь его в неё не загонишь. Зверёк очень шустрый, грызёт руки или ноги — до чего дотянется. В отличии от кошек его очень трудно выдворить, например, за дверь. Как только он приземляется на ноги, он практически без задержек устремляется назад в комнату и закрыть дверь не всегда успеваешь. Для тех, кто не в курсе. Есть выражение «спать как хорёк», так как же спит хорёк? Не всегда но иногда хорёк впадает в такой сон, что его не возможно разбудить. Он словно неживой. Его можно как угодно брать, перекладывать и творить с ним всё, что угодно, ему абсолютно по барабану.

Репозиторий проекта

Проект детально документирован. как и hexpict.

>>> Просмотр (1366x768, 622 Kb)

 , , ,

unDEFER
()

Разработка Neparsy - языка представления результатов парсинга

Здравствуйте!

Хочу представить на обозрение результаты месяца разработок, а именно язык представления результатов парсинга Neparsy.

Парсинг — это первый этап компиляции любого языка программирования, преобразование текста программы в синтаксическое дерево. После разбора в такое дерево у компилятора ещё много дел: провести семантический анализ, оптимизации, преобразование в ассемблер/машинный код. Идея разбить создание компилятора на несколько частей не нова: компиляторы LLVM состоят из фронтенда, компилирующего язык в универсальный ассемблер некого обобщённого процессора, и бекэнда, производящего оптимизации и преобразование в код целевой архитектуры. Neparsy пытается подойти к задаче с обратной стороны и облегчить разработку именно фронтенда. Он создаёт новый слой абстракции где парсинг уже произведен. Внутри такого слоя облегчается задача трансляции между языками. Разновидности языка Neparsy для представления результатов парсинга различных языков программирования называются диалектами. Например, разрабатываемый в настоящее время диалект для языка D обозначается Neparsy:D.

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

Язык Neparsy имеет очень простой для парсинга Lisp-подобный синтаксис (менее 200 строчек для парсера, для сравнения парсер языка C на bison занимает около 3000 строк).

Вкратце суть Neparsy на примере вызова функции и ещё одной постфиксной функции выглядит так:

(function arg1 arg2 arg3).(postfix-function arg1 arg2)

Помимо этого он имеет одну хитрость:

(func (. arg1 arg2).multi-postfix)

Что аналогично навешиванию постфиксной функции сразу на несколько аргументов, т.е.:

(func arg1.multi-postfix arg2.multi-postfix)

Помимо названия функции или оператора в начале скобки указывается тип через # и метка через @:

(*#unary@label pointer)

Язык не вводит собственных ключевых слов, а использует для этого #типы. Например:

(#. str f1 (#[ 2) f2)

Означает str.f1[2].f2

(#" Литерал строки с пробелами)

А вот пример if-else-if-else конструкции:

(#if
 (условие1).(#body ветка1)
 (условие2).(#body ветка2)
 (#else).(#body else-ветка))

Neparsy также имеет оригинальное графическое представление в виде круговых диаграмм, что и представлено на скриншоте.

За месяц удалось написать:

  • Редактор круговых диаграмм, с клавиатурным управлением. Поддержка мыши — начальная.
  • Парсер кода D, того подмножества D на котором написан сам Neparsy. Причём лексический анализатор и парсер написаны (нарисованы?) непосредственно в редакторе Neparsy.

Репозиторий проекта на github: https://github.com/unDEFER/neparsy

Ветка на языке neparsy: https://github.com/unDEFER/neparsy/tree/neparsy

На скриншоте можно видеть: 4 структуры, функцию typeColor, класс Iface в котором развёрнута функция updateView, а в ней инициализацию двух переменных (большое выражение: double nr = (expr.a1 + expr.a2)/2 - 180), блок «#if», ещё одну переменную ri без инициализации, блок «#while».

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

Управление:

  • Стрелки — навигация
  • Запятая — добавить дочерний узел
  • Пробел — добавить братский узел
  • Точка — преобразовать узел в дочерний
  • Ctrl+Запятая — добавить постфиксный узел/расширить его влияние на узел влево
  • Ctrl+Точка — добавить постфиксный узел/сузить его влияние на узел вправо
  • Shift+Влево, Shift+Вправо — Переместить текущий узел влево или вправо.
  • Ctrl+Стрелки — навигация по полям (когда диаграмма полей видна внизу левой панели)
  • Del — удалить узел и всех потомков
  • Ctrl+Backspace — «отстричь» потомков
  • Ctrl+S — сохранить в формат neparsy
  • Ctrl+D — сохранить в .d-формат (@D модули)
  • Ctrl+L — сгенерировать лексический анализатор из файла описания синтаксиса (@Lexer модули)
  • Enter/Escape — выход из режима редактирования узла

Помимо трансляции между языками есть надежда, что редактор круговых диаграмм окажется удачным решением интерфейса для IDE для мобильных устройств.

>>> Просмотр (1366x768, 258 Kb)

 , neparsy, , ,

unDEFER
()

Текстовый редатор unDE

Здравствуйте!

Пишу так как с момента последнего релиза unDE прошло полгода, а я обещал новый релиз через полгода-год. Вот, скриншот-отчёт, так сказать.

На экране видим часть кода на D, реализующего миникарту в правом верхнем углу.

Подсветка синтаксиса осуществляется согласно syntax-файлам vim'а. Это позволяет поддерживать нам широкую базу синтаксисов.. Широкую да не очень.. Регулярные выражения vim'а сильно отличаются от регулярных выражений D, поэтому заточить его под напичканный какими-то хитрющими выражениями синтакс-файл Perl'а мне не очень удалось (просто я не очень старался). В Bash-е из-за того что я не осилил многострочность регулярных выражений имя функции будет подсвечено только если фигурная скобка указана на той же строке, что и имя функции. А так Java, C, C++, PHP, JavaScript, HTML вполне себе подсвечиваются.

Но подсветка синтаксиса - это так результат предпоследней недели работы.

На самом же деле основной возможностью-убийцей редактора является несомненно его система отмен. В редакторе 4 вида отмен:

1) Файловая система отмен - ту что мы видим в большинстве редакторов.

2) Глобальная система отмен - это когда вы только что из-за одной переменной начали тотальный рефакторинг кода во всех файлах и вам надо отменить все недавние изменения во всех файлах.

3) Проектная система отмена - что-то среднее между 1 и 2. Отмены ограничиваются одним проектом.

4) Локальная система отмен - это когда вы точно помните что вот в этой функции был нужный код. Выделяете функцию - нажимаете (Ctrl+Z, в будущем Ctrl+Shift+Z) и вуаля - вы видите предыдущую версию фрагмента файла, а остальная часть файла остаётся нетронутой.

Редактор вдохновлён Vim'ом, но основным режимом всё же является не командный режим, а режим вставки. А так многие горячие клавиши перекликаются с Vim'ом, например: Ctrl+V - визуальный режим. Есть желание сделать командный режим по клавише Caps Lock, чтобы не зажимать Ctrl, но пока не доходят руки.

Справа вверху находится миникарта. Это замена полосы прокрутки. А что отмечают на картах? Места боевой славы, конечно! Поэтому зелёным на карте отмечены недавние правки, жёлтым - дневной давности, оранжевым - недельной, ну а серым - месячной.

Локальные метки (те что задаются Ctrl+M <маленькая_латинская_буква>) также отмечены на миникарте (на скриншоте 2).

Чуть ниже миникарты - находится так называемый «карман», замена буферу обмена. В кармане отображено 4 места (хотя положить туда можно и больше) и управляется он всего двумя сочетаниями клавиш:

Ctrl+X - скопировать выделенное в карман, второе нажатие - удалить выделенное (фактически двойное нажатие - вырезать), третье нажатие (нажатие без выделения) - выложить из кармана.

Суть в том что кладётся всё в конец кармана, а выкладывается из начала, таким образом последовательное нажатие Ctrl-X позволяет круговым образом подставить любой фрагмент из кармана.

Ctrl+C - копировать из кармана.

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

Основная фишка - т.н. «псевдо-директории» - фиолетовые элементы. Когда в директории больше 10 файлов над ней появляется уровень псевдо-директорий, страницы директории по 10 элементов. Если элементов больше 100 - то 2 уровня псевдо-директорий и т.д.

И что ещё важно - при нажатии на любую директорию (псевдо или нет) в ней автоматически выбирается последний редактированный в ней файл как бы глубоко он не располагался. Если надо открыть саму директорию - надо кликнуть просто второй раз.

И это надо сказать удобно. И теперь я думаю как бы мне переделать мой ZUI-файловый менеджер объединив в нём преимущества ZUI-интерфейса и преимущества такой панели табов.

Так проект прошёл важную веху - наконец-то он разрабатывается сам в себе (а не в vim'е запущенном в себе).

Спасибо за внимание. Больше букв нету. Исходники в репозитории проекта. Сайт: http://unde.su

>>> Просмотр (1360x768, 65 Kb)

 

unDEFER
()

unDE 0.1.0.: Оригинальный файловый менеджер, просмотрщик текстов и изображений

Здравствуйте!

Рад представить вашему вниманию первую публичную версию проекта unDE!

На скриншоте мы видим как выглядит корневая директория в этом необычном файловом менеджере.

На самом деле по этому изображению можно очень много рассказать о файловой системе.

Например, директория bin вся покрыта квадратиками голубого, зелёного и жёлтого цветов. Из этого можно заключить что там есть только файлы и их размеры преимущественно 1Кб-1Мб.

Директория etc уже повеселее там много других директорий, а не только файлов, но все они преимущественно мелкие, все элементы в основном зелёного цвета, а значит имеют размер около 1Кб.

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

Больше букв: http://unde.sourceforge.net/ru/ch24.html

Видео с процессом работы в файловом менеджере: https://youtu.be/29zuxU9eyXo (есть субтитры)

>>> Просмотр (1076x1191, 57 Kb)

 , ,

unDEFER
()

Жизнь во Framebufer'е

Очень долгое время работал я в FVWM, и не то что конфигурацию - даже скриншот не думал менять. Браузером и почтовиком при этом служила мне Opera.
Но стоило мне начать активно использовать suspend-to-disk, (как он правильно называется я уж и не помню, так как давно настроил его на кнопку выключения питания на системном блоке) как оказалось что в Икс'вых приложениях память с течением времени куда-то убегает. Опера только на старте ест 200 Мб с моим набором не закрываемых вкладок, а памяти у меня всего 768 Мб. Кто-то скажет, что за 8 лет пора бы машине и апгрейд сделать, но я думаю что мне и самому хочется писать приложения бережно относящимся к ресурсам компьютера, а не уходить по пути растраты, который взяли большинство программ сегодня.
И начал уходить я под Новый год во Framebuffer. Directfb в Ubuntu уже был, вручную собрал XDirectFB, links с поддержкой графического режима (с выводом в directfb).
Казалось бы XDirectFB не нужен если есть X, но он обладает важным преимуществом - запускает X'сы без прав суперпользователя прямо на той консоли с которой был произведён запуск (а не на 7-й или 8-й консоли). Из минусов - почему-то падает после настройки с работой с X font server'ом при запусках приложений вроде xcalc или того же fvwm. Но разработчикам сообщено, даст Бог - исправят.

Итак теперь screen встал у меня на службу для увеличения количества консолей.
vim остался текстовым редактором.
mutt - мой новый почтовик (есть на скрине), отлично справляется с годовой почтой в 3000 сообщений на 300 Мб, быстро стартует и завершает работу. Чего не скажешь об Опере.
links - в том числе это сообщение отправлено из links в текстовом режиме. Однако, если хочется посмотреть картинки, я настроил букву «l» на запуск текущей странице в том же links но графическом, ну а если и флеш хочется видеть, то есть клавиша «k», которая запускает XDirectFB с chromium на той же странице. На скриншоте можно найти уменьшенные скрины одной из страниц LOR'а во всех трёх режимах.

Впрочем о последнем хотелось бы сказать подробнее. Дело в том, что не стартует DirectFB сам из под виртуального терминала screen. Поэтому пришлось малость изголится со скриптами, которые делают detach screen запускают нужную команду и по завершении графического приложения возвращают управление screen.
Задача скриптов этих была бы простой если бы DirectFB запускался хотя бы из произвольного скрипта, так нет максимум он запускается из скрипта запущенного командой вроде ". <имя-скрипта>".

Но зато теперь я доволен. Определившись с браузером и почтовиком я также открыл для себя просмотрщик fbi - отличная вещь, открывает картинки очень быстро, позволяет их и листать и поворачивать. И даже огромное изображение 14720x10800 открывает без лишнего шума и качественно масштабирует. На скриншоте - информация о фотографии с пингвином - это и есть скриншот fbi.

fbgs - вполне себе годный скрипт для просмотра pdf с помощью того же fbi.

mplayer - работает так как надо с опциями «mplayer -autosync 30 -fs -vo fbdev -zoom -xy 1024».

Скриншоты сделаны утилитой fbgrab.

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

Вот такая жизнь во фреймбуфере. Вот такой вот новый год.

>>> Просмотр (1024x768, 534 Kb)

 , , , ,

unDEFER
()

RSS подписка на новые темы