What is it?
- Home Automation
- Personal Digital Assistant
- Distributed Computing
- Cloud Computing
- Omnipresence
I have this
nagging idea... One I can't get out of my head, so I thought I'd write it into a computer program.
I have a long history of writing home automation software — you know, just trying to make life easier — let a program take care of anything/everything that can be automated. If it can be automated, you didn't really need a human to take care of it — humans should be free to pursue higher level of existence, than mundane tasks... or knowledge.
So, having thought of the "ideal program" — it has some qualities that are somewhat contradictory to normal programming exercises:
- In an ideal program, you don't need to start it, stop it, or check if it's running
- Make it distributed, self-replicating
- I don't want to choose between flat-files, XML, or Databases for persistent storage
- Make it persist in memory, in distributed manner
- Have each instance persist based on its capabilities, environment, resources
- How can I make it truly persistent?
- Make it spawn new instances, have the new instances maintain knowledge, state and share it
- Just for the fun of it — think of this: the program does not even know how to persist... instead, as long as there is one copy of the program running, it will persist the data/state... as the "original instance" comes back online, it will retrieve its state
- If an instance has a way to persist all of its information — cool, adds even more... so I'm not saying that can't be done as well, but if the persistence is done with peer-to-peer style, why bother?
- Code? Code snippets? Versioning?
- Code should be considered equal to state data... i.e. new generations of each function may become into existence... but the code snippets should be generational — a later version propagates through the grid, takes place of the earlier version
- Code (functions) are identified by UUIDs, and generational information tells which is the most advanced version
Tall order? Way too "out there?"
Obviously it is... but let's start simple, let's just play the home automation.
I'm much beyond this, but I want to take it one step at a time, and perhaps document for the greater good the platform that is emerging.
I will be editing this as I go along... pardon for the slow pace, but I want to take my time... and I have a
full time day-job, where I want to give my 110%
Background:
- Name: Floyd, since this will start as a home automation — it is fitting that the name is the name of the street, this house (house = home) is on... "Floyd Ave"
- Home Automation.. a bit more than the usual
- A full blown X10 system, with 9 fully populated house codes — that's a lot of devices
- VoIP phone system, with POPs in 8 countries, phones in 3 countries, PBXs in three locations, etc...
- Solar Panels, TOU, lot's of energy optimization
- Just got through replacing the doorbells with VoIP phones
- Security system consisting of IP cameras throughout the area
- Gigabit networking, with 8 WAPs, adaptive firewall, day/night profiling, traffic shaping, multiple connects
- Language...
- I've been looking for a language, that would have the right characteristics
- Hopefully runs on many platforms without recompiling
- Has the ability to propagate as objects or data, like messages
- Rich library of functions/functionality
- Hopefully a "functional" language and not just "imperical" — perhaps both?
- I truly considered writing my own
- ...and I found Scala...
- And, shame on anyone who thinks a language itself is a "silver bullet" — silver bullets are good only for werewolves... which don't exist... so there.