Computing philosophy
- An approach in engineering and computing philosophy: the pw server
2. Programming and tools for pwSrv
In a SW project the central decision point is the programming language(1) and its development environment. It correlates with the decision concerning lower level infrastructure components like hardware and operating systems and with higher-level aspects as tools usage, formats and standards. Here we discuss the programming language and tools and other higher-level aspects. Concerning OS and HW see the first chapter concerning the pwSrv architecture design.
Before we present a requirements list lets outline some basic facts. In modern SW engineering there are not much possibilities to avoid the OO paradigm, e.g. you have to use normally a programming environment that is mature enough based on this architecture. Taken this without any further discussion here, the other requirements(2) that need be further discussed and weighted are:
1 Runtime performance:
The final solution should provide good performance; as it isn't a critical application and the users cannot expect an answer in seconds a session computation on a medium large set of sentences SE should be done in a few minutes.
2 Dynamical loading of program parts at run time:
I assume that some program parts, to be able to compute a session, have to be loaded and (in case precompiled) at run time (this will hold more for a level4 computation, but need to be faced already now). Because of this, we'll need some interpreter or byte code interpreter kind of language. A compiler into machine code would make problems here, as every session would mean to compile the whole server application with user defined parts for each session run (that doesn't mean that users are programming additional code already for the level3 themselves, You can use also code generators - if possible...).
3 Open Source
I recommend using open source programming environments and tools (pw as a whole should be an open source project too). The argument is, that pw mainly serves as a consistency checker for philosophical assertions of any kind. To guarantee that the check is correct it is preferable, that all SW included in this check procedure can be principally be checked in case of a need for debugging. If you use commercial tools they are a black box for you.
4 OS independence and portability
The pwSrv should be able to run on common OS platforms without bigger configurations. What may be discussed here, is the avtual 32 vs. 64 bit topic.
5 Maturity
The programming environment and the language used should have some level of maturity; using pure experimental stuff has the danger to run into problems; the environment should be stable on the horizon of about a decade (longer planning is impossible in the fast developing IT circus...).
6 Support/Community
For the environment and tools used, there should be a minimum community available to discuss SW issues, e.g. we cannot wait months for some support ticket to be answered, on the other hand a week isn't a problem I think.
7 Standards and helping tools
Most SW build today are using some standard tools to support their work as XML parsers, compression tools, drivers, deployment tools and all sort of this stuff. With the answering of the base questions these come into focus too and should also be discussed before starting to code.
8 Spec Features needed?
The project will need some special features, e.g. existing tools that prevent us reinventing the wheel. These might be parsers, lexers, ...for Grammars, handling lambda calculus, syntax checkers for logics or other sort of formal languages. The details depend on the decision on questions presented in later chapters here, but the usage of good existing tools is also an argument for or against the usage of some (formal or) programming language!
9 Development tools: Compiler, Debugger, ...
Finally the decision on the programming environment. It depends on the language chosen. Also here we need some level of maturity! If we choose Java it will presumably be Eclipse.
10 Usability and code writing performance
are a central part for the decision concerning the language and the tool selection. This is to the greater part a subjective decision - what someone is used too, seems better than less known environments. Nevertheless there are also some better measurable aspects to discuss ...
11 Lang Reference + Helps + open source code bases/examples
The last aspects in the 0.1-version of this requirements list are the documentation, references, online helps and free available code examples available for the programming language (and in case also for the used tools). I want always three things from a help on some topic: A. an explanation, B. a definition and C. an example that isn't trivial and not confusing.
12 Middleware
As the user connects to the pwSrv via Internet protocols we'll need some Web server in case combined with an application server hosting our app. As there are no requirements so far for this a standard Web server functionality should be all. Other requirements must be added during discussion. Again, the WebServer decision should be aligned to the programming language. If Java then Tomcat ?
13 other stuff to be added before starting discussions?
...?
Given the requirements list above I would like to take a first introductory position on central parts to open discussion; the first choice to discuss is for sure the programming language:
variant A) with pure Java (+Eclipse). It's mature, Open Source(-like?) and gives today good performance when the amount of data to process isn't too big. Personally I have mixed feelings with this, as my speed writing code in Java isn't overwhelming. I don't like the forest of files created for every single object. But it is a strong candidate and will survive the next decade of IT development.
An interesting alternative is B) Python. It's even more portable than Java (has more OS to run on). It looks first a little bit strange with its indentations instead of bracketing, but it has a well thought out design and usable features that are not common, as for example internal support for the lambda calculus. It is, I think, mature enough, even when I experienced once freezing when debugging.
There is the possibility to use both Python and Java if needed (but what for has to be discussed..), e.g. C) Python-> Jython -> Java Classes. The Jython project uses Python code to generate Java classes. The development is almost one version behind the actual Python and doesn't cover all features of it, but this shouldn't worry us. The point is the questionable maturity of this tool. The testing a year ago was a crude command line interface (but it worked). On the other hand also the Oracle Data Integrator (bought by Oracle some years ago) uses Jython successfully, so what ? But why should we use two languages instead of one? Is programming so much more productive as Python fans are convinced?
D) A Pascal/Delphi derivate would be nice, as the pwClient is build with such a tool. The language is straightforward. The community is still big enough. Unfortunately the available tool alternatives seem not be convincing and are questionable concerning there further live time. Plus there will not be available much helping tools/NLP products for this variant!
E) There are logic tools that use some standard front-end-processing like with Java/Application Server and in the backend LISP, Prolog or other SW more appropriate for this special kind of processing, we will have to handle. Any experience with such an approach? Any recommendations?
F) F) There are many experimental SW. Does anyone has experience with an appropriate candidate, which is mature enough to take into account?
H) Any other approaches?
What I don't take into account now is C++ . Its most powerful and its multiple inheritance might be a real valuable feature for a program processing philosophy (if one wants to do it with 'real ontological' objects), but it is complicated. The usability would be a point here. I would like to have also interested philosophers to be part of the project, not only SW engineers...
For programming languages don't mentioned till now (like Smalltalk, ...) holds: either I have not enough information about it or I just don't know it, even heard about. Please suggest.
Links:
google for program languages comparisons ...
3. Hosting of pwSrv
We have first to distinguish between the hosting of the development(1) project by a provider supporting us with a project infrastructure, like a versioning control system and a hosting for the released versions. It would be perhaps easier if it were the same provider, but it is not necessary.
In case you read this lines there may be already some sort of first decision concerning the first point, but this is still the first discussion topic. The hosting of the releases can be discussed later on.
What do we need for a SW development project?:
A hoster should provide the infrastructure with the chosen OS, SW tools (see below) and add-ons like mentioned above. The hoster can be focused on one SW like Java, if we decide to adhere to this environment, but it can be independent on our environment.
What else? It should be cheap or even for free (do we bear the advertising popups?). We shall check the legal stuff to see if it fits for us.
Another aspect is, that the provider allows also some presentation space (Intro to the project) and collaboration facility/mailing list and this stuff. If not, even these few pages will not be seen...
But lets first take now a look to some of the hosting services on the Internet. Some used comparison references with other aspects are listed in the links below. As the discussion hasn't even started and depends heavy on decisions concerning aspects from the following chapters, I present here only some example candidates with some pro and cons (Note: Not all infos here are up to date!):
sourceforge
..best known and (one of) the biggest. It has many of the evaluated, e.g. often needed tools. Web Server-Side Scripts are PHP3 and 4. I don't know PHP but this must not be a critical point ...Shell scripting seems to be available for developers; that would be fine. But backup would not be done automatically.
google
The main page gives presents a structure concerning programming languages. We haven't decided about yet...Hosting there would be attractive if we decide for Python as the/one programming language, as this is heavy used at google as far as I know. So the infrastructure for this environment will be available there. For more details see in google's project support link!
seul org
A Linux focused hosting facility. The number of hosted projects is compared to the first two rather small, but in some cases this might be a pro. The license instructions allow all non-profit projects to be hosted. The hosted sites are not standardized.
repo
A hosting site in BETA status using git as version control system. Good instructions on the starting page but it freezes my IE6 (which must not be the error of the server). So more quick evaluation finishes here.
launchpad
Also a big community. The server was not reachable first! So we have another important criteria. The availability...Uff, it took minutes. So lets take a last view on this candidate: The Help Site is good. You can create a project or a team. It is running on Ubuntu (a Linux distribution). There is an interesting mentoring solution available. But I doubt we'll need such at the beginning.
...
Again, in case you read these lines on a project-hosting site don't assume that the discussion on this first topic already finished, but it can happen.
Links:
search at wikipedia org for: Comparison of free software hosting facilities
Comparison of Free/Open Source Project Hosting
Launchpad at wiki
previous page
next page (3)