Starting series on reactive micro services system, using EventSourcing and CQRS techniques

Just started a couple of months ago my new journey on EventSourcing and CQRS, through this blog I will share the progress of it. Here are two videos on the topic I have created, another video on the way in a week or two.

The first one is about the foundation of EventSourcing and CQRS framework in Scala (using Actor programming model). It was presented in Guadalajara Java User Group ( http://www.meetup.com/gdljug/events/230324875/ ). Source code of this presentation is available here.

Introduction to Akka from Cokorda Raka Angga Jananuraga on Vimeo.

The second one is the continuation of it, Lagom framework, also from Lightbend (previously Typesafe):

introducing_lagom_01 from Cokorda Raka Angga Jananuraga on Vimeo.

Inquiries: raka.moviz@gmail.com LinkedIn: https://www.linkedin.com/in/jananuraga

Fullstack. Mobile. Data Visualization. Operational Visibility

Youtube: http://bit.ly/1NpzXw9

DynFlow

Finally got a chance to upload this user guide of DynFlow I wrote several weeks ago. What is DynFlow? Here's an excerpt from the guide:

DynFlow is an Orchestration Designer reusable module that simplifies greatly development of IVR for Avaya Experience Portal platform.

It is implemented as a state machine that encapsulates various points of interaction in an IVR flow. Currently, DynFlow supports the following points:

  • Announcement
  • Input collection
  • Menu
  • Blind transfer
  • CTI transfer
  • Custom-logic execution

Those points are the most-commonly used in any IVR. What makes DynFlow attractive is for typical cases you can almost forget developing IVR in Orchestration Designer; it's all reduced to specifying the points in your IVR as rows in a CSV file (you can achieve almost everything by working with a spreadsheet).

You can think of DynFlow as a motor that brings that spreadsheet to motion, transitioning from one point to the next.

Without further ado, here's the doc (can also be downloaded from https://www.box.com/s/fqh7kii7nr1fbxuu3ycn ).

The binary (the JARs and the WAR of DynFlow to be deployed to Tomcat) can be downloaded from https://www.box.com/s/tv6d49e15wtxj11ulsce . The DynFlow.war also needs to be imported as Reusable Mode in the Orchestration Designer if you want to develop IVR using it. Sample IVR is also provided in the ZIP.

Write Up Dynflow by Raka Angga Jananuraga

Progress on VoiceXML autotest using Bladeware

This is a continuation of this entry: http://jananuraga.blogspot.mx/2013/04/voicexml-autotest-switching-to.html

So, today I managed to get BladewareVxml running, tested with two samples vxml provided by BladewareVxml: helloworld.vxml and inline_grammar.vxml. The whole set of projects (bladeware, pcre, curl, xerces, spidermonkey) is also updated, and uploaded to Box.net, here: https://www.box.com/s/l9yniyq9pcbgb4nhro90

If you want to get them compiled and work with them on your PC, you will need Microsoft Visual Studio 2010. Just unpack the the file in C:\ (using 7-zip), and set the following environment variables:
  • BW_CURLDIR = C:\BladewareProject\curl-7.18.0
  • BW_JSDIR = C:\BladewareProject\bwjs-1.61.3
  • BW_PCREDIR = C:\BladewareProject\pcre-7.1
  • BW_VXMLDIR = C:\BladewareProject\bladeware-vxml
  • BW_XERCESDIR = C:\BladewareProject\xerces-c-src_2_8_0
Just open C:\BladewareProject\bladeware-vxml\vxml\BladewareVXML.sln on your Visual Studio 2010, and we will be on the same page. Just press Ctrl-F5 to start debugging.

Now, the samples vxml are available under C:\BladewareProject\bladeware-vxml\vxml\samples\ . Just copy them to your favorite webserver . In my case I copied them to my Jetty webserver under C:\jetty-distribution-9.0.2.v20130417\webapps\ROOT\samples , so those vxmls are accessible through the web under http://localhost:8080/samples/

The launcher of this Bladeware Vxml is available in the project named "client" (already set as the default StartUp project), a cpp file named runvxml.cpp. It takes various arguments for the execution, which you can set by: right-clicking on the project named ("client") >  Properties > Configuration Properties > Debugging > field named Command Arguments. Currently its value is: -config C:\BladewareProject\bladeware-vxml\vxml\etc\bvxml\runvxml_test.cfg -url  http://localhost:8080/samples/inline_grammar.vxml -channels 1 -calls 1

Now, from the execution of those 2 samples, what did we obtain? Hints to where we could possibly put our hooks. Have a look at these two screenshots. The next task would be to hunt down where those lines (marked with yellow box) are printed from. Those lines correspond to the events we're interested in.

I will be able to continue working on this next weekend. So, if you want to beat me to it before then, please do (and please share your findings). In the meantime I will be working on to get Pentaho BI stack running on my PC, part of my foray to big data analytics efforts :). Cya!




