LINUX.ORG.RU

Метапрог-прототип, версия 7 + графические диалоги на Метапроге

 , ,


0

3

Скачать (перед запуском читайте !Русский.txt или !Українська.txt):

https://www71.zippyshare.com/v/dNcHIgzD/file.html

Новая версия принесла несколько новых фич интерфейса пользователя. Добавлено выделение прямоугольником для вырезания и копирования части диаграммы (в прошлой версии было только копирование и вставка одного блока по щелчку колесом мыши). После копирования куска диаграммы (с проводками с данными и жесткими последовательностями) его можно вставить кликом колесом мыши на пустом месте диаграммы. Есть план реализовать в будущий версиях также создание подфункций из выделенного куска - аналог Create SubVI из LabVIEW (так была сделана немалая часть функций в прототипе Метапрога).

Однако самая интересная фича новой версии - сериализация в base64 координат блока на диаграмме с цепочкой функций. Этому есть как минимум два возможных применения. Можно «ткнуть пальцем» на нужный блок (меню блоки - ткнуть пальцем на блок). Будет сгенерирована строка такого вида:

metaprog_debug:AAAAAAAAAAAAAAAHAAAAAFBUSDAAAAAEAAAAAAAAAAAAAAAAAAAAAwAAAAdNUEwgMi4wAAAAB0xJQ0VOU0UAAAAU4fPk6Ov87ejqIO3gIOfg7+jy4PUAAAAK0+rw4L/t8fzq4AAAABXh8+To6/zt6Oog7eAg5+Dv8O7x4PUAAAAH0PPx8ero6VBUSDEAAAAxcmVsIAAr0LHRg9C00LjQu9GM0L3QuNC6INC90LAg0LfQsNC/0LjRgtCw0YUubXBiZBNiCtNfkRABAAAAAwAAAAdNUEwgMi4wAAAAB0xJQ0VOU0UAAAAT9rPr7vfo8evu4ujpIOSz4Ovu4wAAAArT6vDgv+3x/OrgAAAAFPbl6+736PHr5e3t++kg5Ojg6+7jAAAAB9Dz8fHq6OlQVEgxAAAANXJlbCAAA25rYwAq0YbRltC70L7Rh9C40YHQu9C+0LLQuNC5INC00ZbQsNC70L7Qsy5tcGJkP/rfBI32qgEAAAADAAAAB01QTCAyLjAAAAAHTElDRU5TRQAAABDy5erx8u7i6Okg5LPg6+7jAAAACtPq8OC/7fH86uAAAAAQ8uXq8fLu4vvpIOTo4Ovu4wAAAAfQ8/Hx6ujpUFRIMQAAAC9yZWwgAANua2MAJNGC0LXQutGB0YLQvtCy0LjQuSDQtNGW0LDQu9C+0LMubXBiZFbEp7cIT2gBAAAAAwAAAAdNUEwgMi4wAAAAB0xJQ0VOU0UAAAAV5+Dv8/HqIOKz6u3gIE51a2xlYXIrAAAACtPq8OC/7fH86uAAAAAU5+Dv8/HqIO7q7eAgTnVrbGVhcisAAAAH0PPx8ero6VBUSDAAAAAWAAEAAgNua2MNbmtjIGluaXQubXBiZFQc/+kgVZgBAAAAAwAAAAdNUEwgMi4wAAAAB0xJQ0VOU0UAAAAO+PDo9PIg7fPq6+Xg8CsAAAAK0+rw4L/t8fzq4AAAAA748Oj08iDt8+rr5eDwKwAAAAfQ8/Hx6ujpUFRIMQAAADpyZWwgAANua2MAL9GW0L3RltGG0ZbQsNC70ZbQt9Cw0YbRltGPINC90YPQutC70LXQsNGAKy5tcGJkaxMcpv873AEAAAAAUFRIMAAAAAQAAAAAdcftGC2ZsAE=:metaprog_debug

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

Вместо тысячи слов:

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

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

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

https://postimg.cc/hQVLBcHp

Дебаг-строку выводит оранжевый блок.

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

Для компиляции надо скачать https://sourceforge.net/projects/tinyfiledialogs/

Распаковать в папке с Си-файлом так, чтобы работал соответствующий инклюд.

Код:

https://pastebin.com/5NW30tQx

Введя нужное число, закрываете окошко. После ввода часа и минуты в консоль будет выведено время срабатывания. Теперь будильником можно пользоваться и для повседневных нужд (звук пронзительный, хорошо слышный, sound.wav больше не нужен), однако завершать его работу надо еще через диспетчер задач или Ctrl+C в консоли, когда не идет звук. Также нет проверки введенных чисел, если введете не то число - будильник никогда не сработает.

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

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

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

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

anonymous ()

Я уж понадеялся, что ты все, раз тот тред до 1800 раздуло, а нового не было. Эх.

t184256 ★★★★★ ()

