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)

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

Я читал и не увидел функции, аналогичной recv, чтобы не создааать колбеки вручную.

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

%))

Мёртвопрог: то, что мертво, умереть не может (универсальная графическая среда прокрастинирования)

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

Есть большие сомнения, можно ли называть «открытым кодом» файлы закрытого формата, для всего-навсего просмотра которых нужна проприетарная же IDE.

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

Конкретно мой код открытый.

Твой код представлен в виде двоичных файлов, в которых, кроме диаграмм, может быть всё, что угодно. Формат-то закрыт. Это «что угодно» можешь поместить даже не ты, а сама LabView.

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

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

Блобы — они такие...

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

Конкретно у тебя кода нет вообще, есть только блобы, для исследования которых требуется закрытое железо.

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

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

А проприетарную среду с закрытым форматом для разработки своего проекта ТС взял в рот совершенно добровольно. При том, что открытых — вагон и маленькая тележка (но да, там надо испачкаться программированием на текстовых языках).

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

При том, что открытых — вагон и маленькая тележка (но да, там надо испачкаться программированием на текстовых языках).

Открытое железо тоже есть. Вообще какая разница если непрототип будет на открытых технологиях?

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

Интересно, разумеется. Но Дракон слишком сильно отличается от Лабвью и Метапрога. Проводки в Драконе не с данными, а только лишь последовательности выполнения кода. В Лабвью, кстати, проводки только с данными, в Метапроге - и последовательности выполнения, и проводки с данными.

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

П. С.: разработка идет. Заканчиваю добавление в систему типов ссылок на тип с диска, после чего, скорее всего, смогу уже сварганить чатик на прототипе Метапрога.

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

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

Так пользуйся только открытым железом, какие проблемы? Ах да, придется отказаться от х86/х64 и многих других благ цивилизации, а делать этого ой как не хочется...

Так же у меня с Лабвью, равного которому ничего на данный момент нет.

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

Приложение написано на языках ДРАКОН-JavaScript и ДРАКОН-Lua в среде DRAKON Editor (большинство файлов JavaScript и Lua сгенерированы из сценариев на языке ДРАКОН).

Хм...

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

Для многих вполне жизненных задач отказаться конкретно от x86 можно. Но даже ARMы, увы, огороженные. Чего открытого я могу поставить на десктоп?

Со открытыми средами разработки и языками ситуация принципиально иная. Они есть и по ряду параметров более универсальны, чем Лабвью (тот же любимый тобой пример с модулями ядра, которые на Лабвью никто не пишет). Просто они для тебя непривычные.

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

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

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

Для многих вполне жизненных задач отказаться конкретно от x86 можно. Но даже ARMы, увы, огороженные. Чего открытого я могу поставить на десктоп?

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

Должны быть микроконтроллеры с открытыми спецификациями и топологией микросхем. Просто пользоваться ими вместо х86/х64 тебе не привычно, вот и все:)

Я к тому, что не стоит возводить открытость с самого старта в абсолют. Начать мне удобнее всего было именно на Лабвью, а уж теперь-то, когда есть полностью рабочий прототип Метапрога, альтернативой может стать только уже Метапрог «сам на себе».

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

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

Именно лень, а не все остальное, что ты там придумываешь для оправдания.

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

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

Повторюсь, для твоей задачи отлично бы подошел питон или го. Но ты их не знаешь и учить ничего не хочешь. Ты вообще ни одного языка не знаешь. Чтобы судить о языках, надо на них уметь писать. А ты не умеешь.

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

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

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

для твоей задачи отлично бы подошел питон или го. Но ты их не знаешь и учить ничего не хочешь. Ты вообще ни одного языка не знаешь. Чтобы судить о языках, надо на них уметь писать. А ты не умеешь.

Написать что-то несложное в тексте я еще, скрипя зубами, могу, но сама мысль о том чтобы в тексте писать десятки тысяч строк кода приводит меня в ужас. Писать, придумывать и, самое главное, помнить все названия переменных, заморачиваться с синтаксисом... Даже камасутра с графикой на Лабвью без GPU-ускорения мне кажется меньшим злом.

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

