Pull to refresh
-16
Valeri Rakitine@ValRakitine

Software Architect

6
Subscribers
Send message

Я о регулярной конечно, за 40 лет уже забыл какая она там по типу по иерархии Хомского )
Нет, сдаюсь, уже ничего об этом их лекций не помню )

Сможете построить свой любимый конечный автомат?

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

Перед тем как VA script писать мы тоже часто граф на бумаге с заказчиком нарисуем. С графом, нагляднее, но в программировании говорят, что на безрыбье сам раком станешь )

Я когда смотрю на все эти "v_10":"s_10, совершенно ничего не понимаю. И я не один такой здесь. Выглядит как запутанный write only код.

А я как удивляюсь и те кто использует VAOP как удивляются, что никто на Хабре не понимает )


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

Вот это, кстати, прекрасный пример того, что VAOP не следует своей идеологии.

Первае замечание:


Во-первых, это непонятно. Есть только цифирки вида v_10 -> s_10, которые никак не объясняют, что на самом деле, если мы встретили знак, мы переходим в состояние "знак".

Это взято из примеров в лекции и там я все это рассказываю. В реальных проектах в VA script без проблем добавлятся комментарии
Я уже приводил примеры реальных VA script в комментах к этой статье и все их видели, поэтому это замечание скорее мелкая придирка, что не красит ее автора.


Второе замечание не очень мне понятно. Автор делает вывод, что из-за того, что нет ГАРАНТИЙ согласованности (т.е согласованность есть, вот гарантий нет) в VA script и VA box. На основании чего автор пишет:


Что, в свою очередь, означает, что обещание "в одном месте" не выполняется.

В VAOP алгоритм в одном месте в VA script в этом главная его фишка со всеми плюсами, получаемыми от этого, и все по нему работают и его понимают. Действия, соответствующие каждому VA node, кодируются в VA box и задача программиста правильно их закодировать и "согласовать" с VA script при отладке.
Автор хочет, чтобы все было в "в одном месте", но не пойму, что и в каком?
Может автор покажет как он это себе представляет?


У меня и так все нормально работает согласно заявленному в начале статьи:


v-agent ориентированное программирование (VAOP) — это методология программирования, основанная на представлении алгоритма в виде v-agent script, который позволяет программному агенту, получившему название v-agent, выполнять операции закодированные в модулях v-agent box.

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

Похоже, что автор за шесть дней нвших разговоров так этого ВНИМАТЕЛЬНО и не прочитал )

Но все равно в нём легко можно обойтись без конечного автомата.

Кто спорит ) И воробья в поле можно насмерть загонять ))

Важно или не важно. Не уходите от темы.
Тема: Алгоритм )

Самое сложное в "онлайн-аппликациях" — не "алгоритм", а данные. В том смысле, что надо умудриться сохранить состояние между всеми переходами. И с этим ваша VAOP вообще никак помогает, потому что данными она не оперирует.

это я так сходу не могу ответить. Слишком много от среды зависит

И… все. Простое типовое решение.

Для .NET может и покатит но он не у всех, и как-то вот это не очень убедительно


А требования записываются в документ, который так и называется "требования к системе". Четко, ясно и понятно всем участникам процесса.

Не будем сказки рассказывать. Студенты мои читают. Знаю как там пишут и дополняют при изменениях. Выходит, что основное требование VAOP не выполняется.
В реале, в небольших конторах, вообще, никаних требований к системе не найдешь через пару лет, а разбираться надо. При VAOP таких проблем по определению быть не может так как вся бизнес или другая логика в VA script.
Да, и еще, как я говорю студентам — не надо вертолет вызывать и продолжим мысленно то, что нам дано в задании eco-programming-web-without-fsm

