Skip to content

Instantly share code, notes, and snippets.

@jcgregorio
jcgregorio / binder.js
Last active August 15, 2017 04:37
Binds a Redux state store to and from HTML elements.
// Binder makes it easy to setup bindings between data stored in a Redux
// store and HTML elements.
class Binder {
// store - A Redux store.
// dispatch - A function called to update the state in store.
// ele - The root element where all element searches begin from, i.e.
// querySelectorAll is run on this element. Defaults to document.
constructor(store, dispatch, ele = document) {
this.to = [];
@jcgregorio
jcgregorio / urlreflector.js
Created August 15, 2017 04:54
StateTools
this.StateTools = this.StateTools || {};
(function(sr) {
"use strict";
// A Promise that resolves when DOMContentLoaded has fired.
sr.DomReady = new Promise(function(resolve, reject) {
if (document.readyState != 'loading') {
// If readyState is already past loading then
// DOMContentLoaded has already fired, so just resolve.
resolve();
<!DOCTYPE html>
<html>
<body>
<div id=target></div>
<script type="module" charset="utf-8">
import { html, render } from './lit-html.js';
const renderForm = (entity) => {
const e = [];
Object.keys(entity).forEach((attr) => {
@jcgregorio
jcgregorio / spinner-bw.css
Created November 8, 2017 22:06
An activity spinner using Custom Elements.
spinner-bw {
display: none;
border-radius: 50%;
width: 2em;
height: 2em;
border: 0.4em solid #A6CEE3;
border-left: 0.4em solid #1F78B4;
animation: spinner-bw-spin 1.5s infinite linear;
}
window.customElements.define('subreddit-van', class extends HTMLElement {
// Only get callbacks when our 'name' attribute changes.
static get observedAttributes() { return ['name']; }
// Called when our 'name' attribute changes.
attributeChangedCallback(attr, oldValue, newValue) {
if (newValue === '') {
return
}
fetch(`https://www.reddit.com/r/${ newValue }/top.json?limit=5`).then(resp => {
<!DOCTYPE html>
<html>
<head>
<title>select-sk demo</title>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=egde,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript" charset="utf-8">
// This bit of script loads the custom elements v1 polyfill, but only if required.
if (!window.customElements) {
foo: foo.c foo.h bar.c bar.h
gcc bar.c foo.c -o foo -lm
clean:
rm foo foo.o bar.o

Create a Google Cloud Storage bucket, and then create a service account that has Admin access to that bucket. Export a JSON key of that service account and store it at:

~/.config/{bucket name goes here}/key.json

FROM debian:testing-slim
RUN apt-get update && apt-get upgrade -y && apt-get install -y \
git \
python \
curl
RUN mkdir -p --mode=0777 /workspace/__cache \
&& groupadd -g 2000 skia \
&& useradd -u 2000 -g 2000 --home /workspace/__cache skia
@jcgregorio
jcgregorio / helloweb.yaml
Created January 1, 2020 18:10
helloweb deployment + service + ingress
apiVersion: apps/v1
kind: Deployment
metadata:
name: helloweb
labels:
app: hello
spec:
selector:
matchLabels:
app: hello