Open source expert system [closed] - open-source

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a book, tool, software library, tutorial or other off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 8 years ago.
Improve this question
does anyone know about a open source expert system? actually, I'm rather interested in calling its inferential engine from C#.

Both CLIPS and JESS are already mentioned in other answers, so I will supply this link to CLIPS versus JESS:
http://www.comp.lancs.ac.uk/~kristof/research/notes/clipsvsjess/
It was written June 4, 1999, and at that time the advantage was clearly with CLIPS.
If you don't want to read it all, here are the conclusions:
Chapter 3 The conclusions
Both CLIPS and JESS are products with a large support on the internet,
but CLIPS seems to have a broader audience, probably because it exists
longer. This difference in age results in the CLIPS package being more
stable and complete, while JESS users will still experience some minor
bugs. JESS is constantly updated and the author, Ernest Friedman-Hill,
has been very responsive to user/developer feedback and regularly puts
out new releases and bug fixes.
Nowadays, the choice between JESS and CLIPS depends on the
application. If it is web-based or should reside in applet-form, the
choice of JESS is a very logical one (which is even supported by the
authors of CLIPS). For the more classic applications, CLIPS will
probably be chosen because of its reputation of being more stable and
having more support.
The future of JESS depends highly on the evolution of the web, the
Java programming language and its own future stability. These three
conditions make that there is a great possibility that JESS will
become more popular and more frequently used. Especially the
object-oriented possibilities and the easy integration into Java code
makes JESS’ future very promising.
CLIPS, on the other hand, is more likely to implement the new and
sophisticated features first as they come out, since it still has the
advantage in time. CLIPS has also various extensions and variants(like
FuzzyCLIPS, AGENT CLIPS, DYNACLIPS, KnowExec, CAPE, PerlCLIPS, wxCLIPS
and EHSIS to name a few) that give it an advantage with respect to
support of methods like fuzzy logic and agents.
The multifunctional developing environment of CLIPS for operating
systems that support windows is also an advantage, while JESS has just
one window with two buttons (‘clear window’ and ‘quit’), without a
menu. Figures 1 and 2 depict both environments.
To summarize, CLIPS is still more complete and stable than JESS, but
this might change in the future, since the JESS package is being
improved constantly. Besides that, JESS has also the property of using
Java, which in the long run might prove to be a big advantage over
CLIPS.
These links may also be of interest:
http://en.wikipedia.org/wiki/CLIPS
Commercial & Freeware Expert System Shells
http://www.kbsc.com/rulebase.html
Are there open source expert systems with reasoning capabilities?

I went through the same process, about a year ago, trying to find a good .Net system for this. I recall finding a few decent engines, but they were all too general, and required too many assumptions.
In the end I found that writing my own system was pretty easy to do, and it did exactly what I wanted it to, without any extra bull to make it work with some abstract generalized engine.
It might help to know what your intended use is.

Take a look at CLIPS -- it is coded in C.
There's more info on CLIPS at Wikipedia.

If you'd consider a rule-processing engine, JBoss Rules (also known as Drools) is the best that I know of. Open Source and free. It's written in Java, but designed for integration. You can incorporate objects in the rules and rule-base applications in your components. You can even build or modify rule-bases on the fly.

AI::ExpertSystem::Advanced or AI::ExpertSystem::Simple is a Perl solution.

You can try JESS, but it is Java-based. Amzilogic also provide a good platform.

Related

