Read from the beginning.
I did an Entity-Relationship Diagram using pen and paper. I then transferred that to an electronic copy using MySQL Workbench. The ERD is based on the UoD, which is based on the mind map. See how the documentation is becoming naturally hierarchical? This poses a significant risk; if you change one piece of documentation, you might have to change them all. It’s vital that the different parts of the documentation don’t conflict with each other. Separation should be maintained! The UoD will probably suffice as the central document, and a good effort will be made to ensure that not much overlapping occurs.
Alternatively (or additionally), you can nominate some documents as “throw-away”. They can be used once or twice in order to influence and guide the creation of more mature and structured documents, but ultimately you don’t care if they get outdated and neglected. It might just be easier to throw them out and do them again, or you may never use them again in the first place. The decision to throw away a piece of documentation has to be made on a case-by-case basis. Exercise some good judgement and you should have no problems.
I needed to make decisions regarding which applications, languages, and paradigms to adopt for the creation of What’s this Beer. Each decision needs to be justified against the original Aims and Objectives set out from the beginning.
MongoDB and it’s C++ bindings will be used to allow me to develop skills using NoSQL databases. Mongo’s in-built map-reduce implementation allows querying and satisfactory (I hope) text searching.
There is also the possibility of integrating CLucene or even Solr.
- Middle Tier
There will be a middle layer, which will be implemented as one or multiple libraries, written in C++. These libraries will define the entities (business/domain objects) and the wrappers around them which dictate how they can be used (business rules).
- Web Handler
Wt, a C++ Web Toolkit, will run on FastCGI. This should allow me to implement a scalable and portable web interface which can use the middle tier as it’s driver. It also comes packed with features that I will find useful, like an OpenAuth client implementation.
- Web Server
Either Apache or Lighttpd. I’m leaning toward Lighhtpd.
- Operating System
Any standard flavour of Linux, like Debian, will suffice. It’s normally cheaper to rent these servers than a Microsoft one, and I feel more comfortable running either of my chosen web daemons and my chosen DB on Linux.
Additionally, I will need to confirm the following considerations which will make up my development environment:
- Development Box
Most likely a VM running Linux.
Probably Notepad++ on Windows, hooked up to a shared folder on the VM.
That’s easy! G++.
CMake, with some other shell scripts to automate the build and deployment.
- Source Control
I’m really not sure yet. I’d love to get my hands on some hosting for either Git or Subversion. Probably Git hosted on Github so everyone can see the code as it’s written.