Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
Showing results for 
Search instead for 
Did you mean: 
Developer Advocate
Developer Advocate
My first live stream happened last week, and I think on balance I can say it was successful. Read more about it here.

On Friday last week I live streamed for the first time, on Twitch. A couple of days beforehand, I published the post "Hands-on SAP dev with qmacro - new live stream series" to give folks a heads up. That post is still relevant, and it's where you can find out more about the idea for live streaming, the plans, a schedule, and how to watch.


I'd set up as much as could beforehand, in terms of hardware and software (I plan to write a separate blog post on the details of this setup, it's a fascinating area and was completely new to me).

In my streaming software setup I have three main "scenes" set up: "Standby", "Video & Chat" and "Main", which I can switch between as and when I need to.

I hit the "go live" switch at a few minutes before the hour, with my "Standby" scene active. This allows the early viewers to know that the stream will be starting soon, and exposes the stream chat  in the stream video itself, too which is a useful touch, I think.

At 0800 Manchester time (I'm trying to make this an official timezone, not sure how successful I'll be) I switched from the "Standby" scene to the "Video & Chat" scene which adds a large webcam capture window, which gives me a chance to get closer to the viewers while I explained the idea of the live stream initiative and the plan for the next hour.

Then it was on to the main business of the episode, and for that I switched to the "Main" scene, which included (as you can see in the screenshot) lots of detail including the capture of one of my Displays, as well as a smaller webcam capture window and of course the live chat.

The episode

I was absolutely overwhelmed by the number of viewers who not only came watch the live stream, but also to interact with each other in the chat. The expectations I'd set were quite modest, and it's fair to say that these expectations were far surpassed. Thank you to all of you who joined the session - you all made it what it was, super successful, fun, interactive and an event where I hope all of us learned something (I know I did!).

Here are some stats from Twitch about the session itself:

Over 50 average viewers, peaking at over 60 - I think that's wonderful for the first episode. I am looking forward very much to the next episode, which of course is this coming Friday (25 Jan). For those of you who don't know, the idea is that it's weekly, on Fridays, always at the same time, for an hour, starting at 0800 Manchester time, which translates into the following times around the world: 0900 in Berlin, 1330 in Bengaluru and 1900 in Sydney (more in the schedule section of my previous post).

Discussion was active throughout, too, with 134 chat messages in total.

We looked briefly at this tutorial on the site: "Create a Business Service with Node.js using Visual Studio Code" and specifically examined the nicely modern JavaScript in the "Provide mock data" and "Add custom logic" steps, noting various modern constructs and techniques such as destructuring, fat arrow function definition syntax, and more.

We then used parts A and B of the Day 1 puzzle from Advent Of Code 2018 to warm up our collective grey matter a little. We based our hacking activities around a simple test harness that expects a dayN.js file with two exported solver functions a and b, and a dayN.input file with the day's input.

This is what the test harness (index.js) looked like:
// Test runner for AOC solutions

// The day is expected to be passed via an env var 'DAY'
// From this we make the JS module (e.g. day1.js) and the input (e.g. day1.input)
solver = './day' + (process.env.DAY || 1),
input = solver + '.input'

// To clean the input generically
clean = x => x
.split(/\n/) // split lines into array
.map(x => x.replace(/\r$/, '')) // remove any carriage returns
.filter(x => x.length), // drop any empty lines

// Load the day's solver (which should have 'a' and 'b' functions)
solve = require(solver)

// Load the input, clean up, and run the solvers a and b
require('fs').readFile(input, 'utf8', (err, data) => {

const input = clean(data)

// Output solutions

We used some map and reduce goodness to solve part a, and then looked at building a "seen" mechanism using a closure and an Immediately Invoked Function Expression (IIFE) to solve part b.

It was fun!

Thank you

I'm leaving the most important section to the end of this post, which is to recognise and thank everyone who joined, you are the ones who made the episode successful. Some of you had already started following me on Twitch, and some joined the stream and followed there and then.

abapfreak, Espersura, StErMi87, avhbn, hobru2000, aminmarsafy, ccmehil, saffronsoul, uwek0, larshp, fredverheul, christianguenter, nocheintobi, dn1977, venkymachineni, pimpmycode, CariFaine, pjcools, chandanpraharaj, ljadhav, bharath86, sygyzmundovych, rgeeks_mrd, hausenhexe, mexlance, nabheetmadan, 5PERI, henrik_da, cleSAP, tpham207, Roberdinho, lvhengel, mexico_man, hfumey, ennowulff, imyourtwitchdoctor, Seiivo, ceedee666, koehntopp, rileyrainey, sevladimirs, darkworld2255, fullstackdaun, aydogdumurat, tassie_rocks, thulium3, mylesfenton, patrizia0103, IchBimsDeiMudda, nzamani, BungaloX, harunkar, CoreKeeper, callaghan001, sun150690, rohith480, alancecchini, hamzoo, ankit403, grabenschlaefer, tgrassl, fabianorosa1, rsletta, nypesap, sw1fm4n, Lupomania, ssurampally, vaihbavshetkar, uxkjaer, fulstak.

A special thank you to those that took part in the conversation. This series is all about learning from each other, so good on you.

For those who are interested in the subsequent episodes in this "Hands on SAP dev with qmacro" series and who are not already following, may I recommend you follow me on Twitch - go here: and hit the "Follow" button:

Find out in the updates section of my previous post how to get reminded of upcoming events.

Finally, in the words of the Sirius Cybernetic Corporation Complaints division (from Hitch Hiker's Guide to the Galaxy, of course): share and enjoy!