Skip to content

Instantly share code, notes, and snippets.

Working from home

German Viscuso germanviscuso

Working from home
View GitHub Profile
slug title author author_url author_image_url tags
A deep-dive on a Progressive Web App implementation for a React-based App platform (DHIS2)
German Viscuso

At DHIS2 we're a team of fully remote developers working on the world's largest open-source health information management system, used by 73+ countries for collecting and analyzing health data. You can check our repos here but basically, at the risk of oversimplifying things, we maintain a fully APIfied Java back-end core project and a series of core web apps built on top of a React based front-end technology that we call the App Platform supported by a design system with custom UI components (we have advanced Analytics and an Android SDK too but

germanviscuso / index.js
Created Nov 13, 2020
Alexa Node SDK Navigation Directive
View index.js
return handlerInput.responseBuilder
.speak('Starting navigation')
type: 'Navigation.SetDestination',
destination: {
singleLineDisplayAddress: "Calle de San Mateo 13, 28004",
multipleLineDisplayAddress: "Calle de San Mateo 13, 28004",
name: "Museo del Romanticismo",
coordinate: {
latitudeInDegrees: 40.425860,
germanviscuso /
Last active Mar 3, 2022
Use old and new ASK-CLIs in parallel (Alexa Skills Kit Command Line Interface)

I advise that if the VSCode plugin supports the ask-cli v2 then use Method 1. If we're not there yet then use Method 2 if you want the VSCode plugin to work. If you don't care about the plugin just go with Method 1.

Method 1

After following these instructions the old ask-cli v1.7.23 will run via the command ask1 and the latest ask-cli v2 via the command ask. You will be able to update the ask-cli v2 as usual. You can skip all steps below to create the npm package by just doing:

germanviscuso / example-query.js
Created Apr 4, 2020 — forked from thetrevorharmon/example-query.js
Query JSON with S3 Select in Node.js
View example-query.js
// See for a full explanation of this code
const AWS = require('aws-sdk');
const S3 = new AWS.S3();
exports.handler = async (_, context) => {
try {
const query = 'SELECT * FROM s3object[*].results[*] r;';
// test query is against data from
germanviscuso / index.js
Last active Feb 24, 2020
Quick code to support an intent that plays long form audio in an Alexa skill
View index.js
var stream = {
"token": "my_token", // no auth token, you decide what this is
"url": 'https://my_song.mp3',
"metadata" : {
"title": "My Song Title",
"subtitle": "My Song Subtitle",
"art": {
"sources": [
"contentDescription": "image",
germanviscuso / gist:26f3f96d9048c5446acc6e4cfe8009d6
Created Jan 13, 2020
Overwrite existing git repo with another one
View gist:26f3f96d9048c5446acc6e4cfe8009d6
(Switch to old repo)
> git remote add new-origin new_repo_url
> git remote update
> git push -f new-origin master --follow-tags (WARNING: new repo gets overwritten!)
View index.js
// This sample demonstrates handling intents from an Alexa skill using the Alexa Skills Kit SDK (v2).
// Please visit for additional examples on implementing slots, dialog management,
// session persistence, api calls, and more.
const Alexa = require('ask-sdk-core');
const LaunchRequestHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'LaunchRequest';
handle(handlerInput) {
germanviscuso / index.js
Last active Feb 24, 2020
Example on how to user personId as primary key in an Alexa Persistence adapter
View index.js
function getPersistenceAdapter() {
// This function is an indirect way to detect if this is part of an Alexa-Hosted skill
function isAlexaHosted() {
return !!process.env.S3_PERSISTENCE_BUCKET;
if (isAlexaHosted()) {
const {S3PersistenceAdapter} = require('ask-sdk-s3-persistence-adapter');
return new S3PersistenceAdapter({
bucketName: process.env.S3_PERSISTENCE_BUCKET,
objectKeyGenerator: keyGenerator
germanviscuso / gist:3f6f24644905d272ea3778b729bbf5e2
Created Aug 21, 2019
Personal AWS resources in Alexa Hosted Skills
View gist:3f6f24644905d272ea3778b729bbf5e2
How do I set up an Alexa-hosted skill to use resources on a personal AWS account?
With the AWS Lambda execution role ARN, you can seamlessly use resources on a personal AWS account to expand the functionality of your Alexa-hosted skill. For example, you can connect the Alexa-hosted skill to an Amazon DynamoDB table. Take the following steps to set up your Alexa-hosted skill to use resources on a personal AWS account:
In the Alexa developer console, open your Alexa-hosted skill, and then in the code editor click the icon that has hover text AWS Lambda Role Execution ARN. Copy the ARN.
If you have not done so already, on your personal AWS account, in the Identity and Access Management (IAM) dashboard, create a role that allows access to the resource that you want your Alexa-hosted skill to access.
In the IAM dashboard, click Roles, click the name of the role you want to edit, and then click the Trust relationships tab.
Edit the trust relationship to include the sts:AssumeRole action, and specify the AWS Lambda
germanviscuso / en-US.js
Created Aug 13, 2019 — forked from KayLerch/en-US.js
Optimized i18n request interceptor for Alexa custom skills in Node. Loads only required language assets from external files and provides some convenient functions to read them. Will also let you store localized settings represented as JSON objects in your language files.
View en-US.js
module.exports = Object.freeze({
translation: {
welcome: 'Howdy',
images: [
background: 'https://image/en-US.png'
background: 'https://image/en-US2.png'