LINUX.ORG.RU

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

 , , ,


0

2

Интерактивная обучалка

https://streamable.com/dnhoy

Интерактивная инструкция по сборке факториала

https://streamable.com/h8dto

Меню из функций

Наконец допилил меню из функций. Программирование на Метапроге будет выглядеть примерно так:

https://streamable.com/xlprt

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

Сама функция, считающая факториал, выглядит так:

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

Полученный код корректно считает факториал 11 (10+1, как на схеме):

https://pastebin.com/pdbhKcey

Переключатель (он же switch)

https://streamable.com/vgn3w

https://pastebin.com/tuB9X00u

Чат-клиент

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

Версия 1.

http://e2tilsgo5s44hqmlwb4epwrjnh7ynvsckj2tl5duwdqbxg67chqpelad.onion/file/de...

Требования

1. Windows начиная с ХР с кириллической локализацией (иначе будут проблемы с кодировкой символов).

2. Для запуска скомпилированного ехе-файла бесплатный рантайм (32-битный):

https://download.ni.com/support/softlib/labview/labview_runtime/2013 SP1/Wind...

3. Для просмотра и редактирования диаграмм с кодом чат-клиента - LabVIEW начиная с 2013. Как кто его достанет - личное дело каждого, если жалко денег - на торрентах оно есть.

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

https://www.torproject.org/

Сам чат-клиент лицензирован под GNU GPL v3, подробности - по кнопке «Про программу».

FAQ

0. Где отсутствующие примеры и пункты FAQ? Как вообще читать эти темы?

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

11. Как выглядит факториал в графическом представлении?

https://i.postimg.cc/ZRzpHhnv/image.png (уже на Метапроге, а не Лабвью).

Прошлые темы:

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

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

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

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

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

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

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

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

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

Насколько я знаю, LGPL разрешает использовать компоненты в пропиетарщине, но запрещает статическую линковку.

Нет. Надо всего лишь обеспечить возможность линковки закрытого ПО с другой версией LGPLных библиотек. Т.е. можно вместо динамической линковки предоставлять объектные модули. Ну и если кто-то правит сами LGPLные модули - патчи тоже должны распространяться под LGPL.

На LGPL-версии той же Qt делают много мелкой проприетарщины. Только надо соблюдать ряд ограничений.

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

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

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

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

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

И это хорошо! ♫♬♩

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

Я скажу вот что.

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

А вот если ты сейчас выберешь что-то типа BSD, то всё, джинн выпущен. Ты можешь потом ограничивать последующие версии, но то, что ты под BSD успел выпустить, оно так под BSD и будет гулять на радость проприетарщикам.

Конкретно про MPL — насколько я помню, там были какие-то несовместимости с GPL или совместимость с оговорками. Лично меня бы несовместимость с GPL расстроила больше, чем несовместимость с проприетарным кодом.

Я бы выбрал:

  • GPL для инструментария разработчика;
  • LGPL для библиотек;
  • если кому-то будут сильно жать ограничения LGPL - предлагать им купить коммерческую версию под отдельной лицензией. По такому принципу распространяется Qt на радость разным категориям разработчиков.

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

hobbit ★★★★★ ()

А пока скажи ещё вот какую вещь. Ты уже дал всем понять, что Лабвью — это временно, и что предстоит много дурной работы по отвязыванию проекта от Лабвью. В таком случае, почему же ты для среды временного прототипирования выбрал проприетарную Лабвью, а не свободную MyOpenLab? Она бы тебе дала целых два преимущества.

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

Я от тебя видел следующие аргументы:

Первое. Автор MyOpenLab не ставит целью написать её саму по себе. Ну так и у лабвью такой цели нет, т.е. MyOpenLab по этому критерию как минимум не хуже. Как появится прототип — сконвертируешь, и продолжаешь писать сам на себе.

Второе. MyOpenLab написана на Java. Так, на чём написана лабвью, вообще рассуждать смысла нет — она проприетарна. Если ты прицениваешься к ЯП с целью что-то дописать в самой среде, то открытая среда на _любом_ ЯП будет меньшим злом, чем закрытая лабвью.

Третье. MyOpenLab у тебя вываливала какие-то исключения. Так это же опенсорс. Где твой багрепорт? Я думаю, если бы ты его внятно написал, автор бы порадовался возможности исправить косяк.

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

Вообще, если бы ты написал хотя бы пару-тройку грамотных замечаний/предложений в багтрекер MyOpenLab — это был бы куда более весомый вклад в развитие визуального программирования, чем 9 эпических тем на ЛОРе с иллюстрациями в виде малопонятных диаграмм и обфусцированного кода.

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

Разумеется, сам Метапрог, как средство разработки, будет лицензирован под GPL.

LGPL для базовой библиотеки Метапрога плохо подходит потому что линковки в нем пока что нет. А даже когда будет - обращаться за элементарной арифметикой или работой над строками/массивами/указателями в отдельную библиотеку - это жуткий оверхед.

https://www.gnu.org/licenses/license-list.html#MPL-2.0

Написано, что MPL 2.0 с GPL совместима. Можешь пошарить ткст лицензий и подсказать какие могут быть подводные камни? Я тоже шарю, но твой совет нужн потому что я не такой опытный опенсорс-разраб, как ты. И с тобой еще можно адекватно общаться, в отличие от некоторых.

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

