This is a great question. Our intension is for iota to be a SMACK Stack Not 
Platform. This means it uses

1) Apache Spark
2) Apache Mesos
3) Akka
4) Apache Cassandra
5) Apache Kafka

The Fey engine is a component of the iota platform but not the entire platform. 
The platform is a vertical stack that has a Mesos Cluster as it’s highest 
layer. This could be in the cloud (AWS, Azure, …). The next level of the 
platform might be at the device level say a RaspberryPi with sensors or an 
aggregation server. The edge devices can process data locally on the device 
using Fey components or/and feed them up the stack using Fey components. Large 
amounts of data will arrive at the Mesos cluster. This data can be proceeded by 
Fey and Fey components running as an Akka cluster on Mesos. It can also be 
processed using a Spark cluster also running on the Mesos layer.  Cassandra is 
used to persist data at the cluster level. Kafka is the message bus for major 
software component to use when communicating with each other. The SMACK stack 
becomes the data pipeline and processing engine for IoT data streaming from 
edge based sensors. 

The first component of iota that we are making available is the Fey engine and 
a selection of Fey components. For example a Fey component for Kafka that 
includes Kafka producer and consumer capabilities. The iota Fey engine can run 
at all levels of the iota stack. This can include a RaspberryPi on a JVM in 
standalone Akka mode or on the Mesos Cluster where it runs as an Akka cluster.

I hope this sheds light on the big picture. We can discuss the role of Docker 
and Spark later so let’s not worry about them right now. 

This is a grand vision so where do we start? The simplest way to start is with 
the Fey engine and Fey performers.

We are first releasing a version of the Fey engine and a selection of 
performers. Interested parties can download and experiment with these. We hope 
they will be inspired to build their own software components that they can use 
and share with others. The best components can be included in the Fey component 
release. A rich set of these components (called performers) will enable 
powerful applications to be assembled by others providing data pipeline and 
processing functionality needed in the iota platform. Here are a few examples 
of performers that could be and have been written
1) A Restful performer that implements get, put and post to reach out to get 
data and control “Things” on the internet. This could run on a RaspberryPi and 
data could be passed on to other performers.
2) A component that ingests data from other performers and processes the data 
based on some mathematical or statistical decisions and selectively outputs 
that data to other performers.
3) A component that interacts get/put to an Apache Ignite in-memory system. 
Data received from other performers can be put the data store or data read from 
the store can be sent to other performers.
4) A component that interacts with Apache ActiveMQ similar to 3)
5) A component that receives a high level image from another component, makes 
it low resolution image version and send it on to other performers.
6) A  component that can read values from I2C sensors and pass the value read 
to other components.

These are some examples of component that have been and can be written as Fey 
Performers. They form the core of a communication and processing system that 
can be used to define a component based application. Such applications play an 
important role in the iota platform.

How can someone contribute to the code base?

1) Select you preferred development workflow. The following are all free
        - vim and sbt (simple build tool) on the command line
        - IntelliJ Community edition (sbt)
        - Eclipse (sbt)

my personal preference is IntelliJ Community edition - Eclipse is also a valid 
option if you prefer Eclipse.

Follow the instructions that are being placed in the iota wiki on how to 
download and run  the fey engine and fey performers. Think of development for 
Fey in the following terms
1) You have a palette of performers with different functionalities
2) Your applications will be limited by the set of performers you have 
available to you. Say you have three performers P1 that reads numbers form a 
sensor at a certain frequency say 5 seconds, you have P2 that waits for values 
coming from other performers and if those values are between 0 and 100 they are 
set to other performers, and you have P3  that receives data from other 
performers and places a message in the log file.
3) To create an application you would create the following orchestration P1 -> 
P2 -> P3  (it is a json object that defines each of the components used how 
they interact with one another P1->P2->P3 and any parameters need by each 
performer e.g. the 5 seconds frequency for this instance of performer P1).
4) You may find yourself needing to write an application for which you do not 
have a complete set of components. Say it’s the example in 3) above but you 
also want to send the message on a Kafka topic? You would then have to either 
find a pre-existing Kafka performer that you get from some else or you would 
write your own. 

So get familiar with Fey and Fey components on your own local dev machine and 
write a simple Fey Application (orchestration) if you don’t have the needed 
functionality write one or more performs to give you the functionality you 
need. 
This would be a good start. For run put Fey on a RaspberryPI or some other 
Linux based ARM device (Intel Edition?) and run Fey on the device.

I hope my long winded explanation is of some help. Feel free to ask other 
questions if I have not explained things well or not answered them at all.

-Tony


> On Feb 10, 2017, at 10:13 PM, Gunnar Tapper <[email protected]> wrote:
> 
> Hi,
> 
> I'm trying to match the code with what's being said on 
> http://iota.incubator.apache.org/features.html 
> <http://iota.incubator.apache.org/features.html>
> 
> I'm not clear where I find; for example, docker and spark parts?
> 
> What's your advise for someone who wants to contribute? It seems like a good 
> idea to read up on akka but then what?
> 
> I'm setting up my project to use eclipse. Is that the IDE of choice or is 
> there something more appropriate?
> 
> 
> -- 
> Thanks,
> 
> Gunnar
> If you think you can you can, if you think you can't you're right.

Reply via email to