Plugin dependency best practices [closed] - plugins

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
We have an application supporting plugins via interfaces. On the other side plugins contain lots of logic and code in themselves. Plugins have dependencies (project and dll references) to application libraries beside the interfaces that application exposes.
Application core libraries have lots of reusable components that can be used in plugins. But if any of these components change in anyway, both the plugins and application are affected, as both have dependencies.
Is it acceptable to have plugins containing dependencies on the system, that plugins extend? What are the best practices on this issue?
Please share your thoughts and experiences.

Take a look a Mono.Addins, even if you are not developing in C#, it will give you some great ideas.
The simple solution is to define a version system for the plugins and the core, so the core can read which version of itself the plugin needs. That way is easy to prevent the load of a plugin which was meant to be used with a previous version of the core.

I think there are two answers to your question, depending on the level we're talking about:
yes, it's fine to have a dependency of the plugin on the plugin host. The host is coordinating the use/execution of the plugin, but there is no reason for the host not to provide functionality to help the plugin do that. Extending that a little further, the host's dependencies may or may not be fair game for the plugin to use (this goes into the territory of "it depends...").
no, the plugins should not depend directly on code that the host could provide, except those objects that the plugin directly passes in. This is more a distrust on global state than a fear of circular dependencies.

I think it is totally fine to have you plug-ins referencing off of your core. Now you’re talking about project and dll references, so you must be using c#, vb or c++, these solutions all should be fine to use.
I typically have two projects, to get around the circular dependency.
Project Base, Interfaces, Exceptions
Logic/Configuration/Plug-in Loader
There are three ways I typically load plug-in
Out of a directory using loops and the filesystem watcher (slow but effective)
Use your own configuration section in .net using named types (recommended and fastest)
Load them from a database (good for scalability)

Related

Organising a big project - how is it done? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 9 years ago.
I understand that for smaller projects keeping methods in the main view controller (namely viewDidLoad) is the way forward, but for bigger projects im thinking this cant be the way apps are organised - the m file would be chuffing huge! also there would be thousands of declarations at the top! Im nowhere near building an app that big but i'm intrigued, would you put them in a separate file and call them when they're needed? or is it just a case of scroll past the declarations and use pragma marks to find what your looking for?
Basically this is not a specific question for developing iOS applications, it's more of a software architecture problem and requires more knowledge that can't be put in a single answer.
But to get hold of how things usually work, the project has to be planned by pen and paper first, since those are the developer's best tool, then when you've got the main parts of your project planned in a good manner, you start by plotting some ERD of your main components, and decide what will each part be responsible of, then start coding from there a prototype version.
when you have a simple project up and running, you start cleaning up the code, planning even further, and start testing your code, I can't describe how important testing is !
You'll also need software to manage your project (not the source code, but the project itself), something like asana maybe to keep track of tasks and who does what.
In order to keep your code safe against overwriting by other people who are working with you, and to keep things managed across versions, you'll need to setup a revision control repository of some king, Git is supported out of the box by XCode !
Now for the part of code writing, you need to learn some kind of pattern and follow it, iOS projects and most others now follow the MVC structure, which answers your question of how big the classes will get and how things will communicate together without turning into a mess !
Yes, you'll need pragmas and code trickery here and there, but you should always follow the patterns and conventions in order to keep things maintainable when projects grow !
again as I said, this is not anywhere near a good start, you need lots of experience and knowledge before you can actually work on huge projects, but it's something !
Keep up the good work, and always remember that you always have to ask questions, never be intimidated :)
Edit 1
Forgot to add a tip on reading about Agile software development that's probably my last tip :)