Спасибо, что откликнулись не мое предложение показать мне как без VAOP можно без проблем закодировать задачи, которые я делал в VAOP и учу этой ерунде моих студентов и скоро буду и школьникам вталкивать этот бред)
С этой задачей все понятно. Я ее даю студентам и они делают так же как и Вы. Потом я начинаю проверять их код. Ввожу две точки подряд или пробел в целой или дробной части. Это не работает. Создается проблемная ситуация потому, что они начинают менять код и совсем у них все запутывается.
Как в Вашем случае (это моя вина. Я не уточнил задание)
'-2 5..8' => знак: -1, целая часть: 2, дробная часть: 0, значение: -2
'+.' => знак: 1, целая часть: 0, дробная часть: 0, значение: 0
'.312' => знак: 1, целая часть: 0, дробная часть: 312, значение: 0.312
' +2, 315' => знак: 1, целая часть: 2, дробная часть: 0, значение: 2


Короче, создается проблемная ситуация и Вы, как профессионал, правильно предложили выход из неё.


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

Я начинаю студентам показывать как привязать VAOP к этой задаче или как Вы правильно написали — "Можно и на конечном автомате накидать"


В итоге мы получаем VA script


# V_10 => <Sign> , 
# V_20 => <digit> , 
# V_30 => <Separator> , 
# V_40 => Carriage return (CR), 
# V_50 => <Unknown> it means something different from V_10 ... V_40

fsm_matrix = {
    "s_00":{
        "comment":"initial state",
        "v_10":"s_10",
        "v_20":"s_20",
        "v_30":"s_30",
        "v_40":"Err_10",
        "v_50":"Err_20",
   },    
    "s_10":{
        "comment":"state of sign",
        "v_10":"Err_30",
        "v_20":"s_20",
        "v_30":"s_30",
        "v_40":"Err_40",
        "v_50":"Err_20",
   },    
    "s_20":{
        "comment":"state of integer part",
        "v_10":"Err_50",
        "v_20":"s_20",
        "v_30":"s_30",
        "v_40":"END",
        "v_50":"Err_20",
   },    
    "s_30":{
        "comment":"state of separator",
        "v_10":"Err_60",
        "v_20":"s_40",
        "v_30":"Err_70", 
        #"v_30":"s_30",
        "v_40":"END",
        "v_50":"Err_20",
    },    
    "s_40":{
        "comment":"state of decimal part",
        "v_10":"Err_80",
        "v_20":"s_40",
        "v_30":"Err_90",
        "v_40":"END",
        "v_50":"Err_20",
   }    
}

** видите там в "state of separator", если остаться в состоянии "state of separator" #"v_30":"s_30", то можно сколько угодно точек вводит и ошибки не будет.


Вот так показываю студентам как в VA script задается весь алгоритм


VA box на Питоне:


# input block
real_number = input("\nInput real_number? ")

# define event code
i = 0
while i < len(real_number) + 1:
    event = "v_50"

    if i < len(real_number):
        if real_number[i] in ["+","-"]:
            event = "v_10"

        if real_number[i] in ["0","1","2","3","4","5","6","7","8","9"]:
            event = "v_20"

        if real_number[i] in ["."]:
            event = "v_30"
    if i == len(real_number):
        event = "v_40"

    # define new state
    state = fsm_matrix[current_state][event]
    previous_state = current_state
    current_state = state

    if i < len(real_number):
        print("\ni:[" + str(i) +"] | event:[" + event + "] | real_number[i]:[" + real_number[i] + "] | previous_state:[" + previous_state + "] | current_state:[" + current_state + "] ")

    if current_state in fsm_matrix:
        if current_state == "s_20":
            integer_part += real_number[i]
        if current_state == "s_40":
            decimal_part += real_number[i]
        i += 1
        continue
    break

if current_state.find("END") != 0:
       print("\n\n\nError code:[" + current_state +"]\n\n")

if current_state.find("END") == 0: 
    print("\n\ninteger_part:[" + integer_part +"] and decimal_part:[" + decimal_part + "]\n")

Получается, что без VAOP толком не получается )


Я тут посмотрел в VA script и у меня, в отличии от Вашего кода пустая строка — ошибка с кодом Err_10 потому, что сразу пришел конец строки # V_40 => Carriage return (CR),


"s_00":{
        "comment":"initial state",
        "v_10":"s_10",
        "v_20":"s_20",
        "v_30":"s_30",
        "v_40":"Err_10",   
        "v_50":"Err_20",
},

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


