Skip to content

Instantly share code, notes, and snippets.

@jdoxey
jdoxey / image_to_plantuml_sprite.sh
Created April 25, 2020 06:45
Generate PlantUML sprite from any image
#!/bin/sh
# requires imagemagick and plantuml
convert $1 -colorspace Gray -resize 16x16 -flatten /tmp/sprite.png
java -jar ~/bin/plantuml.jar -encodesprite 16 /tmp/sprite.png
@jdoxey
jdoxey / generatePKCECodeVerifier.js
Last active February 9, 2020 22:18
OAuth2 and OIDC now recommend that a single page app (SPA) should use the authorization code flow with the addition of PKCE to strengthen token handoff. I didn't find a simple code example of generating the code_verifier in JavaScript in a browser so I created this. It is an implementation of the method suggested in the PKCE spec (https://tools.…
function generatePKCECodeVerifier() {
var buffer = new ArrayBuffer(96); // 96 bytes creates a 128 character base64 encoded string
var uint8Array = new Uint8Array(buffer); // Uint8 makes getRandomValues choose numbers betwee 0 and 255
(window.crypto || window.msCrypto).getRandomValues(uint8Array);
var binaryString = String.fromCharCode.apply(null, uint8Array); // Utilise 'apply' converting array to function params
return btoa(binaryString).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ''); // base64url encoding
}
export PROMPT="[%t] %B%F{green}%n@%m%f:%F{blue}%c %# %f%b"
#include <pebble.h>
static TextLayer *hello_text_layer;
static void message_received(DictionaryIterator *iterator, void *context) {
char *message = dict_find(iterator, 0)->value->cstring;
text_layer_set_text(hello_text_layer, message);
text_layer_set_font(hello_text_layer, fonts_get_system_font(FONT_KEY_ROBOTO_BOLD_SUBSET_49));
}
Pebble.addEventListener("ready", function(event) {
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200) {
var firstMin = request.response.match(/class="min">([0-9]+)</)[1];
Pebble.sendAppMessage({ 0: firstMin });
}
};
request.open("GET", "http://www.bom.gov.au/vic/forecasts/melbourne.shtml", true);
request.send();
app_message_register_inbox_received(message_received);
app_message_open(app_message_inbox_size_maximum(), 0);
static void message_received(DictionaryIterator *iterator, void *context) {
char *message = dict_find(iterator, 0)->value->cstring;
APP_LOG(APP_LOG_LEVEL_DEBUG, "Got message: %s", message);
}
Pebble.sendAppMessage({ 0: "From JavaScript" });
Pebble.addEventListener("ready", function (event) {
console.log("*** Our JavaScript Running");
});
text_layer_destroy(hello_text_layer);