Метапрог, эфир, славянское ПО - мои инструменты на каждый день. Всё это на TempleOS, конечно же.

anonymous ()

От LabVIEW и Windows метапрог-идею отвязали? Имеет ли смысл тратить время и читать стартовый пост темы?

Владимир.

EXL ★★★★★ ()

Шо? Опять?

Усаживаемся поудобнее, представление начинается!

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

Присмотреться не пробовал?

В том и дело, что все уже пробовали.

Да, повтыкав подольше, понять эту фигню можно. Как можно и всякие ребусы с головоломками разгадать. Это довольно увлекательно, но пригодно лишь для развлечения и лёгкой «зарядки» для мозгов, но никак не для прикладного применения в программировании. При желании можно и вместо общения здесь картинками друг другу объяснять и пытаться понять, что собеседник имел в виду. Это будет (до тех пор, пока не надоест) довольно весело, но совершенно не эффективно. Тебе надо этот свой метапрог позиционировать как игру. В Стим можно с ним и т.д. Для развлечения очень даже может зайти. Особенно если ачивки добавить и цели.

anonymous ()

В новой версии прототипа Метапрога было исправлено множество багов. Теперь метапроговские массивы и СУВТ можно помещать под указатели и вставлять в структуры, не боясь багов. Это позволило добавить к будильнику, реализованному в прошлой версии, диалоги, запрашивающие час и минуту срабатывания будильника. Код: https://pastebin.com/5NW30tQx

И код замечателен и прост.
Не пойму почему вас критикуют?

Владимир

anonymous ()

Имхо идея интересная, только не хватает группировки(либо я её не заметил как пример Youtube) и графония(для представительности). Ну и пока действительно получается громоздко, хотя по задумке графическое программирование как раз должно улучшать восприятие и быть проще, да и вообще автор не думал лучше более высокоуровнево писать, в стиле классических движковых узловых редакторов(Unity, CryEngine, UE4 и т.д.) ?

AKonia ()
Последнее исправление: AKonia (всего исправлений: 3)

О, уже умеем генерировать строки. А как насчет того, чтобы ее перевернуть?

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

Присмотреться не пробовал?

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

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

Присмотреться не пробовал?

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

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

Кстати, а в чем визуальность, если у автора 80% площади диаграммы занимает текст?

anonymous ()

Сишный код из пастебина компилится с кучей ворнингов, а линкер падает с такой ошибкой

test.c:(.text+0x50633): неопределённая ссылка на «tinyfd_beep»
provaton ★★★★★ ()
Ответ на: комментарий от anonymous

Версия с GitHub’a устарела просто.

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

Методом проб и ошибок смог ввести в этом диалоге значение. Надо это делать так: сначала вводишь число в окошке, потом идешь в терминал, откуда запустил и жмешь там Ctrl-C. Потом вводишь второе значение. Потом ждешь сигнала.

Программа в режиме ожидания сигнала будильника потребляет 5% CPU (intel i7-8700K) и 88MB RAM.

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

При желании можно и вместо общения здесь картинками друг другу объяснять и пытаться понять, что собеседник имел в виду

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

Цитата на тему: «A picture is worth 10K words - but only those to describe the picture. Hardly any sets of 10K words can be adequately described with pictures.»

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

Программа в режиме ожидания сигнала будильника потребляет 5% CPU (intel i7-8700K) и 88MB RAM.

Шутка

Это телеметрия …
LabView случайно не под админом устанавливается?

Владимир

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

Прогони валгриндом, кста, раз уж осилил собрать. А то мне лениво весь нужный хлам тащить.

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

потребляет 5% CPU (intel i7-8700K) и 88MB RAM.

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

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

Цикл бипов будильника когда он срабатывает бесконечен. Сишный код никак не модифицирует в теле цикла переменную, которая проверяется в while.

В качестве контрольного выстрела сразу за бесконечным циклом бипов еще один бесконечный цикл с пустым телом.

valgrind говорит такое:

==129010==     in use at exit: 3,599,403 bytes in 5,695 blocks
==129010==   total heap usage: 48,148 allocs, 42,453 frees, 1,412,852,555 bytes allocated
==129010== LEAK SUMMARY:
==129010==    definitely lost: 17,332 bytes in 2,604 blocks
==129010==    indirectly lost: 82,554 bytes in 446 blocks
==129010==      possibly lost: 306,143 bytes in 4 blocks
==129010==    still reachable: 3,193,374 bytes in 2,641 blocks
==129010==                       of which reachable via heuristic:
==129010==                         newarray           : 16 bytes in 1 blocks
==129010==                         multipleinheritance: 104 bytes in 1 blocks
==129010==         suppressed: 0 bytes in 0 blocks
==129010== Reachable blocks (those to which a pointer was found) are not shown.
==129010== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==129010==
==129010== For lists of detected and suppressed errors, rerun with: -s
==129010== ERROR SUMMARY: 18 errors from 18 contexts (suppressed: 0 from 0)
provaton ★★★★★ ()
Ответ на: комментарий от anonymous

