LINUX.ORG.RU

Метапрог-прототип, версия 6 + будильник на Метапроге

 , ,


1

3

Наконец-то настало время для первой прикладной программы на Метапроге - будильника. Чтобы правильно его собрать, нужна последняя версия прототипа Метапрога. Архив включает в себя исходные диагарммы на LabVIEW и скомпилированные exe, которые можно запустить под Wine на линуксе, читайте инструкции из архива с названием вашего языка. Скачать:

https://www24.zippyshare.com/v/xEn1RKAG/file.html

Основная причина выпуска 6 версии - исправление бага с жесткими последовательностями, ведущими к началу цикла. Это исправление вряд ли окончательное, но для трансляции диагарммы будильника сойдет. Если после транслятора из 5 версии прототипа Метапрога сообщение о времени будильника выводилось в цикле каждый раз, то тут - только один раз, в самом начале:

https://i.postimg.cc/QM43XMjf/image.png

Также проект может похвастаться тем, что функцию проигрывания звукового файла в своей основе сделал insw, успешно разобравшись с функционалом прототипа Метапрога. Я лишь добавил дебаги с условными разветвлениями (аналог if...else) и жесткими последовательностями. В получаемом из транслятора сишном коде это выглядит как множество вложенных друг в друга if...else. Проигрывание звука:

https://i.postimg.cc/d0d2FhRY/image.png

Сишная трансляция диаграммы будильника (не забудьте sound.wav!):

https://pastebin.com/YAd4J1SN

Почему будильник на константах? С графическим вводом значений пока проблемы: всплыли новые баги с «умными массивами». Исправление будет в будущих версиях. Но в этой версии исправлено несколько других багов: теперь не должно быть проблем с заданием типа массива и индикаторы прогресса закрываются сами после завершения операции.

Переворот массива

Наконец-то удалось первернуть массив из байтов. Для этого пришлось повозиться с диаграммами транслятора-кодогенератора. В 6 версии прототипа Метапрога эта диагармма уже корректно не оттранслируется, планирую выпуск 7 версии, но надо еще поработать над массивами.

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

https://postimg.cc/RJMKXyTB

Если все же что-то неясно - не стесняйтесь спрашивать. Полученный код:

https://pastebin.com/UsY0TZvc

Предыдущая версия:

Метапрог-прототип, версия 5



Последнее исправление: metaprog (всего исправлений: 2)
Ответ на: комментарий от metaprog

Засада в том, что почему-то nkc_shutdown (содержащий SDL_Quit) при следующем открытии окошка не полностью уравновешивается nkc_init. Почему?

Ну либо ты опять где-то накосячил, либо автор Nuklear+, либо котечка, когда пытался «улучшить» Nuklear+.

Вообще, зачем init и shutdown вызывать несколько раз? Тут глянул примеры: при старте приложения init, по завершению shutdown. Никаких многократных вызовов.

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

Ну либо ты опять где-то накосячил, либо автор Nuklear+, либо котечка, когда пытался «улучшить» Nuklear+.

Котечка ничего не менял, я тоже, так что косяки именно в Nuklear+. И если в Nuklear+ есть функции с косяками - я предпочту переделать их на Метапроге.

Вообще, зачем init и shutdown вызывать несколько раз? Тут глянул примеры: при старте приложения init, по завершению shutdown. Никаких многократных вызовов.

Чтобы открывать и закрывать кучу разных окошек. Открыл одно, нажал на кнопку - открылось другое и так далее. Судя по всему, надо будет переделать nkc_init, только уже на Метапроге.

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

так что косяки именно в Nuklear+

Нет.

Чтобы открывать и закрывать кучу разных окошек.

Эта библиотека не предполагает такого: одно окно для всего приложения (холст), все остальные «окна» «рисуются» на этом холсте средствами библиотеки. Посмотри скриншоты примеров нуклеара, посмотри, как сделан интерфейс Blender 3D.

Но, если очень хочется, то можно. Но тебе придется изрядно перелопатить код нуклеара и создать пару функции для создания окон ОС (типа nk_create_window – захватываем ресурс) и для обработки события закрытия окна (типа nk_free_window – освобождаем ресурс).

То, что ты сделал сейчас (многократный вызов init), 99.9% ведет к утечке памяти.

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

То, что ты сделал сейчас (многократный вызов init), 99.9% ведет к утечке памяти.

Боюсь он не знает что это.

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

Можешь посмотреть уточнить? Мне почему-то кажется что нет, раз nkc_init не уравновешивает SDL_Quit из nkc_shutdown. Или дело не в этом?

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

Мне почему-то кажется что нет, раз nkc_init не уравновешивает SDL_Quit из nkc_shutdown

Все там нормально. А слабо в исходники самому заглянуть?

Или дело не в этом?

Повторяю для прапорщиков.

Use this function to clean up all initialized subsystems.

SDL_Quit() освобождает все и для всего, дальше ни в одном из созданных окон у тебя больше события не обрабатываются, окна не перерисовываются.

cluge
()
Ответ на: комментарий от AntonI

Боюсь он не знает что это.

Да ничего страшного, просто в интерактивной обучалке будет урок о том, что метапрогу надо перезапускать раз в час. И все, проблема решена.

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

Все ещё проще, если метапрога зависла - ребутни компьютер. Если метапрога зависла не досчитав - добавь памяти.

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

А слабо в исходники самому заглянуть?

Слабо. Мне и так есть что делать, а Котечки пока что нет.

SDL_Quit() освобождает все и для всего, дальше ни в одном из созданных окон у тебя больше события не обрабатываются, окна не перерисовываются.

Чем его уравновесить?

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

Чем его уравновесить?

Ничем. Еще раз внимательно читай: Метапрог-прототип, версия 6 + будильник на Метапроге (комментарий)

Чего ты хочешь от либы, основное назначение которой создавать гуй в однооконных приложениях типа игр и каких-либо утилит?

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

cluge
()
Последнее исправление: cluge (всего исправлений: 1)
Ответ на: комментарий от metaprog

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

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

Как ты начнёшь выявлять утечку? С чего начнёшь дебаг?

Вознесет молитвы свое метлой метапрогоматери Диане, та заглянет в исходники и пофиксит баг.

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

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

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

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

Да уж, а умничать с дивана так все гаразд.

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

Да уж, а умничать с дивана так все гаразд.

Просто указал тебе на очевидную проблему, и подсказал пути решения.

Не нужно много системных окон. Делай интерфейс аля Блендер. Вот так: http://dexp.in/nuklear-webdemo/

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

потому что для того чтобы это понять нужно читать документацию по библиотеке, а мы же знаем что ТС этого делать не станет ССЗБ в чистом виде.

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

У меня Exception thrown, see JavaScript console. Фаерфокс из последнего тор браузера.

JavaScript блочится, полагаю.

Все работает: https://imgur.com/a/yR2nnEy

cluge
()
Ответ на: комментарий от AntonI

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

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

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

Ии в очередной раз доказывает, что ты не понимаешь что такое «сложный проект», да ещё и с ручным управлением памятью. Просто посмотреть хватит когда у тебя два-три ресурса. Их отследить можно и глазами. А вот если их сотня, а то и тысяча…кстати тебе тут даже валгринд не поможет, ибо он тыкнет тебя носом в ту кашу, которую ты нагенерил, а разобраться а ней … Ну в общем ты понял.

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

может тогда до тс дойдет

Я Вами восхищаюсь (всерьез, без всякого сарказма) - какой же Вы все таки позитивный, верящий в людей человек!!!

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