Skip to content

Instantly share code, notes, and snippets.

Kyle Graehl kzahel

Block or report user

Report or block kzahel

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile

Keybase proof

I hereby claim:

  • I am kzahel on github.
  • I am kzahel ( on keybase.
  • I have a public key whose fingerprint is DA94 D8F4 2077 A469 1F1A EF8E 8DAF 10FD 6F6D BD3D

To claim this, I am signing this object:

import json
import os
""" to get the following string, i went to and opened devtools and typed
for (var i=0; i<a.length ; i++) { ah.push(a[i].href) }
import collections
class LRUCache:
def __init__(self, capacity):
self.capacity = capacity
self.cache = collections.OrderedDict()
def get(self, key):
value = self.cache.pop(key)
kzahel /
Created Oct 9, 2016
delete .DS_Store and the other extended files ._*
#WHAT="echo" #uncomment this for dry run
echo "Going to remove mac extended files in $1"
read -p "press enter key to continue"
find $1 -type f -name "._*" -exec $WHAT "{}" \;
find $1 -type f -name ".DS_Store" -exec $WHAT "{}" \;
kzahel /
Created Sep 4, 2016
replace recursive text exclude .git directory
import os, fnmatch
def findReplace(directory, find, replace, filePattern):
for path, dirs, files in os.walk(os.path.abspath(directory), topdown=True):
dirs[:] = [d for d in dirs if d not in '.git']
for filename in fnmatch.filter(files, filePattern):
filepath = os.path.join(path, filename)
with open(filepath) as f:
s =
s = s.replace(find, replace)
with open(filepath, "w") as f:
View gist:6eb6ebaa7a495e7329bc0392305a2db3
function wait_for_devtools( callback, giveup_after ) {
giveup_after = giveup_after || 10
var start =
var timeout
var triggered = false
var element = new Image();
element.__defineGetter__('id', done)
function done() {
if (triggered) return ''
View audiotest.html
<audio id="myaudio" preload="auto" src="data:audio/wav;base64,UklGRiZvAABXQVZFZm10IBAAAAABAAEAESsAABErAAABAAgAZGF0YQJvAACAgoaJjIuJiIuNkZSXmZqdn52bnJ6hoqGhoqOko6CenqGkpaepq62uraqoqKmppqKfn52alpKQkZSTkIuKiYaDf318fX5+e3l4eHZzc3R3en+Afn6Ag4OCgoWHio2NjIuKiIWDhIeKjI2MiYWBf3x7foKEhYSCfn19fn+Ch4uNjYuIhYSDgYKEh4mJiYeFgoKBgIKEhYWEg4J/fn2AhIuPkI+NiYeFg4OFhoiGhIGAfn+Af4CDhYaEg4KAgYKBgYSHiYeGhYSDgoB/fXx7eHRwbm5ub3FydHV3dnV1eX2BhYmOkZWVlpeYmp2gpKipp6akoZ6bmJWVl5eWk5CLh4aEhIKDhISAenVvbGtoZGJjYmFcVlNSVFNQTlBRUU1HQkBCRUZGR0tOTkxGQ0ZKTU5OUVVXVE5LS09RUVBRVVdXUk1NUVVYWFldYmNfWlpeYWRmaWxxcnFubG5ydHV2d3h3dXFubnF0dHJyc3JycGxtcXl9gIGBg4WDf3x8gISFhoeJiYeCgH+Ei46NjYyLiYeEgYSJjo+PkJGRkI2MjpOWl5WVlZaVko+Qk5iYlJGQj42Jh4eKjYyHhIODhIF+fX+ChIJ8eHd2dHJxc3Z4eHZ0dnd4d3h6foKCgICAgH97eHd3dXNvbG1ub25qZ2lraGNfXV5hX11cXV5gXl1dYGNmZ2psb29uamhoamtqamlpZ2JcV1dYWlteYGRmZ2NfYGNmbHBydnd2cWtoam1wdXd4eXx5dnR0d3h7fH6AgoJ+eXR0c3N2e3+CgoB5dXR2d3p+hIiJiYaDgoSJkZifpqmqq6qoqKiprLC1uLi1r6mlpaanqq+ztLGro5uYlpeZmpydnJaOh4KCgYODhYiJiIR/fX1/
View auto indent
to get previous behavior:
(define-key global-map (kbd "RET") 'newline-and-indent)
now why would they go and change the default of enter key? :-)
kzahel / gist:1530ce5e00a7124bff60c8f91324eda8
Last active May 2, 2016
ChromeOS sshd openssh server
View gist:1530ce5e00a7124bff60c8f91324eda8
sudo su
apt-get install -y openssh-server iptables
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
mkdir -p -m0755 /var/run/sshd
View ssh check host fingerprint visually
ssh -o VisualHostKey=yes -o FingerprintHash=md5 {host}
The authenticity of host '{host} (ip)' can't be established.
ECDSA key fingerprint is MD5:f9:8d:d8:fc:93:7a:fb:1e:90:a2:4c:49:26:ef:cf:d1.
+---[ECDSA 256]---+
| |
| |
| . o |
| = o . |
| S . o |
| + * = . |
You can’t perform that action at this time.