Documenting a few ideas that I would love to explore/experiment. These could be good academic projects or things I hope to try in my spare time. Hopefully I keep this page current. Feel free to write to me if you have more thoughts/comments.
Distributed Computing with IoT: As more programmable devices get deployed because of the ‘Internet of Things’ effect, more processing power is deployed throughout. Given the typical profile of these devices as of now, this power will be lying idle for most periods of time. The idea is to use this spare computing power used for executing distributed computing algorithms. For example, all these devices can join a Bitcoin mining pool. The owners of the devices can be compensated accordingly for opting in this program (since the device will consume power). This also acts as a way for IoT cloud guys to find the correct monetization model for their business. A third-party organization could be providing this service to the IoT cloud service providers on one-hand, while looks for distributed computing seekers on the other.
- From a security point of view, what this does need though is a clean isolation between the primary functionality of the IoT device, and the distributed computing piece.
- As devices enter idle zone, they talk to the cloud to look for distributed computing tasks.
- The cloud downloads some code on the device that performs a certain part of such a task. Such dynamic code download and execution should be supported by the IoT devices. If IoT devices have an interpreter (JavaScript) that would be the best.
IoT Cloud Programming Model: This is a result of on-going discussion with Amey on the topic. There have been projects/solutions where the Cloud is used for programming the IoT devices. The difference here is in this idea we fuse the cloud and device development model. The hope is that a cloud-app developer can write code for the IoT device, with as much convenience as the cloud-app programming. This needs more thoughts. Specifically, let’s say you can club devices into groups, like ‘all’, ‘debug-1’ etc. A device can be part of multiple groups. And then you can write a code that runs for all devices in the groups:
For group all:
function onUserChange(state) {
this.device.new_state(state);
}
The ‘new_state’ is a virtual function that maps it to the implementation that the device driver writer has implemented. Thus, the device driver developer does his job, while the cloud developer has more control as to how exactly he communicates with the devices. The developer framework takes care of all the optimizations like scattering device access across time etc.