'+.' => знак: 1, целая часть: 0, дробная часть: 0, значение: 0 мой VA script также обработает


Ладно, что-то я увлекся. Еще со студентами и школьниками наиграюсь.
Один, кстати предложил, что ведь очень просто менять VA script в зависимость от времени. Да обеда один юзать, а после другой, например.
Я ему говорю, что я при веб-программировании это раз применял. Очень эффектно получалось, но мы об это поговорим, когда будем VAOP применительно к веб-программированию изучать. Вот такие студенты сообразительные бывают. Не поймешь, кто кого учит ))

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

Вот еще третья задача для проверки нужна VAOP или нет )
У меня это задача с VAOP сделана. И лекция подготовлена где все расписано по шагам.


Условие задачи (писать на Питоне).
Пользователь вводит реальное число и программа должна выделить целую и дробную части числа


-25.8 => 25 и 8
34 => 34 и 0
.312 => 0 и 315


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


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


Я так понял, Вам VAOP не нужен?
Тогда, удачи )
Попробуйте сделать ее без всемогущего VAOP )

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

Задачка очень примитивная, и все возможности ООП, не показать на простом примере. Но в задаче показаны основны подхода.
Попробуйте мысленно расширить мой "вопросник", пример для студентов eco-programming-webfsm01 до реальной задачи на три десятка экранов (видимых действий) и сложной зависимостью алгоритма от ответов пользователя и результатов оборащения к third party (не видимых действий еще с десяток или больше). Такого много надо кодить для всяких контор и правительственных сайтов, когда мы онлайн аппликации заполняем. И чтобы четко было ясен и записан алгоритм, чтобы новый программер и заказчик внесли изменения так, чтобы вся система не легла )
Да, а это пример того же опросника, по без VAOP eco-programming-web-without-fsm
Можно, просто начинать мысленно раздувать оба подхода и посмотреть, что из этого получится. Можно вместе. Приходите на мой мастер класс. Там все и обсудим.


Предложите Ваш подход. Начальные условия можно обсудить А то уже четверий день ругаете мой подход ) Думаю, всем будет интересно, как Вы сделаете, чтобы был записан где-то алгоритм, который бы заказчик мог обсудить с НОВЫМ программистом, чтобы новый программер и заказчик внесли изменения так, чтобы вся система не легла ) Я Вам уже четвертый день отвечаю, что у меня это работает в РЕАЛЬНЫХ ПРОЕКТАХ, а Вы, просто, на словах говорите, что это ерунда, какая-то. Научите как это делается на самом деле. Я открыт к диалогу.


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


Или вот эту задачу покажите как без VAOP можно сделать:


Два года назад я воспользовался VAOP для решения задачи типа TTC [Top trading cycle]
У меня версии с и без VAOP есть. Я VA script для TTC в комментах показывал. Можете попробовать. Хотя проверка будет не корректной потому, что сделать может Вы и сделаете и изменения заказчика в алгоритм быстра внесете (я в этом очень сомневаюсь), но потом надо проверить как без Вас кто-то другой разберется и внесет изменения. Это ведь одна из основных плюшек VAOP. С VAOP это гараздо легче, хотя, Вы правильно хотите и в этом сами убедиться ) или меня переубедить, что и без VAOP другой программист быстро поймет как работаем Ваш код )
Все почему-то забывают про поддержание продукта и уменьшение затрат на его модернизацию.


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

Хорошо бы конечно, но VAOP решает проблемы эффективного программирования не только на Питоне )

Это Вы уже не по делу пишите, а у меня анекдот в тему:
Верблюда спрашивают, почти как Вы меня:
— Почему у тебя спина кривая?
— А, скажите, что у меня ровное?


Вот так и живем )

Что и где придется поменять, чтобы это случилось?

Давайте, лучше моею третью статью подождем. Я там все про VAOP в веб-разработках расскажу и примеры приведу и все такое. Я же курс для школников пишу и сюда частично выложу Вам на "растерзание"
Ну а если срочно надо, то у меня мастер класс для русскоговорящих по Воскресеньям в 10 по торонтовскому времени [записаться]
В гугл-митинг расшерю экран и в www.pythonanywhere.com посмотрим как все работает и как делать изменения. Поверьте, не Вы первый этим интересуетесь. Интерес к VAOP растет.
Приглашаю всех желающих на часик в Торонто )

