Перейти к содержимому
ProgramCrafter

IconPaint

Рекомендуемые сообщения

Мониторы в OpenComputers поддерживают только текстовый режим, но интерфейс можно сделать круче с помощью символов из Юникода.

До недавних пор символы приходилось выбирать из таблицы (https://computercraft.ru/topic/1962-shrift-v-oc/) и вручную проверять на то, подойдут ли они в интерфейс или иконку. Но сейчас я представляю вам IconPaint - программу, позволяющую интерактивно менять символы внутри иконки и сразу видеть результат!

 

Как скачать:

wget -fq https://raw.githubusercontent.com/ProgramCrafter/lua-utils/main/paint/paint.lua

Управление такое:

  1. стрелки на клавиатуре выбирают редактируемый символ (справа подсвечивается синим),
  2. backspace, цифры и буквы a-f служат для редактирования шестнадцатеричного кода символа,
  3. клик левой кнопкой мыши по палитре задаст редактируемому символу такой же цвет текста, клик правой - цвет фона,
  4. выход по Ctrl-C; проделанная работа сохраняется в файл paint.dat.

 

Пример paint.dat (осторожно, это валидный код на Lua, и при загрузке IconPaint запускает его, хоть и в ограниченном окружении):

data = {
  {0x0020, 0x2580, 0x2580, 0x2580, 0x2580, 0x2580, 0x2580, 0x0020},
  {0x0020, 0x0020, 0xE18B, 0xE146, 0xE147, 0xE18C, 0x0020, 0x0020},
  {0x0020, 0x0020, 0xE18E, 0xE149, 0xE148, 0xE18D, 0x0020, 0x0020},
  {0x0020, 0x2584, 0x2584, 0x2584, 0x2584, 0x2584, 0x2584, 0x0020}
}
overlay = {["2 3"]={16777215,2960685,2,3},["3 3"]={6684927,0,3,3},["4 3"]={16777215,6684927,4,3},["5 3"]={16777215,6684927,5,3},["7 2"]={16777215,2960685,7,2},["7 3"]={0,2960685,7,3},["3 4"]={0,2960685,3,4},["2 4"]={0,2960685,2,4},["5 4"]={0,2960685,5,4},["4 4"]={0,2960685,4,4},["7 4"]={0,2960685,7,4},["6 4"]={0,2960685,6,4},["6 1"]={0,2960685,6,1},["5 1"]={0,2960685,5,1},["4 1"]={0,2960685,4,1},["3 1"]={0,2960685,3,1},["2 1"]={0,2960685,2,1},["5 2"]={16777215,6684927,5,2},["6 2"]={6684927,0,6,2},["3 2"]={6684927,0,3,2},["4 2"]={16777215,6684927,4,2},["2 2"]={16777215,2960685,2,2},["6 3"]={6684927,0,6,3},["7 1"]={0,2960685,7,1}}

Что в планах:

  1. расширить зону для редактирования иконки (сейчас 8x4 символа),
  2. добавить вставку символов из буфера обмена.

 

Скриншот под спойлером:

Скрытый текст

paint.png

Изменено пользователем ProgramCrafter
Ссылка на файл Lua

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@ProgramCrafter А тут символ выбирается исключительно по его коду, или есть возможность как-то пролистать страницы с визуализацией самих символов?

 

И ещё: можешь как-то обрезать нижнюю неинформативную часть картинки с чёрным фоном?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 минут назад, eu_tomat сказал:

А тут символ выбирается исключительно по его коду

Да, пока только по коду. Включить сюда и таблицу символов можно, но это уже к переработке интерфейса.

 

9 минут назад, eu_tomat сказал:

И ещё: можешь как-то обрезать нижнюю неинформативную часть картинки с чёрным фоном?

Сделано. (Кстати, теперь программа стала поддерживать тир2 мониторы. :))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 05.08.2022 в 21:02, ProgramCrafter сказал:

Мониторы в OpenComputers поддерживают только текстовый режим, но интерфейс можно сделать круче с помощью символов из Юникода.

