LINUX.ORG.RU

Metaprog: выпуск прототипа (универсальная графическая среда программирования)

 , ,


2

3

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

LabVIEW-прототип не является конечной целью. В дальнейшем с помощью прототипа Metaprog будет собран «сам на себе» и не будет зависеть от LabVIEW.

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

Видео-обзор ( VarfolomeyKote4ka)

https://youtu.be/EcQMgUAm0DE

Скачать: https://www86.zippyshare.com/v/pWggQ91b/file.html

Аннотация

Открывать и запускать !метапрог.vi и !метапрог онлайн.vi

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

В Метапрог и Метапрог онлайн встроена справочная система и интерактивные инструкции.

Требования:

1. Для запуска, просмотра и редактирования диаграмм - LabVIEW начиная с 2013.

2. Если не удалось достать линуксовую версию LabVIEW - виртуальная машина с Windows начиная с ХР с кириллической локализацией (иначе будут проблемы с кодировкой символов).

3. Tor Browser или Tor для подключения к серверу:

https://www.torproject.org/

или:

sudo apt-get install tor

4. Для компиляции сгенерированного кода:

sudo apt-get install clang libevent-dev libsdl2-dev

Адрес для добровольных пожертвований:

Bitcoin: 1AYoK2TScSpD5bhf67mv9AxHDJ2RidRvjD

Этот адрес действителен как ключ для электронной подписи от имени разработчика.

Код лицензирован под GNU GPL v3, подробности - по кнопке «Про программу» и в файле LICENSE.txt (на английском). Отдельные файлы могут быть лицензированы под MPL и другими лицензиями.

Описание конструктора диаграмм (часть справочной системы, лучше читать смотря на Метапрог)

В случае вопросов или проблем консультации можно получить в чате программы «Метапрог онлайн».

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

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

При клике на терминал начнется рисование провода с данными. Клик на пустом месте при рисовании провода задает точку излома провода. При приближении курсора к терминалам провод автоматически подстраивается под ближайший терминал с совместимым типом (несовместимые типы подключить невозможно). Для окончательного подтверждения соединения кликни и связь будет установлена. Чтобы отменить рисование проводка, нажми Esc.

Подключаться дважды к одному терминалу нельзя - будут ошибки. Используй разветвления. Чтобы создать разветвление, кликни на квадратик, который появляется при приближении к проводу, и рисуй провод как обычно (только отенять кнопкой Esc не надо - будет баг).

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

Очередность выполнения также задается жесткими последовательностями. Это - особые линии, которые проводятся по кнопке блоки - последовательность. Первый клик на блоке - начало последовательности, следующие клики - изломы провода (на пустых местах) либо конец последовательности (на блоке). Места начала и конца провода имеют значение при работе с циклами, условными разветвлениями, переключателями.

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

Чтобы скопировать элемент на диаграмме, нажми на него колесом мыши. Чтобы вставить - жми колесом мыши на пустом месте.

При наведении мышью на элемент диаграммы отображается подробная информация о нем. Элементы подсказок кликабельные. Для дальнейшней справки кликай на "?" в подсказках к элементам.

Описание контейнера с данными и системы типов (часть справочной системы, лучше читать смотря на Метапрог)

В Метапроге есть три вида контейнеров с данными: константа, вход и выход. Константа имеет жестко заданное значение. Вход и выход связывают эту диаграмму с внешними диаграммами.

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

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

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

Неопределенное - аналог типа void в Си. Совместим со всеми типами.

Указатель - содержит адрес данных. Прямо транслируется в указатель на Си. Получается из данных блоком «указатель» (из меню блоков), вытягиваются данные из указателя блоком «вытягивание указателя».

Структура (последовательность и выбор) прямо транслируется в struct или union на Си. Формируется из контейнеров с данными другого типа путем из вытягивания на структуру. Достум к элементам структуры осуществляется через блок «операция над структурой».

Массив - тип, не имеющий прямого аналога в Си. Содержит указатель на первый элемент и длину массива. Доступ к этим переменным осуществляется через блок «операция над структурой». Чтобы задать тип массива, вытащи на него контейнер нужного типа. Массив можно подключить к типованному циклу (блоки - типованный цикл), в котором можно осуществить обработку каждого его элемента.

