Hello and welcome to the MyBooks Software Ecosphere Tutorial!
This tutorial will walk you through creating a software ecosphere using a Home Library Catalog as our example. I’ve used (or misused) the term ‘software ecosphere’ as the containing concept for all the pieces of software that we’ll be using to create our applications. I have yet to find a better term, and while ecosphere means different things to different people, it’s easier to overload it than try and come up with a term of my own. Why a home library? Its simple, and I need a way of tracking what I’ve already got in my library when I head into a bookstore 🙂 . Yes, there are applications out there that already do this, but I also wanted to create a software ecosystem tutorial at the same time. It’s a fairly simple problem and the domain should be universally understandable. I’ll call my Home Library Catalog MyBooks because it doesn’t seem to be used at the moment 🙂 .
As far as functionality, here’s what we’ll be trying to accomplish:
- Store the information in the cloud. (Yes I could do this on a dedicated server, but that’s not nearly as interesting, is it?)
- Have a web application interface (Yes, the iOS application would suffice, but see the first bullet) Functionality should include
- CRUD operations for Books (CRUD == Create, Read, Update, Delete)
- CRUD operations for Locations (I have two apartments, and I’m never sure which books are where)
- Ability to loan books out.
- Ability to rate a book.
- Ability to make notes regarding a book.
- Allow multiple copies of the same book.
- Ability to search/filter for a book:
- By Author(s)
- By Title
- By Rating
- By Loan Status
- By Location
- Ability to link or tag multiple versions or editions of the same book. (ISBN is typically the same for different printings, but different editions have different ISBNs)
- Have an iOS application. In addition to the web application interface, functionality for the iOS application should include:
- Scanning ISBN bar codes.
This software ecosphere will be made up of the following:
- A simple database in the cloud
- Cloud based web services allowing applications to interface with the data
- A cloud based web application for our end users
- A native iOS application for our end users
While I have a plan of attack, there is [almost] always an infinite number of paths to the solution, so some of these planned on technologies may or may not get used:
- Google Cloud Platform
- mySQL Workbench
I won’t be digging too far into each of these technologies, instead I’ll just be setting up a possible way of setting up a software ecosphere and showing how to fit the pieces together to provide a complete solution.
Before we get started, here are some of the givens and druthers that I will be using as a basis for decisions I make along the way:
- Security comes first.
- Use existing libraries and technologies whenever possible.
- Make it as simple as possible but no simpler.
- Develop for small scale, but plan for large scale.
- Use “best practices” whenever possible.
- I’ll be using macOS as my development environment.
- Have fun 🙂
In my experience “best practices” are a shifting target, and often are particular to existing processes for a customer, which may or may not be “best”. Also “best” is obviously suggestive and highly situational. Unless you are talking about vi vs emacs… in which case best is obviously vi rather than an overly complex application masquerading as an editor 😉 .
Also, while I am nominally system and language agnostic, in practice I prefer macOS as my development environment. I’m a command line kind of guy (except when I’m not) and while cygwin helps make windows more bearable, I find it much simpler to dev in a unix environment. Besides, iOS dev is macOS only 🙂 .
That about wraps up this overview, tune in tomorrow as we start digging in!