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

ECS

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

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

  • Посещение

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

    203

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


  1. Предложения годные, спасибо, учел в недавнем обновлении. Обнова вообще довольно жирная, кардинально меняющая принцип работы с библиотекой - все подробности в документации по ссылке выше. 

    • Метод удаления дочерних объектов имеется - object:delete()
    • Поддержка Lua 5.3 также имеется в новой версии, однако учти, что округление катастрофически снижает производительность в тяжеловесных приложениях при расчете прозрачности и подобных операциях. Поэтому я лично остаюсь на шустренькой 5.2
    • Ресайз лейаута также реализован в новой версии - layout:setGridSize(int rowCount, int columnCount)
    • Скроллинг сделаю чуть позже, а баг с экраном пофикшен, благодарочка
    Теперь что касается либ: крайне странно, что каким-то образом у тебя затронулась либа сериализации: инсталлер ее не устанавливает и никаким косвенным образом не затрагивает, да и все устанавливаемые либы имеют названия, не пересекающиеся с системными, что вдвойне удивительно.

     

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

    • Нравится 2

  2. Все-таки это не очень важно но, я уже на ютубе писал что: 160х50 точек это некорректно, разрешение монитора ОС: 160х50 Символов, а не точек. Символ в ОС вроде 8х4 точек.

     

    Ах ты ж чертов педант. Ладно, ладно, исправил хд

    • Спасибо 1

  3. Ну ты как обычно) Давно слежу за твоими прогами. Отлично делаешь!

     

    Спасибо, спасибо, приятно. К слову о проге: в конвертер добавлена поддержка более совершенного метода кодирования OCIF6, в результате чего пикчи на дисках весят в разы меньше.

    • Спасибо 1

  4. А почему нельзя просто прошить код трассирующими маркерами?

    ТО ЕСТЬ возьмём следящий поток и две функции для работы с ним:

    1. mark(*variables)  -- скопировать и отпрвить потоку переменные
    2. wait()                   -- остановка до того пока следящий поток не разрешит продолжить работу

    Вставить функцию mark во всех местах где изменяется какая-либо переменная или если есть вероятность изменения переменной

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

    В мастах, где располагаются брейкпоинты вставить wait

    И усё

     

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


  5. Небольшая обновка:

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

    3a3ef9aa69db3ec282c5e6753c1d292e.png

    • Нравится 5

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

    Я пытался получать через окружение, но так доступны только глобальные переменные. Может ты знаешь способ достучаться извне к локальным? Может какое то  локальное окружение есть?

     

    Сам с этой проблемой бился, толкового решения так и не нашел. Казалось бы, самый разумный вариант - это использовать функцию debug.getlocal для нужного уровня стека, которая недоступна в моде, либо использовать окружение в качестве аргумента к load, но, как ты и сказал, доступно лишь глобальное. Поэтому и пришлось делать выбор между двумя вариантами: либо выводить в качестве данных брейкпоинта только глобальные переменные, либо парсить выбранную строку. В качестве альтернативы можно разбить весь сырец на слова, исключив из них синтаксические - и отрисовывать жирную таблицу из всех существующих переменных с их значениями, однако загвоздка в том, что в этом случае будет получена куча переменных, которые могут быть вообще не объявлены на момент существования брейкпоинта. В общем, спорно все, спорно, надо думать.


  7.  

     

    Так брекпойнты не брекпойнты вовсе, а просто ерроры  . А если я хочу после брекпойнта продолжить выполнение?

     

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


  8. Почему в OC не сделают адекватную ошибку о том что нет места

     

    При попытке открытия файла через io.open выдается либо файловый хендл, либо false с строковой причиной невозможности открытия файла (в нашем случае "not enough space"). Это и есть "адекватная ошибка".

     

    Спасибо, загрузилось.

    Вот только в этом эмуляторе MineCode зачем то странным образом сжимает экран

    attachicon.gifMineCode.png

    и некоторые кнопки становятся недоступны.

     

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

     

    UPD: Готово, так должно быть удобнее.

     

    c5f8828d0af96ffa3df990da8f7545ef.png


  9.  

     

    P. S. на Lua 5.3, кстати, эта штука не работает.

     

    И не будет. Суть в том, что для создания прозрачности у меня используется функция блендинга цветовых каналов, впоследствии "упаковывающая" результирующие каналы в один цвет вида 0xRRGGBB. К сожалению, в Lua 5.3 бинарные операции работают исключительно с целыми числами, в то время как библиотека bit32 в Lua 5.2 поддерживает дробные. Пришлось делать выбор между увеличенной втрое скоростью отрисовки или вставкой округляющих операций с возможностью использования Lua 5.3. Я выбрал первое, не жалею.


  10. Не знаю почему, но мне не удалось установить MineCode.

    attachicon.gifMineCode1.png

    И после устранения очепятки в 65-ой строке инсталлера...

    attachicon.gifMineCode2.png

     

    Занятно. Саму синтаксическую опечатку исправил, однако причина неверной URL мне не ясна. Только что без каких-либо проблем поставил программку на абсолютно чистую опенось:

     

    b8ed012c17ed64a5e9139c1294f58a7e.jpeg

     

    Как вариант - на эмуляторе ОС иным образом работает интернет-компонент, иных причин не вижу.


  11. Реализация порадовала, мне нравится!

    Шейдерные скрипты поддерживаются? Имею в виду векторные и пиксельные шейдеры

     

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

     

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

     

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

     

    Пробовал, и не я один. Объединение компов в расчетный кластер невозможно по той лишь причине, что низкая скорость обмена данными между компами не компенсируется увеличенной производительностью. Как вариант - можно использовать постоянное TCP-соединение для пересылки информации на внешний сервер и наоборот, это будет значительно быстрее. Аналогичная ситуация с низкой скоростью передачи возникает через обработку информации на внешнем сервере.

     

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


  12. Эпично, конечно опенкомутерс не предназначен для таких вещей

     

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


  13. Самое главное-то забыл упомянуть. По сути каждая библиотека - это банальный массив, который возвращается после исполнения файла. А любая функция, загружающая файлы, будь то require, load или dofile, преобразует содержимое файла в самую обычную функцию и исполняет ее, а из этой функции идет возврат содержимого библиотеки. Это очень тонкий момент, который крайне необходим для понимания сути Lua. А то делаем всякие return'ы, а новички не понимают, для чего оно надо.

     

    Также стоит добавить, что функция require("имяЛибы") постоянно хранит загруженную библиотеку в package.loaded.имяЛибы. То есть если ты изменишь исходник библиотеки, то изменения не вступят в силу до перезагрузки компьютера, либо до принудительного присвоения package.loaded.имяЛибы = nil. Это далеко не всегда удобно, и лично я предпочитаю использовать классический load().

     

    Кроме того, вовсе необязательно хранить библиотеку в указанных Neo директориях. Я свободный человек, и могу закидывать свои файлы куда пожелаю, а функция require() поддерживает любой указанный путь. А если файл из указанного пути не найден - она начнет искать его в стандартных путях для библиотек.

    • Нравится 6

  14. В описание добавлены новые и не указанные ранее методы:

     

     

     

     

    buffer.start)

     

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

     

    buffer.setDrawLimit( int x, int y, int ширина, int высота )

     

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

     

    buffer.resetDrawLimit( )

     

    Убирает ограничивающую зону, если она была установлена ранее.

     

    buffer.clearint цвет )

     

    Заполняет экран указанным цветом, вызывает метод square(). Функция сделана исключительно для удобства.

     

    buffer.buttonint x, int y, int ширина, int высота, int цвет кнопки, int цвет текста кнопки, string текст ): table координаты кнопки

     

    Рисует на экране кнопку, автоматически размещая указанный текст по ее центру. Возвращает координаты начала и конца кнопки в массиве вида { x, y, x2, y2 }

     

    buffer.adaptiveButtonint x, int y, int отступ по ширине, int отступ по высоте, int цвет кнопки, int цвет текста кнопки, string текст ): table координаты кнопки

     

    Рисует на экране кнопку, автоматически рассчитывая ее размеры в зависимости от указанных отступов и длины текста. Возвращает координаты начала и конца кнопки в массиве вида { x, y, x2, y2 }

     

    buffer.scrollBarint x, int y, int ширина, int высота, int количество элементов, int текущий элемент,  int цвет фона,  int цвет пимпочки )

     

    Рисует на экране вертикальную полосу прокрутки. Под количеством элементов подразумевается, к примеру, количество строк в файле, а под текущим элементом текущая строка, с которой идет отображение файла.

     

    buffer.horizontalScrollBarint x, int y, int ширина, int количество элементов, int текущий элемент,  int цвет фона,  int цвет пимпочки )

     

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

     


  15. Большое обновление:

    • Программа полностью переведена на систему двойного буфера и библиотеку image, скорость отрисовки увеличена в 15 - 20 раз
    • Добавлена поддержка нового метода кодирования изображений, суммарный объем файла при сохранении уменьшен в 1.8 - 6.2 раза в зависимости от количества цветов. Ниже представлены два одинаковых изображения, созданных с новым и старым методами кодирования:

               170e2cbe456a700b44bea88c1f7ecc11.png 8d06e9d694e97d4f0b60f132f7b0bc23.png

    • Добавлены функции обрезки, расширения (изменения размера холста), поворота и отражения изображений:

               99fedf93e8299e4ee3d47cb4a284ddf6.png 5efc423b6062f640d8bfbc9754885d7e.png

    • Добавлены функции работы с цветом: цветовой тон/насыщенность, цветовой баланс, фотофильтр:

               f6b66a6f7725e90e85f30dff9b516960.png 6c3b595868d80e82ef12f822c921b1a2.png 6118e8bcd6c42edd0b004e8378fc177e.png

    • Добавлено центрирование изображения при создании нового файла или открытии существующего:

               f133b20bb50888ee38156727db2bc628.png


  16. Небольшое, но крайне емкое обновление:

    • Увеличена скорость отрисовки в 1.5 - 2 раза посредством добавления третьего промежуточного буфера
    • Уменьшено количество обращений к CPU, уменьшено число операций сложения/вычитания
    • Улучшена система конвертации индексов
    • Добавлено больше благодарных комментариев в коде, славящих @Krutoy за помощь в разработке.

    Ну, и, собственно, демонстрация скорости работы:

     

    http://www.youtube.com/watch?v=HrIA9kMjQvg

    • Нравится 7

  17. Небольшой апдейт:

    • Добавлена возможность не подключать проектор и работать только с GUI
    • Добавлена возможность быстрого открытия модели через 3DPrint.lua open <путь к модели>
    • Добавлена поддержка формата .3dm в MineOS:

               9c787686db49fa2d0613c65696c01a81.png

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

              fa39c58c1415307e6d042fd85edd252e.png c5f3566ecc44c61b150bcd87462dce5b.png

    • Добавлена возможность выбора количества блоков для печати:

              94687754395ee63d7a9da36573dc122c.png 48a181eea989bb72fb6ab91041fa2b59.png

    • Добавлена возможность выставлять "отступ" проекции по трем осям, чтобы сам проектор можно было спрятать под полом:

             30b8ddabd7497b3854978898550003d9.png  eedcdbfaa5446c82b4c59c64617da16e.png

    • Нравится 3

  18. 3DPrint и print3d (от сангара) печатают модели по-разному. Например, кресло от Krutoy в 3DPrint печатается поваленным набок.

     

    Известный бажок, фиксим, спасибо.

     

    Файлы с русскими буквами не открываются: программа ругается на неизвестный формат.

     

    Хрен с ними, нечего именовать по-русски. Ишь ты, патриот выискался! 

     

    Крешится на процессоре с архитектурой lua 5.3

     

    Видимо, в 5.3 выпилили библиотеку bit32, надо будет добавить ее принудительную загрузку с гита, годное замечание.

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