Структура условного выбора типа не имеет проямого аналога в Си. Состоит из числа-переключателя и структуры выбору (в Си - union) из данных разных типов. Тип данных зависит от значения переключателя. Задается и читается через операцию над структурой. Можно подключить к переключателю (блоки - переключатель), в котором обрабатывать данные зависимо от типа. Для добавления типа вытащи контейнер нужного типа на СУВТ.

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

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

------------------------------------------

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

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

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

Предыдущие темы, посвященные разработке Metaprog

Metaprog: универсальная графическая среда программирования [LabVIEW-прототип] часть 9

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



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

Ответ на: комментарий от rebforce

Ну что, через месяц-другой мегапрога уже перешла на самообеспечение?

А что ТЫ для этого сделал?

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

А что ТЫ для этого сделал?

Ничего. А почему Я должен был для этого что-то делать? Для чего МНЕ это нужно?

Мне, если что, и так достаточно уютно в NodeJS, QuickJS, B2G, Red, Pure Data и OpenSCAD. Поскольку на протяжении всей эпопеи ты так и не внял ни практическим советам, ни общефилософским рекомендациям, я пришёл ко вполне очевидному выводу о том, что эдакая НЁХ, которая для своего бутстрэпа требует проприетарную дичь, вполне успешно закопается справится и без моего участия.

Ну и я думал, что и ты за это время поймёшь, какой хурмой занимаешься. Но нет.

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

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

Я же давал функцию для либевент_буфферы, не пошло?

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

Ну да. Ты метапрог то видел? Я вон видео снял.

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

Но я и без них прекрасно могу программировать на Лабвью.

Если ты не видишь инфантильности в этой фразе, то пожалуй тебе нужно повзрослеть.

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

прекрасно

За полгода (!) не сделано ничего из озвученных планов. Аналога гитхаба нет, мертвопрога самом на себе нет. Есть чятик, которому нужны костыли в виде прокси и проприятерного лабвью, и такой же простенький графический конструктор схем, причем тормозной и генерящий кривой код на Си.

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

Ты бездарно просрал полгода своей жизни. Поздравляю.

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

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

Вместо того, чтобы сесть и изучить за месяц какой-нибудь язык, вроде го и за два месяца написать свой мертвопрог

Не тупи, надо делать метапрог на ClojureScript, или хотя бы Rebol. Смотри вон как rebforcer быстро свой антиметапрог сделал.

Deleted
()
Ответ на: комментарий от i-rinat

Это не графическая среда даже.

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

Колбеки на прием соединений evconnlistener работают, но внутри этих колбеков траблы с recv, которое не читает нужное количество байт. Если сделать сокеты блокирующими (флаг LEV_OPT_LEAVE_SOCKETS_BLOCKING при evconnlistener_new_bind), тогда recv ждет пока прийде нужное количество байт, но блокирует параллельные колбеки. Короче, нужна асинхронная замена recv, которая терпеливо ждет нужное количество байт, при этом не блокирует параллельные колбеки. Лови трансляцию:

https://pastebin.com/pPneFVcY

Шлешь на локальный порт 7891 строку и она выполняется как команда (функция system). Перед строкой надо прислать ее длину (беззнаковое 32-битное) в little-endian.

Надо чуточку допилить и выпустить новую версию прототипа, чтоб ты смог прочитать метапрог-диаграммы этого примера (августовской версией прототипа ты его уже не откроешь, очень многое переделано). Сори за отлучки, не могу полностью отдаться разработке Метапрога пока мне за это не платят:)

П. С.: наконец-то у меня открылось редактирование своих сообщений. Это от скора зависит?

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

Аналога гитхаба нет

Есть онлайн-репозиторий с метапрог-диаграммами (Метапрог онлайн).

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

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

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

А что ТЫ сделал для того чтобы было что-то большее? Подсказал recv/send. Спасибо, конечно, но теперь хотелось бы решения проблемы с recv/send в колбеках evconnlistener без того чтобы блокировать колбеки на других входящих сокетах.

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

Мне, если что, и так достаточно уютно в NodeJS, QuickJS, B2G, Red, Pure Data и OpenSCAD.

Пожалуй, лучше там и сиди, а то еще нанесешь в Метапрог текстовой скриптоты, а мне оно надо?:)

