Which Workflow Engine do you recommend? [closed] - workflow

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 9 years ago.
Improve this question
I am kicking around the idea of using a workflow engine on this upcoming project. We know that there is a lot of caveats with using a workflow engine and we have a lot of development experience in many platforms so we would be willing to let the choice of workflow engine take precedence over our favorite toolset or developer IDE.
We are more interested in internal workflow (i.e. petri net for easily changeable ERP purposes without involving additional coder time) than external workflow (i.e. aggregating SOAP calls into a transaction aware, higher level SOA). Which workflow engine would you recommend? We have superficially looked at offerings by Oracle, Microsoft, and some open source stuff too. It's all very overwhelming so please respond only if you have real life experience with implementing internal workflow.

If you can use a state machine, then I'd recommend an open source project called StateLess by Nicholas Blumhardt (Autofaq creator). His approach avoids the issue of long running workflows being held by a runtime engine, as the state is defined by a simple variable such as a string or int.
Here is a sample state machine:
var phoneCall = new StateMachine<State, Trigger>(State.OffHook);
phoneCall.Configure(State.OffHook)
.Permit(Trigger.CallDialed, State.Ringing);
phoneCall.Configure(State.Ringing)
.Permit(Trigger.HungUp, State.OffHook)
.Permit(Trigger.CallConnected, State.Connected);
phoneCall.Configure(State.Connected)
.OnEntry(() => StartCallTimer())
.OnExit(() => StopCallTimer())
.Permit(Trigger.LeftMessage, State.OffHook)
.Permit(Trigger.HungUp, State.OffHook)
.Permit(Trigger.PlacedOnHold, State.OnHold);
// ...
phoneCall.Fire(Trigger.CallDialled);
Assert.AreEqual(State.Ringing, phoneCall.State);
Your state can be an integer which will allow you to feed it the current state from a database. This can be set on the constructor of the state machine as follows:
var stateMachine = new StateMachine<State, Trigger>(
() => myState.Value,
s => myState.Value = s);
You can implement this in just one assembly, compared to the multiple projects you need to run Windows Workflow. Maintenance is extremely low, there is no "designer" that generates code for your, etc. Again, it is simple, and there lies the beauty.

I've deployed both K2 and WF systems in the past. K2 is quite strong, but spendy. WF is an underdog, but improving quickly. Both integrate with the .NET stack (MOSS specifically) quite well and both have very good tool integration. Both are relatively easy to develop for once you understand the workflow model.
You can get solutions support from many different MS partners for both, although my guess is WF is a bit easier to get solutions support for (i.e. more partners have more consultants who know WF than K2).
Unfortunately, I don't have any experience with the Oracle product or the open source alternatives you mentioned, so I can't comment on those.
If you are overwhelmed, I recommend you take a look at the WF Virtual Labs (bottom of the page). They will let you get your hands on the technology, get the lingo down, go through a few scenarios. Once you have that, understanding how WF can fit into what you trying to do should be substantially easier. Also, I can recommend Essential Windows Workflow -- very good book. Here's a good intro on WF 4.0 from PDC.

Related