приводит меня в ужас

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

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

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

А зачем их помнить?

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

Глобальных переменных вообще-то должно быть по самому минимуму.

В нормальных IDE есть автодополнение.

И вообще, ненавистное тебе ООП придумали в том числе как раз для этого — чтобы не было кучи глобальных имён, которые надо запоминать. В терминах классов мыслить куда проще, чем в терминах сотен и тысяч глобальных функций.

Чем дальше, тем больше мне кажется, что как у некоторых бывает неудачный сексуальный опыт, так у тебя неудачный опыт с программированием. Да. Если для тебя программа на текстовом ЯП — это многокилометровая портянка с необозримыми функциями и кучей глобальных переменных, всё это плохо названо и неструктурировано, то такая программа кого угодно приведёт в отчаяние, не только тебя. Говнокод, сэр!

Но ведь можно просто писать по-другому. В хорошо написанной программе не бывает «десятков тысяч строк кода» просто так. Они объединены в функции, в классы, в модули.

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

И вообще, ненавистное тебе ООП придумали в том числе как раз для этого — чтобы не было кучи глобальных имён, которые надо запоминать. В терминах классов мыслить куда проще, чем в терминах сотен и тысяч глобальных функций.

Но ведь можно просто писать по-другому. В хорошо написанной программе не бывает «десятков тысяч строк кода» просто так. Они объединены в функции, в классы, в модули.

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

Глобальных переменных вообще-то должно быть по самому минимуму.

В Лабвью использовать переменные (даже локальные) считается дурным тоном. Все соединяется проводами.

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

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

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

С текстовым програмированием. После чего Лабвью показалось просто чудом. Если б на него было побольше готовы функций, особенно по графике - мне, возможно, не пришлось бы и Метапрог делать.

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

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

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

Только надо придумывать названия теперь уже для модулей и полей классов...

А у тебя части диаграммы никак не будут называться? Что-то не верю я в сопровождаемость такой программы...

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

Каждый блок (подфункция, константа итд) имеет свое название и комментарии никто не отменял. Более того: графика открывает новые возможности по красивому оформлению кода диаграмм.

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

Каждый блок (подфункция, константа итд) имеет свое название

Так в чём проблема? Чем названия классов и методов сложнее названий блоков и подфункций? Разве что запретом на пробелы? Ну люди пишут love_them_all или loveThemAll или даже LoveThemAll, не думаю, что это критично...

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

Всё решаемо.

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

Названия в Метапроге мультиязычные и без ограничений на символы. Разве что название, содержащее байт «0», не будет полностью отображаться - и то из-за нуль-терминированных строк в нуклеаре, пока не избавимся от них.

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

Середина учебного года – не до холиворов на лоре, надо домашку делать.

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

Правда, все застопорилось на попытках чтения из сокетов. Это ведь требует минимальных знаний о работе с системой io. И верный котечка как-то на помощь не пришел, и армия фанатов с лора молчит.

Да и хабр заминусил, и теперь на нем тоже тишина.

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

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

Да и хабр заминусил

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

В общем, если пишет — пусть пишет. :)

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

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

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

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

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

Всего лишь поставить Лабвью 2013, ну и проблема...

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

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

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

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

Тихо и незаметно на ЛОРе прошла неделя без metaprog-а.

Если б мне за разработку Метапрога деньги платили - все шло бы значительно быстрее. А так релиза новой версии прототипа (а переработано там немало) - придется подождать.

Кстати, может хоть ты подскажешь какая функция в libevent аналогична send/recv, но асинхронная?

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

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

От здешней аудитории хотя бы минимальный толк есть, от тамошней - нет от слова вообще.

В общем, если пишет — пусть пишет. :)

Пишу я только посты тут, схемы на Лабвью и Метапроге я не пишу, а собираю:)

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

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

hobbit ★★★★★
()

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

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

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

Кстати, может хоть ты подскажешь какая функция в libevent аналогична send/recv, но асинхронная?

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