Friday, December 09, 2016

Voice User Interface - The New UI



It's amazing how quickly the AI topic develops. In the past few months, I have seens so much new stuff emerging.

When I first saw this, I was amazed (happens a lot lately - maybe I am just too easy to motivate ;-). Then I thought: well voice enabled computing isn't new really, I mean all the hotlines do it. So while the Conversion UI basically serves the same purpose as traditional hotline conversation machines, the new thing about  it is really the context based natural language interaction opposed to: request - response that it was in the past.


Goal for user:
Triggering a particular service


Goal for the AI:
Fetching all neccessary parameters from a natural language interaction in order to invoke the service.


Benefits for the User:
Natural language conversation, where the AI considers context (what has been said during the conversation, what environment the user is currently in (etc. location, time). Habits of the user are also taken into account as the history of how the user has been interacting with Google devices and services is tracked.


Benefits for the Developer:
Declarative approach to defining the conversation. It's based on examples rather than fixed rules, that the service can then turn into algorithms using it's AI.









Tuesday, November 29, 2016

Enterprise Machine Learning in a Nutshell

What I stumbled across a lot lately is the issue of clearly identifying business problems that are applicable to machine learning, especially opposed to traditional programming solutions... The openSAP course "Enterprise Machine Learning in a Nutshell" does an excellent job in exactly that!

I will probably dive much deeper into this topic - many of my companies issues in knowledge management seem to be perfectly applicable to machine learning. Many issues in that field are regarding classification, that enable effective communication of knowlege in a fast growing organization.

Generally speaking machine learning is best applicable on highly repetative tasks (much data available) which has been done for a while. You can define success and failure for the training and testing data but solving the task is performed more along the lines of human intuition and experience.




Thursday, November 17, 2016

A.I. Experiments

Sometimes I stumble across things that are just jaw dropping. I have read a lot of articles and watched a lot of YouTube videos about AI. Google has great platforms and technology to power this, but what really is fascinating when you find something that steps from behind the glass wall of "me staring at it astonished" to "oh, hi there, let's play". This is what


A.I. Experiments

is. An experimental Site where you can find an A.I. driven virtual playground. It may seem a little childish at first but then again children grow up really fast and become adults. This is something you don't want to be missing... not just watching but being a part of it.

I got caught on watching this...



...and then this...



...and guess what: you can try that for yourself!



And this here could be something, really useful for analytic technology fields. Probably one can find way's to apply this kind of pattern recognition to Business Intelligence releated questions. Isn't BI all about people trying to find patterns in data using visual tools like graphs and charts. We'll maybe machines can do that job quite well finding patterns in massive amounts of data...




Thursday, November 10, 2016

MarI/O - Machine Learning for Video Games

For everybody who want's to get started with the concepts of machine learning in a fun way... As far as I get it, the basic idea to mimic evolutionary or learning based on experience.

A computer player in this scenario basically needs:

  1. Senses like sight: Abstracting the actual screen to individual items like save ground, blocks/walls, gaps, enemies. Fortunately platforming games like Mario support abstraction really well as sprites can be though of as blocks of the above mentioned types
  2. The ability to push buttons on the controller: Well there are APIs for that, right ;-)
  3. Knowing what success means: e.g. advancing to the right side of the level without getting killed in the shortest amount of time
  4. Patience, Endurance or the ability to massively parallelize the process of trying, trying, trying... as you are basically brute forcing every combination of button presses. But fortunately when you are failing you will have a sense of how successful you were based on how far you got in the level and how quickly you got there. Then you can take that as a starting point for further tries... or the next generation when shifting to evolutionary terms...
Worth a read is this paper which explains it much better than I tried (maybe my children will be more successful in explaining ;-)



And while we are at it... here goes Mario Kart

Software Development on SAP HANA (Update Q4/2016)



In this course, we will focus on the new and improved features that were introduced in SAP HANA SPS 11 and 12. Developers taking this course should be able to get up to speed quickly and begin leveraging these new features to enhance their own productivity, as well…

When I just finished up first week's lectures and assignments I must admit I finally feel home. With XSA finally open and industry standards are adopted, rathen than reinventing the wheel over and over again:

  • Using GIT as a versioning repository instead of storing design time artefacts in database tables of the production system
  • Incorporating concepts of container based isolation opposed to "single-process-rules-them-all" approaches
  • Building on Cloud Foundary and thereby being much more open for existing applications and runtimes being migrated and then run on SAP HANA
  • Abstracting application users from technical users for accessing system or database ressources while unifying authentication and authorization
