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 + будильник на Метапроге

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

на колу мочало начинай сначала

Если не западло спонсировать заморских толстосумов - можешь и купить лицензию.

Или использовать свободные и бесплатные инструменты.

В блокноте и на чистом Си? Нет уж, я не мазохист.

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

И я уже который раз задаю вопрос(и до меня его задавали) нафига? Потому что ты пришел в эти темы и неравнодушен к Метапрогу.

Нет на такие жертвы я пойтить не могу, даже ради метапрога.

Ну его я не использую, так что не в тему.

Ну и зря, полезный инструмент.

Ладно все с тобой ясно. Хочешь ходить по граблям и собирать негатив в этих темах твое дело. Удачи.

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

Можешь подсказать как ускорить генерацию строк?

  1. Переиспользовать ресурсы, если есть такая возможность.

  2. Параллельно генерировать строки, если их много.

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

Посмотри метод update: https://pastebin.com/cJTdjscR

Вставил подсчёт времени:

https://imgur.com/a/rxsk19m

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

А то можно дойти до того, что просто выводить

0 strings matches

как уже показывал @AntonI и он прав в этом…

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

Отличный ролик кстати. Если бы метапрог был аниме :). А котечка няшным.

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

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

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

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

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

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

дак в этом и суть, что по нормальному там надо использовать хэши. То есть использовать страшные абстракции))

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

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

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

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

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

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

Cпустя год этот вопрос заиграл новыми красками:

Зачем мне питон, если есть Лабвью?

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

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

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

И как тут хеши помогут?

погугли Алгоритм Рабина-Карпа

Хотя вообще хэши ненадёжная штука, поскольку есть множество строк, хэши которых совпадают…

можешь ещё погуглить Z-функция строки. так тоже можно искать подстроки…

Ну и раз речь зашла про алгоритмы, парниша из ролика про анимэ выпустил видос с объяснением алгоритма Флойда, а то типичный зритель-ютубер не вьехал: https://youtu.be/9YTjXqqJEFE

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

Поправь если я ошибаюсь, мне Liksys писал что ТС сам сделал кодогенератор, но сделал он его в labview, я ведь правильно понимаю? То есть он диаграммы с помощью Labview в код на языке С транслировал?

Кодогенератор свой.

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

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

Гуй метапрога рисуется на canvas'e. Есть вещи которые сделаны с помощью контролов labview, но они просты.

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

Я не испытываю недостатка в чсв, чтобы тешить его в твоих темах.

Точно? Я напомню кое что! Ты:

  • Изначально обиделся из за того что ОП не стал следовать твоим советам, о чем сам писал много раз (по моему ЧСВ видно невооруженным глазом?)
  • Стал говорить что добавил меня в игнор, сразу после того как я начал опровергать твои слова, а на самом деле ты читал все мои комментарии, и специально выискивал те где я сфейлился (что говорит о том что на остальные комментарии ты не мог ответить в силу своего скилла, и не считал их ошибочными), правда фейлился я наверное раза два максимум...
  • После нескольких тем ты начал врать, хотя тебе писали много раз где ты «ошибаешься» (вернее врешь)
  • Постоянно говоришь что ты выше метапрогеров, чую скоро дойдет до сверхчеловека как у rebforcer'a
  • В последнее время после того как я начал писать про твои чудные ингоры ты стал писать в спец-тему с требованиями меня забанить
  • Несмотря на всю глупость ситуации, ты отказываешься признавать свои ошибки, избегаешь вопросов
stasolog ()

hobbit, в этот раз грабли были особенные. Я лишь перекопипасщивал оскорбления liksysa в свой ответ, он же специально этого добивался, о чем и написал, после чего накатал жалобу. Классно? %) И вроде за «кловун» никогда не терли... А теперь будут, и хорошо!

stasolog ()

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

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

Я лишь перекопипасщивал оскорбления liksysa в свой ответ

На ЛОРе это всегда считалось и считается запрещённым приёмом, тут ты не первый и не последний.

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