Третье. MyOpenLab у тебя вываливала какие-то исключения. Так это же опенсорс. Где твой багрепорт? Я думаю, если бы ты его внятно написал, автор бы порадовался возможности исправить косяк.

Я все же осилил запустить MyOpenLab в винде под виртуалкой, так что это не считается.

С MyOpenLab основная проблема - гораздо худшая юзабельность в целом. И да, меньше готовых «кубиков». И многие из них высокоуровневые, полностью написанные как классы на джаве, а не на диаграммах.

К тому же, уже поздно обсуждать переход на MyOpenLab, поскольку прототип Метапрога на Лабвью практически готов и на нем уже можно делать Метапрог «сам на себе».

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

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

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

Тебе надо - ты и пиши.

Ох, прости, ты же не программист и умеешь)

Давай, деанонься. Я тебе подарю Lego Mindstorms. Там тебе и электронику пять не придется, и чертежи для механики рисовать для заказа на заводе, и для программирования есть графическая среда для детей. Одни сплошные кубики! Находка для настоящего метапрогера!

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

Подари биткоинов - куплю. Эквивалента тысячи долларов хватит?

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

Lego Mindstorms

Блин. Теперь я тоже хочу себе купить такое. Но боюсь, меня не поймут, если я в это буду играть. >_<

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

Будь мужиком и купи себе сам. Не попрошайничай.

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

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

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

Дык купи. Настоящему мужику не нужны оправдания! Если он захотел себе лего - значит так нужно.

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

Настоящему мужику не нужны оправдания! Если он захотел себе лего - значит так нужно.

В квотезы!

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

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

мастерящий

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

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

можно гланды через анус удалять

вот если бы это проверили в «разрушителях мифов»... (простите за оффтоп)

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

Пример с факториалом

Решил скомпилировать. Поставил себе libuv-dev. DNF напугал меня, что это platform library for Node.js, но гуглинг показал, что не всё так страшно.

В режиме -pedantic компилятор вываливает:

facto.c:93:128: предупреждение: ISO C не поддерживает пустые фигурные скобки в инициализаторах [-Wpedantic]
 unsigned char metaprog_instance_0_4977115698367185921__5547017593702305793_complex_array_array_pointer_7330576255297685505[] = {};
                                                                                                                                ^
facto.c:93:15: ошибка: размер массива «metaprog_instance_0_4977115698367185921__5547017593702305793_complex_array_array_pointer_7330576255297685505» нулевой или отрицательный
 unsigned char metaprog_instance_0_4977115698367185921__5547017593702305793_complex_array_array_pointer_7330576255297685505[] = {};
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Если -pedantic убрать, программа собирается без предупреждений и работает.

Не очень понял, зачем в консольную программу, к тому же не работающую с сетью, тащить зависимость от Nuklear и libuv.

GCC 8.3.1, Fedora 29.

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

Не очень понял, зачем в консольную программу, к тому же не работающую с сетью, тащить зависимость от Nuklear и libuv.

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

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

Кстати, решил вернуться к либевенту, он попроще.

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

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

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

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

Прототип предназначен для раскрутки Метапрога. Плохо, что вбрасывает лишние инклюды, но терпимо, так как конечная цель (Метапрог «сам на себе») будет потреблять все без исключения инклюды.

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

Почему типованный цикл сначала был синим, а потом стал зелёным? Что вообще цвет обозначает? Что за квадратики со стрелочками вокруг него? Где хоть какая-то маркировка разных блоков в сборке, кроме числовых? Что за 4 разноцветные цифры появляются над математическими операциями?

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

Хорошие вопросы. Учту при доработке.

Почему типованный цикл сначала был синим, а потом стал зелёным?

Что вообще цвет обозначает?

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

Что за квадратики со стрелочками вокруг него?

Это терминалы, к которым подключаются проводки. Крайние серые терминалы - пустые, для подключения. Сверху - константы (тут не задействованы), снизу первый - счетчик (вход - число повторений, выход - номер повторения), ниже - регистры.

Где хоть какая-то маркировка разных блоков в сборке, кроме числовых?

Надо мышкой наводить, упущение при записи видео.

Что за 4 разноцветные цифры появляются над математическими операциями?

Число комментариев в подфункциях. Виды комментариев: замечания, ошибки, хотелки и «дело сделано».

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

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

И да, очевидно, что требуется некоторый уровень развития разработчика. Нельзя сделать любой код сразу понятным человеку, который никогда до этого в жизни не кодил. Но у тебя-то замах на понятность и наглядность. А такой облом. Это же не Piet какой-нибудь, чтобы его разгадывать по цветам.

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

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

Вот только вопрос: раз все равно требуется обучение, чем это лучше любого текстового языка?

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

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

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

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

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

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

с этого и надо начинать. десяток книжек и ЛОР можно не просить научить программировать — в книжках научат

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

Их давали. Ответы были - «мне быстрее и проще спросить на Лоре» и «а чо такова я и так программирую, это все ненужно».

Посмотрим, что изменилось после девяти тредов.

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

Я вообще не понимаю, как эта мыльная опера собирает столько комментариев?! :)

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

как эта мыльная опера собирает столько комментариев?!

Похоже на сторонников плоской Земли. Там тоже всегда куча борцов с обоих сторон.

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

Ну и какие книжки подскажешь? И чему они меня умному научат?

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

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

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

Расценивать как вопрос что же за книжки ты мне так хочешь предложить и почему без них невозможно жить и программировать.

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