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)

Ответ на: комментарий от I-Love-Microsoft

Ты такой забавный. Взял первый попавшийся юзернейм в теме и начал истерить. Давай для полноты картины ещё i-rinat обвиним, и hobbit, и всех остальных. А что? Они тоже отвечают и поддерживают тему на плаву. И я снова повторю свой вопрос: ты чего про игнор у других спрашиваешь, а сам своему совету не следуешь, м?

Так что свои фобии ремня оставь при себе, равно как и ложные выводы.

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

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

Они тоже отвечают и поддерживают тему на плаву.

Да. Поэтому я теперь очень сильно стараюсь лишнего сюда не писать. Пишу только если уж совсем невмоготу терпеть.

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

Я как-то пару недель не писал, и ничего не изменилось.

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

Можешь подсказать сишную библиотеку для работы с сетью чтоб была похожа на лабвьюшную?

https://zone.ni.com/reference/en-XX/help/371361R-01/lvcomm/tcp_read/

Чтобы просто как в TCP Read - указал сокет, число (ну ладно, можно еще и указатель на буфер) - и прочиталось. Шарю bufferevents из libevent, но там многовато секса с колбеками, а хочется один простенький блок как в Лабвью.

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

Давай для полноты картины ещё i-rinat обвиним, и hobbit, и всех остальных

Да чего ты так переживаешь :) Их тоже анана по попе за комментирование тут ))) А мне щелбан смачный за третий и последний коммент в теме

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

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

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

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

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

Ответ абсолютно валидный за исключением того, что это не сторонняя библиотека, а posix api.

При этом это троллинг Шредингера. Если тебе нужно что-то очень сложное (типа асинхронного многопоточного сервера с еполлом), то мой ответ - издевательство, потому что писать это с нуля довольно сложно (поэтому и существуют вещи типа либэвента).

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

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

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

Проще и наглядней некуда, но, к примеру, тот же recv можно эффективно юзать, только если знать, сколько именно данных надо ожидать на приём. А то вот я тут с педоном присел: pyusb — штука хорошая, но не тогда, когда ты не знаешь конечного протокола и его приходится реверсить. Пытаясь адаптировать квалкоммовский DIAG-HDLC к спредтрумовскому, понимаешь, что в квалкоммовском всё чётко: 512 байт отправил — 512 байт пришло в ответ. В спредовском же чёрт ногу сломит. Вот тут пакетные API бессильны, хоть бери и побайтово всю дичь принимай, пока не закончится.

rebforce
()
Последнее исправление: rebforce (всего исправлений: 3)
Ответ на: комментарий от i-rinat

Даже без ввода значения с клавиатуры, тупо харкод входных значений.

Так он на Винде же программирует, нет бы сначала на своём Метапроге создание консольных утилит для Linux осилить.

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

Ответ абсолютно валидный за исключением того, что это не сторонняя библиотека, а posix api.

И это даже лучше.

При этом это троллинг Шредингера. Если тебе нужно что-то очень сложное (типа асинхронного многопоточного сервера с еполлом), то мой ответ - издевательство, потому что писать это с нуля довольно сложно (поэтому и существуют вещи типа либэвента).

Смотри. Я цепляю коллбек на evconnlistener_new_bind с флагом LEV_OPT_LEAVE_SOCKETS_BLOCKING. Он исправно создает входящие соединения. Но если данные приходят по частям (делал тесты на Лабвью) - то ожидание прихода данных на recv (с флагом MSG_WAITALL) в одном коллбеке приводит к приостановке всех параллельных коллбеков.

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

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

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

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

На мнение нежелающих участвовать в проекте мне насрать.

Чисто из интереса, а для кого ты это делаешь? И зачем пишешь все это на ЛОР? Желающих тебе помогать тут нет, на остальных тебе насрать. В чем идея этого проекта и этого треда?

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

Желающих тебе помогать тут нет

Все же есть. Даже в лице liksys, несмотря на наши прошлые срачи (за которые я извинился).

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

LEV_OPT_LEAVE_SOCKETS_BLOCKING

приводит к приостановке всех параллельных коллбеков

Оно сделало ровно то, что ты и просил.

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

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

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

Ты пытаешься из асинхронного когда зачем-то сделать синхронный. Не надо так.

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

Ты не должен проектировать все сетевые кубики сам. Делать тысячу кубиков на все случаи жизни - заранее провальный путь. Сделай так, чтобы можно было обойтись без кубиков. Либэвент очень простая (снаружи) библиотека с хорошим интерфейсом. Добейся того, чтобы на твоём графическом языке можно было использовать все ее возможности напрямую, без поиска обходных путей. Каждый обход уменьшает универсальность языка.

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

Консольные утилиты мне не очень интересны, хочу сразу на гуй перейти.

В консоли для создания работоспособной программы достаточно использовать ‘‘кубики’’ чтения опции и чтение/запись в stdin/stdout/stder

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

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

Ты не должен проектировать все сетевые кубики сам. Делать тысячу кубиков на все случаи жизни - заранее провальный путь. Сделай так, чтобы …