Применительно к @liksys — я его усилия по повторению одних и тех же эпитетов не поддерживаю, но я помню, с чего они начались, и его изначальное возмущение вполне понимаю. Это даже не про тебя, ты там за компанию под руку попал.

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

Считаешь чью-то лексику неприемлемой — есть два варианта: либо писать в спецтему, либо молча игнорить

Ну я раньше пробовал несколько раз жаловаться на «кловун», реакции не было. А сейчас пришел альбатрос, поэтому можно начать засылать в тему.

второй его обозвал дятлом, первый в ответ перешёл на мат

Не, он именно написал «кловун», и я написал в ответе «кловун». Или как там было...

Это даже не про тебя, ты там за компанию под руку попал.

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

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

Не, он именно написал «кловун», и я написал в ответе «кловун».

This. Не надо так делать.

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

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

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

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

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

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

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

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

Одна из проблем @metaprogа (человека, не программы) — он слишком на многое реагирует непосредственно, причём в стиле «сам дурак». А то и сам борзеет. Недавно вот обозвал бездарностями тех, кто ему давал, видите ли, не те советы, которые он хочет услышать.

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

Зачем ты врешь?

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

Кодогенератор свой.

Ты немного опоздал с ответом. Да и вопрос не тебе был задан.

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

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

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

Гуй метапрога рисуется на canvas’e.

Но канвас лабвьюшный же?

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

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

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

Хотя вообще хэши ненадёжная штука, поскольку есть множество строк, хэши которых совпадают…

А они и не должны быть «надёжными» в данной задаче. Совпадение хэшей означает, что ВОЗМОЖНО строки совпадают и нужно провести более детальную (например посимвольную) проверку.

Собственно алгоритм с хэшами на питонеи словарем вида

{хэш:[(номер строки, позиция в строке), ...]}

или ещё какой то аналог мультимэпа, скорее всего обгонит лобовой алгоритм на С. Только ТСу об этом не говорите, расстроится…

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

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

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

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

Докажи что я вру или не было

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

Ты немного опоздал с ответом. Да и вопрос не тебе был задан.

То есть тебе ответ не важен? Зачем тебе ответ именно ОПа?

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

Ну да. Только там столько функций что я даже не знаю какие могут возникнуть трудности с заменой.

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

Вот я о том и говорю. Если даже для гуя придумали тонну концепций (MVVM, MVC), то компилятор сложнее в этом плане.

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

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

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

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

Я про антиметапрог вообще ничего не говорил. Твои фантазии.

То есть тебе ответ не важен? Учту.

То есть ответ я уже получил. От тебя мне ответ не важен да. Остальное твои фантазии. Учти пожалуйста.

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

Я про антиметапрог вообще ничего не говорил. Твои фантазии.

Хм...

А i-rinat или hobbit вообще мне кажется ему это метапрог бы написали, если бы он нормально попросил.

ЕМНИП написали уже какой-то, неукуренный и интерпретируемый, нет?

Да, было дело.

Антиметапрог? Антиметапрог. Не согласен? Это не так важно. Показывай что было сделано.


То есть я ответ я уже получил. От тебя мне ответ не важен да. Остальное твои фантазии. Учти пожалуйста.

Я видел только двух пользователей пишущих про labwiev, и что то мне подсказывает что человек то всего один.

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

Антиметапрог? Антиметапрог. Не согласен? Это не так важно. Показывай что было сделано.

Я не понимаю чего ты хочешь. Формулируй мысли точнее.

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

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

а делать этот новый метапрог с нуля (другой гуй и все такое).

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

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

Пока чуваки даже не осиливают кнопку к текстовому виджету добавить, че.

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

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

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

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

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

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

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

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

Я немного потыкал это поделие… И, в общем, думаю, что функциональность лабвью здесь используется процентов на 99.99

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

А сколько на самом деле? Просто… Как бы у меня нет лабвью, и посмотреть «исходники» я не могу.

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

Я уже писал, используются относительно примитивные функции

Не буду спорить за неимением информации. Но при скорости написания в один переворот массива за полгода и примитивные функции вам придётся пилить годами((((

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