Now the HANA Platform opens itself to the rich ecosystem of that open source has to offer. As a developer I can use existing know how from non SAP backgrounds and maybe even new patterns and technologies emerge that you can take away from HANA and apply it in other areas and on other platforms.

Yes, it finally feels like the right direction.



Wednesday, November 09, 2016

Google Slides API may power my future Slide Applications

So now Google is publishing its Slides API for programmatic use. This opens up a whole new world of slide generation.



This is especially interesting because I have previously been building my own REST Services for a Slide Service that we use for our own SaaS products at SNP Schneider-Neureither & Partner AG - such as the SNP System Scan. Results may look like this and a fully generated using a home-grown REST Service API.



open fullscreen in new window

As far as the REST API is concerned it takes some slide definition in JSON fomat that looks something like this:


{
   "title":"Fun with auto generated Slide Show",
   "author":"Dominik Wittenbeck",
   "subtitle":"",
   "header":"SNP Slideshow",
   "footer":"
",
   "slides":[
      {
         "id":"005056BF5BE41EE6A9D91E8EC1102DD3",
         "title":"First Slide with some HTML",
         "topline":"SNP Slides Showcase",
         "html":[
            "..."
         ]
      },
      {
         "id":"005056BF5BE41EE6A9D91E8EC1104DD3",
         "title":"Second Slide with child slides",
         "topline":"SNP Slides Showcase",
         "items":[
            {
               "id":"005056BF5BE41EE6A9D91E8EC1106DD3",
               "title":"Second Slide with child slides",
               "topline":"SNP Slides Showcase",
               "html":[
                  "..."
               ]
            },
            {
               "id":"005056BF5BE41EE6A9D91E8EC1108DD3",
               "title":"Child Slide 2",
               "topline":"SNP Slides Showcase",
               "html":[
                  "..."
               ]
            }
         ]
      },
      {
         "id":"005056BF5BE41EE6A9D91E8EC110ADD3",
         "title":"Third Slide with a Chart",
         "topline":"SNP Slides Showcase",
         "layout":"vertical",
         "html":[
            "...",
            "..."
         ]
      }
   ]
}


Besides the REST API I have build additional higher level APIs, that can used e.g. directly in ABAP.

REPORT zdwi_generate_slides_test.
*"--- DATA DEFINITION -------------------------------------------------
TYPE-POOLSabap.

*"--- PROCESSING LOGIC ------------------------------------------------
START-OF-SELECTION.
  PERFORM main.

FORM main.
*"--- DATA DEFINITION -------------------------------------------------
  DATAlr_deck TYPE REF TO /snp/cn02_cl_slidedeck.
  DATAlr_slide TYPE REF TO /snp/cn02_cl_slide.
  DATAlr_sub_slide TYPE REF TO /snp/cn02_cl_slide.
  DATAlr_chart TYPE REF TO /snp/cn02_cl_slide_chart.
  DATAlv_id TYPE string.
  DATAlt_t000 TYPE TABLE OF t000.
  DATAlv_layout TYPE string.
  DATAlv_html TYPE string.
  DATAlv_url TYPE string.

