Tagged CLOUD

Almost every cloud should have its (i)PaaS


If you more or less agree with what I say here, is clear that one of the approaches for connecting several cloud and on-premises eco-systems is by means of an iPaaS or integration hub (iHub).

everycloudshouldhaveitspass

As an analogy, think about how you connect different physical systems by means of a communication stack (router, switch, …). The same way, an iPaaS is a virtual hub where you plug/unplug your subsystems as they appear/disappear in your complete IT stack.

Enjoy 😉

The future cloud for the enterprise: hybrid and multi-provider


One year ago I wrote a blog talking about hybrid/multi-vendor cloud. Today I repeat the same, cloud is gonna be a kind of a new ingredient for IT, I mean, there will be use cases where cloud replaces the legacy but there are many other situations where clouds are (only) a part of the whole thing.

Enjoy 😉

See also

Ravello or How Can You Speed Up Provissioning Environments for Acceptance Testing, Q&A, certification, R&D and more…


I’m involved in a project for a big financial company. The solution is technologically complex integrating a bunch of technologies such as business intelligence, business processes modeling, reporting, documents, ldap, single sign on, identity federation, relational database, html/javascript/kquery/knockout…

Initially, the solution was designed to be provisioned in Oracle Cloud because the timeline for the whole project was only 4 months. Imagine how to put toguether all the stuff I mentioned in such short TTM!! You’d better utilize an agile and cloud-oriented approach or basically you are died!!!

Untitled

For several reasons the project is going to be deployed on Customer premises, thus the Q&A environment was not ready in time. For that reason we decided to utilize Ravelo Systems to create a test environment just uploading the VirtualBox vm’s that we had in the developement environment. In less than 2 hours you can upload a 5Ogb vm and in our particular case in only 2 days we got up&running 5 VM’s with all security configurations to keep the environment safe.

Benefits:

  • End users can perform acceptance testing in time while on-premises environments are installed and deployed with the business as usual approach
  • The created environment can be cloned easily giving the ability to create Q&A, certification or R&D environments in minutes!
  • This approach give us an idea of the diferences between the real costs of cloud computing approaches (less than 3$/hour  in my particular use case) against the huge costs of traditional strategies. Just one meeting to decide how to execute a sql script on-premises may involve 10 people during 2 hours wich costs near 600$. With that money you can run the cloud environment during 200 hours…

More info

Enjoy 😉

Mobile Black Box Part 3 : iOS App coded in Swift 3


drfrank-color The last part of our IoT invention is the iOS App. The user interface looks like this:
app-screenshot

This App was created utilizing the IoT client library for iOS located here. This library encapsulates the REST services that IoT exposes.

The App is a Single View Application. In ViewController.swift we use the following code:

Device data:

        let URN: String = "urn:drfranz:blackbox"

        let PROVFILE: String = "alex004"

        let PASSPHRASE: String = "********" //get it from text field

For setting the sensor data capture we do the following:

        motionManager = CMMotionManager()

        motionManager.accelerometerUpdateInterval = 1

        motionManager.startAccelerometerUpdates()

        motionManager.startMagnetometerUpdates()

        motionManager.startDeviceMotionUpdates()

        motionManager.startGyroUpdates()

        myTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(runTimedCode), userInfo: nil, repeats: true)

For  activating the device:

var dcd: DirectlyConnectedDevice

        do {

            dcd = try DirectlyConnectedDevice(path: Bundle.main.bundlePath + "/" + PROVFILE, password: PASSPHRASE)

        } catch let exc as NSError {

            print("Caught exception from DirectlyConnectedDevice constructor: " + exc.localizedDescription)

            return

        }

        // This closure will be called if the device is activated

        // It sends a single message to the server.

        let sendMessage: (_ endpointId: String?, _ error: ClientError?) -> () = {

            endpointId, error in

            // If there was an error handle the error

            if (error != nil) {

                print (error as Any )

                return

            }

            do {

                // Set up a virtual device based on your device model

                try dcd.getDeviceModel(deviceModelUrn: URN, callback: { (deviceModelIn, error) in

                    if (error != nil) {

                        print(error as Any)

                        return

                    }

                    let deviceModel = deviceModelIn!

                    do {

                        self.m_virtualDevice = try dcd.createVirtualDevice(deviceId: dcd.getEndpointId(), deviceModel: deviceModel)

                        

                        if (self.m_virtualDevice != nil){

                            print("Virtual device created.")

                        }

                        else{

                            let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert)

                            alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.default, handler: nil))

                            self.present(alert, animated: true, completion: nil)

                        }

                    } catch let exc as NSError {

                        print("Cannot create virtual device: " + exc.localizedDescription)

                    }

                })

            } catch let exc as NSError {

                print("Recieved exception setting attribute: " + exc.localizedDescription)

            }

        }

        do {

            if !(dcd.isActivated()) {

                try dcd.activate(callback: sendMessage, deviceModels: URN)

            } else {

                sendMessage(dcd.getEndpointId(), nil)

            }

        } catch let exc as NSError {

            print("Caught exception from DirectlyConnectedDevice: " + exc.localizedDescription)

        }

 

For sending messages we use the following:

    /*********************************

    *

    * send sensor data to IoT CS via virtual device object

    *

    **********************************/

    func sendMsg(acc: CMAccelerometerData, mag: CMMagnetometerData, mot: CMDeviceMotion, gyr: CMGyroData){
        backgroundQueue.async {

            print("Dispatched to queue")

            do{

            _ = try self.m_virtualDevice.set(attributeName: "ACCx", attributeValue: acc.acceleration.x as AnyObject)

            _ = try self.m_virtualDevice.set(attributeName: "ACCy", attributeValue: acc.acceleration.y as AnyObject)

            _ = try self.m_virtualDevice.set(attributeName: "ACCz", attributeValue: acc.acceleration.z as AnyObject)

                _ = try self.m_virtualDevice.set(attributeName: "MAGx", attributeValue: mag.magneticField.x as AnyObject)

                _ = try self.m_virtualDevice.set(attributeName: "MAGy", attributeValue: mag.magneticField.y as AnyObject)

                _ = try self.m_virtualDevice.set(attributeName: "MAGz", attributeValue: mag.magneticField.z as AnyObject)

            /*if let devicemotionData = motionManager.deviceMotion {

                _ = try m_virtualDevice.set(attributeName: "GRA", attributeValue: devicemotionData.gravity as AnyObject)

                _ = try m_virtualDevice.set(attributeName: "ACC", attributeValue: devicemotionData.userAcceleration as AnyObject)

                _ = try m_virtualDevice.set(attributeName: "ATT", attributeValue: devicemotionData.attitude as AnyObject)

                _ = try m_virtualDevice.set(attributeName: "ROT", attributeValue: devicemotionData.rotationRate as AnyObject)

            }*/

                _ = try self.m_virtualDevice.set(attributeName: "ROTx", attributeValue: gyr.rotationRate.x as AnyObject)

                _ = try self.m_virtualDevice.set(attributeName: "ROTy", attributeValue: gyr.rotationRate.y as AnyObject)

                _ = try self.m_virtualDevice.set(attributeName: "ROTz", attributeValue: gyr.rotationRate.z as AnyObject)

        }catch let e as NSError {

            self.textLog.text = self.textLog.text + "Error: " + e.localizedDescription

        }

    }

}

When the App is running and we move around, the IoT CS receives sensor data like this:

Captura de pantalla 2017-03-23 a las 0.06.51

Next challenge is upload the App to Apple Store and get it approved… Will let you my kind audience guys know…

Enjoy 😉