Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Андрей Бушман от 07-12-2015, 22:20:22

Название: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Андрей Бушман от 07-12-2015, 22:20:22
Комментарии к ссылкам, опубликованным здесь (http://adn-cis.org/forum/index.php?topic=3248.0).

Комментарий к #5 (http://adn-cis.org/forum/index.php?topic=3248.msg13810#msg13810):

Насколько я понял, NCalc - это альтернативный вариант того, что Стровструп детально предоставил в книге "Практика программирования" в первых главах (в качестве примера того, как ведётся разработка программы). Только у Стровструпа это сделано реально компактно и не исключено, что более грамотно: на основе грамматики Бэкуса-Наура. Я не сохранил свою .NET-реализацию его варианта - успешно побаловался когда-то и удалил, т.к. сам по себе мне был интересен алгоритм парсинга (у меня остался только перевод этого (https://docs.google.com/file/d/0B7H_2Cq9tBXdd2prejdTRlJlSDA/edit) документа). В принципе, любой желающий может достаточно быстро реализовать вариант Стровструпа в .NET, переложив вариант его кода с C++ на C#. Пока добавил ссылку на NCalc. В случае появления более удобной альтернативы - заменю или добавлю ссылку.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Андрей Бушман от 08-12-2015, 00:06:31
Комментарий к #5 (http://adn-cis.org/forum/index.php?topic=3248.msg13810#msg13810):

Для репозитория PiaNO, по ссылке, предоставленной Дмитрием Загорулькиным, отсутствует какая-либо документация. Не понятно что это и как этим пользоваться: нет даже элементарных примеров использования библиотеки. В виду этого ссылку удаляю. Впредь буду лично проверять состав рекомендуемых ссылок (ожидал, что дающие ссылку будут сами проверять этот момент) и добавлять невнятные репозитории не стану (не зависимо от того, кто даёт ссылку).
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Александр Ривилис от 08-12-2015, 00:28:34
Для репозитория PiaNO, по ссылке, предоставленной Дмитрием Загорулькиным, отсутствует какая-либо документация. Не понятно что это и как этим пользоваться: нет даже элементарных примеров использования библиотеки. В виду этого ссылку удаляю.
Зря. Ты просто не разобрался. Это очень полезная библиотека для работы с недокументированными форматами файлов AutoCAD. В частности позволяющая создавать нестандартные форматы листов для печати.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Андрей Бушман от 08-12-2015, 00:41:45
Зря. Ты просто не разобрался.
Если я буду заниматься изучением кода каждого недокументированного проекта, ссылку на который мне дают, с целью выяснения того, действительно ли он может быть полезен, то на это моей жизни не хватит.

Это очень полезная библиотека для работы с недокументированными форматами файлов AutoCAD. В частности позволяющая создавать нестандартные форматы листов для печати.
Это здорово что вы так, на глаз, способны это определить. Не вопрос... Поскольку проект открыт, то вы можете добавить в него хотя бы краткое описание и пример использования ("хеллоу-ворлд"), чтобы появилась хотя бы какая-то отправная точка в его изучении. Вряд ли это займёт у вас много времени.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Александр Ривилис от 08-12-2015, 00:47:29
Это здорово что вы так, на глаз, способны это определить.
Это не на глаз. Да и на нашем форуме активно обсуждался вопрос создания нестандартных листов и упоминалась эта библиотека (http://adn-cis.org/forum/index.php?topic=245.0). Документировать её я конечно не буду - те, у кого возникнет в ней необходимость сами разберутся. Считаю, что того что она упомянута, вполне достаточно.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Андрей Бушман от 08-12-2015, 00:53:59
Отсутствие документации или хотя бы внятного примера в открытых проектах всегда расцениваю как неуважение к тем, кому репозиторий открывается для доступа. Соответственно и моё отношение к таким "благодетелям" соотвестующее.

Хорошо, ссылку добавлю. С пометкой, что вы считаете её полезной, несмотря на то, что документация и примеры отсутствуют.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Дмитрий Загорулькин от 08-12-2015, 04:52:51
Насколько я понял, NCalc - это альтернативный вариант того, что Стровструп детально предоставил в книге "Практика программирования" в первых главах (в качестве примера того, как ведётся разработка программы). Только у Стровструпа это сделано реально компактно и не исключено, что более грамотно: на основе грамматики Бэкуса-Наура. Я не сохранил свою .NET-реализацию его варианта - успешно побаловался когда-то и удалил, т.к. сам по себе мне был интересен алгоритм парсинга (у меня остался только перевод этого документа). В принципе, любой желающий может достаточно быстро реализовать вариант Стровструпа в .NET, переложив вариант его кода с C++ на C#. Пока добавил ссылку на NCalc. В случае появления более удобной альтернативы - заменю или добавлю ссылку.
Если найдется более компактный и более грамотный вариант такого парсера - буду только рад. А пока это единственная известная мне открытая библиотека с подобным функционалом и лично проверенная мною. На протяжении уже почти года использования хорошо себя зарекомендовала, поэтому и поделился ею.
По поводу PiaNO Александр Наумович уже все сказал, мне добавить нечего.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: bargool от 08-12-2015, 10:43:35
ncalc библиотека хорошая, у меня уже 1.5 года работает. Но либо у меня руки кривые, либо в конторе что-то не то с ПО, но на некоторых компьютерах (причём иногда), использование библиотеки крашит автокад в произвольный момент уже после использования (вне конторы вроде ни у кого такого не происходит). Причём он просто закрывается, и только иногда предлагает отправить отчёт об ошибке.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Дмитрий Загорулькин от 08-12-2015, 16:15:03
А как установили, что это именно из-за NCalc? Просто иногда AutoCAD сам по себе фаталит, без сторонней "помощи" :)
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Дима_ от 08-12-2015, 22:57:22
Если найдется более компактный и более грамотный вариант такого парсера - буду только рад.
Мной написан используемый на практике парсер и GUI для ввода подсчета формул спецификаций и видов изделий, весь синтаксис достаточно "продвинутый" - позволяет вводить "пользовательские" переменные (они-же функции), поддерживает рекурсию и дополнительные "единицы измерения" (на практике это артикулы материалов) так-же вариативных от параметров, с различными типами правил их сложения. Но "базу" математики в нем считает - XDocument.XPathEvaluate... у меня на него нареканий пока не было - хотя конечно если сравнить в архиве до чего разросся парсер (а начинался практически с одной этой строки) - добавить ее в "рукописный" функционал - это уже мелочи - но зачем.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Андрей Бушман от 09-12-2015, 22:55:49
Но "базу" математики в нем считает - XDocument.XPathEvaluate...
Этой фразы я не понял. Какое отношение к математике имеет обозначенный метод?
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Дима_ от 10-12-2015, 00:14:43
Прямое - передай ему "2+2*2"
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Андрей Бушман от 10-12-2015, 11:34:28
Прямое - передай ему "2+2*2"
Полезная информация, не знал об этом. Спасибо.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Дмитрий Загорулькин от 10-12-2015, 11:40:11
Мной написан используемый на практике парсер и GUI для ввода подсчета формул спецификаций и видов изделий, весь синтаксис достаточно "продвинутый" - позволяет вводить "пользовательские" переменные (они-же функции), поддерживает рекурсию и дополнительные "единицы измерения" (на практике это артикулы материалов) так-же вариативных от параметров, с различными типами правил их сложения. Но "базу" математики в нем считает - XDocument.XPathEvaluate... у меня на него нареканий пока не было - хотя конечно если сравнить в архиве до чего разросся парсер (а начинался практически с одной этой строки) - добавить ее в "рукописный" функционал - это уже мелочи - но зачем.
Вот чтобы не тратить время на разработку такого парсера, можно воспользоваться уже готовым и проверенным NCalc. Либо вашим, если поделитесь :)
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Андрей Бушман от 10-12-2015, 11:48:08
уже готовым и проверенным NCalc
Возможно появятся пояснения к #7 от автора сообщения.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Дима_ от 10-12-2015, 22:10:09
Либо вашим, если поделитесь
Не смогу - могу написать аналогичный - но именно тот нельзя - таков уговор.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Андрей Бушман от 11-12-2015, 11:59:02
Вот чтобы не тратить время на разработку такого парсера,
Кто не хочет, тот может пользоваться NCalc.

Лично мне всегда было интересно знать, как правильно создавать парсеры, а так же иметь навыки написания хотя бы их простых вариантов (например, того же парсера математических выражений). В главах 6 и 7 книги "Практика программирования на C++" Беарне Стровструп на примере создания калькулятора показал как это делается. Автор сначала показал две неудачные попытки создания калькулятора, наглядно демонстрируя шаги и ошибки, которые обычно программисты допускают при решении подобных задач. Затем, в третьем варианте решения автор наглядно показал как это делать правильно и объяснил почему именно так. Решение Стровструпа основано на разработке и применении грамматики. Собственно после этого примера я и заинтересовался EBNF (расширенной формой Бэкуса-Наура) - перевёл для себя стандарт ISO/IEC 14977:1996(E), ссылку на который давал выше.

Продемонстрированное Стровструпом решение (парсер математических выражений) позволяет не только выполнять базовые наборы арифметических операций, но и расширять созданное решение произвольным набором пользовательских функций (sum, random, sqrt, etc). Я делал это в качестве тренировки - никаких проблем не возникло. Такое масштабирование является достаточным именно за счёт продуманной архитектуры приложения, учитывающей саму возможность масштабирования.

Код, присутствующий в обозначенных выше главах весьма компактен. Он написан на C++, но является весьма простым и понятным (на мой взгляд) в т.ч. и для тех, кто пишет на др. языках (например на C#). Так что переложить его на свой язык труда не составит. Насколько я помню, у меня это когда-то заняло один вечер и приобретённый опыт считаю не лишним, поскольку не люблю "чёрные ящики", ломающиеся в самый неподходящий момент (имхо).
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Андрей Бушман от 11-12-2015, 12:33:35
В главах 6 и 7 книги "Практика программирования на C++" Беарне Стровструп
Кстати, сегодня вышел из типографии перевод (http://www.williamspublishing.com/Books/978-5-8459-1949-6.html) обновлённой версии этой книги, в которой учтены особенности C++11 и C++14. Издательство украинское, печатают в Москве. В Питере, на книжной ярмарке ДК им. Крупской, эта книга только по предзаказу, т.к. не распродан ещё старый запас предыдущего издания. Срок доставки 1-2 недели, цена, на сегодняшний день, 2 000 руб.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: bargool от 18-02-2016, 14:45:10
На самом деле я далеко не уверен, что ncalc крашит автокад. Просто весь код, кроме ncalc, много раз преверен (хотя это и не является гарантией) - остаётся только сесть с разными утилитами для отслеживания памяти и проч, и искать где я напортачил

Кстати, сегодня опять поискал альтернативы - нашёл 2 варианта: DataTable.Compute (https://msdn.microsoft.com/en-us/library/system.data.datatable.compute%28v=vs.110%29.aspx) и попробовать использовать Roslyn (http://stackoverflow.com/questions/17552914/ncalc-are-there-alternatives?rq=1)
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Андрей Бушман от 18-02-2016, 14:58:57
Велосипед. Программно создаёшь объект сессии PowerShell и исполняешь в нём любые выражения, в т.ч. и математические. Когда объект становится ненужным - прибиваешь его. В примере хостинга PowerShell я показывал в т.ч. и вычисление математических выражений. Используются не сторонние библиотеки, но "родной" механизм, присутствующий в Windows.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Андрей Бушман от 18-02-2016, 15:03:58
Если найдется более компактный и более грамотный вариант такого парсера - буду только рад.
PowerShell. :)
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: bargool от 18-02-2016, 15:06:25
ИМХО, небезопасно. У меня выражения для вычисления пишут инженеры. И тут они смогут наделать делов.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Андрей Бушман от 18-02-2016, 15:07:35
ИМХО, небезопасно. У меня выражения для вычисления пишут инженеры. И тут они смогут наделать делов.
Например? "Наделать делов" они смогут и без твоего кода (от этого не застрахован никто, ибо у каждого психа своя программа в голове - всех случаев не предусмотреть).
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: bargool от 18-02-2016, 15:21:17
Вычисления могут запускаться на всех компах в конторе, т.е. без моего кода "наделать делов" они могут только у себя. С PS в этом случае - на компах всех проектировщиков.
Код же выполняется не в песочнице? Это, конечно, паранойя, но хотелось бы ограничить возможности только вычислениями математики
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Андрей Бушман от 18-02-2016, 15:29:04
Вычисления могут запускаться на всех компах в конторе, т.е. без моего кода "наделать делов" они могут только у себя. С PS в этом случае - на компах всех проектировщиков.
Код же выполняется не в песочнице?
Для работы в PowerShell с удалённым компьютером необходимы права администратора [домена]. Если этих прав у юзера нет, то сессии PowerShell он сможет создавать лишь на localhost. Ты можешь ограничивать наборы cmdlet, доступных пользователям в рамках созданного тобой объекта PSSession.

Это, конечно, паранойя, но хотелось бы ограничить возможности только вычислениями математики
Дело твоё.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Дмитрий Загорулькин от 18-02-2016, 15:32:58
NCalc дает возможность не только вычислять математические выражения, но и использовать параметры. В качестве параметров могут выступать любые типы объектов, даже объекты AutoCAD (например - Point3d). Для их обработки можно довольно легко и быстро добавить нужные функции. Я сильно сомневаюсь, что инструмент вычисления выражений в PowerShell имеет тот же функционал.
Название: Re: Комментарии к ссылкам на открытые .NET проекты.
Отправлено: Андрей Бушман от 18-02-2016, 16:03:11
Я сильно сомневаюсь, что инструмент вычисления выражений в PowerShell имеет тот же функционал.
Ты "сильно" не знаешь возможности PowerShell. :) Он позволяет не только использовать параметры, но и самому на лету формировать произвольные, нужные тебе определения функций с последующим их использованием. Так же можно создавать переменные, в т.ч. и такие, которые представляют собой ссылки на функции, которые (в свою очередь) можно передавать в качестве параметров в др. функции. Кроме того, строки, заключённые в одинарные кавычки, обрабатываются иначе, чем строки, заключённые в двойные кавычки (что само по себе, как показывает практика, является очень удобным подходом - подробности легко находятся в справке и гугле).

Цитата: Дмитрий Загорулькин
В качестве параметров могут выступать любые типы объектов, даже объекты AutoCAD (например - Point3d). Для их обработки можно довольно легко и быстро добавить нужные функции.
Напугал ёжика пятой точкой. :) Всё это так же доступно в PowerShell. Сразу видно, что ты не смотрел мой "мультик" по теме хостинга PowerShell в AutoCAD...