Skip to content

Instantly share code, notes, and snippets.

:octocat:
Have an Octotastic day!

hrchu hrchu

:octocat:
Have an Octotastic day!
Block or report user

Report or block hrchu

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
@hrchu
hrchu / test.py
Created Nov 25, 2019
Why map/filter is weaker than list comprehension or for loop iterating?
View test.py
alist = [[1,1],[1,1]]
assert([1, 1] == [x for x, y in alist]) # OK
for x, y in alist: # OK
assert x == 1
assert([1, 1] == list(map(lambda x, y: x, alist))) # TypeError: <lambda>() missing 1 required positional argument: 'y'
@hrchu
hrchu / how-to.md
Last active Nov 8, 2019 — forked from reywood/how-to.md
How to get a stack trace from a stuck/hanging python script
View how-to.md

How to get a stack trace for each thread in a running python script

Sometimes a python script will simply hang forever with no indication of where things went wrong. Perhaps it's polling a service that will never return a value that allows the program to move forward. Here's a way to see where the program is currently stuck.

Install gdb and pyrasite

Install gdb.

# Redhat, CentOS, etc
@hrchu
hrchu / yubikey4-ssh-macos.md
Last active Oct 26, 2019 — forked from ixdy/yubikey4-ssh-macos.md
Setting up ssh public key authentication on macOS using a YubiKey 4
View yubikey4-ssh-macos.md

Setting up ssh public key authentication on macOS using a YubiKey 4

I largely followed Florin's blog post, but have a few notes to add regarding issues I encountered:

Basic setup notes

  1. I used a YubiKey 4, while the blog describes using a YubiKey NEO. I'm sure a YubiKey 5 would also work. I'm also running macOS 10.13.6.
  2. I installed GPGTools as recommended. However, as I'll note later, it seems that gpg-agent only automatically starts when gpg is used; for ssh, you'll need to ensure it's running.
  3. Before generating your keys, decide what key size you want to use. If you run the list command inside gpg --edit-card, look for the Key attributes line to see what is currently selected. On my YubiKey 4, it defaulted to 2048 bits for all keys:
Key attributes ...: rsa2048 rsa2048 rsa2048
@hrchu
hrchu / install_phantomjs.sh
Created May 17, 2019
install phantomjs on ubuntu 16.04.4
View install_phantomjs.sh
# install phantomjs on ubuntu 16.04.4
wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
tar xvjf phantomjs-2.1.1-linux-x86_64.tar.bz2
sudo cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/bin/
phantomjs --version
sudo cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/
@hrchu
hrchu / docker_ubuntu_install.sh
Created Apr 30, 2019
Install docker and docker-compose on ubuntu 16.04 in one shot.
View docker_ubuntu_install.sh
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
View 1. basic flow with auth code and access token
@startuml
skinparam handwritten true
"You/Browser" -> slack.com: 1. I would like to access my files on Google Drive via your interface.
slack.com -> "You/Browser": 2. You should apply the "Authorization Code" from Google for me first.
"You/Browser" -> account.google.com: 3. I would like to permit slack.com to access my files.
account.google.com -> "You/Browser": 4. Are you sure?
"You/Browser" -> account.google.com: 5. [Y]
account.google.com -> "You/Browser": 6. Okay. Here is the "Authorization Code." Plz give it back to slack.com now.
"You/Browser" -> slack.com: 7. You can do what I asked now (with the Authorization Code which is just received from Google.)
slack.com -> account.google.com: 8. I would like to exchange the "Authorization Code" for the "Access Token."
@hrchu
hrchu / consumer.py
Created Mar 15, 2019
confluent-python-kafka High-level Consumer understanding
View consumer.py
from confluent_kafka import Consumer, KafkaError
c = Consumer({
'bootstrap.servers': 'mybroker',
'group.id': 'mygroup',
'auto.offset.reset': 'largest'
})
c.subscribe(['mytopic'], on_assign=print_assignment) # do not thing here
@hrchu
hrchu / thread_safe_queue.py
Created Nov 21, 2018
The synchronize lock decorator in python, implementing Stack using Queues as Example
View thread_safe_queue.py
from functools import wraps
from multiprocessing import Lock
def synchronized(tlockname):
"""A decorator to place an instance based lock around a method """
def _synched(func):
@wraps(func)
def _synchronizer(self, *args, **kwargs):
tlock = self.__getattribute__(tlockname)
View kafka_consumer_example.py
from confluent_kafka import Consumer, KafkaError
c = Consumer({
'bootstrap.servers': 'mybroker',
'group.id': 'mygroup',
'default.topic.config': {
'auto.offset.reset': 'smallest'
}
})
View log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<appender name="logstash" class="org.apache.log4j.net.SocketAppender">
<param name="Port" value="9527"/>
<param name="RemoteHost" value="127.0.0.1"/>
</appender>
You can’t perform that action at this time.