Page 1 of 4 123 ... LastLast
Results 1 to 10 of 34

Thread: Language, terms and discovering what Spring 'really' is.

  1. #1

    Default In Tune With Intelligence - A Global Strategy

    I have followed the Spring project for sometime now and there are a lot of things I like about the community and its approach, I am particularly inspired by the mission statement and feel I can contribute something of value while also benefiting from utilising Spring. I have been developing a pure on demand application server architecture which has raised some fundamental questions about my approach to software design and development. This post is attempting to articulate the realisations I have gained from understanding the implications of applying the Inversion of Control Pattern in an application server framework.

    This is a fairly philosophical post and its purpose is to spark a debate about application development in general, however, this debate should be kept in the Spring context. To achieve this I am suggesting a comparison between Spring and the design I have been working on because there are many similarities but a few key differences, in this respect I am calling on the whole of the Spring community to evaluate their approach. My contribution is therefore two fold, on one hand I can contribute to the articulation of Spring fundamentals and on the other I can implement solutions. Following is a brief of the architecture I am proposing and some statements on how I perceive Spring. These perceptions are the key to the debate and I would like to know if people agree with them or not, or if they generally agree but feel different terms or descriptions would be more appropriate.

    The design I am working on extends and refines the request/response model with a request/resolution/response model. The 'on-demand' aspect of the architecture can be summarised as 'the dynamic composition of a resolution from a specified domain declaration in response to a given service request'. This means that the software components necessary to complete the resolution of a request and give a response are provided at runtime and at runtime only, i.e. on-demand. In the composition of a resolution environment I have separated my concerns into six layers, each of these layers isolate a distinct set of problems in relation to the overall problem. The basic premise of the design is that the application server can serve multiple applications for multiple domains. When a client connects to a particular domain it is assigned the necessary resources, does it job and relinquishes the resources.

    This is how I have separated my development concerns:

    High Level

    Domains - Deployment specification, in relation to the MVC pattern a domain is responsible for some aspects of the view.

    Clients - Used to model a clients movement through possible paths in response to application events in a given domain (its context), a client is reactive (Reactor Pattern). In relation to the MVC pattern a client is responsible for some aspects of the view and some aspects of the controller.

    Mid Level

    Applications - Provides the abstractions for making a bridge between general concepts and application events/methods, i.e. de-multiplexing environment events to application events. (Proactor Pattern). In relation to the MVC pattern an application is responsible for playing the role of controller and some aspects of the model.

    Environments - Provide the abstractions for making a bridge between concepts and technology. i.e. de-multiplexing Machine events to Environment events. (Proactor Pattern) In relation to the MVC pattern a client is responsible for some aspects of the model.

    Low Level

    Machines - Isolated runtime access to a range of hardware, this is the intended replacement for Threads. Threads are designed to be general purpose and don't work well if there are large numbers of them, a machine is really a lightweight thread designed for server environments. The implementation I have been working on, depending on the applications running, will use as little a number of threads as is possible, 3 in the best cases, to manage 1000's of machines, these threads perform well considering how much processor time they are given, plus, there is minimal context switching between them a problem that according to the website, plagued the SEDA project), Machines communicate with other Machines using packets therefore Machine to Machine communication is implicitly asynchronous. An application designed to run in a Machine is inherently multi-user but only needs to be designed to handle one user. Machines can be swapped for another in the resolution phase, the intention here is to have different machines for throughputs, i.e. different buffering strategies etc. A Machine is an active object (Active Object Pattern).

    Kernel - Server wide management of physical sockets, a very simple and therefore very robust design. The kernel has been designed to always run, applications are isolated from the kernel by the Machine layer so Machines can crash but the kernel will keep running. The kernel is responsible for initiating the composition of a resolution environment for a given request, this allows for configuration changes to be virtually instant and not require a stop/start routine. High levels of concurrent access are achieved through atomic operations and a common exchange point. A common exchange point is a part of the main server cycle where synchronization for all machines occurs, machines don't need to be locked individually in this case because the common exchange point means machines are implicitly locked (or guaranteed to be accessed by a single thread only). This is very much the same approach taken in the MySQL MyISAM tables where it is deduced that it is quicker to lock and unlock a table rather than individual rows, this is actually where I got my idea.

    Eventually I want to sit my own custom Structured Development Environment (in the form of an IDE) on top of this.

    The above is not so important at this stage, what is important is how it relates to Spring and particular lines in the mission statement:

    • It's best to program to interfaces, rather than classes. Spring reduces the complexity cost of using interfaces to zero.
    • OO design is more important than any implementation technology, such as J2EE.


    The similarity in these statements exposes an underlying concept, this concept is the general principle of abstraction and/or separation of concerns. From the above statements I am asserting that in general software is designed from two perspectives and each perspective poses a distinct set of problems from each other requiring differing approaches to solutions, I now want re-iterate the above and expand on it.

    • It's best to program to interfaces, rather than classes.
    • OO design is more important than any implementation technology.


    My work concurs with the above and has led me to conclude:

    • Application code should be devoid of all implementation details.
    • Application code should no longer deal with technology directly instead opting to deal with concepts such as persistence.
    • Application code should assume a deployment environment that has the necessary concepts available to resolve the applications requirements.
    • Applications are declarative in nature.
    • Application development requires a top down perspective.


    In this respect an application needs a complimentary environment which is simply the bridge between implementation technology and design concepts.

    • Generally the host environment should resolve application requirements if it can or handle the situation intelligently if it can't.
    • Host environments are algorithmic in nature (deal with runtime casing).
    • Host environments require a bottom up perspective.


    These two perspectives are combined with a deployment specification which collectively make an individual installation. An application development phase from inception to installation inevitably has a beginning and end, implying a process. This process is usually handled by adopting a 'Development Approach' and using a 'Structured Development Environment' to produce (or reuse) 'Supporting Implementation Technologies' for running the application. The top down and bottom up perspectives are directly related to the Inversion of Control Pattern.

    It says on the about page that 'Spring is a layered Java/J2EE application framework' but from these conclusions my perception of Spring is that it is more than just that, I can summarize it as:

    I believe the Spring Community is fostering a Structured Development Environment.

    • A Structured Development Environment combines a Common Development Approach with Supporting Implementation Technologies.
    • A Common Development Approach is a 'top down' design perspective and is synonymous with Spring Community Development Practices.
    • The Supporting Implementation Technologies have a 'bottom up' design perspective and are synonymous with the Spring Framework code base.


    The previous summary is what is most important here because I am calling upon the Spring Community to define 'exactly' what Spring is. I believe Spring is moving in this direction, would people agree?
    Last edited by simon_funnell@yahoo.com; Mar 31st, 2007 at 09:33 PM.

  2. #2

    Default More fundemental.

    I have considered my last post and believe I fell short of making my point, I want to clarify this as simply as is possible.

    Declarative and Algorithmic code requires different types of languages, XML is a declarative language, Java is an algorithmic language (but it is also declarative).

    In the above post I said 'Applications are declarative in nature.' which is the real crux point. Instead of writing applications to interfaces specifically, I am suggesting that more generally applications should be written using a declarative language, (possibly XML).

    In this way the application would reference algorithmic components but not implement them.

    What I have said is somewhat suggestive, the main point is:

    Declarative and Algorithmic code require different types of languages.

    I guess my question to the Spring Community is:

    Is writing applications to interfaces 'actually', at a higher level, writing applications in a declarative language?

    I believe it is and further more I believe the implications for adopting the Inversion of Control Pattern in its fullness means accepting this.

    I hope that clarifies things.

  3. #3

    Default Profound

    I thought I would include a bit of information about what I'm doing to show people the direction I am moving in. I am currently writing a book called 'In Tune With Intelligence - A Global Strategy', it is about designing intelligent systems with the creator/creative pattern. The creator/creative pattern is a higher level view of the Inversion of Control pattern, it extends it with notions of time and duration.

    My main assertion is that:

    • Object orientated software can be expressed simply as a network of abstract, concrete and hybrid agents.


    The statement relates to the above posts, below are a few key details:

    • A abstract agent is a bit like an interface.
    • A hybrid agent is a bit like a class.
    • A concrete agent is a bit like a functor or function.
    • Abstract agents are high level, concrete agents are low level.
    • High level concepts are immature, low level concepts are mature.
    • High level concepts are specific, low level concepts are general.
    • As concepts mature their expression becomes inverted (being learn't to being taught) this enables them to become dynamic (reusable).
    • Agents at every level have common aspects.


    One of the aims of the design is to enable a dynamic synthesis, a hybrid agent, between abstract and concrete agents for runtime purposes. This synthesis will be achieved using a general strategy, that is what is meant by 'the dynamic composition of a resolution from a specified domain declaration in response to a given service request'.

    Somebody, I regretfully forget the name them and will endeavor to find out, said:

    'Things are circular but we are not going round in circles, we are growing, the path is spiral.'

    Boing.....

  4. #4
    Join Date
    Mar 2006
    Location
    Turku, Finland
    Posts
    93

    Default

    Silence. I think you are scaring away the average coder

  5. #5

    Default Shy and excited.....

    Sorry about going off on one.....I realise it might have come across a little pretentious, that was not my intent, I am actually shy and was quite excited at the time.....Ive stepped back a bit now and calmed down.

    Ive looked at MINA and it essentially the same as what I was proposing except the actors where cast differently and there are minor implementation differences. I will now approach the MINA community with lower level things.

    I will also come back, at a later date, to what my real point was, which is (or is meant to be) about general everyday average coding.....it is difficult to be both descriptively accurate and lyrically entertaining, one can but try......

    Anyhow, all the above jargon was kind of due to premature birthing pains caused by realisations about stuff I have been working on. I will post again when all this is more complete, thanks for the replies.

  6. #6
    Join Date
    Sep 2006
    Location
    UK
    Posts
    8,424

    Default

    I don't think your post was pretentious at all, I think it was just a little........ long . I had a couple of reads and got lost in there somewhere. I'll have another try later.

  7. #7

    Default

    Quote Originally Posted by simon_funnell@yahoo.com View Post

    • A abstract agent is a bit like an interface.
    • A hybrid agent is a bit like a class.
    • A concrete agent is a bit like a functor or function.
    • Abstract agents are high level, concrete agents are low level.
    • High level concepts are immature, low level concepts are mature.
    • High level concepts are specific, low level concepts are general.
    • As concepts mature their expression becomes inverted (being learn't to being taught) this enables them to become dynamic (reusable).
    • Agents at every level have common aspects.


    One of the aims of the design is to enable a dynamic synthesis, a hybrid agent, between abstract and concrete agents for runtime purposes. This synthesis will be achieved using a general strategy, that is what is meant by 'the dynamic composition of a resolution from a specified domain declaration in response to a given service request'.

    Somebody, I regretfully forget the name them and will endeavor to find out, said:

    'Things are circular but we are not going round in circles, we are growing, the path is spiral.'

    Boing.....
    Could you elaborate about these lines in real time scenerio.

    Most of your concept are really good and worthwhile thinking..

  8. #8

    Default Back and Forth

    Thanks for the replies. I thought I would post an update as I have moved on considerably since my original post and am now unsure of its value. Its not worthless but I have deprecated much of it, I believe, for the better. The main reason for this transformation was the realisation that I have been working towards an XML based 5th generation language. Soon I will be writing my programs with XML. The reason for this is that I can now write programs for any other language using the language I am working on, furthermore it is possible to use other languages to write this language. In this respect it is not only a 5th generation language but also a virtual language.

    While this is quite exciting I still have some work to do prototyping a proof of concept and producing the documentation for it. Development is conceptually different (theres no such thing as a hierachy or an application) so at this stage it is difficult to expand on the above, I will however point out a few things:

    Code:
    A abstract agent is a bit like an interface.
    This is now called an Expression, it is written in XML.

    Code:
    A hybrid agent is a bit like a class.
    This is now called an Entity, it is an instance of a host that was created using an expression.

    Code:
    A concrete agent is a bit like a functor or function.
    This is now called a Host, it is very small general purpose polymorphic unit that implements the algorithmic primitives of an Entity, currently implemented using ECMAScript.

    Unfortunately I lack the time to go into this further at the moment and would only be duplicating (partially) the documentation I am working on. The project has reached a level where it now requires a website so once this is up I will return to the forums and take it from there.

    I hope this helps somewhat (I apologise if I have confused matters!)

  9. #9
    Join Date
    Mar 2006
    Location
    Turku, Finland
    Posts
    93

    Default

    Quote Originally Posted by simon_funnell@yahoo.com View Post
    Soon I will be writing my programs with XML. The reason for this is that I can now write programs for any other language using the language I am working on, furthermore it is possible to use other languages to write this language.
    Something like MetaL: http://www.meta-language.net/ ?

    The references in http://en.wikipedia.org/wiki/Metaprogramming might also be useful

    I am happy to see your are enthusiastic and I don't intend to discourage you but personally when I come up with ideas like that I usually come to the conclusion that it works fine for 80% of the cases and then gets impossible for the remaining 20%

  10. #10

    Default Pardigm shift

    Something like MetaL: http://www.meta-language.net/ ?
    No, the fact it is a meta/virtual language is a side effect rather than an aim. It's main influence is Mathematica. It is an interpreted language so requires a complimentary runtime plus it also has a development approach, i.e. a general strategy for problem solving. The architecture can be summarised as a network of virtual trees.

    For those who have not heard of Stephen Wolfram, I am of the opinion he is the worlds greatest living fundamental scientist. I highly recommend watching this and this lecture which outlines the ideas in his ground breaking book 'A New Kind Of Science'.

    If you are in to software development you need to watch this really, 'A New Kind of Science' represents the beginning of the most fundamental paradigm shift in science since its inception. And its all the world of computer science

    I usually come to the conclusion that it works fine for 80% of the cases and then gets impossible for the remaining 20%
    I have found that if you persist in attempting to solve a problem, you will solve it eventually. That 20% you are referring to, I believe, simply refers to a percentage of the members in the general abstract problem realm that are hard to solve. I call them moving targets or 5th generation problems.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •