From ccd32987f733d699efbe518b1f48ce737b64250b Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Tue, 11 May 2021 19:23:43 -0600 Subject: [PATCH 1/3] Keybindings on facelight for Brian "Danger" Hicks --- toys/facelight/app.js | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/toys/facelight/app.js b/toys/facelight/app.js index 46befc9..873f63e 100644 --- a/toys/facelight/app.js +++ b/toys/facelight/app.js @@ -1,3 +1,5 @@ +const defaultTemp = 5500 + function colorTemperatureToRGB(kelvin) { // https://gist.github.com/paulkaplan/5184275 @@ -42,7 +44,7 @@ function changeTemp(e) { let tempOut = document.querySelector("#tempOut") let temp if (!e) { - temp = localStorage.temp || 5500 + temp = localStorage.temp || defaultTemp } else if (e.target) { temp = Number(e.target.value) } else { @@ -56,8 +58,26 @@ function changeTemp(e) { localStorage.temp = temp } +function keydownEvent(event) { + let temp = Number(localStorage.temp || defaultTemp) + switch (event.key) { + case "ArrowLeft": + case "ArrowDown": + event.preventDefault() + changeTemp(temp - 100) + break + case "ArrowRight": + case "ArrowUp": + event.preventDefault() + changeTemp(temp + 100) + break + } + console.log("new temp is", temp) +} + function init() { - document.querySelector("#temp").addEventListener("input", changeTemp) + document.querySelector("#temp").addEventListener("input", changeTemp) + document.addEventListener("keydown", keydownEvent) changeTemp() if (navigator.serviceWorker) { navigator.serviceWorker.register("sw.js") From 55fa86fff1a7fc056a49afd2cc0d87670c914008 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Sun, 14 Nov 2021 12:39:33 -0700 Subject: [PATCH 2/3] Add Pocket Mastermind Game --- toys/index.md | 1 + toys/mastermind.pdf | Bin 0 -> 58884 bytes toys/mastermind.ps | 109 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 toys/mastermind.pdf create mode 100644 toys/mastermind.ps diff --git a/toys/index.md b/toys/index.md index e8169d7..b512cc3 100644 --- a/toys/index.md +++ b/toys/index.md @@ -14,5 +14,6 @@ Maybe you'll just wonder why I spend so much time on this garbage. * [Grep Dict](grepdict/) runs `grep` on `/usr/share/dict/words`; perfect for cheating on crossword puzzles * If you need to write someone a letter but really don't want to, try my [social letter generator](letter.html) +* [Pocket Mastermind](mastermind.pdf) / [PostScript Source](mastermind.ps) * [Crunt](crunt.html) * [Serpeński Gasket on Tektronix Terminal](serpenski.html) which amazed 4 whole people at my high school in 1991. diff --git a/toys/mastermind.pdf b/toys/mastermind.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ebc6648aa87866d9433cc1eea866d956e8d7758a GIT binary patch literal 58884 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 +%%Orientation: Landscape +%%DocumentMedia: US-Letter 612 792 80 ( ) ( ) +%%EndComments + +/pagewidth currentpagedevice /PageSize get 0 get def +/pageheight currentpagedevice /PageSize get 1 get def +/r 10 def + +/pie { + 1 dict begin + /r exch def + + gsave + currentpoint translate + + 0 60 360 { + gsave + dup rotate + 120 mod 60 div + 0.4 mul 0.0 add setgray + + 0 0 moveto + 0 r lineto stroke + grestore + } for + + r 0 moveto + 0 0 r 0 360 arc + closepath stroke + + grestore + end +} def + +/grid { + 1 dict begin + /r exch def + + % Big plus + r 2 mul 0 rlineto + r -1 mul r -1 mul rmoveto + 0 r 2 mul rlineto + + r -1 mul r -2 mul rmoveto + 0 r 2 mul rlineto + r 2 mul 0 rlineto + 0 r -2 mul rlineto + r -2 mul 0 rlineto + stroke + end +} def + +/pierow { + 2 dict begin + /gridp exch def + /r exch def + gsave + currentpoint translate + 0 1 3 { + r 2.5 mul mul + 0 moveto + r pie + } for + + gridp { + 4 r 2.6 mul mul + 0 moveto + r 0.7 mul grid + } if + grestore + end +} def + +/board { + 10 dict begin + /r exch def + gsave + r false pierow + 0 r 2.0 mul rmoveto + 0 1 9 { + pop + 0 r 2.2 mul rmoveto + r true pierow + } for + grestore + end +} def + +0 1 1 { + pop + 1 2 3 { + 10 dict begin + gsave + pagewidth 2 div pageheight 2 div translate + 90 mul rotate + pageheight -2 div pagewidth -2 div translate + 50 30 translate + 0 1 3 { + pageheight 4 div mul 0 moveto + r board + } for + grestore + end + } for + showpage +} for From efd47b71a847e8104329fea655a8222d5658812b Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Sun, 14 Nov 2021 12:41:11 -0700 Subject: [PATCH 3/3] Add Pocket Mastermind Game --- toys/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/toys/index.md b/toys/index.md index b512cc3..400eeae 100644 --- a/toys/index.md +++ b/toys/index.md @@ -14,6 +14,6 @@ Maybe you'll just wonder why I spend so much time on this garbage. * [Grep Dict](grepdict/) runs `grep` on `/usr/share/dict/words`; perfect for cheating on crossword puzzles * If you need to write someone a letter but really don't want to, try my [social letter generator](letter.html) -* [Pocket Mastermind](mastermind.pdf) / [PostScript Source](mastermind.ps) +* [Pocket Mastermind PDF](mastermind.pdf) ([PostScript Source](mastermind.ps)) * [Crunt](crunt.html) * [Serpeński Gasket on Tektronix Terminal](serpenski.html) which amazed 4 whole people at my high school in 1991.