Это фигня, попытка манипуляции. Графический интерфейс, к примеру, почти повсеместно вытеснил текстовый. Будет ли оно востребовано в программировании - пока никто не знает. Если ты в не в курсе, над людьми которые в начале 90-х вкладывали деньги и время в интернет (ну то есть в бизнес на основе интернета) откровенно смеялись.

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

48,148 allocs, 42,453 frees, 1,412,852,555 bytes

эффективность

18 errors from 18 contexts

надежность

метапрог.

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

Это фигня, попытка манипуляции. Графический интерфейс, к примеру, почти повсеместно вытеснил текстовый.

Да, ты очень точно сам отразил суть своего комментария.

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

кстати интересно на сколько он утечет, если его ставить, например, на ночь :D

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

Будильник, который вместо того, чтобы вовремя сработать сжирает всю память и вешает машину? Срочно дайте два.

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

Скорей всего не потечет. ГУЙ там отрабатывает в самом начале, когда вводишь значения. В цикле ожидания времени срабатывания ничего не течет. А когда оно сработало, оно входит в замечательный цикл о котором я говорил. В этом цикле точно никаких утечек, беда только не заканчивается никогда))

while (metaprog_instance_0_1479391006019749889_loop_4133954266916116481_condition);
char metaprog_instance_0_1479391006019749889_loop_6802920294744268801_condition;
do{
metaprog_instance_0_1479391006019749889__variable_5030714011995295745 = 1;
tinyfd_beep();
;
metaprog_instance_0_1479391006019749889__variable_8716348196408997889 = 2;
sleep(metaprog_instance_0_1479391006019749889__variable_8716348196408997889);
;
metaprog_instance_0_1479391006019749889_loop_6802920294744268801_condition = metaprog_instance_0_1479391006019749889__variable_5030714011995295745;
}
provaton ★★★★★ ()
Ответ на: комментарий от anonymous

Будет ли оно востребовано в программировании - пока никто не знает.

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

Также полезно подумать, почему LabVIEW существует уже 35 лет, а вменяемого опенсорсного аналога так и не появилось. Если ТС прав, и оно реально пригодно как инструмент общего назначения — давно бы уже могли родить аналог. Это же не какая-то жутко специфичная вещь типа САПР. Компиляторы традиционных языков, IDE, отладчики, валгринды всякие — всё есть. А этого нет. Это не убойный аргумент, конечно. Возможно, просто «настоящих буйных мало — вот и нету вожаков». Но тревожный звоночек для ТСа.

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

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

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

и судя по количеству аллокаций там вся либа реально инитится в цикле.

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

Память утечет даже в таком цикле: [code] for(;;) { SDL_DestroyWindow(SDL_CreateWindow(…)); } [/code] А при 10 тысячах вызовах SDL_Init утекает всего ~3мб.

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

Присылай патчи, но учти, твое решение должно работать на всех платформах.

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

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

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

при 10 тысячах вызовах SDL_Init

То, что лабопрог это до сих пор не исправил (и как я понимаю не собирается) достойно восхищения и вызывает в памяти по ассоциации такой анекдот:

Китайцы решили взломать сервер Пентагона. Каждый китаец попробовал в качестве пароля «Мао». На 300 миллионной попытке сервер согласился, что его пароль - «Мао»

Что должно произойти в данном случае не ясно. Компьютер на 100-тысячном вызове SDL_Init откроет портал в Xen, наверное.

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

Ну окей, не хочешь ты их делать. Расскажи тогда как надо правильно ждать?

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

То, что лабопрог это до сих пор не исправил (и как я понимаю не собирается)

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

anonymous ()

Новая версия принесла несколько новых фич интерфейса пользователя.

Если run-time LabView бесплатен и вам чего-то в нем не достает, то разработайте дополнительный API.
Можете вы LabView подружить с QT?

Владимир

anonymous ()

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

Чем отличаются «массив» и «масив»?

Экспорт в какой-нибудь SVG или другой векторный формат оно умеет? Реально же ведь подслеповатое ШГ, и непонятно, то ли это скриншот, то ли сама программа такая…

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

Возможно, просто «настоящих буйных мало — вот и нету вожаков».

Для игр-то оно вроде есть?

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

Экспорт в какой-нибудь SVG или другой векторный формат оно умеет?

Нет.

Реально же ведь подслеповатое ШГ

Жпег видимо. Шрифты кстати можно сгладить, и в XP и в Wine.

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

Можете вы LabView подружить с QT?

Зачем ему дружить лабвью с квиктаймом? А если вы про Qt, то ТС отвечал, что Qt для него не вариант, ибо C++.

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

Жпег видимо.

Странно, хостинг картинок говорит, что это PNG. Я понимаю, есть трекер-жулики, которые из MP3 делают FLAC, но ТС-у то это зачем?

hobbit ★★★★★ ()
Ограничение на отправку комментариев: