- The main control chip using Le Xin ESP32, Tensilica LX6 dual core processor, clocked at 240MHz, computing capacity of up to 600DMIPS, 520 SRAM, 802.11 KB chip b/g/n HT40 Wi-Fi transceiver, baseband, and LWIP protocol stack, Bluetooth (Bluetooth dual-mode integrated
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Define webhook for the Teams channel you're posting to. | |
// You need to create this webhook in Microsoft Teams, then paste the webhook URL in the string below | |
let vTeamsWebhook = 'https://outlook.office.com/webhook/......'; | |
// You need a data connection called "PostMessageToTeams" for this app to reload correctly. | |
// >>>>>>>>>>>>>>>>>>>>>>>>>>> | |
// Define subs |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// List all QVDs that should be loaded | |
// In this example the QVDs have a filename format of YYYYMMDD.qvd | |
// | |
// The rationale for loading QVDs this way, rather than using something like | |
// load "/some/path/*.qvd" where date > SomeDate | |
// is that the latter will have to test the date field of all lines within all QVDs in that directory. | |
// That might take a long time (and it will become slower over time, if new QVDs are added every day), whereas the method | |
// used in the code below offers (very close to) constant loading time. | |
// | |
For each Filename in 'D:\path\to\qvds' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This Sub enables prettified output of text to the reload progress window of Qlik Sense. | |
// Use it to get timestamped trace messages, that also have a prefix that makes them easier | |
// to spot in the reload progress windows and reload logs. | |
// | |
// Usage example: | |
// call NiceTrace ('This is a debug message, including a variable $(vMetaDataQVDPath)\abc.qvd') | |
sub NiceTrace (vL.Msg) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Restify Server CheatSheet. | |
// More about the API: http://mcavage.me/node-restify/#server-api | |
// Install restify with npm install restify | |
// 1.1. Creating a Server. | |
// http://mcavage.me/node-restify/#Creating-a-Server | |
var restify = require('restify'); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
set -e | |
CONTEXT="$1" | |
if [[ -z ${CONTEXT} ]]; then | |
echo "Usage: $0 KUBE-CONTEXT" | |
exit 1 | |
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var qsocks = require('qsocks') | |
var serializeApp = require('serializeapp') | |
var fs = require('fs-extra') | |
var Promise = require('promise') | |
function create(docname) { | |
qsocks.Connect({appname: docname}) | |
.then(function(global) { | |
return global.openDoc(docname) | |
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// The obvious way of finding the max/min value of a field might something like this: | |
// | |
// LOAD max(salesDate) Resident dataTable; | |
// | |
// However, if dataTable is very large (hundred of millions of lines or more, with many columns), the above will be | |
// very slow, as we will end up traversing that entire table. | |
// | |
// Instead, the fastest method of achieving the desired result is to load the FieldValue()s. | |
// We then only look at the values of the salesDate field itself, and not the entire dataTable table. | |
// Performance gains by many orders of magnitude can be gained by using this method. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<# | |
Run on the Central | |
#> | |
# Connect to Qlik Sense | |
# See https://github.com/ahaydon/Qlik-Cli/wiki/Establishing-a-connection for more connection options | |
Connect-Qlik | |
# Add the Node to the Cluster; store the password element of the response for the ZIP as $password | |
# nodePurpose: 0 (Production) / 1 (Development) / 2 (Both) | |
# engineEnabled, proxyEnabled, schedulerEnabled, $printingEnabled, $failoverCandidate as options | |
$password = New-QlikNode -hostname qlikserver2.domain.local -name qlikserver2 -nodePurpose 0 -engineEnabled -proxyEnabled |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let vStartOf2ndPreviousQuarter = Date(Floor(QuarterStart(Today(), -2)), 'YYYY-MM-DD'); | |
let vStartOf2ndPreviousQuarterNum = Num(Date(Floor(QuarterStart(Today(), -2)), 'YYYY-MM-DD')); | |
let vStartOfPreviousQuarter = Date(Floor(QuarterStart(Today(), -1)), 'YYYY-MM-DD'); | |
let vStartOfPreviousQuarterNum = Num(Date(Floor(QuarterStart(Today(), -1)), 'YYYY-MM-DD')); | |
let vStartOfCurrentQuarter = Date(Floor(QuarterStart(Today())), 'YYYY-MM-DD'); | |
let vStartOfCurrentQuarterNum = Num(Date(Floor(QuarterStart(Today())), 'YYYY-MM-DD')); | |
let vStartOfPreviousMonth = Date(Floor(MonthStart(Today(), -1)), 'YYYY-MM-DD'); |
NewerOlder