До недавних пор символы приходилось выбирать из таблицы (https://computercraft.ru/topic/1962-shrift-v-oc/) и вручную проверять на то, подойдут ли они в интерфейс или иконку. Но сейчас я представляю вам IconPaint - программу, позволяющую интерактивно менять символы внутри иконки и сразу видеть результат!

 

Как скачать:


wget -fq https://github.com/ProgramCrafter/lua-utils/blob/main/paint/paint.lua

Управление такое:

  1. стрелки на клавиатуре выбирают редактируемый символ (справа подсвечивается синим),
  2. backspace, цифры и буквы a-f служат для редактирования шестнадцатеричного кода символа,
  3. клик левой кнопкой мыши по палитре задаст редактируемому символу такой же цвет текста, клик правой - цвет фона,
  4. выход по Ctrl-C; проделанная работа сохраняется в файл paint.dat.

 

Пример paint.dat (осторожно, это валидный код на Lua, и при загрузке IconPaint запускает его, хоть и в ограниченном окружении):


data = {
  {0x0020, 0x2580, 0x2580, 0x2580, 0x2580, 0x2580, 0x2580, 0x0020},
  {0x0020, 0x0020, 0xE18B, 0xE146, 0xE147, 0xE18C, 0x0020, 0x0020},
  {0x0020, 0x0020, 0xE18E, 0xE149, 0xE148, 0xE18D, 0x0020, 0x0020},
  {0x0020, 0x2584, 0x2584, 0x2584, 0x2584, 0x2584, 0x2584, 0x0020}
}
overlay = {["2 3"]={16777215,2960685,2,3},["3 3"]={6684927,0,3,3},["4 3"]={16777215,6684927,4,3},["5 3"]={16777215,6684927,5,3},["7 2"]={16777215,2960685,7,2},["7 3"]={0,2960685,7,3},["3 4"]={0,2960685,3,4},["2 4"]={0,2960685,2,4},["5 4"]={0,2960685,5,4},["4 4"]={0,2960685,4,4},["7 4"]={0,2960685,7,4},["6 4"]={0,2960685,6,4},["6 1"]={0,2960685,6,1},["5 1"]={0,2960685,5,1},["4 1"]={0,2960685,4,1},["3 1"]={0,2960685,3,1},["2 1"]={0,2960685,2,1},["5 2"]={16777215,6684927,5,2},["6 2"]={6684927,0,6,2},["3 2"]={6684927,0,3,2},["4 2"]={16777215,6684927,4,2},["2 2"]={16777215,2960685,2,2},["6 3"]={6684927,0,6,3},["7 1"]={0,2960685,7,1}}

Что в планах:

  1. расширить зону для редактирования иконки (сейчас 8x4 символа),
  2. добавить вставку символов из буфера обмена.

 

Скриншот под спойлером:

  Скрыть содержимое

paint.png

вот более "правильная" команда для установки: mkdir /usr/bin; wget https://raw.githubusercontent.com/ProgramCrafter/lua-utils/main/paint/paint.lua /usr/bin/paint.lua

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 минут назад, rootmaster сказал:

вот более "правильная" команда для установки: mkdir /usr/bin; wget https://raw.githubusercontent.com/ProgramCrafter/lua-utils/main/paint/paint.lua /usr/bin/paint.lua

И что игроку даст её использование?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, eu_tomat сказал:

И что игроку даст её использование?

прожка будет находиться в папочке usr/bin :), как по мне, так намного лучше:rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 минуты назад, rootmaster сказал:

прожка будет находиться в папочке usr/bin :), как по мне, так намного лучше:rolleyes:

 А игроку это что даст? Чем именно оно лучше? В чём преимущество предложенного тобой решения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, eu_tomat сказал:

 А игроку это что даст? Чем именно оно лучше? В чём преимущество предложенного тобой решения?

ну.. так как-то покрасившее будет:rolleyes: каноничние, и чище:), фска будет меняя загаженной)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
15 минут назад, rootmaster сказал:

ну.. так как-то покрасившее будет:rolleyes: каноничние, и чище:), фска будет меняя загаженной)

А чем не красива установка в /home? Чем она не чиста? Что даёт следование канону в данном конкретном случае?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
34 минуты назад, eu_tomat сказал:

А игроку это что даст?

Видимо, то, что ls /home не будет показывать программу, а будет показывать только созданные пользователем файлы.

 

40 минут назад, rootmaster сказал:

прожка будет находиться в папочке usr/bin

Я всё-таки предпочту давать пользователю выбор: пусть куда хочет, туда и ставит.

Если юзеру важно, куда именно прога скачается - пусть пишет

mkdir /usr/bin && cd /usr/bin

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, eu_tomat сказал:

 А игроку это что даст? Чем именно оно лучше? В чём преимущество предложенного тобой решения?

Ну наверное тем что /usr/bin есть в $PATH поэтому можно будет ее вызвать из любого места :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
16 минут назад, ProgramCrafter сказал:

Я всё-таки предпочту давать пользователю выбор: пусть куда хочет, туда и ставит.

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

 

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

 

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

 

35 минут назад, Laine_prikol сказал:

Ну наверное тем что /usr/bin есть в $PATH поэтому можно будет ее вызвать из любого места

Да, в каких-то случаях это имеет смысл. Но автор программы вряд ли предусмотрел такую возможность. Например, обсуждаемая программа пишет файл paint.dat в текущий каталог. В этом случае "вызов из любого места" как раз и может привести к замусориванию файловой системы, против которого выступал @rootmaster.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
17 часов назад, eu_tomat сказал:

Да, в каких-то случаях это имеет смысл. Но автор программы вряд ли предусмотрел такую возможность. Например, обсуждаемая программа пишет файл paint.dat в текущий каталог. В этом случае "вызов из любого места" как раз и может привести к замусориванию файловой системы, против которого выступал @rootmaster.

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

 

17 часов назад, eu_tomat сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
22 минуты назад, rootmaster сказал:

но даже если она будет лежать в home некто не мешает вызвать ее из другой папки по полному пути /home/paint.lua

В любом случае эта проблема не решается перемещением программы в каталог /usr/bin. Значит, с этой точки зрения такое решение тоже нельзя назвать более правильным. По этому критерию оно равнозначно выбранному автором программы.

 