Особенно убило OpenSCAD. Оно по-твоему реально удобнее графического автокада?!

metaprog
() автор топика

Шел 3й (или 4й?) месяц битвы за чтение из сокетов…

Профессиональное низкоуровневое программирование в реальном мире так не работает. Бухгалтер может включить запись макросов в Ворде, повозюкать мышкой и посмотреть на сгенерированный код, может наобум что-то подправить и надеяться, что в 80% случаев все будет работать.

Для системного программирования требуются хоть какие-то азы того, как работает система.

Советую найти путевую книжку. Имхо, весьма не плоха Michael Kerrisk «The Linux Programming Interface: A Linux and UNIX System Programming Handbook». Есть русский перевод, но его с торрентов качать не советую, там не хватает 300-400 рандомных страниц, проще купить электронную версию на сайте издательства. Правда, перевод так себе, вплоть до того, что в переводе какие-то вещи употребляются в прямо противоположном смысле.

В этой книге подробно разжеванна и работа с вводом-выводом (в том числе ассинхронным), и работа с потоками. И даже, к 1300 странице, описываются select/poll/epoll и все что с этим связано.

После этого, тебе станет понятны твои проблемы с блокированием потоков и проще будет разобраться, почему так написана libuv (или libev или что ты там используешь) и как ее правильно использовать.

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

А чего ты мне тыкаешь-то? Я не припомню, чтобы нанимался к тебе в консультанты. И вообще, я уже давно обозначил свою позицию про твое поделие, как про ненужную фигню. А спрашиваю потому, что ты бил себя пяткой в грудь и рассказывал, насколько в графике все лучше. Как видим, базовых знаний на программирование тебе уже не хватает. Что автоматически ставит крест на всей твоей твоей затее, ибо подтверждает, что язык тут - далеко не самая сложная часть.

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

После этого

А заодно станет понятно, что графический си не нужен.

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

Особенно убило OpenSCAD. Оно по-твоему реально удобнее графического автокада?!

А ты уверен, что знаешь, что такое OpenSCAD? Он вполне себе графический, т.е. результат конструирования ты видишь. Просто способ ввода другой. :)

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

Особенно убило OpenSCAD. Оно по-твоему реально удобнее графического автокада?!

Интересно было бы посмотреть на его творения для начала.

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

П. С.: наконец-то у меня открылось редактирование своих сообщений. Это от скора зависит?

Да.

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

Особенно убило OpenSCAD. Оно по-твоему реально удобнее графического автокада?!

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

Хотя лабвьюшно-проприетарным мышевозам это всё будет как о стенку горохом, я понимаю, да.

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

Особенно убило OpenSCAD. Оно по-твоему реально удобнее графического автокада?!

Интересно было бы посмотреть на его творения для начала.

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

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

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

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

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

функционал

Какой функционал — этот или этот? Или речь всё же про функциональность?

А если по теме — решать, конечно, автору. Но я вот думаю, что толкать его сейчас на прикручивание механизма обновлений к лабвьюшному прототипу — плохая идея. Например, потому, что это как раз то, что при появлении метапрога-на-себе придётся выкидывать и переписывать с нуля.

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

Ну вроде бы это не должно быть сложно

Тут ещё такой момент. Если писать обновлялку как следует — она должна не только скачать обновление, но и сделать установку, при необходимости перегрузиться (как Firefox, например). И вот мне сдаётся, что реализация всех этих дополнительных операций этого будет сильно отличаться для прототипа и для будущего «настоящего» метапрога (без лабвью). А значит — работа на корзину.

Можно, конечно, сделать халтурно, как у Adobe Flash: т.е. при наличии обновлений открыть страницу скачивания, а переустановку и перезапуск предложить пользователю сделать самому. Но зачем? Удобства это добавит не сильно по сравнению с ручным переходом на новую версию, а время автора отнимет…

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

Да, как часть «Метапрог онлайн», прикрутил к чатику и выпустил с релизом прототипа.

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

ВОТ ЭТО ПОВОРОТ!!!

Ну или аккаунт взломали и завандалили. С этим злосчастным @Deleted фиг разберёшь.

P.S. А, похоже, он теперь @insw.

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

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

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

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