joomla developing question [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
Can someone give me some insight on a scenario like this.
Say a company has en existing Joomla site, not complete but just has all the modules, plug-ins, and components installed that they believe they will need.
If someone new where to come in and given the general idea of what the site needs to do, and by accomplishing this they need to make sure all plug-ins share data between each other update information between each other when ever one module is updated. As well as fixing and modifying the template to take shape and form of how they envision the site to be interacted with.
Would jumping into this project be more trouble than its worth? Would creating something from the ground up using custom developed pages rather than using Joomla as a back-end/front-end be too much of a hassle.
Also given that the existing installation has 301 tables to sot through.
Joomla is more than just a CMS, it is also a pretty solid "Development Framework". Modifying existing software will be faster rather than developing from scratch, especially if it is that big.
Read more about Software Development Process, it will help you with your evaluation. As far as I remember development cost is 2x less $ than maintenance in first 5 years.
Starting from the ground up can be not such a good idea for a large project. Working with another framework will result in "reinventing the wheel" and introduce new problems and will require more time for user acceptance.
I know too little to point you in the right direction... 1st of all Joomla is terrific choice, object oriented, it is extensive and very powerful. MVC architecture is huge plus. Plug-in system is easy and extensive. Modules are easy and customizable.
I suggest using Zend Framework if you want to "reinvent the wheel". ZF is exceptional choice but your cost will be MUCH higher. You will have all similar functionality and features like in Joomla: OO, MVC, singletons, layouts, placeholders, modules (components), plug-ins, etc... Comparing ZF to Joomla's "Development Framework" is like comparing Ferrari to Honda Civic.
Long story short: I would try to stick with Joomla and create my library extending Joomla's classes... this will help automating a lot of things (reduce code, etc...). If I was to give a quote to the client I would try to see what they want/their experiences with existing project (check with their IT department, etc). If experience was horrible from day 1 and it was because of software and not hosting/db/hardware/network/etc then I would give 2 quotes: 1st for recreating in Joomla, 2nd for recreating in Zend... and explain strength/weaknesses of both. If software behaved 'OK', with minor to medium problems/bugs/errors I would reuse existing project.
Hope this helps...

recommend a server side technology for gwt (beginner) [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I am developing a gwt project and am looking for an appropriate server side technology.
it should support be open source and support user login (and not using openID...) with password recovery etc
it seems that the de-facto standard would be spring + hibernate. however, I am unfamiliar with neither of them and understand that the learning curve (especially for spring) is very high. gwt was quite easy to learn using GOOG's excellent online tutorials but the spring equivalent seem to impose lots of configuration files and deeper understanding of its internals.
so I am looking for a simpler server side technology to deploy my gwt app. I am definitely prepared to learn a new framework if necessary but not something that would take me 2 months just to understand the fundamentals...
any ideas...?
Spring Roo should get you started with a GWT app in no time. It even has scaffoling (like Rails) for easily generating code for views and models. Here is a good video that introduces Roo and here is a guide for the mandentory 10 minutes application that Rails pioneered years ago.
Also a cool thing about Roo is that it gets you started quickly while still doing everything correctly (i.e. integrate with Spring security, Hibernate, Maven, ...).
Edit: You could also try Vaadin (tutorial here) although I am unsure if that may be to simplistic for your needs.
You could have a look at Google AppEngine + GWT. It provides you a full development environment:
http://code.google.com/webtoolkit/doc/latest/tutorial/appengine.html
This post also provides some information on how to get started with Google Plugin for Eclipse, which supports GWT, Google AppEngine, etc.
I second using Google App Engine, especially the Java version as it integrates so easily with GWT. I am using it in this way right now. App Engine has well written and complete docs, similar to those of GWT.
A simple way to integrate the build processes is to (1) use the GWT code generator to generate the standard project tree and ant build process and then (2) read this article on integrating GAE/Java with GWT:
https://developers.google.com/web-toolkit/doc/latest/tutorial/appengine

Scala Tools & Libraries Wish List [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Which tools or libraries do you wish existed in the Scala ecosystem?
Are there any existing ones you wish were greatly improved?
In no particular order:
A Scala version of the Clojure Incanter libraries would be very handy indeed, and could probably be even nicer to use than Clojure's.
It would also be exceptionally cool if the parallel version of the 2.8 collection library had been ready for (todays!) 2.8 release, rather than waiting for 2.8.1. Even cooler would be something with the power and feel of the 2.8 collection library which offloaded calculations to something like Hadoop.
Standard library support for software transactional memory would be very nice.
The IntelliJ IDEA plugin for Scala is an amazing piece of work, but (unsurprisingly) still lags behind Java in some annoying ways, particularly in on-the-fly error reporting.
There need to be some standard shims built so that various "enterprise" libraries (Spring/Hibernate/Ibatis/Freemarker, etc.) can use Scala objects without scattering #BeanProperty annotations around and without using Java collections objects.
A single lib for time, money and physical units would be cool
Scala Swing should be more complete (and more consistent)
Would be nice if the DBC lib for wrapping JDBC access would be finished
A Scala 3D engine would be awesome. Simplex3D and Sgine are on the way, but it's a long way...
I think it is important not to pack too much functionality into Scala. It is really easy to expand Scala on your own, so let's do that for a while. Then, when some framework emerge as a winner, this might shipped with Scala.
For those of you who have suffered the result of the JCP committee, please remember the disasters of premature standardizations.
That said, I have my own wish list :-) I would like a simple DSL for Date. The one from DPPs book would do.
Off the top of my head:
A good scala <-> JDBC bridge.
A good mocking framework.
Scala wrapper for Spring DI.

Best Versioning System for R [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 13 years ago.
I have a plethora of both short and long pieces of R code that I would like to track as they evolve.
Does anyone have any recommendation or experience using version-control software with R?
Use
whatever your colleagues, friends, ... use --- most systems are technically equivalent and you want to foster rather than hinder collaboration
whatever is supported in the editor or IDE you use most
so as ever so often it comes down to network effects --- popular choices create more users which creates more support in tools etc.
R itself does not care. Source code is just text. Personally, I like SVN a lot and use it at home, at work, at R-Forge, on Google Code, on Sourceforge, ... R Core also uses SVN but as I said, it does not really matter. Your choice, your headaches when you need to admin or fix things.
Subversion or Git would be my recommendations. I don't think the effectiveness of the versioning system depends on the source code you put in it. R shouldn't be any different from Java or C# that way.
There's nothing unique about R that would drive a version control system decision. There are many R projects hosted on Github (in Git) and on Google Code (in Mercurial or Subversion). R-Forge (http://r-forge.r-project.org/) uses SVN.
You may want to have a look at this question for some views on the modern source controlsystems: Git, Mercurial, and Bazaar.
Assuming that you will use either Git, Mercurial, or SVN, I would suggest having a look at Github. It has many very nice features for collaboration.
Fossil is wonderfully easy to set up and quickly start using. It also includes a web interface, issue tracker and a wiki, all built-in to the single executable. Fossil is the version control system for SQLite (written by the same author) and runs on Mac, Win and Linux.
I personally use and strongly suggest Eclipse with the StatET plugin combined with Subclipse for subversioning.