*"--- PROCESSING LOGIC ------------------------------------------------
  lv_id /snp/cn00_cl_string_utils=>uuid).

  "Generate the slidedeck
  lr_deck /snp/cn02_cl_slidedeck=>create(
    iv_id lv_id
    iv_title 'Fun with auto generated Slide Show'
    iv_author 'Dominik Wittenbeck'
    iv_header 'SNP Slideshow'
    iv_footer '<br/>'
  ).

  "--- Add first slide with some HTML Content
  lr_slide /snp/cn02_cl_slide=>create(
    iv_title 'First Slide with some HTML'
    iv_topline 'SNP Slides Showcase'
  ).

  CONCATENATE
    '<h1>' 'Headline' '</h1>'
    '<p>'
      'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam'
      'nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam'
      'erat, sed diam voluptua. At vero eos et accusam et justo duo dolores'
      'et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est'
      'Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur'
      'sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore'
      'et dolore magna aliquyam erat, sed diam voluptua. At vero eos'
      'et accusam et justo duo dolores et ea rebum. Stet clita kasd'
      'gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.'
    '</p>'
  INTO lv_html SEPARATED BY space.
  lr_slide->add_htmllv_html ).
  lr_deck->add_slidelr_slide ).


  "--- Create a second Slide with child slides
  lr_slide /snp/cn02_cl_slide=>create(
    iv_title 'Second Slide with child slides'
    iv_topline 'SNP Slides Showcase'
  ).

  "...with one child slide...
  lr_sub_slide /snp/cn02_cl_slide=>create(
    iv_title 'Second Slide with child slides'
    iv_topline 'SNP Slides Showcase'
  ).

  CONCATENATE
    '<p>'
      'Check out the arrows on the lower right, this slide has another child slide'
    '</p>'
  INTO lv_html.

  lr_sub_slide->add_htmllv_html ).
  lr_slide->add_slidelr_sub_slide ).

  "...and a second child slide...
  lr_sub_slide /snp/cn02_cl_slide=>create(
    iv_title 'Child Slide 2'
    iv_topline 'SNP Slides Showcase'
  ).

  lr_sub_slide->add_html'Content of child slide 2' ).
  lr_slide->add_slidelr_sub_slide ).

  "...oh, and don't forget to add the main slide to the deck ;-)
  lr_deck->add_slidelr_slide ).


  "--- On the 3rd Slide letzt incorporate some data
  "Let's just fetch basic information about all clients...
  SELECT FROM t000 INTO TABLE lt_t000.

  "also split that slide into several parts using a layout
  lr_slide /snp/cn02_cl_slide=>create(
    iv_title 'Third Slide with a Chart'
    iv_topline 'SNP Slides Showcase'
    iv_layout 'vertical'
  ).

  "...and put that data in a bar chart in the
  " first part of the layout (=left side)
  lr_chart /snp/cn02_cl_slide_chart=>create_bar).
  lr_chart->set_data(
    it_data lt_t000
    iv_x_columns 'ORT01' "Show number of clients per location
  ).
  lr_slide->add_chartlr_chart ).

  "...and put some descriptive text to the second part of
  " the layout (=right side)
  CONCATENATE
    '<p>'
      'This is some descriptive text for the chart'
    '</p>'
    '<ul>'
      '<li>' 'and while' '</li>'
      '<li>' 'we''re at it, let''s' '</li>'
      '<li>' 'have a few bullet points' '</li>'
    '</ul>'
  INTO lv_html SEPARATED BY space.

  lr_slide->add_htmllv_html ).


  "...oh, and don't forget to add the main slide to the
  " deck... again  ;-)
  lr_deck->add_slidelr_slide ).

  "Publish the slide deck via the REST Service and Report
  " back the URL that would show it in a browser
  lv_url lr_deck->get_url).
  WRITE/ lv_url.

ENDFORM.

So with the newly published Google Slides API maybe I could take this one step further....

Sunday, October 23, 2016

"Air"wareness


Finally I know at least somewhat where I am in mid air... well most of the time ;-) Trying to get "air"wareness...

ReactCasts Episode 1


I really enjoy generic approaches to common problems. Abstraction - once mastered - makes it easy to dump off mental stress and advance.

Friday, October 21, 2016

Semantic Notation – The Next Big Thing in BI?


From a methodological viewpoint, the visualization of management information is very similar to visualization in engineering drawings, the visualization of music, and visualizations in many other disciplines such 

Immutable User Interfaces (Lee Byron) - Full Stack Fest 2016

Enlightning talk on modern web application achitecture - including a deeper, challenging message. Really you should not miss it!

MobX tutorials - MobX + React is AWESOME

Not that I have tried it yet, but MobX looks like a straight forward alternative, especially for developers, that used to work with classical Model-Classes for a long time. It just seems so familiar.



GITHUB PULL REQUEST, Branching, Merging & Team Workflow

It's embarassing enough that I don't work with GitHub more than downloading repositories as ZIPs... Oh man, so much more to it...



Github Tutorial For Beginners - Github Basics for Mac or Windows & Sourc...

Well this one is to get started. Yes and really everyone in the software industry should know source/version control..



Ryan Florence - ‹Rethinker stop={false}/›

Sometimes it's good to rethink our common practises. I'm not sure if I would apply this to a productive app, but it's worth thinking about the approaches presented.