Which of these technology to use for BPM / Workflow engine? Any comparison of features? [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 9 years ago.
Improve this question
Which one is the best for BPM/Workflow Engine? YAWL, XPDL, jPDL, BPEL or BPMN (different versions)?
Is there any comparison of the technologies so that I can find what best suites my needs?
It seems more people suggest BPMN or BPEL, but I don't get why. I found about XPDL and that its features are a superset of BPMN, and also that it can be converted to BPMN and BPEL both without loss (although reverse is possible easily with BPMN only).
Again please, I am asking for technology advantages and features and not tools/softwares available.
The short answer (maybe biased but hopefully helpful in its shortness): the best choice is BPMN 2.0.
The long answer is the following:
BPMN is the OMG managed business process model and notation standard and since the adoption of version 2.0 one can safely say is also the de facto standard for process modeling, especially when the ultimate goal is not just visual process modeling but execution of the process definition in a process engine. All the major BPM suite vendors (like Oracle, IBM, SAP) as well as the most important Java Open Source Engines (like camunda - an OSS project I contribute to - or Activiti, jBPM) nowadays support BPMN.
XPDL is an effort to make different process definition formats exchangeable. As their website states up to and including version 1.2 of the BPMN standard, BPMN only defined "the look of how the process definition is displayed on the screen. How one stores and interchanges those process definitions was outside the scope of the standard". Since BPMN 2.0 (Business Process Modeling and Notation) this standard introduced a xml based meta model including the ability to serialize process models and diagrams, exchange them in between modeling tools and also execute them in process engines (after having added technical attributes needed for that technical execution).
jPDL used to be the process definition language of the jBoss jBPM product until version 4 of it. Since version 5 of that product (which was a reimplementation from ground up) this product also supports BPMN as its process model and notation of choice.
BPEL is an OASIS specified XML based Business Process "Execution Language", therefore focused on executing the language in process engines. Until the introduction of the afore mentioned BPMN 2.0 XML meta model, it was the executable language of choice of many process engines (aside e.g. jBPM and others which used their own formats.). It particularly also was the language of choice in case one wanted to transform a BPMN 1.2 visual process diagram into some executable language supported by process engines. Nowadays vendors and open source projects are all moving in the direction of BPMN 2.0 - which is directly executable and therefore does not need a step of translation in between the visualisation and the underlying model. Therefore I'd argue that the BPEL will become less and less important and eventually even completely obsolete one day.
YAWL (according to their website) seems to be more a "BPM/Workflow system" than a language, but one that is built upon its own proprietary language. I do not know much more about it.

Best IDE for PLC ladder programming [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
Recently I trying to learn Ladder Logic programming for PLCs, but I want to know if there is any IDE to create Ladder programs better that Step7 or cx-programmer? Is there any plugin for Visual Studio or Netbeans that I can use? Finally, is it better to work with PLCs under Linux or Microsoft Windows?
UPDATE 1 : After googling about this, I found out that Ladder programming is not depend on the PLC brand or its model, so I did not mentioned any brand in my question.
What is your goal? In almost all cases, your IDE is dictated by the PLC manufacturer, and your PLC brand is spec'd by the customer when they buy the machine. They spec the PLC because they need to have something that they can go online with for maintenance and troubleshooting. Since the software is proprietary and absurdly expensive, they don't want to get a new software license for every machine in the plant and have to relearn new software, while they are bleeding money of manufacturing downtime.
So if your goal is to enter the industry, you want to find out what plants in country tend to use. In North America it's usually Allen-Bradley a.k.a Rockwell Automation, which is programmed with RSLogix 5000 (edit: the recent versions of RSLogix 5000 have been rebranded as Studio 5000). In Europe, it's typically Seimens, but I have no experience with them.
PLC IDEs are almost always picked hardware first. With some obscure exceptions, you pick the hardware you want to run, and this determines the IDE. The IDEs are all proprietary and unique to each hardware platform. Rockwell Automation alone has three different IDEs to support their hardware lines, all licensed individually and very expensive.
If Omron is the most common in your area, it's a good idea to start with them. Once you get used to one type of PLC, learning more is really easy.
If you don't mind which PLC platform you're using, I really enjoyed my time with RSLogix. They have a free, training-level suite available here:
http://www.ab.com/linked/programmablecontrol/plc/micrologix/downloads.html
I prefer RSLogix 5000. It's one of the easiest to work with and has User Defined Types and Add On Instructions to help with reusability.
ABB has Control Builder (which is the product that I work on), AFAIK when somebody buys our AC800 controller they get the CB for free, at least the so called "Compact version" which is file based. The CB has ladder diagrams as well as all other 1131 languages plus some extensions like Function Diagrams.
Disclaimer Sorry if it sounded like an ad, just very passionate with what I work on.
I am primarily a high level language programmer, but have also done development on various PLC /PAC platforms, including Rockwell, Siemens, and Beckhoff.
If your goal is to merely get an introduction to ladder, nearly anything will due. You can download Beckhoffs TwinCAT software for free. It is only a 30-day license, but you can just continually reinstall every 30 days without issue. The great part of TwinCAT is that it runs on a Windows PC, so you can develop and test code directly on the PC and don't need actual Beckhoff hardware to play with. The ladder is a bit quirky, but the statement list portion is by far one of the more powerful. If you are a C-programmer you will feel very comfortable with Beckhoff, because they have duplicated a lot of C-like functions (e.g. memcpy and setcpy) into their libraries.
The Beckhoff platform is not all that widespread, but it would allow you to learn the principals of ladder and PLC/PAC programming.

What would be the best language/library choice for writing a scalable webservice server? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 11 years ago.
Improve this question
I've been engaged in a project to write a game dissemination and service platform, which would enable game developers to easily outsource game distribution and updates as well as offering certain parts of multiplayer/community such as achievements, rankings, friends and such as a webservice in form of either SOAP or REST API.
I'm not sure how viable it is in terms of attaining market share, but none the less the application should be written as to scale horizontally well in order to absorb any quantity of possible users. Since the project is still in it's early stages I have some degree of influence regarding the language and technologies to be used.
So far my research has narrowed the choice down to either Erlang or a JVM based language.
Erlang is widely known for it's focus on scalable and fault-tolerant distributed applications and proven track record, but on the other hand it's library ecosystem is nowhere as rich as JVM's.
JVM languages on the other hand enjoy a big community with a multitude libraries, many of which strive to provide for distributed and reliable services, such as Terracota or Akka (which seems to be inspired by Erlang, though I'm not sure how much of it's strength it approaches and would like to hear about it).
Since language productivity is of equal importance as platform strength and reliability I would lean towards Scala or Clojure over Java if I were to use JVM.
Of course if you think there is another language (JVM or non-) better suited to such a task I'm interested to hear about it.
I wouldn't like to read a bulletpoint list of language's cool features as that's what I can google by myself, I'd rather be interested in your own experiences with writing such an application (a bit in the vein of those blogposts - link), though not only concerning raw performance but also language and library issues.
I would like to hear what your (or your company's) language and technology choices for such a type of project were, what motivated such a choice, what your experiences using the chosen platform were and did it ultimately deliver.
All insight will be greatly appreciated ; )
Given your initial interest in Erlang, I'd have to say Scala.
Scala actors were directly inspired by Erlang, and Akka started (long ago now) as a port of Erlang's OTP to the Scala language.
Both Scala and Akka are robust solutions used in commercial settings, and are well supported by the recently formed "Typesafe" company. Plus, you get all your stated advantages of running on the JVM platform.

What options are there for Free for commercial use NoSql Datastores for the .NET world? [closed]

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
I've been looking around....
MongoDB seems to require a commercial license. http://www.mongodb.org/display/DOCS/Licensing
RavenDB has quite a costly scheme. http://ravendb.net/licensing
CouchDB, seems to be free for commercial use? But requires Apache, which is a bit of a pain.
Are there any other good options for .NET?
From my understanding, MongoDB is open source and free to use. There are two license types: AGPL v3.0 and a commercial license. There are a few minor restrictions with the AGPL 3.0, so some may need to remove these restrictions with a commercial license, but most probably won't.
So in short, I believe it is free and can most likely suit your needs.
It may or may not apply to you: if you're going to use RavenDB for a startup company, you may request a free license.
Of course, there's nothing preventing you from using a table in an ordinary SQL database as a simple repository for key-value pairs, which is essentially what a NoSQL database is.
This has the added benefit of still allowing you to use SQL where it is appropriate.
Cassandra uses Facebook's "thrift" (now Apache Thrift) RPC mechanism for its client layer. This is capable of generating C# output, which you can compile into a .NET assembly and call from a MS CLR application.
Whether Cassandra itself does what you want, is very much dependent upon what you want is.
https://github.com/mcintyre321/PieDb is a very basic MIT-licenced embedded document db wot I wrote
It
writes objects to app_data using json.net serialized documents
uses Lucene.Net.Linq to provide basic IQueryable support
optimistic concurrency
requires no configuration
It would be nice to get some other developers behind it, as it's only had about a weekend of work on it, but it works for simple cases as a RavenDb replacement.
Google has released a beta preview of their Cloud Datastore (previously only available for App Engine apps), but now can be used via their JSON API. It is free up to 1GB with 50K calls per day and there is a paid option after that.
GCD is rather low level, but I wrote a .NET ORM for it called Pogo that supports LINQ. The API is inspired by the RavenDB client API.
The source code and documentation for Pogo is available here - http://code.thecodeprose.com/pogo, and it is also available on Nuget.
For .Net there is also FatDB, which we used for a smaller project. They have a one year demo version : http://fatcloud.com/

Windows workflow [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
Can anyone explain what is windows workflow and how can we use in the work organization.
Windows Workflow Foundation is a fascinating concept. It allows you to create powerful applications (or just parts of them) using a combination of flowchart-like concepts and normal code.
The deeper value of this may not be immediately obvious. Say you're building a large e-commerce site. Over time, your workflows for processes such as fulfillment will change radically. The code will eventually become a horrid cludge of ideas shoehorned over old ideas. You will be forced to work up reams of documentation and in time it will become difficult to maintain.
So, workflow is ultimately about creating highly maintainable code with the idea that code will change. When you look at it, you're looking at a flowchart. Double-click on a node and it takes you to a code editor where you can write some business logic.
It's a lot more involved than that of course.
I have a book on this sitting on my desk right now. I am trying to determine whether the .NET implementation is ready for prime time or if it's still too new and complicated - and it is complicated, moreso than I expected.
At this point, I think the idea has the potential to be a game changer... We will see if the current generation is actually usable! The fact the Microsoft is not pushing it that hard is probably telling.
WF is a framework for creating workflows. It consists of a type of workflow (state machine or sequential), hosting different "activities" and logic controlling how application flow travels from one activity to another.
You can use it for describing business processes, from page flow in an ASP.NET application to the steps required to submit a vacation request.
Here's a great article about WF.
The Workflow Way: Understanding Windows Workflow Foundation
Windows Workflow Foundation puts the inner core concepts of development part right in front of you. So it becomes a little complex but a very powerful way of working and creating builds.
The basic Idea of development using the flowchart like concepts makes it very intuitive, it becomes very easy to trace the complete code without going through the code as it was previously done in traditional way of programming.
There are different other features of using workflow like parallel running of execution, drag and drop facilities of activities, using built-in activities as well as we can write our own custom activities and we can use those activities wherever we want in any other project.