Plugin Driven Design Technique needed? [closed] - plugins

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 4 years ago.
Improve this question
A project that a group of mine is starting is going to be focused around the use of plug-ins which are extremely specific to the user. We are trying to essentially create an application that without the plug-ins is nothing more then a running environment, and hence will be driven by the addition of the user-specific plugins.
I am not too experienced in this area of designing the application around plug-ins. How should I go about this process of creating a basic, essentially abstract application, and then creating these "dynamic" user-specific plugins to be used by the application?

As 'hobbs' pointed out, knowing the language would be beneficial to getting a better answer!
But regardless, I'll give you details on the Command Design Pattern which is frequently used in Java or any other object oriented languages.
See Command Design Pattern - Wikipedia and
Command Design Pattern - Java Tip 68 (for implementation details)
I use this pattern frequently when I know I will want to run 'plugins' in a generic manner (sometimes when I don't have all the details at that point in time). With more specs and/or security constrains you would want to alter this pattern respective of such constraints and include sandbox limitations, etc. That is all up to you!
Your client would begin by writing plugins using the interface you provide them (see links above). With a compiled class, your clients would then be able to drop their plugins into a folder for example.
When your application is ready to run the plugins, you would load a list of plugin candidates (either an xml file or scan the class files within a specific directory) and load each class in order to execute them one by one.
You can decide if you want to run these plugins in a specific sequence or in parallel (threaded design).
Note that if your plugins must access a specific state or API, you can provide it as a parameter to your plugin.
All of this works beautifully and I'm sure it can easily be adapted to fit almost any language.
Good luck,
Jeach!

Related

InterSystems Cache ObjectScript vs Java as in Web application development [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 5 years ago.
Improve this question
Recently My Project Manger has asked me to work on InterSystems Cache ObjectScript. Earlier i used to work as Java Developer (J2EE). So my question is how different is Cache from java. Comparison would be great to have.
Caché ObjectScript is very different from Java and has very little in common. It is more like dynamically typed compiled scripting language with meta language built in (class definitions) and with a large number of features you need to know to write the good code. All the code is compiled to a low-level (but pretty readable) so-called routine code and is processed by DBMS Caché and its application engine.
Take for example this reference. As you may notice, there are many weird symbols and structures like $, $$, $$$, ##class, &sql(...), &javascript<...>, #dim, $System, .#, $get, $zu(...), %, ^%, { ... }, ... (this list is big). Some of the language features are very unpredictable from the first glance. For example, function $get(...) looks like a fundtion but silently acts like a try/catch statement, as well as $data and some other system functions.
So prepare to work with InterSystems documentation! Also, recently developed InterSystems community is a great resource. And while Googling, you may find quite a few answers out of the internet, but just keep in mind to search with “intersystems” or “objectscript” keywords. But many things you won’t find there, and in this case you should use InterSystems docs or community to ask the questions. Once you will get used to the language (which for me took over 6 months), you will feel more confident in it.
Also it is worth mention that Caché ObjectScript is literally “dinosaur” language, which involves and upgrades over time. That’s why there are so many different features. Some of them you shouldn’t use anymore: for example, instead of writing code in routine, like people did before OOP concepths were introduced, you should use classes. ObjectScript’s JSON capabilities (ability to write JSON inside ObjectScript) was intoduced just approximately 1 year ago. And you may find a plenty of “prehistoric” code in Caché and should take it normally: it is a really huge ecosystem.
Hope this helps, happy hacking!

Planning Application development for a single developer [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
Im wondering how to kick-of projects for a single developer in proper way.
There are a lot of reasons why its not a good idea to just sitting down and hack the solution you want to reach without any plans or organisations.
In professional software engineering, there are a lot of required steps for planing a piece of software (like writing a vison and scope-document, doing requirements engineering and finaly planing the architecture).
But what are the common way for planning an application development endeavour for projects with just one single developer. For example: Do you use architecture-tempaltes like the well known arc42-Template. Do you thing its a littlebit unduly to doing such steps just for ideological reasons or is this the only right way?
What kind of Design-/Architecture-Templates so you use for planing projects?
Although you are a single developer I would consider using a Methodology for your development.
When you are working alone on a Product you will have to take up several roles to keep an overview.
I would recommend to use the RUP-Process.
It is an agile development approach which can be used be small or bigger groups. Although you are working alone you will profit from this methodology as it will make your Implementation easier. You can adapt the methodology to your needs and decide what is necessary or not for you.
The RUP-Process consitst of 4 Phases.
Inception:
In This Phase you are gathering all Requirements. Which means that you write down what you actually want to do before you start coding. Coding directly will quickly limit your creativity as you will soon encounter errors and forget what you actually want because you have to fix one problem. Take a week or two and write down everything you expect from your application. What it has to deliver or what could be a plus (in the next release for example).
Elaboration:
First you make the architectonial decisions. What db will you use. What language etc. Then you start coding. You are coding arround 80% of your application, leaving the hard stuff out at first. In this Phase you should finish the main parts of the GUI and have bindings to the methods used by the GUI. They do not have to be finished.
Construction
Now you tackle all Programming problems left and all the little errors which you have left out in the Elaboration Phase. It might be that you encouter new requirements. Estimate how long it would take you to add them in this release. You can then decide if you want to finish it or save it for the next inception phase. You should also finish all comments for the methods in your application.
Transition
Now you are Testing the Product before delivery and fix the last errors. Also you should be writing a Documentation of what you have implementet. If you have writting something down in the Inception it should not be to hard for you to write documentation.
When finished you can start another Cycle again starting with the inception.
CONS:
- It might be an overhead having a methodology for only one developer
- You might get annoyed
PROS
- You will have good requirements
- Your Development Process will be faster because you do not have to reconsider your next steps while developing. You have done that in the inception
- You will have a good documentation of what you have built
- You can build a timeline and predict when you will be finished
- You can predict what will be finished with this realease
- If you need help you can give parts to other developers. You are prepared if you need help at somepoint.
At the moment I am the only developer in a Project. With this Methodolgy we can keep track of the process and it helps to coordinate my tasks.
You should also definitly use GIT to secure your process.
UPDATE
Planning of the Architecture/Software itself.
First you should check where you want to use the Software. There are numerous possiblities.
a. Web Applications
b. Mac/Windows
c. Iphone/Android etc.
The first thing you have to decide is where is the Software to be used. If you use it on a Mac or Iphone you could work with Apples new Language Swift
If you work on Windows you could use C#
The Andvantages of these languages are that they are optimized for the System and will deliver you more possibilities then Java or C++.
Now this is only one example. If you need a really fast program, where you can do a lot of optimization on the lower Level you could use C++.
If you want an application that you can theoretically use on both System you could use Java. Although from my experience you will have to do lots of modifactions if you want to publish it on multiple Plattforms.
Your coding skills are also important. It depends on what you can code and what your are willing to learn. Each programming Language is optimized for a porpouse. Python, Javascript, Lisp etc. are also really great languages. It depends on what you need.
First Step
Decide the field of operation --> choose the fitting Language
Second Step
Decide if database is needed.
If you have a simple program you may not need a Database. However databases are a great way to perserve data and offer a lot of functionalities.
For local Applications you could use SQLite. It is a simple Lightweight Database which can be accesed from any language.
If you need more database featueres. Make a research on what the databases offer and which one you need.
Third Step
Start building the Application (a skeleton) and test if your Architecture is durable. You may still change your architecture at this point if you encouter that it is to complex.
I will give you a short example for an app:
You want to build an application that sorts all your Mp3-Files in playlists. Basically a better player then Itunes. But you would want it on multiple Systems.
First Step
- File handling (complexity low)
- Multiple Systems (complexity high)
-> node-webkit
You can build cross plattform Applications with node webkit where you can Access folder etcs. The Corresponding programming language would be Javascript while using HTML5,CSS,Jquery etc.
Second Step
In order to organize the MP3s you will need a database. You will only load the links to the files in your folder so the complexity of entries and the load on the database is low. You can use a SQLite DB here. You could use node-sqlite3 whith your app.
Third Step
Build a scratch application in which you can upload a file or load a file in a folder. See if you setting is working. If yes continue with the building of your app. If no start from Step one and decide whats missing.

Is it easy for a PHP Developer to create own framework? [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 9 years ago.
Improve this question
I would like to create a website similar like imdb.com. Whether imdb.com uses any framework? if so which framework it uses? Otherwise are they developing on their own? Is it easy for a normal PHP developer to create my own php framework?
As a PHP developer:
I have my own php framework, So you can say it's not so hard; But you must first learn how other frameworks work... And decide what your framework need to do... Which design patters you agree with...
Most of big websites didn't use famous frameworks, Or even their own frameworks... Mostly using a plenty of libraries... Because when you use a framework you code faster but you waste resources as RAM, CPU IO/Disk...
A well programmed application is this one that use 100% of its code source, It's good to go OOP, MVC... But not in the way most of frameworks works... This what is life less working time cause a less quality project.
There are two reasons why you would want to create your own framework:
Learning purposes, it's a great learning opportunity because you
will learn a lot.
This one I highly doubt is a issue for you, but
If you believe your framework can be different and better in some
way than those already existing, go for it.
A framework isn't the application, a framework is a tool set that lets you get straight on the application itself, instead of writing a database abstraction layer you learn how built-in in works and writes the busniess logic your application needs.
Developing a new framework is not a trivial or easy work at all. Even for a team is difficult to handle, so be extremely sure you need to create yet another one before starting.
Instead, use open source, well known solutions, so that bugs are likely to be triaged and fixed. There are many which are available even for commercial use. Just choose your favourite one: Symfony, Code Igniter or Kohana or whatever and start building your application on top.
As of IMDB, probably they are using a framework, but there is no way to tell what if any.

How to create a simple document assembly application for Word documents? [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 5 years ago.
Improve this question
I need to create a simple document assembly application to create Word files. We work with multiple templates, some derivated from others. So, instead of having tons of templates I would like to create something that uses a standard template and allowes me to change the header, footer and different other sections in the document based on my needs.
For example: I will choose a template, then a different introductory paragraph, then a secondary paragraph and so on.
I tried a solution in Infopath, but not sure if this is the simplest one. If you have any suggestions please let me know! (and another thing I am new to this, so no programming clue, but learn quickly)
Thanks,
If your question were programming-related then a tutorial like the following might be relevent: Word automation using C#.
However, because you have "no programing clue" I don't understand what kind of solution you're looking for (and, "Word automation using C#" is probably not it, because it requires a knowledge of programming).
Word automation using Office Interop (COM) is not recommened for server side scenarios (https://support.microsoft.com/en-us/kb/257757).
If you have to create solution for several users, then you will need a toolkit which supports server side installation. You will probably soon realize that free libraries won't meet your needs and will start looking for 3rd party products.
I have experience with one of such toolkits that can solve your document requirements by using subdocuments or by using conditional content. Since you don't have programming experience you can use MS Word for template layout and conditional logic.
You could turn to a program that already allows for that. Pathagoras offers a monthly subscription to lower the need for a large amount of capital upfront.

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.