Warming up..., for my foray into big data analytics

Part of preparations for my foray into big data analytics is... mapping out the field. There are so many things to learn, so I have to get organized. I also need to bind together nicely in one single place things I've read so far (for further reference / simply to offload it from my head). This is just a note of my current understanding, which will evolve (corrected / refined) along the way. Without further ado, here it is:

---
A few additional words (added 1 May 2013)
---

As the name suggests: study-note. Has inaccuracies, incompleteness, some reasonings are not as strong as I would like them to be, etc. But I don't want to fall into analysis paralysis, so here it is my write-up, result of lots of googlings :), distilled....

My exercise laundry list:

(1) In datawarehousing, there's Pentaho. My reference is Pentaho Solutions: Business Intelligence and Data Warehousing with Pentaho and MySQL ( http://amzn.to/104lh8k )

(2) In the area of NoSQL: my reference is "Seven Databases in Seven Weeks" ( http://amzn.to/10XxTWe ). Already finished reading the book. Now on to doing the exercises in the book. Will be focusing on PostgreSQL (as reference point, from the familiar SQL standpoint), and MongoDB (the most popular NoSQL db).

(3) In machine learning: my reference is "Data Mining: Practical Machine Learning Tools and Techniques" ( http://amzn.to/13OjqbM ). I'm using Weka and Knime. I have to be very pragmatic, lots of mathematical rigor in the book. In the short term, I only need to get myself familiared with the underlying idea behind those algorithms, and take advantage of already-implemented programming libraries (such as weka and mahout, to name a few). This, like techniques that is more close to art, is not something I can acquire in short time, because it depends on intuition, that requires time and lots of drills to develop.

(4) Data cleansing: key skill in data analysis. Thanks Google for giving Google Refine for free  ( https://code.google.com/p/google-refine/ ). My reference: "Bad Data Handbook: Cleaning Up The Data So You Can Get Back To Work" ( http://amzn.to/10Xz1ZI ).

Now... I need to switch back this weekend to finishing my VoiceXML autotest, before taking on that laundry list :D . Cya!

---

Note: the PDF can be downloaded from https://www.box.com/s/6lbafigfkbrta5cnll5u

VoiceXML Autotest: Switching to Bladeware VXML

UPDATE: Progress as of 5 May 2012 is available at: http://jananuraga.blogspot.mx/2013/05/progress-on-voicexml-autotest-using.html

---
Yep, I decided to switch to BladewareVxml to use as the basis for the VoiceXML Autotest I'm working on. Pragmatic reasons:

  • BladewareVxml is VoiceXML 2.1 compliant.
  • It's based on OpenVXI, which to my knowledge is used by many commercial products out there. So..., hopefully people would be more likely to use this tool.

What have I done so far? Very basic: get BladewareVxml compiled :) No brainer, I only had to fix a few build configurations, and one header file, VxiCommon.h, adding #include <iterator>. Download it from here: https://www.box.com/s/l9yniyq9pcbgb4nhro90

Next: I'm going to write a C++ interface and process with SWIG, first step toward integration with Python. The idea: software testers will write their test-script in Python, and that C++ interface will act as a bridge between that test script and the BladewareVXML interpreter object.

The C++ class that implements the interface will:
  • Accept (through its constructors) callback-function pointers written in python, such as:
    • readInput
    • renderPrompts
    • inputRecognized
    • inputNomatch
    • inputNoinput
    • transferPerformed
    • submit
  • Accept (through its constructors) VoiceXML platform properties.
  • Have methods that can be called from test script. These methods will interact with Bladeware VoiceXML interpreter object created during the construction:
    • runVxml
    • feedInputSpoken
    • feedInputDTMF
    • feedNoInput
    • hangup
  • Be implemented as singleton, allowing me to obtain a reference to it from any point in the Bladeware's Vxml code.
Before I get to that, I will have to study Bladeware Vxml code in debug mode. Now... where is the starting point(s)? :D Maybe I can start from these ones.... Ok, that's all for now, until next weekend.