Да я же честно писал, что на питоне для TTC это моя первая и последняя программа. С SQL я никогда особо не дружил и в JSON не силен, да и не хочу.
На все 100% согласен с Вашей оценкой моих познаний в этом. Мне 64. Забываю уже все и новое не лезет.
Пришло время методологиями заняться )
Надо же что-то Человечеству оставить в надежде на благодарность потомков )

Прямо вот в вашем примере видно, что бизнес-логика — не (только) в VA script. Потому что вот она

Что-то Вы уже передергиваете. Иссякли? Предлагаю ничью )
Вся или не вся на 100%.
В реализации отдельных действий (состояний) там свой алгоритм и своя логика и часто там свой VAOP делают.


… и в скольких местах надо внести изменения для этого?

Алгоритм меняется в VA script, а, вообще, понятно, что саму страницу добавить надо. Как без нее )


Подождите, это какая-то проблема, что ли? У меня в "одном проекте" используется с десяток внешних сервисов, и… что? Оно еще и асинхронное, для вящего счастья.

Ну это уже вообще не туда. Мы же о разных реализациях говорим. Моя 11 лет назад с KPN была. Хотя если я посмотрю, то может и у Вас найдется где VAOP прикрутить )
Хотя я был свидетелем случаем, любителей мазахизма в параллельных проектах. Закрутят все и гордые такие сидят. Я говорю с VAOP упростим, а они нет — мы крутые и так осилим, хотя, как я потом понял им это выгодно, чтобы не уволили. Ведь только они могут разобраться что нагородили )
Вот этот фактор не последний в сдерживании VAOP (

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

Спасибо. Учту на будущее )


Я не вижу там никаких преимуществ. Поясните?

Все преимущества которые дает VAOP написаны в начале статьи — Идеологически v-agent ориентированное программирование — добивается того, чтобы алгоритм был записан в одном месте в виде, понятном всем — заказчикам, програмистам и исполняюшей среде (компьютеру), что улучшает процесс взаимодействия всех при создания программного продукта и, что особенно важно, существенно снижает затраты на этапе поддержания работы и адаптации к изменению внешних условий в Будущем.


Со студентами начинаем менять алгоритм. Например, потребовалось ввести дополнительную страницу с вопросом "Вы старше 18 лет" или что-то в этом духе и зависимости от ответа что-то там еще сделать.
Проводим изменения в двух реализациях и всем сразу понятно, что с VAOP это намного легче.


В реале же все сложнее чем в этом примере. Там еще внутри много внутренних (без экрана) действий со сложной логикой, зависящей от ответов на запросы third party (не говорил это никогда по-русски) конторам.
Садишься с заказчиком. Все это обговариваешь в VA script и вперед — кодить. Если что-то в бизнес логике поменялось. Старая у нас в VA script.
Смотрим меняем и так далее… Все всегда были в восторге! Очень просто и удобно.
Мы так тендер для голландцев выиграли. Они за день до конкурса условия поменяли, а мы за ночь без проблем внесли изменения. И все благодаря VAOP. Да и потом, когда уже над проектом работами они там постоянно бизнес логику меняли. Потом ребята еще лет пять систему поддерживали без особых проблем.
Задача для голландской kpn.com была — принять онлайн заказ на установку дома телефона, интернета и прочего. Точно, помню, начали они с запросов к одной third party конторе и при мне дошли до пяти

Да. Это простенький пример для моего онлайн курса.
Там показано как между страницами переходить.
А это же без VAOP [жми здесь]
Во время занятий показываю все преимущества VAOP

Ой, а я понял, что "универсальность" это в смысле универсального ключа потому, что работает оно везде — в разных средах, на разных языках…
Так и происходит сейчас в реале. Со мной на контакт выходят программеры со своими проблемами, когда алгоритмы сложные и везде можно прикрутить VAOP

Information

Rating
Does not participate
Location
Toronto, Ontario, Канада
Date of birth
Registered
Activity