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

ECS

Гуру
  • Публикации

    533
  • Зарегистрирован

  • Посещение

  • Победитель дней

    203

Сообщения, опубликованные пользователем ECS


  1. Это наш злой критик. Он все разработки игроков называет ничтожеством и все пытается показать, что он круче и умнее здесь всех в программинге :-)

     

    И ведь в каждом микросоциуме такой индивид найдется! Печаль-беда.

     

    Elite Club Sessions, вы мне не нравилась одним — вы не рассказываете о людях, которые писали код вместе с вами. Например ваша ось? Вы не написали в темечто написали эту ось вместе с друзьями.

     

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


  2.  

     

    Вам не надоело?
     

     

    Ну, это зависит от того, что подразумевается под термином "надоедание". Не надоело выкладывать программы на данный форум? Не надоело выкладывать софт, который и так уже имеется в схожих исполнениях? Нет и нет. Да и вообще, LeshaInc, сколько уже просматриваю тут различные топики - почти ни разу не увидел теплого или хотя бы нейтрального словечка от тебя. Как-то неприятно  ;)

    • Нравится 3

  3. 18f840c2c2e2ea683ed391efdd9ef222.png

     

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

     

    Команда для загрузки:

    pastebin run HztSLLPT
    

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

     

    d0ab96f749387d37b384fef5994c3e07.png

     

    При вводе верного пароля компонент redstone будет излучать сигнал сверху, а при вводе неправильного - снизу.

     

    9af822e8941fd5f6101e7108b5502d59.png

     

    Аналогичным образом работает "биометрическая" защита - после первого успешного ввода пароля ваш ник будет занесе в базу данных, и впоследствии вы будете иметь доступ к сканеру отпечатка пальца (квадратная зона справа от клавиш)

    • Нравится 5

  4. de717f65a1e9e22ea2ebde65c70b010e.png
     
    Хочу поделиться с вами редактором изображений, созданным мной и моим товарищем. Изначально в OpenComputers отсутствует такое понятие, как изображение - поэтому мы решили создать собственный графический формат, а также удобный редактор под него.

    Ссылка на загрузку:

    pastebin run WYrTnmPx

    После загрузки запускайте файл Photoshop.lua.

     

    Начало работы:

     

     

    При старте программы или по нажатию контекстного меню Файл - Новый вам будет предложено создать новый файл c указанными шириной и высотой.
     
    e9c667d619c09469277d9e75311ca7ac.png
     
    В левой части редактора располагается панель инструментов, в верхней - меню и тулбар с параметрами кисти. В левом нижнем углу имеются иконки цветов - вы можете выбрать любой цвет в удобной HSB-палитре. Каждое поле в палитре доступно для ввода данных, так что можете спокойно работать с RGB-цветами, если вам угодно.
     
    a895cdb856047b4f2101436b7846aac2.png

     

     

     

    Инструменты:

     

     

     

    У вас имеется несколько инструментов на выбор. С помощью кисти осуществляется основное взаимодействие с изображением. Например, с ее помощью мы можем нарисовать такую вот рожицу:
     
    f0c8a34015f3e3d193e5539cea482c70.png
     
    Вы также можете изменять размер и прозрачность кисти с помощью правого клика на зоне рисования или же на верхнем тулбаре. Размер варьируется от 1 до 10, а прозрачность от 0 до 255.
     
    e475829b4a5a61bc492759f0e8015ca2.png
     
    Работу системы прозрачности можно легко понять, рисуя крупной кистью с прозрачностью около 140.
     
    e80aa2159d2546e7952d386cc43c0db0.png
     
    Инструмент ластик действует точно так же, как и кисть, разве что он удаляет пиксели с экрана. 
     
    44b3f475c63985a3e5a85ee4b884a319.png
     
    Инструмент заливка позволяет закрашивать большие области изображения с учетом содержимого. Давайте раскрасим нашу рожицу!
     
    0dcd0c1bc53ad5577831616b8b2a5160.png
     
    Также крайне интересен инструмент Текст - он позволяет вам делать любые надписи на изображении с помощью клавиатуры. Цветом текста будет являться первичный цвет из нижнего левого угла экрана. В данном инструменте также есть поддержка буфера обмена - так что вы можете вставлять некие особые символы или большие участки текста, если вам угодно.
     
    a4ed1f11adc825d925903285dd8049f8.png

     

     

     

     

    Фильтры:

     

     

    В данном редакторе есть несколько фильтров для работы с готовым изображением. Нажимаем на вернее меню Изображение и видим список:
     
    06b5be1a20dd791df24eb4d792cc2dc7.png
     
    По нажатию на Отразить по горизонтали наше изображение трансформируется в это:
     
    3e9fafe47164de59a7179d5685be7f21.png
     
    Аналогичным образом работает и Отразить по вертикали. Если вы хотите инвертировать цвета - нажмите соответствующую кнопку и получите результат.
     
    9dced41627100d519ddce0b2ee530380.png
     
    Ну, и напоследок можно наложить Черно-белый фильтр на нашу рожицу.
     
    1a7ccdd2525b2ac8c99487d5cc2c5217.png
     

     

     

    Сохранение и загрузка файлов:

     

     

     

    При нажатии кнопки Файл - Сохранить как вам будет предложено сохранить файл с указанным именем и методом кодирвания. Рекомендую использовать метод OCIF4 для экономии места на диске, RAW полезен для дебага, он максимально понятен пользователю, но не имеет алгоритмов сжатия информации.
     
    765dfb5c9b39cd62cb5969e83ca58a10.png
     
    При нажатии кнопки Файл - Открыть вам будет предложено ввести путь к ранее сохраненному файлу в одном из поддерживаемых форматов (.pic или реальный .png)
     
    9722a205379e9b230afcd3a1367c043c.png
     

     

     

    Сочетания клавиш:

     

    • B - выбрать инструмент Кисть
    • E - выбрать инструмент Ластик
    • G - выбрать инструмент Заливка
    • T - выбрать инструмент Текст
    • D - установить первичный цвет как черный, а вторичный как белый
    • X - поменять цвета местами
    • Стрелки - переместить изображение на экране
    • Пробел - перерисовать изображение из памяти

     

     

     

    Отрисовка сохраненных изображений в других программах:

     

     

     

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

    --Подключаем библиотеку
    local image = require("image")
    
    --Загрузка изображения по указанному пути. Путь к моей картинке - "Sample.pic"
    local myPicture = image.load("Sample.pic")
    
    --Отрисовка изображения на позиции x = 2, y = 2
    image.draw(2, 2, myPicture)
    

    И тут же на экране отобразится наша картинка!
     
    0f39b19dd4d17a60afb7257356095dd8.png

     

    Для демонстрации возможностей этой библиотеки проще всего представить скриншот моей "ОС", где каждая иконка и обои рабочего стола - это изображение в формате .pic:

     

    157d94d7153e999a44fda627a3e9a708.png

     

     

     

     

    Ну, и напоследок не забудем показать всех трудившихся над этим проектом:
     
    56c7efb84c906775190246029c24080f.png

    • Нравится 9

  5. К слову, в теории календарик автоматически определяет текущую дату методом конвертации UNIX-времени, используя os.date(). Однако выяснилось, что месяц и день данная функция выдает некорректно, скриншот ниже. Если кто-либо знает, как пофиксить данный баг - буду крайне признателен за помощь.

     

    a3631b2dd0dc25eb13b4cf3af4af77d3.png

     

    А должно быть:

     

    b74a4fb202de552de65a787741d684fc.png


  6. 89a7bc7e4da158b01c82b052f9779138.png

     

    На днях вспоминал, как в давние школьные годы на олимпиаде нас заставляли писать программу-календарь. Захотелось окунуться в прошлое и сделать нечто подобное на OpenComputers.

     

    Команды для загрузки:

    wget https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/ECSAPI.lua lib/ECSAPI.lua -f
    
    wget https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/Calendar/Calendar.lua Calendar.lua -f

    Для работы этой программе требуется моя библиотека с основными функциями, поэтому ее загрузка в первой строке обязательна. Также ей необходимы монитор и видеокарта 3 уровня.

    • Нравится 4

  7. Похоже, я на подсознательном уровне понимал, что это возможно, но не мог объяснить =)) 

     

    Кстати, знаешь, какие костыли мы придумываем, чтобы сделать  адекватную трансляцию 0xffffff -> 0xff? Кошмар какой-то - начинали с генерации 8-битной палитры и заканчиваем какими-то совершенно безумными формулами :D

     

    Вот примерчик:

     

    85b8f57323cdd05b5fdfba050d7c0d5f.jpg


  8.  

     

    Если она модульная — то мы можем легко загружать и использовать кастомные модули. Где этот функционал, в чем заключается модульность?

     

    Если либа модульная - это означает, что она имеет несколько готовых модулей (компонентов, элементов, пресетов, объектов) и возможность их подключения по желанию. Создание и подключение кастомных модулей никак не подразумевается термином "модуль". Давайте не будем заниматься казуистикой и построчно выискивать причины для критики каждой софтины  ;)

    • Нравится 1

  9.  

     

    А я forms использую для всего, и для замены, и для новых проектов)

     

    Так используй, запрещает кто-то что ли? Можно и в универ, находящийся в 50 метрах от дома, ехать через северо-запад, это уже вопрос личностных привычек и предпочтений. Зачем оффтопить-то? хд

    • Нравится 3

  10. Перечисли преимущества по сравнению с forms, по исходному коду я пока не вижу

     

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

     

    Forms - серьезная либа, предназначенная для создания основы Window-based программ, данная же либа создавалась с целью встраивания в готовый софт, дабы упростить его.

     

    А насчет "лишнего кода" - убрал, ибо действительно глаза мозолило.

    • Нравится 2

  11.  

     

    Не понял назначения параметра limit. По моему ничего он там не ограничивает.

     

    Это аналог string:sub() по сути. Если строка имеет 1000 символов, то логично, что ее нужно обрезать по ширине экрана, чтобы не рисовался лишний кал и не нагружался gpu. Limit этим и занимается. И не нужно писать "по-моему" - мне, как автору либы, лучше знать, ограничивает данный аргумент что-то или нет. Насчет обрезки слева - да, сделаю в ближайшем времени, спасибо ;)


  12. Не совсем понял для чего использовать библиотеку отдельно

     

    Для сторонних программ, разумеется. Меня стандартный Edit не устраивает ни коим образом, буду допиливать свою среду разработки. А помимо этой среды подсветку буду юзать в предпросмотре файлов в клиенте Pastebin - то есть мы уже имеем как минимум две программы, где потребуется данная либа. Не дублировать же один и тот же код в каждой из них, верно?  :D

     

    В циклах используй кеширование функций для unicode.find,

     

    А вот за это большое спасибо, люблю конструктив. Сейчас потестирую быстродействие. 

     


     

    UPD: прироста скорости не заметил вовсе. Если она и возросла, то визуально это не подтвердилось.

    • Нравится 1

  13. 6e2c59edf4ca9eaf03cfae2b07b2b5a4.png

     

    Вступление:

    Решил я на днях написать хорошую IDE для OpenComputers и столкнулся с тем, что в ванильной OpenOS

    напрочь отсутствует подсветка синтаксиса. Надо это исправить!

     

    Если найдутся какие-либо недочеты в плане правильности подсветки - пишите, пофиксим.

     

    Скачать библиотеку:

    https://github.com/IgorTimofeev/MineOS/blob/2967e780d35c2e4363dd7fe81de5ba78310c3d55/lib/oldSyntax.lua

     

    Инструкция по использованию:

    --Подключаем библиотеку
      local syntax = require("syntax")
    
    --Создаем любую строку с операторами lua
      local stroka = "while true do print(\"Hello world!\")"
    
    --x, y - стартовые координаты отрисовки текста.
    --limit - ограничение отрисовки по ширине строки. Зачем рисовать лишние пиксели? 
      local x, y, limit = 2, 2, 20
    
    --Выводим строку на экран в подсвеченном варианте
      syntax.highlightAndDraw(x, y, limit, stroka)

    На экране отобразится следующее:

     

    4c5c4b4dd2c8c3e259f16e9a8b232ac0.png

     

     

    Другие функции:

     

    ● syntax.setColorScheme(цветовая схема)
       Устанавливает цветовую схему по выбору пользователя.

       На данный момент есть лишь две схемы: "midnight" и "sunrise".
     

    ● syntax.highlightFileForDebug(путь к файлу [,цветовая схема])

       Открывает обычный файл по указанному пути и выводит его содержимое

       в подсвеченном виде на экран. Размер содержимого ограничен размером экрана.

       Пример использования этой функции предоставлен на самом первом скриношоте.

     

    Насчет оптимизации и ускорения:

     

    Я постарался минимизировать задержки в выполнении скрипта различными путями.

    Во-первых, отрисовка выполняется не попиксельно, а построчно. То есть если мы имеем строку красного цвета,

    то функция отрисовки выведет на экран сразу всю строку, а не каждый символ по отдельности.

    Во-вторых, цвет текста изменяется только тогда, когда это необходимо, а не каждый раз при смене символов.

     

    На данный момент у программы есть существенный минус: при отрисовке выполняется поиск совпадений шаблонов

    по строке через оператор string.find(), однако изначально он не дружит с юникодом. Поэтому пришлось использовать

    костыль unicode.find(), существенно замедляющий процесс поиска. Если у кого-то имеется более оптимизированный

    костыль или способ поиска по юникоду, буду крайне благодарен за помощь в этом деле.

     

    Для ясности прикладываю видосик:

     

    http://www.youtube.com/watch?v=T-f8jGdYO0M&feature=youtu.be

     

    Исходный код unicode.find():

    function unicode.find(str, pattern, init, plain)
    	if init then
    		if init < 0 then
    			init = -#unicode.sub(str,init)
    		elseif init > 0 then
    			init = #unicode.sub(str,1,init-1)+1
    		end
    	end
    	a, b = string.find(str, pattern, init, plain)
    	if a then
    		local ap,bp = str:sub(1,a-1), str:sub(a,b)
    		a = unicode.len(ap)+1
    		b = a + unicode.len(bp)-1
    		return a,b
    	else
    		return a
    	end
    end
    
    • Нравится 7
×
×
  • Создать...