… пользователь мог писать свои ‘‘кубики’’ в виде файла на С/С++ с макросами, тогда тебе надо будет обеспечить минимальный набор кубиков и далее сконцентрироваться на логике программы, с другой стороны кубик можно будет добавлять без перекомпиляции проекта.

Более того, такую программу будет легче освоить и использовать так как

  1. Все лишние и отвлекающие внимание ‘‘кубики’’ можно будет просто убрать.
  2. Если что не ясно то можно просто открыть файл с кодом ‘‘кубика’’ и посмотреть.
  3. Пользователь напишет свои кубики лучше всего подходящие его задаче.
torvn77 ★★★★★
()
Последнее исправление: torvn77 (всего исправлений: 3)
Ответ на: комментарий от liksys

Делать тысячу кубиков на все случаи жизни - заранее провальный путь.

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

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

Не знаю, это проверяется только опытом.

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

С другой стороны, если выкатить только «движок», без готовых кубиков, он мало кому будет интересен

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

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

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

Очень узкоспециализированное (под веб), основано на таком же узкоспециализированном ReactJS, и почти все пишется в тексте. Только разные окошки и возможны (но не обязательны) связи между ними. И если в Метапроге вставка сишного кода - крайняя мера (в основном для элементарщины типа арифметики и логики), то тут то и дело пишут джаваскрипт-код. Словом, не конкурент.

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

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

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

причем нужна интеграция не только с сишкой!

Другие целевые платформы для трансляции Метапрог-диаграмм (Ассемблер, HDL итд) тоже будут возможны. Нужно будет сделать соответствующий транслятор диаграмм и заменить сишные вставки вставками соответствующего целевого языка.

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

А ты не смотри на текст, смотри на главные преимущества метапрога, например тесная интеграция «языка», IDE, и остальных инструментов, например системы контроля версий. И этот DarkLang тоже имеет эти преимущества, при этом они нашли подходящую задачу под все это.

Тут же у DarkLang простота, облегченность процесса, и вот уже интересный инструмент получается. А я говорил что Metaprog будет очень хорош как высокоуровневый инструмент, а его возможность спустится на низкий уровень сделает его еще и производительным. Только в отличие от DarkLang у Metaprog'a еще есть графичестость, нормальная необрезанная функциональность...

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

И этот DarkLang тоже имеет эти преимущества

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

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

Думаю, что сделать костыли для, скажем, запуска кода на питоне

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

Вот например есть telethon, крутая штука, аналогов на других языках не нашел, а если у Metaprog'а будет хорошие инструменты для работы с питоном, то можно будет использовать telethon будто бы он построен на самом метапроге, так же удобно в общем. Тогда сразу можно предотвратить ситуацию с «вот у языка X уже есть либы, а у вас нет».

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

Вот чел к примеру для лиспа сделал возможность подключение C# кода, и теперь делает веб-сайтики на лиспе, с помощью либы от C#

Велосипед на Asp.Net Core MVC

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

Инструментарий для работы с питоном вроде даже в последнее Лабвью добавили. Если кому будет не лень вкрутить его в Метапрог - я буду только за.

Однако есть и контраргумент. Вставки питона (и вставки Си кроме элементарщины типа арифметики и логики) должны считаться плохим тоном. Их надо применять максимум как временный костыль, в идеале со временем все переделывать в максимально оптимизированные Метапрог-диагарммы.

Ладно, эти проблемы у нас будут где-то через год-два. Пока что допиливаю функционал работы с массивами/строками. Массив должен содержаться не в 2-компонентной (указатель+размер), а 3-компонентной структуре (указатель+размер+маркер статического/динаиического массива). Так можно будет программно отличать нужно ли malloc+free при разных операциях с массивами и строками. Когда будет библиотека работы со строками - будет релиз 4й версии прототипа.

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

Либэвент очень простая (снаружи) библиотека с хорошим интерфейсом. Добейся того, чтобы на твоём графическом языке можно было использовать все ее возможности напрямую, без поиска обходных путей.

На Метапроге уже можно вызывать функции и даже кидать указатели на функции-коллбеки. Достаточно ли этого чтобы на полную использовать либевент?

Я уже добился того что коллбеки при соединениях на evconnlistener открываются параллельно. Осталось теперь понять как сделать «неблокирующий recv» и чтобы он получал все байты, а не закрывался, получив ноль. Можно ли обойтись без секса с bufferevents?

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

должны считаться плохим тоном

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

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

Да не лень, главное сделать удобный интерфейс к «менеджеру библиотек», я бы и gobject'овые либы вкрутил через girepository или как там его.

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

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

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

Если у тебя есть проблемы с эвентами, значит сделано ещё не всё. Работай в этом направлении - их должно быть удобно использовать.

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

Думаешь сделать неблокирующий, но надежный аналог recv невозможно без секса с bufferevents? Можешь показать реальный пример (скажем, из твоего сервера) где идет чтение входящих соединений?

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

Он про то что нужно сделать удобную работу с сишными либами, что бы не было сэхса с чем либо.

Работай в этом направлении - их должно быть удобно использовать.

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