Одним из удобств OpenOS является возможность работы, не покидая домашнего каталога. Все файлы, не имеющие отношения к операционной системе, могут находиться в каталоге /home. Пользователю обычно требуются очень веские основания для перехода в другой каталог. В этом случае пользователь знает что делает, и с какой целью. А если пользователю хватило ума не только перейти в другой каталог, но и вручную указать путь к программе, то его действие точно не случайно. И если пользователь решил, что файл paint.dat должен быть записан именно в этот каталог, то так тому и быть.

 

46 минут назад, rootmaster сказал:

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

О том и речь: это зависит от конкретной OS. OpenOS не навязывает структуру каталогов ни пользователям, ни программистам, что добавляет ей очков популярности. Программисты могут писать код "на коленке", концентрируясь на том, что им интересно в данный момент. Что непростительно во взрослых системах, может быть допустимым в детской OpenOS. Следование канонам здесь опционально, а не обязательно.

 

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На первый взгляд симпатично.

 

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

 

Если честно, с этой программой подбор подходящих псевдографических символов (путём редактирования их шестнадцатеричного кода) для меня не стал более удобен, по сравнению со стоковой программкой symbols из MineOS, которая по сути перечисляет их список. Однако удобной фичей остаётся составление из этих символов полноценного изображения. Годным дополнением для твоей проги стал бы встроенный браузер символов, наподобие той-же symbols.

 

 

Изменено пользователем Anon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 22.08.2022 в 13:49, eu_tomat сказал:

OpenOS не навязывает структуру каталогов ни пользователям, ни программистам, что добавляет ей очков популярности. Программисты могут писать код "на коленке", концентрируясь на том, что им интересно в данный момент. Что непростительно во взрослых системах, может быть допустимым в детской OpenOS. Следование канонам здесь опционально, а не обязательно.

 

Если следовать канонам иерархии файловой системы здесь опционально, то стоит ли вообще следовать каким-либо канонам, называть файлы paint.lua вместо testadasfa.lua, и вообще использовать каталог /home для их хранения? Где проходит граница между "неканоничной" файловой структурой и просто безответственным распоряжением пространства диска? 

 

Действительно, продумывать как файлы программы будут располагаться в системе - не первостепенная задача. Но когда дело доходит до распространения, уделить этому должное внимание всё же стоит. И раз уж речь зашла о канонах, думаю, очевидно, что касательно иерархии файловой системы OpenOS преследует каноны unix-подобных операционных систем. И директория для исполняемых файлов, не являющихся частью операционной системы, там тоже предусмотрена - /usr/bin. Помимо каноничности, как уже упомянул @Laine_prikol, такое размещение позволит пользователю запускать программу независимо от текущей директории. А что касается файлов, которые генерирует программа - соглашусь, что их запись в текущий каталог непредусмотрительна. Опять же, следуя канонам, достаточно создать директорию /home/.paint и записывать данные туда.

 

В 21.08.2022 в 16:00, logic сказал:

вот более "правильная" команда для установки: mkdir /usr/bin; wget https://raw.githubusercontent.com/ProgramCrafter/lua-utils/main/paint/paint.lua /usr/bin/paint.lua

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

os.execute("mkdir /usr/bin; wget https://raw.githubusercontent.com/ProgramCrafter/lua-utils/main/paint/paint.lua /usr/bin/paint.lua")

А в качестве инструкции по установке раздавать юзерам команду pastebin run XXXXXXXX :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
9 часов назад, Anon сказал:

Если следовать канонам иерархии файловой системы здесь опционально, то стоит ли вообще следовать каким-либо канонам, называть файлы paint.lua вместо testadasfa.lua, и вообще использовать каталог /home для их хранения?

Стоит, если следование канонам обеспечивает удобство. В противном оно необязательно.

 

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

 

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

 

Но в Майнкрафте готовые дистрибутивы ПО являются редкостью. Почти любая программа либо написана самостоятельно, либо самостоятельно доработана под конкретные потребности игрока. И если игроку по каким-либо причинам требуется перенести свою работу на другой компьютер, то он переносит как данные, так и программы. И самое логичное, что он делает — полностью копирует каталог /home. Полное следование канонам в этом случае будет только мешать.

 

9 часов назад, Anon сказал:

Помимо каноничности, как уже упомянул @Laine_prikol, такое размещение позволит пользователю запускать программу независимо от текущей директории.

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

 

9 часов назад, Anon сказал:

И раз уж речь зашла о канонах, думаю, очевидно, что касательно иерархии файловой системы OpenOS преследует каноны unix-подобных операционных систем.

Разве я против этого? Майнкрафт по сути является песочницей, благодаря чему каждый волен самостоятельно выбрать, в чём будет заключаться именно его игра. При желании можно играть и в каноны Unix тоже. Для разработчиков операционных систем это становится практически обязанностью. Но при этом другие игроки имеют право играть в совсем другие каноны. Особенно авторы программ, состоящих из единственного файлика, вроде обсуждаемой в этой теме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...