Is there any free software other than ProR to create ReqIF documents? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 8 years ago.
Improve this question
I have tried using ProR to create an ReqIF document. It is cumbersome and contains a lot of bugs, since it is in its alpha state now. Another constraint that I have right now is that I cannot use proprietary software like IBM Rational DOORS. Are there any other such tools to generate ReqIF documents? Are there any alternatives to ProR?
I am the project lead on the Eclipse ProR project, and I am sorry to hear that ProR is not yet up to it for your needs.
As far as I know, there is not even commercial support for ReqIF available (please correct me if I am wrong). DOORS currently only supports RIF 1.2. Also, please keep in mind that ReqIF 1.0.1 only got released in April 2011 - that's not even a year. It takes time to write software. :-)
A possible alternative for you may be to use a RIF tool and to write yourself an XSLT script to transform RIF into ReqIF.
Another alternative is to work with RIF 1.1 or RIF 1.2 for the time being. There are many commercial tools supporting that standard, although I am not aware of a single one that is free.
The third (and to me preferred) option would be if you could give ProR another chance, and help to improve it. Specifically, if you could give us clear, reproducible bug reports, that would be fabulous. Also, it would be incredible useful if we knew how you plan on using ProR (what are your use cases?). We are actively working on ProR right now, and respond fairly quickly.
Here is the link to file a ProR Bug in Bugzilla
The best place to discuss usage and use cases is the RMF Forum
And last, for reference, the ProR project web page
Shriram,
RIF 1.2 files generated in DOORS 9.x do not conform to the schema - that's at least what we have experienced at a customer site.
If you want to transform RIF 1.1a, 1.2 or XLS to ReqIF (and vice-versa), you might want to try http://www.pyrrho.com/en/ReqIF/ReqIF-Intro.htm. They run an online conversion service, which is currently free - I do not know what the future plans are.
I have heard from a colleague that the User Interface of Pyrrho is not quite intuitive, but I have tried it and it works. The XLS to RIF/ReqIF transformation is still limited, as all datatypes are interpreted as strings, so far. It is generated from the models, so it should be complete, otherwise.
Our tool, the ReqIF Server (http://www.reqif.de), is free for university projects, but not complete enough to create a reqif file from scratch. You can edit existing ones, though. Or convert RIF 1.1a to 1.2 and vice versa.
Best regards, Oskar
I am project member of the ERA ReqIF editor.
We have implemented an EMF/Ecore representation of a subset of the ReqIF model.
Still, we store files primarily in EMF XML format.
Our little converter to ReqIF XML format is yet a prototype and very alpha (because we focus on our user-configurable GUI...).
In conclusion, ERA will not help you, yet. But I just wanted to let you know.
Probably you are interested in tracking our project in the future.
(We are a small private team and it will take us some time.)

Copy Paste vs. Reference [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
My question is in regard to referencing open source frameworks. There are many of them for many different purposes. I personally leverage several of them in a single project. For example:
Unity
CAL/Prism
ValidationAspects
EnterpriseLibrary Logging
EnterpriseLibrary Exception Handling
EnterpriseLibrary Caching
Caliburn
All of these frameworks have helped greatly from a development effort perspective. There are however some negative aspects involved:
Tons of dlls (15 from the above list).
Application level (non-common assemblies and new assemblies) must reference many core dlls, which can be confusing) and tons of different namespaces are involved.
Deployment of said tons of dlls can get problematic (I sometimes use ILMerge to alleviate this and the above problems, but let's put that aside for now).
Open source project lifetime - open source projects come and go, so if any of these become no longer actively maintained, it can be concerning if there are internal bugs that need fixing or enhancements we want.
Obfuscation of "how to do things". We don't actively leverage every part of the above frameworks. In fact, several of these frameworks have overlap and provide redundant components and functionality. In terms of development, this can be confusing. We want a consistent implementation that is straightforward and easy to understand across our code base. Having multiple areas that do the same thing in different ways can be troublesome in this respect. This is probably one of my biggest concerns.
You're in big trouble if these frameworks reference different versions of other assemblies (ie. one internally references Unity 1.1 and another Unity 2.0).
The alternative? Include the source code in a common dll for your project(s) (ie. MyProject.Common). Let's put aside the issue of adherence to license requirements for the time being.
This has several negative implications too:
It's not as easy to leverage updates released by the framework's provider - you need to update your source code.
Encapsulation of functionality - it's easier to break this paradigm when the source code is all in your hands.
So, I know people probably have lots of opinions on this...and I'd like to hear them.
Thanks.
For some aspects of your problem, this might be relevant: http://en.wikipedia.org/wiki/DLL_hell#Running_Conflicting_DLLs_Simultaneously.
Another common solution to this problem is to write an encapsulation layer on top of the functionality needed, which at least protects your code from wild changes when upgrading to new versions of supporting libraries.
As to open source project lifetime, it should be clear which projects are healthy and which are not. For example, a project that is part of the Apache or Eclipse foundations are probably healthy, whereas some random thing on sourceforge is probably not. Generally, you can avoid this problem altogether by avoiding projects that do not seem active.
For the negatives to copying code into your project:
I know you wanted to put license aside, but you cannot in reality. I am not a lawyer and you should consult with one for your project if there may be issues, but if you are developing a proprietary system it could become GPL'ed accidentally.
It makes your development environment more cluttered. You have to worry about making sure the copied-in code ompiles properly, is being compiled with the right version, and has the right build scripts. You also have all this extra code in your IDE that takes up space.
As you pointed out, it makes updating code very difficult.
If you have to file bugs with the Open Source project, it becomes more difficult to do.
If you're not careful, a junior developer who doesn't know any better could go into the code and start mucking around with it.
There's probably more reasons not to do it, but that's a few. Hope that helps.

Getting started with Tcl TK? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 8 years ago.
Improve this question
One of my modules at university next year is going to involve programming in Tcl tk, I was wondering where to find the best resources and information about the language, so that I am well prepared. I'm currently looking on this site which is pretty helpful, but the book that they recommend is quite old, and I was wondering if someone could recommend any other books to purchase or if the language hasn't changed significantly since the release of the book in 1999?
Also, what projects or examples should I start working on to make me familiar with the language?
Any other information would be extremely helpful and appreciated!
I posted this question because I couldn't find any others similar too it, apologies if I haven't looked hard enough.
Thanks in advance,
Some of the books I have in my library that you might find useful are:
Tcl and the Tk Toolkit (Ousterhout) - The book on Tcl/Tk, and probably the one you're referring to. It's old and some of the information is a bit out-dated, but it is fantastic (and, I believe, I say that without exaggerating) at showing how to program in Tcl. It was written by the originator of the language.
Practical Programming in Tcl and Tk (Welch) - The other book on Tcl/Tk that nearly everyone that programs in it seriously has in their library. Brent did an amazing job on this book.
Effective Tcl/Tk Programming: Writing Better Programs with Tcl and Tk (Harrison, McLennon) - Once you get to larger, more complex, programs, this book can be very handy to have read. It goes into organization and the like. This book is likely beyond what you need at the moment, but I mention it because it's a very good read as you get deeper into Tcl.
It's also worth bookmarking the Tcler's Wiki. It can feel a bit unorganized at times, but there's more information there than... well, anywhere. It's an amazing resource.
The ActiveTcl distribution is, indeed the way to go. The folks over at ActiveState are a smart bunch.
Are you familiar with the Active Tcl distribution? If not, then this is the best place to start looking for resources and documentation.
You can also try TclTutor interactive application where you can not only learn the materail but also try it at once.
I also recommend Tcl and the Tk Toolkit. It is great for understanding the core of Tcl, though I can't comment on how useful it is as a reference (I use the online documentation for that). The second edition of Tcl and the Tk Toolkit is currently available as a "Rough Cut" from Safari Books Online (meaning that you can download a draft PDF now and a final PDF when the book is released). They seem to have added a bunch of information about Tk, especially the themed widgets that were introduced in 8.5. They also added some information to the section about Tcl, including dictionaries.
but the book that they recommend is quite old,
The fact about tcl is, it is quite old, the book by Ousterhout is still the best book on tcl (and IMHO, almost a classic). There was never even a second edition although one is apparently in the making. tcl was a great idea at the time and it doesn't really hurt to learn it, but it hasn't kept up and frankly had a lot of design issues from the start.
Don't get me wrong, I was a huge fan of tcl back in the day, but it's not the best thing to be learning now. If you decide to carry-on, pick up a used copy of the original book and use the online resources.
The original purpose of tcl was to be easy and free enough to eliminate the need for the myriad of home-grown command languages that folks were writing to add interactivity to their applications. Later, the Tk toolkit was added and it was the easiest, free way to add a GUI to an application.
Today, there are a lot more options available (for example for GUI's the Qt toolkit is now under the LGPL therefore almost as free at Tk.
For adding a command line interface to an existing C / C++ application, the closest modern tool is Lua, but even more powerful languages like ruby and python are not much harder to integrate with C/ C++ applications (especially with tools like boost python and SWIG).
An second edition of Ousterhout's book, updated and augmented by Ken Jones, is available. It has a release year of 2010, so the second edition is pretty current. Also, the wiki page http://wiki.tcl.tk/57 has a list of a number of books that deal with Tcl in some capacity.
Use this invaluable reference guide or this more up-to-date quick ref (thanks to Colin Macleod).
Able to program in Tcl may not land you a job, but it certainly can help you to get the work done fast. I learned Tcl back in 1996 and Tcl is still one of my favorite programming languages in solving most of my daily sys admin work. In most cases, I am able to accomplish the same task when my programming colleagues are still on the drawing board designing the object classes.
Besides from the great suggestions from other comments, I just have to add Tcl for Web Nerd by Philip Greenspun, the creator of the Tcl-based framework ACS (which later became OpenACS).
There is plenty of information on the Tcl Wiki, though it can be hard to find things. A look at the Recent Changes page will show that there's plenty of activity going on.
I have learnt it through Practical Programming in TCL/TK. It is a very good. Along with that TCL-TK toolkit book was also very helpful.
The most recent book I know of is Clif Flynt's Tcl/Tk: a developer's guide. The third edition was published in 2012 by Morgan Kaufman and it covers the (as I'm writing this answer) current version of Tcl: 8.6.
I've only had the book in my house for a week, but it looks to be quite thorough and I like what I've read so far.
I own and have read both Ousterhout's Tcl and the Tk Toolkit and Welch's Practical Programming in Tcl and Tk (2nd Ed) and I liked them both. But Tcl seems to have come a long way since my copy of Welch's was published and a very long way since Ousterhout's. There are some really important/nice things that have been added to the core language/library.
(Incidentally, I also thought the new paperback price was extremely reasonable on Amazon for an almost 800 page tome.)

What does it take to make a language successful? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
I have an interesting idea for a new programming language. It's based on a new programming paradigm that I've been working out in my head for some time. I finally got around to start working on a basic parser and interpreter for it a few weeks ago.
I want my new language to be successful and I want to eventually create a community around it when it's ready to release. The idea behind it is fairly innovative, so I don't expect it to gain a lot of ground in the business world, but it would thrill me more than anything else to see a handful of start ups use or open source projects use it.
So taking those aims into account, what can I do to help make my language successful? What do language projects do to become successful? What should I avoid at all costs? I'd love to hear opinions or stories about other languages -- successful or not -- so I can think about them as I continue to develop.
So far, the two biggest concerns on my mind are finding a market, access to existing libraries, having amazing tool support. What else might I add to this list?
The true answer is by having a beard.
http://blogs.microsoft.co.il/blogs/tamir/archive/2008/04/28/computer-languages-and-facial-hair-take-two.aspx
Although not specific to new programming languages, the book Producing Open Source Software by Karl Fogel (available to read online) may be contain some hints to the issue of making a community around your new programming language.
In terms of adoption of programming languages in general, it seems like the trend lately has been to have a rich library to make development times shorter.
As there isn't much detail on what your language is like, it's hard to determine whether adoption of the language is going to depend on the availability of a rich library. Perhaps your language will be able to fill a niche that has been overlooked by other languages and be able to gain users. Or perhaps it has a slick name that will draw people in -- there are many factors which can affect the adoption of a language.
Here are some factors that come to mind when thinking about recent successful languages:
Ability to leverage existing libraries in the new language.
Having an adapter to external libraries written in other languages.
Python allows access to code written in C through the Python/C API.
Targeting a platform which already has plenty of libraries available for use.
Groovy and Scala target the Java platform, therefore allowing the use of and interoperation between existing Java code.
Language design and syntax to allow increased productivity.
Many dynamically-typed languages have gained popularity, such as Ruby and Python to name a couple.
More concise and clear code can be written in languages such as Groovy, as opposed to verbose languages such as Java.
Offering features such as functions as first-class objects and closures which aren't offered in more "traditional" languages such as C and Java.
A community of dedicated users who also are willing to teach newcomers on the benefits of a language
The human factor is going to be big in wide-spread support for a language -- if people never start using your language, it won't gain more users.
Also, another suggestion that I could add is to make the development of your language open -- keep your users posted on developments in your language, and allow people to give you feedback. Better yet, let your users take part in the decision-making process, if you feel that is appropriate.
I believe that by offering ways to participate in the bringing up of a language, the more people will feel that they have a stake in the success of the new language, so the more likely it will gain more support.
Good luck!
Most languages that end up taking off rapidly do so by means of a killer app. For C it was Unix. Ruby had Rails. JavaScript is the only available programming system common to most browsers without third-party add-ons.
Another means of success is by fiat. This only works if you have significant clout. For example C#, as nice as a language as it might be, wouldn't be any where near as popular as it is now if Microsoft had not pushed it as hard as it does. Objective-C is the language of MacOS X simply because Apple says so.
The vast majority of languages, though, which lack a single killer app or a major corporate backer have gained success through long term investment of their respective creators. Perl and Python are prime examples. C++ has no single entity behind it, but it has evolved as the needs of developers have changed.
Don't worry about trying to make the language be successful; worry about using it to solve real problems and make real money.
You'll either make lots of money from using this language, or not. Once you have lots of money, others may care how you did it. Or not, either way you have lots of money.
If you don't make lots of money, nobody will want to know how you did it.
Edit based on comment: I define successful as people using it, and people use languages to solve problems, most for profit, thus successful == profitable.
In addition to making the language easy to use (which has several meanings), you should develop a comprehensive library that covers and also provides a good level of abstraction over (the following most important areas):
* Data structures and manipulation
* File I/O support
* XML processing
* Networking (plus web based technologies like HTTP/HTTPS)
* Database support
* Synchronous and asynchronous I/O
* Processes and threads
* Math
A well thought out framework that makes rapid development faster (and easier to maintain) would be a great addition. For this, you should know the currently popular frameworks well.
Keep in mind that it takes a lot of time. I think it took python about 10 years (someone please correct me if I'm wrong).
So even if your community still seems small after say, 5 years, that's not the end of the story.
"It's based on a new programming paradigm that I've been working out in my head for some time."
While laudable, odds are really good that someone has already done something with your "new" paradigm.
To make a language usable, it must build on prior art. Totally new is not a good path to success. My favorite example is Algol 68.
Algol 60 was wildly popular (back in the day, which is a while ago, admittedly).
The experts wanted to build on this success. They proposed some new paradigms, the effort split into factions. The purists put the new paradigms into Algol 68; it disappeared into obscurity. Some folks created a different version of Algol, called PL/I. It did not have any really new paradigms. It actually went somewhere and was used heavily. Another group created Pascal -- it didn't have much that was new -- it discarded things from Algol 60. It actually went somewhere ans was used heavily.
Your new paradigm must have a clear and concise summary so people can fit it into a context of where the language is usable, how it can be used, what the costs and benefits of using it are.
A "new programming paradigm" causes some people to say "why learn a completely new paradigm when the ones I have work so nicely?" You have to be very clear on how it helps to have a new paradigm.
The language and libraries must work, and work very, very well. A language that isn't rock-solid is worthless. In order to be rock-solid it must be very simple.
It has to have a tutorial that will help anyone get started with your language.
Good Framework for Common Tasks
Easy Installation/Deployment
Good Documentation
Debugger/IDE and other Tools
A popular flagship product that uses your language!
Good documentation, including a detailed reference manual as well as simple examples to get people started quickly.
Good library support so that people can actually write useful programs.
Most popular languages seem to be very strong in either or both or both of those.
Use Trojan Horse approach
C++ - The Forgotten Trojan Horse
An interesting article on why C++ can grab the heart of programmers successfully.

What rule engine should I use? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 6 years ago.
Improve this question
What are some of the best or most popular rule engines? I haven't settled on a programming language, so tell me the rule engine and what programming languages it supports.
I am one of the authors of Drools, I will avoid pimping my wares.
But some other options are Jess (not open source) but uses the clips syntax (which we also support a subset of) - which is kinda a lisp dialect.
It really depends what you want it for, Haley have strong Natural language tech (and they recently aquired RuleBurst - who has also interesting natural language tech which could deal with word documents with embedded rules - eg legal documentation). RuleBurst was able to target .Net runtimes as well (there is a Drools.net "port" available as well - I haven't seen what it has been up to lately, alas, not enough time). Ok I will put my pimp bling away now... sorry about that.
This is a great article by Martin Fowler, which is a discussion about when rules engines can be useful. You may find it helpful.
http://martinfowler.com/bliki/RulesEngine.html
Depending on what your requirements are, Windows Workflow Foundation (.NET 3.5) might be worth having a look at.
The .NET rule engine InRule supports WF and BizTalk; I've not tried it though so don't know if it's any good.
I have a bit of experience with both Haley Expert Rules and Haley Office Rules. Both nice systems, but I'd need to know a bit more abut what you want to use them for to answer definitively (See http://www.haley.com)
They both support C# and Java (and I think also a web service api).
The difference between the two is mostly around how much natural language modelling you want to get into. Office rules lets business users write rules in an Office document, and is mostly focused around legislative requirements modelling. Expert rules can be a bit more flexible in definition how it handles natural language, but requires more work defining language structures up front.
Hope some of that helps.
We've used both http://jatha.sourceforge.net and http://www.jboss.com/products/rules. They're both pretty good, but for the most part, JBoss rules seems to me to be overkill for a lot of what people do. They're both Java based.
It's worth remembering Greenspun's Tenth Rule of Programming and skip ahead to importing it :)
I've checked out JBoss Rules aka Drools and it looks pretty good. I'd love to hear from people using it in production, because I'm probably gonna need a rule engine in my current project as well.
Inrule see website is very good!
it is a .NET based rule engine with a solid SDK and a nice UI for non technical users.
Worked great for me in past - pretty much cut my development cost in half.
For very well understood, procedural rules (like eligibility rules, insurance rules, audit rules, etc.) then simple decision tables with a Domain Specific Language can give you the performance and simplicity without the overhead of RETE based engines.
A Java open sourced rules engine of this sort can be found at DTRules
I found another rule engine that supports different kinds of rules; Procedural, Inference (RETE) and FlowRule. This is quite flexible and extensible rule engine (also event driven). They had express version as free edition while ago.
Take a look at http://www.flexrule.com
WF is available already in .net 3.0. It is a bit buggy though on the Designer-side in Visual Studio and can get quite messy. I use it on Sharepoint (where WF is pretty much your only option anyway) and overall I am quite satisfied with it, even though the learning curve is rather steep.
Foundations of WF is a good book to start with it, as they implement a complete solution from beginning to the end and explain the concepts behind it.